User Input
$ARGUMENTS
You MUST consider the user input before proceeding (if not empty).
Pre-Execution Checks
Check for extension hooks (before tasks-to-issues conversion):
Check if .specify/extensions.yml exists in the project root.
If it exists, read it and look for entries under the hooks.before_taskstoissues key
If the YAML cannot be parsed or is invalid, skip hook checking silently and continue normally
Filter out hooks where enabled is explicitly false. Treat hooks without an enabled field as enabled by default.
For each remaining hook, do not attempt to interpret or evaluate hook condition expressions:
- If the hook has no
condition field, or it is null/empty, treat the hook as executable
- If the hook defines a non-empty
condition, skip the hook and leave condition evaluation to the HookExecutor implementation
When constructing slash commands from hook command names, replace dots (.) with hyphens (-). For example, speckit.git.commit → /speckit-git-commit.
For each executable hook, output the following based on its optional flag:
Optional hook (optional: true):
## Extension Hooks
**Optional Pre-Hook**: {extension}
Command: `/{command}`
Description: {description}
Prompt: {prompt}
To execute: `/{command}`
Mandatory hook (optional: false):
## Extension Hooks
**Automatic Pre-Hook**: {extension}
Executing: `/{command}`
EXECUTE_COMMAND: {command}
Wait for the result of the hook command before proceeding to the Outline.
If no hooks are registered or .specify/extensions.yml does not exist, skip silently
Outline
- Run
.specify/scripts/bash/check-prerequisites.sh --json --require-tasks --include-tasks from repo root and parse FEATURE_DIR and AVAILABLE_DOCS list. All paths must be absolute. For single quotes in args like "I'm Groot", use escape syntax: e.g 'I'''m Groot' (or double-quote if possible: "I'm Groot").
- From the executed script, extract the path to tasks.
- Get the Git remote by running:
git config --get remote.origin.url
[!CAUTION]
ONLY PROCEED TO NEXT STEPS IF THE REMOTE IS A GITHUB URL
- For each task in the list, use the GitHub MCP server to create a new issue in the repository that is representative of the Git remote.
[!CAUTION]
UNDER NO CIRCUMSTANCES EVER CREATE ISSUES IN REPOSITORIES THAT DO NOT MATCH THE REMOTE URL
Post-Execution Checks
Check for extension hooks (after tasks-to-issues conversion):
Check if .specify/extensions.yml exists in the project root.
If it exists, read it and look for entries under the hooks.after_taskstoissues key
If the YAML cannot be parsed or is invalid, skip hook checking silently and continue normally
Filter out hooks where enabled is explicitly false. Treat hooks without an enabled field as enabled by default.
For each remaining hook, do not attempt to interpret or evaluate hook condition expressions:
- If the hook has no
condition field, or it is null/empty, treat the hook as executable
- If the hook defines a non-empty
condition, skip the hook and leave condition evaluation to the HookExecutor implementation
When constructing slash commands from hook command names, replace dots (.) with hyphens (-). For example, speckit.git.commit → /speckit-git-commit.
For each executable hook, output the following based on its optional flag:
Optional hook (optional: true):
## Extension Hooks
**Optional Hook**: {extension}
Command: `/{command}`
Description: {description}
Prompt: {prompt}
To execute: `/{command}`
Mandatory hook (optional: false):
## Extension Hooks
**Automatic Hook**: {extension}
Executing: `/{command}`
EXECUTE_COMMAND: {command}
If no hooks are registered or .specify/extensions.yml does not exist, skip silently
1---2name: speckit-taskstoissues3description: Convert existing tasks into actionable, dependency-ordered GitHub issues for the feature based on available design artifacts.4---56## User Input78```text9$ARGUMENTS10```1112You **MUST** consider the user input before proceeding (if not empty).1314## Pre-Execution Checks1516**Check for extension hooks (before tasks-to-issues conversion)**:1718- Check if `.specify/extensions.yml` exists in the project root.19- If it exists, read it and look for entries under the `hooks.before_taskstoissues` key20- If the YAML cannot be parsed or is invalid, skip hook checking silently and continue normally21- Filter out hooks where `enabled` is explicitly `false`. Treat hooks without an `enabled` field as enabled by default.22- For each remaining hook, do **not** attempt to interpret or evaluate hook `condition` expressions:23 - If the hook has no `condition` field, or it is null/empty, treat the hook as executable24 - If the hook defines a non-empty `condition`, skip the hook and leave condition evaluation to the HookExecutor implementation25- When constructing slash commands from hook command names, replace dots (`.`) with hyphens (`-`). For example, `speckit.git.commit` → `/speckit-git-commit`.26- For each executable hook, output the following based on its `optional` flag:27 - **Optional hook** (`optional: true`):2829 ```30 ## Extension Hooks3132 **Optional Pre-Hook**: {extension}33 Command: `/{command}`34 Description: {description}3536 Prompt: {prompt}37 To execute: `/{command}`38 ```3940 - **Mandatory hook** (`optional: false`):4142 ```43 ## Extension Hooks4445 **Automatic Pre-Hook**: {extension}46 Executing: `/{command}`47 EXECUTE_COMMAND: {command}4849 Wait for the result of the hook command before proceeding to the Outline.50 ```5152- If no hooks are registered or `.specify/extensions.yml` does not exist, skip silently5354## Outline55561. Run `.specify/scripts/bash/check-prerequisites.sh --json --require-tasks --include-tasks` from repo root and parse FEATURE_DIR and AVAILABLE_DOCS list. All paths must be absolute. For single quotes in args like "I'm Groot", use escape syntax: e.g 'I'''m Groot' (or double-quote if possible: "I'm Groot").571. From the executed script, extract the path to **tasks**.581. Get the Git remote by running:5960```bash61git config --get remote.origin.url62```6364> [!CAUTION]65> ONLY PROCEED TO NEXT STEPS IF THE REMOTE IS A GITHUB URL66671. For each task in the list, use the GitHub MCP server to create a new issue in the repository that is representative of the Git remote.6869> [!CAUTION]70> UNDER NO CIRCUMSTANCES EVER CREATE ISSUES IN REPOSITORIES THAT DO NOT MATCH THE REMOTE URL7172## Post-Execution Checks7374**Check for extension hooks (after tasks-to-issues conversion)**:75Check if `.specify/extensions.yml` exists in the project root.7677- If it exists, read it and look for entries under the `hooks.after_taskstoissues` key78- If the YAML cannot be parsed or is invalid, skip hook checking silently and continue normally79- Filter out hooks where `enabled` is explicitly `false`. Treat hooks without an `enabled` field as enabled by default.80- For each remaining hook, do **not** attempt to interpret or evaluate hook `condition` expressions:81 - If the hook has no `condition` field, or it is null/empty, treat the hook as executable82 - If the hook defines a non-empty `condition`, skip the hook and leave condition evaluation to the HookExecutor implementation83- When constructing slash commands from hook command names, replace dots (`.`) with hyphens (`-`). For example, `speckit.git.commit` → `/speckit-git-commit`.84- For each executable hook, output the following based on its `optional` flag:85 - **Optional hook** (`optional: true`):8687 ```88 ## Extension Hooks8990 **Optional Hook**: {extension}91 Command: `/{command}`92 Description: {description}9394 Prompt: {prompt}95 To execute: `/{command}`96 ```9798 - **Mandatory hook** (`optional: false`):99100 ```101 ## Extension Hooks102103 **Automatic Hook**: {extension}104 Executing: `/{command}`105 EXECUTE_COMMAND: {command}106 ```107108- If no hooks are registered or `.specify/extensions.yml` does not exist, skip silently