SpecKit is a single Go module. The user-facing docs live in the README and docs/; this file is for working on the tool.
Run the local CI gate — it mirrors the go GitHub workflow exactly, plus a
gofmt check:
mise run ci # gofmt check + go build + go vet + go test, all packagesmise run fmt formats the tree in place. Always run mise run ci before
pushing so failures are caught locally instead of on a remote runner.
The hosted gate Action (gate/action.yml) and the reusable workflow run on
GitHub's runners, but you can exercise them locally with
act:
mise run act # boots colima (the mise-pinned Docker daemon) and runs the
# gate-selftest workflow against testdata/act-fixtureIt runs ./gate (with a specify built from your checkout) over a tiny
end-to-end SpecKit project, validating the runner glue the Go tests can't:
mise-action, mise install + pnpm install, specify verify running the
suite, the junit join, and parity. colima/act/lima/docker-cli are pinned
in mise.toml (macOS/Linux only); run colima stop to free the VM when done.
The same workflow (.github/workflows/gate-selftest.yml) runs in CI on PRs that
touch the gate.
cmd/specify/— the CLI (Cobra).main.gowires subcommands;render.godoes the Lip Gloss output.internal/engine/— the spec engine:scan,verify,lock,drift,cover,parity,gate.internal/specmodel/— the mechanized form ofspecs/CONVENTIONS.md(frontmatter, kinds, IDs, the scenario join).internal/config/— the.speckit/specs.jsonloader (targets).internal/project/—initscaffolding and the per-agent projection adapters, plus the skill / subagent / pack projection.internal/coreassets/templates/— the embedded assetsinit/packsproject:commands/,skills/,agents/,rules/,packs/<stack>/,scaffolds/<stack>/.
- The fork dogfoods itself: its behavior is specified under
specs/andfeatures/, and its tests carry// SPEC:reverse pointers.specify scanmust stay clean. - Commits are scoped (
<scope>: <subject>);specify gate scopeenforces it. - Mise task names use colons as separators —
fmt:check(in TOML,[tasks."fmt:check"]), notfmt-check. Same convention in scaffolded projects. - Projection changes are covered by golden trees under
internal/project/testdata/goldens/— regenerate withgo test ./internal/project -run TestInitGoldenTrees -update. - Scaffolds ship only original, MIT-clean code. Never vendor paid or
closed-source code into
internal/coreassets/templates/scaffolds/— in particular not Tailwind Plus / Catalyst, which is the basis of Trove'sfoundationset. The web scaffold'sfoundationexample is written fresh on React Aria Components + Tailwind +cva; keep any component examples original. (Seedocs/design/scaffolds/web.md→ "Components".)