Skip to content

Mistral Vibe

Mistral Vibe has used two durable session layouts. Vibe 1.x stores one JSON object per session. Vibe 2.x stores session metadata in meta.json and one message per physical line in messages.jsonl. Hansard detects both layouts, keeps their exact source bytes together, and converts them into the same archive contract.

Source Use it for
vibe Vibe v1 files and v2 session directories under the local log root.

Hansard reads the audited v1 monolithic-JSON and v2 split-JSON/JSONL cohorts under ~/.vibe/logs/session. The message stream supplies ordered user, assistant, system, and tool content, including reasoning, rich tool calls and results, resources, image descriptors, and manual shell records. Session metadata adds the working directory, Git state, model configuration, aggregate token and price totals, and tool outcomes. Nested agents/ directories become linked child sessions.

The parser requires total_messages to equal every physical transcript row. Unknown roles, empty records, malformed nested provider structures, invalid timestamps, and end times before start times fail closed. Every accepted row produces exactly one normalized message.

Vibe’s official v1-to-v2 migration copies the existing inline system row into the split message file. Hansard keeps that row as the same canonical system message as v1; it does not create a second transcript message from system_prompt metadata. A split source containing both representations fails as ambiguous.

Vibe 2.x records last_message_fingerprint in releases that support the writer guard. When the field is present, Hansard recomputes the exact upstream SHA-256 value and rejects malformed or mismatched evidence. Earlier v2 histories do not have the field, so Hansard records their cross-file completeness as unverified instead of claiming that the files form a verified pair.

Terminal window
hansard import --source vibe --since all
hansard index rebuild

After the import finishes, open Conversations and selectFilter & sort. Set Source toMistral Vibe, choose the backfill window underTime, and use Folder when the same harness appears in several projects. Select a result to inspect its messages, tool calls and results, files, commits, model and usage fields, and source provenance in one conversation view.

For a local source that should stay current, open Settings → Indexing & Imports. Automatic follows detected local harnesses; Custom lets Sources scannedselect an explicit set. Explicit cloud and account-export sources do not turn into background network jobs here. If the expected result is absent after resetting the conversation filters, return to the terminal import in this guide and add --explain-skips where supported.

  • Exact bytes for the v1 monolith or the complete v2 metadata/message pair.
  • Transcript messages, reasoning, tool calls and results, resources, image descriptors, and manual shell records.
  • Working directory, Git commit and branch, selected model, tokens, prices, and tool-outcome totals from session metadata.
  • Child agent directories as linked runs.
  • The detected storage cohort, physical row accounting, system-message storage fact, fingerprint status, and source snapshot identity.

A v2 source with an empty messages.jsonl and total_messages: 0 is recognized as intentional-empty. It is not corruption, but it does not create an empty archive conversation or invent a payload. Raw replay applies only to nonempty Vibe sessions that were archived with their complete source bundle. During replay, every component must still match its recorded role, size, digest, and snapshot identity.

  • Individual message records have no timestamps. Hansard distributes ordering timestamps across the validated session interval from metadata.
  • Earlier v2 histories without a writer fingerprint have exact physical-count validation but unverified cross-file completeness.
  • Repository attribution depends on session metadata because Vibe sessions are not grouped by project.
  • Session-level token and price totals cannot always be assigned to individual turns.

Parser suffix 2 requires a complete Vibe source reimport:

Terminal window
hansard import --source vibe --since all
hansard index rebuild