Skip to content

[Bug]: Junie integration: generated commands are unusable because of $ARGUMENTS/$speckit-... auto-detected as required arguments #4794

Description

@dch-actaport

Bug Description

Every command that Spec Kit's Junie integration installs under .junie/commands/*.md (e.g. speckit-specify, speckit-plan, speckit-tasks, speckit-clarify, speckit-checklist, speckit-analyze, speckit-implement, speckit-constitution, speckit-converge, speckit-taskstoissues) is effectively non-functional in Junie CLI/IDE out of the box. Running any of them (e.g. /speckit-specify build a login page) produces no output and no effect whatsoever — Junie silently declines to execute the command.

Root cause: Junie's custom-slash-command engine auto-detects any $identifier token that appears in a command's body as a required named argument (docs). Spec Kit's shared command templates use the literal token $ARGUMENTS as their agent-agnostic placeholder for "whatever the user typed after the slash command". Because the Junie integration copies these templates into .junie/commands/*.md verbatim, without adapting that placeholder to Junie's own mechanism, Junie treats ARGUMENTS as a mandatory named argument (/speckit-specify ARGUMENTS=...) instead of accepting free text. Since nothing in the docs or generated files tells the user to supply ARGUMENTS=..., and Junie gives no visible error when a required argument is missing in this context, the command just does nothing.

There is a second, easy-to-miss instance of the same bug: the "Extension Hooks" boilerplate that every command template prints (in both ## Pre-Execution Checks and ## Mandatory Post-Execution Hooks) contains this explanatory aside, verbatim, twice per command:

"... the invocation may differ from the literal {command} id shown above, e.g. a skills-mode agent runs it as /skill:speckit-... or $speckit-..."

That $speckit-... is prose describing other agents' invocation syntax — it isn't meant to be a Junie template variable — but it still matches Junie's $identifier auto-detection, so Junie registers a second required argument named speckit on top of ARGUMENTS. Fixing only $ARGUMENTS is therefore not sufficient; the command still won't run without an explicit (and meaningless) speckit=... value.

Steps to Reproduce

  1. specify init (or sync) a project with the Junie integration enabled.
  2. Open the project in Junie CLI or the Junie IDE plugin.
  3. Run /speckit-specify build a login page (or any other speckit-* command with free text after it).

Expected Behavior

Junie accepts the free text as the command's input (the same way it works in every other supported agent) and runs the command's outlined steps.

Actual Behavior

Nothing happens. No output, no error, no file changes. (Junie's own CLI log shows the command never reaches the model — no LLM request is ever issued for that turn — which is consistent with Junie's pre-flight check silently rejecting the command because a required argument was never supplied.)

Specify CLI Version

1.0.12

AI Agent

Junie

Operating System

Mac OS 26.6.2

Python Version

3.11.4

Error Logs

Additional Context

No response

AI Disclosure

Claude Sonnet 5

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    triage-nice-to-haveVerdict: evidence-backed fix or greenlit feature — land after review

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions