Claude Code and Codex accounts on one computer, each kept apart: recent sessions, plan usage and resume commands across all of them.
Unofficial: not made by, affiliated with or endorsed by Anthropic or OpenAI. Claude, Claude Code and Claude Desktop are trademarks of Anthropic; Codex and ChatGPT are trademarks of OpenAI.
cl work runs Claude Code with ~/.claude-work, cx work runs Codex with ~/.codex-work: each with its own login, settings and sessions. Bind a folder to a profile, and the name can be left out there.
hatcheck lists recent sessions from every profile with the command that resumes each, and what's left of that plan. hatcheck usage shows every plan, sorted by what's left of Fable; hatcheck best says which account to use now.
hatcheck move carries a session to another profile when one account runs low, back again later, or converts it between Claude Code and Codex. hatcheck open resumes one in a new terminal, in its folder.
$ hatcheck
Claude Code and Codex CLI sessions active in the last 24h or open now (by folder, newest first)
cd ~/code/api
4m Fix flaky login test · main · ● open in pid 48213 (busy)
cl work --resume 3f1c2a9e-8b7d-4c1e-9f2a-6d5e4c3b2a10 # 5h 100% █████ Fable 48% ███▍░░░ ↻████▎░░ 4d6h
40m Add retries to the uploader · codex · main
cx work resume 019a8c1e-7d3f-7b21-9c4e-2f1a0b9c8d7e # 5h 80% ████░ ↻███▏░ 3h10m week 64% ████▌░░ ↻█▊░░░░░ 1d18h
3h Add rate limiting to the login endpoint · feat/rate-limit
claude --resume 9a8b7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d # 5h 62% ███▏░ ↻██▋░░ 2h41m week 91% ██████▍ ↻███▏░░░ 3d2h
Each limit has two bars: what's left of it, then how much of its window is left before it resets. Per-model limits such as Fable are violet, so they stand apart from the weekly limit for all models.
macOS, Linux and Windows: one binary per platform, nothing else needed. It installs hatcheck (hat for short), cl, cx, claude-z and claude-k.
curl -LsSf https://github.com/hatcheck/hatcheck/releases/latest/download/hatcheck-installer.sh | sh
brew install hatcheck/tap/hatcheck # Homebrew, on macOS and Linux
uv tool install hatcheck # or: pipx install hatcheck
On Windows, in PowerShell:
powershell -ExecutionPolicy Bypass -c "irm https://github.com/hatcheck/hatcheck/releases/latest/download/hatcheck-installer.ps1 | iex"
Or build it from a clone, with Rust; run ./install.sh again after a git pull:
git clone https://github.com/hatcheck/hatcheck
cd hatcheck && ./install.sh # Windows, in PowerShell: .\install.ps1
A menu-bar app (system tray on Windows and Linux) built on the CLI: what's left of every plan, the last day's sessions with Resume and Copy, the Claude Desktop instances a click away, and a notification when a limit runs low or resets. Its main window browses every session with a preview, moves sessions between profiles after a dry run, and adds profiles.
On macOS, Homebrew works too: brew install --cask hatcheck/tap/hatcheck-app. The app updates itself from the releases.
Not a gateway. Hatcheck is never between an agent and its model. It rewrites no agent's config, holds no login, and runs nothing in the background. Tools such as magpie put a local gateway in that path so any agent can use any model and accounts can take over from each other when a quota runs out. If that is what you want, use one of those. Hatcheck is for the opposite case: keeping a work account and a personal account apart, and knowing which one each session ran on.
Each rule links to the code that keeps it, so it can be checked rather than taken on trust.
cl and cx set CLAUDE_CONFIG_DIR or CODEX_HOME and run the agent in their place; nothing stays running (launch.rs, run).hatcheck bind --hook adds one hook to each profile's settings, and unbind --hook removes only what it added (bind.rs, add_hooks)./usage is run in the profile and the snapshot it saves is read. For Codex, the home's token is sent only to ChatGPT's usage endpoint, as it is, never refreshed (usage.rs, run_claude_usage and fetch_codex_usage). Signing in happens in Claude Code and Codex, in a terminal.--cached in the CLI shows what Claude Code and Codex last saved, with its age.hatcheck best ranks and prints commands, for choosing between accounts you may use for the work at hand, such as your own and your company's; nothing starts, moves or switches a session on its own (best.rs).CODEX_USAGE_URL in usage.rs).move deletes the original only once every copied file is checked, never puts an older copy over a newer one, and is undone by moving the session back; fork keeps the original; relocate prints the command that undoes it; and all three have a --dry-run that runs every check and writes nothing.