[BUG] Idle compaction was enabled remotely by feature flag with no notice or opt-in
Preflight Checklist
- [x] I have searched existing issues and this hasn't been reported yet
- [x] This is a single bug report (please file separate reports for different bugs)
- [x] I am using the latest version of Claude Code
What's Wrong?
My idle sessions started being compacted. No local setting changed and I installed nothing to get this. The behavior is gated by the server-side flag tengu_sunny_locket, whose default mode is "off" and which was switched on remotely. No in-session notice explained the new behavior or how to opt out. Compaction discards conversation detail, so a silent remote flip destroyed context in long design sessions I had not finished. The opt-out key (idleCompaction: false) exists only in the settings schema; nothing in the UI surfaced it, and per #101616 it did not exist when the behavior first shipped.
What Should Happen?
A behavior change that discards user context should be opt-in, or at minimum show a one-time in-session notice naming the behavior and its opt-out before it first fires. Any remote flag that alters or discards user context should require that notice.
Error Messages/Logs
> Compacted after an hour idle, using a summary written while you were away
Steps to Reproduce
- Use an account on the 1-hour prompt cache, with no idleCompaction key in settings.
- Run a long session (past roughly 200K tokens).
- Leave it idle for over an hour.
- Return. The session has been compacted with the message above. No prior notice,
no prompt, no indication of how to turn it off.
Claude Model
Other
Is this a regression?
Yes, this worked in a previous version
Last Working Version
_No response_
Claude Code Version
2.1.300 (Claude Code)
Platform
Anthropic API
Operating System
Ubuntu/Debian Linux
Terminal/Shell
WSL (Windows Subsystem for Linux)
Additional Information
Observed by reading strings in the 2.1.300 binary: flag tengu_sunny_locket with modes log / compact / compact_on_return and default "off"; the idle path checks autoCompactEnabled then idleCompaction before firing; a second SleepCompactor path checks the same two settings. Related: #101616, #101070