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

  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. Review with the Tools tab. Before you merge anything, read what the agent ran. See reviewing agent work.
  6. 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 --continue for the most recent session in the current directory, and claude --resume for 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 --continue gets it back. Otherwise run claude --resume for 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+F searches 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 resurrect brings 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 status reports 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.