Skip to content

Commit e4cfa4c

Browse files
fix(integrations): declare kiro-cli multi-install safe (#3477)
* tidy kiro-cli multi-install-safe declaration + add docs row and test kiro-cli is declared multi_install_safe (it uses a fully isolated .kiro/ root, .kiro/prompts command dir, a stable '.' separator, and a dedicated manifest — #3471). main ended up with the flag assigned twice in the class body; this drops the bare duplicate and keeps a single declaration with the comment explaining why it's safe. also adds the missing kiro-cli row to the multi-install-safe table in docs/reference/integrations.md, and a test asserting the flag is set (the registry contract tests already enforce the actual path isolation against every other safe integration). * address review: drop agent-file column and duplicate test per maintainer guidance on #3477: the Isolation table listed each integration's agent-context file (AGENTS.md, CLAUDE.md, etc.) alongside its command dir, which contradicted the safety definition (Copilot flagged kiro-cli/codex both mapping to AGENTS.md). those context files are owned by the optional agent-context extension, not by multi_install_safe — the flag governs only the command directory + manifest. - renamed the column to 'Command directory' and removed the agent-file entries, so it lists only what each integration actually manages - reworded the definition to note agent-context is a separate concern and is not multi-install safe - removed the duplicate test_declared_multi_install_safe (the existing test_declares_multi_install_safe already asserts the same thing) * address review: keep agent-root requirement; reframe agent-context targeting - Restore 'static, unique agent root' alongside command directory in the multi-install-safe definition — base.py and test_registry.py (test_safe_integrations_have_distinct_agent_roots) enforce both. - Reframe the agent-context note: multi_install_safe is an integration-level declaration about command/skill paths, so describe context-file targeting as independent of it rather than calling the extension 'not multi-install safe'. The extension can even sync multiple anchors via context_files. * address review: hoist multi_install_safe to top of class Move the multi_install_safe = True declaration to the top of KiroCliIntegration (right after key) so it is visible at the exact spot the diff touched. The flag was never actually removed — it was declared once further down the class — but placing it at the top makes the opt-in unmistakable in review and keeps the single declaration. Verified the integration still resolves multi_install_safe is True; 24 kiro-cli tests pass.
1 parent 6e8623b commit e4cfa4c

2 files changed

Lines changed: 27 additions & 28 deletions

File tree

docs/reference/integrations.md

Lines changed: 20 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -257,31 +257,30 @@ Spec Kit tracks one default integration in `.specify/integration.json` with `def
257257

258258
An integration is multi-install safe when it uses a static, unique agent root and command directory, stable command invocation settings, and a separate install manifest whose managed files do not overlap another safe integration. Registry tests enforce those path and manifest invariants. Shared Spec Kit templates remain aligned to the single default integration.
259259

260-
The Isolation column below lists paths Spec Kit manages for that integration (skills/commands roots and any integration-owned rule files). It is not a full inventory of every file an agent may read.
261-
262-
**Agent-context defaults are separate.** The optional agent-context extension maps each integration to a default context file in `extensions/agent-context/agent-context-defaults.json`. Those defaults are independent of multi-install safety: several agents may share a root file such as `AGENTS.md` when the extension is enabled. Multi-install safety does not require a unique context file per safe integration.
260+
The Command directory column below lists the directory each integration installs its commands or skills into. Context-file targeting is a separate concern from integration multi-install safety: `multi_install_safe` is an integration declaration about command/skill paths, whereas the optional agent-context extension manages a per-agent context file (for example `AGENTS.md` or `CLAUDE.md`) and can even synchronize several anchors at once via its `context_files` setting. Multiple agents mapping to the same context file is expected there and does not affect whether an integration is multi-install safe; see the agent-context extension for details.
263261

264262
The currently declared multi-install safe integrations are:
265263

266-
| Key | Isolation |
267-
| --- | --------- |
268-
| `auggie` | `.augment/commands`, `.augment/rules/specify-rules.md` |
269-
| `claude` | `.claude/skills`, `CLAUDE.md` |
270-
| `cline` | `.clinerules/workflows`, `.clinerules/specify-rules.md` |
271-
| `codebuddy` | `.codebuddy/commands`, `CODEBUDDY.md` |
272-
| `codex` | `.agents/skills`, `AGENTS.md` |
273-
| `cursor-agent` | `.cursor/skills`, `.cursor/rules/specify-rules.mdc` |
274-
| `firebender` | `.firebender/commands`, `.firebender/rules/specify-rules.mdc` |
275-
| `gemini` | `.gemini/commands`, `GEMINI.md` |
264+
| Key | Command directory |
265+
| --- | ----------------- |
266+
| `auggie` | `.augment/commands` |
267+
| `claude` | `.claude/skills` |
268+
| `cline` | `.clinerules/workflows` |
269+
| `codebuddy` | `.codebuddy/commands` |
270+
| `codex` | `.agents/skills` |
271+
| `cursor-agent` | `.cursor/skills` |
272+
| `firebender` | `.firebender/commands` |
273+
| `gemini` | `.gemini/commands` |
276274
| `grok` | `.grok/skills` |
277-
| `junie` | `.junie/commands`, `.junie/AGENTS.md` |
278-
| `kilocode` | `.kilocode/workflows`, `.kilocode/rules/specify-rules.md` |
279-
| `qodercli` | `.qoder/commands`, `QODER.md` |
280-
| `qwen` | `.qwen/commands`, `QWEN.md` |
281-
| `shai` | `.shai/commands`, `SHAI.md` |
282-
| `tabnine` | `.tabnine/agent/commands`, `TABNINE.md` |
283-
| `trae` | `.trae/skills`, `.trae/rules/project_rules.md` |
284-
| `zcode` | `.zcode/skills`, `ZCODE.md` |
275+
| `junie` | `.junie/commands` |
276+
| `kilocode` | `.kilocode/workflows` |
277+
| `kiro-cli` | `.kiro/prompts` |
278+
| `qodercli` | `.qoder/commands` |
279+
| `qwen` | `.qwen/commands` |
280+
| `shai` | `.shai/commands` |
281+
| `tabnine` | `.tabnine/agent/commands` |
282+
| `trae` | `.trae/skills` |
283+
| `zcode` | `.zcode/skills` |
285284

286285
Integrations that share a command directory with another integration, require dynamic install paths such as `--commands-dir`, or merge shared tool settings are not declared safe by default. They can still be installed alongside another integration with `--force`.
287286

src/specify_cli/integrations/kiro_cli/__init__.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,13 @@
1313

1414
class KiroCliIntegration(MarkdownIntegration):
1515
key = "kiro-cli"
16+
# Kiro CLI keeps everything under a static, isolated agent root
17+
# (``.kiro/`` with commands in ``.kiro/prompts``) that no other
18+
# integration writes to, so it is safe to install alongside others
19+
# (issue #3471). IntegrationBase defaults this to False; declaring it
20+
# True here is the actual behavior change this integration opts into.
21+
# The registry's multi-install-safe contract tests enforce that
22+
# isolation for every integration setting this flag.
1623
multi_install_safe = True
1724
config = {
1825
"name": "Kiro CLI",
@@ -27,10 +34,3 @@ class KiroCliIntegration(MarkdownIntegration):
2734
"args": _KIRO_ARG_FALLBACK,
2835
"extension": ".md",
2936
}
30-
31-
# Kiro CLI keeps everything under a static, isolated agent root
32-
# (``.kiro/`` with commands in ``.kiro/prompts``) that no other
33-
# integration writes to, so it is safe to install alongside others
34-
# (issue #3471). The registry's multi-install-safe contract tests
35-
# enforce that isolation for every integration setting this flag.
36-
multi_install_safe = True

0 commit comments

Comments
 (0)