Skip to content

feat(tui): configurable frequency or opt-out for system reminders (TodoList / permission-mode / AGENTS.md / date) #3584

Description

@wubing-wx

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.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions