# Mistral Vibe

> Import Mistral Vibe legacy files and Unified Harness history, with tools, images, tokens, and subagent details.

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

| Source | Use it for                                                                     |
| ------ | ------------------------------------------------------------------------------ |
| `vibe` | Legacy session files and Unified Harness history under `~/.vibe/logs/session`. |

## 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

**Import now**

```sh
hansard import --source vibe --since all
hansard index rebuild
```

**Keep current**

With **Automatic** source selection, the watcher already includes `vibe`.
With a **Custom** list, enable it. The watcher picks it up within 30 seconds:

```sh
hansard config sources enable vibe
```

## Review the import in the app

1. When the import finishes, open **Conversations** and select **Filter & sort**.
2. Set **Source** to **Mistral Vibe** and set **Time** to the window you imported. Use **Folder** to narrow the list when you use this harness in several projects.
3. Select a conversation to check its messages, tool calls, files, commits, model, and token usage.

To keep archiving new sessions from a local harness, open **Settings → Imports**. **Automatic** follows every supported harness installed on this computer. **Custom** lets you turn individual harnesses on or off. Cloud sources and account exports never run from here; each needs 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

- Exact copies of the 1.x session file, or of the 2.x `meta.json` and
  `messages.jsonl` pair.
- 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

- 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.jsonl` and `total_messages: 0` is
  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

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:

```sh
hansard import --source vibe --since all
hansard index rebuild
```

Preserved raw bundles can also rebuild without Vibe's files:

```sh
hansard rebuild --from-raw --source-type vibe-cli-history
```

Stats counts Unified Harness edits as edits. To refresh the totals of complete
transcripts with plain event files without a reimport, run:

```sh
hansard rebuild --since all
```

Older event records retain the version protections described in
[Maintenance](https://www.hansard.dev/reference/maintenance/#several-copies-of-hansard).
Use reimport or raw replay when those protections prevent a refresh.
