A comprehensive, production-ready configuration for Claude Code demonstrating best practices for customization and automation.
Clone this repository to your ~/.claude directory:
git clone https://github.com/philoserf/claude-code-setup.git ~/.claude
After installation, review and customize:
settings.json - Adjust tool permissions for your needsCLAUDE.md - Add your personal coding principles and preferenceshooks/ and settings.jsonCLAUDE.md contains my personal coding principles and preferences as examples. Feel free to adapt these to your own style or replace with your own guidelines.
See CONTRIBUTING.md for guidelines on submitting improvements, bug reports, or new customizations.
MIT License - see LICENSE for details.
This is the global configuration directory for Claude Code (~/.claude). Settings and customizations here apply across all projects unless overridden by project-specific configurations.
| File | Purpose |
|---|---|
settings.json |
Global permissions, MCP servers, cleanup policies, and tool approvals |
~/.config.json |
User preferences and application state (not tracked in git) |
CLAUDE.md |
Instructions for Claude Code when working in this repository |
.gitignore |
Git ignore rules for this configuration directory |
| Directory | Purpose | Tracked in Git |
|---|---|---|
agents/ |
Specialized AI agents for specific tasks | Yes |
commands/ |
Custom slash commands (e.g., /commit, /review) |
Yes |
skills/ |
Custom skills and capabilities | Yes |
hooks/ |
Event-driven automation hooks | Yes |
references/ |
Shared reference files for customizations | Yes |
| Directory | Purpose |
|---|---|
projects/ |
Per-project metadata (encoded directory names) |
todos/ |
Session todo lists (UUID-named JSON files) |
plans/ |
Implementation plans from plan mode |
file-history/ |
Change tracking for edited files |
session-env/ |
Environment snapshots per session |
logs/ |
Session logs and commit history |
debug/ |
Session debug logs |
shell-snapshots/ |
Zsh environment captures |
ide/ |
IDE connection state |
statsig/ |
Feature flag evaluation cache |
history.jsonl |
Conversation history across sessions |
Claude Code uses a permission system defined in settings.json:
.env files, sudo commands)Claude Code tracks projects in the projects/ directory using encoded directory names (e.g., -Users-markayers-source-mine-go). Each project stores:
cleanupPeriodDays)commands/ (e.g., commands/mycommand.md)/mycommand in any sessionskills/ with skill name (verb-noun format)SKILL.md as the main skill file with frontmatter metadatareferences/ subdirectory if neededExample structure:
skills/fix-typos/
|-- SKILL.md # Main skill with frontmatter (name: fix-typos)
+-- references/ # Optional supporting docs
+-- examples.md
hooks/ directoryThis configuration includes 6 active hooks that automate workflows and enforce quality standards:
Run before tool execution and can block operations if needed.
Trigger: Before any Bash command
Purpose: Logs all git, gh, and dot (dotfiles) commands to stderr for tracking
Behavior: Informational only - never blocks execution
Timeout: 5 seconds
Example output: [Hook] Git command: git status
Trigger: Before any Bash command
Purpose: Suggests better alternatives when using bash for operations that have dedicated tools
Behavior: Informational only - never blocks execution
Timeout: 5 seconds
Examples:
Read tool instead of cat, head, tailGrep tool instead of grep, rgEdit tool instead of sed, awkGlob tool instead of find for file searchesTrigger: Before any Edit or Write operation
Purpose: Validates YAML frontmatter in Claude Code customization files
Behavior: Can block operations if YAML is invalid in agents, skills, or commands
Timeout: 5 seconds
Checks:
agents/*.md, skills/*/SKILL.md, commands/*.md---)Run after tool execution completes successfully.
Trigger: After any Edit or Write operation
Purpose: Automatically formats code files using appropriate formatters
Behavior: Silent formatting - never blocks or reports errors
Timeout: 10 seconds
Supported formatters:
gofmt for .go filesprettier for .js, .jsx, .ts, .tsx, .json, .md filesRun when specific events occur during the session.
Trigger: When Claude is idle and waiting for user input
Purpose: Sends macOS desktop notification when prompt is ready
Behavior: Uses osascript to display notification
Timeout: 5 seconds
Notification: “Claude Code” - “Ready for your input”
Run once when a new Claude Code session starts.
Trigger: At session startup
Purpose: Injects git repository context for awareness
Behavior: Checks for .git directory and outputs repository status
Timeout: 10 seconds
Provides:
All hooks are configured in settings.json with:
Hooks are designed to fail gracefully - if a hook errors, it exits with code 0 to avoid blocking operations.
Edit settings.json to add tool or file pattern permissions:
{
"permissions": {
"allowed": ["Read", "Bash(git:*)", "Write(*.md)"],
"denied": ["Read(.env*)", "Bash(sudo:*)"]
}
}
For project-specific permissions, create settings.local.json in the project directory.
.env* files are blocked from reading via permissionsgo.sum, package-lock.json, etc.) are write-protectedsudo commands are denied by default.mcp.json contains API credentials (GitHub token) - not tracked in githistory.jsonl may contain sensitive conversation context - not tracked in git# Check recent session logs
tail -n 50 logs/session-log.txt
# View commit history
cat logs/commit-log.txt
# List tracked projects
ls -l projects/
# View specific project stats
cat projects/-Users-markayers-source-mine-go/meta.json | jq
Claude Code automatically cleans data older than 30 days. For manual cleanup:
# Remove old session data
find todos/ -name "*.json" -mtime +30 -delete
find debug/ -name "*.txt" -mtime +30 -delete
Last Updated: 2025-12-30