一键导入
impl-new
Scaffold a new candidate implementation in the spec-driven `implementations/<version>/<n>-<name>/` tree, to stress-test the spec against a fresh stack.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Scaffold a new candidate implementation in the spec-driven `implementations/<version>/<n>-<name>/` tree, to stress-test the spec against a fresh stack.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
| name | impl-new |
| disable-model-invocation | true |
| description | Scaffold a new candidate implementation in the spec-driven `implementations/<version>/<n>-<name>/` tree, to stress-test the spec against a fresh stack. |
| argument-hint | [slug] |
You are scaffolding a new candidate implementation in a spec-driven project. The candidate's job is to stress-test the spec — to surface gaps, contradictions, and overly prescriptive requirements by being built against them. Treat it as an instrumented experiment, not a competitor or a draft of "the real thing."
%%{ init: { 'look': 'handDrawn' } }%%
flowchart TD
Start(["/sextant:impl-new [slug]"]) --> Locate
subgraph "Step 1: Locate"
Locate["Find SPEC.md + implementations/ root"] --> Version["Resolve active spec version"]
Version --> Siblings["List existing impl siblings"]
end
subgraph "Step 2: Gather"
Siblings --> Slug["Resolve slug (arg or asked)"]
Slug --> Stack["Stack + key libraries"]
Stack --> UXCheck{"UX work?"}
UXCheck -->|Yes| Aesthetic["Aesthetic direction"]
UXCheck -->|No| Constraints
Aesthetic --> Constraints["Hard constraints + non-goals"]
end
subgraph "Step 3: Read"
Constraints --> ReadSpec["Read SPEC.md"]
ReadSpec --> LoadBearing["Identify load-bearing requirements for this stack"]
end
subgraph "Step 4: Propose"
LoadBearing --> Plan["Numbered plan: layout, build, first slice, requirement strategy"]
Plan --> Confirm["User reviews"]
end
subgraph "Step 5: Scaffold"
Confirm --> Mkdir["Create implementations/<v>/<slug>/"]
Mkdir --> Justfile["Write justfile stub"]
Justfile --> Status["Seed STATUS.md (all Missing)"]
Status --> Handoff(["Hand off to user / greenfield recipe"])
end
Find the active spec using the shared discovery order in
references/locate-spec.md (the source of
truth every sextant skill uses — do not use a bespoke order here). In brief,
first hit wins: STATUS.md spec-pointer → spec/ directory (incl. vnext/,
exploration/, migration/) → justfile spec variable → CURRENT_SPEC_VERSION
→ root SPEC.md (or docs/spec.md).
If no SPEC.md is found, stop and ask. Don't scaffold an implementation tree before there's a contract to build against.
Resolve the implementations root from the spec location:
spec/<v>/SPEC.md, implementations live at implementations/<v>/.implementations/v1/ or just implementations/.vnext/spec/<v>/...), all paths are relative to that subfolder.Once located, list existing sibling implementations (implementations/<v>/*/) so the user and you both know what number this candidate is and what stacks are already covered.
The goal is to make the user's choices explicit before scaffolding, so the implementation starts with intentional constraints rather than convention defaults.
The skill's positional argument is the slug. If absent, ask. Naming convention: <n>-<name> where <n> is the next sequence number across existing siblings and <name> is a short, kebab-case label. Examples: 1-python, 2-js, 3-hybrid, 4-rust.
Validate the slug:
2-x if 1-y already exists with no 2-* siblings; suggest 3-x (or whatever the next gap is).Ask the user to name:
If the user can't articulate a stack yet, present the existing siblings and suggest a deliberately different choice. The point of multiple implementations is breadth — don't build a second Python+FastAPI candidate when a JS or Go one would surface different blind spots.
Skip this step for CLI tools, libraries, and headless services — the spec dictates output format and there's no aesthetic to choose.
For UX-bearing work, ask for an explicit aesthetic anchor: "Pico CSS classless," "warm darkroom," "Swiss Neobrutalist," "iOS dark mode." This is the single biggest lever against AI-aesthetic convergence — without a deliberate direction, multiple UI implementations will drift toward the same "generic AI dashboard" look and stop being useful for comparison.
If you can't tell whether the work is UX-bearing, look at SPEC.md for keywords ("page", "render", "click", "view", "panel", "screen") or ask.
Ask for:
These are the spec deltas for this implementation. Capture them — they shape the plan in Step 4 and the seeded STATUS.md in Step 5.
Read the full SPEC.md (or just the active version if multi-versioned). Build a working model of:
CM: 4, OP: 7, etc.[OP-3] system shall render under 100ms needs explicit work (memoization, virtualization); in a Go+stdlib HTTP server, the same requirement falls out of the stack.This identification is the key value-add over the user just running mkdir. The plan in Step 4 builds on it.
Present a numbered plan, ~6-10 items, that the user can review and edit before any files are touched. Cover:
src/, tests/, package.json + tsconfig.json for TS; pyproject.toml + src/<name>/ for Python; etc.).just build, just run, just test will invoke. Each implementation owns its own justfile.FUT-1, FUT-3 deferred per user direction).Present the plan, then wait for sign-off. If the user edits the plan, redo the relevant sections. If the user changes stack or constraints, loop back to Step 2 and gather again.
On sign-off, create:
implementations/<v>/<slug>/
├── justfile # build / run / test stubs
├── STATUS.md # requirement coverage, all 'Missing' by default
└── (other entry-point files per Step 4's plan)
justfileMinimal stub — the user fills in the body during implementation. Three recipes at a minimum: build, run, test. Include a header comment naming the slug and the spec version it's built against:
# implementations/<v>/<slug>/justfile
# Spec version: <v>
# Stack: <stack>
default:
@just --list
build:
# TODO
run:
# TODO
test:
# TODO
STATUS.mdSeed with every non-FUT requirement ID from SPEC.md, each marked Missing
(nothing is built yet — see the shared status vocabulary below). The user (and
/sextant:spec-status) will flip entries to Covered / Partial as
implementation progresses.
# STATUS — <slug>
**Spec:** spec/<v>/SPEC.md
**Stack:** <stack from Step 2>
**Constraints:** <constraints from Step 2>
**Out of scope:** <FUT IDs and any user-declared deferrals from Step 2>
**Last audit:** <today>
**Coverage:** 0 Covered, 0 Partial, N Missing/Contradicts<, plus K deferred (FUT-…)>
## Coverage
| ID | Requirement (abbreviated) | Status | Location |
|-------|---------------------------|---------|----------|
| CM-01 | <text> | Missing | — |
| CM-02 | <text> | Missing | — |
| ... | ... | ... | ... |
Use the shared status vocabulary — Covered / Partial / Missing / Contradicts
(capitalized), the same terms spec-status and spec-sync classify with, so a
later ledger refresh reads these rows without a vocabulary mismatch. A fresh
candidate seeds every row Missing.
Use abbreviated requirement text in the table (first ~10-12 words) — full
text lives in SPEC.md, the table is for tracking, not for re-reading. This
per-implementation shape (candidate metadata block + per-requirement table) is a
first-class variant that /sextant:spec-status refreshes in place — it updates
the **Last audit:**/**Coverage:** lines and each row's Status/Location while
preserving the Stack/Constraints/Out-of-scope block.
Report back to the user:
Scaffolded implementations/<v>/<slug>/:
→ justfile stub (build/run/test)
→ STATUS.md with N Missing requirements seeded from spec/<v>/SPEC.md
Next: start implementing the first slice — the core contract. See your plan, item 3.
Start a greenfield dev session for the implementation phase (e.g. /recipe greenfield, if you use the recipe plugin).
Do not start implementing yourself. The skill's job is to scaffold and frame the work; the user (or a fresh greenfield session) drives the build.
/sextant:spec-req init bootstraps a fresh spec; /sextant:spec-req new adds requirements). An implementation without a spec to verify against isn't a candidate, it's just code.Missing. Resist marking entries Covered based on stack convention ("React will handle accessibility") — let /sextant:spec-sync verify after the implementation exists.1-python already exists, user asks for 1-rust. Refuse and propose the next available number, or ask whether to retire 1-python first./sextant:spec-req — useful before scaffolding if SPEC.md is missing requirement IDs or needs a new requirement captured first./sextant:spec-sync — run after the first slice to verify the candidate is on track. The seeded STATUS.md is the input its analysis reads against./sextant:impl-select — the inverse operation. When one candidate has earned the right to be the only one, impl-select retires the others and flattens the winner to the repo root.Look up, trace, and create spec requirements, and bootstrap a new SPEC.md.
Graduate the winning candidate from the spec-driven `implementations/<version>/<n>-<name>/` tree to the sole implementation at the repo root — a one-way move, only once one candidate has clearly won.
Refresh STATUS.md to match current spec coverage — the lightweight, hook-safe ledger writer in the spec-sync family.
Reconcile SPEC.md and the source — full-domain coverage + drift analysis, applied as one-way syncs.