claude-profiles 0.10.0

Launch claude with only the plugins, skills, and MCP servers a profile defines
claude-profiles-0.10.0 is not a library.

claude-profile

Give every task its own Claude Code. Launch claude with only the plugins, skills, marketplaces, and MCP servers a profile defines โ€” everything else on your machine is never loaded for that session.

License: MIT Platform Built with Rust

A standalone cross-platform CLI (Rust; macOS / Linux / Windows) โ€” not a plugin, and it never installs anything into your real ~/.claude: every plugin/skill a profile uses is vendored into that profile's own directory instead.

claude-profile rust-developer           # a lean Rust session โ€” nothing else loaded
claude-profile rust-developer frontend  # combine profiles for a task that spans both
claude-profile fuzzyalej/security       # install a shared profile repo, then launch it

Why

If you use Claude Code seriously, your ~/.claude becomes a junk drawer. Every plugin, skill, and MCP server you've ever installed loads into every session โ€” the Rust linter you need today sits in context next to the Kubernetes tools, the writing skills, and the three MCP servers from that experiment last month. It all costs tokens, it all adds noise, and none of it is scoped to what you're actually doing.

claude-profile fixes that with profiles: a tiny JSON file that says "for this kind of work, load exactly these things." Launch a profile and you get a focused session; open a second terminal with a different profile and the two don't interfere.

  • ๐ŸŽฏ Focused sessions โ€” only the tools relevant to the task are enabled.
  • ๐ŸชŸ Many at once โ€” different terminals run different profiles simultaneously.
  • ๐Ÿ“ฆ Shareable โ€” publish a profile repo; teammates install it and launch by name, backed by a lockfile so it resolves to the same plugin code across machines and over time.
  • ๐Ÿงน Non-destructive โ€” every plugin/skill a profile uses is vendored into that profile's own directory; remove deletes it outright โ€” a real uninstall, not a disable.

Installing

Pick whichever fits your platform โ€” all install the same claude-profile binary.

macOS / Linux โ€” Homebrew:

brew install fuzzyalej/tap/claude-profiles

macOS / Linux โ€” shell (no Homebrew, no Rust needed):

curl -LsSf https://github.com/fuzzyalej/claude-profile/releases/latest/download/claude-profiles-installer.sh | sh

Windows โ€” PowerShell:

irm https://github.com/fuzzyalej/claude-profile/releases/latest/download/claude-profiles-installer.ps1 | iex

See Before you start on Windows for prerequisites.

Any platform with Rust โ€” Cargo:

cargo install claude-profiles

Then verify:

claude-profile --version

Before you start on Windows

claude-profile runs in PowerShell, Command Prompt, Windows Terminal, and Git Bash. Before you launch a profile, make sure you have the following:

  • Git for Windows. claude-profile uses git to fetch marketplaces and profile repos. Git for Windows also includes sh.exe, which runs an existing statusline command. To install it, run winget install --id Git.Git -e.
  • Claude Code, with claude on your PATH. Both the native installer (claude.exe) and an npm install (claude.cmd) work.

To check both, open a new terminal and run:

git --version
claude --version

If either command isn't found, install the missing tool, and then open a new terminal so it picks up the updated PATH.

Good to know:

  • Profiles and vendored plugins are stored in %USERPROFILE%\.claude-profiles. If HOME is set, as it is in Git Bash, claude-profile uses %HOME%\.claude-profiles instead. Use the same shell type each time, so all your sessions see the same profiles.
  • If you installed Git in a custom location, set CLAUDE_CODE_GIT_BASH_PATH to the full path of bash.exe or sh.exe. Claude Code reads the same variable. If no shell is found, the statusline command runs through cmd /C instead.
  • claude-profile completions powershell --install adds completion to the $PROFILE of every PowerShell edition you have installed, PowerShell 7 and Windows PowerShell 5.1 alike.

Updating

Update the same way you installed:

brew upgrade claude-profiles                # Homebrew

curl -LsSf https://github.com/fuzzyalej/claude-profile/releases/latest/download/claude-profiles-installer.sh | sh   # shell (macOS/Linux) โ€” re-run to get latest

irm https://github.com/fuzzyalej/claude-profile/releases/latest/download/claude-profiles-installer.ps1 | iex        # Windows PowerShell โ€” re-run to get latest

cargo install claude-profiles              # Cargo โ€” reinstalls the latest published version
cargo install --path .
# or
cargo build --release   # then copy target/release/claude-profile onto your PATH

Tip: claude-profile is a mouthful to type all day. Add alias cpf=claude-profile to your shell. (We intentionally ship only the one binary name.)

Shell completion is built in:

claude-profile completions zsh --install   # bash, fish, powershell also supported

See completions for install paths per shell and OS.

Quick start

claude-profile rust-developer          # launch a session with only this profile's plugins
claude-profile rust-dev frontend       # launch a combined session (union of several profiles)
claude-profile fuzzyalej/rust-profile  # install a profile repo if needed, then launch its default
claude-profile list                    # profiles and where they come from (bundled ones included)
claude-profile status                  # what's vendored per profile
claude-profile remove rust-developer   # delete a profile and its vendored plugins/skills
claude-profile find python             # discover plugins to add to a profile
claude-profile try npm:@mobilenext/mobile-mcp  # try an MCP server, plugin, or skill without a profile

Not sure what to put in a profile? claude-profile find python searches a local, cross-marketplace index and prints copy-paste-ready plugin@marketplace ids. See Authoring profiles for the full JSON format and find for the flag reference.

Bundled profiles

claude-profile ships ready-made profiles for Rust, Python, Go, Java, .NET, Ruby, Rails, TypeScript, Angular, Vue, React, and Tauri desktop work, plus frontend, rails-hyperdrive, and clean (plain Claude Code, no extras). They are built into the binary and available as soon as you install it. Run claude-profile list to see them, or claude-profile show <name> to inspect one. See Authoring profiles.

What a profile controls

A profile is a small JSON file naming plugins, skills, marketplaces, and MCP servers. Launching it vendors exactly those entries into the profile's own directory and loads only those โ€” nothing else on the machine is registered. Passing several profiles at once launches a combined session with the union of all of them.

Full details, including the vendoring/pinning model and how multi-profile launches merge and conflict-check: How it works.

Important limitation: your global CLAUDE.md and memory are NOT gated

Claude Code loads your global/project CLAUDE.md and auto-loaded memory from sources a profile cannot isolate โ€” they load in every session regardless of profile. See How it works ยง What is NOT gated for why this isn't "fixed" and what to do about it.

Sharing profiles

A repo can hold many profiles. install clones it and makes every profile in it available by name, without launching anything:

claude-profile install owner/repo   # fetch the pack's profiles
claude-profile <profile-name>       # launch the one you want

See Command reference for install, show, and pack update semantics.

Try before you write a profile

try launches a throwaway session from a plugin, marketplace, skill, or MCP server. The temporary profile is deleted when the session ends:

claude-profile try owner/some-plugin                   # a plugin, marketplace, or skill repo
claude-profile try npm:@mobilenext/mobile-mcp --dry-run  # print the profile it would use
claude-profile try ./my-skill --save my-skill          # keep it as a real profile

See try for target detection and flags.

Coordinate many sessions

coordinate launches a session that delegates tasks to worker sessions. Each worker runs with its own profile, in its own git worktree and branch:

claude-profile coordinate rust-developer -- --permission-mode acceptEdits   # ask it to split work
claude-profile runs --clean                                                 # remove finished workers' worktrees

Headless workers can't ask you to approve edits, so pass a permission mode that allows them.

Inside Herdr, workers open in their own background tabs in the coordinator's workspace. Elsewhere they run headless. See Coordinate many sessions.

Uninstalling

claude-profile self-uninstall           # removes the claude-profile binary
claude-profile self-uninstall --purge   # also removes ~/.claude-profiles (personal
                                         # profiles, cloned packs, locks, and every
                                         # profile's vendored plugins/skills)

claude-profile remove <profile> removes a single profile's data and vendored plugins/skills โ€” see Command reference.

Learn more

License

MIT โ€” see LICENSE.