AgentSkillsCN

dotclaude-config

在全局(~/.claude)或项目(.claude/)级别管理 Claude Code 的配置。适用于编辑 settings.json(权限、钩子、状态栏、模型)、管理 MCP 服务器、创建代理/命令/技能、编写 CLAUDE.md、设置规则文件,或配置新项目。该技能可自动识别上下文,并提供全局与项目级别的配置建议,以避免重复配置。

SKILL.md
--- frontmatter
name: dotclaude-config
description: Work with Claude Code configuration at global (~/.claude) or project (.claude/) level. Use when editing settings.json (permissions, hooks, statusline, model), managing MCP servers, creating agents/commands/skills, writing CLAUDE.md, setting up rules files, or configuring a new project. Determines context automatically and provides guidance on global vs project placement to avoid duplication.
license: Apache-2.0

Claude Code Configuration

Work with Claude Code configuration at any level - global (~/.claude/) or project (.claude/).

First: Determine Context

Before making changes, identify where you're working and what already exists:

bash
# Where are we?
pwd

# In a project repo or in ~/.claude itself?
[[ "$(pwd)" == "$HOME/.claude"* ]] && echo "GLOBAL" || echo "PROJECT"

# What config exists at each level?
ls -la ~/.claude/settings.json ~/.claude.json 2>/dev/null
ls -la .claude/settings.json .mcp.json 2>/dev/null

Context determines approach:

ContextYou're configuring...Primary concern
Global (~/.claude)Personal defaults for all projectsReusable patterns
Project (.claude/)Project-specific behaviorAvoid duplicating global

Working in Project Context

When configuring a project's .claude/ directory, always follow this workflow:

1. Audit Global Config First

Before adding anything to project config, examine what's already defined globally:

bash
# Check global settings
cat ~/.claude/settings.json 2>/dev/null | jq .

# Check global MCP servers
cat ~/.claude.json 2>/dev/null | jq .mcpServers

# List global agents, commands, skills
ls ~/.claude/agents/ ~/.claude/commands/ ~/.claude/skills/ 2>/dev/null

2. Apply the Reuse Principle

Only add to project config what is:

  • Unique to this project (project-specific MCP servers, custom workflows)
  • Overriding global behavior intentionally (stricter permissions, different model)
  • Sharable with the team via version control

Do NOT duplicate:

  • Permissions already in global config
  • MCP servers you use across all projects
  • Personal agents/skills that aren't project-specific

3. Explain Your Reasoning

When making recommendations, always explain WHY:

markdown
**Recommendation:** Add this permission to `.claude/settings.json`

**Reasoning:** This permission is project-specific because:
- It references paths unique to this project (`./src/api/**`)
- The global config doesn't cover this use case
- Team members will need this when they clone the repo

**Not adding to global because:** This pattern only makes sense for this project's structure.

Placement Decision Guide

Use this to decide where configuration belongs:

ConfigurationGlobal (~/.claude)Project (.claude/)
PermissionsPersonal security rules (deny secrets, keys)Project-specific paths, team-agreed rules
HooksPersonal workflows (formatters, linters)Project build/test hooks, CI-related
StatusLinePersonal preferenceNever (statusline is personal)
ModelPersonal defaultTeam agreement on model for project
MCP ServersPersonal tools (perplexity, notion)Project-specific APIs, databases
AgentsPersonal productivity agentsProject-specific workflows
SkillsGeneral-purpose skillsProject/domain-specific skills
CommandsPersonal shortcutsProject-specific operations
CLAUDE.mdPersonal preferences, styleProject context, architecture, conventions

Configuration Hierarchy

Settings merge from general to specific (later overrides earlier):

  1. Global: ~/.claude/settings.json - applies to all projects
  2. Project: .claude/settings.json - project-specific, git-committed
  3. Local: .claude/settings.local.json - per-machine, gitignored

For MCP servers:

  • Global: ~/.claude.json (mcpServers key)
  • Project: .mcp.json (mcpServers key)

For instructions:

  • Global: ~/.claude/CLAUDE.md
  • Project: CLAUDE.md or .claude/CLAUDE.md

Configuration Inventory

Scan projects for Claude Code configuration status and identify overlap:

bash
bun ~/.claude/skills/dotclaude-config/scripts/inventory.ts          # scan ~/code/
bun ~/.claude/skills/dotclaude-config/scripts/inventory.ts ~/work   # custom path

Reports: configured vs unconfigured projects, skill counts, package managers, and flags project skills that shadow global skills (candidates for removal or promotion to global).

Using Built-in Subagents

claude-code-guide

Query official Claude Code documentation:

code
Task(subagent_type="claude-code-guide", prompt="How do hooks work in settings.json?")

When to use: Latest features, undocumented behavior, syntax verification.

Explore

Examine actual configuration across levels:

code
Task(subagent_type="Explore", prompt="Compare global and project permissions")
Task(subagent_type="Explore", prompt="What MCP servers are configured at each level?")

When to use: Understanding current state, finding conflicts, debugging.

Quick Reference

Permissions

json
"permissions": {
  "allow": ["Bash(git status)", "Read(./src/**)"],
  "deny": ["Read(.env)", "Read(**/*.key)"],
  "ask": ["Bash(git push:*)"]
}

Hooks

json
"hooks": {
  "PostToolUse": [{"matcher": "Write|Edit", "hooks": [{"type": "command", "command": "..."}]}]
}

Model

json
"model": "opus"  // or "sonnet", "haiku"

CLAUDE.md Configuration

For authoring and organizing CLAUDE.md files — placement, @path imports, rules files, size management — see references/claude-md-patterns.md.

Key rules:

  • Keep CLAUDE.md concise (<500 lines); use @path imports for detail
  • Use .claude/rules/*.md for modular, auto-loaded instructions
  • Put personal preferences in ~/.claude/CLAUDE.md, project context in project CLAUDE.md

Working in ~/.claude Itself

When the current directory IS ~/.claude (e.g., this config is a git repo):

  • Everything is global — changes affect all Claude Code sessions
  • Skills, agents, commands created here are available everywhere
  • settings.json here is the global config, not a project override
  • CLAUDE.md at the root is your personal instructions for all projects
  • Treat it as a public repo if published — never commit secrets

Detailed Documentation

Example: Project Config Audit

When asked to configure a project, produce an audit like this:

markdown
## Configuration Audit

### Global Config (already have)
- **Permissions**: deny secrets/keys, allow git commands
- **MCP**: perplexity-mcp (personal)
- **Hooks**: PostToolUse formatter, Stop session-title
- **Model**: opus

### Project Needs
- Custom permission for `./packages/**` paths
- MCP server for project's Supabase instance
- Agent for project's deployment workflow

### Recommendations

1. **Add to `.claude/settings.json`:**
   ```json
   {"permissions": {"allow": ["Read(./packages/**)"]}}

Reasoning: Project-specific path not in global config

  1. Add to .mcp.json:

    json
    {"mcpServers": {"supabase": {...}}}
    

    Reasoning: Project database, needs team access via git

  2. Skip adding:

    • General git permissions (already global)
    • Perplexity MCP (personal, not project-specific)
    • Formatter hooks (already in global PostToolUse)
code

## Common Tasks

### Add a project-specific permission

First check global: `cat ~/.claude/settings.json | jq .permissions`

If not covered, add to `.claude/settings.json`:
```json
"permissions": {"allow": ["Bash(npm run build:*)"]}

Add a project MCP server

Add to .mcp.json (not ~/.claude.json) so team gets it:

json
{"mcpServers": {"project-db": {"command": "...", "env": {"DB_URL": "${PROJECT_DB_URL}"}}}}

Create a project-specific agent

Create .claude/agents/deploy.md for project workflows. Keep personal agents in ~/.claude/agents/.

Override global settings

Project settings merge with (and can override) global:

json
// .claude/settings.json - stricter for this project
{"permissions": {"deny": ["Write(./contracts/**)"]}}