cd /news/ai-agents/the-idle-parent-trap-on-llm-agents Β· home β€Ί topics β€Ί ai-agents β€Ί article
[ARTICLE Β· art-132277] src=dev.to β†— pub= topic=ai-agents verified=true sentiment=↓ negative

The idle-parent trap on LLM Agents

A developer's analysis of LLM agent orchestration found that idle parent agents on Codex burn tokens polling for worker completion because the runtime lacks event-driven wake-ups, with one run issuing 89 waits that consumed 10.28 million tokens, 6.5% of the run and 12.7% of its list-price cost. The writeup contrasts this with Claude Code, where background workers notify the parent once on completion, and argues the fix for Codex must be structural rather than a declarative "do not poll" rule.

by read3 min views4 publishedSep 17, 2026

Companion to Two agents, one night, 158 million tokens. About four minutes to read.

A parent model delegates a job to a worker and then has nothing else to do. It wants to know when the worker is finished. It has one tool for that: wait up to N seconds for the worker, then tell me what happened. The default N is sixty.

BUSY parent (rule holds)                IDLE parent (rule fails)

dispatch worker                         dispatch worker
work on own task ─┐                     wait 60 s ─── "not yet"   115k tokens
work on own task  β”‚ worker finishes     wait 60 s ─── "not yet"   115k tokens
work on own task  β”‚ notification lands  wait 60 s ─── "not yet"   115k tokens
read result β—„β”€β”€β”€β”€β”€β”˜                     wait 60 s ─── "not yet"   115k tokens
                                          ... Γ— 66 ...
1 wake-up, paid once                    wait 60 s ─── "done"      115k tokens

Each "not yet" is a full activation. The parent re-reads its entire conversation to learn that a minute has passed. The rule that says do not poll is obeyed as long as the parent is busy, because a busy parent is woken by the worker's completion in the normal course of its next step. The moment the parent is idle, the only way it knows how to wait is the sixty-second wait, and the rule has nothing to grip.

Measure Value
Waits issued by the parent 89
At sixty seconds 88
Timed out without a result 66
Returned a completion 23
Tokens in activations that ended in a wait 10,281,999
Of which cached re-reads 10,153,856
Mean tokens per waiting activation 115,528
Share of the whole run 6.5%
Share of the run's list-price cost 12.7%

The largest single turn issued 62 waits, 50 of which timed out. An earlier, smaller build showed the same pattern at five waits. This is a mechanism, not a one-off.

Upper bound, labelled as a counterfactual: if every timed-out wait had been replaced by a silent notification, the 66 activations at the mean size would not have happened, about 7.6 million tokens. The 23 completions would still have cost a wake-up each. That is the most an event-driven design could remove here, not what it would save.

On Claude Code, a background worker or a background shell command notifies the parent when it finishes. The harness wakes the parent once, on the event. There is nothing to poll, and the guardrail simply says: dispatch, then continue or end the turn.

On Codex, in the runtime we measured, a worker's completion message does not trigger a parent turn. A finished worker cannot wake an idle parent. The parent's only options are a bounded wait or a scheduled check, so a declarative "do not poll" rule cannot be followed by an idle parent. The fix has to be structural.

Two telemetry-only tests decide whether the fix worked, over three consecutive qualifying sessions per agent:

Neither field exists in the telemetry yet. Adding them is fix number four in the article.

── more in #ai-agents 4 stories Β· sorted by recency
── more on @claude code 3 stories trending now
sponsored brought to you by zahid.host 4,200+ EU-deployed projects
reading about agents? ship yours in a single git push.

Run your AI side-project on zahid.host

EU-based hosting, git-push deploys, automatic HTTPS, no cold starts. Free tier with a custom domain β€” perfect for shipping the agent you just read about.

$git push zahid main
β†’ Live at https://your-agent.zahid.host βœ“
Get free account β†’ Pricing
from €0/mo Β· no card required
LIVE [news/the-idle-parent-trap…] indexed:0 read:3min 2026-09-17 Β· β€”