DeepSeek Harness
DeepSeek Harness (dsh) saves local conversations as versioned event logs.
Hansard imports those logs under the DeepSeek company and harness identity.
Source IDs
Section titled “Source IDs”| Source | Use it for |
|---|---|
deepseek-harness |
Local web, headless, and SDK deployments using the standard session persistence backend. |
How the import works
Section titled “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
Section titled “Import and keep current”hansard import --source deepseek-harness --since allhansard config sources enable deepseek-harnessThe 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.
hansard memory backupBackups 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
Section titled “Review the import in the app”- When the import finishes, open Conversations and selectFilter & sort.
- Set Source to DeepSeek Harness 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 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
Section titled “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
Section titled “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
Section titled “Refresh an existing archive”hansard import --source deepseek-harness --since allhansard index rebuildNo 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.