Skip to content
AltseatDownload

Codex CLI accounts, side by side on one Mac

Each Codex CLI account stays signed in with the Codex CLI's own login, in its own directory with your sessions shared. Altseat shows each one's session and weekly usage in the menu bar and starts codex on an account that has room.

Download for macOS

Free for 2 accounts. macOS 14 or later, Apple Silicon, zsh.

Last updated

The Altseat menu bar dropdown: every account by tool with its usage, the active one expanded.
Menu bar dropdown

What Altseat does with Codex CLI

One directory per account
Each account you add gets a directory of its own, such as ~/.codex-work, and codex starts with CODEX_HOME set to it. OpenAI's documentation names CODEX_HOME as the place where Codex stores its local state, ~/.codex by default; it does not describe a setup with several accounts. Your first account stays in ~/.codex.
Usage from codex app-server
Every 15 minutes while Altseat runs, it starts your own codex app-server for each account, with CODEX_HOME set, asks it for account/rateLimits/read and stops it again. The menu bar shows the session and weekly windows Codex reports, with their reset times. Refresh usage in the menu asks again, at most once a minute. Inside a session, Codex's own /status shows the remaining limits of the account it runs on.
No token read
Codex keeps each login in its own directory, in auth.json under CODEX_HOME with file credential storage. Altseat only checks that the file exists and never reads it; the usage request goes from the Codex CLI to OpenAI with that account's own sign-in.
Starts on an account with room

When the active account is at its session or weekly limit, codex starts the next account in your order that has room, makes it the active one and says so before Codex opens:

codex
altseat: personal is at its weekly limit, starting work

When every account is at a limit, it starts the active one and names the first to reset.

Shared sessions
Every account links to ~/.codex for config.toml, AGENTS.md, agents, prompts, skills, sessions and history.jsonl. The login, Codex's SQLite state and memories stay with each account. With the sessions shared, codex resume --last continues the most recent chat on whichever account starts; Codex looks in the current working directory unless you add --all.

Set up

  1. Download Altseat, drag it to Applications and open it.
  2. Choose Set up. It puts the altseat command on your PATH and adds the claude, codex and kimi shell functions to ~/.zshrc. If you are already signed in to Codex in ~/.codex, that login becomes your first Codex account. Then open a new terminal window.
  3. Add an account in the Accounts window, or in the terminal:

    altseat add work --provider codex

    It creates ~/.codex-work and links the shared files into it.

  4. Sign in once, with Codex's own login:

    CODEX_HOME=~/.codex-work codex login

    codex login completes in the browser, with the ChatGPT account you sign in with there. Sign in in the Accounts window shows the same command with Open in Terminal.

  5. Type codex as always. Each account's usage shows in the menu bar within 15 minutes, or at once with Refresh usage.

What the codex function does

Set up writes one marked block into ~/.zshrc, between # >>> altseat >>> and # <<< altseat <<<. Its codex function runs altseat pick codex, which reads Altseat's settings and the last usage on your Mac, with no network call, and prints the directory of the account to start. The function then runs the real codex with CODEX_HOME set to that directory, or unset for ~/.codex.

codex login, codex logout and codex mcp, and --version and --help, run on your first account without a pick. When CODEX_HOME is already set, or altseat is missing or fails, the plain codex runs.

Uninstall Altseat in the menu takes the block out again. Your account directories and their logins stay.

Limitations

Apple Silicon
Altseat 1.x runs on Macs with Apple Silicon and macOS 14 or later.
zsh only
The shell functions are installed in zsh, the default shell on macOS. In bash or fish, codex runs without the pick.
Chosen at launch
Altseat picks the account when codex starts and never moves a running session to another account. At a limit, quit Codex and run codex resume --last: the next account with room continues the chat. OpenAI notes that a turn already running can finish after the limit is reached. The automatic handoff Altseat does for Claude Code is planned for Codex, with no date yet.
Reported windows
Altseat shows the session and weekly windows the app-server returns, and a window Codex does not report stays empty. OpenAI notes that Pro plans currently have no five-hour limit.
Fresh numbers
Usage refreshes every 15 minutes while the app is open. The codex command picks from the last reading, with or without the app.
IDE extensions
They start Codex without the shell function, so they run your first account.

Questions

Will this get my account banned?

Altseat works only with accounts you added and are authorised to use. It never shares a login, never handles a token for anyone else and never changes the login of a running process: a handoff ends Claude Code at a turn boundary before the next account starts. It adds no capacity: each account keeps its own limits.

Each account gets its own directory through the setting its vendor documents: CLAUDE_CONFIG_DIR, which Anthropic documents for running separate accounts, CODEX_HOME for Codex and KIMI_CODE_HOME for Kimi Code.

Whether several subscriptions suit your situation is between you and each provider: see Anthropic's consumer terms, OpenAI's terms of use and the Kimi Code membership guide.

Is it safe with my credentials?

Each tool signs in with its own login and keeps its own credentials. Altseat never sees a password and never writes, refreshes or copies a token.

By default it reads Claude usage from the status line Claude Code already runs, so it does not read the Keychain. Only the usage endpoint option, off by default, reads Claude's Keychain item, to ask Anthropic for that account's usage. Codex usage comes from the Codex CLI's own local app-server.

Altseat itself sends nothing anywhere except that optional request to Anthropic, the license check (the key, a one-way hash of the Mac's id, the Mac's name and the app version) and the update check.

Does Altseat need to stay open?

Not for switching: the claude, codex and kimi commands pick from the usage Altseat last recorded, with or without the app. Claude Code's status line keeps recording Claude usage while it runs, and the Claude Code handoff runs through Claude Code's hooks and the altseat command, with or without the app; the app adds the macOS notification.

The app shows the usage in the menu bar and refreshes Codex usage every 15 minutes, so keep it open for the freshest pick.

What does the free version do?

Everything, for 2 accounts in total across Claude Code, Codex CLI and Kimi Code, with no key and no sign-up. A license raises that to 10 accounts per tool on one Mac.

Start with 2 accounts, free.

Add a second Codex account and keep typing codex: the menu bar shows each account's session and week from Codex's own app-server.

macOS 14 or later, Apple Silicon, zsh.