Summary
The four built-in system reminders currently have no user-facing frequency control or opt-out. Measured over 7 days of real session transcripts, they independently triggered 1,376 extra LLM turns — about 13% of all LLM calls in that window.
Measured impact (7 days, 228 real session transcripts, offline wire.jsonl analysis)
System-injected turns, classified into three buckets:
| bucket |
turns / 7d |
contents |
verdict |
| A. Must wake the model |
140 |
background task / subagent completion notifications |
keep as-is |
| B. Mergeable reminders |
948 |
TodoList stale reminder 426 · auto-permission-mode reminder 390 · AGENTS.md path reminders ~106 · interruption reminder 16 |
same-variant reminder repeats within one session — merge to first occurrence |
| C. Doesn't need the model at all |
323 |
"Today's date is …" 305 · image-compression notices · plugin-installed notices |
persist to log, don't inject |
97–99% of these turns independently trigger a new LLM request (verified in wire transcripts: the reminder message is immediately followed by an llm.request with no real user message in between). Buckets B + C alone account for ≥1,238 avoidable LLM calls per 7 days (~13% of total) — and each extra turn also busts the prompt prefix cache (new turn = full uncached recompute for large prefixes).
Current behavior (source pointers, 0.40.x)
- TodoList reminder: hard-coded constants
TODO_LIST_REMINDER_TURNS_SINCE_WRITE = 10 / TODO_LIST_REMINDER_TURNS_BETWEEN_REMINDERS = 10 in packages/agent-core-v2/src/features/todo/todoListReminder.ts:7-8
- permission-mode reminder: event-triggered injection, no frequency config (
agent/permissionMode/injection/)
- AGENTS.md reminder: path-triggered, no config (
agent/agentsMdReminder/)
- date-change reminder: startup + date-change injection, no config (
features/dateChange/dateChangeService.ts)
IAgentReminderService.register(variant, provider) has no user-facing configuration surface — each provider's cadence is baked into code
Proposed
Per-variant configuration — interval in turns, or off — e.g. in tui.toml:
[reminders]
todo_list = 50 # turns between reminders; 0 = off
permission_mode = "change-only"
agents_md = "once-per-session"
date_change = "off"
Even a single global "reminder interval multiplier / master switch" would already recover most of the cost.
Notes
- We are not asking to remove the reminders — the TodoList reminder is genuinely useful. The issue is frequency and the inability to tune it.
- The 7-day measurement method (offline wire.jsonl turn classification) is available on request.
Summary
The four built-in system reminders currently have no user-facing frequency control or opt-out. Measured over 7 days of real session transcripts, they independently triggered 1,376 extra LLM turns — about 13% of all LLM calls in that window.
Measured impact (7 days, 228 real session transcripts, offline wire.jsonl analysis)
System-injected turns, classified into three buckets:
97–99% of these turns independently trigger a new LLM request (verified in wire transcripts: the reminder message is immediately followed by an
llm.requestwith no real user message in between). Buckets B + C alone account for ≥1,238 avoidable LLM calls per 7 days (~13% of total) — and each extra turn also busts the prompt prefix cache (new turn = full uncached recompute for large prefixes).Current behavior (source pointers, 0.40.x)
TODO_LIST_REMINDER_TURNS_SINCE_WRITE = 10/TODO_LIST_REMINDER_TURNS_BETWEEN_REMINDERS = 10inpackages/agent-core-v2/src/features/todo/todoListReminder.ts:7-8agent/permissionMode/injection/)agent/agentsMdReminder/)features/dateChange/dateChangeService.ts)IAgentReminderService.register(variant, provider)has no user-facing configuration surface — each provider's cadence is baked into codeProposed
Per-variant configuration — interval in turns, or off — e.g. in
tui.toml:Even a single global "reminder interval multiplier / master switch" would already recover most of the cost.
Notes