--- name: session-health description: "Check whether the current session has coherent guidance, focus, handoff state, working-tree ownership, and enough context to proceed safely. Use when starting, resuming, or diagnosing a confused session. Not for auditing the machine or deployed AI infrastructure; use $system-audit." allowed-tools: - Read - Glob - Bash(ls*, cat*) --- # Context Status: Session Health Check On-demand diagnostic showing context usage, preservation state, and open work items. Fast and lightweight — no vault queries. ## What to Check ### 1. Context Usage Estimate (host-aware) Use the active client's native context meter when it is exposed. A client adapter may provide a tool-call counter, but it is optional and must never be treated as shared memory. If no meter is available, report `SKIPPED (client does not expose context telemetry)`; do not guess a percentage from conversation length. Calculate: - Tool calls so far - Estimated percentage (calls / 150) - Which thresholds have fired (from the `fired` array) - Time since last warning ### 2. Active Plan Find the latest file in `log/plans/`: - If found: show filename, first 3 lines, and whether it contains "APPROVED" or is still "DRAFT" - If none: report "No active plan" ### 3. Latest Session Log Find the latest non-compact `.md` file in `log/` (skip files with `-compact` in the name): - If found: show filename and first 3 lines - If none: report "No session log found" ### 4. Focus Freshness Check when `.context/current-focus.md` was last modified: - Show the modification date - If older than 3 days: warn "Focus file is stale — consider running `update-focus`" - Show the first 5 lines (headline) ### 5. Preservation and Continuity Verify the client-neutral continuity files first: applicable root guidance, `.context/ai-handoff.md`, `.context/current-focus.md`, latest approved plan, and portable memory index. Then read `docs/reference/ai-surface-availability.md` or run the staged AI-infrastructure doctor to report each client hook adapter as CONFIGURED, UNAVAILABLE, or NOT APPLICABLE. Missing optional lifecycle hooks are informational when the files-first layer is healthy. ### 6. Open Loops Count unchecked items (`- [ ]`) in `.context/current-focus.md`: - Report the count - If > 5: warn "Many open loops — consider triaging" ## Output Format Present as a compact status panel: ``` ## Session Health | Metric | Value | |--------|-------| | Context usage | ~XX% (N/150 tool calls) | | Thresholds fired | none / info / warning / critical | | Active plan | filename (DRAFT/APPROVED) / none | | Latest log | filename / none | | Focus freshness | N days ago / stale warning | | Open loops | N items | ### Preservation Hooks | Hook | Status | |------|--------| | Files-first continuity | HEALTHY / DEGRADED | | Current client lifecycle adapter | CONFIGURED / UNAVAILABLE / NOT APPLICABLE | | Context telemetry | AVAILABLE / SKIPPED | ### Recommendations [Only if there are issues — e.g., stale focus, missing hooks, high context usage] ``` ### 7. Compaction Guidance When context is high (>60%), include these reference tables in the output: **When to compact:** | Phase Transition | Compact? | Why | |---|---|---| | Research to Planning | Yes | Research context is bulky; plan is the distilled output | | Planning to Implementation | Yes | Plan is in a file; free up context for code | | Implementation to Testing | Maybe | Keep if tests reference recent code | | Debugging to Next feature | Yes | Debug traces pollute context | | Mid-implementation | No | Losing file paths and partial state is costly | | After a failed approach | Yes | Clear dead-end reasoning | **What survives compaction:** | Persists | Lost | |---|---| | CLAUDE.md / AGENTS.md + rules | Intermediate reasoning | | Task list | File contents previously read | | MEMORY.md + `.context/` | Multi-step conversation context | | Git state | Tool call history | | Files on disk | Verbal preferences | | `.context/ai-handoff.md` | — | ## When to Use - When the context monitor fires a warning - Before starting a large task (to check remaining capacity) - After resuming a session (to verify state was preserved) - When unsure if preservation hooks are working