# DeepSeek Harness

> Import local DeepSeek Harness session logs, tool activity, attachments, and instructions.

DeepSeek Harness (`dsh`) saves local conversations as versioned event logs.
Hansard imports those logs under the DeepSeek company and harness identity.

## Source IDs

| Source             | Use it for                                                                               |
| ------------------ | ---------------------------------------------------------------------------------------- |
| `deepseek-harness` | Local web, headless, and SDK deployments using the standard session persistence backend. |

## How the import works

DeepSeek Harness normally saves logs beneath `~/.dsh/sessions`, or
`$DSH_HOME/sessions` when its home has been customized. Each project has a
directory containing session directories. Logs are named `session.jsonl` or
`session.vN.jsonl`, with a `.zstd` suffix for compressed storage. Hansard reads
formats zero through four, selects the highest generation, and preserves older
generations as raw evidence. The conversation keeps the same archive identity
when DeepSeek migrates its format or adds another turn. An unsupported newest
generation produces an import error instead of silently loading an older copy.

The compressed default requires Node.js with Zstandard support or the `zstd`
command on `PATH`. Set `HANSARD_DSH_HOME` to override the harness home, or set
`HANSARD_DSH_SESSION_ROOTS` to a path-separated list of custom persistence
directories. A deployment can replace the persistence backend entirely; those
custom backends require their own export path. Browser clients do not hold a
separate transcript: the server running the harness owns the logs. For a remote
deployment, make its log directory available locally before importing.

## Import and keep current

**Conversation history**

```sh
hansard import --source deepseek-harness --since all
hansard config sources enable deepseek-harness
```

The watcher follows session logs and attachment objects. DeepSeek Harness can
continue writing while Hansard imports; an unstable or incomplete compressed
file is retried on the next pass.

**Memories and instructions**

```sh
hansard memory backup
```

Backups include `$DSH_HOME/AGENTS.md`, project `AGENTS.md` and `CLAUDE.md`
files and their `.local.md` overlays, and recorded instruction files. Skill
folders are not memories and are not backed up. Credentials and executable
configuration patches are excluded.

## Review the import in the app

1. When the import finishes, open **Conversations** and select **Filter & sort**.
2. Set **Source** to **DeepSeek Harness** 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 the tools and edits in a conversation, then review its measured usage in
Stats. Routed models retain their own model company. Forks and subagents do not
charge inherited history again.

## What Hansard preserves

- Human prompts, injected context, assistant text, reasoning, and recorded errors.
- Tool arguments and results, MCP identities, nested programmatic calls, and edit text pairs.
- Measured input, output, cache, and reasoning tokens with the recorded model route.
- Titles, timestamps, working directory, settings, compaction summaries, and parent/child links.
- Verified image and file attachments from the content-addressed attachment store.
- Original log bytes, including prior format generations and unrecognized record types.

## Known limitations

DeepSeek Harness is a developer preview. A custom backend, pre-release flat-file
layout, or future format is not inferred from filenames alone. A torn compressed
frame must be completed or repaired by the harness before it can import.
Inherited fork prefixes remain in raw history and are excluded from the child's
normalized accounting. Local clients sharing one log do not produce separate
surface copies. Logs do not reliably identify whether a headless prompt came
from a person or an external scheduler.

Edit-result text pairs omit absolute line offsets. Missing or invalid attachment
objects remain missing; Hansard does not fetch them from a remote service.
Auxiliary title generation without recorded usage is not assigned estimated
tokens. Derived indexes, credentials, provider settings,
telemetry, locks, and runtime caches are excluded.

The released headless CLI trial covers reading, editing, model usage, and
continuation across a format upgrade. Web/desktop interaction, live subagent
execution, and remote deployment access remain unverified. Fixtures cover
historical formats, children, attachments, nested tools, errors, and memory paths.

## Refresh an existing archive

```sh
hansard import --source deepseek-harness --since all
hansard index rebuild
```

No provider log is rewritten by Hansard. Continue a session in the harness's
web interface, or use a recent `dsh --profile headless --session-id <id>`
command with a task. The `--session-id` option is available in the audited
`0.1.7-rc.2` preview; the older `0.1.5-rc.3` headless CLI lacks it.
