User Input
$ARGUMENTS
You MUST consider the user input before proceeding (if not empty).
Audience and tone (interactive mode)
When KISS_AGENT_MODE=interactive (the default), assume the user
has no technical or business-domain background. Run this skill
as a guided questionnaire:
- One question at a time. No walls of questions.
- Yes / no first. Phrase so
yes, no, not sure, or skip
is a valid answer.
- No jargon. Translate domain terms into everyday words. Don't
ask "promote tasks to issues with labels" — ask "want me to
create a separate to-do (issue) on GitHub for each task in the
list?".
- Choices, not blank fields. When yes/no isn't enough, offer
2-4 lettered options (A/B/C/D) with one-line everyday
descriptions. Always include "Not sure — pick a sensible default".
- Always recommend. State the option you would pick and why in
one sentence so the user can reply "yes" / "ok" to accept.
- Confirm before pushing to GitHub. Show the full list of
issues you'll create (titles + bodies + labels) and ask
"Create [N] issues on GitHub? (yes / no / change which?)".
Never auto-create.
not sure / skip triggers a sensible default: skip the
ambiguous task, mark it "(default applied — confirm later)" in
tasks.md, and log a debt entry in the parent agent's debt
file.
When KISS_AGENT_MODE=auto (or --auto), skip the conversational
gate but still: show the list and require a single "go ahead"
before any GitHub write.
Pre-Execution Checks
Check for extension hooks (before tasks-to-issues conversion):
Check if .kiss/extensions.yml exists in the project root.
If it exists, read it and look for entries under the hooks.before_tasks-to-issues 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
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 .kiss/extensions.yml does not exist, skip silently
Outline
- Run
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 .kiss/extensions.yml exists in the project root.
If it exists, read it and look for entries under the hooks.after_tasks-to-issues 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
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 .kiss/extensions.yml does not exist, skip silently
Inputs
- Tasks List (
{context.current.tasks}): current.tasks.
- If set: Read the tasks file.
- If null: Search {context.paths.tasks} for the most recent tasks.md.
- If not provided: Error: tasks file is required. Run /kiss-taskify first.
Outputs
- GitHub Issues (
GitHub repository): github repository.
- Behavior: Create GitHub issues for each task. Requires GitHub API access (mcp tool: github/github-mcp-server/issue_write).
- Overwrite guarded by
{context.preferences.confirm_before_write}.
Context Update
After this skill completes successfully, update .kiss/context.yml:
- Do not update context.yml (issue creation is external system sync)
1---2name: kiss-tasks-to-issues-23description: Converts existing tasks into actionable, dependency-ordered GitHub issues for the feature based on available design artefacts. Use when creating GitHub issues from tasks.md, exporting tasks to a GitHub project board, or when the team tracks work in GitHub Issues.4---567## User Input89```text10$ARGUMENTS11```1213You **MUST** consider the user input before proceeding (if not empty).1415## Audience and tone (interactive mode)1617When `KISS_AGENT_MODE=interactive` (the default), assume the user18has **no technical or business-domain background**. Run this skill19as a guided questionnaire:2021- **One question at a time.** No walls of questions.22- **Yes / no first.** Phrase so `yes`, `no`, `not sure`, or `skip`23 is a valid answer.24- **No jargon.** Translate domain terms into everyday words. Don't25 ask "promote tasks to issues with labels" — ask "want me to26 create a separate to-do (issue) on GitHub for each task in the27 list?".28- **Choices, not blank fields.** When yes/no isn't enough, offer29 2-4 lettered options (A/B/C/D) with one-line everyday30 descriptions. Always include "Not sure — pick a sensible default".31- **Always recommend.** State the option you would pick and why in32 one sentence so the user can reply "yes" / "ok" to accept.33- **Confirm before pushing to GitHub.** Show the full list of34 issues you'll create (titles + bodies + labels) and ask35 "Create [N] issues on GitHub? (yes / no / change which?)".36 Never auto-create.37- **`not sure` / `skip` triggers a sensible default**: skip the38 ambiguous task, mark it "(default applied — confirm later)" in39 `tasks.md`, and log a debt entry in the parent agent's debt40 file.4142When `KISS_AGENT_MODE=auto` (or `--auto`), skip the conversational43gate but still: show the list and require a single "go ahead"44before any GitHub write.4546## Pre-Execution Checks4748**Check for extension hooks (before tasks-to-issues conversion)**:4950- Check if `.kiss/extensions.yml` exists in the project root.51- If it exists, read it and look for entries under the `hooks.before_tasks-to-issues` key52- If the YAML cannot be parsed or is invalid, skip hook checking silently and continue normally53- Filter out hooks where `enabled` is explicitly `false`. Treat hooks without an `enabled` field as enabled by default.54- For each remaining hook, do **not** attempt to interpret or evaluate hook `condition` expressions:55 - If the hook has no `condition` field, or it is null/empty, treat the hook as executable56 - If the hook defines a non-empty `condition`, skip the hook and leave condition evaluation to the HookExecutor implementation57- For each executable hook, output the following based on its `optional` flag:58 - **Optional hook** (`optional: true`):5960 ```text61 ## Extension Hooks6263 **Optional Pre-Hook**: {extension}64 Command: `/{command}`65 Description: {description}6667 Prompt: {prompt}68 To execute: `/{command}`69 ```7071 - **Mandatory hook** (`optional: false`):7273 ```text74 ## Extension Hooks7576 **Automatic Pre-Hook**: {extension}77 Executing: `/{command}`78 EXECUTE_COMMAND: {command}7980 Wait for the result of the hook command before proceeding to the Outline.81 ```8283- If no hooks are registered or `.kiss/extensions.yml` does not exist, skip silently8485## Outline86871. Run `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").881. From the executed script, extract the path to **tasks**.891. Get the Git remote by running:9091```bash92git config --get remote.origin.url93```9495> [!CAUTION]96> ONLY PROCEED TO NEXT STEPS IF THE REMOTE IS A GITHUB URL97981. 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.99100> [!CAUTION]101> UNDER NO CIRCUMSTANCES EVER CREATE ISSUES IN REPOSITORIES THAT DO NOT MATCH THE REMOTE URL102103## Post-Execution Checks104105**Check for extension hooks (after tasks-to-issues conversion)**:106Check if `.kiss/extensions.yml` exists in the project root.107108- If it exists, read it and look for entries under the `hooks.after_tasks-to-issues` key109- If the YAML cannot be parsed or is invalid, skip hook checking silently and continue normally110- Filter out hooks where `enabled` is explicitly `false`. Treat hooks without an `enabled` field as enabled by default.111- For each remaining hook, do **not** attempt to interpret or evaluate hook `condition` expressions:112 - If the hook has no `condition` field, or it is null/empty, treat the hook as executable113 - If the hook defines a non-empty `condition`, skip the hook and leave condition evaluation to the HookExecutor implementation114- For each executable hook, output the following based on its `optional` flag:115 - **Optional hook** (`optional: true`):116117 ```text118 ## Extension Hooks119120 **Optional Hook**: {extension}121 Command: `/{command}`122 Description: {description}123124 Prompt: {prompt}125 To execute: `/{command}`126 ```127128 - **Mandatory hook** (`optional: false`):129130 ```text131 ## Extension Hooks132133 **Automatic Hook**: {extension}134 Executing: `/{command}`135 EXECUTE_COMMAND: {command}136 ```137138- If no hooks are registered or `.kiss/extensions.yml` does not exist, skip silently139140## Inputs141142- **Tasks List** (`{context.current.tasks}`): current.tasks.143 - If set: Read the tasks file.144 - If null: Search {context.paths.tasks} for the most recent tasks.md.145 - If not provided: Error: tasks file is required. Run /kiss-taskify first.146147## Outputs148149- **GitHub Issues** (`GitHub repository`): github repository.150 - Behavior: Create GitHub issues for each task. Requires GitHub API access (mcp tool: github/github-mcp-server/issue_write).151 - Overwrite guarded by `{context.preferences.confirm_before_write}`.152153## Context Update154155After this skill completes successfully, update `.kiss/context.yml`:156157- Do not update context.yml (issue creation is external system sync)