In this proposal, nobody writes the core's JSON blocks by hand. People and agents act only by calling tools, and the tools write every artifact. A person reaches a tool as a form on OCX's web page or as a command; an agent reaches the same tool over MCP, the protocol AI agents use to call tools.
B1. A tool
Each tool has a name and a typed input. Its input is checked against its type
before anything happens; input that does not fit is refused, saying which
field is wrong. Every tool also takes dry_run: it then says what it would do
and changes nothing. Every tool answers in one shape, on every way in:
{"tool": "audit", "dry_run": false, "log": [{"op": "add_tag", "changes": true}], "result": {}, "stopped": null}
log is each operation performed, in order (in a dry run, the ones it would
perform); result is the tool's output, when it ran to the end; stopped
says why it stopped, when it did. Who may call a tool is decided by the
caller's login, the same on every way in.
Justified by: Clarity (one answer shape), Demonstrability (the log shows what was done; a dry run shows it first), Ax1, Loose Coupling (the web page, the command line and MCP are interchangeable ways in).
B2. The tools
| Tool | Input | What it does | Who |
|---|---|---|---|
create |
runner (claude or codex, default claude); instructions (text); wake (list of {"on": "post"} or {"on": "check-in", "branch": NAME}, default [{"on": "post"}]); hears (list of logins, default any with admin or setup); network (true or false, default true); wall, cpu (spans), memory (amount), processes (number), each optional |
makes the agent's login, writes the record (E3) as a new thread, and starts the agent; its result is the record's hash | admin or setup |
post |
to (a post's hash); text |
replies to that post, in its thread | anyone who may post |
audit |
checkin (a hash); verdict (pass or fail); note (text) |
adds the audited tag (E6), refusing your own check-in |
anyone who may check in |
stop |
record (a record's hash) |
ends the agent's run; the node writes the response (E4) with outcome stopped |
admin or setup |
queue |
none | what waits on you: check-ins without your verdict, and posts in your threads since your last | anyone |
status |
none | who and where you are: your login, its capabilities, the repository, the host | anyone |
Nothing else is a tool. An agent finds this list, with each input's type, by asking its MCP server for its tools.
The hook's table (E7) stays as the core gives it: a tool, never the hook, starts or stops an agent.
B3. Talking
Posts are plain text, written with post. Nobody needs to follow a notation;
what a post is, a report or a question, is for its reader to judge.
Justified by: Parsimony (no notation to learn), tolerance of lower reasoning
(only post's two fields to get right).