# Session tracing for Mistral Vibe Code. # # Verified against mistral-vibe 2.24.2 (vibe/core/hooks/models.py): the file is # an array of `[[hooks]]` tables, each with a unique `name`, a `type` of # pre_tool | post_tool | post_agent, and a `command` run through a shell with # the invocation JSON on stdin. # # Vibe loads this file only for a trusted folder. See ../EVALS.md for what the # three events can and cannot say - there is no session, prompt, compaction or # permission hook to attach to, so a Vibe trace is thinner than a Copilot one # and says so in its own `completeness` list. [[hooks]] name = "wiki-trace-pre-tool" type = "pre_tool" description = "Record an intended tool call. Observational only - never decides." command = "./tools/trace_ingest.py --source mistral-vibe --event tool.pre 2>/dev/null || true" timeout = 5.0 # `strict = false` is the default and is spelled out here because it is the # safety property that matters: under a non-strict hook, a crash or a timeout is # a no-op warning, so a broken observer can never deny a tool call. Set it to # true only for a hook that is meant to enforce something. strict = false [[hooks]] name = "wiki-trace-post-tool" type = "post_tool" description = "Record the outcome of a tool call: status, output, duration." command = "./tools/trace_ingest.py --source mistral-vibe --event tool.post 2>/dev/null || true" timeout = 5.0 strict = false # `strict` and `match` are rejected on post_agent - they are tool-hook fields. [[hooks]] name = "wiki-trace-post-agent" type = "post_agent" description = "Record the end of an agent turn." command = "./tools/trace_ingest.py --source mistral-vibe --event turn.end 2>/dev/null || true" timeout = 5.0