Feature request: Claude Code profiles with isolated memory, commands, hooks, and settings

Open 💬 29 comments Opened Sep 3, 2025 by PaulRBerg

Problem

The Claude Code ecosystem has grown at breakneck speed. There are now dozens of batteries-included frameworks that enhance Claude with powerful context and subagent libraries, e.g.

And many others listed here: https://github.com/hesreallyhim/awesome-claude-code

[!NOTE] These frameworks are incompatible with each other, but users may want to use all of them - different frameworks for different projects.

Solution

Introduce a new profiling feature into Claude Code that lets users configure a specific profile.

A new profiles directory would be added to .claude.

.claude
└── profiles
    ├── claudekit
    │   ├── settings.json
    │   ├── commands/
    │   ├── context/
    │   └── hooks/
    └── superclaude
        ├── settings.json
        ├── agents/
        └── commands/

Then, users would do something like this:

Profile Management Commands

# Set active profile - only commands and hooks from this profile are loaded in Claude Code
claude profile use <profile-name>

# List available profiles
claude profile list

# Create new profile
claude profile create <profile-name>

# Show current profile
claude profile current

# Delete profile
claude profile delete <profile-name>

Profile Structure

Each profile would contain:

  • CLAUDE.md - Profile-specific CLAUDE.md file
  • settings.json - Profile-specific configuration overrides
  • agents/ - Custom agents for this profile
  • commands/ - Custom slash commands
  • hooks/ - Profile-specific hook configurations

All of these profile features will completely override the global features in the root .claude directory, except for
the settings.json file.

Settings Hierarchy

Profiles would inherit from global settings but override specific configurations, following Claude Code's existing
settings hierarchy:

  1. Command line arguments (highest precedence)
  2. Active profile settings ← New layer
  3. Project-local settings (.claude/settings.local.json)
  4. Shared project settings (.claude/settings.json)
  5. User settings (~/.claude/settings.json) (lowest precedence)

This allows users to seamlessly switch between framework configurations while maintaining project-specific overrides.

View original on GitHub ↗

29 Comments

github-actions[bot] · 10 months ago

Found 2 possible duplicate issues:

  1. https://github.com/anthropics/claude-code/issues/630
  2. https://github.com/anthropics/claude-code/issues/1985

This issue will be automatically closed as a duplicate in 3 days.

  • If your issue is a duplicate, please close it and 👍 the existing issue instead
  • To prevent auto-closure, add a comment or 👎 this comment

🤖 Generated with Claude Code

christophercolumbusdog · 9 months ago

I think this, in combination with https://github.com/anthropics/claude-code/issues/6915, will be important to properly scope different tasks while maintaining maximum context availability.

stanska · 8 months ago

This will helps us have more than different marketplaces for different projects(using different profiles)

github-actions[bot] · 7 months ago

This issue has been inactive for 30 days. If the issue is still occurring, please comment to let us know. Otherwise, this issue will be automatically closed in 30 days for housekeeping purposes.

PaulRBerg · 7 months ago

bump, still important feature

PaulRBerg · 6 months ago

Codex CLI's profiles is exactly what I had in mind with the feature described in the OP:

<img width="969" height="727" alt="Image" src="https://github.com/user-attachments/assets/ba06d61b-32ef-4c45-b2e8-ffb889b853a1" />

apetta · 6 months ago

This would be really useful. I'm finding model changes in one instance are affecting other running instances.

ap00rv · 6 months ago

I highly desire this feature because it helps me to create profiles for different tasks at my work instead of removing / adding tools, subagents to maximize context window .

gabrielbryk · 6 months ago

+1

Palkers76 · 6 months ago

+1

akauper · 5 months ago

Would love this feature!!! 'documentation' profile, 'deployment' profile, all in one project but all which load there own skills/mcp/etc. would greatly help cutdown on context bloat

eoliphan · 5 months ago

im literally working on an ugly hack version of this for my local workflows. Basically trying to generate/manage custom settings files, and just specify them via --settings until this or something similar is implemented.

evgunter · 5 months ago

this would be extremely useful. in particular, i'd love to be able to define custom groups of permissions that can be easily used anywhere, rather than having to apply them to each directory individually.

mrumpf · 5 months ago

It would also help to tighten security by rolling out profiles centrally.

sparx2206 · 4 months ago

+1

vaclavekp · 4 months ago

+1

kkreso · 4 months ago

+1

GevaOr · 4 months ago

+4

pxdl · 4 months ago

This would be great for people who need a higher separation of concerns

vaclavpavek · 4 months ago

I would welcome this feature. I work with multiple partners, and I often encounter conflicts between MCP servers, such as unnecessary memory sharing. I would appreciate the ability to run a Cloud profile or instance with completely isolated settings and memory.

yarikleto · 4 months ago

Guys, I vibed this tool to help me for my work. Maybe this tool can help you too. All source code are available, well tested, well documented. You can even fork it if you need. I would be grateful for your feedback ☺️

xcxtx8 · 4 months ago

Would love to have this feature

julianleopold · 3 months ago

I built a version which addresses most wishes in this thread.

Install & use:

npm install -g claude-profiles
claude-profiles create work
claude-profiles use work

Or use slash commands directly inside Claude Code:

/profiles-create work
/profiles-use work
/profiles-list
/profiles-configure

What it does:
Each profile gets its own settings.json, mcp.json, CLAUDE.md, commands/, and hooks/. Switching atomically swaps them inside ~/.claude -- no symlinks, no CLAUDE_CONFIG_DIR. Crash-safe via intent file + lockfile.

Addresses the use cases in this thread:

  • Different MCP servers per context (work Jira/Slack vs personal -- @vaclavpavek's concern)
  • Different permissions per profile (@evgunter's request)
  • Toggle plugins per profile to reduce context bloat (@akauper, @ap00rv)
  • Per-project auto-switching via .claude-profile files (like .nvmrc)
  • Statusline shows active profile name

@yarikleto your tool swaps the entire ~/.claude directory (including auth, sessions, memory, history). I decided to selectively swap only config files. Auth credentials, project memory, and sessions stay shared across profiles.

Scope: This manages global ~/.claude config. Project-level .claude/ directories (used by frameworks like [Ruflo](https://github.com/ruvnet/ruflo), SuperClaude, ClaudeKit) are unaffected -- Claude Code merges both layers, so they coexist.

yurukusa · 3 months ago

A Notification start hook can load profile-specific settings:

DIR=$(basename "$PWD")
PROFILE_DIR="$HOME/.claude/profiles"
if [ -f "$PROFILE_DIR/$DIR.sh" ]; then
    source "$PROFILE_DIR/$DIR.sh"
    echo "Profile loaded: $DIR" >&2
elif [ -f "$PROFILE_DIR/default.sh" ]; then
    source "$PROFILE_DIR/default.sh"
fi
exit 0

Profiles: ~/.claude/profiles/work.sh, ~/.claude/profiles/personal.sh, etc.

vaclavpavek · 3 months ago

@julianleopold Can I use multiple profiles at the same time?

julianleopold · 3 months ago

@vaclavpavek No, only one profile can be active at a time.

Profiles work by swapping files inside ~/.claude/ (settings.json, mcp.json, hooks, commands, CLAUDE.md). Since Claude Code reads from that single directory, switching a profile affects every terminal/session on the machine.

donishmand23 · 2 months ago

+1

Naraujo13 · 2 months ago

I built a small CLI tool for a subset of the featurse here that interested me: saving named profiles of MCPs and plugins to use per working context (Jira + Docs for` planning, LSP + GitHub for coding, etc.), without touching your base settings.

It is a simple wrapper around calling claude but passing only the specific set of tooling you want on that session (plugins and MCPs). This is done on the fly by creating a temp file of your settings.json with the profile overrides on top, so it is fully scoped to that session will never touch your .claude folder and configs.

Parallel sessions with different profiles are supported and the main use case I had in mind @vaclavpavek

If anyone wants to try it out while there is no native profiles support: https://github.com/Naraujo13/claude-code-profiles

# install 
uv tool install claude-code-profiles

# opens editor for profile, pre-filled with all your MCPs and plugins, remove what you don't want, save and close
ccp create <profile>

# launch claude session with the chosen profile                                 
ccp <profile>          
9Skie · 1 month ago

it feels extremely dumb to not support this natively at all, we have tools like cc switch that can switch providers in a gui style, but claude.md still leaks to other agents in the same machine,