--- name: hitl-gates description: Agent Kit HITL contract, exact Ask questions labels, and numbered-list fallback as path 1. Use when running /start-project, /run-plan, /run-plan-all, /continue-plan, /git-prod, backlog CRUD, /hotfix, /qa, /plan-review-triage, install, or onboard, or when Ask questions is missing. Factory landing wraps /kit-staging and /kit-prod keep their own command-file Asks; they are not consumer default-path inventory. Invoke via the command's own link; do not auto-load. version: 0.1.3 category: core disable-model-invocation: true --- # HITL gates Kit-wide human-in-the-loop. Commands stay Goal + five hard stops + Ask labels + a link here. Per-command procedures, one hop each: [run-plan-tick-contract.md](./run-plan-tick-contract.md), [start-project-intake.md](./start-project-intake.md), [run-plan-all-queue.md](./run-plan-all-queue.md), [pending-ticket.md](./pending-ticket.md); `/continue-plan` is inline in its own command file (`procedures.md` is a redirect stub only). Always-applied short rule: `.cursor/rules/hitl-ask-questions.mdc`. ## Contract 1. Any confirmation, choice, or clarification before acting uses **Ask questions** (`AskQuestion` / ACP `cursor/ask_question`). Do not ask the user to type yes. 2. Prefer one question at a time. 3. Options are concrete labels (tables below). Do not invent a fake tool call. 4. **Numbered-list fallback is path 1** when the tool is not in the session toolset. Say the tool is missing once, print one `HITL_GATE: | ` line and the same labels as a numbered list (block below), accept number or label, and treat a typed answer as Other. Do not invent a fake tool call. Tip: switch to a model that exposes Ask questions for the clickable UI. Matrix: `.cursor/memory/decisions/2026-07-20_ask-questions-model-availability.md`. 5. Skipped or cancelled answers mean **stop** (same as no yes). 6. Do not fabricate HITL in HANDOFF. Parked / approved / deferred / confirmed / stopped-by-operator need Ask id, operator reply, or `agent-inferred`. In a headless run the operator reply arrives as a `HITL_REPLY: | operator reply |