claude-dev-env
Consistent development standards for Claude Code across every repo. Install once, get TDD enforcement, code quality hooks, specialized agents, and battle-tested rules everywhere.
Quick Start
Prerequisites
- Node.js 18+ (includes
npx) - Python 3.8+ (for hook scripts)
- Claude Code CLI installed and working
Install
npx claude-dev-env
That's it. The installer will:
- Detect your Python 3 command (
python3,python, orpy -3) - Copy rules, docs, commands, and hooks to
~/.claude/; copy agents and skills to~/.agents/and point~/.claude/agentsand~/.claude/skillsat that home - Copy hook scripts to
~/.claude/hooks/ - Merge hook groups into
~/.claude/settings.json(preserves your existing hooks) - Write a manifest to
~/.claude/.claude-dev-env-manifest.jsonfor clean uninstall - Copy Codex exec-policy files into
~/.codex/rules(CODEX_HOME/ruleswhen that variable is set) - Install the DeepStack plugin from
jl-cmd-projects/DeepStackfor Claude Code (claude plugin install deepstack@DeepStack) and Codex (codex plugin add deepstack@DeepStack), and copy that plugin into~/.cursor/plugins/deepstackwith its SessionStart hook and the first-task command registered in~/.cursor/hooks.json - Install Anthropic's security-guidance plugin from
anthropics/claude-plugins-officialfor Claude Code (claude plugin install security-guidance@claude-plugins-official), which reviews each edit, turn, and commit the agent makes for security problems.--no-security-guidanceorCDE_INSTALL_SECURITY_GUIDANCE=0skips it
Selective Install
Use --only with one or more groups:
npx claude-dev-env --only core # dev standards, hooks, agents, commands
| Group | What's included |
|---|---|
core |
Rules, docs, commands, agents, all hooks, Codex exec-policy files |
Run node bin/install.mjs --help for the group list, including any group a
declared dependency package contributes.
The installer reads only flags. A bare path argument such as npx claude-dev-env .
carries no meaning: the run lands in ~/.claude the same way. Select another root
with --target DIR, --profile ID, or the CLAUDE_CONFIG_DIR environment variable.
Verify
Start a new Claude Code session. You should see hook activity on your first prompt (code-rules-reminder, hook-structure-context). Run /sr-loop to confirm commands loaded.
For ChatGPT Work Cloud, use the cloud pstack startup verification. The local installer does not register skills with the cloud catalog or enable plugin shell hooks in cloud orchestration.
Update
Run the same command again. It overwrites existing files and updates hook entries in place:
npx claude-dev-env
Uninstall
Removes only the files this package installed (tracked via manifest) and cleans hook entries from settings.json:
npx claude-dev-env --uninstall
Bootstrap the project-path registry (one-time, post-install)
The Everything search command and the untracked-repo detector both read ~/.claude/project-paths.json. That file maps short repository names to absolute paths. It is per-user data and is not committed here.
After installing or updating claude-dev-env, run the bootstrap script once to populate the registry by scanning for .git directories with Everything's command-line binary:
python packages/claude-dev-env/scripts/setup_project_paths.py
Requirements:
- Everything (from voidtools) installed with its service running
es.exeavailable onPATH
The script discovers candidate repos via es.exe, filters out ephemeral locations (temp, tmp, worktree, node_modules, .cache, $recycle.bin), shows the proposed mapping, and writes ~/.claude/project-paths.json only after you confirm at the prompt. The file is atomically replaced on write and merges with any entries already present.
Once the registry is populated, run:
python "${CLAUDE_SKILL_DIR}/scripts/everything_search.py" <repo-name> <search arguments>
An exact repository name becomes one absolute path. The command then starts es.exe. Put the search scope in the first argument. An options-only request exits before es.exe starts.
What This Solves
Without shared config, every repo needs its own .claude/rules/, .claude/hooks/, .claude/agents/, etc. That means:
- Duplicated config across 5+ repos
- Drift when you update standards in one place but forget others
- New repos start with zero guardrails
This package centralizes all general-purpose Claude Code config. Project-specific rules still live in each repo's .claude/ directory and merge with these.
What's Included
Rules
Behavioral rules loaded into every session.
| Rule | What it does |
|---|---|
anti-corollary-tests |
Each test carries information; skip corollary matrices |
asd-ste100-language |
Plain word choice, sentence style, and tone for user-facing text |
bdd |
Discovery, illustration, and should-style specifications around the TDD loop |
cleanup-temp-files |
Remove scratch files after tasks complete |
code-standards |
Point at CODE_RULES.md for review and code generation |
correction-lens |
Every correction becomes a control at the highest layer that can hold it |
destructive-commands |
Allowed removal forms, and destructive literals kept out of command strings |
doc-inventory-integrity |
A doc that inventories code stays in step with the directory |
docstring-prose-matches-implementation |
A docstring's enumeration covers every behavior the body applies |
explore-thoroughly |
Search for existing work before acting on an ask, read before proposing |
failure-blast-radius |
Name what a raise stops: the run, or one member of a batch |
falsify-before-green |
A check's green counts once that check ran red on a named break |
filesystem-search |
Every filesystem search names a scope |
long-horizon-autonomy |
Carry a long or unwatched run to completion |
no-contrast-framing |
State what is true; the rejected reading stays out |
no-cross-skill-duplicate-helpers |
A helper copied between two skill folders is a deliberate choice |
orphan-css-class |
Every class name in generated markup has a matching selector |
paired-test-coverage |
Every public function in an established suite carries a behavioral test |
plain-illustrative-docstrings |
Docstring narrative reads plainly on the first pass |
pstack-models |
Portable role requirements for pstack delegation |
prompt-workflow-context-controls |
Prompt workflows stay low-context |
research-mode |
Settle each fact with the first permitted tool that reaches it, cite sources, use direct quotes |
shell-invocation |
Use pwsh, and keep shell substitution out of Bash commands |
skill-pointers |
Load the pull request lifecycle skill before governed actions |
testing |
Complete mocks, reference TEST_QUALITY.md |
verify-before-asking |
Answer with a tool what a tool can answer |
verify-runtime-state |
A runtime verdict rests on a live probe from this session |
windows-filesystem-safe |
Safe tree removal for read-only Windows files |
workers-done-before-complete |
A task stays open while a worker it spawned still runs |
workflow-substitution-slots |
Mark every per-call value in a workflow template |
Codex exec-policy files
Starlark *.rules files Codex loads from ~/.codex/rules. The package ships claude-dev-env.rules so a local default.rules stays in place.
Cursor rule files
The installer writes no Cursor rule files. Cursor Agent reads a repository's own AGENTS.md, CLAUDE.md, .cursor/rules, and .agents/skills, and it reads ~/.cursor/rules only for a workspace inside the home directory. A full reinstall moves the ~/.cursor/rules files an older install generated into the run backup.
Task usage report
Use the task usage report guide to record task outcomes and compare cost per passed task.
Docs
Reference documents that rules and agents point to for detailed standards.
| Document | Coverage |
|---|---|
CODE_RULES.md |
Hook-enforced rules, naming conventions, config patterns, type hints, readability rubric |
code-rules/ |
Feature map with check ownership, triggers, proof, and exceptions |
TEST_QUALITY.md |
Test writing standards, mock completeness, assertion patterns |
REACT_PATTERNS.md |
Component architecture, hooks, state management conventions |
DJANGO_PATTERNS.md |
Model patterns, view architecture, ORM best practices |
BDD_DISCOVERY_PROTOCOL.md |
Example Mapping to find test ideas before code |
BDD_SCENARIO_QUALITY.md |
Seven patterns for clear, focused scenarios |
BDD_TEST_LAYOUT.md |
Describe, when, and should layout for readable suites |
agent-spawn-protocol.md |
Full protocol for briefing a subagent |
codex-compatibility.md |
The bridge from this source tree to Codex-compatible output |
high-trust-agent-delivery.md |
The layered-controls model behind the correction lens |
host-pool-health-monitor.md |
Kernel pool counters and handle pressure on a Windows host |
wsl-docker-cowork-starter-matrix.md |
Host memory attribution under WSL2 and Docker Desktop |
Agents (1)
Specialized agent prompts for common development tasks. Claude Code automatically discovers these and makes them available for delegation.
| Agent | Role |
|---|---|
poteto-agent |
Delegates to the installed pstack poteto-mode skill for the task in each call |
The 8 personal agents this package shipped before poteto-agent are archived
under .agents/agents-archived/, each with a restore command in
ARCHIVE-MANIFEST.md.
Commands (1)
Slash commands for common workflows.
| Command | Purpose |
|---|---|
/sr-loop |
Loop /simplify then /code-review --fix until each pass is clean |
Skills
Each skill lands under the agents home, with a directory pointer at ~/.claude/skills.
A declared dependency package can add more; node bin/install.mjs --help names the groups
that carry them.
| Skill | Purpose |
|---|---|
build-eval |
Evaluate skills with a direct Codex review suite or claude plugin eval |
codex-cleanse |
Preview or archive local Codex sessions on demand after seven days without activity |
context-audit |
Inventory every file an agent loads from a checkout and list what to clean up |
correction |
Turn a correction into a short handoff brief for a corrections intake |
e-code-review |
Code review at five levels matching the built-in /code-review recipes |
e-simplify |
Cleanup pass on the current diff for reuse, simplification, and efficiency |
efficient-review |
Review a branch from the installed skill. On Claude the plan selects haiku and the slim profile |
eli5 |
Beginner-friendly presentation with large visuals and minimal text |
everything-search |
Fast Windows file search through the Everything es.exe tool |
fresh-branch |
Fresh branch from origin/main in an isolated worktree |
grok-spawn |
Spawn headless grok worker fleets through preflight and batch spawn |
issue-tracker |
File, update, and close GitHub work as one epic with native sub-issues |
mod-playbooks |
Drive a mod, open its menus and panes, and capture each screen |
orchestrator |
Turn the session into an advisor-orchestrator that spawns executor subagents |
orchestrator-refresh |
Re-assert orchestrator discipline on a delayed wake |
pr-lifecycle |
Rules for commits, pushes, pull requests, review threads, and merges |
pr-visual |
Review a PR's summary and code, then display an interactive diagram or data chart with visual drilldowns. Ships with full and core installs |
privacy-hygiene |
Full-repo sweep for personal data and secrets before a commit or post |
pull-request |
Validate and publish GitHub pull request actions |
recovering-codex-startup |
Diagnose Windows Codex startup with fresh read-only process evidence |
repairing-hook-boundaries |
Repair Claude and Codex hook failures at the first failing boundary |
search-before-acting |
Search for what already does an ask and report it in four points before acting |
second-account-workers |
Run local Claude workers through the second-account picker |
skill-builder |
Author a skill package to the house conventions |
step-notes |
Turn the step-note gate on or off |
sync-dev-env |
Install claude-dev-env, link plugin skills into a running session, and schedule a daily re-sync |
syncing-submodules |
Record a submodule's current commit in its parent repository |
task-build |
Gather open session tasks and register them on the task list |
team-advisor |
Standing reviewer for a session and the subagents it spawns |
test-runner |
Run pytest or Playwright through the repository's test command |
usage-pause |
Pause until the usage window resets |
windows-scheduled-task |
Register a repeating headless Windows task with a documented teardown |
Hooks
Automated enforcement that runs on Claude Code events. The installer detects your Python 3 command and rewrites hook paths to absolute ~/.claude/hooks/ paths in settings.json.
PreToolUse (before tool execution)
| Matcher | Hook | What it does |
|---|---|---|
| Write|Edit | write-existing-file-blocker |
Warns before overwriting files that should be edited |
| Write|Edit | sensitive-file-protector |
Blocks writes to .env, credentials, and sensitive files |
| Write|Edit | hook-format-validator |
Validates hook file format on write |
| Write|Edit | run_all_validators |
Runs the full validation suite (30+ checks) |
| Write|Edit | code_rules_enforcer |
Blocks CODE_RULES.md violations (comments, magic values, imports) |
| Write|Edit | tdd-enforcer |
Prompts TDD confirmation when writing production code |
| Write|Edit | state-description-blocker |
Blocks historical/comparative language in comments and .md files |
| Edit | migration-safety-advisor |
Warns about risky database migration patterns |
| Bash | destructive-command-blocker |
Blocks rm -rf, git reset --hard, and other destructive commands |
| Bash | block-main-commit |
Blocks direct commits to main/master branch |
| Bash | test-preflight-check |
Validates server health and database before test runs |
| Bash|PowerShell|GitHub PR tools | pr_lifecycle_skill_gate |
Requires the pull request lifecycle skill before governed actions, and denies a second open Follow-up to #N pull request for one parent |
| Bash|PowerShell|mcp__*resolve_review_thread|mcp*__pull_request_review_write | resolve_thread_reply_gate |
Denies a review thread resolve, through either MCP resolve route, a shell resolveReviewThread mutation, or a ccr/comments/<id>/resolve call, until a reply on that same thread posted after the last user prompt and the thread's last resolve |
| Task|Agent | parallel-task-blocker |
Limits concurrent Task/Agent delegations |
| AskUserQuestion | attention-needed-notify |
Desktop notification when Claude needs your input |
| mcp__hearthbot__start_thread_session | thread_spawn_pace_hook |
When the five-hour or seven-day usage window runs ahead of its clock after its first 10%, or usage cannot be read, moves the thread to Opus 5.5 at low effort |
| Agent|Task|mcp__hearthbot__start_thread_session|multi_agent_v1__spawn_agent|Workflow|mcp__github__actions_run_trigger | spawn_readiness_hook |
Adds a reminder to an agent spawn when the transcript shows no read step since the request or no answer to an interactive question (AskUserQuestion, a decision card, or a widget). The spawn runs with its normal permission flow. A brief line that starts Scope settled: passes the interview check, and the hook logs it. A workflow dispatch counts when its inputs carry a prompt. A Codex spawn gets one reminder, because Codex documents its transcript format as unstable for hooks |
| Artifact|Skill | artifact_template_pointer |
Adds one paragraph routing by scope: the status flowchart template for a status or progress report unless the person asks for another shape, an inline SVG flowchart for one flow or one comparison, html-plan for a multi-part plan or evidence, and the artifact page template as the alternative, when a session starts an artifact page (an Artifact quickstart or the artifact-design skill) |
| * | step_note_gate |
Off by default; after /step-notes on, asks for a short status line before each tool call |
Other Events
| Event | Hook | What it does |
|---|---|---|
| SessionStart | plugin-data-dir-cleanup |
Cleans stale plugin data on session start |
| Stop | attention-needed-notify |
Desktop notification when Claude stops |
| Stop | hedging-language-blocker |
Blocks responses with hedging language (anti-hallucination) |
| SessionEnd | session-end-cleanup |
Cleans temporary state on session end |
| ConfigChange | config-change-guard |
Guards against accidental settings changes |
| PostToolUse (Write|Edit) | mypy_validator |
Runs mypy type checking after file writes |
| PostToolUse (Write|Edit) | auto-formatter |
Auto-formats Python (ruff/black) and JS (prettier) on write |
| PostToolUse (Agent|Task) | investigation-tracker-reset |
Resets investigation tracker after delegation |
| Notification | claude-notification-handler |
Routes Claude Code notifications to desktop |
Validators Module
The hooks/validators/ directory contains 30+ individual check modules with a full test suite:
Abbreviations, code quality, comments, file structure, git conventions, magic values, mypy integration, PR references, Python antipatterns, Python style, React patterns, ruff integration, security, TODO tracking, type safety, useless test detection, and more.
Also Available as a Plugin
If you prefer the Claude Code plugin system over npm:
claude plugin install jl-cmd/claude-dev-env
Recommended Companion Plugins
These plugins provide additional skills and capabilities that complement this config:
claude plugin install anthropics/claude-code-plugins # Official: frontend-design, code-review, playwright, hookify, skill-creator, claude-md-management, serena, pyright-lsp, typescript-lsp, claude-code-setup
claude plugin install anthropics/claude-code-workflows # Official: python-dev, ui-design, unit-testing, context-management, agent-teams, and more
claude plugin install jl-cmd/claude-workflow # Workflow definitions with YAML schemas
Run node bin/install.mjs --help for the group list this build defines.
GSD (project management) is available as an npm package:
npx get-shit-done-cc
Customization
Installed rules merge with your project's .claude/ config. To override a rule for a specific project, create a rule with the same filename in your project's .claude/rules/ directory.
Installed hooks run alongside any hooks already in your settings.json or settings.local.json. The installer preserves existing hook entries.
Requirements
- Node.js 18+ (for the installer)
- Python 3.8+ (for hooks)
- Claude Code CLI
License
MIT