MoonshotAI / MoonshotAI/kimi-code
feat(tui): configurable frequency or opt-out for system reminders (TodoList / permission-mode / AGENTS.md / date)
Nobody has claimed this yet.
- Dominant language
- TypeScript
- Stars
- 7.5k
- Forks
- 1.2k
- Avg merge
- 11h 53m
- Merged PRs (30d)
- 350
Description
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 = 10inpackages/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.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with IAgentReminderService.register and the provider implementations in agent/permissionMode/injection/, agent/agentsMdReminder/, features/dateChange/dateChangeService.ts, and packages/agent-core-v2/src/features/todo/todoListReminder.ts. Trace how each reminder is injected and where tui.toml configuration is loaded. Done means users can configure or disable each listed variant and the configured cadence is respected without removing useful reminders.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- typescript
- Domain
- cli, tooling
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100