Skip to main content

Harness capabilities

What a session may rely on of each harness, declared in its spec (capabilities: in agentspecs/harnesses/*.yaml) and read by swap, clone and resume instead of a branch per harness. resume says how the harness's own session comes back after its process ended (none, load through ACP's session/load, native through the vendor's own resume); fork_history what a clone carries of its history (none, replay as text, rebuild of the vendor's file); interrupt whether a turn can be cancelled; steering whether it takes input mid-turn (ACP has none); images whether a prompt may carry an image; compaction who compacts the context; vendor id whether the adapter exposes the vendor's own session id (acp.native_session); runs unasked how many command families the harness runs without asking its client (auto_run: its own read-only allowlist, as data — cat, wc, ls, git status… for Claude Code, read from the version its adapter pins), which the Shield's ask me first on a command knowingly excludes: a run of one is never an action against an application's rules.

The four the catalogue offers (28 October 2026):

Harnessresumefork_historyinterruptsteeringimagescompactionvendor idruns unasked
claude-codeloadreplayyesnoyesownnone8
codexloadreplayyesnoyesownnone0
opencodenonereplayyesnonoownnone0
piloadreplayyesnonoownnone0

Described and not offered (named, each is refused with its reason; the rows stay for the day they are offered), and the organization's own:

Harnessresumefork_historyinterruptsteeringimagescompactionvendor idruns unasked
gemini-clinonereplayyesnoyesownnone0
fast-agentloadreplayyesnonoownnone0
goosenonereplayyesnonoownnone0
openhandsloadreplayyesnonoownnone0
customnonenoneyesnonoown—0

A harness whose resume is none (OpenCode) is swapped onto with the warning that a swap back to it will start over; its row is still kept for the vendor id. Claude Code's load is what the adapter advertises; drilled on r1 (21 October 2026), a swap back started a new Claude Code session and said so — its own uuid comes with each turn's stop result, not in a form session/load takes. images is a claim initialize must confirm; the vendor session id is none for every harness until the adapter drill answers it. loop harnesses prints the table beside each harness's terms.