1.6 KiB
1.6 KiB
Environment Variables Reference
Claude Code exposes environment variables for plugins to reference paths and configuration.
Quick Reference
| Variable | Available In | Purpose |
|---|---|---|
${CLAUDE_PLUGIN_ROOT} |
plugin.json config | Plugin installation directory |
$CLAUDE_PROJECT_DIR |
Hook scripts (runtime) | User's project root |
$file |
PostToolUse hooks | Affected file path |
The Key Distinction
${CLAUDE_PLUGIN_ROOT} - Where your plugin is installed
- Use in
plugin.jsonfor hooks, MCP servers, and resources - Resolved at config parse time
- References files that ship with your plugin
$CLAUDE_PROJECT_DIR - Where the user is working
- Available to hook scripts at runtime
- References the user's project files
- Use when your plugin needs to operate on user code
Common Pattern: Both Together
A hook that loads plugin config but operates on user files:
#!/bin/bash
# Load config from plugin installation
CONFIG="${CLAUDE_PLUGIN_ROOT}/config/rules.json"
# Operate on user's project
TARGET="$CLAUDE_PROJECT_DIR/src"
jq -r '.patterns[]' "$CONFIG" | while read pattern; do
grep -r "$pattern" "$TARGET"
done
In plugin.json
{
"hooks": {
"PreToolUse": [{
"matcher": "Write",
"hooks": [{
"type": "command",
"command": "${CLAUDE_PLUGIN_ROOT}/hooks/validate.sh"
}]
}]
}
}
The script validate.sh receives $CLAUDE_PROJECT_DIR at runtime.
Variable Syntax
- Config files (plugin.json): Use
${VARIABLE}with braces - Shell scripts: Use
$VARIABLE(standard shell syntax)