by Nandeep2750
Run multiple Claude Code accounts on one machine — per-project switching, live usage limits, and session handoff when you hit a rate limit
# Add to your Claude Code skills
git clone https://github.com/Nandeep2750/claude-profilesGuides for using cli tools skills like claude-profiles.
See how claude-profiles compares with popular alternatives.
claude-profiles is an open-source cli tools skill for AI coding assistants such as Claude Code, Codex CLI, and ChatGPT, built by Nandeep2750. Run multiple Claude Code accounts on one machine — per-project switching, live usage limits, and session handoff when you hit a rate limit. It has 4 GitHub stars.
claude-profiles's catalog security scan is still queued. You can run an instant dependency and prompt-injection check now with the "Scan for vulnerabilities" button above.
Clone the repository with "git clone https://github.com/Nandeep2750/claude-profiles" and add it to your Claude Code skills directory (see the Installation section above).
claude-profiles is primarily written in Python. It is open-source under Nandeep2750 on GitHub, so you can review or fork the full source.
Yes. SkillsLLM lists many other CLI Tools skills you can browse and compare side by side. Open the CLI Tools category from the badge at the top of this page, or use the Related Skills and comparison links further down to weigh claude-profiles against similar tools.
No comments yet. Be the first to share your thoughts!
Top skills in this category by stars
Available after the catalog security scan passes.
⚠️ Third-Party Software Notice
This skill is third-party open-source software developed and hosted independently on GitHub. SkillsLLM is an informational directory and does not control or maintain the underlying repository.
Any security checks, ratings, or warnings displayed by SkillsLLM are automated and limited in scope. They do not constitute a security certification or guarantee that the software is safe, error-free, or free from malicious code, vulnerabilities, compromised dependencies, or prompt-injection risks.
Review the source code, permissions, dependencies, and configuration before installing or running any third-party skill. Use is at your own risk. To the maximum extent permitted by applicable law, SkillsLLM is not liable for losses arising from third-party software.
The deep catalog scan for this skill is still queued. Run an instant dependency check now instead.
Run multiple Claude Code accounts on one machine.
Pick an account per project, and move a conversation between accounts when one hits its usage limit.
Claude Code stores one login. Signing into a second account logs the first one out, and each account can only see its own conversation history.
| Without profiles | With profiles | |
|---|---|---|
| Work + personal accounts | re-authenticate every switch | both signed in, switch instantly |
| Hit a usage limit | stuck, even if another account has capacity | hand the conversation over and continue |
| Client projects | easy to use the wrong account | the right account is picked on cd |
work is 91% through its weekly limit, personal has room, and the
conversation moves across in one command.
macOS, Linux, WSL or Git-Bash
git clone https://github.com/Nandeep2750/claude-profiles.git ~/.claude-tools
sh ~/.claude-tools/install.sh
exec $SHELL -l # or just open a new terminal
Windows (PowerShell)
git clone https://github.com/Nandeep2750/claude-profiles.git $HOME\.claude-tools
pwsh -File $HOME\.claude-tools\install.ps1
Then add an account:
claude-profile work # creates the profile
claude # then /login
See what you have:
$ claude-profiles
See the screenshot above. Two accounts signed in at once is normal — that is the whole point. The usage
columns tell you which account has room before you start, rather than
finding out mid-conversation. Both limits are shown because they run on separate
clocks: work above is fine for the next five hours but 87% through its week.
Those figures are cached. For current ones:
claude-profiles --live
Fetches each signed-in account in parallel and costs no model tokens — it reads a usage endpoint, it does not run a prompt. Failures fall back to the cached value rather than breaking the table.
| Command | Does |
|---|---|
claude-profiles |
List every profile and which account is signed into it |
claude-profile NAME |
Switch to NAME, creating it if needed |
claude-sessions |
List this directory's conversations, readably |
claude-handoff NAME |
Move this directory's latest conversation to another account |
claude-profile-remove NAME |
Delete a profile, its conversations and its credentials |
claude-profile-exec NAME CMD |
Run one command under a profile without switching |
claude-profile-clone SRC DST |
Seed a profile's settings from another one |
claude-doctor |
Check the installation for problems |
claude-update |
Check for and pull a newer version |
claude-profiles statusline |
A status line for inside Claude Code |
claude-auto |
Launch Claude on whichever account has the most room |
claude-best |
Which account has the most headroom |
claude-clear |
Delete one project's sessions, with a prompt |
claude-prune |
Delete sessions by age, orphaned, or leftovers (dry run by default) |
claude-profiles --live |
Current usage instead of the cached snapshot |
Search every conversation you have ever had, across all accounts:
claude-sessions -A -a --grep "rate limit"
Tab completion works on all of them. Full reference →
Drop a marker file anywhere in a project tree — the nearest one wins, walking up from the current directory:
echo work > ~/projects/<project-name>/.claude-profile # covers every repo under <project-name>/
Now cd anywhere under ~/projects/<project-name> selects the work account
automatically. Everywhere else falls back to default.
More →
You are 50 messages into a conversation. Claude knows your whole problem. Then you hit your usage limit — but your other account has capacity.
claude-handoff work
That moves the conversation into the other account's history and prints the command to continue it. Same conversation, same memory, different account paying. Like forwarding an email thread to your other address.
The whole session travels, including the tool results and subagent transcripts
Claude Code keeps in a directory beside the conversation. The original is
renamed to .bak rather than deleted, so a move is undone by renaming it back;
--copy leaves it in place. Your code, folder and git branch are untouched.
More →
Claude Code reads CLAUDE_CONFIG_DIR, and derives its credential slot from that
path:
| Platform | Credentials stored in |
|---|---|
| macOS | Keychain, service Claude Code-credentials-<sha256(dir)[:8]> |
| Linux / WSL / Windows | <profile dir>/.credentials.json |
So each profile gets its own login, and signing into one cannot disturb another.
Nothing here patches Claude Code — it sets an environment variable Claude Code
already reads, and copies transcript files Claude Code already understands.
Remove it and claude keeps working unchanged.
Details →
| Path | Holds | Synced |
|---|---|---|
~/.claude-tools |
this repo — logic, shell layers, installers | yes |
~/.claude-profiles |
credentials, transcripts, per-account config | never |
Account data stays machine-local. Run /login once per profile on each machine.
Profiles also share nothing with each other — MCP servers, plugins, settings
and conversation history are all per-profile, and nothing is inherited from
~/.claude. The one exception is files inside a project folder (.mcp.json,
CLAUDE.md), which every profile reads.
What's shared, what isn't →
[!WARNING] On macOS a profile's Keychain entry is keyed to its absolute path. Moving or renaming a profile directory after logging in invalidates its credentials.
claude-update --check # what is installed, and what is available
claude-update # pull the newer version
It tells you whether the change needs a shell restart, refuses to run over local edits, and never touches your account data. More →
Two indicators, because the shell prompt vanishes once Claude Code takes over the terminal:
claude-profiles statusline --install-all # inside Claude Code
work │ you@company.com │ ⎇ main │ ctx 52%/1000k │ 5h 2% │ 7d 3%
export CLAUDE_PROFILE_PROMPT=1 # in your shell prompt
~/projects/client-work % claude:client
Set these before the source line in your rc file:
| Variable | Effect |
|---|---|
CLAUDE_DEFAULT_PROFILE |
where unmarked directories fall back to (default: default) |
CLAUDE_PROFILE_PROMPT=1 |
show the active profile in your prompt |
CLAUDE_PROFILE_HOME |
where account data lives (default: ~/.claude-profiles) |
python3, Claude Code, and zsh, bash or
PowerShell.
Issues and pull requests are welcome — see CONTRIBUTING.md. Security issues: please read SECURITY.md and report privately.
Run the tests:
python3 -m unittest discover -s tests -v # core
bash tests/test_shell.sh # shell layer, bash
zsh tests/test_shell.sh # shell layer, zsh
Everything runs against a throwaway HOME, so your real profiles and
credentials are never touched. CI runs the same suite o