macOS 13+ · MIT · universal build

Know which account
has room left.

Janus switches between your Claude Code and Codex accounts from the menu bar, and shows how much of each one’s limits you have spent.

$ brew install --cask ramitvishwakarma/tap/janus
The Janus window going from the Claude tab to the Codex tab, then switching Codex from an account at its weekly limit to one with room left
One click moves the live session, and the saved one is kept.
2 thingsA keychain entry and ~/.claude.json. That pair is a whole Claude Code session.
0 serversNo telemetry. The only requests are for your own usage figures, sent to Anthropic and OpenAI with your own tokens.
1 clickOr ⌘S from the menu bar, without opening the window.

What it does

Switches accounts

Claude Code and Codex both make you sign out before you can sign in as someone else. Janus saves each account’s sign-in and puts it back on demand, so the second account is one click away instead of one login away. ⌘S moves through your Claude Code accounts in the order you choose.

Shows what each has spent

Every saved account shows how much of its limits it has spent. Refresh asks Anthropic or OpenAI for each account’s current figures, using the tokens that account already has saved. That is the number worth looking at when the decision in front of you is which account to use next.

Account one94%
Five-hour limit, nearly gone.
Account two5%
Barely touched. This is the one to switch to.

The signed-in Claude Code account’s figures come from the file Claude Code writes as it runs. Refresh asks Anthropic and OpenAI for every account’s figures, using the tokens each one already has saved. The line under each account says whether its figures were fetched or remembered, and a limit whose reset has gone by is drawn as empty rather than full.

How switching works

A signed-in Claude Code session is two things on disk. A Codex sign-in is one.

PartWhere it lives
Claude Code, OAuth tokensKeychain entry Claude Code-credentials
Claude Code, everything else~/.claude.json
Codex, the whole sign-in~/.codex/auth.json

Switching moves that pair. Janus reads the replacement session first, copies the live pair into storage under the account it belongs to, then writes the other account’s saved pair into place. Claude Code reads credentials at startup, so restart it to pick up the new account.

A Codex switch moves its one file the same way. ChatGPT refresh tokens work only once, so Janus saves the live file again on every switch rather than trusting the copy from when the account was added. Quit Codex before you switch. A running Codex writes its old account back when it renews its sign-in.

Before you trust it

No server, no telemetryThe only requests Janus makes are for your own usage figures, sent with your own tokens to Anthropic for Claude Code and to OpenAI for Codex.
A failed switch changes nothingEvery switch fetches the replacement session before touching anything live, and saves the session it is about to displace. Decline a keychain prompt halfway and you stay signed into the account you started on.
Your settings file survives~/.claude.json belongs to another program and gains keys between releases, so Janus parses what it needs and writes the rest back byte for byte.
Codex never reads half a fileThe live ~/.codex/auth.json is written owner-only and renamed into place, so no other user can read your tokens and Codex never sees a half-written sign-in.
An account signed in elsewhere is keptIf the live account is not one Janus knows about, it is saved as a new account rather than overwritten, because those credentials exist nowhere else.

Install

$ brew install --cask ramitvishwakarma/tap/janus

Or download the latest release and drag Janus to Applications. I sign the build ad-hoc rather than with a paid Apple Developer certificate, so macOS puts a quarantine flag on it and refuses to open it the first time. Clear the flag once:

$ xattr -dr com.apple.quarantine /Applications/Janus.app

Or build it yourself. It needs the Xcode Command Line Tools, not Xcode.

$ git clone https://github.com/RamitVishwakarma/Janus.git $ cd Janus && ./build.sh