Local machine

Two Claude accounts, one terminal

If you have a work Claude account and a personal one, you have probably signed out of one to use the other. You don't have to. The Configure My AI companion keeps every Claude Code login in its own place on your machine, serves all of them from a single running process, and lets each workspace decide which subscription pays.

Why we built it

Two accounts on one laptop used to mean claude /logout, sign in again, do the work, sign back out. It's the kind of small friction that quietly changes behaviour — you stop using the right account and start using whichever one is already signed in.

The fix wasn't account switching. It was making the machine hold both at once. Claude Code reads its login from CLAUDE_CONFIG_DIR, so a login is really just a directory. Give each one its own directory and there is nothing to switch:

~/.configure-my-ai/
  config.json              # the device token. Ours.
  claude-profiles/work/    # one CLAUDE_CONFIG_DIR
  claude-profiles/personal/

We never read inside those directories. The separation is the security property, and rummaging around in there looking for tokens would quietly give it up.

Setting it up

Four commands on the machine, once. Each claude:add opens Claude's own sign-in in your browser — Configure My AI never sees it.

cma-agent claude:add --label "Work"       # sign in as the work account
cma-agent claude:add --label "Personal"   # …and the personal one
cma-agent accounts                        # check which account each one resolved to
cma-agent start                           # leave this running

If the second sign-in sends you straight through without asking which account, it's because your browser is still signed in to claude.ai as the first one. Sign out there, or use a private window, and run it again.

claude:add doesn't take your word for it. After the browser flow it re-probes the login it just created and reports the result, because "you signed in" and "this profile actually resolves" are genuinely different claims — Claude Code keeps credentials in the macOS Keychain, and a per-profile config directory doesn't isolate them there quite the way it does on Linux. If the probe fails it tells you the command to retry with rather than leaving you to find out later, mid-message.

cma-agent status answers "is this working?" at any point. It prints what the machine can see and what Configure My AI can see, then lists what to do about any difference.

Which account is this, really?

Here is the thing a label cannot tell you. "Work" is what you typed; it is the one fact in this system that cannot be wrong, and it says nothing at all about which subscription a run will spend. So the companion reads the account back — out of each login's own config directory, the settings file that sits beside the credential rather than holding it — and shows it everywhere the login appears.

cma-agent accounts
Claude Code  [claude_code]  2.1.220
  ✓ Work  [work]
      account:   [email protected]
      folder:    ~/.configure-my-ai/claude-profiles/work
      provider:  "Claude Code · Work"
  ✓ Personal  [personal]
      account:   [email protected]
      folder:    ~/.configure-my-ai/claude-profiles/personal
      provider:  "Claude Code · Personal"

Three things to read there: each address is the one you expect, no two logins show the same address, and each has a provider name to pick in the web app. That middle one is the check worth having — on a Mac, two logins really can collapse onto a single account through the Keychain, and until now that looked exactly like everything working. The command says so outright when it happens.

The same account then opens every run in the terminal:

→ Claude Code (account: [email protected]): claude-opus-5 on "work" in ~/code/site…
[0034]   · Starting up
[0034]   · Reading app/models/user.rb

…and it is the first line of the thinking log in the web app, pinned there for the whole run, so a session two hundred steps long still says which subscription paid for it. Four places to look, and they should all agree; if two ever disagree, believe the usage page on claude.ai.

You don't have to create anything in the web app

As soon as the machine reports a usable login, it becomes a provider on its own. Two logins, two providers:

  • Claude Code · Work
  • Claude Code · Personal

They show up in the provider list of every configuration, next to your API keys, each with the account it signs in as beside it — so picking between two logins is picking between two subscriptions rather than between two names.

What travels is the address and nothing else. No credential ever leaves the machine, we never read inside a profile directory for one, and there is no "reveal secret" button on a device anywhere in the app — that is not an oversight. If you would rather even the address stayed on your machine, start the companion with CMA_HIDE_ACCOUNT_EMAIL=1 and a masked hint (d•••@acme.com) is sent instead. It is still enough to tell two logins apart in a dropdown, and your own terminal still prints the address in full.

One account per workspace

Here is the part worth being precise about, because it is where the two concepts meet. Providers belong to you. Configurations belong to a workspace. So the way you get "this workspace runs on my work account" is to point that workspace's configurations at the work provider:

Workspace Its configurations point at Which spends
Acme (client work) Claude Code · Work Your work Claude plan
Side projects Claude Code · Personal Your personal Claude plan

Set it once per configuration and the boundary holds itself. A chat or code session in the Acme workspace runs against the work login because that's what its configuration says, not because of anything you remembered to click first.

One terminal, both accounts

cma-agent start is one process and it serves every login on the machine. You do not run a companion per account, and there is no second window to keep open.

It polls us — we never connect to you — claims a job, sets CLAUDE_CONFIG_DIR to the directory belonging to that job's provider, and runs Claude Code inside it. A run on Work cannot reach Personal's credential, because it is never pointed at it.

Several at once, across both accounts

It runs up to three jobs at a time by default — five at most, and the number lives on the Devices page so you can change it without touching the terminal. They can belong to different accounts: a work session and a personal one really do run together, each in its own config directory, each spending its own subscription. cma-agent max-jobs 2 caps it lower on a machine you are also trying to work on; the lower of the two numbers always wins.

What it won't do

Your Claude plan can only pay for work while your machine is awake, which makes this a great fit for anything you're present for and the wrong fit for anything that has to run without you. Chat, code sessions and the composer: yes. Scheduled bots, API endpoints and embedded widgets: no — a 3am run needs a credential that doesn't depend on your laptop being open.

So this is an addition to your setup rather than a replacement for it. Most people keep an API key or managed credits for the always-on surfaces and spend their Claude plan on day-to-day work.


Full setup, including what stays on your machine and what happens when a session lapses, is in the local machine docs. If you only have one Claude account, skip all of this — your existing login is picked up automatically and becomes a provider named after the machine.