# Hermes

> Import Hermes profile conversations, tool activity, model usage, and persistent memory.

Hermes Agent is a personal-agent harness from Nous Research. Hansard imports its
local profile stores and identifies routed models by their own model company.

## Source IDs

| Source   | Use it for                                                                          |
| -------- | ----------------------------------------------------------------------------------- |
| `hermes` | CLI, desktop, web, API, and messaging conversations saved in local Hermes profiles. |

## How the import works

Hermes stores conversations in `state.db` beneath its home directory. The
default is `~/.hermes` on macOS and Linux, or `%LOCALAPPDATA%/hermes` on Windows;
Hansard also checks the historical Windows `~/.hermes` location. `HERMES_HOME`
selects a custom home. Named profiles live below `profiles/<name>` and each has
its own database. Set `HANSARD_HERMES_ROOTS` to a path-separated list of homes
to import several installations. Profile identities remain separate even if
they contain the same native session ID.

Hansard reads coherent SQLite snapshots, including committed WAL records. It
merges an unambiguous compression continuation into its original conversation
and keeps branches and delegated agents separate. Repeated compaction copies
count once. A resumed conversation updates the same archive entry, and changes
to another session in the database do not reimport an unchanged conversation.

Fallback `sessions/<id>.jsonl` files are also read. A fallback tail is joined to
its SQLite conversation when the ID matches. Native clients sharing one store
do not create duplicate surface imports. Remote deployments need their stores
made available locally; Hansard does not connect to messaging accounts.

## Import and keep current

**Conversation history**

```sh
hansard import --source hermes --since all
hansard config sources enable hermes
```

The watcher observes database and fallback-log changes. An unsupported database
schema produces an import error, so a fallback tail cannot silently replace a
conversation whose main store could not be read.

**Memories and instructions**

```sh
hansard memory backup
```

Backups include profile `memories/MEMORY.md`, `memories/USER.md`, and `SOUL.md`.
For archived projects, Hansard follows the standard context-file
precedence: nearest `.hermes.md` or `HERMES.md`; the `AGENTS.override.md`,
`AGENTS.md`, or `agents.md` directory chain; cwd `CLAUDE.md` or `claude.md`; then
cwd `.cursorrules` and `.cursor/rules/*.mdc`. The walk stops at the git root.
Skill folders are not memories and are not backed up.

## Review the import in the app

1. When the import finishes, open **Conversations** and select **Filter & sort**.
2. Set **Source** to **Hermes** 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.

Check a conversation's tools and numbered edit diffs, then review Hermes in
Stats. Main-loop usage and recorded auxiliary calls, such as title generation,
vision, and compression, contribute once. Historical usage without a model
ledger remains under Unknown model. Scheduled runs have no human activity;
direct one-shot prompts remain human conversations.

## What Hansard preserves

- Human prompts, assistant replies, recorded reasoning, injected context, and system prompts.
- Tool arguments, results, MCP names, errors, and recorded edit diffs.
- Input, output, cache, and reasoning tokens, with per-model and auxiliary-task attribution when recorded.
- Reported actual costs or estimates, timestamps, titles, workspace, recorded configuration, and delegate links.
- Native embedded media blocks when present, and remote attachment descriptors without downloading them.
- Coherent raw databases, fallback logs, and matching optional `moa-traces/<id>.jsonl` files.

## Known limitations

The audited database generations are one through thirty. Newer schemas are
rejected until audited. The last model configuration does not identify the
historical reasoning effort of each request. Partial recorded costs remain in
metadata; Hansard does not present them as a complete session charge. Output
tokens already include reasoning, and input tokens already exclude cache
reads and writes.

Current Hermes persistence often reduces media to text or `[screenshot]`, so
original image bytes may be unavailable. Missing media is not fetched. Fallback
logs have no reliable model, usage, workspace, or surface metadata; missing
clocks are marked as estimated. The legacy gateway routing index, pending
message recovery spool, batch/RL trajectory exports, custom MoA directories,
and plugin memory stores are not imported separately.
Credentials, provider configuration, locks, and derived indexes are excluded
from memory backup. Unknown message roles and content blocks are counted in
metadata and preserved in raw source files.

An isolated upstream-checkout CLI trial covers reads, edits, usage, resume, and a persistent-memory write.
Desktop, web, messaging, live compression, and live delegated execution remain
unverified; fixtures exercise their shared storage shapes and lineage rules.

## Refresh an existing archive

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

Hansard never rewrites Hermes history. The viewer's resume command selects the
recorded `HERMES_HOME` and latest native segment with `hermes --resume <id>`.
Memories are refreshed independently by the regular backup pass.
