Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion docs/reference/integrations.md
Original file line number Diff line number Diff line change
Expand Up @@ -248,7 +248,9 @@ Spec Kit tracks one default integration in `.specify/integration.json` with `def

### Which integrations are multi-install safe?

An integration is multi-install safe when it uses isolated agent directories, a dedicated context file that does not collide with another safe integration, stable command invocation settings, and a separate install manifest. Shared Spec Kit templates remain aligned to the single default integration.
An integration is multi-install safe when it uses isolated agent directories, stable command invocation settings, and a separate install manifest. Shared Spec Kit templates remain aligned to the single default integration.

The `Isolation` column below lists each safe integration's install footprint (agent command directory, and its own rules/context file when it writes one). A few integrations map to the same top-level `AGENTS.md` as their coding-agent context file — for example `codex` and `kiro-cli`. That mapping is owned by the optional `agent-context` extension, which self-seeds the context file for the *single default* integration recorded in `.specify/init-options.json` only, never for every installed integration at once, so it does not cause two safe integrations to write the same file. The `multi_install_safe` flag itself governs only the install footprint (directories and manifest), which the registry contract tests verify is disjoint across every safe integration.
Comment on lines +251 to +253

The currently declared multi-install safe integrations are:

Expand All @@ -264,6 +266,7 @@ The currently declared multi-install safe integrations are:
| `gemini` | `.gemini/commands`, `GEMINI.md` |
| `junie` | `.junie/commands`, `.junie/AGENTS.md` |
| `kilocode` | `.kilocode/workflows`, `.kilocode/rules/specify-rules.md` |
| `kiro-cli` | `.kiro/prompts` |
| `qodercli` | `.qoder/commands`, `QODER.md` |
| `qwen` | `.qwen/commands`, `QWEN.md` |
| `shai` | `.shai/commands`, `SHAI.md` |
Expand Down
6 changes: 6 additions & 0 deletions src/specify_cli/integrations/kiro_cli/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,3 +26,9 @@ class KiroCliIntegration(MarkdownIntegration):
"args": _KIRO_ARG_FALLBACK,
"extension": ".md",
}
# Isolated agent root (.kiro/) and command dir (.kiro/prompts) that do not
# collide with any other integration, a stable "." separator with no
# dynamic paths, and a dedicated install manifest — so kiro-cli meets every
# documented multi-install-safe criterion. The registry contract tests
# enforce this isolation against every other safe integration (#3471).
multi_install_safe = True
10 changes: 10 additions & 0 deletions tests/integrations/test_integration_kiro_cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,16 @@ def test_registrar_config(self):
assert i.registrar_config["format"] == "markdown"
assert i.registrar_config["extension"] == ".md"

def test_declared_multi_install_safe(self):
"""kiro-cli uses a fully isolated .kiro/ root, a stable "." separator,
and a dedicated manifest, so it must be declared multi-install safe —
otherwise co-installing it (e.g. alongside claude) leaves
`integration status` permanently in ERROR with no way to resolve it
(#3471). The registry contract tests enforce the actual path isolation
against every other safe integration."""
i = get_integration(self.KEY)
assert i.multi_install_safe is True

def test_registrar_config_args_is_exact_prose_fallback(self):
"""Layer 1 — pin the exact fallback so wording drift requires a
deliberate paired commit (production constant + test update)."""
Expand Down