Harnesses
The coding agent programs a chat runs on, how the app drives each one and what each one supports.
A harness is a coding agent program a chat runs on. Krad ADE drives Claude Code, opencode v2 and Codex, and offers a Gateway as a harness of its own. You install and sign in to each harness as usual; the app finds it on PATH.
Choosing one
A new chat does not ask for a harness. The model picker has a tab per harness, with search and the keyboard, and the model you pick before the first message decides which harness runs the chat. Picking a Claude model runs Claude Code.
How each harness is driven
A chat drives its harness without a terminal and renders its stream natively. Each harness speaks its own protocol, and the app turns all of them into the same chat events:
| Harness | Program | What the app talks to |
|---|---|---|
| Claude Code | claude | One live process per conversation in stream-json, fed through stdin |
| opencode v2 | opencode | A shared opencode server and its events; 1.x is not supported |
| Codex | codex | Codex's app server and its notifications; sign in with codex login |
| Gateway | none | The app's own agent engine, talking to the Gateway's models |
With Claude Code, a message you send during a turn goes into the running process and waits there until Claude Code is ready for it.
Resume ids
Each harness labels its conversation with a resume id. The app saves that id with the chat, and on reopen the harness picks up its own stored conversation, history included, without your prompt being sent a second time. The app also keeps its own transcript of the parsed events next to the id, so a reopened chat shows its history at once.
If a harness rejects a saved resume id, the chat starts a new conversation and says so, instead of presenting it as the old one.
Agent state from hooks
Each agent reports its state through its vendor's hooks, and every hook runs krad-ade-agents hook <harness>:
- Claude Code gets its hooks as inline settings when the app launches it, so your own Claude Code config is not edited.
- Codex calls its
notifyprogram when a turn completes. - opencode reports through a status plugin. opencode 2 loads a TUI plugin only when it is listed in its global
cli.json, and the app leaves that file to you, so you add the plugin there yourself.
The app maps each report to working, waiting for input or done. See Agents bus.
What differs between harnesses
| Feature | Claude Code | opencode | Codex | Gateway |
|---|---|---|---|---|
| Terminal view of the same conversation | Yes | Yes | Yes | No, chat only |
| Rewind the conversation | Yes | Yes | Yes | Yes |
| Rewind the files too | Yes, file checkpoints | Yes, its revert | No | Yes, engine snapshots |
| Started as a Worker | Yes | Yes | Yes | No |
See Chat for rewind and the terminal view, and Lead and Workers for Workers.
Harness command lines and flags change between releases. When a harness rejects one, the chat shows the harness's own error.