Repository navigation
fix(integrations): show hyphenated command names for docker-agent and junie - #4910
Merged
Merged
Conversation
Assisted-by: Claude Code (model: Claude Opus 5, autonomous)
… junie Both agents register `/speckit-<name>` commands, and their own `build_command_invocation` returns that form, but Spec Kit showed users the dotted `/speckit.<name>` names in two places: - docker-agent was missing from `ALWAYS_SLASH_AGENTS`, so the `init` next-steps banner and extension hook invocations used dotted names (github#4137 fixed the same gap for alquimia). - The `init` banner special-cased cline and forge but not junie, which installs hyphenated commands the same way. Assisted-by: Claude Code (model: Claude Opus 5, autonomous)
Contributor
There was a problem hiding this comment.
🟡 Changes recommended
The Junie fix duplicates integration-specific invocation metadata in the init command, preserving the drift that caused the regression.
1 open finding
What changed in this PR
Fixes invocation guidance so Docker Agent and Junie users see registered hyphenated commands.
Changes:
- Classifies Docker Agent as always using slash skills.
- Updates Junie’s init banner and adds regression coverage.
| File | Description |
|---|---|
src/specify_cli/_invocation_style.py |
Adds Docker Agent to slash-style integrations. |
src/specify_cli/command_init.py |
Displays hyphenated Junie commands. |
tests/integrations/test_integration_docker_agent.py |
Tests helper and hook rendering. |
tests/integrations/test_integration_junie.py |
Tests Junie’s init guidance. |
🧠 Review effort: Balanced
💡 Configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
Collaborator
|
Please address Copilot feedback |
The next-steps banner kept its own list of agents that use /speckit-<name>, which is how junie went missing from it. Build the names from the integration's invoke prefix and separator instead, the values init already uses to render the installed commands. The banner is unchanged for every registered integration in each of its modes. Assisted-by: Claude Code (model: Claude Opus 5, autonomous)
Collaborator
|
Thank you! |
Contributor
Author
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.

Description
docker-agent and junie both register hyphenated commands (
/speckit-<name>), and their ownbuild_command_invocationreturns that form. Spec Kit still showed their users the dotted names (/speckit.<name>), which those agents never register:.agents/skills/speckit-<name>/SKILL.md, the same layout as zed and muse, but it was missing fromALWAYS_SLASH_AGENTS. Sois_slash_skills_agent("docker-agent", ...)returned False. Thespecify initnext-steps banner listed/speckit.specify,/speckit.plan, and so on. Extension hooks rendered/speckit.git.commit. fix(alquimia): render/speckit-<name>invocations for the skills-only Alquimia agent #4137 fixed the same gap for alquimia by adding its key to the set. docker-agent has no non-skills mode, so it belongs with zed and muse inALWAYS_SLASH_AGENTS..junie/commands/speckit-<name>.md. Hook rendering already special-cases it, but theinitbanner only special-cased cline and forge. Sospecify init --integration junielisted/speckit.constitution,/speckit.plan, and so on.The
initbanner now builds command names from the integration's invoke prefix and separator, the same valuesinitpasses to_install_shared_infra_or_exitto render the installed commands. That replaces the banner's hard-coded agent list, so the next integration cannot drift from the banner the way junie did. docker-agent still needs its key inALWAYS_SLASH_AGENTS, because hook rendering reads that set. A check over all registered integrations found no other mismatch between hook rendering andbuild_command_invocation.Testing
test_is_slash_skills_agentandtest_hook_invocation_renders_the_hyphenated_formintest_integration_docker_agent.py, modelled on the alquimia tests. Onmain:assert False is Trueandassert '/speckit.git.commit' == '/speckit-git-commit'.test_init_next_steps_show_hyphenated_commandsintest_integration_junie.py. Onmainthe banner contains/speckit.plan, not/speckit-plan.tests/integrations,tests/specify_cli/test_command_init.py,tests/test_extensions.py,tests/specify_cli/integrationsandtests/specify_cli/extensions: 4612 passed, 5 skipped.specify initfor every registered integration in each of its modes (60 cases, including--skills,--commandsand--legacy-commandswhere offered). The banner command is the same before and after the switch to the integration's prefix and separator.specify init <dir> --integration <docker-agent|junie> --ignore-agent-tools --non-interactivenow prints/speckit-plan(was/speckit.plan) for both. docker-agent'sbefore_planhook now prints/speckit-git-commit.Equivalent local checks: tests ran with
.venv/bin/python -m pytestand the CLI with the venv'sspecify, on macOS.AI Disclosure
AI disclosure: This contribution was produced by Claude Code running autonomously on behalf of @Chaoqi31. An audit agent (Claude Fable 5.1, max reasoning effort) found the docker-agent gap and wrote a failing reproduction. The orchestrating agent (Claude Opus 5) found the junie banner case. A fix agent (Claude Opus 5, xhigh effort) wrote the fix and tests. A separate review agent checked the branch, and the orchestrating agent wrote the commits and this description. Claude Code (Claude Opus 5) also wrote the follow-up commit for review feedback. AI generated the code, tests and text. No human reviewed the diff line by line before submission.