Help us improve
Share bugs, ideas, or general feedback.
From claude-code-expert
Details Claude Code's directory structure, CLAUDE.md hierarchy across enterprise/user/project levels, and settings.json schema for permissions, hooks, env vars, and models. Useful for project setup and customization.
npx claudepluginhub markus41/claude --plugin claude-code-expertHow this skill is triggered — by the user, by Claude, or both
Slash command
/claude-code-expert:configurationThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Complete guide to all configuration files, settings, and directory structure.
Generates Claude Code project setups including CLAUDE.md, hooks, permissions, commands, and agents. Analyzes stack (TypeScript, JavaScript, Python, Go, Rust, etc.) to create minimal/standard/full configs.
Reference every Claude Code setting option from permissions, hooks, and sandbox to models, status line, and MCP servers. Use for config customization and troubleshooting.
Explains Claude Code settings hierarchy, permission wildcards, allow/deny patterns, and tool configurations. Use for setting up project permissions, debugging access issues, or understanding tool blocks.
Share bugs, ideas, or general feedback.
Complete guide to all configuration files, settings, and directory structure.
project/
├── .claude/
│ ├── CLAUDE.md # Project-level instructions (checked into git)
│ ├── settings.json # Project-level settings (checked into git)
│ ├── settings.local.json # Local overrides (gitignored)
│ ├── rules/ # Path-scoped rule files
│ ├── skills/ # Reusable workflow definitions
│ ├── agents/ # Custom agent definitions
│ ├── hooks/ # Hook scripts
│ ├── plugins/ # Installed plugins
│ ├── registry/ # Plugin registry metadata
│ └── tools/ # Custom tools
├── .mcp.json # MCP server configuration
├── CLAUDE.md # Root-level project instructions
└── ...
Claude Code loads instructions from multiple levels (all are additive):
~/.claude/CLAUDE.md — Global user instructions./CLAUDE.md — Root project instructions./.claude/CLAUDE.md — Additional project instructionspath/to/dir/CLAUDE.md — Instructions scoped to that directory# Project Instructions
## Build & Test
- Install: `pnpm install`
- Test: `pnpm test`
- Single test: `pnpm test -- --grep "test name"`
- Lint: `pnpm lint`
## Code Style
- Use TypeScript strict mode
- Prefer async/await over callbacks
- Max function length: 50 lines
## Architecture
- Monorepo with packages in `packages/`
- Shared types in `packages/shared`
- API routes in `src/api/`
## Important Context
- Database uses PostgreSQL with Prisma ORM
- Auth uses Keycloak OIDC
- Deploy target: Kubernetes on AWS EKS
Project and user settings files control Claude Code behavior.
.claude/settings.json (checked into git).claude/settings.local.json (gitignored)~/.claude/settings.json (global){
"permissions": {
"allow": [
"Bash(npm test)",
"Bash(npx tsc --noEmit)",
"Read",
"Glob",
"Grep"
],
"deny": [
"Bash(rm -rf /)",
"Bash(curl *)"
]
},
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "bash .claude/hooks/pre-bash.sh"
}
]
}
],
"PostToolUse": [],
"Notification": [],
"Stop": [],
"SubagentStop": []
},
"env": {
"CUSTOM_VAR": "value"
},
"model": "claude-sonnet-4-6",
"smallFastModel": "claude-haiku-4-5-20251001",
"temperature": 1.0,
"autoMemory": true,
"autoCompact": true,
"contextWindow": {
"compactThreshold": 0.8,
"warningThreshold": 0.9
}
}
{
"permissions": {
"allow": [
"Read",
"Write",
"Edit",
"Glob",
"Grep",
"Bash(npm test)",
"Bash(npm run *)",
"Bash(npx tsc *)",
"Bash(git status)",
"Bash(git diff *)",
"Bash(git log *)",
"Bash(ls *)",
"Bash(cat *)",
"mcp__filesystem__*",
"WebFetch(https://docs.*)"
],
"deny": [
"Bash(rm -rf *)",
"Bash(sudo *)",
"Bash(curl * | bash)",
"Bash(wget * | bash)"
]
}
}
* matches any characters within a single argumentBash(npm *) matches npm test, npm install, etc.mcp__server__* matches all tools from an MCP serverRead, Write, Edit, Glob, Grep, Bash, WebFetch, WebSearch, Agent, TodoWrite, NotebookEditMCP server configuration file at project root.
{
"mcpServers": {
"filesystem": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem", "/path/to/dir"],
"env": {}
},
"postgres": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-postgres"],
"env": {
"DATABASE_URL": "postgresql://user:pass@localhost:5432/db"
}
},
"custom-server": {
"command": "node",
"args": ["./my-mcp-server/index.js"],
"env": {
"API_KEY": "..."
}
}
}
}
Rules are markdown files in .claude/rules/ loaded as project instructions.
---
paths:
- "**/*.ts"
- "**/*.tsx"
---
# TypeScript Rules
- Use strict mode
- Prefer interfaces over types for object shapes
# Git Rules
- Never force push to main
- Use conventional commit format
Local overrides that are NOT checked into git. Same schema as settings.json. Values merge with (and override) settings.json.
{
"permissions": {
"allow": [
"Bash(docker *)"
]
},
"env": {
"DATABASE_URL": "postgresql://localhost:5432/mydb"
}
}