{"slug": "i-kept-losing-my-claude-code-sessions-so-i-wrote-ccctl", "title": "I kept losing my Claude Code sessions, so I wrote ccctl", "summary": "A developer built ccctl, an open-source Go command-line tool for managing Claude Code sessions across projects, terminals and tmux panes. It lists running sessions, focuses them in iTerm2, Terminal.app or tmux, searches conversation history (about 1.5 GB searched in roughly a second without an index), provides a k9s-style UI, and moves project directories while preserving sessions, memory, settings and prompt history. The tool is unofficial, reads undocumented files under ~/.claude/, is tested with Claude Code 2.1.316 on macOS and Linux, and is MIT licensed.", "body_md": "I use Claude Code all day, which means a lot of sessions: one per project, sometimes three, spread over terminal windows, tabs, tmux panes and multiple screens. Two questions kept coming back. Where is that session I had? And didn't I already talk this through with Claude, a few weeks ago, in some other project?\n\nSo I started writing small shell helpers. They grew, they got slow on big sessions, and now they are a single Go binary: **ccctl**, Claude Code control.\n\n`ccctl ps` lists every running Claude Code session with its title and state. `ccctl focus` brings one to the front - the iTerm2 tab, the Terminal.app window or the tmux pane. Tab completion knows the running sessions by title, so I never type a session ID.\n\n`ccctl find` searches every conversation in every project. My own history is 1.5 GB from eight months of work, and a search takes about a second. No index yet - that comes next.\n\n`ccctl ui` shows projects, sessions and the running ones on one screen. Enter resumes a session, or jumps to it while it runs. I really like [k9s](https://k9scli.io), so it works the same way, with `:views`, `j`/` k` and Enter.\n\nRenaming a project directory used to cost me its Claude Code history. `ccctl move <dir> <new-path>` renames the directory and takes its sessions, memory, settings and prompt history along. `--dry-run` shows the plan first, and it refuses while Claude Code still runs in there.\n\nccctl is unofficial and not affiliated with Anthropic. It reads the files Claude Code writes under `~/.claude/`, and those are not documented. A Claude Code update can change them, and then ccctl needs a fix. I test it with Claude Code 2.1.316 on macOS and Linux. No Windows.\n\nOf course this was written with Claude Code, but I helped a little bit.\n\n```\nbrew install crux/tap/ccctl\n# or\ngo install github.com/crux/ccctl/cmd/ccctl@latest\n```\n\nCode, docs and releases: [github.com/crux/ccctl](https://github.com/crux/ccctl). MIT licensed. Issues and ideas welcome - I use it every day, so I will see them.", "url": "https://wpnews.pro/news/i-kept-losing-my-claude-code-sessions-so-i-wrote-ccctl", "canonical_source": "https://dev.to/crux/i-kept-losing-my-claude-code-sessions-so-i-wrote-ccctl-3p8f", "published_at": "2026-11-01 22:41:51+00:00", "updated_at": "2026-11-01 22:52:03.728879+00:00", "lang": "en", "topics": ["ai-tools", "developer-tools", "ai-agents"], "entities": ["Claude Code", "Anthropic", "ccctl", "k9s", "iTerm2", "tmux", "GitHub"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/i-kept-losing-my-claude-code-sessions-so-i-wrote-ccctl", "markdown": "https://wpnews.pro/news/i-kept-losing-my-claude-code-sessions-so-i-wrote-ccctl.md", "text": "https://wpnews.pro/news/i-kept-losing-my-claude-code-sessions-so-i-wrote-ccctl.txt", "jsonld": "https://wpnews.pro/news/i-kept-losing-my-claude-code-sessions-so-i-wrote-ccctl.jsonld"}}