Mistral Vibe
Hansard reads two legacy Mistral Vibe session formats. Vibe 1.x saves each
session as one JSON file. The legacy Vibe 2.x engine saves session details in
meta.json and one message per line in messages.jsonl. Hansard keeps each
session’s original files together.
Vibe 2.26.0 uses Unified Harness by default. Hansard also reads its
logs/session/unified/<id>/CURRENT generation store in format v1, minor 8.
The commands below import both engines.
Source IDs
Section titled “Source IDs”| Source | Use it for |
|---|---|
vibe |
Legacy session files and Unified Harness history under ~/.vibe/logs/session. |
How the import works
Section titled “How the import works”Hansard reads the legacy and Unified Harness formats under ~/.vibe/logs/session. The messages supply
user, assistant, system, and tool content in order, including reasoning, tool
calls and results, resources, image references, and shell commands you ran
yourself. The session details add the working directory, Git state, model
settings, token and price totals, and tool results. Nested agents/ folders
become linked subagent sessions.
For Unified Harness, Hansard verifies the current generation, pooled chunks, and recovery journal. It preserves recorded message clocks, tool outcomes, configuration changes, lineage, and session token totals. An incomplete journal or unsupported version produces a capture error and leaves archived history intact.
For legacy split files, Hansard checks that total_messages matches the number of message lines. It
rejects a session with unknown roles, empty records, damaged nested data,
invalid timestamps, or an end time earlier than its start time. Every accepted
line becomes exactly one message in the conversation.
Vibe’s own upgrade from 1.x to 2.x copies the system message into the new
message file. Hansard keeps that as the same single system message, and does
not add a second one from the system_prompt field. A 2.x session that
contains both is rejected as ambiguous.
Newer Vibe 2.x releases save a last_message_fingerprint. When it is present,
Hansard recomputes it and rejects a session whose fingerprint does not match.
Earlier 2.x sessions do not have this field, so Hansard notes that it could not
confirm that the two files belong together.
Import and keep current
Section titled “Import and keep current”hansard import --source vibe --since allhansard index rebuildWith Automatic source selection, the watcher already includes vibe.
With a Custom list, enable it. The watcher picks it up within 30 seconds:
hansard config sources enable vibeReview the import in the app
Section titled “Review the import in the app”- When the import finishes, open Sessions and selectFilter & sort.
- Set Source to Mistral Vibe and setTime to the window you imported. UseFolder to narrow the list when you use this harness in several projects.
- Select a conversation to check its messages, tool calls, files, commits, model, and token usage.
To keep archiving new sessions from a local harness, openSettings → Imports. Automaticfollows every supported harness installed on this computer.Custom lets you turn individual harnesses on or off. Cloud sources turn on separately under Cloud agents, and ChatGPT, Claude.ai, Gemini, and Gemini Notebook / NotebookLM exports import withImport export…. Each also has its own import command. If a conversation you expect is missing after you reset the filters, run the import command on this page again with --explain-skips where the source supports it.
What Hansard preserves
Section titled “What Hansard preserves”- Exact copies of the 1.x session file, or of the 2.x
meta.jsonandmessages.jsonlpair. - Verified Unified Harness generation documents, pooled chunks, and recovery journals.
- Messages, reasoning, tool calls and results, resources, inline image bytes, image references, and shell commands you ran yourself.
- Unified Harness message times, tool failures, cancelled approvals, and session attachments.
- Each message as its own message, even when you repeated a prompt.
- Working directory, Git commit and branch, model settings, tokens, prices, and tool-result totals from the session details.
- Subagent folders as linked conversations.
- Which format the session used and whether its fingerprint was confirmed.
Known limitations
Section titled “Known limitations”- Legacy Vibe messages have no timestamps. Hansard anchors them to the session start and marks them as session order only. Resuming a session does not move earlier messages.
- For earlier 2.x sessions without a fingerprint, Hansard checks the message count but cannot confirm that the two files belong together.
- The project comes from the session details, because Vibe does not group sessions by project.
- The tested local Vibe stores record model settings, not historical response models or per-model usage. Hansard preserves that setting without assigning tokens to it.
- Recorded session costs use current model prices for all accumulated tokens. Hansard labels those costs as estimates. Explicit zero counters remain zero.
- Inline images and session-owned files under
attachments/enter the attachment archive. External file references do not include the referenced bytes, and Hansard does not open arbitrary image paths. - A shorter or rewritten native transcript cannot replace archived history. Compaction and edits that change earlier records require separate review.
- A 2.x session with an empty
messages.jsonlandtotal_messages: 0is treated as intentionally empty. It is not an error, and it does not create a conversation. - Native acceptance covers Vibe 2.26.0 legacy and Unified Harness CLI/ACP trials with a local synthetic endpoint. Native branches, compaction, delegation, voice, hosted billing, and other Unified store minors remain unverified.
Refresh an existing archive
Section titled “Refresh an existing archive”Older imports could merge a repeated prompt into the message before it. To update Vibe conversations that an older Hansard version imported, reimport them from Vibe’s files:
hansard import --source vibe --since allhansard index rebuildPreserved raw bundles can also rebuild without Vibe’s files:
hansard rebuild --from-raw --source-type vibe-cli-historyStats counts Unified Harness edits as edits. To refresh the totals of complete transcripts with plain event files without a reimport, run:
hansard rebuild --since allOlder event records retain the version protections described in Maintenance. Use reimport or raw replay when those protections prevent a refresh.