iii-harness-53-bugs.md
53 things from ~4 months of running an agent harness in production.
iii, the engine that powers the harness, is really cool too: https://iii.dev/docs/install
- crash mid tool call left a dangling call with no result that poisoned every later request workers#507 workers#630
- resumed turn raced the worker booting and called a function that wasn't registered yet workers#507
- no durable queue for turns so wedged ones sat in running forever workers#464
- cut stream parsed as null args and got reported as a successful empty turn workers#878
- seven providers treating any connection close as done workers#878
- cached tokens double billed on six providers workers#740
- file reads counted twice so we saw phantom context overflow workers#552
- retry budget of 1 killing turns one step from done workers#552
- compaction returning an empty context workers#552
- child agent death silent by construction workers#552
- lock order deadlock between parent retasking a child and the child finishing workers#973
- ci only dodged the deadlock by scheduling luck workers#973
- stop button clobbered by a stale write from the step it was stopping workers#313
- one 18mb directory listing wedging the whole agent runtime through restarts workers#1175
- poison message reflushed on every reconnect workers#1175
- queue faithfully redelivering the poison workers#1175
- wake notifications cutting json at 600 chars, mid array workers#1167
- 10mb session log replayed synchronously under a mutex workers#1119
- approval hook registered 171 times because the instance count lagged workers#797
- resuming past only the first duplicate hook, held forever workers#797
- failure cleanup timing out and logging skipped, same as a no op workers#1108
- a span emitted per token plus a persisted state write per event workers#205
- 41% more tokens, 95% of it repeated context cache reads workers#1123
- large tool calls ending with incomplete args, then re emitted workers#1123
- registrations lost when the runtime reloaded a different worker workers#666
- agent uninstallable because its dependency graph had 65 edges and the limit was 64 iii#2006
- websocket reset loop every 2.8 seconds
- stop command vanished because registrations weren't replayed after reconnect
- startup sweep rerunning the same doomed call after every boot
- parent parked forever waiting on a child that died out of band
- two parallel approvals both waking one turn, shell command executed twice
- provider stream stalled mid delta, keepalive pings counted as activity
- 120s idle guard that never fired, 300s hard kill with an opaque error
- no read timeout on upstream clients
- agent restarting the very process hosting its own turn
- "confirm before restarting" in the prompt, not a guarantee
- generated code polling state 140 times a second, 29.7k spans in one trace
- trace cache eviction went quadratic under a lock every thread needed, kill -9
- null serialized as "no result", sdk saw undefined, infinite loop
- 16 compactions, then a 5m char hook result, "compaction succeeded"
- five sub agents hitting the turn limit, all reporting completed
- two ids that differed by one character colliding, second message silently dropped
- malformed deny rule failing open
- unknown model fell to an 8k window, sub agents had about 6k usable
- first turn system prompt 14 tokens different, second cache write every session
- 79% of tool schema tokens were prose
- any result under 2000 chars immortal in context, 63k to 76k token floor
- no completion trigger so agents used sleep 60 as a wait primitive
- 48% of root turns were status polls
- sub agents not inheriting reasoning effort, 32 min to 18 min, $1.16 to $0.50, same score
- two components each persisting a registration token, desync no restart could fix
- two runtimes on one port, function ownership flapping, oom sigkill
- 761mb of traces at 20mb a minute in a quiet session
the harness is open source: iii-hq/workers/harness.
评论
?
参与讨论