CLAUDE_CONFIG_DIR does not support automatic plugin discovery
Description
When using CLAUDE_CONFIG_DIR to point to an alternate configuration directory (e.g., ~/.claude-private/), plugins registered in installed_plugins.json and enabled in settings.json are not automatically discovered by the interactive session.
Steps to Reproduce
- Create alternate config directory:
``bash``
mkdir -p ~/.claude-private/plugins
- Symlink a plugin:
``bash``
ln -s /path/to/my-plugin ~/.claude-private/plugins/my-plugin
- Register plugin in
~/.claude-private/plugins/installed_plugins.json:
``json``
{
"version": 2,
"plugins": {
"my-plugin@local": [{
"scope": "user",
"installPath": "/Users/me/.claude-private/plugins/my-plugin",
"version": "1.0.0"
}]
}
}
- Enable in
~/.claude-private/settings.json:
``json``
{
"enabledPlugins": {
"my-plugin@local": true
}
}
- Run Claude:
``bash``
CLAUDE_CONFIG_DIR=~/.claude-private claude
Expected Behavior
claude plugin listshows the plugin as ✔ enabled (this works)- Interactive session should discover and load the plugin's commands/agents/skills
Actual Behavior
claude plugin listshows the plugin as ✔ enabled- Interactive session shows "No plugins or MCP servers installed"
- Plugin commands are not available (e.g.,
/my-plugin:commandreturns "Unknown skill")
Workaround
Using --plugin-dir explicitly works:
CLAUDE_CONFIG_DIR=~/.claude-private claude --plugin-dir ~/.claude-private/plugins/my-plugin
Environment
- Claude Code version: 2.1.17
- OS: macOS Darwin 25.2.0
Impact
This prevents users from having separate Claude configurations (e.g., for different accounts, testing, or isolated environments) with their own plugin sets.
This issue has 4 comments on GitHub. Read the full discussion on GitHub ↗