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 IDs
Section titled “Source IDs”| Source | Use it for |
|---|---|
vibe |
Vibe v1 files and v2 session directories under the local log root. |
How the import works
Section titled “How the import works”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.
Import and keep current
Section titled “Import and keep current”hansard import --source vibe --since allhansard index rebuildhansard config sources add vibehansard watcher restartReview the import in the app
Section titled “Review the import in the app”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.
What Hansard preserves
Section titled “What Hansard preserves”- 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.
Empty histories and raw replay
Section titled “Empty histories and raw replay”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.
Known limitations
Section titled “Known limitations”- 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.
Refresh an existing archive
Section titled “Refresh an existing archive”Parser suffix 2 requires a complete Vibe source reimport:
hansard import --source vibe --since allhansard index rebuild