Repairing Project Setup
Overview
The setting-up-a-project skill defines what a correctly configured project looks like. This skill checks a real repo against that target state and repairs the delta.
Core principle: repair the delta, never rebuild. The existing files record decisions the user already made. Your job is to bring them in line with what setting-up-a-project would generate, keeping every decision already recorded.
When to Use
- A
setting-up-a-project run failed or was interrupted partway
CLAUDE.md or AGENTS.md exists but is thin, stale, or missing sections
- Symptoms of a broken setup: unfilled
{{PLACEHOLDER}} text, an AGENTS.md symlink, an AGENT.md (singular), documented commands that fail, the two instruction files disagreeing, agents behaving inconsistently in the repo
setting-up-a-project has changed since this project was set up, and the project should catch up
- As a pre-flight check before starting work (e.g. the
working-on-an-issue checklist)
When NOT to Use
- Never set up at all (no
CLAUDE.md, no AGENTS.md, no rule files): run setting-up-a-project itself - the interview matters and there is nothing to preserve.
- A deliberate, different scheme: if the repo has mature agent instructions that clearly never followed
setting-up-a-project, do not convert it uninvited. Report the differences and ask.
The Process
1. Load the Spec
Read the current setting-up-a-project SKILL.md - via the Skill tool, or from the installed plugin's skill directory. It is the source of truth. The audit table below is a fast index of its requirements; if the two ever disagree, the skill file wins - it evolves, this table can lag.
The canonical rule files sit next to that SKILL.md: TDD.rules.md, git-commit-rules.md, CLAUDE-specific-fuckups.md. If you cannot find them locally, fetch:
https://raw.githubusercontent.com/britt/agent-skills/refs/heads/main/rules/TDD.rules.md
https://raw.githubusercontent.com/britt/agent-skills/refs/heads/main/rules/CLAUDE-specific-fuckups.md
https://raw.githubusercontent.com/britt/agent-skills/refs/heads/main/skills/setting-up-a-project/git-commit-rules.md
2. Audit - Before Touching Anything
Run every check and record PASS / FAIL / N-A. Do not start fixing mid-audit; a full picture first prevents piecemeal edits that miss cross-file drift.
| # |
Check |
How |
| 1 |
CLAUDE.md exists with the sections from the skill's "Finished Files" list (Overview, Tech Stack, Commands, Development Practices; Layout / Environment / Boundaries / CI-CD as applicable) |
read headings |
| 2 |
AGENTS.md exists and is a real file |
test -L AGENTS.md && echo "symlink - defect" |
| 3 |
No AGENT.md (singular) - no agent reads it |
ls AGENT.md fails |
| 4 |
AGENTS.md has Required Reading, Non-Negotiables, and Maintaining This File sections |
read headings |
| 5 |
AGENTS.md carries no Claude Code-isms |
`grep -nE '@[[:alnum:]] |
| 6 |
No unfilled placeholders anywhere |
grep -Fn '{{' CLAUDE.md AGENTS.md TDD.rules.md returns nothing |
| 7 |
TDD.rules.md at project root, template banner removed, structurally matching the canonical template |
diff against canonical; only placeholder values and the banner should differ |
| 8 |
CLAUDE.md points at TDD.rules.md in prose and via @TDD.rules.md |
grep |
| 9 |
Commit rules present verbatim in both CLAUDE.md and AGENTS.md |
compare against canonical git-commit-rules.md |
| 10 |
CLAUDE-specific-fuckups.md at root, byte-identical to canonical, referenced from CLAUDE.md and not from AGENTS.md |
diff + grep |
| 11 |
VERIFICATION_PLAN.md exists; CLAUDE.md has a Verification section with @VERIFICATION_PLAN.md; it appears in AGENTS.md Required Reading |
grep |
| 12 |
Every command in the Commands table actually runs |
run each one |
| 13 |
CLAUDE.md and AGENTS.md agree on commands, stack, layout, and boundaries |
read both, side by side |
| 14 |
CI/CD Practices section present iff the repo uses GitHub Actions |
ls .github/workflows/ |
| 15 |
.claude/settings.json command allowlist |
note only - optional, consent required |
3. Repair
Fix only the FAIL rows, under these rules:
- Merge, never overwrite. Read every file before editing it. Keep the user's wording; add only missing sections; correct only what is wrong. If
CLAUDE.md says something setting-up-a-project would not have written but it is a project fact, it stays.
- Verbatim files stay verbatim. Repair
TDD.rules.md, the commit rules, and CLAUDE-specific-fuckups.md by copying from the canonical source and filling placeholders - nothing else. If the project has no linter or build step, fill that placeholder with an honest value (echo "no linter configured - update this line when one is added"), do not delete the rule sections that mention it.
- Evidence over interview. Fill gaps from the repo itself: manifests, lockfiles, CI workflows, git history, the existing files. Interactive session: confirm conclusions, one question at a time, only for what the repo cannot answer. Autonomous session: apply the defaults
setting-up-a-project documents (e.g. 90%/85% coverage) and record every assumption for the final report.
- A documented command that fails is always a FAIL - fix the command (add the missing script) or fix the docs (remove the phantom row), whichever matches what the project actually has. Never leave it.
VERIFICATION_PLAN.md is not optional. Missing means write it, with the writing-verification-plans skill if available. A young project gets scenarios scoped to what exists today - not a skipped file.
.claude/settings.json needs consent. Offer it if missing; in an autonomous session, recommend it in the report instead of writing it.
- Commit after each repaired area, per the commit rules.
4. Verify, Then Report
Re-run the entire audit table - every row must now be PASS or N-A, including the ones that passed before your edits (a repair can break a neighbor). Then run setting-up-a-project's own final verification step (its step 9).
Report: each check as before → action → after, plus every assumption made. If the audit was clean at step 2, say so and change nothing - a clean audit is a valid result.
Rationalizations - All Wrong
| Excuse |
Reality |
| "The project is too young for honest verification scenarios" |
writing-verification-plans handles nascent projects. Scope scenarios to what exists. Skipping leaves AGENTS.md telling agents to read a file that isn't there. |
| "This rule section doesn't apply here, I'll delete it" |
Fill the placeholder with an honest value instead. Pruned copies drift from canonical and can never be diffed again. |
| "The existing CLAUDE.md is messy - cleaner to rewrite it" |
A rewrite destroys recorded decisions. Merge. |
| "The obvious defects are fixed, that's surely all of them" |
Drift lives in the subtle rows: verbatim diffs, cross-file agreement, commands that run. Every row, every time. |
| "I'll just run the full setting-up-a-project interview again" |
That interrogates the user about facts the repo and existing files already answer. Audit and repair instead; fall back to the full skill only when nothing exists. |
| "It passed before my edit, no need to re-check" |
Repairs break neighbors - a fixed command row can desync AGENTS.md. Re-run the whole table. |
Red Flags - STOP
- About to
Write over a CLAUDE.md or AGENTS.md you haven't read
- Paraphrasing or "improving" a rule file instead of copying it
- Deleting sections from a verbatim file
- Asking the user something a manifest, workflow, or existing file answers
- Declaring done without re-running the audit table
Common Mistakes
- Auditing only
CLAUDE.md and forgetting AGENTS.md must independently agree with it
- Treating a symlinked
AGENTS.md as "close enough" - it ships @ imports to agents that read them as dead text
- Filling placeholders with plausible commands instead of ones verified against
package.json / Makefile / CI
- Comparing rule files by eye instead of
diff against the canonical copy
- Fixing files without committing per area, so a later failure loses everything
- Skipping the spec-loading step and auditing against memory of what
setting-up-a-project used to say
1---2name: repairing-project-setup3description: Use when a repo's agent setup may be broken, half-finished, or drifted - a setting-up-a-project run failed partway, CLAUDE.md or AGENTS.md is thin or missing sections, leftover {{PLACEHOLDER}} text, AGENTS.md is a symlink, the instruction files disagree, or agents behave inconsistently in the repo - audits the project against what setting-up-a-project would generate today and repairs only the gaps, preserving existing content4---56# Repairing Project Setup78## Overview910The `setting-up-a-project` skill defines what a correctly configured project looks like. This skill checks a real repo against that target state and repairs the delta.1112**Core principle: repair the delta, never rebuild.** The existing files record decisions the user already made. Your job is to bring them in line with what `setting-up-a-project` would generate, keeping every decision already recorded.1314## When to Use1516- A `setting-up-a-project` run failed or was interrupted partway17- `CLAUDE.md` or `AGENTS.md` exists but is thin, stale, or missing sections18- Symptoms of a broken setup: unfilled `{{PLACEHOLDER}}` text, an `AGENTS.md` symlink, an `AGENT.md` (singular), documented commands that fail, the two instruction files disagreeing, agents behaving inconsistently in the repo19- `setting-up-a-project` has changed since this project was set up, and the project should catch up20- As a pre-flight check before starting work (e.g. the `working-on-an-issue` checklist)2122## When NOT to Use2324- **Never set up at all** (no `CLAUDE.md`, no `AGENTS.md`, no rule files): run `setting-up-a-project` itself - the interview matters and there is nothing to preserve.25- **A deliberate, different scheme**: if the repo has mature agent instructions that clearly never followed `setting-up-a-project`, do not convert it uninvited. Report the differences and ask.2627## The Process2829### 1. Load the Spec3031Read the current `setting-up-a-project` SKILL.md - via the Skill tool, or from the installed plugin's skill directory. **It is the source of truth.** The audit table below is a fast index of its requirements; if the two ever disagree, the skill file wins - it evolves, this table can lag.3233The canonical rule files sit next to that SKILL.md: `TDD.rules.md`, `git-commit-rules.md`, `CLAUDE-specific-fuckups.md`. If you cannot find them locally, fetch:3435- `https://raw.githubusercontent.com/britt/agent-skills/refs/heads/main/rules/TDD.rules.md`36- `https://raw.githubusercontent.com/britt/agent-skills/refs/heads/main/rules/CLAUDE-specific-fuckups.md`37- `https://raw.githubusercontent.com/britt/agent-skills/refs/heads/main/skills/setting-up-a-project/git-commit-rules.md`3839### 2. Audit - Before Touching Anything4041Run every check and record PASS / FAIL / N-A. Do not start fixing mid-audit; a full picture first prevents piecemeal edits that miss cross-file drift.4243| # | Check | How |44|---|-------|-----|45| 1 | `CLAUDE.md` exists with the sections from the skill's "Finished Files" list (Overview, Tech Stack, Commands, Development Practices; Layout / Environment / Boundaries / CI-CD as applicable) | read headings |46| 2 | `AGENTS.md` exists and is a real file | `test -L AGENTS.md && echo "symlink - defect"` |47| 3 | No `AGENT.md` (singular) - no agent reads it | `ls AGENT.md` fails |48| 4 | `AGENTS.md` has Required Reading, Non-Negotiables, and Maintaining This File sections | read headings |49| 5 | `AGENTS.md` carries no Claude Code-isms | `grep -nE '@[[:alnum:]]|TodoWrite|\.claude/' AGENTS.md` returns nothing |50| 6 | No unfilled placeholders anywhere | `grep -Fn '{{' CLAUDE.md AGENTS.md TDD.rules.md` returns nothing |51| 7 | `TDD.rules.md` at project root, template banner removed, structurally matching the canonical template | `diff` against canonical; only placeholder values and the banner should differ |52| 8 | `CLAUDE.md` points at `TDD.rules.md` in prose **and** via `@TDD.rules.md` | grep |53| 9 | Commit rules present verbatim in both `CLAUDE.md` and `AGENTS.md` | compare against canonical `git-commit-rules.md` |54| 10 | `CLAUDE-specific-fuckups.md` at root, byte-identical to canonical, referenced from `CLAUDE.md` and **not** from `AGENTS.md` | `diff` + grep |55| 11 | `VERIFICATION_PLAN.md` exists; `CLAUDE.md` has a Verification section with `@VERIFICATION_PLAN.md`; it appears in `AGENTS.md` Required Reading | grep |56| 12 | Every command in the Commands table actually runs | run each one |57| 13 | `CLAUDE.md` and `AGENTS.md` agree on commands, stack, layout, and boundaries | read both, side by side |58| 14 | CI/CD Practices section present iff the repo uses GitHub Actions | `ls .github/workflows/` |59| 15 | `.claude/settings.json` command allowlist | note only - optional, consent required |6061### 3. Repair6263Fix only the FAIL rows, under these rules:6465- **Merge, never overwrite.** Read every file before editing it. Keep the user's wording; add only missing sections; correct only what is wrong. If `CLAUDE.md` says something `setting-up-a-project` would not have written but it is a project fact, it stays.66- **Verbatim files stay verbatim.** Repair `TDD.rules.md`, the commit rules, and `CLAUDE-specific-fuckups.md` by copying from the canonical source and filling placeholders - nothing else. If the project has no linter or build step, fill that placeholder with an honest value (`echo "no linter configured - update this line when one is added"`), do not delete the rule sections that mention it.67- **Evidence over interview.** Fill gaps from the repo itself: manifests, lockfiles, CI workflows, git history, the existing files. Interactive session: confirm conclusions, one question at a time, only for what the repo cannot answer. Autonomous session: apply the defaults `setting-up-a-project` documents (e.g. 90%/85% coverage) and record every assumption for the final report.68- **A documented command that fails is always a FAIL** - fix the command (add the missing script) or fix the docs (remove the phantom row), whichever matches what the project actually has. Never leave it.69- **`VERIFICATION_PLAN.md` is not optional.** Missing means write it, with the `writing-verification-plans` skill if available. A young project gets scenarios scoped to what exists today - not a skipped file.70- **`.claude/settings.json` needs consent.** Offer it if missing; in an autonomous session, recommend it in the report instead of writing it.71- **Commit after each repaired area**, per the commit rules.7273### 4. Verify, Then Report7475Re-run the entire audit table - every row must now be PASS or N-A, including the ones that passed before your edits (a repair can break a neighbor). Then run `setting-up-a-project`'s own final verification step (its step 9).7677Report: each check as before → action → after, plus every assumption made. If the audit was clean at step 2, say so and change nothing - a clean audit is a valid result.7879## Rationalizations - All Wrong8081| Excuse | Reality |82|--------|---------|83| "The project is too young for honest verification scenarios" | `writing-verification-plans` handles nascent projects. Scope scenarios to what exists. Skipping leaves `AGENTS.md` telling agents to read a file that isn't there. |84| "This rule section doesn't apply here, I'll delete it" | Fill the placeholder with an honest value instead. Pruned copies drift from canonical and can never be diffed again. |85| "The existing CLAUDE.md is messy - cleaner to rewrite it" | A rewrite destroys recorded decisions. Merge. |86| "The obvious defects are fixed, that's surely all of them" | Drift lives in the subtle rows: verbatim diffs, cross-file agreement, commands that run. Every row, every time. |87| "I'll just run the full setting-up-a-project interview again" | That interrogates the user about facts the repo and existing files already answer. Audit and repair instead; fall back to the full skill only when nothing exists. |88| "It passed before my edit, no need to re-check" | Repairs break neighbors - a fixed command row can desync `AGENTS.md`. Re-run the whole table. |8990## Red Flags - STOP9192- About to `Write` over a `CLAUDE.md` or `AGENTS.md` you haven't read93- Paraphrasing or "improving" a rule file instead of copying it94- Deleting sections from a verbatim file95- Asking the user something a manifest, workflow, or existing file answers96- Declaring done without re-running the audit table9798## Common Mistakes99100- Auditing only `CLAUDE.md` and forgetting `AGENTS.md` must independently agree with it101- Treating a symlinked `AGENTS.md` as "close enough" - it ships `@` imports to agents that read them as dead text102- Filling placeholders with plausible commands instead of ones verified against `package.json` / Makefile / CI103- Comparing rule files by eye instead of `diff` against the canonical copy104- Fixing files without committing per area, so a later failure loses everything105- Skipping the spec-loading step and auditing against memory of what `setting-up-a-project` used to say