Output style (plain words, no dashes, no hyphens)
<!-- OUTPUT-STYLE:START -->
Write everything this skill produces, files and messages alike, in plain simple language. Keep technical terms that carry real meaning; explain each in plain words. Never use a dash or a hyphen as punctuation: no em dash, no en dash, and no hyphenated compounds. Write
, not
. Say it in simple words, or reword the sentence. Code, file paths, command flags, and values other skills match on keep their hyphens. Use short sentences, commas, or parentheses. Clear beats clever.
<!-- OUTPUT-STYLE:END -->
What this skill does
The builder: turns a spec plus project conventions into working code. Tracks:
UI (components, pages, layouts;
),
Logical (APIs, services, data layers, business logic, integrations;
), or both (e.g. "auth" = sign in pages plus session logic → run both). Step 0 gates on the spec so load bearing choices (an auth approach, a payment provider) are decided in
, not silently invented partway through the build.
Asks vs acts
Gates, then acts: no upfront question rounds like
. Read the decision, build, ask only what the design left open (the visual direction when no reference was given; a business rule the spec didn't settle). Infer from the spec,
, and codebase; ask only what can't be inferred; recommend local implementation choices.
Artifact ownership
- Writes app code (plus CSS/tokens for UI).
- Scope (): only the Step 4 touches (feature status → , milestone sub boxes, box, code pointer). Never marks a feature (waits for and ), never ticks or , never creates files in (scopes only; analysis/research is 's, in the spec's ).
- Never writes specs (flags the need, defers to ); never restructures root (that's ); new area conventions go via afterwards.
- One spec touch: the line (umbrella decision → the 's, never a child's), plus filling the feature's spec pointer line. Build start: → ; build lands (feature → ): → (a spec is not until its feature ships). Never edit spec content, only that line, surgically: read it again right before writing; unexpected state (already , ) → flag, don't clobber.
- Artifact base: by default, if is a published docs site. Read from whichever exists (paths here assume ).
- Shared scope: read it again right before ticking, edit only the specific checkbox, status, or pointer line (never rewrite the file); feature not as expected (already , reworked) → flag, don't overwrite. The freshness check guards against rebuilding what a teammate shipped.
Portability (any OS, any agent)
Any Agent Skills client, macOS/Linux/Windows. Detection snippets are POSIX reference; use your agent's own cross platform file tools. Builds inline on the main thread (Step 3); the only subagents are a read only
that explores code (Step 2.5) and a read only
for a doc check (Step 2.6, degrading to building from knowledge without web capability), both on the cheapest model. Bundled guides (
,
,
) and the build flow after the gate (
) are paths relative to this skill's folder; the main thread reads them. No interactive question picker → ask the prompts as plain text with the same options.
Execution
Before you build: the project must already exist (except the scaffold task)
Exception: if this IS the scaffold sub task of the Stack and architecture foundation feature (prompt says
, or the step initializes the project from the stack spec), creating the project IS the job. Read the ARCHITECTURE spec's
; run the framework's own init (
,
, etc. per that stack); install base dependencies (framework, core runtime, only what the first slice needs); lay out directories; confirm a dev server or build runs. Scaffold steps derive from the stack decision (a decision spec has no build plan). Install just in time: NOT every library the spec names (email, monitoring, and so on); each later feature installs its own when built; only cross cutting tooling (lint, format, type strictness) comes early, via
+ the tooling task. Then proceed.
Otherwise
builds into an existing project. No skeleton (no
/
/
/manifest, no source tree) and not the scaffold task → stop:
No project found to build into. Run the scaffold step first (the Stack and architecture feature's scaffold sub task, per your architecture spec), then run
again.
A project exists (even a bare scaffold) → proceed.
Before you build: freshness & collaboration (don't build on stale state or over a teammate)
Before mutating anything (skip silently if solo, offline, or not using git):
quietly; base =
, else
; behind count (
git rev-list --count HEAD..origin/<base>
); uncommitted work (
).
- Behind (count > 0) → stop and warn: "You're N commits behind . A teammate may have already changed or shipped this. Pull first, then run again."
- Uncommitted work in the area you'll touch → warn: "You have uncommitted changes here. Commit or stash first so this build doesn't tangle with them." Let them proceed if they insist.
- Feature in the scope AND its code area (pointer line's path) has recent commits by another author (
git log --format='%an' -- <area>
) → warn: "<feature> looks like it's partway through the build by someone else. Coordinate before continuing it." Confirm before proceeding.
Warnings, not hard blocks, but surface them.
Step 0: The spec gate (always first)
Is a decision owed and unrecorded? The test:
To build this, would you have to invent something the engineer hasn't decided?
If yes, stop and route to
(its spec is the build spec;
implements decisions, it doesn't make them). You'd have to invent:
- A provider, library, integration, data model, or cross cutting pattern (e.g. auth provider, DB/ORM, caching strategy).
- A whole UI page or screen: its design system ( there? if not, which direction?), sections/composition, component inventory, asset strategy (no screenshot, no repo images → e.g. an online source). Owed unless a AND a page level spec pin these down.
- A feature's behavior (search, a wizard: "what exactly should it do?" is open; asks those questions). Owed unless a spec defines it.
NOT owed for pure implementation already specified: a small bug fix, a component matching an existing
, wiring already decided pieces, a copy tweak, anything an existing spec/
/
governs.
Don't hardcode to page names; apply the invent test to whatever was asked (a "home page" or "search filter" fails on a fresh project, passes once a spec/
exists). False negatives are the failure mode, building a real decision without noticing (what "just build the home page" looks like): when unsure, treat as owed and ask (panel below).
Read only what this feature needs, never the whole
tree: its one scope file and its one governing spec (single file, or umbrella
plus the one child speccing this sub task). No other features' rows, scope files, workspaces, or unrelated specs.
Check, in order:
- Locate this feature's scope file (only that one). Monorepo → for the task's package. Pick the file (, or the matching in a split) from the At a glance table alone; read just this feature's section. with no spec pointer yet → decision owed and missing. Malformed → flag and ask, don't guess.
- Open the governing spec via the feature's pointer, reading only its build spec sections as defined in the build flow (), Step 2 item 1. Found → it's the spec; proceed. No pointer and no linked spec → targeted look in for one matching this feature's scope, never a blanket read.
- The nearest (workspace/area) may already capture the decision, synced from an earlier feature (e.g. "the auth provider is already chosen") → proceed without a new spec.
Decision owed and unrecorded → don't guess, don't silently stop. Ask (single select;
on Claude Code):
- question: "This looks like it needs an architecture decision first:
<name the specific load-bearing choice, e.g. 'which auth provider + session model'>
. How do you want to handle it?"
- header: "spec first?"
- options:
- : "Recommended. Capture the decision in a spec before building, so the build has a spec." → end here with the handoff below. Do not build.
- : "I've judged there's no real decision here; build directly." → proceed to the build flow ().
- : "Build it without a spec; I'll backfill the decision later." → proceed to the build flow (), leaving the feature's = with a note in the scope ().
The tool appends "Other" as a free text option automatically.
Run this next, then come back to
:
/architect <feature>: <the specific decision to settle>
Once the spec exists, run
again and I'll build to it.
No decision owed (pure implementation) → skip the question, proceed.
Build flow (Steps 1-4)
Once the gate clears (no decision owed, or the engineer chose
/
), read
and follow its Steps 1-4: classify the track, load the decision and conventions, explore, optional doc check, build, then update the scope and report. Do not read
when the gate ends the run (
, no build).
Reference files
- Build flow after the gate (Steps 1-4):
- UI build track:
- Logical build track:
- Accessibility checklist (UI track, Phase 5):
- Project design system (UI track):