Kyro Sprint Executor — Strict Sprint Execution
Execute the active Kyro sprint exclusively through the Kyro CLI. All state lives in sprint.json; every state write goes through a tool-owned verb. You never hand-edit Kyro-managed state — no exception exists.
Step 0 — Capability handshake (MANDATORY, once per session)
First, resolve {{KYRO_CLI}} if it hasn't been substituted. This token is normally replaced at install time by npx kyro-ai install/sync. Since this skill is explicitly designed for external hosts that may load it standalone (never having run that installer), the literal characters {{KYRO_CLI}} may still be present below — resolve once per session, before anything else: try kyro --version; if that exits 0, use bare kyro for the rest of this session. Else check whether ~/.agents/kyro/current/dist/cli.js exists and use node ~/.agents/kyro/current/dist/cli.js. Else Kyro's runtime is not installed on this machine — STOP, tell the user to run npx kyro-ai@latest install --scope workspace --init-workspace --yes once, then retry. This is not a license to hand-edit sprint.json or improvise — same rule as a missing verb below.
Run {{KYRO_CLI}} capabilities --json.
- If the command is unknown, or
record-evidence/review are absent from the list, the installed runtime is too old for this skill. ABORT: report {{KYRO_CLI}} --version output and ask the user to upgrade. There is NO manual fallback.
Step 1 — Route
Run {{KYRO_CLI}} context-pack --kyro-scope <scope> --json and obey nextAction:
| nextAction |
Do |
execute_task |
Step 2 (task loop) |
review_task |
Step 2, stage 5 (review the pending task) |
clarify |
STOP — resolve every [NEEDS CLARIFICATION: <gap>] with the user first; record-evidence/review refuse while markers remain (CLARIFICATION_REQUIRED) |
plan_sprint / close_sprint |
See Sprint close below for close_sprint; planning is not this skill's job — report and stop |
done |
Scope complete — report and stop |
Never infer routing from file presence. Never open the full sprint.json to route.
Step 2 — Task loop (repeat until routing leaves execute_task/review_task)
- Pack:
{{KYRO_CLI}} context-pack --kyro-scope <scope> --task --json — the task is self-contained (taskDescription, taskFiles, taskContext, taskAcceptanceCriteria, conventions). Respect depends_on.
- Implement: the smallest coherent change that satisfies the acceptance criteria, following the pack's conventions. Do not invent project patterns without justification.
- Validate, scoped to the touched area: run the checks the acceptance criteria imply (typecheck, lint, targeted tests, capped searches). Only tests for changed files; cap searches (
-l, -m N, | head, or a path).
- Record evidence (maker):
{{KYRO_CLI}} record-evidence <task-id> --kyro-scope <scope> --summary "..." --validation "<check>" [--validation ...] [--file <path> ...] [--notes "..."]
- No
--yes/--confirm here — those flags belong to review; passing them fails with INVALID_INPUT.
- After three failed correction rounds: rerun with
--status blocked, then stop and report — do not grind further.
- Review (checker):
- Pass:
{{KYRO_CLI}} review <task-id> --kyro-scope <scope> --verdict pass [--by <actor>] --yes
- Fail:
{{KYRO_CLI}} review <task-id> --kyro-scope <scope> --verdict fail --finding critical:"..." --yes
--dry-run and --yes are mutually exclusive.
- The CLI vetoes a pass on missing/malformed evidence, unchecked acceptance criteria, tampered timestamps, non-negotiable principle violations, or self-review policy (
CHECKER_FAILED, SELF_REVIEW_BLOCKED). A veto is a blocking finding: return to stage 2 and fix the cause. Never argue with, retry unchanged, or route around the checker.
- Re-run Step 1 to route to the next task. One task at a time — never run stages in parallel, never skip or reorder them.
Emergent work and debt
- Required work discovered mid-sprint:
{{KYRO_CLI}} add-emergent --title <t> --description <d> --acceptance <a> [--acceptance ...] --kyro-scope <scope> — the new task then enters the same task loop.
- Non-blocking issues:
{{KYRO_CLI}} debt add --title "..." --priority <critical|high|medium|low> --kyro-scope <scope>. Debt never disappears; only its status changes.
Rule registration
When the user asks to register, save, or remember a rule with Kyro, interpret it as a scope convention, never as a Markdown file:
- Resolve the active scope through
context-pack or scope list; do not invent a destination.
- Propose a specific actionable rule and appropriate tags.
- Ask whether the rule should also be persisted globally for every Kyro scope. If the user already said scope-only or global, do not ask again.
- Scope only:
{{KYRO_CLI}} rule add --rule "<rule>" --tag <tag> --kyro-scope <scope>.
- Scope + global: run the same command with
--global only after explicit confirmation. Kyro writes scope sprint.json.conventions[] and shared project.json.conventions[]; future context-pack calls inherit the global rule.
Never create RULES.md, rules.md, or another rule artifact. If rule is missing from capabilities, abort and request a runtime upgrade; never hand-edit Kyro state.
Sprint close (USER GATE)
When routing reports close_sprint:
- Verify completeness with
{{KYRO_CLI}} status full --kyro-scope <scope>: no pending tasks, no missing evidence or verdicts, no unresolved critical findings.
- Ask the user for explicit approval. Closing a sprint is a lifecycle gate — never proceed past it on your own.
- On approval:
{{KYRO_CLI}} close-sprint --kyro-scope <scope> --yes. Never null activeSprint by hand. Confirm the CLI reports a successful close.
Hard rules (non-negotiable)
- Never hand-edit
sprint.json, project.json, evidence, verdicts, conventions, or any Kyro-managed state.
- If any tool-owned verb fails as an unknown command, the runtime is too old: ABORT and report the version (Step 0). A missing verb is never a license to improvise.
- Never fabricate, backdate, or adjust
recordedAt/reviewedAt — the CLI stamps its own clocks and the checker vetoes tampering.
- On any CLI refusal (
INVALID_INPUT, CHECKER_FAILED, CLARIFICATION_REQUIRED, ...): read the Remedy: line and follow it exactly. Do not retry unchanged; do not route around it.
- Never close a partially completed sprint; never mark a task complete without tool-recorded evidence and a
pass verdict.
Final report
Per task: id, validations run and their results, evidence summary, final verdict, and correction rounds (if any). For the sprint: emergent tasks and debt added, close result, and explicit confirmation that every state write went through the CLI.
1---2name: kyro-sprint-executor3description: Manual-only. Strict end-to-end Kyro sprint execution: capability handshake, per-task context-pack → implement → validate → record-evidence → review, fail-closed on missing CLI verbs, user-approved sprint close. Invoke explicitly when executing a Kyro sprint outside the full forge workflow.4license: Apache-2.05---67# Kyro Sprint Executor — Strict Sprint Execution89Execute the active Kyro sprint exclusively through the Kyro CLI. All state lives in `sprint.json`; every state write goes through a tool-owned verb. You never hand-edit Kyro-managed state — no exception exists.1011## Step 0 — Capability handshake (MANDATORY, once per session)1213**First, resolve `{{KYRO_CLI}}` if it hasn't been substituted.** This token is normally replaced at install time by `npx kyro-ai install`/`sync`. Since this skill is explicitly designed for external hosts that may load it standalone (never having run that installer), the literal characters `{{KYRO_CLI}}` may still be present below — resolve once per session, before anything else: try `kyro --version`; if that exits 0, use bare `kyro` for the rest of this session. Else check whether `~/.agents/kyro/current/dist/cli.js` exists and use `node ~/.agents/kyro/current/dist/cli.js`. Else Kyro's runtime is not installed on this machine — STOP, tell the user to run `npx kyro-ai@latest install --scope workspace --init-workspace --yes` once, then retry. This is not a license to hand-edit `sprint.json` or improvise — same rule as a missing verb below.1415Run `{{KYRO_CLI}} capabilities --json`.1617- If the command is unknown, or `record-evidence`/`review` are absent from the list, the installed runtime is too old for this skill. **ABORT**: report `{{KYRO_CLI}} --version` output and ask the user to upgrade. There is NO manual fallback.1819## Step 1 — Route2021Run `{{KYRO_CLI}} context-pack --kyro-scope <scope> --json` and obey `nextAction`:2223| nextAction | Do |24|------------|----|25| `execute_task` | Step 2 (task loop) |26| `review_task` | Step 2, stage 5 (review the pending task) |27| `clarify` | STOP — resolve every `[NEEDS CLARIFICATION: <gap>]` with the user first; `record-evidence`/`review` refuse while markers remain (`CLARIFICATION_REQUIRED`) |28| `plan_sprint` / `close_sprint` | See Sprint close below for `close_sprint`; planning is not this skill's job — report and stop |29| `done` | Scope complete — report and stop |3031Never infer routing from file presence. Never open the full `sprint.json` to route.3233## Step 2 — Task loop (repeat until routing leaves `execute_task`/`review_task`)34351. **Pack**: `{{KYRO_CLI}} context-pack --kyro-scope <scope> --task --json` — the task is self-contained (`taskDescription`, `taskFiles`, `taskContext`, `taskAcceptanceCriteria`, `conventions`). Respect `depends_on`.362. **Implement**: the smallest coherent change that satisfies the acceptance criteria, following the pack's conventions. Do not invent project patterns without justification.373. **Validate**, scoped to the touched area: run the checks the acceptance criteria imply (typecheck, lint, targeted tests, capped searches). Only tests for changed files; cap searches (`-l`, `-m N`, `| head`, or a path).384. **Record evidence** (maker):39 `{{KYRO_CLI}} record-evidence <task-id> --kyro-scope <scope> --summary "..." --validation "<check>" [--validation ...] [--file <path> ...] [--notes "..."]`40 - **No `--yes`/`--confirm` here** — those flags belong to `review`; passing them fails with `INVALID_INPUT`.41 - After **three** failed correction rounds: rerun with `--status blocked`, then stop and report — do not grind further.425. **Review** (checker):43 - Pass: `{{KYRO_CLI}} review <task-id> --kyro-scope <scope> --verdict pass [--by <actor>] --yes`44 - Fail: `{{KYRO_CLI}} review <task-id> --kyro-scope <scope> --verdict fail --finding critical:"..." --yes`45 - `--dry-run` and `--yes` are mutually exclusive.46 - The CLI vetoes a pass on missing/malformed evidence, unchecked acceptance criteria, tampered timestamps, non-negotiable principle violations, or self-review policy (`CHECKER_FAILED`, `SELF_REVIEW_BLOCKED`). A veto is a blocking finding: return to stage 2 and fix the cause. Never argue with, retry unchanged, or route around the checker.476. Re-run Step 1 to route to the next task. One task at a time — never run stages in parallel, never skip or reorder them.4849## Emergent work and debt5051- Required work discovered mid-sprint: `{{KYRO_CLI}} add-emergent --title <t> --description <d> --acceptance <a> [--acceptance ...] --kyro-scope <scope>` — the new task then enters the same task loop.52- Non-blocking issues: `{{KYRO_CLI}} debt add --title "..." --priority <critical|high|medium|low> --kyro-scope <scope>`. Debt never disappears; only its status changes.5354## Rule registration5556When the user asks to register, save, or remember a rule **with Kyro**, interpret it as a scope convention, never as a Markdown file:57581. Resolve the active scope through `context-pack` or `scope list`; do not invent a destination.592. Propose a specific actionable rule and appropriate tags.603. Ask whether the rule should also be persisted globally for every Kyro scope. If the user already said scope-only or global, do not ask again.614. Scope only: `{{KYRO_CLI}} rule add --rule "<rule>" --tag <tag> --kyro-scope <scope>`.625. Scope + global: run the same command with `--global` only after explicit confirmation. Kyro writes scope `sprint.json.conventions[]` and shared `project.json.conventions[]`; future `context-pack` calls inherit the global rule.6364Never create `RULES.md`, `rules.md`, or another rule artifact. If `rule` is missing from `capabilities`, abort and request a runtime upgrade; never hand-edit Kyro state.6566## Sprint close (USER GATE)6768When routing reports `close_sprint`:69701. Verify completeness with `{{KYRO_CLI}} status full --kyro-scope <scope>`: no pending tasks, no missing evidence or verdicts, no unresolved critical findings.712. **Ask the user for explicit approval.** Closing a sprint is a lifecycle gate — never proceed past it on your own.723. On approval: `{{KYRO_CLI}} close-sprint --kyro-scope <scope> --yes`. Never null `activeSprint` by hand. Confirm the CLI reports a successful close.7374## Hard rules (non-negotiable)7576- Never hand-edit `sprint.json`, `project.json`, evidence, verdicts, conventions, or any Kyro-managed state.77- If any tool-owned verb fails as an unknown command, the runtime is too old: ABORT and report the version (Step 0). A missing verb is never a license to improvise.78- Never fabricate, backdate, or adjust `recordedAt`/`reviewedAt` — the CLI stamps its own clocks and the checker vetoes tampering.79- On any CLI refusal (`INVALID_INPUT`, `CHECKER_FAILED`, `CLARIFICATION_REQUIRED`, ...): read the `Remedy:` line and follow it exactly. Do not retry unchanged; do not route around it.80- Never close a partially completed sprint; never mark a task complete without tool-recorded evidence and a `pass` verdict.8182## Final report8384Per task: id, validations run and their results, evidence summary, final verdict, and correction rounds (if any). For the sprint: emergent tasks and debt added, close result, and explicit confirmation that every state write went through the CLI.