claude code session manager
A Claude Code session manager tracks your sessions as things you can list, search, resume, and account for: which one is running, which is blocked on your approval, where the one you lost went, and what it cost. Claude Code ships resume flags. Everything above that is a layer you add.
macOS · free tier, no card · works with Claude Code, Codex, and Antigravity CLI
the five questions a session manager answers
Managing sessions is not the same problem as reading one. Once you have more than a couple of agents going, every question you ask is about the set, not the conversation in front of you.
what is running?
Not "is this window busy" but the whole set. Which agents are mid-turn, which finished ten minutes ago and are sitting there done, which one you forgot about entirely.
what is blocked on me?
An agent waiting on an approval prompt looks exactly like an agent thinking. It is the most expensive failure mode in parallel work, because nothing signals it.
where is the one I lost?
You remember a filename and roughly what you were doing. You do not remember which project, which day, or which of six sessions it was.
what did it change?
The summary an agent gives you is a claim, not evidence. Reviewing means reading the tool calls it actually made, not the paragraph it wrote about them.
what did it cost?
Tokens per turn, per session, per model. Without it you cannot tell an expensive agent from a productive one, and you find out at the end of the month.
and one more: what is next?
Work outlives sessions. If the task list lives in a conversation, it dies with the conversation, and you rebuild it from memory every morning.
what Claude Code already gives you
Start here before adding anything. A good deal of session management is already in the CLI, and it is worth knowing exactly where it stops.
resuming
claude --continue # most recent session in this directory
claude -c # same thing, short form
claude --resume # interactive picker, accepts a search term
claude --resume <uuid> # straight to a specific session
claude --resume --fork-session # resume, but branch to a new session ID --continue is directory-scoped, which is the important detail. Run it in the wrong folder and you
get the wrong conversation, or none. --fork-session is the one people miss: it lets you re-run
from a known-good point without overwriting the original session.
where sessions actually live
~/.claude/projects/<project-slug>/<session-uuid>.jsonl
The project slug is your working directory path with the separators swapped for hyphens, so
/Users/you/Projects/app becomes -Users-you-Projects-app. Each session is one JSONL
file. When the picker cannot find what you want, grep -rl "the thing you remember" ~/.claude/projects/
usually can. Subagent transcripts sit one level deeper, in a subagents/ directory beside the parent
session, each with a .meta.json sidecar.
background work
claude --bg starts a session in the background, and /tasks inside a session lists
running and completed background agents so you can dismiss or stop them. That is real session management, and
it is scoped to one Claude Code instance. It does not see the five other terminal windows.
where it stops
Every mechanic above works on one session, in one directory, from inside one terminal. There is no list across projects, no signal when a session parks on an approval, no search across conversations you have forgotten, and no accounting once a session is closed. Those are exactly the questions that appear the moment you run a second agent, and the reason people end up in tmux or a wall of terminal windows trying to build the missing layer by hand.
how crystl manages sessions
crystl is a macOS terminal. Sessions are first-class objects in it, not scrollback that happens to be on screen. Everything below is a real terminal session running the actual Claude Code CLI.
projects and sessions have names
A gem is a project, a shard is a session inside it. Shards carry a crystal name and an editable label, so a fan-out reads parser, tests, api instead of three identical tabs.
one panel for every agent
The agent activity panel gathers live activity and token usage across every open project, or scoped to one. Which agents are working, which are idle, where the tokens are going.
blocked sessions announce themselves
A shard parked on an in-terminal approval prompt is flagged ⏸ awaiting input in crystl status and crystl shards, and streams over crystl events. Quiet stops meaning done.
search everything you ever ran
Cmd+Shift+F searches a local index of every agent turn and every shell command, across all projects, open and closed sessions, worktrees, and SSH hosts. It stays on your machine.
read the tool calls, not the summary
The history navigator splits a session into Conversation and Tools tabs. Every tool call with its input and result, so you can check what an agent did rather than what it said it did.
undo-close for sessions
crystl resurrect brings back a shard you just closed: name, color, worktree isolation, and the agent session resumed where it left off. Listing what is available is free.
restore a whole working layout
Formations save a named set of projects and their sessions, including SSH hosts and remote worktrees, and reopen the lot with agent sessions resumed.
work that outlives the session
The workbench is a plain WORKBENCH.md at the project root. You and the agent edit the same list, it claims tasks with its own shard name, and the list is still there tomorrow.
cost per session, not per month
Every turn carries its model, token usage, and duration, with a session summary on top. crystl history prints the same numbers so an agent can judge a worker's cost before acting on its output.
plain terminal vs. crystl
Comparing a stock terminal running the Claude Code CLI against crystl running the same CLI. Everything Claude Code ships with works in both.
| Session management task | Terminal + claude | crystl |
|---|---|---|
| Resume a session you remember claude --continue picks up the last session in this directory. Both have this; it is the easy case. | ✓ | ✓ |
| Find a session you do not remember Search every past conversation and every command by what you remember: a filename, an error string, a migration you ran. | ✕ | ✓ |
| See which sessions are running right now The agent activity panel shows live activity and token use across every project in one view. | ✕ | ✓ |
| See which session is blocked on you A shard parked on an approval prompt is flagged awaiting input in crystl status and crystl shards, and streams over crystl events. | ✕ | ✓ |
| Reopen a session you closed by accident Claude Code can resume the conversation. crystl resurrect brings back the whole shard: name, color, worktree, and the agent session. | ~ | ✓ |
| Sessions survive quitting the app Transcripts persist on disk either way. crystl restores the sessions themselves on restart, in place, with approval state intact. | ~ | ✓ |
| Restore a whole multi-project layout at once Formations save a named set of projects and their sessions, including SSH hosts and remote worktrees. | ✕ | ✓ |
| Know what a session cost Per-turn token usage, model, and duration, with a session summary on top, in the panel or from crystl history. | ~ | ✓ |
| One shared task list per project The workbench is a plain WORKBENCH.md the agent reads and writes alongside you, so work outlives any single session. | ✕ | ✓ |
| Same picture for non-Claude agents Timeline search and undo-close cover Codex and Antigravity CLI too. The history navigator is Claude Code only for now. | ✕ | ~ |
Read-only CLI commands are free on every tier. Control commands that change state (creating shards, sending input, resurrect, workbench writes) are Guild features.
a workflow that survives six sessions
- One project per gem. Sessions inherit the project, so a new session always starts at the project root and never inherits whatever directory another agent wandered into.
- Name the sessions you fan out.
crystl shard rename --gem app --shard opal --name tests. Unnamed parallel sessions are the reason people lose track of them. - Give repo-touching agents their own worktree. Isolated shards get a git worktree and a
crystl/<name>branch, so two agents in one repo cannot overwrite each other. - Watch the set, not the windows. The activity panel for what is running, the awaiting-input flag for what is stuck. Checking six tabs in rotation is the thing you are trying to stop doing.
- Review with the Tools tab. Before you merge anything, read what the agent ran. See reviewing agent work.
- Put follow-ups in the workbench, not the chat. The conversation is where work gets done. The file is where it gets remembered.
Frequently asked questions
- Does Claude Code have a session manager?
- Not as a separate surface. Claude Code stores every session as a transcript under
~/.claude/projects/and gives you flags to get back into one:claude --continuefor the most recent session in the current directory, andclaude --resumefor a picker or a specific session ID. There is no view of what is running, what is blocked, or what anything cost. - How do I find a Claude Code session I lost?
- If it was the last session in that directory,
claude --continuegets it back. Otherwise runclaude --resumefor the interactive picker, which accepts a search term. The transcripts also sit on disk as JSONL at~/.claude/projects/<project-slug>/<session-uuid>.jsonl, so grep works when the picker does not. In crystl,Cmd+Shift+Fsearches every past conversation and command across every project at once. - What happens to a Claude Code session when I close the terminal tab?
- The transcript survives, the running process does not. You can resume the conversation later, but anything mid-flight stops. crystl keeps a short undo-close list per project, so
crystl resurrectbrings the shard back with its name, color, worktree isolation, and agent session restored. - How many Claude Code sessions can I manage at once?
- The limit is attention and machine resources, not the tool. Roughly three to five sessions is where most people stop being able to review the output honestly.
crystl statusreports app memory and system memory pressure so you can size a fan-out before it hurts. See how many agents can you actually run. - Is a session manager the same thing as a Claude Code UI?
- Related, different job. A UI renders the conversation nicely. A session manager tracks sessions as objects you can list, search, resume, and account for. crystl does both, but the second one is the part that scales past one agent. The longer argument is in what a Claude Code GUI should actually do.
- Does crystl work with agents other than Claude Code?
- Yes. Sessions in crystl are terminal sessions, so Codex and Antigravity CLI run alongside Claude Code in the same window. Timeline search and undo-close cover all of them, and undo-close resumes each agent with its own resume mechanism. The history navigator reads Claude Code transcripts specifically, because the other agents record history in different formats.
manage the set, not the tabs
crystl is free, runs on macOS, and runs the Claude Code CLI you already have. Sessions get names, projects, history, and a panel that tells you which agent is waiting on you.