You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: docs/community/extensions.md
+2-1Lines changed: 2 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -36,6 +36,7 @@ The following community-contributed extensions are available in [`catalog.commun
36
36
| Archive Extension | Archive merged features into main project memory. |`docs`| Read+Write |[spec-kit-archive](https://github.com/stn1slv/spec-kit-archive)|
37
37
| Azure DevOps Integration | Sync user stories and tasks to Azure DevOps work items using OAuth authentication |`integration`| Read+Write |[spec-kit-azure-devops](https://github.com/pragya247/spec-kit-azure-devops)|
38
38
| Blueprint | Stay code-literate in AI-driven development: review a complete code blueprint for every task from spec artifacts before /speckit.implement runs |`docs`| Read+Write |[spec-kit-blueprint](https://github.com/chordpli/spec-kit-blueprint)|
39
+
| Blueprint Index — Living Architecture Map | A living architecture map for spec-driven projects, kept honest by a deterministic, low-friction, machine-first CI gate (JSON, self-healable) that blocks only when the map contradicts the specs or code. Brownfield or greenfield. |`process`| Read+Write |[spec-kit-blueprint](https://github.com/ogil109/spec-kit-blueprint)|
39
40
| Branch Convention | Configurable branch and folder naming conventions for /specify with presets and custom patterns |`process`| Read+Write |[spec-kit-branch-convention](https://github.com/Quratulain-bilal/spec-kit-branch-convention)|
40
41
| Brownfield Bootstrap | Bootstrap spec-kit for existing codebases — auto-discover architecture and adopt SDD incrementally |`process`| Read+Write |[spec-kit-brownfield](https://github.com/Quratulain-bilal/spec-kit-brownfield)|
41
42
| BrownKit | Evidence-driven capability discovery, security and QA risk assessment for existing codebases |`process`| Read+Write |[BrownKit](https://github.com/MaksimShevtsov/BrownKit)|
@@ -158,7 +159,7 @@ The following community-contributed extensions are available in [`catalog.commun
| V-Model Extension Pack | Enforces V-Model paired generation of development specs and test specs with full traceability |`docs`| Read+Write |[spec-kit-v-model](https://github.com/leocamello/spec-kit-v-model)|
160
161
| Verify Extension | Post-implementation quality gate that validates implemented code against specification artifacts |`code`| Read-only |[spec-kit-verify](https://github.com/ismaelJimenez/spec-kit-verify)|
161
-
| Verify Review Ship |Adds post-implementation verify, review, and ship readiness gates to Spec Kit workflows |`process`| Read-only|[spec-kit-verify-review-ship](https://github.com/cadugevaerd/spec-kit-verify-review-ship)|
| Verify Tasks Extension | Detect phantom completions: tasks marked [X] in tasks.md with no real implementation |`code`| Read-only |[spec-kit-verify-tasks](https://github.com/datastone-inc/spec-kit-verify-tasks)|
163
164
| Version Guard | Verify tech stack versions against live npm registries before planning and implementation |`process`| Read-only |[spec-kit-version-guard](https://github.com/KevinBrown5280/spec-kit-version-guard)|
164
165
| What-if Analysis | Preview the downstream impact (complexity, effort, tasks, risks) of requirement changes before committing to them |`visibility`| Read-only |[spec-kit-whatif](https://github.com/DevAbdullah90/spec-kit-whatif)|
Copy file name to clipboardExpand all lines: docs/community/presets.md
+3-2Lines changed: 3 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -19,8 +19,9 @@ The following community-contributed presets customize how Spec Kit behaves — o
19
19
| Explicit Task Dependencies | Adds explicit `(depends on T###)` dependency declarations and an Execution Wave DAG to tasks.md for parallel scheduling | 1 template, 1 command | — |[spec-kit-preset-explicit-task-dependencies](https://github.com/Quratulain-bilal/spec-kit-preset-explicit-task-dependencies)|
20
20
| Fiction Book Writing | It adapts the Spec-Driven Development workflow for storytelling to create books or audiobooks (with annotations) in 12 languages: features become story elements, specs become story briefs, plans become story structures, and tasks become scene-by-scene writing tasks. Supports single and multi-POV, all major plot structure frameworks, and two style modes: an author voice sample or humanized AI prose principles. Supports interactive elements like brainstorming, interview, roleplay, and extras like statistics, cover builder, illustration builder, and bio command. Export with templates for KDP, D2D, etc. | 26 templates, 34 commands, 2 scripts | — |[speckit-preset-fiction-book-writing](https://github.com/adaumann/speckit-preset-fiction-book-writing)|
21
21
| Game Narrative Writing | Preset for game narrative design and interactive storytelling. It adapts the Spec-Driven Development workflow for game narratives: features become story mechanics, specs become narrative briefs, plans become story maps, and tasks become dialogue and scene-writing tasks. Supports branching narratives, player agency systems, state machines, and interactive dialogue trees. | 37 templates, 34 commands, 5 scripts | — |[speckit-preset-game-narrative-writing](https://github.com/adaumann/speckit-preset-game-narrative-writing)|
22
-
| Intake Authoring Governance | Creates traceable Spec Kit intakes from ordered text sources and now truthfully adopts legacy intakes without inventing predecessor receipts. | 7 templates, 2 commands, 2 scripts | — |[spec-kit-preset-intake-authoring-governance](https://github.com/hindermath/spec-kit-preset-intake-authoring-governance)|
23
-
| Intake Review Governance | Adds hash-bound review, repair, and status gates for single, series, and campaign intake files before interactive, autonomous, or parallel Spec Kit execution. | 8 templates, 3 commands, 2 scripts | — |[spec-kit-preset-intake-review-governance](https://github.com/hindermath/spec-kit-preset-intake-review-governance)|
22
+
| Intake Authoring Governance | Governs traceable intake CRUD, bounded public HTTPS sources, and explicitly approved single or series authoring without granting execution authority. | 10 templates, 5 commands, 4 scripts | — |[spec-kit-preset-intake-authoring-governance](https://github.com/hindermath/spec-kit-preset-intake-authoring-governance)|
23
+
| Intake Review Governance | Reviews single, series, and campaign intake files before Spec Kit execution and binds accepted outcomes to normalized content hashes. | 8 templates, 3 commands, 2 scripts | — |[spec-kit-preset-intake-review-governance](https://github.com/hindermath/spec-kit-preset-intake-review-governance)|
Copy file name to clipboardExpand all lines: docs/reference/integrations.md
+5-2Lines changed: 5 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -25,7 +25,7 @@ The Specify CLI supports a wide range of AI coding agents. When you run `specify
25
25
|[Hermes](https://github.com/NousResearch/hermes-agent)|`hermes`| Skills-based integration; installs skills globally into `~/.hermes/skills/`|
26
26
|[IBM Bob](https://www.ibm.com/products/bob)|`bob`| Skills-based integration by default; installs skills as `speckit-<command>/SKILL.md` under `.bob/skills/` and invokes them as `/speckit-<command>`. Pass `--integration-options="--legacy-commands"` to scaffold the deprecated Bob 1.x layout (`.bob/commands/*.md`) instead; that flag will be removed in a future release. Existing legacy installs can migrate with `specify integration upgrade bob --integration-options="--skills"`, which converts them to the skills layout and removes the old command files. If preset overrides are installed, the migration is rejected with an actionable error (preset artifacts cannot yet be reconciled across a layout change) — remove the preset(s), migrate, then reinstall them. |
|[Kilo Code](https://github.com/Kilo-Org/kilocode)|`kilocode`|Installs commands into `.kilo/commands`; legacy `.kilocode/workflows` installs remain supported as a registration fallback|
29
29
|[Kimi Code](https://code.kimi.com/)|`kimi`| Skills-based integration; installs into `.kimi-code/skills/`. `--migrate-legacy` moves old `.kimi/skills/` installs to the new paths |
30
30
|[Kiro CLI](https://kiro.dev/docs/cli/)|`kiro-cli`| Kiro CLI does not substitute `$ARGUMENTS` in file-based prompts, so Spec Kit ships a prose fallback at render time (see [Manage prompts](https://kiro.dev/docs/cli/chat/manage-prompts/) and issue [#1926](https://github.com/github/spec-kit/issues/1926)). Alias: `--integration kiro`|
31
31
|[Lingma](https://lingma.aliyun.com/)|`lingma`| Skills-based integration; skills are installed automatically |
@@ -269,13 +269,16 @@ The currently declared multi-install safe integrations are:
Copy file name to clipboardExpand all lines: docs/reference/workflows.md
+26Lines changed: 26 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -502,6 +502,32 @@ args: "{{ inputs.spec }}"
502
502
message: "{{ status | default('pending') }}"
503
503
```
504
504
505
+
### Interpolation and shell safety
506
+
507
+
Expressions are resolved by **plain string substitution** — the value of `{{ ... }}` is spliced into the surrounding text exactly as-is, with no quoting or escaping added. That is convenient for building `args` and `message` strings, but it has an important consequence for `shell` steps: a `run` field is handed to the system shell (`/bin/sh -c` on POSIX), so any interpolated value is interpreted as **shell syntax**, not just data.
508
+
509
+
If an interpolated value can contain characters like `;`, `|`, `&`, `$( )`, backticks, or quotes, it can change or extend the command that actually runs. This matters most when the value is not fully under the workflow author's control:
510
+
511
+
- **Workflow `inputs.*`** — supplied by whoever runs the workflow.
512
+
- **A prior step's output**, e.g. `{{ steps.plan.output.stdout }}` — for a `prompt` step this is **text produced by the AI agent**, which can in turn be influenced by files, tickets, or web content the agent read. Treat agent output as untrusted when it flows into a `shell` step.
513
+
514
+
There is **no shell-escaping filter** in the expression language and **no sandbox** around a `shell` step, so none of the practices below can be treated as a guarantee that a hostile value is neutralised. The only reliable control is to constrain what an interpolated value *can* be, and to keep values you cannot constrain out of `run` fields entirely. Scrutinise every `run` field that interpolates a value you do not control, and at minimum:
515
+
516
+
- **Constrain the value at the source with `enum`/an allowlist.** When `inputs.*` feeds a `run` field, restrict it to a fixed set of known-safe values so a caller cannot supply arbitrary shell text at all. This is the strongest control the engine offers — prefer it over any downstream mitigation.
517
+
518
+
```yaml
519
+
inputs:
520
+
target:
521
+
type: string
522
+
enum: [staging, production] # caller cannot inject arbitrary text
523
+
```
524
+
525
+
- **Keep unconstrained values out of `run`.** If a value cannot be constrained to an allowlist — most agent/`prompt` output — do not interpolate it into a `run` field. Branch on it with `if`/`switch` against fixed conditions, or act on it in a `command`/`prompt` step rather than a shell command built from it.
526
+
- **Quoting is not a security boundary.** Surrounding a substitution with quotes (`'{{ inputs.x }}'`) helps the shell treat a *trusted* value as a single argument and avoids word-splitting on spaces, but a value that itself contains the matching quote character can still break out and inject shell syntax. Quote for correctness on constrained values; never rely on quoting to make an *unconstrained* substitution safe.
527
+
- **Gates do not inspect the next step, and `message` is printed verbatim.** A `gate` step renders only its own `message`/`show_file` — it does not display, resolve, or sanitise the command that follows it, and approval never neutralises an injectable interpolation. Do **not** interpolate raw untrusted data into `message`: it is printed as-is with no control-character stripping, so agent or caller output could inject terminal/ANSI escapes that alter or hide the approval prompt. Keep `message` to trusted, constrained text, and surface untrusted material for review via `show_file` instead — its path and contents are control/ANSI-stripped before display.
528
+
529
+
A `shell` step is an arbitrary-command primitive by design; these practices reduce exposure and keep *which* command runs under the author's control, but they do not eliminate the risk of interpolating values you do not fully control.
530
+
505
531
## Shell Step Environment Variables
506
532
507
533
Shell steps automatically receive the following environment variables:
0 commit comments