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
{{ message }}
Repository navigation
[Bug]: Junie commands not recognized due to "dot" format #4067
Current commands from specify init are not recognized by Junie CLI due to the "dot" format:
speckit.analyze.md
speckit.checklist.md
...
are correctly created in the .junie/commands directory (under project) but are not available since junie does not recognize the format. Changing the command name (eg - "speckit-analyze.md") make it available in the CLI.
Steps to Reproduce
Create a directory "test" - mkdir test
cd test
specify init .
select Junie as agent integration
complete configuration (shell, py, ...)
start junie
no command available of the ones installed (/speckit does not find anything)
Expected Behavior
Commands should be available
Actual Behavior
No Speckit command available
Specify CLI Version
0.16.2
AI Agent
Junie
Operating System
Linux Fedora 44
Python Version
Python 3.14.0
Error Logs
No error logs
Additional Context
Renamed a command replacing the dot with a dash, and it works:
Reporter @lucabotti on Spec Kit v0.16.2 / Python 3.14.0 / Linux Fedora 44 finds that after running specify init with the Junie integration, all generated command files follow the dot-separated naming convention (e.g. speckit.analyze.md, speckit.checklist.md) in .junie/commands/. Junie CLI does not recognize this format; renaming a file to use dashes (e.g. speckit-analyze.md) immediately makes it discoverable. No error logs are produced — the commands are simply invisible in Junie's UI.
Symptom
Commands installed by Spec Kit into .junie/commands/ are named speckit.<name>.md, but the Junie CLI only recognizes commands with dash-separated filenames (e.g. speckit-<name>.md). As a result, none of the installed commands appear when the user opens Junie.
Reproduction
mkdir test && cd test
specify init .
Select Junie as the agent integration; complete remaining prompts.
Start Junie CLI.
Attempt to run /speckit — no commands are listed or found.
Suspected Code Paths
src/specify_cli/integrations/junie/__init__.py — JunieIntegration does not override command_filename(), so it inherits the default from MarkdownIntegration.
src/specify_cli/integrations/base.py:475–482 — MarkdownIntegration.command_filename() returns f"speckit.{template_name}.md" (dot-separated). This is the default for all markdown integrations; Junie requires a dash instead.
JunieIntegration inherits the dot-separated command_filename() from MarkdownIntegration without override, producing filenames that the Junie CLI does not recognize. Junie's file-discovery logic apparently requires a dash separator between speckit and the command name. Confidence: high — the reporter confirmed that manually renaming a file to use a dash resolves the issue, and the code shows no Junie-specific override exists.
Proposed Remediation
Preferred: Override command_filename() in JunieIntegration to return f"speckit-{template_name}.md":
This mirrors the same pattern already used by other integrations (e.g. Copilot's speckit.{name}.agent.md) and is the minimal, self-contained change. No other integration is affected.
Alternatives:
A more general separator class attribute on MarkdownIntegration (e.g. separator = "." overridable to "-") would be cleaner for future integrations but adds abstraction complexity for what is currently a single-agent deviation.
Files likely to change:
src/specify_cli/integrations/junie/__init__.py — add the command_filename() override.
tests/integrations/test_integration_junie.py — update or add assertions checking that generated filenames use speckit-<name>.md.
Tests to add or update:
Assert that JunieIntegration().command_filename("analyze") returns "speckit-analyze.md" (not "speckit.analyze.md").
End-to-end install test: verify files created under .junie/commands/ all match the speckit-*.md pattern.
Risks & Considerations
Existing installations: Users who already ran specify init with the Junie integration will have the old dot-named files in place. After the fix, a reinstall or uninstall+reinstall will be needed to get the correctly named files. The manifest system should handle cleanup of the old files on uninstall since their hashes are tracked.
No API breakage: command_filename() is an internal method; the override is backward-compatible.
build_command_invocation() in base.py (lines 325–328) constructs invocations like /speckit.<stem> — it would also need a review to ensure the slash-command format Junie expects (e.g. /speckit-analyze) is produced correctly, or documentation updated if Junie uses a different invocation convention.
Open Questions
[NEEDS CLARIFICATION: Does Junie CLI use a specific invocation format (e.g. /speckit-analyze) that differs from what build_command_invocation() currently returns for Junie?]
[NEEDS CLARIFICATION: Is the dash-separated format documented in Junie's official command authoring docs, or inferred solely from the reporter's workaround?]
Regarding the:
NEEDS CLARIFICATION: Is the dash-separated format documented in Junie's official command authoring docs, or inferred solely from the reporter's workaround?]
When trying to create a new custom command via junie interface, dot is not accepted in input for the command name. No further documentation found (apart from a bug tracking on Jetbrain's YouTrack for Junie).
Activity
github-actions commentedon Aug 12, 2026
Bug assessment — junie-dot-format-commands: Valid · severity medium
Bug Assessment: Junie commands not recognized due to dot format
Report (summarized)
Reporter @lucabotti on Spec Kit v0.16.2 / Python 3.14.0 / Linux Fedora 44 finds that after running
specify initwith the Junie integration, all generated command files follow the dot-separated naming convention (e.g.speckit.analyze.md,speckit.checklist.md) in.junie/commands/. Junie CLI does not recognize this format; renaming a file to use dashes (e.g.speckit-analyze.md) immediately makes it discoverable. No error logs are produced — the commands are simply invisible in Junie's UI.Symptom
Commands installed by Spec Kit into
.junie/commands/are namedspeckit.<name>.md, but the Junie CLI only recognizes commands with dash-separated filenames (e.g.speckit-<name>.md). As a result, none of the installed commands appear when the user opens Junie.Reproduction
mkdir test && cd testspecify init ./speckit— no commands are listed or found.Suspected Code Paths
src/specify_cli/integrations/junie/__init__.py—JunieIntegrationdoes not overridecommand_filename(), so it inherits the default fromMarkdownIntegration.src/specify_cli/integrations/base.py:475–482—MarkdownIntegration.command_filename()returnsf"speckit.{template_name}.md"(dot-separated). This is the default for all markdown integrations; Junie requires a dash instead.Root Cause Hypothesis
JunieIntegrationinherits the dot-separatedcommand_filename()fromMarkdownIntegrationwithout override, producing filenames that the Junie CLI does not recognize. Junie's file-discovery logic apparently requires a dash separator betweenspeckitand the command name. Confidence: high — the reporter confirmed that manually renaming a file to use a dash resolves the issue, and the code shows no Junie-specific override exists.Proposed Remediation
Preferred: Override
command_filename()inJunieIntegrationto returnf"speckit-{template_name}.md":This mirrors the same pattern already used by other integrations (e.g. Copilot's
speckit.{name}.agent.md) and is the minimal, self-contained change. No other integration is affected.Alternatives:
separatorclass attribute onMarkdownIntegration(e.g.separator = "."overridable to"-") would be cleaner for future integrations but adds abstraction complexity for what is currently a single-agent deviation.Files likely to change:
src/specify_cli/integrations/junie/__init__.py— add thecommand_filename()override.tests/integrations/test_integration_junie.py— update or add assertions checking that generated filenames usespeckit-<name>.md.Tests to add or update:
JunieIntegration().command_filename("analyze")returns"speckit-analyze.md"(not"speckit.analyze.md")..junie/commands/all match thespeckit-*.mdpattern.Risks & Considerations
specify initwith the Junie integration will have the old dot-named files in place. After the fix, a reinstall or uninstall+reinstall will be needed to get the correctly named files. The manifest system should handle cleanup of the old files on uninstall since their hashes are tracked.command_filename()is an internal method; the override is backward-compatible.build_command_invocation()in base.py (lines 325–328) constructs invocations like/speckit.<stem>— it would also need a review to ensure the slash-command format Junie expects (e.g./speckit-analyze) is produced correctly, or documentation updated if Junie uses a different invocation convention.Open Questions
/speckit-analyze) that differs from whatbuild_command_invocation()currently returns for Junie?]lucabotti commentedon Aug 14, 2026
Regarding the:
NEEDS CLARIFICATION: Is the dash-separated format documented in Junie's official command authoring docs, or inferred solely from the reporter's workaround?]
When trying to create a new custom command via junie interface, dot is not accepted in input for the command name. No further documentation found (apart from a bug tracking on Jetbrain's YouTrack for Junie).