Status rules
The statuses
| Status | Meaning | Wants attention |
|---|---|---|
| Needs you | A prompt, bell, watch hit, program notification, or saggar attention call is waiting | Yes |
| Working | Output is moving, a command is in flight, or an agent reports work still running | No |
| Idle | A live shell is quiet at a prompt | No |
| Finished | The shell exited with code 0. Saggar closes the session on the next beat and files it in the project's Activity tab, so you rarely see this word on a row | No |
| Failed | The shell exited with a non-zero code, or a long job failed inside a live shell. Stays until you visit | Review |
| Ready for review | A long job finished inside a live shell and left uncommitted work behind. Stays until you visit | Review |
Saggar combines shell integration, process state, screen content, provider
hooks, terminal activity, and explicit saggar attention calls. Stronger,
newer evidence wins over weaker inference. See Status and triage
for the complete model.
Which claims stand and which decay
- Failed and Ready for review stand until you select the session.
- A clean finish that changed nothing shows a tick for 90 seconds, then the row is plain Idle again.
- A Needs you raised by a bell, a watch pattern, a program notification, or
saggar attentionexpires after 120 seconds. A bell also clears when output resumes or you type in that session. Asaggar attentioncall clears only when you type there. - A Needs you raised by an agent's own prompt stands until the prompt is answered or changes.
- Ready for review is never awarded to the session on screen, and selecting a session clears any standing mark.
Timings
| Rule | Value |
|---|---|
| Beat: how often statuses are re-read | 2 s |
| Silence before Working becomes Idle | 10 s |
Bell, watch, notification, and saggar attention claims expire after | 120 s |
| An agent hook's mid-turn mark holds Working through silence for | 90 s |
| "Changed nothing" tick glows for | 90 s |
| Idle row counts as stale after | 15 min |
| Smart collapsing sweep | about every 10 s |
| Git state refresh | about every 30 s |
| Scheduled tasks checked | about every 30 s |
| "Long command" floor for finish notices and Ready for review | 8 s |
Answer grace after a card or ⌘↩ answer | 5 beats |
Triage order
⌘J walks the sessions with a claim on you, loudest class first and
longest-waiting first within a class:
- Blocked on a prompt.
- Failed: an exited shell, or a long job that failed inside a live one.
- Ready for review: a long job that finished and left uncommitted work.
- Finished clean. In practice only a quick run can sit here, because an ordinary clean exit closes itself before the next press.
With nothing waiting, ⌘J shows a brief 0 waiting card.