What's shared, what isn't¶
Short version: profiles share nothing. Each one is a complete, separate copy of Claude Code's configuration. The only things shared are files that live inside your project folders.
Nothing is inherited¶
Claude Code writes to whichever directory CLAUDE_CONFIG_DIR points at, and
never looks anywhere else. There is no fallback to ~/.claude.
The clearest demonstration: create a new profile while your original account is
signed in, and it reports Not logged in. If profiles inherited anything, it
would have picked up those credentials.
$ claude-profiles
╭──────────┬─────────────────┬──────┬────────┬───────────┬───────┬───────────┬────────────╮
│ PROFILE │ ACCOUNT │ AUTH │ 5-HOUR │ RESETS │ 7-DAY │ RESETS │ AS OF │
├──────────┼─────────────────┼──────┼────────┼───────────┼───────┼───────────┼────────────┤
│ * default│ you@example.com │ ok │ 59% │ in 53m │ 40% │ in 4d 23h │ 1h ago │
│ work │ (not logged in) │ none │ - │ - │ - │ - │ never used │
╰──────────┴─────────────────┴──────┴────────┴───────────┴───────┴───────────┴────────────╯
What that means day to day¶
| You do this in one profile | In another profile you get |
|---|---|
| Add an MCP server | not there - add it again |
| Approve a project's trust prompt | asked again |
| Install a plugin | not there |
| Change a setting | not there |
| Add a skill or agent | not there |
| Have 50 conversations | sees none of them |
| Save memory about a project | not there - see below |
That last row is exactly why session handoff exists. The other account is not hiding your conversation - it genuinely cannot see the file, so handoff physically moves it.
Memory is per profile too¶
Claude Code stores saved memory at
<profile>/projects/<encoded-dir>/memory/, so it is scoped per profile and
per project. Two accounts working on the same repository keep separate memory.
claude-handoff --with-memory
merges it across when you move a conversation. For facts that should hold
whichever account you use, CLAUDE.md in the repository is the better home -
every profile reads it.
The one exception: project files¶
Anything stored inside a project folder is shared, because it belongs to the repo rather than to your account.
~/projects/<project-name>/api/
.mcp.json <- every profile reads this
CLAUDE.md <- every profile reads this
.claude/ <- every profile reads this
So a project that ships its own MCP servers gives them to whichever account you use there.
Approval is still per-profile
The .mcp.json file is shared, but permission to use it is stored in your
config directory. The first time you open that project under a new profile,
Claude Code asks again whether to trust the project's MCP servers.
The rule¶
| Where it lives | Shared between profiles |
|---|---|
~/.claude or ~/.claude-profiles/<name>/ |
no - per-profile |
| inside the project folder | yes |
Why this is usually what you want¶
Real separation. A client account cannot accidentally pick up your personal MCP servers, credentials, plugins, or chat history. Nothing leaks between contexts.
The trade-off: every new profile starts empty and needs setting up.
Setting up a new profile faster¶
Copy the pieces you want from an existing profile:
cp ~/.claude/settings.json ~/.claude-profiles/work/
cp -R ~/.claude/plugins ~/.claude-profiles/work/
cp -R ~/.claude/skills ~/.claude-profiles/work/ # if you have any
Global MCP servers are registered in .claude.json, so re-add them with the CLI
while that profile is active:
Never copy .credentials.json
It belongs to one account. Copying it does not give you two logins - it gives you two profiles pointing at the same account, and signing out of one breaks both.
Checking what a profile has¶
ls ~/.claude-profiles/work # what this profile has accumulated
claude-profiles # which account is in each
A profile directory fills up on its own as you use it - projects/,
sessions/, history.jsonl, caches. Differences between profiles are normal
and mean nothing is wrong.