Glossary: the words of research 053's graduation, and harness and role as homonyms
mesh/merge-gate head 535fd8bb5498 merged into trunk 08d6476e5287 — pass: the change touches no module of the mesh's graph
mesh/repo-check head 535fd8bb5498 merged into trunk 08d6476e5287 — pass: its merge-check.sh passed
mesh/delivery superseded: a newer head of the same pull request

Playbook 02 adds a graduated effort's words; design 58 now says agent harness, never the bare word.
This commit is contained in:
2026-10-16 02:47:48 +02:00
parent cb4c18cedc
commit 535fd8bb54
2 changed files with 49 additions and 16 deletions
@@ -17,7 +17,7 @@ decisions:
# 58 — Agent work as the mesh's own
**An agent's work belongs to the mesh, not to one vendor's program or one machine. A thread is kept whole on the
bus by a thread seat; a thread handler on an always-on node runs the agent's harness headless for it, in a sandbox
bus by a thread seat; a thread handler on an always-on node runs the agent harness headless for it, in a sandbox
of its own, with the thread's own branch on the forge as its workspace; the agent works through a workspace toolkit
and named tools, never a general command runner. Every person, agent and module is an identity held by one identity
seat, with a role made of grants; the bus checks each login by its signature, and the tool runner checks each call
@@ -35,7 +35,7 @@ nothing lost; the agent's calls outside its role are refused, saying which grant
───────── ─────────────── ────────────────
front ends nox-thread-handler nox-threads (seat thread)
├ terminal client (first) ├ takes a thread's lease ├ a restricted stream per thread
├ web page (then) ├ runs the harness headless ├ the object store for large content
├ web page (then) ├ runs the agent harness headless ├ the object store for large content
└ Telegram: questions, │ inside a microsandbox └ leases in the bus's key-value store
approvals ├ answers permission requests
│ │ through the mesh's asks identity seat
@@ -60,18 +60,18 @@ source of truth: the conversation, the agent's questions and their answers, tool
every change of state. Large content goes to the object store and is named from the stream. The stream is
restricted (ADR 0376): only modules granted it read it. A thread is never deleted; the trail is kept for good.
A thread is **open**, **assigned** (to a node and a harness), **released** or **stopped**. Its seat's verbs create,
A thread is **open**, **assigned** (to a node and an agent harness), **released** or **stopped**. Its seat's verbs create,
assign, release, stop, move it, and take it over with a reason. The assignment is a **lease** in the bus's
key-value store, changed only by a compare-and-set on its revision. Its holder renews it every 20 s. A lease not
renewed for 60 s is said to the operator; nothing takes it over by itself.
## 3. Running a thread (ADR 0384)
The thread handler on an always-on node takes the lease and starts the harness (Claude Code today) headless, one
turn at a time. It answers the harness's permission requests through the mesh's asks, so a front end answers them in
The thread handler on an always-on node takes the lease and starts the agent harness (Claude Code today) headless, one
turn at a time. It answers the agent harness's permission requests through the mesh's asks, so a front end answers them in
place. At the end of every turn it commits and pushes the workspace, which is the thread's own branch on the forge;
a node that picks the thread up fetches it, so a move loses at most the turn in progress. Before a shutdown it
releases at a turn boundary; on a stop it ends the process group, since a tool's child process outlives the harness.
releases at a turn boundary; on a stop it ends the process group, since a tool's child process outlives the agent harness.
The claude-code module mirrors the session's stream into the thread and, on pick-up, rebuilds a session from the
thread. Usage per thread comes from each run's result and rate-limit messages on the stream, not the transcript, and the