Trunk here is the ocx release people and agents still use, read at its tip
(a46d73f5bf) for
slices-parity.md on 2026-10-06. ocx2 is to reach what it
did, with protocol v1 underneath (protocol-v1.md), then
retire it. On v1 most of what trunk did as code is a run's data: a pattern,
by convention the wiki page run/NAME, holds how an agent or a check runs,
and the protocol starts it, feeds it and ends it. So each row says whether
ocx2 needs a tool, a protocol piece, or only a pattern.
Status: works (a spec shows it), pattern (works once someone writes the data; nothing to build), missing (what to build is named), or not copied (with why).
People and agents at work
| Trunk | On ocx2 | Status |
|---|---|---|
An agent answers each post on a thread or ticket, one turn at a time (task --write, --wait) |
a session run that hears the thread; each post reaches the agent's standard input. A turn-per-post agent, such as claude -p or codex exec, has each delivery start a process of its own: deliveries: start, after a process for the run itself |
works |
| An agent in one long session a person can watch and steer (remote control) | a session run whose command turns on remote control; a person joining it at the host needs terminal and attach, refused today |
missing: terminal, attach |
How Claude or Codex is run: program, arguments, sign-in, environment (src/ocx/runners/) |
the patterns run/claude and run/codex, in the layered format |
pattern: run/claude written, not yet tried |
| A local model, such as Gemma through Ollama, doing a task: OCX's native agent, a bounded tool loop that tolerates lower reasoning (trunk's Ollama loop passed 5 of 8 trials) | OCX's own program, named as a run's command: the loop of PLAN.md, "Work-unit and tool contract" (inspect, read, patch, verify, finish), each exchange with the model posted where the run is before the next | missing: the native agent |
A bounded subtask handed to a local model under its own login (ocx.delegate) |
a run of the native agent, sent for the delegating agent | missing: after the native agent |
An agent posts its answer (task --write) |
ocx2 post from the run's clone, as its run user |
works |
What waits on an agent, and where a record stands (task --status, the console's Needs you) |
a session is given each post as it arrives; a run's started and ended are on its thread |
works for sessions; no list of runs (below) |
| Only verified work committed, with Intent, Expression and Demonstrates | the agent's own check-in from its clone, as its run user; what counts is its verdicts | pattern: the agent's instructions |
Review and CI
| Trunk | On ocx2 | Status |
|---|---|---|
An audited verdict on a check-in (audit) |
ocx2 audit CHECK-IN pass\|fail NOTE AGAINST |
works |
The review queue: check-ins nobody but their author has judged (reviewer, the console's Audits) |
a reviewer session given each new check-in on its branches (checkins); check-ins from before it started are not given |
missing: the check-ins still unjudged, as a read tool |
| CI on each check-in of a branch, tagged green or red (command sessions) | a session whose checkins names the branch, its command the check (HISTORY.md decision 41) |
missing: a way for the check to write its ci verdict; audit writes only audited |
A job: run a user's job at a ref, its log's end posted (Run: LOGIN at REF) |
a run whose checkout step names the ref, its command the job; the end of what it printed is kept and posted |
works |
The node and the host
| Trunk | On ocx2 | Status |
|---|---|---|
The hook that wakes sessions (wake) |
ocx2 hook --node USER installs the node; it acts on what arrives |
works |
The daemon keeping sessions running (ocxd) |
each run's watcher; at the node's start, hook --node answers lost runs and hands on waiting ones |
works |
| Stop a session (console) | ocx2 stop RUN |
works |
| Restart a stopped session (console) | send the run again, or a new run from its pattern | pattern |
Workspaces listed and removed (workspace gc, the console's terminate) |
workspaces stay on the node after ended |
missing: removing a finished run's workspace |
| Sessions and workspaces listed for supervision (the console) | each run is a post; nothing lists runs and where each stands | missing: a list of runs and their state |
| A remote host running work | ocx2 node on the host's clone |
works |
| Releases: deploy, accept, roll back | stage, accept, rollback, status |
works |
| The hook installed from the console | hook, unhook |
works |
Repositories
| Trunk | On ocx2 | Status |
|---|---|---|
| The git export served for mirrors | the program served as git |
works |
| The export kept current | the hook on each check-in, and export |
works |
| Import a git repository | import |
works |
Not copied
| Trunk | Why |
|---|---|
| Password files and logins provisioned from the console | a run user's password is set when its workspace is made (HISTORY.md decision 29) |
| Running unconfined when bubblewrap is missing | a run without a sandbox runs only where the host allows it (ROOT/node/unconfined) |
Runner code per hosted agent (claude, codex) |
OCX's code knows no hosted agent (HISTORY.md decision 40): how each runs is a pattern. OCX's native agent for local models is OCX's own program, not knowledge of another's |
| The console's views as an HTML page of their own | the page is Markdown in Fossil's skin (HISTORY.md decision 33) |
| A note when nobody hears a post | nothing uses it on v1; added back when a scenario needs it |
Order to build
Each is one check-in, in the order the scenarios need them (SCENARIOS.md); where the native agent and the MCP work come in this order is the maintainer's to set:
deliveries: start: a turn per post, so Claude or Codex answers on a thread or ticket. Built.- The patterns
run/claudeandrun/codexin the layered format, tried on a thread. terminalandattach: a long session a person joins at the host.civerdicts from a check's session.- The check-ins still unjudged, as a read tool.
- A list of runs and their state.
- Removing a finished run's workspace.
- The native agent for local models, and delegating to it.