TodoWrite system-reminder fires too aggressively when an active todo list exists
Summary
The <system-reminder> that nags the agent to "use the TodoWrite tool" fires far too often during sessions where a todo list is already present, actively maintained, and being updated. In practice it adds substantial token cost and creates behavioral pressure toward performative TodoWrite calls instead of substantive work.
This is a fresh signal point following the auto-closure of #40573 (closed as stale). The comment thread on #40573 is the canonical history; prior related reports include #9769, #6760, #4464, and #21693. Filing this as a new issue so the signal isn't lost in a closed thread.
Concrete data point
During a single ~3-hour refactor session focused on one task, with a continuously-updated 13-item todo list, the reminder fired roughly 15 times, including immediately after TodoWrite calls (i.e., the agent had just written the list and was reminded to write the list). The list had a clear in_progress item throughout and was being kept current.
Why this matters
Two concrete harms:
- Token cost. The reminder re-injects the entire current todo list each time it fires. With a 13-item list firing ~15 times, that's a non-trivial fraction of context budget spent re-stating state the model already has.
- Behavioral pressure. Repeated nagging pushes the agent toward performative
TodoWritechurn — re-writing the list to satisfy the reminder — rather than doing the actual work. This is the opposite of the tool's intended effect.
Suggested heuristics
Either of these would dramatically reduce false positives without losing the reminder's value for sessions that genuinely lack a plan:
- Recency suppression: suppress the reminder when the most recent N tool uses (e.g., N=5) include any
TodoWritecall. - Staleness gating: suppress when there is an
in_progressitem whose last update is within the last M minutes (e.g., M=10).
A combination (suppress unless both no recent TodoWrite and no fresh in_progress item) would be even tighter.
Cross-references
- #40573 (auto-closed as stale; comment thread there is the canonical history)
- #9769
- #6760
- #4464
- #21693
Reporter
Mike Famulare (mike.famulare@gatesfoundation.org) — Institute for Disease Modeling / Gates Foundation. Heavy daily Claude Code user on research-engineering workloads; happy to provide session traces if useful.
This issue has 4 comments on GitHub. Read the full discussion on GitHub ↗