A Linux-only profile switcher for Claude Code. It gives Claude Code an isolated
CLAUDE_CONFIG_DIR for each account and transparently forwards normal commands
to the official Claude executable.
claude account add work
claude account add personal
claude account use work
claude account list
claude account current
claude account remove personal
claude
claude "fix this bug in main.py"Claude Code itself performs login, logout, credential storage, and token
refresh. claude-account never reads or copies credential contents.
Important
This is an independent community project. It is not made, endorsed, or supported by Anthropic. Claude and Claude Code are products of Anthropic.
- Linux
- A working Claude Code installation
- Rust 1.85 or later to build from source
Download claude-account-v0.1.1-x86_64-unknown-linux-gnu.tar.gz and its
.sha256 file from the latest release, then verify and install it:
sha256sum --check claude-account-v0.1.1-x86_64-unknown-linux-gnu.tar.gz.sha256
tar -xzf claude-account-v0.1.1-x86_64-unknown-linux-gnu.tar.gz
./claude-account installThe installer prints one export PATH=... line. Add that line to ~/.bashrc
and open a new terminal. The shim lives in its own directory; it does not
replace the official Claude executable.
Confirm the installation:
type -a claude
claude account listThe claude-account shim should appear before the official Claude executable.
git clone https://github.com/hamzarehmandeveloper/claude-account.git
cd claude-account
cargo build --locked --release
./target/release/claude-account installclaude account add work
claude account add personal --email [email protected]
claude account add company --sso
claude account add api-billing --consoleThis opens Claude Code's official login flow. The first profile becomes active.
Adding another profile does not switch the active profile. The command also
completes Claude Code's local onboarding state, so the next claude launch
uses the saved login without asking you to authenticate again.
Switching affects newly launched Claude processes. Existing sessions keep the account with which they were started.
claude account list
claude account currentcurrent prints only the profile name, making it safe to use in scripts.
claude account remove personalThis runs Claude Code's official auth logout inside the profile and
unregisters it. Settings and session history are preserved, allowing the same
profile name to reuse them later.
To delete all local data belonging to the profile:
claude account remove personal --purge --yesRemoving the active profile is refused unless --force is supplied.
--purge permanently deletes that profile's settings, sessions, plugins, and
history in addition to its stored login.
claude account --help
claude account add --help
claude account remove --helpAll non-account commands and flags are passed unchanged to the official Claude executable:
claude
claude -p "explain this project"
claude --model opus
claude auth status --textBy default:
~/.config/claude-account/state.json
~/.local/share/claude-account/profiles/<name>/
~/.local/share/claude-account/bin/claude
~/.local/share/claude-account/libexec/claude-account
The standard XDG_CONFIG_HOME and XDG_DATA_HOME variables are respected.
CLAUDE_ACCOUNT_HOME can place all application data under one absolute
directory, which is especially useful for tests.
The state file contains profile names, directory paths, and the real Claude executable path. It never contains access or refresh tokens.
To guarantee that the selected profile is actually used, the wrapper removes these variables from the child Claude process:
ANTHROPIC_API_KEYANTHROPIC_AUTH_TOKENCLAUDE_CODE_OAUTH_TOKEN
Set CLAUDE_ACCOUNT_PRESERVE_AUTH_ENV=1 if you intentionally want those
variables to override profile authentication.
cargo fmt --check
cargo test --locked --all-targets
cargo clippy --locked --all-targets -- -D warningsSee CONTRIBUTING.md for the contribution workflow and SECURITY.md for private vulnerability reporting.
Released under the MIT License.