Skip to content

docs: document __SPECKIT_COMMAND_ token for portable cross-command references#3503

Open
Quratulain-bilal wants to merge 1 commit into
github:mainfrom
Quratulain-bilal:docs/document-speckit-command-token
Open

docs: document __SPECKIT_COMMAND_ token for portable cross-command references#3503
Quratulain-bilal wants to merge 1 commit into
github:mainfrom
Quratulain-bilal:docs/document-speckit-command-token

Conversation

@Quratulain-bilal

@Quratulain-bilal Quratulain-bilal commented Jul 13, 2026

Copy link
Copy Markdown
Contributor

phase 1 of the plan @mnriem laid out in #3474: document the __SPECKIT_COMMAND_<NAME>__ token so extension authors have a signal it exists.

why

the development guide's "Body (Markdown)" section listed $ARGUMENTS and {SCRIPT} but never mentioned __SPECKIT_COMMAND_<NAME>__ — the agent-neutral token that resolve_command_refs() (integrations/base.py) renders into each agent's own invocation syntax. with no mention of it, an author naturally hard-codes a literal like /speckit.my-ext.prepare, which is correct for one agent and breaks on the rest. that literal-instead-of-token mistake is the root cause behind #3451.

what

docs-only, in EXTENSION-DEVELOPMENT-GUIDE.md:

  • added the token to the placeholder list in "Body (Markdown)"
  • added a "Referencing other commands" subsection: why a hard-coded literal isn't portable, the command-name -> token encoding (upper-case, speckit. prefix dropped, dotted segments -> underscores), and a worked example
  • noted the one limitation i verified: the resolver maps each _ back to the agent separator, so a token can't carry a hyphen inside a name segment

verification

every rendered example in the docs was checked against resolve_command_refs directly — e.g. __SPECKIT_COMMAND_BUG_FIX__ -> /speckit.bug.fix (slash) and /speckit-bug-fix (skills). the token names match the first-party bug and git extensions, which use this token exclusively.

scope: this is the independent, shippable docs increment. phases 2 (wire token resolution into the skill render path) and 3 (codex $speckit- override) from the #3474 plan are separate.

the development guide's 'Body (Markdown)' section listed $ARGUMENTS and
{SCRIPT} but never mentioned __SPECKIT_COMMAND_<NAME>__, the agent-neutral
token that resolve_command_refs() renders into each agent's invocation
syntax. with no signal the token exists, an author naturally hard-codes a
literal like /speckit.my-ext.prepare — correct for one agent, broken on the
rest (the root cause behind github#3451).

added it to the placeholder list plus a 'Referencing other commands'
subsection: why a literal isn't portable, the name->token encoding, and a
worked example showing the same token render as /speckit.bug.fix for a
slash agent and /speckit-bug-fix for a skills agent. examples verified
against resolve_command_refs and the first-party bug/git extensions.

phase 1 of the plan in github#3474; addresses the discoverability gap for github#3451.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Documents the portable __SPECKIT_COMMAND_<NAME>__ placeholder in the extension development guide so extension authors can reference other commands without hard-coding agent-specific invocation syntax.

Changes:

  • Adds __SPECKIT_COMMAND_<NAME>__ to the command-body placeholder list.
  • Introduces a “Referencing other commands” subsection explaining the token’s purpose, encoding rules, and an example.
  • Notes a naming limitation around underscores/hyphens in command-name segments.
Show a summary per file
File Description
extensions/EXTENSION-DEVELOPMENT-GUIDE.md Documents the cross-command reference token, its encoding, and provides usage guidance/examples for extension authors.

Review details

Tip

Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

  • Files reviewed: 1/1 changed files
  • Comments generated: 1
  • Review effort level: Low

Comment on lines +273 to +276
A command body is a *template* that Spec Kit renders once per agent. Different agents invoke commands with different surface syntax — slash-based agents use `/speckit.plan`, skills-based agents use `/speckit-plan`, and some (Codex, Zcode) use `$speckit-plan` in skills mode. So when you reference a sibling command from a body, **do not hard-code a literal invocation** like `/speckit.my-ext.prepare`. A literal is correct for exactly one agent and breaks on the rest.

Instead use the agent-neutral token `__SPECKIT_COMMAND_<NAME>__`. Spec Kit resolves it to the correct invocation for whichever agent the project is initialized with.

@mnriem

mnriem commented Jul 13, 2026

Copy link
Copy Markdown
Collaborator

Can you please address Copilot feedback. We will should tackle the documentation change for skill rendering once that lands. Thanks!

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants