@@ -12,6 +12,7 @@ The untrusted side — the agent runtime itself — is
1212` python-agent-harness ` , executed as a ** resident subprocess** per
1313sandbox: ` python-agent-harness serve ` , a bidirectional JSON-lines
1414protocol over stdin/stdout.
15+
1516The harness is never imported; the repos stay decoupled (the harness
1617only needs to be on PATH of whatever runs the agent).
1718
@@ -60,6 +61,7 @@ only needs to be on PATH of whatever runs the agent).
6061
6162Protocol split: ** JSONL** is the backend↔harness link (pipes); ** SSE**
6263is the browser↔backend link.
64+
6365The controller is a protocol translator — each parsed JSONL line is
6466fanned out to in-memory subscribers and re-emitted as an SSE ` data: `
6567frame, so the browser sees the same events the harness TUI renders (tool
@@ -116,6 +118,7 @@ uvicorn app.main:app --reload # http://127.0.0.1:8000 (UI at /)
116118
117119` python-agent-harness ` must be importable-on-PATH as a command; point
118120` PAW_HARNESS__CMD ` at the absolute binary if it is not.
121+
119122Auth: create a user via ` /auth/register ` , then log in; the UI does this
120123for you.
121124
@@ -144,8 +147,10 @@ signal semantics.
144147each call's arguments, so a row reads ` Bash(command='ls -la') ` rather
145148than a bare ` Bash ` ), ` tool_running ` , ` tool ` , ` todos ` , ` compact ` ,
146149` retry ` , ` error ` , and ` ask ` for a mid-run question.
150+
147151` tool_calls ` is additive — a harness that does not send it degrades to
148152the names from ` tool_start ` .
153+
149154` log ` lines are shown too, except session bookkeeping (the generated
150155session title), which says nothing about what the agent is doing.
151156
0 commit comments