Snitch: DevReady
Turn any repo into a first-class AI-development setup. The skill is a thin tool
surface — a detect classifier, a standards enforcement-surface scanner, and a few
generators. You orchestrate. The script never mutates the user's project; you propose
artifacts as diffs and write them with Write/Edit only after the user confirms.
The core insight: most value comes from checked-in context — configure once, share with
the team, get a network effect. Two wrinkles this skill handles:
- The extract-based methodology (codebase Q&A, git history, "what did I ship") assumes
existing code. Greenfield has nothing to extract, so the skill inverts — it
establishes context before code exists.
- A coding standard that lives only in prose is advice, and agents (like people) drift
from advice. A rule only holds when a gate checks it — so the standards move splits
every rule into enforced (a linter, hook, or CI step fails on violation) or advisory
(style to match), and wires the gates so the enforced tier stays enforced.
Prerequisites
Run ${CLAUDE_SKILL_DIR}/devready.sh doctor. jq is required (brew install jq);
git is optional (used for commit-depth classification). ${CLAUDE_SKILL_DIR} is set by
Claude Code to this skill's directory, so the script resolves from any working directory.
Always start here
${CLAUDE_SKILL_DIR}/devready.sh detect
This emits JSON with .mode ∈ greenfield | thin-greenfield | brownfield, plus
.stacks, .package_managers, .project_kind, .ui, .spec_files, .git, and
.existing_artifacts. Branch on .mode. Then read
references/30-recipes.md for the full per-mode flow.
Context-file targeting (tool-agnostic)
The context artifact is one document; where it lands depends on which agent tools the
team uses. .existing_artifacts reports what's already present (claude_md,
agents_md, cursor_rules, copilot_instructions, gemini_md, windsurf_rules);
confirm with the user when it's ambiguous.
- Claude Code only →
CLAUDE.md, as the recipes describe.
- Multiple tools, or non-Claude →
AGENTS.md is the canonical file (most agent
CLIs and editors read it natively), and each tool that doesn't gets a thin pointer, not
a copy: a CLAUDE.md containing @AGENTS.md (Claude Code follows imports), a
.github/copilot-instructions.md that says "follow AGENTS.md", and so on. One
canonical document, N pointers — never N diverging copies.
- A repo that already has both: compare shared instructions for actual contradictions.
An import plus tool-specific additions is valid, not drift. Preserve those additions and
the team's existing canonical layout; propose merging only duplicated or conflicting rules.
Everything this skill writes into the context file — the spec sections, the standards
section from Recipe E — is plain markdown with no tool-specific syntax, so it works
wherever it lands. The tool-specific artifacts (.claude/commands/, settings
permissions, the hooks template) are Claude Code's; equivalents for other tools exist but
aren't bundled — say so rather than improvising one, and note that the commit gate and
CI gate from Recipe E are tool-agnostic by nature and cover every agent the team runs.
The modes (branch here — full playbooks in references/30-recipes.md)
.mode (or trigger) |
Approach |
Recipe |
brownfield |
extract-inward: codebase Q&A + git history |
A |
greenfield |
establish-forward via the intent cascade (spec → scaffold → interview the gaps) |
B |
thin-greenfield |
hybrid: infer stack, interview for domain intent only |
C |
brownfield repo, CLAUDE.md still has <!-- INTENDED --> tags |
reconciliation |
D |
| "set up coding standards" (standalone, or chained after A/C) |
the standards move |
E |
Evidence and permission boundary
standards is a presence-only inventory, including its legacy gates and gaps
fields. Before calling a rule enforced, trace the real command, its selected files and
triggers, activation, and failure propagation. Check placeholder scripts, continue-on-error,
|| true, and skipped paths. CI execution is not proof of required merge checks; host
protection settings need separate evidence. Proposed or untested hooks remain unverified.
Do not run untrusted project scripts or install dependencies merely to classify the repo.
Audit/proposal requests stop at evidence and diffs; they do not authorize artifact writes.
The generated permission starter grants no authority in the current session. Preserve existing
policy, and propose narrowly scoped commands only after inspecting what they execute.
Plan before you write (show this first)
After detect and picking the recipe, present a component plan table and get a yes before
writing anything (pairs with the "never silently overwrite" rule). Fill the last column from the
detect output + mode, so the user sees exactly what will land and why:
| Artifact |
What it gives the team |
This repo? |
CLAUDE.md / AGENTS.md (per context-file targeting above) |
Shared, checked-in context — the network-effect win |
yes — {mode} flavor |
| Coding-standards section + hooks |
The agent's code is machine-checked, not advised (Recipe E) |
brownfield/thin — from standards output |
.claude/commands/ |
Repeatable slash-command workflows |
yes / skip |
Feedback loop (.mcp.json screenshot, or the test runner) |
Lets the agent see its output and iterate |
only if .ui / has tests |
.claude/settings.local.json perms |
Personal, reviewed preapprovals |
optional — preserve policy; no stack executors by default |
SKILL.md (via template skill-md) |
A project-authored skill, if the repo warrants one |
optional |
Mark each row keep / skip with a one-line reason, confirm, then write artifacts as diffs.
Generators (read-only; you apply the output)
${CLAUDE_SKILL_DIR}/devready.sh standards # → enforcement surface: defined vs gated + gaps
${CLAUDE_SKILL_DIR}/devready.sh perms <project_kind> # → {permissions:{allow,deny,ask}} for the stack
${CLAUDE_SKILL_DIR}/devready.sh template <name> # → a bundled template on stdout
# names: claude-md | standards-claude-md | settings | settings-hooks | mcp-screenshot |
# cmd-plan-then-build | cmd-build-feature | cmd-commit-push-pr | cmd-what-did-i-ship |
# skill-md # starter SKILL.md for a project that wants to author its own skill
skill-md emits a starter Agent Skill (verb-first trigger description with a negative-scope
clause, a lean imperative body, progressive-disclosure references/ note). Offer it when the
repo would benefit from its own checked-in skill — don't write one unprompted.
Artifacts this skill can produce (shared or personal as appropriate)
- CLAUDE.md — short; greenfield uses
template claude-md with INTENDED tags,
brownfield describes reality. Keep it tight (context bloat is the failure mode).
- Coding-standards section (
template standards-claude-md) — the two-tier
enforced/advisory split, filled from the standards scan so every "enforced" line
names a gate that actually runs. Advisory rules that matter get promoted into tooling,
not repeated louder.
- Claude Code hooks (
template settings-hooks) — the gates wired into the agent's
loop: a fast file-scoped check after each edit, the fuller verify on stop.
- .claude/commands/ —
/plan-then-build, /build-feature (feedback-loop-first),
/commit-push-pr, /what-did-i-ship.
- Feedback loop — the highest-leverage artifact. Document the test runner; for UI
projects propose a Playwright
.mcp.json so the agent can see its output
and iterate. Establish it from feature #1.
- .claude/settings.local.json — personal permissions, not a checked-in team artifact.
perms starts with a few exact read-only git commands, with no stack executors preapproved.
Add only reviewed operations the user wants to preapprove; never broaden an existing policy.
Hard rules
- Never write product code or scaffold the app (no
npm create, no source/tests) —
that's delegated to the agent, guided by the artifacts. Tooling config proposed by
Recipe E (a linter config, a hooks block) is artifact, not product code — but it follows
the same diff-and-confirm rule as everything else.
- Never silently overwrite an existing CLAUDE.md / settings / .mcp.json — show a diff
and merge.
- Never weaken an existing gate. If the repo already lints/tests stricter than the
starter templates, the templates lose. Recipe E adds gates and promotes rules; it never
relaxes, disables, or inline-suppresses an existing check.
- Keep CLAUDE.md short.
- Print only host-appropriate, relevant manual follow-ups the skill can't do:
/terminal-setup, /theme,
/install-github-app, macOS Dictation, and the keybindings (see recipes).
Reference
references/30-recipes.md — per-mode playbooks, the standards move (Recipe E),
reconciliation, permissions map, manual follow-ups.
1---2name: snitch-devready3description: Bootstrap a repository for effective AI-assisted development. Auto-detects whether the repo is greenfield (no code yet), thin-greenfield (scaffold only), or brownfield (real code), then leaves behind the checked-in artifacts that make an AI coding agent smarter for the whole team: a short CLAUDE.md, slash commands, a screenshot/test feedback loop, an .mcp.json, a permissions allowlist — and a two-tier coding standard (enforced vs advisory) wired to the repo's real gates (linters, hooks, CI) so the agent's code is machine-checked, not just advised. Use when asked to make this repo Claude-ready / dev-ready, onboard a codebase for Claude Code, set up Claude Code for a team/project, bootstrap a new project for AI development, set up coding standards for the agent, or wire lint/test enforcement for AI-written code. Do NOT use for product or marketing decisions (use snitch-blueprint) or for writing the app itself.4license: MIT with Commons Clause5---67# Snitch: DevReady89Turn any repo into a first-class AI-development setup. The skill is a **thin tool10surface** — a `detect` classifier, a `standards` enforcement-surface scanner, and a few11generators. **You orchestrate.** The script never mutates the user's project; you propose12artifacts as diffs and write them with Write/Edit only after the user confirms.1314The core insight: most value comes from *checked-in context* — configure once, share with15the team, get a network effect. Two wrinkles this skill handles:1617- The extract-based methodology (codebase Q&A, git history, "what did I ship") assumes18 existing code. **Greenfield has nothing to extract**, so the skill inverts — it19 *establishes* context before code exists.20- A coding standard that lives only in prose is advice, and agents (like people) drift21 from advice. **A rule only holds when a gate checks it** — so the standards move splits22 every rule into *enforced* (a linter, hook, or CI step fails on violation) or *advisory*23 (style to match), and wires the gates so the enforced tier stays enforced.2425## Prerequisites26Run `${CLAUDE_SKILL_DIR}/devready.sh doctor`. `jq` is required (`brew install jq`);27`git` is optional (used for commit-depth classification). `${CLAUDE_SKILL_DIR}` is set by28Claude Code to this skill's directory, so the script resolves from any working directory.2930## Always start here31```bash32${CLAUDE_SKILL_DIR}/devready.sh detect33```34This emits JSON with `.mode` ∈ `greenfield | thin-greenfield | brownfield`, plus35`.stacks`, `.package_managers`, `.project_kind`, `.ui`, `.spec_files`, `.git`, and36`.existing_artifacts`. **Branch on `.mode`.** Then read37`references/30-recipes.md` for the full per-mode flow.3839## Context-file targeting (tool-agnostic)4041The context artifact is one document; **where it lands depends on which agent tools the42team uses**. `.existing_artifacts` reports what's already present (`claude_md`,43`agents_md`, `cursor_rules`, `copilot_instructions`, `gemini_md`, `windsurf_rules`);44confirm with the user when it's ambiguous.4546- **Claude Code only** → `CLAUDE.md`, as the recipes describe.47- **Multiple tools, or non-Claude** → **`AGENTS.md` is the canonical file** (most agent48 CLIs and editors read it natively), and each tool that doesn't gets a thin pointer, not49 a copy: a `CLAUDE.md` containing `@AGENTS.md` (Claude Code follows imports), a50 `.github/copilot-instructions.md` that says "follow AGENTS.md", and so on. **One51 canonical document, N pointers — never N diverging copies.**52- **A repo that already has both:** compare shared instructions for actual contradictions.53 An import plus tool-specific additions is valid, not drift. Preserve those additions and54 the team's existing canonical layout; propose merging only duplicated or conflicting rules.5556Everything this skill writes into the context file — the spec sections, the standards57section from Recipe E — is plain markdown with no tool-specific syntax, so it works58wherever it lands. The tool-specific artifacts (`.claude/commands/`, settings59permissions, the hooks template) are Claude Code's; equivalents for other tools exist but60aren't bundled — say so rather than improvising one, and note that the *commit gate and61CI gate from Recipe E are tool-agnostic by nature* and cover every agent the team runs.6263## The modes (branch here — full playbooks in references/30-recipes.md)6465| `.mode` (or trigger) | Approach | Recipe |66|---|---|---|67| `brownfield` | extract-inward: codebase Q&A + git history | A |68| `greenfield` | establish-forward via the intent cascade (spec → scaffold → interview the gaps) | B |69| `thin-greenfield` | hybrid: infer stack, interview for domain intent only | C |70| brownfield repo, CLAUDE.md still has `<!-- INTENDED -->` tags | reconciliation | D |71| "set up coding standards" (standalone, or chained after A/C) | the standards move | E |7273## Evidence and permission boundary7475`standards` is a **presence-only inventory**, including its legacy `gates` and `gaps`76fields. Before calling a rule enforced, trace the real command, its selected files and77triggers, activation, and failure propagation. Check placeholder scripts, `continue-on-error`,78`|| true`, and skipped paths. CI execution is not proof of required merge checks; host79protection settings need separate evidence. Proposed or untested hooks remain unverified.80Do not run untrusted project scripts or install dependencies merely to classify the repo.8182Audit/proposal requests stop at evidence and diffs; they do not authorize artifact writes.83The generated permission starter grants no authority in the current session. Preserve existing84policy, and propose narrowly scoped commands only after inspecting what they execute.8586## Plan before you write (show this first)8788After `detect` and picking the recipe, present a **component plan** table and get a yes before89writing anything (pairs with the "never silently overwrite" rule). Fill the last column from the90`detect` output + mode, so the user sees exactly what will land and why:9192| Artifact | What it gives the team | This repo? |93|---|---|---|94| `CLAUDE.md` / `AGENTS.md` (per context-file targeting above) | Shared, checked-in context — the network-effect win | yes — {mode} flavor |95| Coding-standards section + hooks | The agent's code is machine-checked, not advised (Recipe E) | brownfield/thin — from `standards` output |96| `.claude/commands/` | Repeatable slash-command workflows | yes / skip |97| Feedback loop (`.mcp.json` screenshot, or the test runner) | Lets the agent *see* its output and iterate | only if `.ui` / has tests |98| `.claude/settings.local.json` perms | Personal, reviewed preapprovals | optional — preserve policy; no stack executors by default |99| `SKILL.md` (via `template skill-md`) | A project-authored skill, if the repo warrants one | optional |100101Mark each row keep / skip with a one-line reason, confirm, then write artifacts as diffs.102103## Generators (read-only; you apply the output)104```bash105${CLAUDE_SKILL_DIR}/devready.sh standards # → enforcement surface: defined vs gated + gaps106${CLAUDE_SKILL_DIR}/devready.sh perms <project_kind> # → {permissions:{allow,deny,ask}} for the stack107${CLAUDE_SKILL_DIR}/devready.sh template <name> # → a bundled template on stdout108# names: claude-md | standards-claude-md | settings | settings-hooks | mcp-screenshot |109# cmd-plan-then-build | cmd-build-feature | cmd-commit-push-pr | cmd-what-did-i-ship |110# skill-md # starter SKILL.md for a project that wants to author its own skill111```112113`skill-md` emits a starter Agent Skill (verb-first trigger description with a negative-scope114clause, a lean imperative body, progressive-disclosure `references/` note). Offer it when the115repo would benefit from its own checked-in skill — don't write one unprompted.116117## Artifacts this skill can produce (shared or personal as appropriate)118- **CLAUDE.md** — short; greenfield uses `template claude-md` with `INTENDED` tags,119 brownfield describes reality. Keep it tight (context bloat is the failure mode).120- **Coding-standards section** (`template standards-claude-md`) — the two-tier121 enforced/advisory split, filled from the `standards` scan so every "enforced" line122 names a gate that actually runs. Advisory rules that matter get promoted into tooling,123 not repeated louder.124- **Claude Code hooks** (`template settings-hooks`) — the gates wired into the agent's125 loop: a fast file-scoped check after each edit, the fuller verify on stop.126- **.claude/commands/** — `/plan-then-build`, `/build-feature` (feedback-loop-first),127 `/commit-push-pr`, `/what-did-i-ship`.128- **Feedback loop** — the highest-leverage artifact. Document the test runner; for UI129 projects propose a Playwright `.mcp.json` so the agent can *see* its output130 and iterate. Establish it from feature #1.131- **.claude/settings.local.json** — personal permissions, not a checked-in team artifact.132 `perms` starts with a few exact read-only git commands, with no stack executors preapproved.133 Add only reviewed operations the user wants to preapprove; never broaden an existing policy.134135## Hard rules136- **Never write product code or scaffold the app** (no `npm create`, no source/tests) —137 that's delegated to the agent, guided by the artifacts. Tooling config proposed by138 Recipe E (a linter config, a hooks block) is artifact, not product code — but it follows139 the same diff-and-confirm rule as everything else.140- **Never silently overwrite** an existing CLAUDE.md / settings / .mcp.json — show a diff141 and merge.142- **Never weaken an existing gate.** If the repo already lints/tests stricter than the143 starter templates, the templates lose. Recipe E adds gates and promotes rules; it never144 relaxes, disables, or inline-suppresses an existing check.145- Keep CLAUDE.md short.146- Print only host-appropriate, relevant **manual follow-ups** the skill can't do: `/terminal-setup`, `/theme`,147 `/install-github-app`, macOS Dictation, and the keybindings (see recipes).148149## Reference150- `references/30-recipes.md` — per-mode playbooks, the standards move (Recipe E),151 reconciliation, permissions map, manual follow-ups.