On the harness arm with the bridge backend (the path a research factory actually runs — 199 of 200 measured runs are root.arm: harness, backend: bridge), three headline SuperviseOptions are inert:
maxTurns — the harness runs its own loop, so the option never applies
stopRule / onProgressStop (supervisor-agent.ts:530-533) — router arm only
compaction (supervisor-agent.ts:538-540) — router arm only
Consequence: a harness-arm supervisor cannot express "run until progress plateaus" or "stop after N unproductive settles". The stop-rule combinators (plateau, noProgressFor, allWorkersStalled, anyOf/allOf in stop-rules.ts) are exactly the right primitives and are unreachable from the arm most consumers run on.
The worker-internal loop DOES exist on bridge (runtime.ts:2330) and is steerable (runtime.ts:1958), with its cap read from AgentProfile.model.metadata.maxTurns (model-policy.ts:133 → runtime.ts:1881, ?? 0 = unbounded). So the machinery for bounded iteration is present per-worker; what is missing is the supervisor-level progress rule on this arm.
Ask, in preference order:
- Evaluate
stopRule on the harness arm at settle boundaries (each worker settle is a natural evaluation point, and onProgressStop could stop further dispatch).
- Failing that, document the arm restriction on each option in the SuperviseOptions type docs, so a consumer does not pass an inert knob and believe it is active.
Downstream consumer: discovery-lab, which supervises a 16-line research factory on harness+bridge and today has no way to stop a plateaued line except by operator judgement.
On the harness arm with the bridge backend (the path a research factory actually runs — 199 of 200 measured runs are
root.arm: harness,backend: bridge), three headline SuperviseOptions are inert:maxTurns— the harness runs its own loop, so the option never appliesstopRule/onProgressStop(supervisor-agent.ts:530-533) — router arm onlycompaction(supervisor-agent.ts:538-540) — router arm onlyConsequence: a harness-arm supervisor cannot express "run until progress plateaus" or "stop after N unproductive settles". The stop-rule combinators (
plateau,noProgressFor,allWorkersStalled,anyOf/allOfin stop-rules.ts) are exactly the right primitives and are unreachable from the arm most consumers run on.The worker-internal loop DOES exist on bridge (runtime.ts:2330) and is steerable (runtime.ts:1958), with its cap read from
AgentProfile.model.metadata.maxTurns(model-policy.ts:133 → runtime.ts:1881,?? 0= unbounded). So the machinery for bounded iteration is present per-worker; what is missing is the supervisor-level progress rule on this arm.Ask, in preference order:
stopRuleon the harness arm at settle boundaries (each worker settle is a natural evaluation point, andonProgressStopcould stop further dispatch).Downstream consumer: discovery-lab, which supervises a 16-line research factory on harness+bridge and today has no way to stop a plateaued line except by operator judgement.