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/powershell/check-prerequisites.ps1 -Json -RequireTasks -IncludeTasks 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---5
6
7## User Input
8
9```text
10$ARGUMENTS
11```
12
13You **MUST** consider the user input before proceeding (if not empty).
14
15## Pre-Execution Checks
16
17**Check for extension hooks (before tasks-to-issues conversion)**:
18- 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` key
20- If the YAML cannot be parsed or is invalid, skip hook checking silently and continue normally
21- 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 executable
24 - If the hook defines a non-empty `condition`, skip the hook and leave condition evaluation to the HookExecutor implementation
25- 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`):
28 ```
29 ## Extension Hooks
30
31 **Optional Pre-Hook**: {extension}
32 Command: `/{command}`
33 Description: {description}
34
35 Prompt: {prompt}
36 To execute: `/{command}`
37 ```
38 - **Mandatory hook** (`optional: false`):
39 ```
40 ## Extension Hooks
41
42 **Automatic Pre-Hook**: {extension}
43 Executing: `/{command}`
44 EXECUTE_COMMAND: {command}
45
46 Wait for the result of the hook command before proceeding to the Outline.
47 ```
48- If no hooks are registered or `.specify/extensions.yml` does not exist, skip silently
49
50## Outline
51
521. Run `.specify/scripts/powershell/check-prerequisites.ps1 -Json -RequireTasks -IncludeTasks` 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").
531. From the executed script, extract the path to **tasks**.
541. Get the Git remote by running:
55
56```bash
57git config --get remote.origin.url
58```
59
60> [!CAUTION]
61> ONLY PROCEED TO NEXT STEPS IF THE REMOTE IS A GITHUB URL
62
631. 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.
64
65> [!CAUTION]
66> UNDER NO CIRCUMSTANCES EVER CREATE ISSUES IN REPOSITORIES THAT DO NOT MATCH THE REMOTE URL
67
68## Post-Execution Checks
69
70**Check for extension hooks (after tasks-to-issues conversion)**:
71Check if `.specify/extensions.yml` exists in the project root.
72- If it exists, read it and look for entries under the `hooks.after_taskstoissues` key
73- If the YAML cannot be parsed or is invalid, skip hook checking silently and continue normally
74- Filter out hooks where `enabled` is explicitly `false`. Treat hooks without an `enabled` field as enabled by default.
75- For each remaining hook, do **not** attempt to interpret or evaluate hook `condition` expressions:
76 - If the hook has no `condition` field, or it is null/empty, treat the hook as executable
77 - If the hook defines a non-empty `condition`, skip the hook and leave condition evaluation to the HookExecutor implementation
78- When constructing slash commands from hook command names, replace dots (`.`) with hyphens (`-`). For example, `speckit.git.commit` → `/speckit-git-commit`.
79- For each executable hook, output the following based on its `optional` flag:
80 - **Optional hook** (`optional: true`):
81 ```
82 ## Extension Hooks
83
84 **Optional Hook**: {extension}
85 Command: `/{command}`
86 Description: {description}
87
88 Prompt: {prompt}
89 To execute: `/{command}`
90 ```
91 - **Mandatory hook** (`optional: false`):
92 ```
93 ## Extension Hooks
94
95 **Automatic Hook**: {extension}
96 Executing: `/{command}`
97 EXECUTE_COMMAND: {command}
98 ```
99- If no hooks are registered or `.specify/extensions.yml` does not exist, skip silently