Project setup
An AI engineering skill suite that takes one idea from Ideate → Spec → Plan → Implement → Verify → Review → Ship — the human owns intent, the agent owns execution, ending at risk-banded draft PRs. Installable across Claude Code, Cursor, Gemini CLI, and more.
npx -y skills add celestialdust/achilles-skills --skill project-setupAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Scaffolds the repo ecosystem every achilles skill assumes — a one-time bootstrap that creates the STATE.md board, the CONTEXT.md glossary, docs/adr/, and docs/features/, and — when the repo has neither a CLAUDE.md nor an AGENTS.md and you opt to create CLAUDE.md — seeds it from a bundled behavioral template. Run this ONCE before the first feature, before interview-me or spec-grilling. The pipeline skills read these files cold and will have nowhere to write without it, so do this first.
SKILL.md
14.6 KB, ~3.7k tokens by cl100k_base, as published. Nobody here has run it
Purpose
Stage: cross-cutting / setup (one-time). Every downstream skill reads and writes a shared substrate:
the STATE.md board (what's in flight + who owns the next action), the per-feature artifact directories,
and the repo-wide design substrate (CONTEXT.md glossary + docs/adr/). If that substrate doesn't exist,
each skill has to re-derive "where do issues live / where's the glossary / where do ADRs go" — which is
exactly the scattered-tracker problem this suite consolidates away (one local board, not mp's
several issue queues). project-setup makes the substrate exist once, so the rest of the suite consumes it cold.
This is a prompt-driven skill, not a deterministic script. Explore, present what you found, confirm with
the user, then write. It is distinct from preflight-readiness: preflight-readiness is a per-run environment gate that
re-fires every wave; project-setup is the one-time repo bootstrap that runs before any feature exists.
When to use / when to skip
- Use once per repo, before the first feature — before
interview-me,idea-refine, orspec-grilling. - Skip if
STATE.mdalready exists at the repo root and the substrate is intact; you don't need to re-run per feature (the board is appended to byplan-breakdown, not re-scaffolded). - Escape hatch — adopt, don't overwrite: if the repo already has a
CONTEXT.md,docs/adr/, or aCLAUDE.md/AGENTS.mdwith prior content, adopt them in place. Re-runningproject-setuprepairs missing pieces; it never clobbers existing user content.
Inputs
Foundation only — this is the bootstrap; it has no upstream artifact and no refuse-to-run dependency. It reads the repo as-is to decide what already exists:
git remote -v/.git/config— is there a remote? (informational only; the tracker is local regardless.)- root
CLAUDE.mdandAGENTS.md— does either exist? Is there already an## Agent skillssection? - root
CONTEXT.md/CONTEXT-MAP.md— single- or multi-context already? docs/adr/,docs/features/,STATE.md— does prior output already exist?
Process
1. Explore
Look at the current repo to understand its starting state. Read whatever exists; don't assume:
git remote -vand.git/config— is this a remote-backed repo? (Informational — does not change the tracker.)CLAUDE.mdandAGENTS.mdat the repo root — does either exist? Is there already an## Agent skillssection?CONTEXT.mdandCONTEXT-MAP.mdat the repo root — is a single- or multi-context layout already implied?docs/adr/and anysrc/*/docs/adr/directories.docs/features/andSTATE.md— does this skill's prior output already exist?
2. Present findings and ask
Summarise what's present and what's missing. Then walk the user through the decisions one at a time — present a section, get the answer, then move on. Don't dump everything at once.
Assume the user does not know what these terms mean. Each section starts with a short explainer (what it is, why these skills need it, what changes if they pick differently), then the choices and the default.
There is no issue-tracker question. In this suite the tracker is always the local STATE.md board:
a two-level board (features → slices) with a gate column that absorbs mp's
ready-for-agent/ready-for-human triage roles. So the source's GitHub/GitLab/local choice and its
five-label vocabulary are already decided — you scaffold STATE.md, you do not ask where issues live.
Mention this once so the user knows their GitHub Issues (if any) are intentionally not the work surface here.
Section A — Domain doc layout (the one surviving choice).
Explainer: Several skills (
spec-grilling,code-review,quality-verification,incremental-implementation) readCONTEXT.mdfor the project's domain language anddocs/adr/for past architectural decisions. They need to know whether the repo has one global context or several (e.g. a monorepo with separate frontend/backend contexts) so they look in the right place.
- Single-context — one
CONTEXT.md+docs/adr/at the repo root. Most repos are this. (Default.) - Multi-context —
CONTEXT-MAP.mdat the root pointing to per-contextCONTEXT.mdfiles (a monorepo).
If neither CLAUDE.md nor AGENTS.md exists, also ask which one to create — don't pick for them.
Note that a fresh CLAUDE.md is seeded with a small set of project-agnostic behavioral guidelines (the
bundled assets/CLAUDE.template.md) above the ## Agent skills wiring; a fresh AGENTS.md gets the wiring
only.
3. Confirm and edit
Show the user a draft of everything before writing, and let them edit:
- The
STATE.mdskeleton (the empty board with the legend; see "STATE.md seed" below). - The
CONTEXT.mdstub (glossary-only). - The
## Agent skillsblock to add to whichever ofCLAUDE.md/AGENTS.mdis being edited. - If a fresh
CLAUDE.mdis being created, the bundled behavioral template (assets/CLAUDE.template.md) that seeds it — the user can edit it now or later (it's a starting point, not a fixed contract).
4. Write
Pick the file to edit (verbatim file-selection rules):
- If
CLAUDE.mdexists, edit it. - Else if
AGENTS.mdexists, edit it. - If neither exists, create the one the user chose in Section A — never pick for them.
- Never create
AGENTS.mdwhenCLAUDE.mdalready exists (or vice versa) — always edit the one already there. If an## Agent skillsblock already exists, update it in place rather than appending a duplicate; don't overwrite the surrounding sections. - Seeding a fresh
CLAUDE.md: only when neither file exists and the user choseCLAUDE.md, write the bundled behavioral template (assets/CLAUDE.template.md) first, then append the## Agent skillsblock below it (see "CLAUDE.md seed" below). A freshAGENTS.mdgets the## Agent skillsblock only — no behavioral template. Never seed over aCLAUDE.mdthat already exists; edit it in place.
Then create the substrate (skip anything that already exists; never clobber):
STATE.mdat the repo root — the empty two-level board with the legend (see seed below).CONTEXT.mdat the repo root (orCONTEXT-MAP.md+ per-contextCONTEXT.mdfor multi-context) — the glossary stub with a## Glossaryheading, devoid of implementation detail (see "CONTEXT.md seed" below). The## Glossaryheading is mandatory —spec-grillingappends terms under it.docs/adr/— repo-wide ADR home (seed a.gitkeep; ADRs are namedADR-<NNN>-<slug>.md).docs/features/— per-feature artifact root (docs/features/<slug>/holds intent.md, prd.md, acceptance.md, environment.md, plan.md per feature; seed a.gitkeep).- The
## Agent skillsblock in the chosen file (see below), pointing atSTATE.md,CONTEXT.md, anddocs/adr/. The domain-doc consumer rules carry over fromreferences/domain-docs.md.
The ## Agent skills block:
## Agent skills
This repo is configured for the achilles-skills pipeline (run once by `project-setup`).
### State board
Work-in-flight lives in `STATE.md` at the repo root — a local two-level board (features → slices) with a
`gate` column marking who owns the next action. This is the only work tracker; there is no GitHub/GitLab
issue queue. See `STATE.md`.
### Domain docs
Single-context: `CONTEXT.md` + `docs/adr/` at the root. (Multi-context: `CONTEXT-MAP.md` → per-context
`CONTEXT.md`.) Skills read these before exploring; consumer rules in the project-setup skill's
`references/domain-docs.md`.
### Per-feature artifacts
Each feature's intent.md / prd.md / acceptance.md / environment.md / plan.md live under
`docs/features/<slug>/`.
5. Done
Tell the user setup is complete and which skills now read from these files (spec-grilling appends
CONTEXT.md and writes docs/adr/; interview-me/idea-refine write docs/features/<slug>/intent.md;
plan-breakdown adds feature blocks + slice rows to STATE.md; the orchestrator drives STATE.md).
Mention the docs are hand-editable later; re-running project-setup is only needed to repair or re-scaffold.
STATE.md seed
Write this empty board — the legend header is the stable section downstream consumers depend on; no feature
blocks yet (those are born from an already-sliced plan, added by plan-breakdown):
# Pipeline State — <project>
> Single source of truth for what's in flight. The orchestrator drives slice rows; the human reads the
> `gate` column to know what needs them. No emojis; text tokens only.
feature state: spec · plan · building · done ← the PRD's stage
slice state: impl · verify · review · ship · done · blocked · halted
gate: you · agent · done ← who owns the next action
<!-- Feature blocks are added by plan-breakdown. Slice ids are PRD-namespaced. Example shape:
## PWR · Password reset feature: building
origin: prd.md · acceptance.md · plan.md
| Slice | Title | State | Gate | Blocked by | Artifacts |
|--------|-----------------------------|---------|-------|-----------|-----------|
| PWR-1 | request reset link | impl | agent | — | — |
-->
CONTEXT.md seed
Write this glossary stub — the ## Glossary heading is the stable section spec-grilling appends terms
under (canonical heading; do not rename); no terms yet (those emerge as the ubiquitous language is sharpened):
# <project>
## Glossary
<!-- Domain terms are appended here by spec-grilling as the ubiquitous language emerges.
One term per line: term — one-sentence definition. No implementation detail. -->
For multi-context, seed CONTEXT-MAP.md at the root plus one per-context CONTEXT.md, each carrying its
own ## Glossary heading.
CLAUDE.md seed (only when creating a fresh CLAUDE.md)
When the repo has neither CLAUDE.md nor AGENTS.md and the user chose to create CLAUDE.md, seed it
from the bundled template assets/CLAUDE.template.md before adding the ## Agent skills block. The
template is a project-agnostic set of behavioral guidelines — Think Before Coding · Simplicity First ·
Surgical Changes · Goal-Driven Execution — adapted from Andrej Karpathy's notes on LLM coding pitfalls (via
multica-ai/andrej-karpathy-skills). Write the template verbatim, then append the achilles wiring beneath it.
Do not write the template into an AGENTS.md, and never seed over a CLAUDE.md that already exists — in
that case you edit the existing file and add only the ## Agent skills block.
Rationalizations
- "This repo already tracks issues on GitHub — skip
STATE.md." → No. The suite's board isSTATE.md(consolidated local tracker). GitHub Issues are intentionally not the work surface. - "I'll create
CONTEXT.mdlater when there are terms." → No. The substrate must exist beforespec-grillinghas somewhere to append; scaffold the stub now (empty glossary is fine). - "Multi-context looks more thorough — default to it." → No. Default is single-context; only a real
monorepo with separate contexts warrants
CONTEXT-MAP.md. - "Neither CLAUDE.md nor AGENTS.md exists, I'll just create both / pick one." → No. Ask the user which one; never create both.
- "I'll dump all the choices in one message to save turns." → No. One decision at a time; assume the user doesn't know the terms.
Red flags
- Overwriting an existing
CONTEXT.md,STATE.md, or## Agent skillsblock without reading it first. - Creating
AGENTS.mdwhenCLAUDE.mdalready exists (or vice versa). - Asking "where should issues live / GitHub or local?" — that decision is gone (tracker = local
STATE.md). - Writing any value, secret, or shell command into a scaffolded file (these files are structure, not config).
- Seeding
STATE.mdwith feature/slice rows —project-setupleaves the board empty. - Writing the behavioral
CLAUDE.mdtemplate into anAGENTS.md, or over aCLAUDE.mdthat already exists.
Verification (ending criteria)
Done when all hold:
STATE.mdexists at the repo root and contains the three legend lines with the token sets exactly:feature state: spec · plan · building · done,slice state: impl · verify · review · ship · done · blocked · halted,gate: you · agent · done. No feature blocks.CONTEXT.md(orCONTEXT-MAP.mdfor multi-context) exists at the repo root.CONTEXT.mdcontains a## Glossaryheading (for multi-context, each per-contextCONTEXT.mddoes).docs/adr/anddocs/features/directories exist.- Exactly one of
CLAUDE.md/AGENTS.mdcontains an## Agent skillsblock referencingSTATE.md,CONTEXT.md, anddocs/adr/; the other file was not created. - If a fresh
CLAUDE.mdwas created (neither file existed and the user chose it), it leads with the bundled behavioral template and the## Agent skillsblock follows; no template was written into anAGENTS.mdor over a pre-existingCLAUDE.md. - No pre-existing user content was overwritten.
Outputs & handoff contract
Emits the repo substrate the whole suite consumes:
| Artifact | Location | Stable section(s) downstream depend on |
|---|---|---|
STATE.md | repo root | the header: feature state / slice state / gate legends (empty board) |
CONTEXT.md | repo root | ## Glossary (terms only, no implementation detail) |
docs/adr/ | repo-wide | the ADR home (ADR-<NNN>-<slug>.md) |
docs/features/ | repo-wide | per-feature artifact root (docs/features/<slug>/) |
CLAUDE.md / AGENTS.md | repo root | the ## Agent skills block; a fresh CLAUDE.md also leads with the bundled behavioral template |
Downstream consumers: interview-me/idea-refine → docs/features/<slug>/intent.md; spec-grilling →
appends CONTEXT.md + writes docs/adr/; to-prd/acceptance-criteria/environment-manifest → docs/features/<slug>/;
plan-breakdown → adds feature blocks + PRD-namespaced slice rows to STATE.md; the orchestrator drives
the slice/gate columns. tracker = local. STATE.md update by project-setup: create the empty board only.