CodeCat shows a badge with the number of Claude Code agents currently working. For the first day it showed “1” permanently, even with nothing running.
The cause was SessionStart. Claude Code fires that hook on launch, on --resume, and on /clear — all moments when a session exists but no work does. I had treated the hook as “an agent started working”. It means “a session started existing”.
The obvious patch is to hide sessions with no activity. That breaks the other thing the app does: it keeps the Mac awake while agents work, and it must not keep it awake for a tab someone left open before going to lunch.
So idle became a first-class state next to working, waiting, done and crashed — excluded from the badge, from the aggregate the cat reacts to, and from the power policy. An idle session still appears in the list, with a route back to its terminal tab, because that’s useful. It just doesn’t count.