# Claude Code config
[](https://opensource.org/licenses/MIT)
[](https://github.com/anthropics/claude-code)
PRB's personal Claude Code config, mounted at `~/.claude`.
## Quick Start
```bash
git clone git@github.com:PaulRBerg/dot-claude.git ~/.claude
cd ~/.claude
just install
ccc # Make your first commit with the claude wrapper
```
See [Installation](#installation) for full setup and [Configuration](#configuration) for customization.
## Installation
### Prerequisites
- **Bun**: JS dependencies and Husky/lint-staged automation (`bun install`)
- **Just**: command runner for build scripts (`brew install just`)
- **Python 3.13+** and [uv](https://github.com/astral-sh/uv): Python package/project manager
### Setup
```bash
git clone git@github.com:PaulRBerg/dot-claude.git ~/.claude
cd ~/.claude
just install # JS deps, Python deps, and CLI utilities
```
### Verify
```bash
just full-check # Run all code checks
just test-hooks # Run hook tests
claude # Run Claude
```
## Configuration
### Settings
All JSONC files in `settings/*` merge into `settings.json` on commit via Husky + lint-staged, and after any pull, merge,
or rebase that changes `settings/` (Husky `post-merge` and `post-rewrite`).
Edit only `settings/**/*.jsonc` (never `settings.json` directly). Merging happens automatically, or run
`just merge-settings` manually.
Run `just settings-drift` to compare `settings.json` with the sources. The recipe merges `settings/` in a temporary
directory and prints a diff grouped by top-level key. Lines marked `-` exist only in `settings.json`. Lines marked `+`
exist only in the sources. It exits 1 on drift and 0 when clean. Run `just settings-drift --self-test` to test the
recipe against fixtures.
When drift shows a change made outside the sources, port the change into the owning `settings/*.jsonc` file. Then rerun
`just settings-drift`. Do this before `just merge-settings`, because the merge overwrites `settings.json`.
Settings layout:
- `basics.jsonc`: core config, env vars, status line
- `hooks.jsonc`: event hooks
- `plugins.jsonc`: enabled plugins
- `permissions/*.jsonc`: permission rules (additional-dirs, bash, read)
### Context
`CLAUDE.md` is user-level context loaded by Claude Code across all projects. It is generated from
[PaulRBerg/dot-agents](https://github.com/PaulRBerg/dot-agents)'s `AGENTS.md` — the canonical source — via that repo's
Husky + lint-staged pre-commit hook; do not hand-edit it here. Keep repo-specific guidance in project `CLAUDE.md` /
`AGENTS.md` files.
### Justfile
Use `just` for common tasks like `just full-check`, `just merge-settings`, and `just test`. See `justfile` for the full
command list.
## Features
### Commands
`commands/` contains thin entry points that invoke skills. Commands still matter because they support directory nesting,
which enables namespaced patterns like `/yeet:issue-cc` and `/agents-brain:maintain`.
### Skills
Skills are authored in `~/projects/agent-skills` and installed by its `publish-skills` workflow into `~/.agents/skills`,
with `~/.claude/skills/<name>` symlinked to those installs — except Claude-only skills, which are installed as real
directories here. External skills (e.g. `find-skills`) come from `~/.agents`.
Examples: **agents-brain**, **commit**, **vitest**, **effect-ts**, **cli-gh**, **tool-finder**, **yeet**.
### Agents
`agents/` can hold specialized subagents invoked via the Task tool (currently none).
### MCP servers
MCP servers are user-scope entries in `~/.claude.json` (currently `chrome-devtools` and `serena`), not tracked here.
### Hooks
Hooks provide event-driven Claude Code automation. See [hooks/README.md](hooks/README.md).
Active hooks from `settings/hooks.jsonc`:
- **add_plan_frontmatter.py**: add YAML frontmatter to plan files (`PostToolUse`)
- **ai-coord**: agent coordination via the external
[ai-coord](https://github.com/PaulRBerg/agent-skills/tree/main/toolkit/coord) CLI (`PostToolBatch`, `PostToolUse`,
`PostToolUseFailure`, `SessionEnd`, `SessionStart`, `Stop`, `SubagentStart`, `SubagentStop`, `UserPromptSubmit`)
- **ai-notify**: desktop notifications via the external
[ai-notify](https://github.com/PaulRBerg/agent-skills/tree/main/toolkit/notify) CLI (`Notification`,
`PermissionRequest`, `PreToolUse`, `Stop`, `StopFailure`, `UserPromptSubmit`)
- **copy_prompt_to_clipboard.py**: copy submitted prompts to the macOS clipboard (`UserPromptSubmit`)
- **git_guard.py**: deny shared-worktree git sweeps and ask before force pushes, with options in any order
(`PreToolUse`)
- **guard_rm.py**: ask before recursive `rm` of home-level entries and git repositories (`PreToolUse`)
### Plugins
No plugins are enabled in `settings/plugins.jsonc`. `plugins/` stores marketplace metadata and caches.
## Utilities
Shell utilities are maintained in the chezmoi-managed `~/.config/prb/agents.sh` module and loaded automatically by
`~/.zshrc`:
- **`ccc [args]`**: streamlined commits via `/commit` (defaults to `--all`)
- **`cccp`**: commit and push (feature branches)
- **`ccs [args]`**: commit only staged changes
- **`ccsp [args]`**: commit staged changes and push
- **`ccbump [args]`**: quick release bumping via `/release-bumper`
- **`ccta [args]`**: archive TODOs by running the `todo-archive` skill's `archive_todo.py` directly
## License
MIT. See [LICENSE.md](LICENSE.md).
Lire le README source