When I work across several worktrees at once, each with its own agent session, switching between them is expensive. I’d come back to a tab, forget what the agent was doing, and burn tokens asking it to summarize itself. Nothing showed me what was happening everywhere at once, and every fresh session re-explored state that git and the transcripts already had.
ctx builds everything from what’s already there, so there’s nothing to keep up to date. It treats the transcripts and git as the source of truth, and its state directory is a cache you can delete at any time because the next run rebuilds it. Each worktree gets one row with its branch, whether a session is live, when it was last active, a one-line summary of the task, and whether the tree is dirty or ahead.
The same data comes out three ways: a board to scan, a TUI that updates live, and an MCP server that an agent can ask directly so it doesn’t have to re-explore. Two session hooks feed it. One records lifecycle events, and the other adds a recap when a session starts.
The summaries come from an LLM, but you don’t need an API key for them. ctx tries the Claude CLI you’re already logged into first, then an API key if you have one, and if neither works it falls back to a simple heuristic with no model at all. The hooks always exit with code 0, so a failure in ctx can’t break your agent session.