CodeVetter · Repo Unpack · Feature catalog
github/spec-kit
The CLI surface splits into project bootstrapping (`init`, `check`, `version`, `self check|upgrade`), four parallel package managers (`integration`, `extension`, `preset`, `bundle`) each with add/remove/list/info/search/enable/disable/update and nested `catalog` commands, a workflow engine front-end (`workflow run/resume/status/...` plus `step` and `overlay` groups), a read-only `artifact` introspection group, and an `event run` target used by generated hook dispatchers. On the content side it ships ten core SDD command templates, four bundled extensions, three bundled workflows, and four repo presets.
- `specify init [NAME]|.|--here` scaffolds a project with flags `--script sh|ps|py`, `--integration <key>`, `--integration-options`, `--preset`, repeatable `--extension` (bundled name, local path, or HTTPS URL), `--trust-extension-urls`, `--force`, `--non-interactive`, `--ignore-agent-tools`; several legacy flags (`--skip-tls`, `--github-token`, `--offline`, `--debug`) remain as hidden no-ops.
- `specify check` iterates `AGENT_CONFIG` and runs `check_tool` (shutil.which-style probe) for each `requires_cli` agent, marks IDE-based agents as skipped, and also probes `code`/`code-insiders`.
- `specify version` prints a Rich info panel; `--features` emits stable capability flags (e.g. `workflow_catalog`, `integration_upgrade_command`) and `--json` requires `--features`. `specify self check|upgrade` lives in `_version.py` and compares the installed distribution version against the latest GitHub release tag.
- `specify integration` is a command group (app `integration_app`) with command modules for install, uninstall, list, status, switch, use, upgrade, info, search, scaffold, plus a nested `catalog` group (add/list/remove).
- `specify extension add` supports `--dev` (local directory), `--from <url>` (external archive with an HTTPS-or-localhost check and a default-deny trust prompt), `--force`, and `--priority`; the group also has remove, list, info, search, enable, disable, set-priority, update, and `catalog` subcommands.
- `specify preset` manages template-override packs with the same verb set (add/remove/list/info/search/enable/disable/set-priority/update) plus `resolve` (shows the composed resolution stack) and a nested `catalog` group.
- `specify workflow` exposes run, resume, status, list, add, remove, update, enable, disable, search, info, resolve plus nested `catalog`, `step` (with its own `catalog`), and `overlay` groups; `workflow run` accepts an installed workflow ID or a local YAML path.
- `specify bundle` packages/installs role-based bundles with verbs init, add, install, build, validate, list, info, search, remove, update and a nested `catalog` group; bundled catalog JSON ships `bugfix` and `assess` first-party bundles.
- `specify artifact list|info` is a thin read-only introspection group over `ArtifactCatalog` (commands/templates/scripts/hooks), emitting strict JSON envelopes on stdout/stderr and documented in `docs/reference/artifacts.md`.
- `specify event run <command_name> <event_name> [timeout]` is the dispatcher target for agent-native hooks: it reads a JSON payload from stdin capped at 1 MiB (counting encoded bytes via `sys.stdin.buffer`), then calls `resolve_and_run_event_command` from `events.py`.
- Ten core SDD command templates ship under `templates/commands/`: specify, plan, tasks, implement, converge, analyze, clarify, constitution, checklist, taskstoissues — mirrored by `SKILL_DESCRIPTIONS` in the package root.
- Bundled first-party content: extensions `git` (branch workflow + hooks), `agent-context` (manages CLAUDE.md/AGENTS.md sections), `assess` (idea triage), `bug` (assess→fix→test), plus `template`/`selftest` scaffolds; workflows `speckit` (specify→plan→tasks→implement with gates), `bugfix`, `assess`; presets `lean`, `constitution-sync`, `scaffold`, `self-test`.
- Per-agent command output supports four layouts selected by base class: Markdown files (MarkdownIntegration), TOML (TomlIntegration, e.g. gemini), YAML recipes (YamlIntegration), and skill directories `speckit-<name>/SKILL.md` (SkillsIntegration, e.g. claude/codex); `invoke_separator` switches `/speckit.plan` vs `/speckit-plan` spellings.