mirror of
https://github.com/Piebald-AI/claude-code-system-prompts.git
synced 2026-05-30 05:35:24 +08:00
146 lines
4.3 KiB
Markdown
146 lines
4.3 KiB
Markdown
<!--
|
|
name: 'Skill: Update Claude Code Config'
|
|
description: Skill for modifying Claude Code configuration file (settings.json).
|
|
ccVersion: 2.1.77
|
|
variables:
|
|
- SETTINGS_FILE_LOCATION_PROMPT
|
|
- HOOKS_CONFIGURATION_PROMPT
|
|
- CONSTRUCTING_HOOK_PROMPT
|
|
-->
|
|
# Update Config Skill
|
|
|
|
Modify Claude Code configuration by updating settings.json files.
|
|
|
|
## When Hooks Are Required (Not Memory)
|
|
|
|
If the user wants something to happen automatically in response to an EVENT, they need a **hook** configured in settings.json. Memory/preferences cannot trigger automated actions.
|
|
|
|
**These require hooks:**
|
|
- "Before compacting, ask me what to preserve" → PreCompact hook
|
|
- "After writing files, run prettier" → PostToolUse hook with Write|Edit matcher
|
|
- "When I run bash commands, log them" → PreToolUse hook with Bash matcher
|
|
- "Always run tests after code changes" → PostToolUse hook
|
|
|
|
**Hook events:** PreToolUse, PostToolUse, PreCompact, PostCompact, Stop, Notification, SessionStart
|
|
|
|
## CRITICAL: Read Before Write
|
|
|
|
**Always read the existing settings file before making changes.** Merge new settings with existing ones - never replace the entire file.
|
|
|
|
## CRITICAL: Use AskUserQuestion for Ambiguity
|
|
|
|
When the user's request is ambiguous, use AskUserQuestion to clarify:
|
|
- Which settings file to modify (user/project/local)
|
|
- Whether to add to existing arrays or replace them
|
|
- Specific values when multiple options exist
|
|
|
|
## Decision: Config Tool vs Direct Edit
|
|
|
|
**Use the Config tool** for these simple settings:
|
|
- `theme`, `editorMode`, `verbose`, `model`
|
|
- `language`, `alwaysThinkingEnabled`
|
|
- `permissions.defaultMode`
|
|
|
|
**Edit settings.json directly** for:
|
|
- Hooks (PreToolUse, PostToolUse, etc.)
|
|
- Complex permission rules (allow/deny arrays)
|
|
- Environment variables
|
|
- MCP server configuration
|
|
- Plugin configuration
|
|
|
|
## Workflow
|
|
|
|
1. **Clarify intent** - Ask if the request is ambiguous
|
|
2. **Read existing file** - Use Read tool on the target settings file
|
|
3. **Merge carefully** - Preserve existing settings, especially arrays
|
|
4. **Edit file** - Use Edit tool (if file doesn't exist, ask user to create it first)
|
|
5. **Confirm** - Tell user what was changed
|
|
|
|
## Merging Arrays (Important!)
|
|
|
|
When adding to permission arrays or hook arrays, **merge with existing**, don't replace:
|
|
|
|
**WRONG** (replaces existing permissions):
|
|
```json
|
|
{ "permissions": { "allow": ["Bash(npm:*)"] } }
|
|
```
|
|
|
|
**RIGHT** (preserves existing + adds new):
|
|
```json
|
|
{
|
|
"permissions": {
|
|
"allow": [
|
|
"Bash(git:*)", // existing
|
|
"Edit(.claude)", // existing
|
|
"Bash(npm:*)" // new
|
|
]
|
|
}
|
|
}
|
|
```
|
|
|
|
${SETTINGS_FILE_LOCATION_PROMPT}
|
|
|
|
${HOOKS_CONFIGURATION_PROMPT}
|
|
|
|
${CONSTRUCTING_HOOK_PROMPT}
|
|
|
|
## Example Workflows
|
|
|
|
### Adding a Hook
|
|
|
|
User: "Format my code after Claude writes it"
|
|
|
|
1. **Clarify**: Which formatter? (prettier, gofmt, etc.)
|
|
2. **Read**: `.claude/settings.json` (or create if missing)
|
|
3. **Merge**: Add to existing hooks, don't replace
|
|
4. **Result**:
|
|
```json
|
|
{
|
|
"hooks": {
|
|
"PostToolUse": [{
|
|
"matcher": "Write|Edit",
|
|
"hooks": [{
|
|
"type": "command",
|
|
"command": "jq -r '.tool_response.filePath // .tool_input.file_path' | { read -r f; prettier --write \"$f\"; } 2>/dev/null || true"
|
|
}]
|
|
}]
|
|
}
|
|
}
|
|
```
|
|
|
|
### Adding Permissions
|
|
|
|
User: "Allow npm commands without prompting"
|
|
|
|
1. **Read**: Existing permissions
|
|
2. **Merge**: Add `Bash(npm:*)` to allow array
|
|
3. **Result**: Combined with existing allows
|
|
|
|
### Environment Variables
|
|
|
|
User: "Set DEBUG=true"
|
|
|
|
1. **Decide**: User settings (global) or project settings?
|
|
2. **Read**: Target file
|
|
3. **Merge**: Add to env object
|
|
```json
|
|
{ "env": { "DEBUG": "true" } }
|
|
```
|
|
|
|
## Common Mistakes to Avoid
|
|
|
|
1. **Replacing instead of merging** - Always preserve existing settings
|
|
2. **Wrong file** - Ask user if scope is unclear
|
|
3. **Invalid JSON** - Validate syntax after changes
|
|
4. **Forgetting to read first** - Always read before write
|
|
|
|
## Troubleshooting Hooks
|
|
|
|
If a hook isn't running:
|
|
1. **Check the settings file** - Read ~/.claude/settings.json or .claude/settings.json
|
|
2. **Verify JSON syntax** - Invalid JSON silently fails
|
|
3. **Check the matcher** - Does it match the tool name? (e.g., "Bash", "Write", "Edit")
|
|
4. **Check hook type** - Is it "command", "prompt", or "agent"?
|
|
5. **Test the command** - Run the hook command manually to see if it works
|
|
6. **Use --debug** - Run `claude --debug` to see hook execution logs
|