Complete guide to all configuration files, settings, and directory structure.
From claude-code-expertnpx claudepluginhub markus41/claude --plugin claude-code-expertThis skill uses the workspace's default tool permissions.
Searches, retrieves, and installs Agent Skills from prompts.chat registry using MCP tools like search_skills and get_skill. Activates for finding skills, browsing catalogs, or extending Claude.
Searches prompts.chat for AI prompt templates by keyword or category, retrieves by ID with variable handling, and improves prompts via AI. Use for discovering or enhancing prompts.
Compares coding agents like Claude Code and Aider on custom YAML-defined codebase tasks using git worktrees, measuring pass rate, cost, time, and consistency.
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"
}
}