dsh-carryon
CarryOn context folding (arXiv:2610.18784) as a compaction plugin for DeepSeek Harness (experimental)
What it is
CarryOn context folding (arXiv:2610.18784) as a compaction plugin for DeepSeek Harness (experimental)
How to install
Run this in the DSH web profile, then refresh the page.
$ dsh plugin --profile web add dsh-carryon@0.1.1
DSH versions accepted
0.2.2-alpha.3
Author and traction
xuan-tu-ai · ★ 5 · Updated 2026-11-06
About this plugin
dsh-carryon
CarryOn context folding for DeepSeek Harness: long agent sessions keep what they established, not the whole transcript.
English · 简体中文
When a [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness) (dsh) session grows long, dsh compacts it
by summarizing old turns into free text. dsh-carryon replaces that step with CarryOn from
[Pack Light, CarryOn](https://arxiv.org/abs/2610.18784). Old turns are folded into small, versioned records of
what the agent has established ("carriers") and an execution context: the task, open obligations and the next step.
Each fold is validated before it is committed, and a rejected fold changes nothing.
https://github.com/user-attachments/assets/5f4a6889-5cf6-41a4-aff1-327a9d5d6b7b
CarryOn demo by the paper's authors. Also on the project page.
The CarryOn runtime, from the paper. In dsh-carryon, dsh decides when to fold and keeps the recent turns; the Grounder is not ported yet (details).
[Configuration](https://github.com/xuan-tu-ai/dsh-carryon/blob/main/docs/configuration.md) · [How it works](https://github.com/xuan-tu-ai/dsh-carryon/blob/main/docs/how-it-works.md) · [Development](https://github.com/xuan-tu-ai/dsh-carryon/blob/main/docs/development.md) · [Benchmark](https://github.com/xuan-tu-ai/dsh-carryon/blob/main/bench/README.md) · [Troubleshooting](https://github.com/xuan-tu-ai/dsh-carryon/blob/main/docs/troubleshooting.md) · [Releasing](https://github.com/xuan-tu-ai/dsh-carryon/blob/main/docs/release.md) · [Changelog](https://github.com/xuan-tu-ai/dsh-carryon/blob/main/CHANGELOG.md)
Highlights
- Drop-in backend. dsh-carryon replaces dsh's compaction in the terminal, headless, SDK and ACP profiles. dsh
keeps its trigger, its verbatim tail and its safety checks, and /compact works as before.
- CarryOn mode in the Web UI. The plugin adds a mode next to Standard mode, so you can compare both in the same
app.
- Validated folds. A fold that fails validation leaves the session untouched. Rescans then back off as in the
paper. Close to the context limit, a failed fold falls back to dsh's own summary, so the session can go on.
- Resumable. Fold state is stored as readable JSON in the session log and restored on resume.
- Ported, not reinvented. The runtime is a TypeScript port of [carrycode](https://github.com/xuan-tu-ai/carrycode),
checked case by case against its parity fixtures.
How it works
flowchart LR
A["Session reachesdsh's compaction threshold"] --> B["Trackerupdates candidates"]
B -->|compile request| C["Compilercarrier edits +execution context"]
B -->|nothing to compile| R
C --> D{"Validator"}
D -->|valid| E["Commit: checkpointreplaces old turns"]
D -->|invalid| R["Rejected: session unchanged,next scan backs off"]
R -.->|context near the limit| F["Fallback:dsh's summary"]
The checkpoint holds every carrier and the execution context. dsh keeps the most recent turns verbatim after it.
A fold costs one Tracker call, plus one Compiler call when the Tracker asks for compilation; dsh's own compaction
makes one summary call. The engine, the state format and how this port differs from the paper are described in
[How it works](https://github.com/xuan-tu-ai/dsh-carryon/blob/main/docs/how-it-works.md).
Results reported in the paper
These results come from the paper (Lu, McAuley, Zhang, 2026), with Claude Opus 4.7 as the agent. dsh-carryon has not
been benchmarked against them.
OSWorld 2.0. CarryOn improves both binary and partial scores of the same Claude Opus 4.7 agent
while cutting cost per task by 35.9%. Figure from the paper's authors.
Context and cost over agent turns on OSWorld 2.0. The baseline's input context keeps growing past
200K tokens, while CarryOn's stays near 65K. Figure from the paper's authors.
On BrowseComp-Plus, the paper reports accuracy rising from 49.0% to 56.0% with 22.9% fewer tokens per task.
Quick start
You need [dsh](https://github.com/deepseek-ai/deepseek-harness) 0.2.2-alpha.3 (each dsh-carryon release supports
exactly one dsh release), Node.js 24.9 or later (dsh's own requirement), and pnpm on your PATH
(npm install -g pnpm), which dsh plugin calls.
Install the plugin into the profile you use. For the terminal UI:
npx @deepseek-ai/dsh@0.2.2-alpha.3 plugin --profile tui add dsh-carryon
For the Web UI:
npx @deepseek-ai/dsh@0.2.2-alpha.3 plugin --profile web add dsh-carryon
If dsh 0.2.2-alpha.3 is already installed globally, drop the npx @deepseek-ai/dsh@0.2.2-alpha.3 prefix, for example
dsh plugin --profile tui add dsh-carryon. The same goes for the commands below.
Restart dsh: npx @deepseek-ai/dsh@0.2.2-alpha.3 opens the terminal UI, and
npx @deepseek-ai/dsh@0.2.2-alpha.3 web serves the Web UI and prints its address. In the terminal UI, every compaction is now a CarryOn fold. In the Web UI, new sessions start in
Compare in this category
The five most-starred plugins in the same category.
| Plugin | Author | Stars | Version | Updated |
|---|---|---|---|---|
| EverOS | EverMind-AI | 13.9K | 0.0.0 | 2026-11-10 |
| billion-context | ranxianglei | 5.9K | 0.1.213 | 2026-11-10 |
| dsh-context | bowenliang123 | 4.8K | 0.83.1 | 2026-11-10 |
| memsearch | zilliztech | 2.9K | 0.0.0 | 2026-11-10 |
| dsh-mnemon | omdsh-dev | 957 | 0.5.43 | 2026-11-08 |