Skip to content

Commit 40b9515

Browse files
Eric EngstfeldEric Engstfeld
authored andcommitted
Address review comments. Update docs
1 parent 4565563 commit 40b9515

4 files changed

Lines changed: 26 additions & 45 deletions

File tree

‎docs/reference/integrations.md‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ The Specify CLI supports a wide range of AI coding agents. When you run `specify
66

77
| Agent | Key | Notes |
88
| ------------------------------------------------------------------------------------ | ---------------- | ----------------------------------------------------------------------------------------------------------------------------------------- |
9+
| [Alquimia AI](https://docs.alquimia.ai) | `alquimia` | Skills-based integration; installs skills into `.alquimia/skills` and invokes them as `/speckit-<command>` |
910
| [Amp](https://ampcode.com/) | `amp` | |
1011
| [Antigravity (agy)](https://antigravity.google/) | `agy` | Skills-based integration; skills are installed automatically |
1112
| [Auggie CLI](https://docs.augmentcode.com/cli/overview) | `auggie` | |
@@ -260,6 +261,7 @@ The currently declared multi-install safe integrations are:
260261

261262
| Key | Isolation |
262263
| --- | --------- |
264+
| `alquimia` | `.alquimia/skills` |
263265
| `auggie` | `.augment/commands`, `.augment/rules/specify-rules.md` |
264266
| `claude` | `.claude/skills`, `CLAUDE.md` |
265267
| `cline` | `.clinerules/workflows`, `.clinerules/specify-rules.md` |

‎integrations/catalog.json‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"schema_version": "1.0",
3-
"updated_at": "2026-07-15T00:00:00Z",
3+
"updated_at": "2026-07-27T00:00:00Z",
44
"catalog_url": "https://raw.githubusercontent.com/github/spec-kit/main/integrations/catalog.json",
55
"integrations": {
66
"alquimia": {

‎src/specify_cli/integrations/alquimia/__init__.py‎

Lines changed: 0 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,10 @@
22

33
from __future__ import annotations
44

5-
from pathlib import Path
65
from typing import Any
76

87
from ..._utils import dump_frontmatter
98
from ..base import SkillsIntegration
10-
from ..manifest import IntegrationManifest
119

1210
# Mapping of command template stem → argument-hint text shown inline
1311
# when a user invokes the slash command in Alquimia AI.
@@ -165,45 +163,3 @@ def post_process_skill_content(self, content: str) -> str:
165163
updated = self.inject_argument_hint(updated, hint)
166164
break
167165
return updated
168-
169-
def setup(
170-
self,
171-
project_root: Path,
172-
manifest: IntegrationManifest,
173-
parsed_options: dict[str, Any] | None = None,
174-
**opts: Any,
175-
) -> list[Path]:
176-
"""Install Alquimia skills, then inject Alquimia-specific flags and argument-hints."""
177-
created = super().setup(project_root, manifest, parsed_options, **opts)
178-
179-
# Post-process generated skill files
180-
skills_dir = self.skills_dest(project_root).resolve()
181-
182-
for path in created:
183-
# Only touch SKILL.md files under the skills directory
184-
try:
185-
path.resolve().relative_to(skills_dir)
186-
except ValueError:
187-
continue
188-
if path.name != "SKILL.md":
189-
continue
190-
191-
content_bytes = path.read_bytes()
192-
content = content_bytes.decode("utf-8")
193-
194-
updated = content
195-
196-
# Inject argument-hint if available for this skill
197-
skill_dir_name = path.parent.name # e.g. "speckit-plan"
198-
stem = skill_dir_name
199-
if stem.startswith("speckit-"):
200-
stem = stem[len("speckit-") :]
201-
hint = ARGUMENT_HINTS.get(stem, "")
202-
if hint:
203-
updated = self.inject_argument_hint(updated, hint)
204-
205-
if updated != content:
206-
path.write_bytes(updated.encode("utf-8"))
207-
self.record_file_in_manifest(path, project_root, manifest)
208-
209-
return created

‎tests/integrations/test_integration_alquimia.py‎

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,29 @@ def test_registrar_config_uses_skill_layout(self):
3232
assert integration.registrar_config["args"] == "$ARGUMENTS"
3333
assert integration.registrar_config["extension"] == "/SKILL.md"
3434

35+
def test_requires_cli_is_true(self):
36+
integration = get_integration("alquimia")
37+
assert integration.config["requires_cli"] is True
38+
assert integration.multi_install_safe is True
39+
40+
def test_build_exec_args_uses_headless_prompt_flag(self):
41+
"""Workflow dispatch relies on the inherited
42+
``SkillsIntegration.build_exec_args()`` — pin its argv shape so a
43+
future change to the base class or this integration's config is
44+
caught here rather than surfacing as a silent workflow failure."""
45+
integration = get_integration("alquimia")
46+
args = integration.build_exec_args(
47+
"hello", model="alquimia-default", output_json=True
48+
)
49+
assert args is not None
50+
assert args[0] == "alquimia" or args[0].endswith("/alquimia")
51+
assert "-p" in args
52+
assert "hello" in args
53+
assert "--model" in args
54+
assert "alquimia-default" in args
55+
assert "--output-format" in args
56+
assert "json" in args
57+
3558
def test_setup_creates_skill_files(self, tmp_path):
3659
integration = get_integration("alquimia")
3760
manifest = IntegrationManifest("alquimia", tmp_path)

0 commit comments

Comments
 (0)