02free & installable

account switch / macOS + Linux

Two accounts. Both signed in.

Claude Code reads its identity from a directory. Give it a second one and the second account stays logged in permanently, because signing into one never evicts the other. duoterm creates the directory, keeps your configuration identical across both, and switches between them in no time at all.

duoterm / accounts

both authenticated

02 accounts 00 sign-outs switch 0.00s
●
primary~/.claude · variable unset
you@company.com live selected
○
work~/.claude-accounts/work
you@personal.com authed standing by
○
client~/.claude-accounts/client
you@client.dev authed standing by
$ duoterm use worknow: work · new sessions use itok
01

Add

duoterm add work creates the slot and links your configuration into it, so nothing is set up twice.

02

Sign in

duoterm login work opens the browser once. That token then persists next to the first one, not on top of it.

03

Switch

duoterm use work writes one word to a state file. No network, no prompt, no waiting.

04

Keep

Running sessions hold the account they started with, so both can be live in different terminals at the same time.

testedClaude Code 2.1.236
runtimebash 3.2+ / local
licenseMIT · free

Covers Claude Code. The desktop app and the browser keep their own sessions; separate browser profiles are the equivalent trick there.


command surface

Nine commands. That is the whole tool.

A single shell script on your machine. No daemon, no package manager, no account, and no network access after it is installed.

  • 01 duoterm add <name>create an account slot once
  • 02 duoterm login <name>sign it in, in the browser once
  • 03 duoterm use <name>switch. No sign-out daily
  • 04 duoterm listaccounts and emails, current starred daily
  • 05 duoterm run <name> [args]one session as another account ad hoc
  • 06 duoterm with <name> <cmd>any command, that environment ad hoc
  • 07 duoterm syncrelink shared config as needed
  • 08 duoterm doctorcheck the wiring as needed
  • 09 duoterm remove <name>delete a slot, never the primary rare
shared / symlinked

One configuration

identical

Every slot links CLAUDE.md, settings, commands, hooks, skills, agents, plugins and projects back to your primary. Identity is the only thing that differs, and the credential never leaves its own keychain item.

slots
unlimited
switch
local
state
one word
deps
none

Not shared, on purpose: .claude.json and the credential itself. That is the whole of what makes one slot a different account from another.

$duoterm liststarred = live

Add your own entries to the shared list in shared.conf and run duoterm sync. Anything you place in a slot by hand is left alone, so a per-account override stays an override.

$duoterm doctordangling links, missing logins

install

One line. Then stop signing out.

The installer writes one script to your local bin directory and adds one block to your shell startup file. It tells you exactly what it did and how to undo it. Read the source first; it is short, and that is the point.

$ curl -fsSL https://auto.relay70.dev/duoterm/install.sh | sh Read the source Read the installer Report a problem