claude-profile

Seamless profile management for Claude Code

Switch between work and personal configurations, different MCP server setups, or separate settings — without ever thinking about it.

$ curl -fsSL https://raw.githubusercontent.com/pegasusheavy/claude-code-profiles/main/install.sh | sh

Why claude-profile?

Like nvm for Node or pyenv for Python — but for your Claude Code configuration.

Transparent

Just run claude. Your default profile is automatically resolved — no special commands needed.

Isolated

Each profile is a complete config directory — settings, credentials, MCP servers, history. Everything.

Shell Native

Lightweight shell functions for bash, zsh, and PowerShell. Plus cmd.exe batch support.

Zero Overhead

No daemon. No background process. Just a function that sets an env var before calling claude.

How it works

~
# Set up your profiles once...
1

Create profiles

One per context — work, personal, client projects, experiments.

2

Set a default

Your default profile is automatically applied every time you launch Claude Code.

3

Just use claude

No special commands. Run claude like you always have.

Commands

Everything you need to manage your profiles.

Command Description
claude-profile Show current profile status
claude-profile use <name> Switch to a profile for this session
claude-profile create <name> Create a new profile
claude-profile list List all profiles
claude-profile default [name] Get or set the default profile
claude-profile which [name] Show the config directory path
claude-profile delete <name> Delete a profile (with confirmation)
claude-profile help Show help

Install

One command. Restart your shell. Done.

$ curl -fsSL https://raw.githubusercontent.com/pegasusheavy/claude-code-profiles/main/install.sh | sh

Works with bash and zsh. The installer downloads a script and adds a source line to your shell profile.

Frequently Asked Questions

Everything you need to know about managing Claude Code profiles.

What is claude-profile?

claude-profile is a free, open-source tool that lets you manage multiple Claude Code configuration profiles. Each profile is a complete, isolated config directory containing settings, credentials, MCP servers, history, and CLAUDE.md. It works like nvm for Node.js or pyenv for Python — transparently resolving your active profile when you run the claude command.

How does claude-profile work?

claude-profile provides a transparent claude() shell function wrapper. Before each invocation, the wrapper checks if a default profile is set and automatically sets the CLAUDE_CONFIG_DIR environment variable. If CLAUDE_CONFIG_DIR is already set (e.g., via claude-profile use), it passes through without overriding. The real claude binary is then called with all your arguments.

What shells are supported?

claude-profile supports bash, zsh, PowerShell 5.1+, PowerShell Core (pwsh) 6+, and Windows cmd.exe. On Unix shells it works via sourceable shell functions. On Windows it provides both a PowerShell module and a cmd.exe batch script.

Can I switch profiles temporarily?

Yes. Run claude-profile use <name> to switch to a different profile for the current shell session only. This overrides the default without changing it. The override lasts until you close the shell or run claude-profile use again.

Where are profiles stored?

On Linux and macOS, profiles are stored at $XDG_DATA_HOME/claude-profiles/ (default: ~/.local/share/claude-profiles/). On Windows, profiles are stored at %LOCALAPPDATA%\claude-profiles\. Each profile directory is a complete Claude Code configuration directory.

What is CLAUDE_CONFIG_DIR?

CLAUDE_CONFIG_DIR is an environment variable supported by Claude Code that redirects where it stores configuration and data. claude-profile manages this variable automatically, setting it to point to your active profile directory before each claude invocation.

Session overrides

Need a different profile for one shell session? Override the default without changing it.

$ claude-profile use personal
Switched to profile: personal

$ claude # uses "personal" until you close this shell