Hatcheck

Claude Code and Codex accounts on one computer, each kept apart

CLI, Desktop App, Developer Tools

hatcheck — zsh
$ 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
cd ~/code/blog
   20h  Draft post on Rust lifetimes · main
        cl personal --resume c47e2b1d-0a9f-4e8d-b7c6-5d4e3f2a1b0c  # 5h    ? ·····               week 97% ██████▊ ↻█████▏░ 5d2h
Profiles: ~/.claude (1), ~/.claude-personal (1), ~/.claude-work (1), ~/.codex-work (1)

Hatcheck keeps several Claude and ChatGPT accounts apart on one computer. Each account gets its own Claude Code or Codex profile, with its own login, settings and sessions, and one command lists the recent sessions of all of them: which are still open, the command that resumes each one, and what is left of that account's plan. On macOS it also sets up isolated Claude Desktop instances, each with a colour-coded launcher that brings the running window forward instead of opening a duplicate.

Technical Highlights

Not a gateway. Nothing of Hatcheck sits between an agent and its model: it holds no login, rewrites no agent's config, runs no daemon, and sends nothing off the computer except the usage requests the agents themselves make. Each of these rules names the code that enforces it.

Plan usage is read by running Claude Code's own usage command inside each profile and reading the snapshot it saves, so credentials are never touched. Every limit is drawn as two bars: what is left of it, and how much of its window remains before it resets.

A session can be moved to another profile when one account runs low, or converted between Claude Code's and Codex's transcript formats, with a dry run first and a way back. Folders can be bound to a profile, and one command says which account to use now.

Ported from Python to a single 2.8 MB Rust binary with byte-for-byte identical output, checked against the Python version on real data with the Python test suite as the specification. The first call takes 51 ms where the bundled Python engine took 649 ms.

A Tauri menu-bar app ships the binary inside itself as its engine: plan bars, one-click resume, and a notification when a limit runs low or resets. Released through install scripts, Homebrew, PyPI, cargo-dist and winget.

  • Rust
  • CLI
  • Desktop App
  • Tauri
  • Developer Tools

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.