{"id":"5bf87320-5d47-47d6-8185-3ab83911911f","entityType":"agent","slug":"clawhub-drumrobot-next","name":"next","canonicalUrl":"https://www.xpersona.co/agent/clawhub-drumrobot-next","canonicalPath":"/agent/clawhub-drumrobot-next","generatedAt":"2026-10-09T17:10:00.809Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-09T11:35:52.323Z","emptyReason":null},"description":"Suggest next actions after completing any task. Auto-invocation via Stop hook + UserPromptSubmit reactive backstop, owned by the `next-invocation-guard` plugin (local-only, ported from `resources/next-trigger.sh` + `resources/next-reactive-guard.sh`). Fires when assistant response contains completion keywords (locale patterns in `data/*.regex`). stall-detect - detect stalled follow-up steps and invoke /fix [stall-detect.md], ask-gates - recording-skip / decision-deferral forced-ask / TaskList primary-source / current-work confirmation gates [ask-gates.md], suggestion-patterns - per-context \"After X\" next-action option templates [suggestion-patterns.md]. Use when \"next action\", \"what next\", \"stall\", \"stuck\", \"not progressing\", \"follow-up missing\" is mentioned.","descriptionLabel":"Source description","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 2.8K downloads reported by the source. Last updated 10/9/2026.","installCommand":"clawhub skill install s17ay1v6v88r2m102pvvc44gz183qcrm:next","sourceUrl":"https://clawhub.ai/drumrobot/next","homepage":"https://clawhub.ai/drumrobot/skills/next","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/drumrobot/next","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/drumrobot/skills/next","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":69,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"next technical dossier on Xpersona with agent coverage, OPENCLEW support, and live trust metadata."},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-09T11:35:52.323Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-09T11:35:52.323Z","emptyReason":null},"stars":null,"forks":null,"downloads":2775,"packageName":null,"latestVersion":"0.11.0","tractionLabel":"2.8K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-09T11:35:52.323Z","emptyReason":null},"lastUpdatedAt":"2026-10-09T11:35:52.323Z","lastCrawledAt":"2026-10-09T11:35:52.323Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-10T11:35:52.323Z","lastVerifiedAt":null,"highlights":[{"version":"0.11.0","createdAt":"2026-09-30T14:21:12.862Z","changelog":"next 0.11.0 - Removed the outdated skill-card.md file. - Updated documentation in CHANGELOG.md, SKILL.md, ask-gates.md, and suggestion-patterns.md. - Clarified topic dispatch and dependency-gated behaviors in SKILL.md. - No changes to core logic or functionality; documentation and organizational improvements only.","fileCount":10,"zipByteSize":77333},{"version":"0.10.2","createdAt":"2026-09-24T14:19:40.266Z","changelog":"next 0.10.2 - Expanded \"ask-gates\" step coverage in documentation to include step 0.45 and invocation-argument priority. - Updated examples and tables in SKILL.md to match recent behavior. - Removed outdated file: skill-card.md. - General doc and topic table maintenance.","fileCount":10,"zipByteSize":69778},{"version":"0.10.1","createdAt":"2026-09-18T15:53:26.792Z","changelog":"next v0.10.1 - Removed the skill-card.md file. - Updated CHANGELOG.md. - No changes to core functionality or user-facing behavior.","fileCount":10,"zipByteSize":67893},{"version":"0.10.0","createdAt":"2026-09-06T10:31:21.997Z","changelog":"next v0.10.0 - Removed: Obsolete skill-card.md file deleted. - Changed: Updated CHANGELOG.md with latest changes and version history. - No functional or logic changes in the core skill files.","fileCount":10,"zipByteSize":67602},{"version":"0.9.2","createdAt":"2026-09-01T22:37:51.755Z","changelog":"next 0.9.2 - Documentation updated: revised and expanded SKILL.md, clarifying usage rules, gate behaviors, and internal procedure step handling. - Removed unnecessary skill-card.md file. - No changes to core functionality; this release focuses on clearer guidance and refactoring documentation.","fileCount":10,"zipByteSize":67613},{"version":"0.9.1","createdAt":"2026-08-26T17:25:51.543Z","changelog":"next 0.9.1 - Added resources/next-reactive-guard.sh and resources/next-trigger.sh for auto-invocation/trigger support. - Updated documentation in SKILL.md for dependency-gated behaviors, usage, and internal procedure handling. - Clarified step order and task registration rules in Antigravity environments. - Improved explanation and detailing of when to suggest next actions and how to handle backing skill dependencies. - Removed obsolete skill-card.md. - Expanded guidance in ask-gates.md and suggestion-patterns.md.","fileCount":10,"zipByteSize":67209},{"version":"0.9.0","createdAt":"2026-08-21T05:40:57.829Z","changelog":"next v0.9.0 - Updated documentation and instruction logic in SKILL.md for next-action suggestion flow. - Clarified gating rules for dependency-based behaviors (session-cleanup, fix_plan/checklist). - Defined stricter rules on when to skip or apply certain follow-up options based on environment and skill availability. - Streamlined step ordering guidance in complex environments (Antigravity, Claude Code). - Removed obsolete file: skill-card.md.","fileCount":8,"zipByteSize":56805},{"version":"0.8.1","createdAt":"2026-08-18T05:41:48.011Z","changelog":"next 0.8.1 - Updated suggestion-patterns.md with revised templates and guidance. - Improved and expanded CHANGELOG.md to document recent changes. - Removed skill-card.md for clarity and maintainability. - No user-facing behavior changes; documentation only.","fileCount":8,"zipByteSize":54052}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s17ay1v6v88r2m102pvvc44gz183qcrm:next","setupComplexity":"low","setupSteps":["Install using `clawhub skill install s17ay1v6v88r2m102pvvc44gz183qcrm:next` in an isolated environment before connecting it to live workloads.","No published capability contract is available yet, so validate auth and request/response behavior manually.","Review the upstream CLAWHUB listing at https://clawhub.ai/drumrobot/next before using production credentials."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-drumrobot-next/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-drumrobot-next/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-drumrobot-next/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-drumrobot-next/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-drumrobot-next/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-drumrobot-next/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-09T17:10:00.805Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-drumrobot-next/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-drumrobot-next/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-drumrobot-next/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-drumrobot-next/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-09T11:35:52.323Z","emptyReason":null},"readme":"Skill: next\n\nOwner: drumrobot\n\nSummary: Suggest next actions after completing any task. Auto-invocation via Stop hook + UserPromptSubmit reactive backstop, owned by the `next-invocation-guard` plugin (local-only, ported from `resources/next-trigger.sh` + `resources/next-reactive-guard.sh`). Fires when assistant response contains completion keywords (locale patterns in `data/*.regex`). stall-detect - detect stalled follow-up steps and invoke /fix [stall-detect.md], ask-gates - recording-skip / decision-deferral forced-ask / TaskList primary-source / current-work confirmation gates [ask-gates.md], suggestion-patterns - per-context \"After X\" next-action option templates [suggestion-patterns.md]. Use when \"next action\", \"what next\", \"stall\", \"stuck\", \"not progressing\", \"follow-up missing\" is mentioned.\n\nTags: latest:0.11.0\n\nVersion history:\n\nv0.11.0 | 2026-09-30T14:21:12.862Z | auto\n\nnext 0.11.0\n\n- Removed the outdated skill-card.md file.\n- Updated documentation in CHANGELOG.md, SKILL.md, ask-gates.md, and suggestion-patterns.md.\n- Clarified topic dispatch and dependency-gated behaviors in SKILL.md.\n- No changes to core logic or functionality; documentation and organizational improvements only.\n\nv0.10.2 | 2026-09-24T14:19:40.266Z | auto\n\nnext 0.10.2\n\n- Expanded \"ask-gates\" step coverage in documentation to include step 0.45 and invocation-argument priority.\n- Updated examples and tables in SKILL.md to match recent behavior.\n- Removed outdated file: skill-card.md.\n- General doc and topic table maintenance.\n\nv0.10.1 | 2026-09-18T15:53:26.792Z | auto\n\nnext v0.10.1\n\n- Removed the skill-card.md file.\n- Updated CHANGELOG.md.\n- No changes to core functionality or user-facing behavior.\n\nv0.10.0 | 2026-09-06T10:31:21.997Z | auto\n\nnext v0.10.0\n\n- Removed: Obsolete skill-card.md file deleted.\n- Changed: Updated CHANGELOG.md with latest changes and version history.\n- No functional or logic changes in the core skill files.\n\nv0.9.2 | 2026-09-01T22:37:51.755Z | auto\n\nnext 0.9.2\n\n- Documentation updated: revised and expanded SKILL.md, clarifying usage rules, gate behaviors, and internal procedure step handling.\n- Removed unnecessary skill-card.md file.\n- No changes to core functionality; this release focuses on clearer guidance and refactoring documentation.\n\nv0.9.1 | 2026-08-26T17:25:51.543Z | auto\n\nnext 0.9.1\n\n- Added resources/next-reactive-guard.sh and resources/next-trigger.sh for auto-invocation/trigger support.\n- Updated documentation in SKILL.md for dependency-gated behaviors, usage, and internal procedure handling.\n- Clarified step order and task registration rules in Antigravity environments.\n- Improved explanation and detailing of when to suggest next actions and how to handle backing skill dependencies.\n- Removed obsolete skill-card.md.\n- Expanded guidance in ask-gates.md and suggestion-patterns.md.\n\nv0.9.0 | 2026-08-21T05:40:57.829Z | auto\n\nnext v0.9.0\n\n- Updated documentation and instruction logic in SKILL.md for next-action suggestion flow.\n- Clarified gating rules for dependency-based behaviors (session-cleanup, fix_plan/checklist).\n- Defined stricter rules on when to skip or apply certain follow-up options based on environment and skill availability.\n- Streamlined step ordering guidance in complex environments (Antigravity, Claude Code).\n- Removed obsolete file: skill-card.md.\n\nv0.8.1 | 2026-08-18T05:41:48.011Z | auto\n\nnext 0.8.1\n\n- Updated suggestion-patterns.md with revised templates and guidance.\n- Improved and expanded CHANGELOG.md to document recent changes.\n- Removed skill-card.md for clarity and maintainability.\n- No user-facing behavior changes; documentation only.\n\nv0.8.0 | 2026-08-17T12:07:05.313Z | auto\n\nVersion 0.8.0\n\n- Added explicit dependency on `hook-kit` in skill metadata.\n- Removed redundant or outdated file: `skill-card.md`.\n- Updated documentation for more precise step ordering, especially in Antigravity environments.\n- No functional changes to core logic; improvements focus on clarity and maintenance of gating behaviors and instructions.\n\nv0.7.3 | 2026-08-13T07:00:06.399Z | auto\n\nnext v0.7.3\n\n- Internal documentation updates: revised and updated content in CHANGELOG.md and ask-gates.md to improve accuracy and clarity.\n- Removed obsolete skill-card.md file. \n- No code or behavioral changes—release focuses solely on documentation cleanup and maintenance.\n\nv0.7.2 | 2026-08-09T14:11:17.963Z | auto\n\nnext 0.7.2\n\n- Removed the obsolete skill-card.md file.\n- Updated documentation: revised SKILL.md and related guides for clarity and accuracy.\n- No functional logic changes; all updates are documentation or file structure related.\n\nv0.7.1 | 2026-08-06T09:21:40.392Z | auto\n\nnext v0.7.1\n\n- Migrated trigger mechanism from shell scripts to the local-only `next-invocation-guard` plugin for Stop hook and UserPromptSubmit event support.\n- Removed shell-based auto-invocation scripts (`next-trigger.sh`, `next-reactive-guard.sh`) and the legacy skill card.\n- Formalized dependency-gated behaviors: \"session-cleanup\" and \"fix_plan/checklist\" actions are now strictly conditional on the presence of those backing skills.\n- Updated documentation to clarify when to apply or skip next-action gates and cleanup suggestions, ensuring no dead recommendations in environments without required skills.\n\nv0.7.0 | 2026-07-28T23:09:39.962Z | auto\n\nVersion 0.7.0\n\n- Added Antigravity (Gemini) environment detection and explicit context usage display; includes context-warning option prioritization when usage exceeds thresholds.\n- Introduced audit-first approach: always print audit text for `/next` (never register internal skill steps as user tasks), clarifying task registration boundaries.\n- Manual auto-invocation of next-action suggestions is now forbidden unless Stop hooks are present or explicitly requested, especially after `/fix`.\n- Added new script: `resources/next-reactive-guard.sh` for enhanced environment handling.\n- Updated instructions for step ordering in Antigravity, separating \"environment check\" from \"internal audit\" for clarity and correctness.\n- Improved documentation: clarified user, environment, and context-handling rules; removed obsolete `skill-card.md`.\n\nv0.6.0 | 2026-07-23T13:39:26.676Z | auto\n\nnext v0.6.0\n\n- Added explicit `triggers` field in SKILL.md for Stop event with script invocation\n- Updated SKILL.md to document the Stop trigger and clarify event-driven next-action suggestions\n- Removed obsolete `skill-card.md` file\n- Documentation cleanup and alignment in SKILL.md and other guides\n- No changes to core logic; focused on event handling and metadata improvements\n\nv0.5.1 | 2026-07-19T05:38:57.138Z | auto\n\n- Removed obsolete skill-card.md file.\n- Updated CHANGELOG.md, ask-gates.md, and suggestion-patterns.md.\n- No user-facing feature changes; primarily documentation and housekeeping updates.\n- Maintains existing behavior for suggesting next actions after task completion.\n\nv0.5.0 | 2026-07-08T14:27:35.573Z | auto\n\n## next v0.5.0\n\n- Expanded and updated suggestion-patterns.md with additional \"After X\" next-action templates.\n- Improved guidance on reading suggestion-patterns.md before composing options (HARD STOPs/refusals if skipped).\n- Clarified and enforced self-check steps for option diversity and candidate discovery (now eight sources).\n- No structural or behavioral changes to the SKILL.md instructions.\n- Documentation clarity improved for multi-topic reading and action option population.\n\nv0.4.4 | 2026-07-04T07:20:44.340Z | auto\n\nnext 0.4.4\n\n- Updated suggestion-patterns.md with improvements or corrections.\n- Minor clarifications and edits to documentation in CHANGELOG.md.\n- No logic or feature changes; documentation only.\n\nv0.4.3 | 2026-07-02T01:41:02.140Z | auto\n\nnext v0.4.3\n\n- Documentation updates in SKILL.md, suggestion-patterns.md, and CHANGELOG.md for clarity and current usage.\n- Obsolete file skill-card.md removed.\n- No changes to core logic or features; update is doc/maintenance only.\n\nv0.4.2 | 2026-06-19T23:10:44.122Z | auto\n\nVersion 0.4.2\n\n- Enforced a HARD STOP: now requires reading suggestion-patterns.md before composing next action options.\n- Expanded candidate discovery sources and option diversity requirements when suggesting next actions.\n- Updated instructions to always enumerate all candidate sources and fill all 4 AskUserQuestion option slots if possible.\n- Added self-checklist to ensure diversity and coverage of suggestion options.\n- Removed the skill-card.md file.\n\nv0.4.1 | 2026-06-13T10:09:01.034Z | auto\n\nnext 0.4.1\n\n- Modularized core logic into new topic files: ask-gates.md and suggestion-patterns.md\n- Moved \"ask gates\" (recording/management skip, TaskList primary-source, forced-ask, user current-work confirm) to ask-gates.md; slimmed SKILL.md instructions with explicit references\n- Added suggestion-patterns.md for per-context next-action option templates, referenced in SKILL.md\n- Removed obsolete skill-card.md; updated Topics list and invocation rules\n- Clarified topic dispatch: when invoked with a topic, only that topic file is consulted—no summary or other topic info returned\n- Improved instructions for multi-selection flows and per-step gate hard stops\n\nv0.4.0 | 2026-06-12T15:36:37.624Z | auto\n\nVersion 0.4.0\n\n- Updated documentation in SKILL.md and CHANGELOG.md to reflect latest procedures and decision gates.\n- Removed obsolete skill-card.md file.\n- No changes to functionality; documentation and guidance clarified for next-action suggestion, particularly around task recording/management skip logic, TaskList use, and ambiguous user action confirmation.\n\nv0.3.0 | 2026-06-03T12:13:01.289Z | auto\n\nVersion 0.3.0\n\n- Auto-invocation now works: Stop hook (`resources/next-trigger.sh`) fires on completion keywords via JSON `decision:\"block\"`, fixing previous stdout routing issue.\n- Step 0.3 \"skip\" logic added: Next action ask is skipped for simple recording/management tasks (e.g. fix-plan, archive, todo add), preventing unwanted option prompts.\n- Documentation updates: SKILL.md reflects new auto-invocation, expanded instructions, and clarifies mandatory skip/self-check steps.\n- Added: CHANGELOG.md and LICENSE files for better version tracking and licensing.\n- Removed: skill-card.md, streamlining documentation structure.\n\nv0.1.1 | 2026-05-17T16:36:24.115Z | user\n\nTaskList primary-source check (Step 0.5) + Stop hook fallback note + data-architecture locale patterns\n\nv0.1.0 | 2026-04-22T13:44:39.047Z | user\n\nInitial release: next action suggester with stall detection\n\nArchive index:\n\nArchive v0.11.0: 10 files, 77333 bytes\n\nFiles: ask-gates.md (74195b), CHANGELOG.md (20161b), LICENSE (1063b), resources/next-reactive-guard.sh (7021b), resources/next-trigger.sh (9720b), skill-card.md (1872b), SKILL.md (27790b), stall-detect.md (2545b), suggestion-patterns.md (60538b), _meta.json (124b)\n\nFile v0.11.0:SKILL.md\n\n---\nmetadata:\n  author: es6kr\n  version: \"0.1.1\"\nname: next\ndepends-on:\n  - fix\n  - hook-kit\ndescription: |\n  Suggest next actions after completing any task. Auto-invocation via Stop hook + UserPromptSubmit reactive backstop, owned by the `next-invocation-guard` plugin (local-only, ported from `resources/next-trigger.sh` + `resources/next-reactive-guard.sh`). Fires when assistant response contains completion keywords (locale patterns in `data/*.regex`).\n  stall-detect - detect stalled follow-up steps and invoke /fix [stall-detect.md], ask-gates - recording-skip / decision-deferral forced-ask / TaskList primary-source / current-work confirmation gates [ask-gates.md], suggestion-patterns - per-context \"After X\" next-action option templates [suggestion-patterns.md].\n  Use when \"next action\", \"what next\", \"stall\", \"stuck\", \"not progressing\", \"follow-up missing\" is mentioned.\n---\n\n# Next Action Suggester\n\n## Topic Dispatch\n\n**When this skill is invoked with a topic specifier (e.g., `/next suggestion-patterns` or `Skill(\"next\", \"suggestion-patterns\")`), load and follow only the matching topic file. Do not echo the Topics table or summarize other topics in the response.** The Topics table below is an index — for a normal invocation, follow the Instructions and Read each topic when you reach the step that references it.\n\n## Topics\n\n| Topic | Description | Guide |\n|-------|-------------|-------|\n| stall-detect | Detect stalled follow-up steps and invoke /fix | [stall-detect.md](./stall-detect.md) |\n| ask-gates | Step 0.3/0.4/0.45/0.5/0.7 ask gates: recording-skip, decision-deferral forced-ask, invocation-argument priority, TaskList primary-source, current-work confirmation | [ask-gates.md](./ask-gates.md) |\n| suggestion-patterns | Per-context \"After X\" next-action option templates | [suggestion-patterns.md](./suggestion-patterns.md) |\n\nAfter task completion, use `AskUserQuestion` to suggest next steps and get user selection.\n\n## When to use\n\nUse `next` skill in the following scenarios:\n- **Explicit invocation**: When the user explicitly calls `/next` or requests next actions (\"what next\", \"next action\").\n  - **User Analysis Request Priority (HARD STOP)**: When `/next` is invoked alongside a specific request to analyze an issue or cause (e.g. `/next/fix analyze why next wasn't called`), perform the 5-Why analysis and present the investigation report **FIRST thing** before presenting any `AskUserQuestion` options.\n- **Automatic trigger (in supported environments)**: In environments with Stop-hook support (`resources/next-trigger.sh`), auto-triggers on completion keywords.\n- **Manual auto-invocation prohibition (HARD STOP)**: In environments without active Stop hooks (or after completing recording/fix tasks), do NOT manually append `next` options unless explicitly requested by the user or required by `ask-gates.md`. Specifically after `/fix` execution, do NOT automatically invoke `next` unless `/next` was explicitly requested in the user prompt.\n\nAfter task completion, use `AskUserQuestion` to suggest next steps and get user selection.\n\n## Dependency-gated behaviors (conditional on skill availability)\n\nTwo of this skill's behaviors are **mandatory only when their backing skill exists in the current environment**, and must be **skipped entirely when it does not**. Detect availability from the session's available-skills list (the environment's skill registry / available-skills reminder) — never assume a skill is present.\n\n| Behavior | Backing skill | When AVAILABLE | When ABSENT |\n|----------|---------------|----------------|-------------|\n| Context-usage check + session-cleanup / wrap-up recommendation (context-usage gate, cleanup option, retrospective) | a session-cleanup skill | Apply the context-usage gate and offer the cleanup / wrap-up option per its threshold rules | **Skip** — do not measure context usage, do not offer any cleanup / wrap-up option |\n| fix_plan.md / checklist.md change verification during candidate discovery | a fix_plan / checklist skill | **Mandatory** — read the workspace tracker for changed / pending items BEFORE composing options (elevated from optional source to required check) | Treat the tracker as an ordinary optional file; no mandatory read |\n\n**Why**: a next-action ask must not reference or recommend a skill the environment lacks (dead recommendation); conversely, when a fix_plan / checklist skill IS present its tracker is the authoritative source of pending work, and skipping it silently drops real candidates.\n\n| # | Don't | Do |\n|---|-------|-----|\n| 1 | Offer a cleanup / wrap-up / retrospective option (or run the context-usage gate) in an environment with no session-cleanup skill | Gate both on session-cleanup availability — absent ⇒ omit entirely |\n| 2 | Treat fix_plan.md / checklist.md as merely one optional source when a fix_plan / checklist skill is available | Available ⇒ reading the tracker for changes is mandatory before composing options |\n| 3 | Assume the backing skill exists because \"it usually does\" | Check the session's available-skills list each time before applying the gated behavior |\n\n**Self-check (before composing any next-action ask)**:\n1. Is a session-cleanup skill available? → No: skip the context-usage gate + omit cleanup / wrap-up options. Yes: apply them.\n2. Is a fix_plan / checklist skill available? → Yes: reading the workspace tracker for changes is MANDATORY before composing options. No: skip.\n\n## Instructions\n\n### Step ordering in Antigravity (resolves the two \"runs first\" steps below — HARD STOP)\n\nStep 0-0 and Step 0-1 below each describe themselves as running \"first\" — that is only a conflict in Antigravity, where both apply (in Claude Code, Step 0-1 doesn't apply at all, so Step 0-0 is simply first). **In Antigravity, run Step 0-1's environment detection + context-usage gate before Step 0-0's audit** — Step 0-0's own \"Environment note\" branches on whether the session is in Antigravity, so that fact must already be known before Step 0-0's text is composed. Step 0-0's \"first action upon entering `/next`\" phrasing means first among the *user-facing/task-registration* steps (i.e., before any `AskUserQuestion` or task work), not literally the first line of code executed — Step 0-1's lightweight environment probe precedes it.\n\n### Step 0-0: Audit first (text), register only real work (HARD STOP)\n\n**Do NOT register the `next` skill's own internal procedure steps (audit / context-check / gates / option-composition) as tasks.** They are one-turn skill mechanics; registering them in the user-facing task list pollutes it with meta-tasks that create-and-complete within a single turn — which directly contradicts TaskCreate's own guidance (\"skip for trivial / 1-turn work\"). Task registration happens later, at **Step 3**, and only for the **actual follow-up work the user selects** (2+ selected → TaskCreate each; 1 selected → execute directly).\n\n**What Step 0-0 still requires — a visible-text audit, NOT a task**: on an explicit `/next` call, before composing options, print the audit in visible text — why the auto-trigger missed (if it did) and a short session-state check. Emitting it as prose satisfies the requirement; do NOT substitute a `[x]`-marked task for the visible analysis, and do NOT skip it.\n\n**Exception — substantial discovery gets one lightweight tracking task (HARD STOP)**: the \"no task registration\" rule above assumes discovery resolves in a single quick call (e.g., one `TaskList` read). When candidate discovery itself grows beyond that — 3+ tool calls, or spanning 2+ distinct sources (`TaskList` + `fix_plan.md` + `gh pr`/`issue` search, etc.) — register **exactly one** lightweight tracking task for the whole discovery phase (e.g., \"next: composing candidate options\") before making the first discovery call, so the user retains visibility into in-flight work and can interrupt cleanly. Mark it completed the moment `AskUserQuestion` is composed. This does not reopen the meta-task-pollution problem: it is still one task for the entire phase, not one per source, and it is pruned immediately.\n\n**Self-candidacy exclusion (HARD STOP)**: capture this tracking task's own ID at registration time. Since candidate discovery treats pending/in-progress `TaskList` entries as candidates, this task — while pending/in-progress during its own discovery phase — would otherwise appear as a user-selectable follow-up option. Exclude the captured ID from candidate enumeration explicitly, then mark it completed once `AskUserQuestion` is composed.\n\n| # | Don't | Do |\n|---|-------|-----|\n| 1 | Run `TaskList` + a `fix_plan.md` read + multiple `gh` searches across several tool calls with zero task tracking, leaving the user unable to see what discovery is in flight | Register one lightweight tracking task before the first discovery call when 3+ tool calls or 2+ sources are anticipated; mark it completed once options are composed |\n| 2 | Apply the \"no task registration\" rule uniformly regardless of how many tool calls discovery actually takes | Trivial discovery (single `TaskList` call) → no task, per the base rule above. Substantial discovery (3+ calls / 2+ sources) → one tracking task |\n\n**Environment note**: In Antigravity (Gemini), the `task.md` artifact doubles as the progress-display medium, so a lightweight `task.md` checklist there is acceptable. In Claude Code, `TaskList`/`TaskCreate` is a user-work medium — keep internal procedure steps out of it (narrate them in text) and reserve `TaskCreate` for Step 3's selected work.\n\n### Step 0-1: Antigravity Session Check & Context Usage Gate (MANDATORY in Antigravity — runs before Step 0-0 in that environment, see \"Step ordering\" above)\n\nAntigravity offers limited backend hooks, so environment detection and session context size evaluation must be performed before Step 0-0's audit text is composed.\n\n**Dependency precondition (HARD STOP)**: the context-usage measurement and cleanup recommendation in this step apply only when a session-cleanup skill is available in the environment (see \"Dependency-gated behaviors\"). If none is available, skip this gate entirely — do not measure context usage or set a cleanup option.\n\n1. **Detect Environment**: Check if running in Antigravity / Gemini environment (`$env:ANTIGRAVITY_AGENT` or `transcript.jsonl` log path presence).\n2. **Evaluate Context Usage (MANDATORY Physical Measurement HARD STOP)**: Check the size of `transcript.jsonl` in the conversation log directory via physical shell measurement (e.g. `powershell -Command \"Get-Item <log-dir>\\transcript.jsonl | Select-Object Length\"`). In Antigravity (Gemini 1M capacity), compute context usage empirically: `tokens = 65,000 + ([math]::Round(transcript_bytes / 3.5))` and `pct = [math]::Round(($tokens / 1,000,000) * 100, 1)`. **Never invent, estimate, or hardcode example numbers from previous turns or memory.**\n3. **Explicit Usage Display**: In the `AskUserQuestion` question text, **always explicitly state the physically measured context usage percentage and token count** (e.g. `[Context Usage: Physical Measured ~XX.X% (~YYK tokens based on ZZKB transcript.jsonl)]`). Never claim exact precision without physical file measurement.\n4. **Antigravity Hook Manifest Verification (HARD STOP)**: In Antigravity environment, verify if `~/.agents/hooks.json` or active plugin hooks exist. If Antigravity hooks manifest is missing or inactive, audit the gap in prose before option generation.\n5. **Threshold Gate**: If context usage >= 40% in Antigravity (or script emits CONTEXT_WARN), **set `(Recommended) Session cleanup and retrospective (/cleanup)` as the #1 option** to prevent context degradation.\n\n### Step 0: Stall Detection (mandatory)\n\nBefore suggesting next actions, run the [stall-detect](./stall-detect.md) topic.\n\nIf stall detected → topic invokes `/fix`. If no stall → proceed to Step 0.3.\n\n### Step 0.3–0.7: Ask gates (HARD STOP)\n\nBefore composing any next-action ask, pass five gates: **0.3** skip the ask entirely for recording/management topics (fix-plan, archive, todo, session rename); **0.4** if the completion report defers a decision to the user as prose (\"let me know and I'll …\", \"whether to commit/PR is up to you\"), that deferral is a decision axis — **force** an `AskUserQuestion` instead of ending on the text; **0.45** if `/next` was invoked with an explicit file/target argument, read it first and adopt its explicit follow-up candidates as top priority — TaskList/fix_plan.md sweeps run only as a supplementary check afterward, never as the default starting point; **0.5** call `TaskList` as the primary source for option accuracy (never quote tasks from stale summary memory); **0.7** when the user's current activity is unclear (2+ in_progress tasks, ambiguous scope, handed-off manual work), ask \"what are you working on / waiting on\" first — separate \"in progress\" from \"waiting on\", and prefer free-text via Other over guess options.\n\n**Read [ask-gates.md](./ask-gates.md) before composing options** — it holds the skip-target topic list, the TaskList primary-source Don't/Do, the current-work confirmation triggers, and the in-progress-vs-waiting-on examples. If Step 0.3 marks the work skip-target → report only, no ask; otherwise proceed to Step 1.\n\n\n### Step 1: Identify completed task type\n\nIdentify the type of task just completed.\n\n### Step 2: Use AskUserQuestion tool\n\n**HARD STOP — Read [suggestion-patterns.md](./suggestion-patterns.md) BEFORE composing options.** suggestion-patterns.md holds per-context \"After X\" option templates that include diversity sources (pending tasks, open PRs, dependency follow-ups, session wrap-up, etc.). Skipping this Read = ad-hoc option list = high risk of missing candidate sources. Step 2 entry without suggestion-patterns.md Read = skill bypass (skill-usage.md \"Multi-topic topic .md Read mandatory\" violation).\n\n#### Option diversity (HARD STOP)\n\n**Fill all 4 option slots whenever possible.** AskUserQuestion supports max 4 options + auto \"Other\" = 5 candidates total. Composing only 2-3 options when 4+ candidates exist = under-recommendation. The user typically phrases this as \"no more candidates?\" or \"any more suggestions?\".\n\n#### Candidate discovery sources (enumerate all before composing)\n\n| Source | What to look for |\n|--------|------------------|\n| **Skill invocation argument** (highest priority — see [ask-gates.md](./ask-gates.md) Step 0.45) | If `/next` was called with an explicit file/target argument (a prior session's walkthrough/report, a plan doc, a specific PR/issue), read it first. Its explicit \"Unresolved\"/\"Next session\" candidates or Progress Checklist items become the primary option set — TaskList/fix_plan.md become a supplementary \"anything missed?\" check, not the default starting sweep |\n| Visible TaskList | All pending/in_progress entries (call `TaskList` per Step 0.5) |\n| Just-completed work | Direct follow-ups (commit / push / verify / test / publish) |\n| Open PRs / issues | `gh pr list --search \"involves:@me state:open\"` / `gh issue list` (when relevant) — **In Antigravity, unapproved PRs must ONLY be offered as clawo delegation options (`[clawo] ... (/clawo consolidate PR #N)`), never as direct main-session tasks (HARD STOP)** |\n| Recent commits awaiting CI | `gh run list --limit 5` for pending CI watch |\n| fix_plan.md / checklist.md | Project-tracked next items (Ralph or general workspace) — **mandatory read when a fix_plan / checklist skill is available** (see \"Dependency-gated behaviors\"); otherwise an ordinary optional source |\n| Plane | Self-hosted project tracker, if this environment has one configured (check local infra docs for connection details) — check open issues/cycles when the project has one wired up |\n| Session wrap-up | **Only when a session-cleanup skill is available** (see \"Dependency-gated behaviors\"). `/cleanup` — gated: explicit user wrap-up signal OR injected context-usage at/above the **per-model** threshold (Fable/Mythos 55%, Opus 50%, others 45% — see suggestion-patterns.md \"Context-usage gate\") |\n| New external-system reference | Was a new tool/service integration just set up this turn (CLI install, credential file, API endpoint)? → \"Persist as durable reference\" candidate — domain skill first, project memory only if no skill owns the topic (see suggestion-patterns.md \"After configuration change\") |\n| Other (free text) | Auto-provided by AskUserQuestion |\n\n| # | Don't (forbidden) | Do (correct alternative) |\n|---|-------------------|------------------------|\n| 1 | Compose 2-3 options + end Step 2 | Enumerate sources above → fill 4 slots. Cap at 4 only if exhausted |\n| 2 | \"User can pick Other for anything else\" rationale for fewer options | Other is for unexpected branches. Explicit options surface options the user might not think of |\n| 3 | Skip Read of suggestion-patterns.md because \"I know the patterns\" | suggestion-patterns.md is updated with new \"After X\" templates regularly. Read every time |\n| 4 | Treat just-completed work as the only source | Each candidate discovery source row is a separate enumeration. Cover all rows before stopping |\n| 5 | `/next` receives an explicit file/target argument → proceed straight to a generic TaskList/fix_plan.md-wide sweep (e.g. dumping every `(P0)`/`(P1)` line across unrelated projects) without first reading the argument's own explicit candidates | Read the argument's target first (Step 0.45). Adopt its named follow-up candidates as top priority; run TaskList/fix_plan.md only to confirm nothing else was missed |\n| 6 | Fill a slot with a candidate whose promised effect is already satisfied (e.g. enabling a plugin whose member skills are already loaded via another channel — activation would only double-load) | Verify each newly-discovered candidate against current state (available-skills list, live config) before composing — already-satisfied = availability 0, exclude it. Deferring the check to the option description (\"verify duplicates after selecting\") is forbidden |\n\n#### Premise verification for stale/prior-session candidates (HARD STOP)\n\n**A candidate carried over from a pre-`/compact` summary or an old in-progress task is a *claim* (\"X is still unresolved\"), not a fact.** Composing it as an option restates that claim to the user as if current. Before presenting such a candidate, verify its premise is still true — check (a) fix_plan.md's `## Completed` section, (b) a RAG search if a store is registered, (c) Plane (see source row above), (d) when the fix_plan item's \"How to apply\" links a plan doc, that doc's own Progress Checklist — for evidence it was already resolved between sessions. This mirrors `/fix`'s own \"Recurrence pre-check\" (RAG + grep before concluding a pattern is still active) — the same discipline applied to `next`'s own candidate composition, not just to `/fix`.\n\n| # | Don't (forbidden) | Do (correct alternative) |\n|---|-------------------|------------------------|\n| 1 | Carry an \"still open\" item straight from a pre-compact summary into an option label | Re-check its current state (fix_plan Completed / RAG / Plane) before phrasing it as actionable |\n| 2 | Treat \"it was in_progress when the summary was written\" as proof it still is | in_progress in a stale summary is a snapshot, not current truth — verify, don't assume |\n| 3 | Skip verification because the investigation \"sounds involved\" | The verification itself (grep fix_plan, one RAG query, one Plane check) is cheaper than dispatching the user into a re-investigation of an already-solved problem |\n| 4 | Compose a decision ask from a fix_plan item's inline \"Why\"/summary text alone, when that item's \"How to apply\" points at a linked plan doc | Read the linked doc's own Progress Checklist / phase-completion state first — fix_plan's inline note can go stale relative to the doc's own tracked progress (e.g. a phase the fix_plan note calls undecided may already show complete in the plan doc) |\n| 5 | Treat a plan doc's own recorded \"decision\" (a numbered decision table, a \"Decisions\" section) as user-authorized just because it reads as settled | The doc's formatting doesn't distinguish a decision the user actually made (via an `AskUserQuestion` answer, an explicit chat instruction) from scope the assistant added while authoring the plan solo. Before resuming such a decision from a prior session, re-derive the original user ask (RAG search / session transcript), not the plan doc's own summary of it |\n\n#### Self-check (every time before calling AskUserQuestion)\n\n1. Did I Read `suggestion-patterns.md` this turn? → If no, Read first\n2. Did I enumerate all 9 candidate discovery sources? → If skipped any, revisit before composing\n2a. Was `/next` invoked with an explicit file/target argument? → If yes, did I read it and adopt its explicit candidates BEFORE running a TaskList/fix_plan.md sweep (see ask-gates.md Step 0.45)?\n3. Do I have 4 options or did I stop at 2-3? → If <4 and candidates remain, add until 4 or exhausted\n4. Are options diverse (different action types: progress task / external follow-up / wrap-up / verify)? → If all 3 are the same family, broaden\n5. Does the completed work carry ≥2 discrete findings the user must disposition? → Per-finding questions first (see suggestion-patterns.md \"After analysis / review producing multiple findings\"), never one option bundling all findings\n6. Does any candidate originate from a pre-compact summary or an old in-progress task rather than this turn's own discovery? → If yes, run the premise-verification check above before including it\n7. Does the candidate's fix_plan item reference a linked plan doc? → Read that doc's own Progress Checklist before composing the ask; do not rely solely on fix_plan's inline summary\n8. Dependency gates (see \"Dependency-gated behaviors\"): is a session-cleanup skill available? (No → omit any cleanup / wrap-up option AND skip the context-usage gate). Is a fix_plan / checklist skill available? (Yes → reading the workspace tracker for changes is mandatory before composing)\n\n```typescript\nAskUserQuestion({\n  questions: [{\n    question: \"What would you like to do next?\",\n    header: \"Next Action\",\n    multiSelect: true,\n    options: [\n      { label: \"Option 1\", description: \"Description\" },\n      { label: \"Option 2\", description: \"Description\" },\n      { label: \"Option 3\", description: \"Description\" },\n      { label: \"Option 4\", description: \"Description\" }\n    ]\n  }]\n})\n```\n\n### Step 3: Register and execute selected action(s)\n\n**If 2 or more actions are selected, register each via TaskCreate and execute sequentially.** If only 1 is selected, execute it directly. This is the **only** point where `/next` registers tasks — the skill's internal procedure steps (Step 0-0 audit, gates, option composition) are never registered; only the user-selected follow-up work is.\n\n**`TaskCreate`-unavailable fallback (HARD STOP — do not silently drop the selection)**: this is not a theoretical case here — options composed via [ask-gates.md](./ask-gates.md) Step 0.6 are, by that step's own trigger condition, sometimes composed in a turn where `TaskCreate`/`TaskList` is already known to be disconnected/unavailable. If `TaskCreate` fails or is unavailable when registering a 2+ selection, do NOT proceed as if registration succeeded and do NOT drop the unregistered items silently. Instead, register each unregistered selection as a `- [ ]` item in the active workspace's `fix_plan.md` (or `checklist.md`) `## Progress` section (or `## Hold` with `[BLOCKED] ... **trigger: Task tools reconnect**` if execution must also wait on the task tool, not just its tracking) — same fallback convention as `cleanup/run.md`'s \"RAG store failure\" TaskCreate-unavailable branch and `fix/SKILL.md`'s `claude-task` CLI fallback. State in the turn's report which items were written to `fix_plan.md` instead of `TaskCreate` and why.\n\n**Background dispatch does not end the turn (HARD STOP)**: delegating a selected action to a background agent (`Agent` spawn — background or mailbox-returning) hands control straight back — it is NOT a turn-ending event. Scan the remaining selected/pending tasks and drive the next independent one **in the same turn**; \"execute sequentially\" governs result-consumption order, not idle waiting. Idle-waiting for the agent is acceptable only when nothing else is drivable. Idling past ~5 minutes also expires the prompt cache (5-min TTL), so the completion wake-up re-reads full context uncached. When a forced idle would exceed that cache window, never arm one long silent watcher — use short cycles (`timeout` ≤ 240 s, end → notify → re-arm); multiSelect-unselected ask items count as deferred fill candidates for the idle window, not declined work. Enforced by the idle-wait Stop hook (`block-idle-wait-without-short-cycle.sh`). Same rule as wip/resume.md Step 3 (background-dispatch rows).\n\n**Decide foreground vs background BEFORE spawning, not after (HARD STOP)** — → claudify skill background-polling topic: a wakeup covers hang recovery, it does not license idling past the 5-minute prompt-cache TTL. Before every `Agent` spawn, check whether other selected/pending work this turn could run while the agent works.\n\n| # | Don't (forbidden) | Do (correct alternative) |\n|---|-------------------|------------------------|\n| 1 | Background a single-item follow-up (e.g. \"run Internal Review on this PR, then post the Summary\") with nothing else queued, then idle-wait for its own notification | Spawn it in the foreground (`run_in_background: false`, or the Agent tool's default synchronous behavior) — a lone item is a foreground case |\n| 2 | Background an agent because other selected/pending work exists this turn, then not actually drive that other work while it runs | Background it AND drive the other work in the same turn — backgrounding only pays off when something fills the wait |\n| 3 | Assume the idle wait is \"free\" because usage-overage state isn't known yet | Always plan for the shorter 5-minute cache window, not the overage window |\n\n#### Self-check (before every `Agent` spawn)\n\n1. Is there other selected/pending work this turn could drive while the agent runs? → No → foreground it (`run_in_background: false`)\n2. Yes → background it, and actually drive that other work in the same turn — do not idle-wait alone\n\n(See failed-attempts.md \"background-agent-without-parallel-work\" for recurrence history.)\n\n## Suggestion Patterns\n\nPer-context option templates for \"After X\" completions (code change, feature, bug fix, config, commit, push, PR fix-commit re-review, PR creation reviewer matrix, skill/agent creation, file creation, refactoring, complex workflow, exploration, session wrap-up, PR consolidate).\n\n**Read [suggestion-patterns.md](./suggestion-patterns.md)** for the matching context's option set before calling `AskUserQuestion`. Several patterns carry their own HARD STOP gates (re-review policy, Copilot availability, session wrap-up priority) — follow the pattern's gate, not a generic option list.\n\n## Rules\n\n1. **Always 2-4 options** - AskUserQuestion limitation\n2. **Be specific** - \"Run npm test\" instead of just \"Test\"\n3. **Context-based** - Adjust based on project/situation\n4. **Use multiSelect** - When multiple actions can be done together\n5. **Register then execute** - When 2+ options are selected, TaskCreate then run sequentially. If only 1, execute directly\n6. **State conditions when proposing merge** - When including PR merge in options, the description must show condition state in the form `CI:✅ Review:✅ TestPlan:x/y`. Actual merge runs only via the `/github-flow merge` skill — direct `gh pr merge` is forbidden\n\nFile v0.11.0:_meta.json\n\n{\n  \"ownerId\": \"kn74k8yfvftx6f062qa8fzyd8h8373jd\",\n  \"slug\": \"next\",\n  \"version\": \"0.11.0\",\n  \"publishedAt\": 1790778072862\n}\n\nFile v0.11.0:ask-gates.md\n\n# Ask Gates — recording-skip / TaskList primary-source / current-work confirmation\n\n> **Applies even when this file wasn't Read this turn (HARD STOP — recurrence, 3rd occurrence)**: a Stop hook (e.g. `next-invocation-guard`'s `next-trigger.sh`) can force an `AskUserQuestion` directly, without `Skill(\"next\")` ever being invoked — its block message reads narrowly as \"just call AskUserQuestion, nothing else.\" That narrow framing is not license to skip the cross-cutting rules that would normally apply via this file and `suggestion-patterns.md`. The PR/issue full-URL requirement (`suggestion-patterns.md` \"Cross-cutting rule — PR/issue references in options require the full URL\") applies to **every** `AskUserQuestion` that references a PR/issue number, regardless of entry path. Recurrence: `failed-attempts.md` \"ask-option-pr-ref-missing-url\" (3rd, 2026-08-22) — the 1st and 2nd occurrences both went through `Skill(\"next\")` with a skipped topic Read; the 3rd bypassed `Skill(\"next\")` entirely via a Stop-hook-forced direct ask, so a self-check that only fires *inside* the skill's own Step 2 never ran. Before calling `AskUserQuestion` from a Stop-hook directive, still check: does any option reference a PR/issue number? If yes, does each distinct number have its own full URL?\n\n## Step 0.3: Recording/management topic ask-skip gate (HARD STOP)\n\n**If the just-completed work is a \"simple recording/management topic\", skip the next-action ask entirely.** Stop hook auto-triggers next skill on every task completion, but recording-topic completion is not a user-decision branch point.\n\n### Default = ask. Skip = exception (closed list — HARD STOP)\n\n**The skip-target table below is a CLOSED list.** Any just-completed work that does not exactly match a row in the table = **ask is required** (proceed to Step 0.4+). Do not extrapolate skip justification to \"similar\" cases such as plan/research authoring, user-awaiting-reply states, or \"prior turn already asked\" rationales.\n\n| # | Don't (skip extrapolation — forbidden) | Do (closed-list discipline) |\n|---|------|------|\n| 1 | \"Plan/research/analysis authoring just completed → similar to recording → skip\" | Plan/research/analysis is **not** recording (it creates new decision axes: proceed / refine / hold). Ask required |\n| 2 | \"User is awaiting reply on a prior chat-text question → skip the next-action ask\" | Awaiting-reply on one axis ≠ no decision on the next-action axis. trade-off ask and next-action ask are **separate axes** — both required |\n| 3 | \"Re-asking would revert the user's prior Other selection → skip\" | Prior ask = topic-decision axis (e.g., PR tag). Next-action ask = progress-decision axis (proceed / refine / hold). Different axes, no revert |\n| 4 | \"Stop hook re-triggered next, but I already asked once this turn → skip\" | The just-completed work is the trigger condition, not \"have I asked in this turn\". If the work changed (new artifact, new state), ask again |\n| 5 | \"TaskList has just one item and it depends on user → no decision axis → skip\" | Even single-item TaskList has progress / refine / hold axes for the just-produced artifact. Ask the artifact-level decision |\n| 6 | \"User said 'stop working this session' → skip ALL asks including the wrap-up/cleanup ask\" | \"Stop working\" forbids proposing *new task work*, not asking about the wrap-up mechanism itself. Treat it as an explicit wrap-up-intent signal (Context-usage gate condition 1 in suggestion-patterns.md) — if context-usage also reads at/above the session model's threshold (condition 2 — Fable/Mythos 55%, Opus 50%, others 45%), the cleanup ask is *more* warranted, not skipped. Present the ask; do not silently auto-run cleanup either — the user still decides |\n| 7 | \"The invocation string contains `fix-plan` → matches the skip row\" (skill-name surface match) | Match by the run's **actual step composition**, not the skill name: any run that executed priority / triage / model-triage — including every role-scoped `--deep` / `--impl` / role-mapped no-arg run — is NOT a skip target. Only pure add / move / check bookkeeping skips |\n\n### Skip-target topic list\n\n| Topic / skill | Identification signal | Skip ask? |\n|---------------|----------------------|-----------|\n| `/ralph fix-plan` **add / move / check only** | User message: `fix-plan`, `fix_plan`, \"record in checklist\" | ✅ Skip |\n| `/ralph fix-plan` **priority / triage / sync** | User message: `fix-plan priority`, \"triage\", \"prioritize blocked\" | ❌ **NOT skip** — triage surfaces immediate-action candidates (top-N selfable). Route the start decision to `Skill(\"wip\")`, not skip and not `next` single-select (see Step 0.4 \"Surfacing/triage → wip delegation\") |\n| `/fix-plan` **role-scoped default run** (`--deep` / `--impl` / `--role=*`, or a no-arg run resolved via a workspace role mapping) | Run report shows sync + priority executed (deep adds model-triage) | ❌ **NOT skip** — role runs include triage by definition. After the report, surface **role-fitting continuable candidates** in the same turn: `deep` → design/audit-fit work, `impl` → `selfable` implementation candidates, `pm` → bookkeeping remainder. Multi-item → route via `Skill(\"wip\")`; single next-step → `next` ask |\n| `/archive`, `/safe-delete` | User message: `archive`, `delete`, `move to .bak` | ✅ Skip |\n| `/todo`, `/todowrite` add/move | User message: `todo add`, `task register` | ✅ Skip |\n| `/wip` start/register | User message: `wip`, \"track progress\" | ⚠️ Conditional (multi-step task → ask allowed) |\n| Intermediate modification with remaining tasks | `task.md` / `TaskList` has active `pending` or `in_progress` items | ✅ **Skip ask** — proceed directly to next remaining task in same turn |\n| Code modification / implementation | Edit/Write performed (all tasks completed) | ❌ Ask required (verification/commit/push branch) |\n| Commit / push | git commit/push performed | ❌ Ask required (next-step branch) |\n| Skill/rule modification | Skill/rule file Edit | ❌ Ask required (test/commit branch) |\n\n### Don't / Do table\n\n| # | Don't | Do |\n|---|-------|-----|\n| 1 | Stop hook triggered next → unconditionally compose AskUserQuestion options | First check skip-target topic list. Skip = report only |\n| 2 | \"fix-plan completed, should I proceed with code-workflow next?\" autonomous proposal | fix-plan = recording topic. Wait for explicit user follow-up instruction |\n| 3 | \"archive completed, should I delete the rest too?\" autonomous proposal | archive = single-action. Report and end |\n| 4 | \"User can pick Other or end-session option, so it's safe to ask\" rationalization | Ask itself implies a user decision is needed. No decision needed = no ask |\n\n### Self-check (every time before composing options)\n\n1. What was the just-completed work? -- Identify by user message + action history\n2. Does it **exactly match a row** in the skip-target topic list above? -- The list is CLOSED. \"Similar\" / \"in spirit\" matches don't count. If no exact match → ask required (proceed to Step 0.4+)\n3. Did the user explicitly express follow-up intent alongside the recording-topic invocation (e.g., \"record then proceed with X\")? -- If no, end with report only\n4. Does the just-completed work include code change / commit / push / external publish / plan-or-research authoring? -- If yes, ask is required (decision branch exists)\n5. Am I about to skip on grounds of \"user awaiting reply\" / \"prior turn already asked\" / \"re-ask reverts prior selection\"? -- All three are extrapolation traps (see Don't/Do #2–4 above). Ask required\n6. Even if skip is confirmed (step 1–5 all pass) — **did I run the context-usage gate (step 4 of \"How to skip\")? (HARD STOP)**: if live context-usage ≥ model threshold OR user signaled wrap-up intent, the cleanup/retrospective ask is **required** even for a confirmed skip target. Skip ≠ context-gate exemption.\n\n### Antigravity Environment Context Usage Reporting Gate & Cleanup Selection Execution (HARD STOP)\n\nWhen running in Antigravity (Gemini), backend hooks are limited. You MUST:\n1. **Explicitly state current context usage % & token estimate** in the `AskUserQuestion` question text header (e.g. `[Context Usage: XX% (~YYK tokens)]`). In Antigravity (Gemini), token count MUST be physically computed from transcript JSONL bytes (`tokens = transcript_file_bytes / 3.5`), NOT arbitrarily guessed or fabricated. Context usage % MUST be calculated based on the **1M token capacity (1,000,000 tokens)**: `pct = (tokens / 1,000,000) * 100`. (e.g., ~140KB transcript = ~40,000 tokens = ~4%).\n2. **Mandatory `/cleanup` Recommendation Gate**: If context usage >= 40% (>=400K tokens in Antigravity or transcript log size indicates high usage), set `(Recommended) Session cleanup and retrospective (/cleanup)` as option #1 in `AskUserQuestion`. **HARD STOP**: If context usage is strictly less than 40% (<400K tokens), attaching the `(Recommended)` tag to `/cleanup` is STRICTLY FORBIDDEN; tag the primary domain/technical follow-up action as `(Recommended)` instead.\n3. **Mandatory Session Cleanup Execution (HARD STOP)**: When the user selects any option whose label denotes session cleanup (`/cleanup`, or its session-language equivalent), the agent MUST NOT conclude the turn with a plain text wrap-up message alone. The agent MUST immediately register cleanup tasks in `task.md` / `TaskList` and execute the `cleanup` skill protocol (via `Skill(\"cleanup\")` or environment-appropriate autoloader such as `view_file` with `IsSkillFile: true` under Antigravity).\n4. **Mandatory Physical `cleanup` Skill Call Before Post-Work Wrapup (HARD STOP)**: When entering a wrap-up or post-completion state, replacing the formal `cleanup` skill pipeline with ad-hoc text summaries or scattered individual script calls is strictly prohibited. The agent MUST physically invoke `Skill(\"cleanup\")` or environment-appropriate autoloader (`view_file` on `cleanup/SKILL.md` with `IsSkillFile: true` under Antigravity) to execute the 5-step pipeline (`cleanup/run.md`) before finalizing session wrapup or advancing to `/next` recommendations.\n\n| # | Don't | Do |\n|---|---|---|\n| 1 | Omit context usage % or token count in `AskUserQuestion` question text when running in Antigravity | Include `[Context Usage: XX% (~YYK tokens)]` in the question text |\n| 2 | Recommend forward work options without `/cleanup` when context usage >= 40% | Set `(Recommended) Session cleanup and retrospective (/cleanup)` as option #1 when usage >= 40% |\n| 3 | Attach `(Recommended)` tag to `/cleanup` when context usage is below 40% | Attach `(Recommended)` to `/cleanup` ONLY when usage >= 40%; when < 40%, attach `(Recommended)` to the primary technical follow-up task |\n| 4 | Conclude with text greeting when user selects a session-cleanup option (`/cleanup` or its session-language equivalent) | Immediately register cleanup tasks and execute `cleanup` skill protocol (`Skill(\"cleanup\")` or `view_file IsSkillFile:true`) |\n| 5 | Output ad-hoc text wrapup or jump to `/next` without invoking the formal `cleanup` skill pipeline | Physically invoke `Skill(\"cleanup\")` (or `view_file IsSkillFile:true`) to execute the full 5-step cleanup pipeline |\n\n### How to skip (procedure)\n\n1. Determine skip target via Step 0.3 self-check\n2. **Run Step 0.4 first — skip never bypasses it (HARD STOP)**: even a confirmed skip-target must pass through Step 0.4's decision-deferral scan. If the report defers a decision as prose (e.g. \"start decision is yours\" / \"the start decision awaits your instruction\"), Step 0.4 **overrides** the skip and forces the ask. Only after Step 0.4 finds no deferred decision does the skip stand.\n3. If skip-target **and** Step 0.4 clean, do not proceed to Step 0.5/0.7 (TaskList check, user-work confirmation)\n4. **Run context-usage gate (HARD STOP — skip does NOT exempt this check)**: even when the skip is confirmed (recording topic + Step 0.4 clean), check the live context-usage signal from `suggestion-patterns.md` \"Context-usage gate\". If the live reading is at/above the model's threshold (Fable/Mythos 55%, Opus 50%, others 45%) **or** the user has already signaled wrap-up intent — the cleanup/retrospective ask becomes **required** per the positive-trigger rule. A skip-target completion that crosses the gate forces a single-question AskUserQuestion offering the cleanup/retrospective option (not the full next-action ask — just the cleanup decision). Without this check, skip silently discards the cleanup option on high-context sessions. **Post-compact floor (HARD STOP)**: when this turn sits immediately after a compact/summarization boundary — an explicit compact command, an `isCompactSummary` transcript entry, or a session that opened with a \"continued from a previous conversation that ran out of context\" summary — treat usage as **under 20% until you have re-measured it**, and do not cite any figure carried over from before that boundary. The measurement lags a compact by at least one assistant turn, so the number available to you at that moment still describes the pre-compact session and **overstates** the real one. Re-measure via the script named in `suggestion-patterns.md` \"Live-check fallback\" before letting this gate fire; if you cannot measure, the gate is NOT met.\n5. Report completion as plain text only (no AskUserQuestion call) — **only when step 4's context-usage gate is also clear**\n6. If Stop hook re-triggers next skill, re-evaluate the same skip judgment\n\n### Case history\n\nA recording-only instruction (record a checklist item) completed → the Stop hook triggered next → an AskUserQuestion proposed a \"start a code-workflow (Recommended)\" option → the user picked it → a full research + plan was authored against the user's intent of recording only. Recording topics are not decision branch points. (See failed-attempts.md \"recording-topic ask-skip\".)\n\nInverse-extrapolation: skipping the next-action ask because a prior chat-text question is awaiting reply is forbidden — the awaiting-reply axis is separate from the next-action axis, and plan/research authoring is not a recording-only topic. (See failed-attempts.md \"next-skill ask skip extrapolation\".)\n\nIf skip-target (exact match in closed list) → no ask. Otherwise → proceed to Step 0.4.\n\n## Step 0.4: Decision-deferral forced-ask gate (HARD STOP)\n\n**Before ending a completion report, scan your own just-emitted text for a decision left as prose.** If the report defers a decision to the user instead of asking it, that deferral is itself a decision axis — you **must** compose an `AskUserQuestion` for it, not end on the text. This is the mirror image of Step 0.3: 0.3 *skips* the ask for recording topics; 0.4 *forces* the ask when a real decision was left unasked.\n\n**Applies regardless of whether `next` was formally invoked this turn.** This self-check is a standing rule for any turn-ending text — a `/fix` wrap-up, a tool-result summary, an aside tacked onto an unrelated report — not something gated behind an explicit `Skill(\"next\")` call. A classic instance: appending \"let me know if you want /cleanup\" as a courtesy note at the end of an otherwise-unrelated report. That is exactly the text-deferral pattern this gate exists to catch — compose a standalone `AskUserQuestion` for it (folded into an existing ask if one is already being composed this turn, or on its own if not), rather than reasoning \"no ask is happening this turn, so text is fine.\"\n\n### Trigger phrases — a decision left as text\n\nA report that ends with any of these is a forbidden text-question. Convert it to an ask:\n\n| Pattern (any language) | Example |\n|------------------------|---------|\n| \"let me know / tell me and I'll …\" | \"tell me and I'll do it\", \"let me know and I'll handle it\" |\n| \"whether to X is …\" left unanswered | \"whether to commit/PR is up to you\", \"the decision is yours\" |\n| \"your call / up to you / you decide\" | \"your call\", \"your decision\", \"up to you\" |\n| \"next step is X (if you want)\" | \"the next step is X if you want\", \"let me know to proceed\" |\n| **Locale deferral phrases** (start/proceed/decision + awaiting/deferred, in the session language) | see `data/*.regex` deferral block — e.g. \"the start decision awaits your instruction\", \"proceeding awaits your call\" and their locale equivalents |\n\n### Don't / Do table\n\n| # | Don't | Do |\n|---|-------|-----|\n| 1 | End the report with \"let me know and I'll handle it\" (decision as prose) | Compose an `AskUserQuestion` whose options are the decision's real branches (e.g. commit-now / feature-branch+PR / hold) + Other |\n| 2 | Treat a deferred decision as \"out of scope — the user will instruct later\" | A deferred decision is in `next`'s scope: it is a decision axis, so ask it now |\n| 3 | Rely on the Stop hook firing to remember the ask | The Stop hook is belt-and-suspenders. This self-check is the first line — run it before ending the report |\n\n### Self-check (every time before ending a completion report)\n\n1. Does my report contain a decision phrased as prose (any trigger phrase above)?\n2. If yes → an `AskUserQuestion` is **required** for that decision. Do not end on the text.\n3. Is the decision a real branch (≥2 executable options)? Compose those as options + Other.\n4. This gate **overrides** Step 0.3 skip: even right after a recording/management topic, a deferred decision forces the ask.\n\n### Chain-continuation carry-forward check (HARD STOP — every turn inside a `stop_hook_active`-suppressed chain)\n\n**A prose-phrased decision asked in an earlier turn of the same chain does not resolve itself just because later turns are driven by background task-notifications instead of a user reply.** `check-ask-bypass-keywords.sh` (the hook backing this gate) only fires on the *first* stop of a `stop_hook_active`-suppressed chain — every later stop in that same chain is structurally silent (same limitation already documented for the `next`-invocation duty in the \"Post-task-completion\" table's row 7 below). A turn that only reacts to the newest notification, without checking whether an earlier turn in this chain left a question unanswered, silently drops that decision.\n\nBefore driving any new or unrelated work in a turn that resumed from a background task-notification (not a genuine user reply):\n\n1. Scan your own most recent turn(s) in this chain for a Step 0.4-pattern prose question (or a properly-composed `AskUserQuestion` that the user has not yet answered).\n2. If one exists and remains unanswered → resolve it first: either compose the missed `AskUserQuestion` now (if it was asked as prose), or explicitly re-state the still-open decision in this turn's text before continuing — do not silently proceed with unrelated work as if the question had been withdrawn.\n3. Only after that check is clear may the turn continue driving other work (polling, re-dispatch, status checks, etc.).\n\n| # | Don't | Do |\n|---|-------|-----|\n| 1 | Ask a real decision as prose, then treat every subsequent background-notification turn as \"nothing to report on that, move on\" | Re-surface the decision (as a proper `AskUserQuestion`) at the first opportunity after noticing it's still unanswered — do not let notification turns silently roll past it |\n| 2 | Assume the hook will catch a missed prose question because it's \"hook-active\" for this class | The hook only fires on the chain's first stop. Turns 2+ in the same chain are the self-check's sole coverage |\n| 3 | Wait for the user to notice and re-ask (\"what about X?\") before resolving the dropped decision | Self-detect on the very next turn that touches related work, not on user prompting |\n\n### Surfacing/triage → `wip` delegation (HARD STOP — route target, not just \"ask\")\n\nWhen the deferred decision is **\"which of N surfaced candidates to start\"** (the output of a triage / surfacing topic — `fix-plan priority`, a candidate list, a \"top-N actionable\" report), the forced ask is **not** a `next` single-select \"what next?\". Route it to `Skill(\"wip\")` — the surfaced candidates are multi-item work needing task registration + per-item direction (proceed / split / hold), which is wip's resume procedure. This generalizes the cleanup→wip rule ([[feedback_cleanup_wip_not_next]]) to every surfacing topic.\n\n| # | Don't | Do |\n|---|-------|-----|\n| 1 | Triage surfaced top-3 candidates → end with \"start decision is yours\" (prose) | Call `Skill(\"wip\")` → its resume procedure asks per-candidate direction |\n| 2 | Triage → `next` single-select \"pick one to start (Recommended)\" | Surfaced candidates = multi-item. `next` single-select strips the split/hold/multi axes. Use `wip` |\n| 3 | Triage = recording topic → Step 0.3 skip → no ask at all | Triage surfaces actionable candidates = decision branch. Step 0.4 override forces the ask; route = `wip` |\n\n**Self-check (before ending any triage / surfacing / candidate-list report)**:\n1. Did the just-completed work surface ≥1 actionable candidate for the user to potentially start?\n2. If yes → the start decision is a real axis. Do not defer as prose (Step 0.4) and do not skip (Step 0.3).\n3. Is it multi-item / needs per-item direction? → `Skill(\"wip\")`. Single reversible next-step only? → `next` ask.\n\nOtherwise → proceed to Step 0.5.\n\n## Step 0.45: Invocation-argument priority (HARD STOP)\n\n**If `/next` was invoked with an explicit argument that is itself a file or target (e.g. a prior session's walkthrough/report, a plan doc, a specific PR/issue), read that argument's target FIRST and adopt any explicit follow-up candidates it already names (an \"Unresolved\" / \"Next session\" section, a Progress Checklist, an open item list) as the top-priority candidates for this ask.** Step 0.5 (TaskList) and Step 0.6 (fix_plan.md) run **after** this — they become a supplementary \"did the argument's document miss anything?\" check, not the primary discovery path. Do not run a generic TaskList → fix_plan.md-wide sweep before reading what the invocation itself already pointed at.\n\n### Why\n\n- The invocation argument is the most direct, highest-confidence signal of what the user wants surfaced next — it was often authored specifically for this handoff (a walkthrough's own \"Unresolved\" / \"Next session\" section, a plan's own Progress Checklist)\n- A generic Step 0.5/0.6 sweep executed as the *default* path, before checking whether the argument already answered the question, produces bloated, low-precision candidate lists (e.g. dumping every `(P0)`/`(P1)` line across an entire multi-project `fix_plan.md`, most of it unrelated to the argument's actual scope)\n- Once the argument's explicit candidates are adopted, Step 0.5/0.6 still run — but scoped to \"anything else missed\", not \"start from zero and enumerate everything\"\n\n### Don't / Do\n\n| # | Don't | Do |\n|---|-------|-----|\n| 1 | `/next` receives a file/target argument → proceed straight to Step 0.5 TaskList / Step 0.6 fix_plan.md-wide sweep, ignoring the argument's own content | Read the argument's target first. If it names explicit follow-up candidates, adopt them as the primary option set |\n| 2 | Run Step 0.6's fix_plan.md sweep as a full unfiltered P0/P1 dump when the invocation argument already narrowed the scope | Scope Step 0.5/0.6 to confirming the argument's candidates (e.g. grep the argument's specific keywords/identifiers in fix_plan.md) rather than a blanket priority-sorted dump across unrelated projects |\n| 3 | Treat \"the argument is just context, not a candidate source\" | An argument that is itself a document with an explicit \"next steps\"/\"unresolved\" section IS a candidate source — the highest-priority one |\n| 4 | Skip this step because the argument \"doesn't look like a topic name\" (only checking against the Topic Dispatch table) | Topic Dispatch (SKILL.md) matches known topic slugs (`stall-detect`, `ask-gates`, `suggestion-patterns`). An argument that isn't a topic slug but IS a readable file/target still triggers this step — the two checks are independent |\n\n### Self-check (before Step 0.5)\n\n1. Was `/next` invoked with an argument? → If no, skip to Step 0.5 as normal\n2. Does the argument match a known topic slug (Topic Dispatch table)? → If yes, that dispatch applies instead (this step doesn't)\n3. Otherwise, is the argument a file/target path? → Read it. Does it contain explicit follow-up candidates (an \"Unresolved\"/\"Next session\" section, a Progress Checklist, an open-item list)?\n4. If yes → adopt those as the primary candidate set. Step 0.5/0.6 then run in **scoped confirmation mode** (check the argument's own specifics), not full-sweep mode\n5. If the argument names no explicit candidates → proceed to Step 0.5/0.6 normally (this step does not apply)\n\n## Step 0.5: TaskList primary-source check (MANDATORY — every time before composing ask options)\n\n**Immediately before calling `AskUserQuestion`, call `TaskList` to directly verify current pending/in_progress tasks.** Do not compose options from context summary / memory / inference of recent work.\n\n### Why it's mandatory\n\n- Right after `/compact`, summary memory can be stale — frequent mismatch with the real task list\n- When task names/contents appear in option descriptions, the user **trusts they exist** → fabricating virtual tasks in options breaks that trust\n- One TaskList call = primary source for option accuracy\n\n### Don't / Do table\n\n| # | Don't | Do |\n|---|-------|-----|\n| 1 | Compose options by quoting \"Task #N registered\" from summary memory | Call `TaskList` → use pending/in_progress entries directly as option candidates |\n| 2 | Assume \"the task I just registered is still there\" | Task IDs/contents can change after /compact. Read TaskList every time |\n| 3 | Option-ify only some pending tasks (e.g., \"only the 1 immediately actionable\") | Include all pending tasks as option candidates. If trigger conditions differ, state them in description |\n| 4 | Write virtual tasks (\"FA-update immediate progress\") in option descriptions | Quote real task subject + ID (note: TaskList-internal `#NN` IDs are referenced by subject keyword, not exposed in user-visible output) |\n\n### Self-check (every time before calling AskUserQuestion)\n\n1. Does this ask relate to task progress direction? → If yes, TaskList Read is mandatory\n2. Do the tasks mentioned in option descriptions **actually exist in TaskList**? — 1:1 mapping with TaskList output\n3. If there are N pending tasks but only M < N appear in options → state the filtering reason in description or use the wrap-up pattern\n4. **Does any option/question text reference a PR or issue?** → If yes, the full clickable URL (`https://github.com/<owner>/<repo>/pull|issues/<N>`) must appear in that same ask — a bare `#N` is forbidden even when accompanied by a repo name. This is `suggestion-patterns.md`'s own \"Cross-cutting rule — PR/issue references in options require the full URL\" restated here because Step 0.5's TaskList check is exactly the point in the flow where a task's subject (which may itself be a bare `#N`) gets copied into an option — do not carry that bare reference forward without resolving its URL first. Recurred twice (2026-07-17 fix, 2026-08-18/19 recurrence) precisely because `suggestion-patterns.md` was not Read before composing the ask on the second occurrence — treat `SKILL.md`'s \"Read suggestion-patterns.md BEFORE composing options\" HARD STOP as non-optional, not as background context you can skip once you've read it before in the session\n\n## Step 0.6: Workspace fix_plan.md active integration protocol (MANDATORY — when TaskList is empty, done, or unavailable)\n\n**Trigger scope (HARD STOP)**: this step applies whenever `TaskList` yields no actionable pending items — whether because it is genuinely empty, all items are done, **or the TaskList/TaskCreate tool is disconnected/unavailable this turn**. \"Unavailable\" is not a different case from \"empty\" — both mean the session-local task medium cannot surface backlog, so the persistent checklist medium (`fix_plan.md`) becomes the primary source. Do not read the word \"empty\" literally and treat a disconnected tool as exempt.\n\n1. **Locate Workspace Root(s)**: Determine the active workspace root(s) containing `.git`, `.ralph/`, **or Ralph-marker files** (`PROMPT.md` + `AGENT.md` alongside `progress.json` / `status.json` / `.circuit_breaker_state`) — a Ralph-loop-owned workspace is not always a git repo and does not always name its state directory `.ralph/`. **Do not derive this from current cwd alone** — a session can move across multiple workspaces (e.g., start in a project directory debugging an issue, then pivot to a skills/rules repo). Enumerate every workspace root visited during the session (via Bash cwd changes, Read/Edit/Grep paths, or `cd`/`git -C` targets seen in the transcript), not just the one matching the cwd at the moment `next` fires.\n2. **Find fix_plan.md**: For each workspace root from step 1, read its project backlog checklist at any of `<workspace-root>/.ralph/fix_plan.md`, `<workspace-root>/fix_plan.md`, or `<workspace-root>/.agents/fix_plan.md` if present. The third pattern is a **workspace-LOCAL** `.agents/` state directory (some Ralph workspaces name their loop directory `.agents/` instead of `.ralph/`) — this is a different thing from the global `~/.agents` skills/rules repo; do not skip it because `.agents` \"already means the global skills repo\" in this session. A workspace without any of the three is skipped, not treated as proof no other workspace has one.\n3. **Extract Pending Backlog**: Extract pending checklist items (`- [ ]`) from the `## Priority Work` (or equivalent priority) section.\n4. **Context & Relevance Filtering**: Filter these tasks to identify those related to the current session (e.g., matching files edited, directories touched, or keywords from the conversation history). **Relevance-filter fallback (HARD STOP)**: if this filter yields zero session-related items but the unfiltered, priority-sorted backlog (step 5) has entries, do NOT conclude \"no candidates\" — fall back to surfacing the top priority-sorted items regardless of session relevance. `fix_plan.md` is the workspace's standing backlog, not merely a continuation thread for the current session's topic; a real P0/P1 item is worth surfacing even when it has nothing to do with what the session just did.\n5. **Sort by Priority**: Sort the remaining candidates by priority level: `P0` -> `P1` -> `P2` -> `[REPEAT]`.\n6. **Compose Options**: Surface the top 2-3 prioritized and related tasks as options in `AskUserQuestion`. Place them above generic options like \"End session\", using concise labels with their priority level indicated in the description (e.g. `[P0]`). **When surfaced via the step 4 relevance-filter fallback** (session-unrelated but top-priority), the option description MUST also carry an explicit \"(workspace backlog, unrelated to this session)\" qualifier — the user needs to know these are not a continuation of what was just discussed.\n6a. **Cross-workspace target check (HARD STOP — independent of step 4's relevance filter)**: before finalizing any option built from a `fix_plan.md` entry, check whether the entry's actual work target (a repo URL, an org name, a PR/issue reference) belongs to a **different** git org/repo than the current session's own workspace root. A `fix_plan.md` can legitimately index items that live in another org's repo (a cross-project dependency tracker) — \"the text is physically present in *this* workspace's tracker\" is not the same as \"the work is *this* workspace's own work,\" so it does not exempt the item from step 4's relevance filter or from this qualifier. When the target differs, the option description MUST name both sides explicitly (e.g. `(cross-workspace: <other-org>/<other-repo> — this session is <current-org>/<current-repo>)`) — this applies whether the candidate arrived via the step 4 fallback or via a normal relevance match, and regardless of whether the candidate is Recommended.\n7. **Write-back when the user selects (HARD STOP)**: this step is entered when `TaskList`/`TaskCreate` is empty, done, **or unavailable** — so `SKILL.md` Step 3's default \"register each via `TaskCreate`\" cannot be assumed to succeed for a selection made here. If `TaskCreate` is still unavailable at selection time, follow `SKILL.md` Step 3's `TaskCreate`-unavailable fallback (write the selection back into `fix_plan.md`/`checklist.md` instead of silently treating \"options were shown\" as \"the selection is tracked\").\n\n### Don't / Do table\n\n| # | Don't | Do |\n|---|---|---|\n| 1 | Suggest \"End session\" immediately when session tasks are complete without checking the project's persistent backlog | Read the active workspace's `fix_plan.md` first, find prioritized tasks, and offer them |\n| 2 | Pull tasks from a parent or different workspace's `fix_plan.md` | Detect the current workspace root(s) first, then read the local `.ralph/fix_plan.md` for each one actually visited this session |\n| 3 | Present tasks out of priority order (e.g. suggesting P2/REPEAT before P0/P1) | Sort strictly by priority level (`P0` -> `P1` -> `P2` -> `[REPEAT]`) and surface the highest first |\n| 4 | Present all `fix_plan.md` tasks blindly | Filter for tasks that are relevant to the files or topics touched in the current session first |\n| 5 | Treat \"TaskList tool disconnected/unavailable\" as outside this step's scope because the trigger says \"empty\" | Unavailable = equivalent to empty for this step's purpose. The fix_plan.md check is the fallback specifically when the session-local task medium cannot be read at all |\n| 6 | Derive \"the workspace\" solely from the cwd at the moment `next` fires, especially when that cwd (e.g. a skills/rules repo) has no `fix_plan.md` | Check every workspace root the session actually touched. A session that started in a project directory and later moved to a different repo still has backlog in the first one |\n| 7 | Grep the tracker's `##` header list once, then re-read only the section you most recently edited before reporting \"no candidates\" | Read **every** top-level `##` section from that header list before concluding — recency (just-edited section) is not grounds to skip siblings. This is exactly how a populated `## Priority Work` / `## REPEAT` section gets missed while a freshly-touched section (e.g. `## Fable Target Tasks`) gets re-read |\n| 8 | Apply row 2's \"don't pull from a parent workspace's fix_plan.md\" when the **local** tracker's active-work section has itself been replaced with a redirect note pointing to that parent (e.g. \"this repo's items live in `<parent-path>` — see there\") | An explicit redirect note is the local tracker delegating scope — follow it, and treat the parent tracker's own top-level `##` sections as in-scope for this session. Row 2 bans *assuming* a parent's backlog is relevant; it does not ban following a redirect the local tracker itself declares |\n| 9 | Skip checking `<workspace-root>/.agents/fix_plan.md` because the session already used `~/.agents` heavily this turn (skills/rules repo) and the name \"`.agents`\" reads as \"that global repo\" | The two are unrelated: `~/.agents` (absolute, home-rooted, git-tracked skills/rules repo) vs `<workspace-root>/.agents/` (relative to a *different* project's root, untracked Ralph state dir). A workspace-relative `.agents/` is always a candidate under step 2, regardless of how much `~/.agents` was touched this session |\n| 10 | Step 4's session-relevance filter returns zero matches → conclude \"no candidates\" and fall through to Step 0.65's free-text ask, discarding the priority-sorted backlog entirely | Zero relevance matches ≠ zero candidates. Apply the step 4 fallback: surface the top priority-sorted items from the unfiltered backlog, labeled \"(workspace backlog, unrelated to this session)\" |\n| 11 | Treat a `fix_plan.md`-indexed item as \"in scope\" for a next-action option because it is textually present in the current workspace's tracker, when its actual work target is a different org/repo | Compare the item's target repo/org against the current session's own workspace root (step 6a). Different org/repo → label explicitly, even if the item passed the step 4 relevance filter on file-text grounds alone |\n\n### Self-check (before declaring \"no work\" / \"session complete\")\n\n1. Is TaskList empty, done, or **did the TaskList/TaskCreate call itself fail or return unavailable**? → Either case triggers this step\n2. Did the session's cwd change at any point (project debugging → skills/rules repo, or similar)? → If yes, check `fix_plan.md` in **each** workspace root visited, not just the final cwd\n3. Does the final-cwd workspace lack a `fix_plan.md`? → That is not evidence no other visited workspace has one — check them all before concluding no backlog exists\n4. If you grepped the tracker's `##` header list, did you actually Read every top-level section on that list — or only the one you most recently wrote to? → Read all of them before reporting a candidate count\n5. Does the local tracker's active-work section contain a redirect note pointing to a parent/org-level tracker? → Follow it and scan that parent's own top-level `##` sections (not just the subsection the note names)\n6. Did you check for a **workspace-LOCAL** `<workspace-root>/.agents/fix_plan.md`, not just `.ralph/fix_plan.md` or bare `fix_plan.md`? → Some Ralph workspaces (non-git, no `.ralph/`) use `.agents/` as their loop state directory — a plain `ls <root>/fix_plan.md <root>/.ralph/fix_plan.md` misses it\n7. Does any surfaced candidate's target repo/org differ from the current session's own workspace root? → Label it per step 6a, regardless of how it passed the relevance filter\n\n## Step 0.65: Repeated no-candidate invocation → forced direct ask (HARD STOP)\n\n**When `next` fires again in the same session and Step 0.5/0.6 again surface zero candidates (TaskList empty AND fix_plan.md's unfiltered priority-sorted backlog is also empty — not merely \"no session-relevant item\", see Step 0.6 item 4's relevance-filter fallback) — the same \"no-candidate\" outcome as a prior `next` firing this session — do not silently end the turn or repeat a generic \"nothing to do\" report.** Force an `AskUserQuestion` that asks the user directly what to work on next, using free text (no guessed/speculative options), even though there is no discovered candidate to offer.\n\nThis is narrower than the general \"avoid guess options\" guidance below — it specifically targets **repeated zero-candidate firings**, where staying silent turn after turn reads as the assistant giving up on discovery duty.\n\n| # | Don't | Do |\n|---|-------|-----|\n| 1 | Second (or later) zero-candidate `next` firing this session → end with \"no work found\" text again | Compose an `AskUserQuestion`: \"What would you like to work on next?\" with a free-text-first option (no guessed candidates) + \"End session\" |\n| 2 | Treat \"no candidates found\" as license to skip the ask entirely | Absence of a discovered candidate is not absence of a decision — the user still decides what's next |\n| 3 | User answers one specific ask (e.g. a re-auth/verification offer) with frustration/anger/a terse dismissal, and the assistant reads that as \"stop asking anything for the rest of the session\" → every later Stop-hook `next` re-trigger ends on generic standby/completion text instead of this step's forced ask | Scope the frustration to the **specific declined candidate only** — drop that one candidate, but the Step 0.65 forced direct ask (a fresh, different decision: \"what next\") still fires. Anger at a repeated/low-value ask is not consent to stop being asked entirely; it is a signal to stop repeating *that* ask |\n\n### Self-check\n\n1. Did `next` fire more than once this session with a zero-candidate outcome each time? → If yes, this step applies\n2. Am I about to end the turn with a repeat \"nothing to do\" report? → Forbidden. Compose the direct-input ask instead\n3. Did the user's most recent reply express frustration/anger toward a *specific* prior ask (not a general \"stop working\" instruction)? → That drops the declined candidate only — this step's forced direct ask is still owed, not exempted\n\n## Step 0.66: Unchanged-candidate-set re-fire within the same chain (HARD STOP)\n\n**Silent skip (status report, no `AskUserQuestion`) requires BOTH conditions below — \"candidate set unchanged\" ALONE is never sufficient.** The only case where skipping the ask is permitted is immediately after a `/cleanup` run in this same turn/chain — because `/cleanup` Step 5 (wip delegation) has already composed and resolved its own wrap-up ask, so a `next` re-fire right after it would be a redundant re-ask of a decision the user just made. Every other \"candidate set looks unchanged\" situation still requires an ask (at minimum the single-item confirmation form below) — an unchanged backlog does not, by itself, mean nothing needs asking.\n\n**Preconditions (BOTH required for the silent-skip path)**:\n1. **Cleanup precondition (HARD STOP — check this FIRST)**: was the immediately-preceding action in this turn/chain an actual `/cleanup` (or equivalent session-wrap-up skill) execution — not merely \"no urgent items\" or \"the transcript looks quiet\"? If the preceding action was anything else (an import, a push, a code edit, a prior `next` ask with no cleanup in between), this precondition FAILS and the silent-skip path is not available, regardless of the same-set test result.\n2. **Same-set test**: compare the current candidate list (post Step 0.5/0.6 discovery) against the immediately-prior `next`-ask's candidate list in this chain. Identical if every item matches by subject/target (ignoring cosmetic wording) AND none has a new state (no new TaskList entry, no fix_plan change, no user reply that altered scope).\n\nThis is distinct from Step 0.65 (zero-candidate repeated firing) — here candidates DO exist, but they are the same ones already surfaced and either answered or explicitly deferred moments earlier in the same chain.\n\n| # | Don't | Do |\n|---|-------|-----|\n| 1 | Skip the ask solely because the candidate/decision set looks unchanged | Check the cleanup precondition FIRST. Unchanged set + no preceding `/cleanup` = still ask (minimal form) |\n| 2 | Compose a new full `AskUserQuestion` with the same options as the previous ask in this chain, just reworded | If both preconditions hold: end the turn with a short status report (\"carried over: X, Y, Z — no new candidates this fire\") and no ask |\n| 3 | Keep re-asking until the user manually breaks out (rejects the tool call, issues an unrelated command) | Recognize the unchanged-set condition before the ask, not after the user has to reject it |\n| 4 | Treat \"the hook fired again\" as proof a fresh ask is owed regardless of content | The hook firing is a *reminder to check*, not a mandate to always ask — check both preconditions first |\n| 5 | Silently drop the carryover items on grounds of \"already asked\" | Still report their carryover status in plain text (per Step 0.3's skip-still-reports discipline) — silence is the ask-gates violation this table exists to prevent elsewhere |\n| 6 | Treat an intervening non-cleanup action (RAG import, a push, a PR conversion) between the prior ask and this fire as \"nothing changed, so cleanup precondition is close enough\" | Only a literal `/cleanup` run satisfies the cleanup precondition. Any other intervening action means this step's silent-skip path does not apply — ask |\n| 7 | Extend the cleanup-adjacent silent-skip across an entire \"waiting on external/user action\" polling period — treat the global \"don't repeat the same ask while the user is actively polling/working\" rule as overriding this step's own Exception clause for every subsequent re-fire | The cleanup-adjacent skip is a **single, one-time** use immediately after `/cleanup`. Every re-fire after that (including during a polling wait) falls back to the Exception below (minimal single-item confirmation) — the global polling-ask-avoidance rule governs *repeating a full multi-option ask*, not *whether any ask at all is owed on a Stop-hook re-fire* |\n\n**Exception**: if the one item that is still genuinely open differs from the rest (e.g., 3 items already deferred, 1 item newly blocking), a minimal single-item confirmation for that one item is allowed — do not fold it back into a full 4-option re-ask of the whole set. This minimal-confirmation form is available even when the cleanup precondition fails (it is not a \"full ask\", so it isn't gated the same way) — use it instead of a silent status report whenever precondition 1 fails. **This is the required fallback for every next-trigger re-fire during a polling/waiting period** (row 7) — a bare status report with zero `AskUserQuestion` call is never correct here, no matter how many times the hook has already fired.\n\n### Case history — repeated re-fires during a polling wait (2026-08-17)\n\nA session waited on a user's manual `git push` (a bash-guard-blocked command) while `next-trigger.sh` fired 8+ times in a row. Each time the assistant called `Skill(\"next\")` (satisfying the hook's literal check) but ended with plain status text (\"still waiting\", \"same state\") — zero `AskUserQuestion` calls across the entire wait. The assistant had correctly applied the cleanup-adjacent single-use skip once, then kept reusing that same reasoning for every subsequent fire, reasoning that the global \"don't repeat the same ask while the user is polling\" rule justified continuing to skip. It does not — see row 7. The mechanical root cause (why the hook kept re-firing at all) turned out to be a separate bug in `next-trigger.sh` itself: the hook's own injected `\"Stop hook feedback: ...\"` block text is stored in the transcript as a `type==\"user\"` entry with string content, indistinguishable from a genuine human prompt to the hook's own \"last real user turn\" anchor — so every re-fire reset the hook's turn-based suppression against itself. Fixed at the hook level (exclude that literal prefix from the anchor computation) plus a belt-and-suspenders 3-consecutive-fires-without-`AskUserQuestion` escalation counter, independent of this specific bug, for any other scenario producing the same symptom.\n\n### Self-check\n\n1. **Did a `/cleanup` (or equivalent session-wrap-up skill) actually execute as the immediately-preceding action in this turn/chain?** → If no, the silent-skip path is unavailable — go to item 4 below (compose at least a minimal ask), regardless of how the same-set test comes out.\n2. Is this `next` firing within the same `stop_hook_active` continuation chain as an earlier `next`-ask this turn/chain? → If no, this step does not apply\n3. Does the candidate/decision set match the immediately-prior ask's set exactly (same-set test above)? → Only relevant if item 1 passed. Both pass → skip the full ask; end with a status report\n4. Item 1 failed (no preceding cleanup) OR the set is only partially unchanged → compose at least the single-item confirmation form (Exception above) — never a bare status report with zero `AskUserQuestion` call\n5. Am I about to re-ask the same set a 2nd+ time in this chain hoping for a different answer? → Forbidden. Report and stop, or escalate to Step 0.65's direct free-text ask only if the set is now genuinely empty\n\n### Case history\n\nA session ran a RAG session-import skill (NOT `/cleanup`) mid-session, then `next` fired twice in the same chain. Both times the assistant applied this step's exemption on the \"candidate set unchanged\" test alone (2 carryover backlog items) and ended with a plain-text status report, no `AskUserQuestion` — even after the Stop hook re-fired the same \"no next call\" complaint twice. The precondition that was missing: the intervening action was an import, not a cleanup, so the silent-skip path was never actually available — at minimum a single-item confirmation ask was owed each time. The user corrected this directly, stating that skipping the ask is acceptable in exactly one case: right after a cleanup run.\n\n## Step 0.7: User current-work confirmation ask (HARD STOP — required when user-action state is unclear)\n\n**Before composing options, if any of the following conditions apply, ask the user \"what are you currently working on / waiting for\" FIRST. Do not bake assumptions into option descriptions.**\n\n### Precedence gate — populated pending backlog ≠ unclear current work (HARD STOP, fires FIRST)\n\n**A non-empty pending TaskList means work exists. Whenever Step 0.5's TaskList read returns ≥1 pending task, the \"no work to do\" / \"nothing to resume\" / \"current activity unclear\" framings are FORBIDDEN — the backlog IS the work.** This gate fires BEFORE the trigger conditions below: even when the Stop hook auto-invoked `next` after a resume/assigned task completed (or the resume turned out to be a no-op / already-done), a populated backlog is NOT an \"unclear current activity\" situation. Unclear-activity handling (the trigger table below) applies only when the backlog is empty or genuinely ambiguous (e.g., 2+ in_progress with no clear pending queue).\n\n**Autonomous-loop re-fire is also covered (HARD STOP)**: a Stop-hook-driven re-feed of a generic continuation prompt (e.g. a ralph-style loop's repeated \"proceed with task until X, then cleanup\" text, or any similar autonomous-loop channel) is a resumed-work moment exactly like the ones this gate already governs — it is NOT a separate free-text instruction to interpret ad-hoc each time. On any such re-fire, check TaskList/`fix_plan.md` for actionable pending items and start the top one BEFORE doing anything else — before re-checking context-usage thresholds, before running cleanup, before any side-investigation the re-fed text superficially suggests. A re-fed loop prompt saying \"proceed with task\" is an instruction to work the backlog, not license to decide anew each iteration what \"task\" means from scratch. (Case history: a multi-iteration autonomous-loop session never advanced any of its registered pending TaskList items — every iteration was absorbed into cleanup/fix/ask cycles because the re-fed prompt was treated as free text instead of routed through this gate.)\n\n| Signal | Wrong response (forbidden) |\n\nFile v0.11.0:CHANGELOG.md\n\n# Changelog\n\n## [0.11.0](https://github.com/es6kr/skills/compare/next-v0.10.2...next-v0.11.0) (2026-09-30)\n\n\n### Features\n\n* **next:** enhance candidate discovery, context heuristics, and decision gates ([bdf3cd9](https://github.com/es6kr/skills/commit/bdf3cd9c3a38091cff85be9db382d7a1d8def496))\n\n\n### Bug Fixes\n\n* **next:** add already-satisfied candidate verification to option diversity gate ([1b6fc6c](https://github.com/es6kr/skills/commit/1b6fc6c11c94f91c1f2a75b22db7bd0ca8ae58b7))\n* **next:** add CodeRabbit tier x visibility gate to After-PR-creation pattern ([7bcae82](https://github.com/es6kr/skills/commit/7bcae82e38ee1d5eb08b785520518422b64a3ddd))\n* **next:** add continuation-over-re-ask gate, positive cleanup trigger, and harness candidate patterns ([88b5a26](https://github.com/es6kr/skills/commit/88b5a265287e85477c9196135e879e5d774544ec))\n* **next:** assume &lt;20% context right after /compact; generalize staleness gate to loop promises ([d88230a](https://github.com/es6kr/skills/commit/d88230a152d2d1d19884fb1583bc13bcb9290cde))\n* **next:** close chain-blindness gap for Step 0.4 prose-decision drops ([dba4b29](https://github.com/es6kr/skills/commit/dba4b294222a7046432d64564e72752403950cb0))\n* **next:** rank registered TaskList items above checklist-only backlog and frame them as actionable proceed ([c09074e](https://github.com/es6kr/skills/commit/c09074e92da799fa9f7be80f47e3abdd2d350b65))\n* **next:** require cross-workspace target labeling for fix_plan candidates ([5f7774c](https://github.com/es6kr/skills/commit/5f7774c9a6ddfd1f5053750c97af4dbfc395aa2d))\n* **next:** scope End-session-never-Recommended rule to all ask paths ([181f3e2](https://github.com/es6kr/skills/commit/181f3e23631d72ecf184db4c6cb8e2915e37f8cd))\n\n## [0.10.2](https://github.com/es6kr/skills/compare/next-v0.10.1...next-v0.10.2) (2026-09-24)\n\n\n### Bug Fixes\n\n* **next:** mandate physical cleanup skill invocation before wrapup ([#513](https://github.com/es6kr/skills/issues/513)) ([4773fe2](https://github.com/es6kr/skills/commit/4773fe2ca7ee01f21f7794cb588df605527f6879))\n* **next:** prioritize explicit invocation-argument candidates over generic sweep ([#543](https://github.com/es6kr/skills/issues/543)) ([4fd3850](https://github.com/es6kr/skills/commit/4fd38502af59bffb9157c03a4351dabbd66dfc2e))\n\n## [0.10.1](https://github.com/es6kr/skills/compare/next-v0.10.0...next-v0.10.1) (2026-09-18)\n\n\n### Bug Fixes\n\n* **cleanup:** make the session-end report table self-sufficient ([#487](https://github.com/es6kr/skills/issues/487)) ([c4a0255](https://github.com/es6kr/skills/commit/c4a02557fb8de3b32cf337c549f62535dabf824b))\n\n## [0.10.0](https://github.com/es6kr/skills/compare/next-v0.9.2...next-v0.10.0) (2026-09-06)\n\n\n### Features\n\n* **cc-plugin:** implement post-commit dev-reflect and cache drift guard ([3f78c05](https://github.com/es6kr/skills/commit/3f78c054e7c00e7c33730d3378c5aff6575566e4))\n\n## [0.9.2](https://github.com/es6kr/skills/compare/next-v0.9.1...next-v0.9.2) (2026-09-01)\n\n\n### Bug Fixes\n\n* **next:** add plan-doc self-authored-decision premise-verification row ([#402](https://github.com/es6kr/skills/issues/402)) ([ea5f911](https://github.com/es6kr/skills/commit/ea5f91111095c7f428317962d53108e21f131843))\n* staging branch next-fix sync into main ([bbbd460](https://github.com/es6kr/skills/commit/bbbd460bf3b6b1cba4c6d07b3641afa734c89860))\n\n## [0.9.1](https://github.com/es6kr/skills/compare/next-v0.9.0...next-v0.9.1) (2026-08-26)\n\n\n### Bug Fixes\n\n* accumulate 16 patch-level bug fixes and guard enhancements across skills ([d214e5d](https://github.com/es6kr/skills/commit/d214e5dcc7fac1bc07baf3b6cec62999aea732f0))\n* **core:** align workflow steps, next suggestion patterns, and browser topics ([c68d489](https://github.com/es6kr/skills/commit/c68d489d01a79862b8933b4a0542168cf676cd3a))\n* **next:** remove duplicated foreground-vs-background spawn block ([e837bd5](https://github.com/es6kr/skills/commit/e837bd56bf06176dc035150d5935cab6fd1ea980))\n* **next:** require ask on every next-trigger re-fire, not just once after cleanup ([388aa3e](https://github.com/es6kr/skills/commit/388aa3e89139e7b501dbc31a244996cba8325e29))\n* **next:** require PR-URL rule even on Stop-hook-forced direct asks ([#364](https://github.com/es6kr/skills/issues/364)) ([1c37e30](https://github.com/es6kr/skills/commit/1c37e300c24f933abc520722c1787ee98b15b285))\n* promote accumulated skill fixes from the working checkout ([770bed2](https://github.com/es6kr/skills/commit/770bed2386266fc13f7d605505c2996037d4c371))\n* promote next-fix batch (consolidate fabrication guard, session rewind, config-driven PR base) ([7ca0ccb](https://github.com/es6kr/skills/commit/7ca0ccbf13cefafedc33a16a7361756c95f8b8f6))\n* resolve PR [#363](https://github.com/es6kr/skills/issues/363) audit Pending findings (plane_bulk_update profile, hook checker schema, regex, dedup) ([19ffc83](https://github.com/es6kr/skills/commit/19ffc83f296ad5568b82a85b104fcf419580c102))\n\n## [0.9.0](https://github.com/es6kr/skills/compare/next-v0.8.1...next-v0.9.0) (2026-08-20)\n\n\n### Features\n\n* promote next-feat batch (hook registry schema, self-reference path anchoring) ([0c33ffa](https://github.com/es6kr/skills/commit/0c33ffac99a9237f4530566470dabeaea128c209))\n* promote next-feat staging (lifecycle guards, triage automation, and workflow safety procedures) ([77d58ac](https://github.com/es6kr/skills/commit/77d58ac3a771a4897043c9eea8b149ea1e8ba2ff))\n\n\n### Bug Fixes\n\n* **hooks:** correct ghost path for block-wip-register-before-execute.sh ([d5875a2](https://github.com/es6kr/skills/commit/d5875a2e624eeb4a3dce9beba5d96a4365a8f950))\n* **next:** require a re-measure before executing a context-gate-justified choice ([#325](https://github.com/es6kr/skills/issues/325)) ([ed76956](https://github.com/es6kr/skills/commit/ed769564400494fe3a3b84ebc52cfee4ab1bcbbe))\n* promote next-fix batch (hook path repair, topic-dispatch scoping, conflict diagnosis) ([eb7ecb6](https://github.com/es6kr/skills/commit/eb7ecb61dda9701d78f12dc810781dc7cb687caa))\n\n\n### Refactor\n\n* **session:** rename claude-session to session skill ([318d6a1](https://github.com/es6kr/skills/commit/318d6a1fcc04621459e7f3e6cab2394bc0b68590))\n\n## [0.8.1](https://github.com/es6kr/skills/compare/next-v0.8.0...next-v0.8.1) (2026-08-17)\n\n\n### Bug Fixes\n\n* **next:** add multi-finding per-question ask pattern ([a3f2e48](https://github.com/es6kr/skills/commit/a3f2e48bbfd38ebfa56ce8a713bf2cf42556b150))\n* **next:** translate ask-gates next-call mandate to English + add PR-URL option rule ([58cc17b](https://github.com/es6kr/skills/commit/58cc17b51507c8673d500cb31c15e51f3257fe76))\n* promote next-fix staging (30 fixes across 14 skills) ([ee467c0](https://github.com/es6kr/skills/commit/ee467c045d779d7b80d30f160763ec3534a9742b))\n* **wip:** cross-ref PR-URL and TaskCreate subject repo-qualifier rules ([#186](https://github.com/es6kr/skills/issues/186)) ([4982364](https://github.com/es6kr/skills/commit/49823641a7b08123ebd0325273892bee41bc3280))\n\n## [0.8.0](https://github.com/es6kr/skills/compare/next-v0.7.3...next-v0.8.0) (2026-08-16)\n\n\n### Features\n\n* merge next-feat into main ([#313](https://github.com/es6kr/skills/issues/313)) ([2d9308a](https://github.com/es6kr/skills/commit/2d9308ab3e7e0086a88a7f64d3ed4d5c4d36e017))\n\n\n### Bug Fixes\n\n* **next:** require a post-compact re-measure before the context-usage gate fires ([288a4bd](https://github.com/es6kr/skills/commit/288a4bd0228304e44031d44e3c3baf2a7dba89eb))\n* **next:** require a post-compact re-measure before the context-usage gate fires ([7ca17b7](https://github.com/es6kr/skills/commit/7ca17b71dc735c1579af6cd62e1206eeda3a6081))\n\n## [0.7.3](https://github.com/es6kr/skills/compare/next-v0.7.2...next-v0.7.3) (2026-08-12)\n\n\n### Bug Fixes\n\n* **next:** route autonomous-loop re-fire through the TaskList precedence gate ([1030498](https://github.com/es6kr/skills/commit/1030498a6d9c0fa5774a93b4b9284c2db3402918))\n* promote accumulated next-fix fixes to main ([803bbd3](https://github.com/es6kr/skills/commit/803bbd3b9e4f8367ee1b955cfa2b6a536f85cee0))\n\n## [0.7.2](https://github.com/es6kr/skills/compare/next-v0.7.1...next-v0.7.2) (2026-08-09)\n\n\n### Bug Fixes\n\n* **consolidate:** address CodeRabbit/Copilot review findings on PR [#270](https://github.com/es6kr/skills/issues/270) ([3b11a73](https://github.com/es6kr/skills/commit/3b11a730b5ad68803d35a8264eda540e48265d75))\n* **next:** register a lightweight tracking task for substantial candidate discovery ([#242](https://github.com/es6kr/skills/issues/242)) ([29c18d6](https://github.com/es6kr/skills/commit/29c18d6c6714f4c1d30b59aa50a277f8dbf998cd))\n* **next:** skip re-asking an unchanged candidate set within the same stop_hook_active chain ([2f763c5](https://github.com/es6kr/skills/commit/2f763c50ed1ff34d5ffab2ce5432d692160dbc0b))\n* promote accumulated next-fix fixes to main ([95656e9](https://github.com/es6kr/skills/commit/95656e9b551ee0bb77904a0a571d49c53bc01cc9))\n\n## [0.7.1](https://github.com/es6kr/skills/compare/next-v0.7.0...next-v0.7.1) (2026-08-05)\n\n\n### Bug Fixes\n\n* **next:** gate cleanup and fix_plan behaviors on backing-skill availability ([#208](https://github.com/es6kr/skills/issues/208)) ([5d4fa0f](https://github.com/es6kr/skills/commit/5d4fa0f2f4e0f415196d532436b74fa86573ea1d))\n* **next:** log Stop-hook blind-spot guards + widen reactive-guard fire condition ([ac44eaa](https://github.com/es6kr/skills/commit/ac44eaa0f53401ab2789134c973b67e1e86fe0d0))\n* **next:** log Stop-hook blind-spot guards + widen reactive-guard fire condition ([34c68b5](https://github.com/es6kr/skills/commit/34c68b5fdd57f384e87d17922836ad9a26d999a8))\n* **next:** remove hooks ported to next-invocation-guard plugin ([90d23a9](https://github.com/es6kr/skills/commit/90d23a9a5a29316d90a48639da9394a8ff8e02c1))\n* promote next-fix staging (38 fixes across 16 skills) ([94f8c33](https://github.com/es6kr/skills/commit/94f8c33800ce411ae63e22c5259cdae8435508a4))\n* **wip:** cross-ref PR-URL and TaskCreate subject repo-qualifier rules ([#186](https://github.com/es6kr/skills/issues/186)) ([951c1e6](https://github.com/es6kr/skills/commit/951c1e6871e78e226757c6a7ae5ae53efeb7bfb0))\n\n## [0.7.0](https://github.com/es6kr/skills/compare/next-v0.6.0...next-v0.7.0) (2026-07-28)\n\n\n### Features\n\n* bundle next-feat — fix-plan expansion, next reactive guard, github-repo extraction ([#195](https://github.com/es6kr/skills/issues/195)) ([cd65a85](https://github.com/es6kr/skills/commit/cd65a8519c88f080321d746ef197e90713039fa6))\n* **next:** add reactive continuation-chain guard (UserPromptSubmit) ([178f434](https://github.com/es6kr/skills/commit/178f4340cd336214ef2c36dfd8d4b45419dfa95e))\n\n\n### Bug Fixes\n\n* **next-fix:** promote staged fixes across hook-kit, next, cleanup, fix-plan ([34f1c67](https://github.com/es6kr/skills/commit/34f1c67beee3a8279e0e80de4ab3a87ba2223d5c))\n* **next,fix,wip:** reduce meta-task over-registration + enforce skill-invocation resume ([beec453](https://github.com/es6kr/skills/commit/beec453da85d70c79ec9403c83259e7a4a28d303))\n* **next,fix:** close the chained-turn next-call gap (12th recurrence) ([dd7c582](https://github.com/es6kr/skills/commit/dd7c58286a355a2451cb9e0a6f08ef1865dbe018))\n* **next:** add Antigravity context-usage cleanup gate; englishize cleanup-selection labels ([e461b22](https://github.com/es6kr/skills/commit/e461b22b456cfaa2efff6d2dcfe805954264b10a))\n* **next:** check linked plan doc's Progress Checklist before premise-verification asks ([57c2614](https://github.com/es6kr/skills/commit/57c261486ffeb63c258d3713a9c28dd1a4a34d17))\n* **next:** check linked plan doc's Progress Checklist before premise-verification asks ([f90828e](https://github.com/es6kr/skills/commit/f90828e168c881af3ddbbed9e43810daadeab843))\n* **next:** check linked plan doc's Progress Checklist before premise-verification asks ([#164](https://github.com/es6kr/skills/issues/164)) ([57c2614](https://github.com/es6kr/skills/commit/57c261486ffeb63c258d3713a9c28dd1a4a34d17))\n* **next:** drop dangling depends-on: hook reference ([#159](https://github.com/es6kr/skills/issues/159)) ([3c0eb46](https://github.com/es6kr/skills/commit/3c0eb46697ec7f468c74cbe9dfc8575a204f3094))\n* **next:** gitignore *.debug.log to prevent path leak on PUBLIC repo ([1f5dd30](https://github.com/es6kr/skills/commit/1f5dd300dc0d9653fe0fd06b32c89fcfd6e18c2a))\n* **next:** log stop_hook_active suppression for reactive-guard signal ([8bf95b9](https://github.com/es6kr/skills/commit/8bf95b9ae8cf9aa1323d4e1f5835052561cb0d50))\n* **next:** require a no-parallel-work check before backgrounding an agent ([#155](https://github.com/es6kr/skills/issues/155)) ([ff5a26b](https://github.com/es6kr/skills/commit/ff5a26b149a19247ce6fd39ca23d7a9afce24ad4))\n* **next:** scope the tool-call-only guard to the whole turn ([31cce42](https://github.com/es6kr/skills/commit/31cce426a6369bd0a99d54a6ac54151aa9c19ae7))\n* **next:** suppress reactive-guard false positive on ask-terminal turns ([2b80f12](https://github.com/es6kr/skills/commit/2b80f12972f173bf3e21d220f5cd62e2e8262e18))\n* **next:** treat TaskList-unavailable as empty + check all session-visited workspaces ([2d401b9](https://github.com/es6kr/skills/commit/2d401b9e5c9002ebd0c5ee13a6957e3788b86ae0))\n* resolve PR [#197](https://github.com/es6kr/skills/issues/197) review findings (CodeRabbit + Copilot + Internal Review) ([b54236a](https://github.com/es6kr/skills/commit/b54236a4fa4b3fef23645dfc3b184916980b7f65))\n* staging bundle — meta-task registration, next-call-gap, bash-guard consolidation, hook-kit FP fixes ([dc1b790](https://github.com/es6kr/skills/commit/dc1b790688808df7649ef390a22caa5f66a8aa40))\n\n## [0.6.0](https://github.com/es6kr/skills/compare/next-v0.5.1...next-v0.6.0) (2026-07-23)\n\n\n### Features\n\n* **consolidate:** address PR 134 reviews and reflect orange/yellow severity display rules ([e6118d0](https://github.com/es6kr/skills/commit/e6118d0fb0217a4c4ad388b82e574203a8f9258e))\n* **hook-kit:** add pre-tool AskUserQuestion context gate ([#123](https://github.com/es6kr/skills/issues/123)) ([271b5b3](https://github.com/es6kr/skills/commit/271b5b37df5e64cf3185b2c81c3d97b66789e9ab))\n* **next-feat:** accumulate features for hook-kit context gate ([df4f73a](https://github.com/es6kr/skills/commit/df4f73ae4d27d4919105da70c6c94a14a32e8056))\n* **next:** wire Stop auto-invocation via script action + jq portability ([de2bed5](https://github.com/es6kr/skills/commit/de2bed5489a247a21eab54c0e13b27ae00d18196))\n* skills topic bundle — brief/email, code-workflow/plan-research-search, git-repo topics, skill-kit/invoke-discipline ([7fd877d](https://github.com/es6kr/skills/commit/7fd877da1b703fcdcdcaf1a3ce912f885abfa3f0))\n\n\n### Bug Fixes\n\n* **next:** require \"draft PR\" in option descriptions proposing PR creation ([7925177](https://github.com/es6kr/skills/commit/79251773a2aef74b5bc44f12a3a943a73ac37d02))\n\n## [0.5.1](https://github.com/es6kr/skills/compare/next-v0.5.0...next-v0.5.1) (2026-07-19)\n\n\n### Bug Fixes\n\n* **claude-session,consolidate,next:** promote next-fix staging ([902cfa5](https://github.com/es6kr/skills/commit/902cfa57de68d9f5487425b524ffa4441f81f302))\n* **next:** add operational-failure precedence gate to suggestion-patterns ([448e3ca](https://github.com/es6kr/skills/commit/448e3caf688b0eb37c2bd5281c3c28640378ec8e))\n* **next:** add populated-backlog precedence gate to ask-gates Step 0.7 ([5e01f88](https://github.com/es6kr/skills/commit/5e01f886b167ddce8fb871d077195cd45295cc69))\n* **next:** operational-failure + populated-backlog precedence gates ([45a5b11](https://github.com/es6kr/skills/commit/45a5b1153f37e30d32d1350b86a64c8da03ffb20))\n\n## [0.5.0](https://github.com/es6kr/skills/compare/next-v0.4.4...next-v0.5.0) (2026-07-07)\n\n\n### Features\n\n* **docxport:** promote initial registration to main ([8265ba3](https://github.com/es6kr/skills/commit/8265ba33b13ab6054c3595943d068f5c1c13625a))\n* **github-flow,next:** draft-PR default + sync remaining pr-review→pr topic refs ([ca64425](https://github.com/es6kr/skills/commit/ca644253c8b84b41f8a90d7869ac16fa8c7c7124))\n* **skills:** drift sync bundle — cc-plugin/github-flow/wip/next/check-hangul ([ac5d15d](https://github.com/es6kr/skills/commit/ac5d15d7231e67b3b53cae3861bb6132a2f3beff))\n\n## [0.4.4](https://github.com/es6kr/skills/compare/next-v0.4.3...next-v0.4.4) (2026-07-03)\n\n\n### Bug Fixes\n\n* **skills:** patch bundle — consolidate/next/fix/skill-kit/github-flow ([3cb90cb](https://github.com/es6kr/skills/commit/3cb90cb7601f619b63518860bebfb693d58a7633))\n\n## [0.4.3](https://github.com/es6kr/skills/compare/next-v0.4.2...next-v0.4.3) (2026-06-30)\n\n\n### Bug Fixes\n\n* **skills:** add procedural guards + standardize description scalar ([#66](https://github.com/es6kr/skills/issues/66)) ([fcc921f](https://github.com/es6kr/skills/commit/fcc921fba3928aad7421ecff888d5dcee5ae5655))\n\n## [0.4.2](https://github.com/es6kr/skills/compare/next-v0.4.1...next-v0.4.2) (2026-06-19)\n\n\n### Bug Fixes\n\n* bundle skill patches across 7 scopes ([f18f47c](https://github.com/es6kr/skills/commit/f18f47c2d05f13b8e3f3ad42675a2dabbb31c824))\n* **next:** block-style depends-on + suggestion-patterns Read mandate + option diversity ([3127d4e](https://github.com/es6kr/skills/commit/3127d4eadf5399c65ffb9036c6fe567afb0da507))\n* **next:** enforce closed-list discipline on Step 0.3 ask-skip gate ([486ea9c](https://github.com/es6kr/skills/commit/486ea9c2f7b2fe5cec685123f5330a276b0350bb))\n* **next:** require branch convention pre-check before Push / Create PR options ([3c06f52](https://github.com/es6kr/skills/commit/3c06f5282cc17bdd750102a928f17e09f89a12ad))\n* **next:** syntax-fix multiSelect example + tighten ask-gates inverse-extrapolation paragraph ([9e112da](https://github.com/es6kr/skills/commit/9e112dad4885205e378571a78a48759f1329077d))\n\n## [0.4.1](https://github.com/es6kr/skills/compare/next-v0.4.0...next-v0.4.1) (2026-06-13)\n\n\n### Refactor\n\n* **fix,next:** decompose oversized SKILL.md into topic files ([#51](https://github.com/es6kr/skills/issues/51)) ([525eb17](https://github.com/es6kr/skills/commit/525eb170c1c3d371c76a4b1ef8033d624cea6002))\n\n## [0.4.0](https://github.com/es6kr/skills/compare/next-v0.3.0...next-v0.4.0) (2026-06-12)\n\n\n### Features\n\n* decompose workflow/git rules + rename web-ui-test→web-browser ([#50](https://github.com/es6kr/skills/issues/50)) ([e10d48f](https://github.com/es6kr/skills/commit/e10d48fea4e507b95888de44812b53484d32128d))\n\n## [0.3.0](https://github.com/es6kr/skills/compare/next-v0.2.0...next-v0.3.0) (2026-06-03)\n\n\n### Features\n\n* **next:** rename next-action to next, add stall-detect topic ([ce88856](https://github.com/es6kr/skills/commit/ce88856615f05e384fb2a1fdf1bfdd96cf19cfdb))\n* **next:** separate in-progress vs waiting-on ask + trigger script ([3c94432](https://github.com/es6kr/skills/commit/3c94432169975f13d177f47ddd3afb52cf27fc1b))\n* **release-please:** adopt release-please for monorepo version automation ([#7](https://github.com/es6kr/skills/issues/7) Phase 2) ([1cd02b8](https://github.com/es6kr/skills/commit/1cd02b861b0c8eb31b3be441c9ddab0870e5954b))\n\n\n### Bug Fixes\n\n* **skills:** address PR [#9](https://github.com/es6kr/skills/issues/9) deferred review feedback ([9268a83](https://github.com/es6kr/skills/commit/9268a83ec98a32a8bf731398503c46e60328b1a3))\n* **skills:** translate fix/next to English + data-architecture locale patterns ([#9](https://github.com/es6kr/skills/issues/9)) ([d426d2b](https://github.com/es6kr/skills/commit/d426d2b7dfec9f82a3106d1df055763324220bba))\n\n\n### Documentation\n\n* **next:** clarify next-trigger.sh emits JSON, not a bare marker ([ca5389a](https://github.com/es6kr/skills/commit/ca5389a28050837ebbfb174d243345a616c94fa8))\n\n## [0.2.0](https://github.com/es6kr/skills/compare/next-v0.1.1...next-v0.2.0) (2026-05-24)\n\n\n### Features\n\n* **release-please:** adopt release-please for monorepo version automation ([#7](https://github.com/es6kr/skills/issues/7) Phase 2) ([1cd02b8](https://github.com/es6kr/skills/commit/1cd02b861b0c8eb31b3be441c9ddab0870e5954b))\n\n\n### Bug Fixes\n\n* **skills:** address PR [#9](https://github.com/es6kr/skills/issues/9) deferred review feedback ([9268a83](https://github.com/es6kr/skills/commit/9268a83ec98a32a8bf731398503c46e60328b1a3))\n\nFile v0.11.0:skill-card.md\n\n## Description:\n\nSuggests practical next actions after a task, including follow-up options for stalled work.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[drumrobot](https://clawhub.ai/user/drumrobot)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers and other assistant users use this skill to find actionable follow-ups after finishing a task, spot stalled steps, and choose what to do next.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Persistent hooks can automatically prompt for next actions.\n\nMitigation: Review hook paths and enable them only if automatic suggestions are wanted.\n\nRisk: Next-action discovery may inspect transcripts, task state, GitHub/CI context, and planning files across visited workspaces.\n\nMitigation: Limit use to trusted workspaces and review the scope of accessible project information.\n\nRisk: A helper-script lookup may execute code from agent plugin directories.\n\nMitigation: Verify the helper-script path and contents before enabling hooks.\n\n## Reference(s):\n\n- [Next skill listing](https://clawhub.ai/drumrobot/skills/next)\n- [Stall detection](artifact/stall-detect.md)\n- [Ask gates](artifact/ask-gates.md)\n- [Suggestion patterns](artifact/suggestion-patterns.md)\n\n## Skill Output:\n\n**Output Type(s):** [Guidance, Text]\n\n**Output Format:** [Markdown with next-action options and a user-selection prompt]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Suggestions depend on the current task and available skills.]\n\n## Skill Version(s):\n\n0.11.0 (source: ClawHub release)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nFile v0.11.0:stall-detect.md\n\n# Stall Detection\n\nDetect when a completed action requires follow-up steps that are not being executed, and invoke `/fix` to resolve.\n\n## When to Activate\n\nThis topic runs as a **post-completion check** after `/next` suggests actions or after any skill completes.\n\n### Stall Signals\n\n| Signal | Example |\n|--------|---------|\n| Skill completed but pending tasks remain | ClawHub deploy done, but sync.sh not run |\n| CodeRabbit review received but no action taken | PR has actionable comments, assistant is idle |\n| Commit done but push not offered | `git commit` succeeded, no push prompt |\n| Test failed but no diagnosis started | Test output shows failure, assistant reports \"done\" |\n| CI triggered but result not checked | `gh run rerun` executed, no `gh run watch` follow-up |\n| AskUserQuestion answered but action not executed | User selected an option, assistant acknowledged but didn't act |\n\n### Detection Logic\n\nAfter any task completion or skill execution:\n\n1. **Check pending tasks**: Are there uncompleted tasks in the task list?\n2. **Check workflow rules**: Does an active workflow rule mandate a follow-up step? (e.g., CI pass → verify unchecked Test Plan items)\n3. **Check PR/issue body**: Are there unchecked `- [ ]` items in the PR Test plan or issue checklist?\n4. **Check fix_plan.md**: Does the current item have incomplete sub-steps?\n5. **Check skill procedure**: Did the skill's documented steps complete fully?\n6. **Check user response**: Did the user answer an AskUserQuestion that implies an action?\n\nIf any of the above is true and no action is being taken → **invoke `/fix`**.\n\n## Invocation\n\n```\nSkill(\"fix\", \"stall detected: <description of what's stalled>\")\n```\n\nThe fix skill will:\n1. Identify the root cause (which step was skipped)\n2. Execute the missing step\n3. Record the pattern to prevent recurrence\n\n## Examples\n\n### Example 1: Deploy without sync\n\n```\nCompleted: clawhub publish session v0.1.2\nStall: sync.sh not run, es6kr/skills repo not updated\n→ Skill(\"fix\", \"stall detected: ClawHub publish completed but es6kr/skills sync not executed\")\n```\n\n### Example 2: User selection ignored\n\n```\nAskUserQuestion answer: \"proceed\" (proceed with publish)\nStall: No clawhub publish command executed after approval\n→ Skill(\"fix\", \"stall detected: user approved publish but no action taken\")\n```\n\n### Example 3: CI result not checked\n\n```\nCompleted: git push origin develop\nStall: No gh run watch or CI status check initiated\n→ Skill(\"fix\", \"stall detected: push completed but CI result not monitored\")\n```\n\nFile v0.11.0:suggestion-patterns.md\n\n# Suggestion Patterns\n\n## Cross-cutting rule — PR/issue references in options require the full URL (HARD STOP)\n\n**When any option disposes of a PR or issue, expose the clickable full URL (`https://github.com/<owner>/<repo>/pull/<N>`) in the question text or that option's description.** A bare \"PR #N\" — even with the repo name attached — is insufficient: the ask is a self-contained decision UI, and the user must be able to open and inspect the PR before deciding, without hunting through scroll-back. Applies to every \"After PR\" pattern below. Enforced by the `block-tasklist-id-in-conversation.sh` PR-URL gate (a PR reference with no PR URL anywhere in the questions payload is denied). Recurrence history: see failed-attempts.md (grep \"bare PR\").\n\n## Cross-cutting rule — Minor-or-below severity bundling across PRs (HARD STOP)\n\n**When composing next-action options after a PR is consolidated / merged, do NOT recommend addressing that PR's Minor/Nitpick deferred findings as a standalone follow-up (single-PR batch).** Minor-or-below severity findings should be bundled across related PRs, not surfaced per-PR.\n\n**Why**: Minor/Nitpick findings are documentation/style/rationale-class concerns whose cost of single-PR churn (branch + PR + review cycle × N) exceeds the value. Aggregating multiple PRs' Minor findings amortizes the review cycle over a larger batch. Applying per-PR to Minor findings pressures the user into micro-batches that they explicitly want to defer for cross-PR aggregation.\n\n**Applies to**: All \"After PR\" sections below (After PR fix commit push, After PR creation, After PR consolidate, After session wrap-up when a PR just merged).\n\n**Severity classification** (aligned with `consolidate/classify.md`):\n\n| Severity | Handling in next-action options |\n|----------|--------------------------------|\n| 🔴 Critical | Per-PR immediate action (block merge until resolved) |\n| 🟠 Important | Per-PR immediate action (recommended to resolve before merge) |\n| 🟡 **Minor** | **Cross-PR bundle** (aggregate across related PRs' deferred findings) |\n| ⚪ **Nitpick** | **Cross-PR bundle** (same as Minor) |\n\n### Don't / Do\n\n| # | Don't | Do |\n|---|-------|-----|\n| 1 | Compose option \"Address PR #\\<N\\> Minor #x/y/z follow-ups\" as a next-action after a PR merge / consolidate | Omit single-PR Minor-only options. If Minor bundling is desired, offer \"Bundle Minor findings across related PRs (fix_plan sweep)\" with no specific PR in the label |\n| 2 | Batch 3-4 Minor findings from a single PR into a \"quick documentation batch\" as Recommended | Verify at least 2 related PRs' Minor findings exist. If only 1 PR has deferred Minor → defer to a later bundle round-up, not immediate action |\n| 3 | Interpret \"close scope\" (docs across sibling skills within one PR) as a reason to group per-PR Minors | Scope closeness within a single PR's Minors is not the bundling criterion. Cross-PR aggregation is |\n| 4 | Treat Important/Critical findings the same way (bundle across PRs) | Important/Critical = per-PR immediate action. Only Minor/Nitpick = cross-PR bundle |\n| 5 | Use per-PR Minor batch as a filler option to reach 4 slots | Better to have 3 diverse options than 4 with one violating this rule. Or find a genuinely diverse 4th (helper skill, broader task, verification-only) |\n\n### Self-check (every time before composing after-PR next-action options)\n\n1. Do any of the options mention \"Minor\" or \"Nitpick\" from a specific PR (by number)? → If yes, remove the single-PR Minor option\n2. If Minor bundling is a candidate, does it reference cross-PR aggregation (fix_plan sweep, `[DEFERRED] [REVIEW_FEEDBACK]` grep across all recent PRs)? → If no, rewrite\n3. Are Important/Critical findings from the current PR still surfaced as per-PR immediate action? → They should be (this rule affects only Minor/Nitpick)\n4. If only 1 PR has deferred Minor findings and no bundle exists yet, is the Minor option omitted entirely? → It should be. The candidate goes into fix_plan and waits for the next PR's Minor findings\n\n## Cross-cutting rule — PR creation in option description (HARD STOP)\n\n**Whenever an AskUserQuestion option proposes PR creation (in any \"After X\" section below), the option `description` MUST explicitly state \"draft PR\".** Bare \"create PR\" / \"PR\" is forbidden. The `--ready` (non-draft) variant must be offered as a **separate option** (different axis), not bundled into the same description.\n\n**Why**: `github-flow/pr.md` enforces \"Draft is the DEFAULT (HARD STOP)\" at `gh pr create` execution time. But option descriptions written before execution are the user's primary decision medium — if \"create PR\" is shown without specifying draft, the user may interpret it as a ready-for-review PR (CodeRabbit/Copilot fire immediately on ready PRs, review cost grows). Option description must mirror the executed command's intent verbatim. `--ready` toggle is a meaningful axis — separating it lets the user make the draft vs ready choice consciously.\n\n### Don't / Do\n\n| # | Don't | Do |\n|---|-------|-----|\n| 1 | `description: \"...→ create PR + merge\"` (draft unspecified) | `description: \"...→ create draft PR + merge\"` |\n| 2 | `description: \"worktree → cherry-pick → push → PR\"` | `description: \"worktree → cherry-pick → push → draft PR\"` |\n| 3 | Bundle ready-PR toggle into the draft-PR option | Separate axis: option 1 = \"create draft PR\", option 2 = \"create ready PR (CodeRabbit/Copilot fires immediately)\" |\n| 4 | Omit \"draft\" from description on the rationale that \"draft vs ready is decided at gh pr create time\" | description = user's primary decision medium. Mirror the command's intent (draft default) verbatim |\n| 5 | Include `--ready` in every PR ask by default | `--ready` is offered as a separate axis on explicit user request. Default option = draft. Ready only when the user explicitly chooses it |\n\n### Self-check (HARD STOP — before drafting any option array that mentions PR creation)\n\n1. Does the option description contain \"PR\"? — If yes, continue\n2. Does it specify \"**draft PR**\" explicitly? — If no, add \"draft\" before \"PR\"\n3. If `--ready` is needed, is it a **separate option** (different axis), not bundled with draft option? — If bundled, split into 2 options\n4. Multi-PR scenarios (e.g., \"3-way worktree+PR\"): does the description say \"**draft PRs**\" (plural-aware) for each? — If just \"PRs\", replace with \"draft PRs\"\n\n### Cross-ref\n\n- `github-flow/pr.md` lines 13-14, 276-279 (Draft-default HARD STOP at execution time) — this skill mirrors that rule into option-description time.\n- Triggering keyword in option description (any locale): `create PR`, `PR creation`, `register PR`, `worktree+PR`, `cherry-pick + PR`, `gh pr create`, and equivalent localized forms. Any of these without a \"draft\" qualifier = violation.\n\n## Cross-cutting rule — Antigravity unapproved PR clawo delegation in next-action options (HARD STOP)\n\n**In the Antigravity (Gemini) environment, whenever composing next-action options, proposing unapproved/unmerged PR review, consolidation, or remediation as a direct task for the main Antigravity session is strictly forbidden (`HARD STOP`).**\n\nIf an unapproved PR is surfaced as a candidate from open PR discovery (`gh pr list`), it MUST be explicitly framed as delegating to `clawo` (e.g. `[clawo] PR #<N> delegate consolidate review (/clawo consolidate PR #<N>)`), never as direct in-session review. **When dispatching the clawo session, the prompt passed to clawo MUST explicitly execute `/consolidate pr <PR_URL>` (or `/consolidate pr #<N>`) as its entry point.**\n\n### Don't / Do\n\n| # | Don't | Do |\n|---|-------|-----|\n| 1 | Propose \"[repo] PR #<N> review & process\" as a direct option in Antigravity | Frame explicitly as \"[clawo] PR #<N> delegate consolidate (/clawo consolidate PR #<N>)\" |\n| 2 | Start direct code review or consolidate inside the main Antigravity turn | Dispatch the PR workflow to an isolated `clawo` session (`Skill(\"clawo\", \"launch\")`) |\n| 3 | Surface open PRs without checking if the current environment is Antigravity | When in Antigravity, all unapproved PR candidates must carry the `[clawo]` prefix and delegation command |\n| 4 | Send unstructured instructions (\"verify and merge...\") in the clawo prompt | Explicitly pass `/consolidate pr <PR_URL>` so the worker runs the standard consolidate workflow |\n\n## Deferred-status overrides severity + pending-task precedence (HARD STOP)\n\nThe severity table above governs findings **inside the current PR's diff**. A finding that is **deferred by status** — outside the PR's diff, explicitly postponed, or parked in a fix_plan hold section — is bundle-and-late **regardless of severity** (even 🟠 Important / 🔴 Critical). It must NOT appear as an individual next-action option while real pending backlog work exists.\n\nTwo independent errors this gate prevents: (a) surfacing a deferred-status finding as a discrete option, and (b) failing to pull the actual pending TaskList backlog as the primary candidate source. \"There are tasks to finish — don't spend a next-action slot on a deferred item.\" Deferred findings aggregate into a late bundle (fix_plan sweep); they are never a slot-filler.\n\n| # | Don't | Do |\n|---|-------|-----|\n| 1 | Surface a deferred-status Important/Critical finding (out-of-diff, fix_plan hold, postponed) as an individual next-action option | Deferred STATUS overrides severity → aggregate into a late bundle. Not an individual option, even at the bottom of the list |\n| 2 | Read \"Important = per-PR immediate action\" and surface an out-of-scope Important finding | \"Per-PR immediate\" applies only to findings IN the PR diff. Out-of-diff / postponed = deferred status = bundle + late |\n| 3 | Fill an option slot with a deferred finding when pending TaskList tasks exist | Pending backlog tasks are the candidates. Prefer 3 real options over a 4th deferred filler |\n| 4 | Anchor option discovery only on \"this PR's follow-ups\" (merge / deferred finding / cleanup) | Pull the actual pending TaskList backlog (Step 0.5) as primary candidates. The just-finished PR's deferred items are not the backlog |\n\n**Self-check (before composing next-action options after a PR)**:\n1. Is any option a finding deferred by STATUS (out-of-diff, fix_plan hold, postponed)? → Remove it; it goes to a late bundle regardless of severity\n2. Did I pull the actual pending TaskList backlog as candidates? → If the options are only \"this PR's follow-ups\", re-pull from TaskList\n3. Am I using a deferred finding as a slot-filler to reach 4? → Forbidden. 3 real backlog candidates beat 4 with a deferred filler\n\n## Operational-failure precedence (HARD STOP)\n\nThe severity/deferral rules above govern **review findings inside a PR diff**. A different class — an **operational failure discovered mid-task** (a red CI run, a broken publish/deploy pipeline, a failing release cascade) — is NOT a co-equal option-diversity slot. When it meets the gate below, it takes **precedence**: make it the Recommended #1 option, or handle it before composing the diversity ask at all.\n\nThis is about failures in the *system under work* (shared pipelines, released artifacts) that you discover while doing something else — distinct from the assistant's own tool-call errors.\n\n### Gate — SCOPE qualifier + at least one escalation test\n\n**SCOPE qualifier (entry condition)**: the failure sits on a **shared / production surface** — a released artifact, CI/CD, deploy, publish, or a pipeline other backlog tasks depend on. Excludes a single local test you just wrote, a scratch experiment, or a failure you intentionally induced.\n\n**Escalation tests (any ONE true → precedence)**:\n\n| # | Test | Question |\n|---|------|----------|\n| 1 | Accumulation | Does it repeat / worsen each cycle? (every release fails to publish) |\n| 2 | Blast radius | Does it affect multiple artifacts / downstream? (N releases unpublished) |\n| 3 | Blocks dependents | Does it gate other backlog tasks? |\n| 4 | Diagnostic decay | Does evidence degrade if deferred? (logs rotate, transient state) |\n| 5 | Irreversibility | Does continued operation risk irreversible harm? (an immutable bad publish) |\n\n### After the gate fires — self-fixability decides the ACTION (HARD STOP)\n\nA qualifying failure takes precedence, but \"handle first\" does NOT mean \"blindly apply a fix.\" Verify where the cause lives first:\n\n| Locus | Action |\n|-------|--------|\n| **Self-fixable** (config / version pin / code in a repo you own) | Diagnose → propose the fix → apply (ask first when it touches shared CI) |\n| **External / server-side** (a dependency's API, a third-party outage) | Do NOT ship a speculative local fix. Track it (record with a re-activation trigger) + optionally report upstream. A CLI/version bump does not fix a server-side regression |\n\nVerify the locus with **primary evidence** (changelog, upstream issue tracker, version timeline) **before** editing anything. A speculative \"bump the dependency\" edit on a server-side cause wastes a shared-CI commit and does not resolve the failure.\n\n### De-prioritize (stays a normal option — NOT forced first)\n\ncosmetic / style-only · already worked around · an external outage you cannot self-fix (after the locus check → track, don't force-fix) · a failure the user explicitly deferred.\n\n### Don't / Do\n\n| # | Don't | Do |\n|---|-------|-----|\n| 1 | Surface a SCOPE+escalation failure (broken publish/deploy/CI cascade) as a co-equal, non-Recommended diversity option | Make it the Recommended #1 option, or handle it before composing the ask |\n| 2 | Apply the \"4 diverse options\" rule uniformly, treating a red production pipeline like a feature-progress task | Run this gate FIRST. A qualifying failure preempts the normal diversity flow |\n| 3 | Ship a speculative local fix (dependency bump, config tweak) before confirming the cause is self-fixable | Verify locus with primary evidence first. Server-side cause → track, not local-fix |\n| 4 | Force EVERY failure first (cosmetic lint, one local red test, external SaaS 5xx) | Only SCOPE + ≥1 escalation. De-prioritize the excluded classes |\n\n### Self-check (runs BEFORE the option-diversity rule)\n\n1. Did I discover any failure this turn (red CI, broken publish/deploy, failing cascade)? → If yes, run the gate\n2. SCOPE met (shared/production surface) AND ≥1 escalation test true? → If yes, it is Recommended #1 (or handled before the ask), not a diversity slot\n3. Before proposing a fix, did I confirm the cause is self-fixable vs external via primary evidence? → external → track, don't ship a speculative fix\n4. Excluded class (cosmetic / local-test / external outage / user-deferred)? → normal option, do not force first\n\n## After analysis / review producing multiple findings (HARD STOP)\n\n**Precondition**: The just-completed work (code review, issue-comment analysis, audit, verification) produced **N ≥ 2 discrete findings** whose handling the user must decide — include in a comment, apply, correct, drop, or defer.\n\n**One question per finding — never bundle findings into one option.** Each finding is an independent decision axis. Packing N findings into a single option description (\"post the review comment with all 4 findings\") strips the user's per-finding authority: they can only take all-or-nothing. Automated ask-guards may not catch description-level bundling (descriptions are excluded from axis detection to avoid false positives), so this composition rule is the first line of defense.\n\n**Pattern (two-stage ask)**:\n\n1. **Per-finding call**: one question per finding via the `questions` array (max 4 questions per call; when N > 4, chunk into sequential calls of ≤4 — never drop the tail). Options per finding: `Include / Apply` · `Exclude / Drop` · `Defer` (+ auto \"Other\").\n2. **Disposition call**: after the per-finding answers arrive, ask the overall action (post the comment / record locally only / hold), composed from what the user selected. Phrase it without re-enumerating finding counts (a \"N findings\" token in a single question is itself a bundling signal).\n\n| # | Don't | Do |\n|---|-------|-----|\n| 1 | One option labeled \"post comment with all N findings\" | One question per finding first, disposition ask second |\n| 2 | `questions.length == 1` with the findings enumerated inside an option description | Split into the `questions` array — description-level bundling evades keyword/path axis detection |\n| 3 | Pre-deciding which findings are \"obviously worth including\" and bundling the rest | Obviousness is not a substitute for the user's per-finding decision |\n| 4 | Handling N > 4 by silently dropping low-priority findings | Chunk into sequential ≤4-question calls; every finding gets its own question |\n\n**Self-check (before any ask that disposes of analysis/review results)**: Did the completed work produce ≥2 discrete findings? → per-finding questions first, disposition second.\n\n## After code writing/modification\n\n```typescript\noptions: [\n  { label: \"Run tests\", description: \"Verify changes with test suite\" },\n  { label: \"Commit\", description: \"Git commit the changes\" }\n]\n```\n\n## After feature implementation\n\n```typescript\nmultiSelect: true,\noptions: [\n  { label: \"Write tests\", description: \"Add tests for new feature\" },\n  { label: \"Document\", description: \"Update README or JSDoc\" },\n  { label: \"Commit\", description: \"Git commit the changes\" }\n]\n```\n\n## After bug fix\n\n```typescript\nmultiSelect: true,\noptions: [\n  { label: \"Add regression test\", description: \"Prevent bug recurrence\" },\n  { label: \"Commit\", description: \"Git commit the fix\" },\n  { label: \"Close issue\", description: \"Close related issue\" }\n]\n```\n\n## After configuration change\n\n```typescript\noptions: [\n  { label: \"Verify\", description: \"Source or restart to apply settings\" },\n  { label: \"Backup\", description: \"Backup config file\" }\n]\n```\n\n## After commit\n\n```typescript\noptions: [\n  { label: \"Push\", description: \"Git push to remote\" },\n  { label: \"Create PR\", description: \"Create Pull Request\" }\n]\n```\n\n### Branch convention pre-check (HARD STOP — before composing Push / Create PR options)\n\nThe generic `Push` option above is only valid when the **current branch is push-ready**. Many repos use **local-only working branches** (`local`, `wip`, `scratch`, `tmp/*`, named after the user) that must NOT be pushed — pushing creates a new branch on the remote, polluting the namespace and bypassing the project's PR / release workflow.\n\n| # | Don't (forbidden) | Do (correct alternative) |\n|---|-------------------|------------------------|\n| 1 | Quote the branch name shown in `[<branch> <sha>]` after commit and suggest `git push origin <branch>` | Run `git branch -a` and `git ls-remote --heads origin <branch>` first. If the branch does not exist on origin, do NOT offer a direct `Push` option |\n| 2 | Treat every branch as a feature branch ready for `Push` / `Create PR` | Classify the branch first: feature branch (`feat/*`, `fix/*`, `chore/*`) → PR-ready; local-only working branch (`local`, `wip`, names matching user-personal pattern) → NOT pushable as-is |\n| 3 | Skip remote-existence check because \"the user can pick Other if wrong\" | Wrong defaults waste the user's verification budget. Verify branch class before offering options |\n| 4 | Offer `Push` to a branch whose remote counterpart does not exist | Offer instead: \"Cherry-pick to feature branch + push\" or \"Reset on feature branch + push\" — make the working-branch detour explicit |\n\n### Self-check (every time before composing After-commit options)\n\n1. Run `git branch --show-current` → record the branch name\n2. Run `git ls-remote --heads origin <branch>` → if empty, the branch does NOT exist on origin\n3. Run `git branch -a | grep -E \"(remotes/origin|^\\\\*)\"` → confirm the remote layout pattern (e.g., `origin/main` + feature branches only, no working branch siblings)\n4. Classify the current branch:\n   - Tracked remote-counterpart exists → push-ready (Push / Create PR options OK)\n   - Remote counterpart absent + matches working-branch pattern (`local`, `wip`, `scratch`, `tmp/*`, user-personal name) → NOT pushable. Offer cherry-pick / move-to-feature-branch options instead\n   - Remote counterpart absent + looks like a new feature branch (`feat/*`, `fix/*`, `chore/*`) → first push OK, but state \"creates new origin branch\" in the description\n5. Never quote the branch name from `[<branch> <sha>]` commit output alone — that line tells you the commit landed, not whether the branch belongs on the remote\n\n## After push\n\n```typescript\noptions: [\n  { label: \"Create PR\", description: \"Create Pull Request\" },\n  { label: \"Check CI\", description: \"Verify pipeline status\" }\n]\n```\n\n## After PR fix commit push (after pushing a fix commit to an existing PR)\n\n**Precondition**: A fix commit has just been pushed to an existing PR. CI has been re-triggered.\n\n**Self-check before calling**: Verify AI Review Summary posting status via `gh pr view <N> --json comments`.\n\n### Re-review policy (HARD STOP — first review vs re-review)\n\n| Scenario | Autonomous bot trigger allowed? |\n|----------|-------------------------------|\n| **First review** (PR initial creation; no prior review from a given bot) | ✅ Allowed — PR creation itself is the user trigger |\n| **Re-review** (new commit pushed; a prior review from the same bot exists or was requested) | ❌ Forbidden — AskUserQuestion required before re-requesting |\n\nA \"bot trigger\" includes any of:\n\n- `gh api repos/<o>/<r>/pulls/<N>/requested_reviewers -X POST` (re-request)\n- `gh pr comment <N> --body \"/review\"` or `@coderabbitai review` (slash-command trigger)\n- `gh pr edit <N> --add-reviewer copilot-pull-request-reviewer` (re-add)\n\nThese are external-medium actions (notify the reviewer bot's quota/queue + post user-visible artifacts on the PR). Initiating them autonomously on a fix-commit-push flow steps into user decision territory.\n\n### Pre-trigger self-check (HARD STOP — every time before issuing a re-review trigger)\n\n1. Has the same bot already produced **≥1 review** on this PR (any commit)? — `gh pr view <N> --json reviews --jq '[.reviews[] | select(.author.login | test(\"<bot>\"; \"i\"))] | length'`. If `>0`, this is a re-review case.\n2. Is there a **review currently in progress** (no submitted artifact yet but the bot is known to be working)? — Check the `gh pr checks <N>` output for the bot's status line (e.g., `CodeRabbit\\tpending\\t0\\t\\tReview in progress`) and the latest issuecomment timestamp from that bot author within the last **~10 min (600 s)**. The 600-second window is the canonical value set by `consolidate/pr.md` Step 2.6 (`now - 600 | strftime`); keep this file aligned with that source. If in-progress, **do not trigger** — wait.\n3. Re-review case ✚ no in-progress signal → **AskUserQuestion required** with explicit options (Re-trigger / Skip Copilot - use 1st review + apply-evidence / Hold).\n4. **Inconclusive in-progress detection** (HARD STOP) — if step 2's signals are unavailable (`gh pr checks` empty for the bot, `gh pr view --json comments` query fails, or no bot comment timestamp falls inside the 600 s window AND the bot has no submitted review either), do not interpret silence as \"no in-progress\" and do not autonomously trigger. Treat the state as **inconclusive** → **AskUserQuestion required** with options (Re-trigger / Skip bot — use prior review evidence / **Hold (Recommended when inconclusive)**). The Hold option lets the user wait for the next polling cycle without burning an external bot-trigger quota on uncertain state.\n\n### Don't / Do\n\n| # | Don't | Do |\n|---|-------|-----|\n| 1 | CI passes → jump directly to Test Plan verification (skipping consolidate) | CI passes → check AI Review Summary → if missing, run consolidate first → then Test Plan |\n| 2 | \"User asked for Test Plan check, so verify only\" | Even if user-requested, if consolidate is not posted, guide consolidate first |\n| 3 | \"User asked for 'wait for Copilot re-review', so auto-trigger the re-request to make it arrive\" | \"Wait for X\" ≠ \"trigger X\". Polling is allowed; bot re-trigger is not — AskUserQuestion required |\n| 4 | Re-request after one missed poll → another /review comment → another `requested_reviewers` POST (cascade) | Single AskUserQuestion at the first missing-arrival decision point. No autonomous cascade |\n| 5 | Skip the in-progress check before re-requesting | Always run the in-progress check first (step 2 above). A still-running review must not be re-triggered |\n\n**When AI Review Summary is not posted + this is a re-review case** (multiSelect: false):\n```typescript\noptions: [\n  { label: \"Re-request <bot> review (Recommended if no in-progress signal)\", description: \"Issue the re-request only after user explicit OK. Includes /review comment or requested_reviewers POST\" },\n  { label: \"Skip <bot> — proceed with prior review + apply-evidence\", description: \"Use the 1st <bot> review + Internal Review fallback as Summary basis. Faster but loses follow-up findings\" },\n  { label: \"Hold\", description: \"Decide later (waiting on external/user signal)\" },\n]\n```\n\n**When AI Review Summary is not posted + first-review case** (multiSelect: false):\n```typescript\noptions: [\n  { label: \"Wait for CI → consolidate (Recommended)\", description: \"After CI passes, run /consolidate pr <N>. Test Plan verification comes after consolidate\" },\n  { label: \"Wait for CI only\", description: \"Decide next action after CI result\" },\n]\n```\n\n**When AI Review Summary is posted** (multiSelect: false):\n```typescript\noptions: [\n  { label: \"Wait for CI → Test Plan verification (Recommended)\", description: \"After CI passes, verify unchecked Test Plan items\" },\n  { label: \"Wait for CI only\", description: \"Decide next action after CI result\" },\n]\n```\n\n## After PR creation (BEFORE consolidate — branch on reviewer matrix)\n\n**Precondition**: Passed `github-flow/pr.md` Step 9. Branch on the **reviewer matrix** (CodeRabbit walkthrough + Copilot review request/post state), not just walkthrough.\n\n**Self-check before calling** (HARD STOP — reviewer matrix required, walkthrough alone insufficient):\n\nRun **three** queries per PR (option availability must be verified before composing the option set — never present an option whose action cannot actually execute):\n\n```bash\n# 1. CodeRabbit walkthrough\ngh pr view <N> -R <repo> --json comments --jq '.comments[] | select(.author.login == \"coderabbitai\") | {created_at, hasWalkthrough: (.body | contains(\"<!-- walkthrough_start -->\"))}'\n\n# 2. Copilot reviewer request + review post\ngh pr view <N> -R <repo> --json reviewRequests,reviews --jq '{\n  copilotRequested: ([.reviewRequests[] | select(.login == \"copilot-pull-request-reviewer\")] | length),\n  copilotReviewed:  ([.reviews[]        | select(.author.login == \"copilot-pull-request-reviewer\")] | length)\n}'\n\n# 3. Copilot registration availability (org-level — HARD STOP: skip if owner is a user, not org)\ngh api 'orgs/<org>/copilot/billing' --jq '{\n  seats: .seat_breakdown.total,\n  active: .seat_breakdown.active_this_cycle,\n  management: .seat_management_setting\n}' 2>/dev/null || echo \"Copilot billing query failed (likely user-owned repo or no permission)\"\n```\n\n**Availability gate (HARD STOP)**: If query 3 returns `active: 0` or `management: \"disabled\"` or fails with \"Not Found\", **Copilot reviewer registration is NOT possible for this PR**. The \"Request Copilot review\" option in the \"Copilot absent\" branch becomes inactive — skip the option set and self-decide on `consolidate (CodeRabbit only)` instead. Do not present an ask whose Recommended option is impossible to execute.\n\n**CodeRabbit tier × visibility gate (HARD STOP — before composing any \"wait for CodeRabbit\" option)**: CodeRabbit's plan matrix blocks line-by-line reviews on **PRIVATE + Free-plan** repos — only a walkthrough is ever posted there. Before composing any option that waits on / polls for / registers a task for a CodeRabbit review arrival, verify with primary sources: (1) repo visibility (`gh repo view --json isPrivate`), (2) plan tier (project-memory fact or the walkthrough's plan line), (3) current review state (`gh pr checks <N>` — a CodeRabbit line reading `Review completed` means nothing more is coming). PRIVATE + Free, or `Review completed` already present → a wait/poll option is **invalid**: route to the internal-review fallback (generic code-reviewer agent / inline diff analysis) instead. \"The PR just went ready, so the review must be pending\" is exactly the assumption this gate forbids — run the queries, don't infer. Recurrence source: a \"register task and wait for CodeRabbit\" Recommended option composed on a Free+PRIVATE repo whose walkthrough had already completed.\n\n**CI-gate-only base branch gate (HARD STOP — check BEFORE the reviewer-matrix queries)**: some long-lived branches exist purely to accumulate CI-passing commits ahead of a later, separately-reviewed promotion PR (e.g. a two-tier staging model). What matters is the base branch's *role*, not its literal name — verify via `gh pr checks <N>`: a CodeRabbit line reading `Review skipped: reviews are disabled for this base branch` means this base is CI-gate-only, and no walkthrough will ever arrive (not \"pending\", not \"rate limited\"). When this signal is present, skip the reviewer-matrix branches entirely — self-decide \"CI green + Test Plan + Mergeable is the full gate for this base\" and route straight to `github-flow/merge.md`'s CI-gate-only exception, not any of the four branches below.\n\nThen map to a branch:\n\n| CodeRabbit walkthrough | Copilot requested | Copilot reviewed | Branch (option set) |\n|------------------------|-------------------|------------------|---------------------|\n| ✅ posted | ✅ requested | ✅ reviewed | **Both reviewers complete** — full consolidate |\n| ✅ posted | ❌ not requested | ❌ none | **Copilot absent** — branch (a) register + wait, (b) skip Copilot, (c) hold |\n| ✅ posted | ✅ requested | ❌ pending | **Copilot pending** — wait for Copilot completion, then consolidate |\n| ❌ rate-limited / pending | — | — | **Walkthrough waiting** — same as original \"rate limited\" branch |\n\n**Branch: Both reviewers complete** (multiSelect: false):\n```typescript\noptions: [\n  { label: \"Call consolidate pr immediately (Recommended)\", description: \"/consolidate pr <N> — CodeRabbit walkthrough ✅ + Copilot review ✅ both present\" },\n  { label: \"Internal Review first\", description: \"Self-review via superpowers:code-reviewer → then consolidate\" },\n  { label: \"Hold\", description: \"Push additional commits and wait for re-review\" },\n]\n```\n\n**Branch: Copilot absent (walkthrough only)** — split by Copilot availability (query 3 result):\n\n**Sub-branch A: Copilot registration available** (org `active >= 1` and `management != \"disabled\"`) (multiSelect: false):\n```typescript\noptions: [\n  { label: \"Request Copilot review and wait (Recommended)\", description: \"gh pr edit <N> --add-reviewer copilot-pull-request-reviewer → wait for Copilot review → then /consolidate pr <N>. Aligned with consolidate/pr.md Step 2.5 sequential Copilot policy\" },\n  { label: \"Skip Copilot — consolidate with CodeRabbit only\", description: \"/consolidate pr <N> — Internal Review fallback covers Copilot's domain. Faster but loses Copilot's inline suggestions\" },\n  { label: \"Hold\", description: \"Decide later\" },\n]\n```\n\n**Sub-branch B: Copilot registration unavailable** (org `active: 0`, `management: \"disabled\"`, or `Not Found`) — **NO ask** (only one option is actually executable, so do not ask):\n- Self-decide on `/consolidate pr <N>` immediately (CodeRabbit only with Internal Review fallback)\n- Briefly report: \"Copilot registration unavailable for this org (verified via `gh api orgs/<org>/copilot/billing`); proceeding with CodeRabbit-only consolidate.\"\n- Do not present the \"Request Copilot review\" option — it cannot execute and asking wastes a user turn\n\n**Branch: Copilot pending** (multiSelect: false):\n```typescript\noptions: [\n  { label: \"Register task and wait for Copilot (Recommended)\", description: \"TaskCreate \\\"Run /consolidate pr <N> after Copilot review arrives\\\" — call when notified\" },\n  { label: \"Skip Copilot — consolidate with CodeRabbit only\", description: \"/consolidate pr <N> now, ignore pending Copilot\" },\n  { label: \"Hold\", description: \"Decide later\" },\n]\n```\n\n**Branch: Walkthrough rate limited / pending** (multiSelect: false):\n```typescript\noptions: [\n  { label: \"Register task and move on (Recommended)\", description: \"TaskCreate \\\"Run /consolidate pr <N> after CodeRabbit review arrives\\\" — call when notified\" },\n  { label: \"Manual trigger and wait\", description: \"Force trigger with @coderabbitai review comment and wait for walkthrough arrival\" },\n  { label: \"Skip consolidate (skip-review)\", description: \"Apply coderabbit:ignore label → proceed with Internal Review only\" },\n]\n```\n\n| # | Don't | Do |\n|---|-------|-----|\n| 1 | Stop at a \"waiting for review\" text report without presenting options | Run reviewer matrix queries, then present options per the matching branch |\n| 2 | Offer merge options when walkthrough has arrived | consolidate first — consistent with block-merge-without-review.sh guard |\n| 3 | Batch-handle multiple PRs as \"all waiting for review\" | Check reviewer matrix per PR (CodeRabbit and Copilot states may differ per PR) |\n| 4 | Branch on walkthrough alone, ignoring Copilot state | Both reviewers form the matrix. Walkthrough ✅ + Copilot ❌ requires its own option set (Copilot register/skip/hold) |\n| 5 | Recommend \"/consolidate\" when Copilot is absent without making the Copilot decision explicit | Make Copilot status an explicit choice in the option description — user must decide register vs skip vs hold |\n\n## After skill/agent creation\n\n```typescript\noptions: [\n  { label: \"Test\", description: \"Verify activation with trigger keywords\" },\n  { label: \"Review integration\", description: \"Check for duplicates\" }\n]\n```\n\n## After file creation\n\n```typescript\noptions: [\n  { label: \"Review content\", description: \"Verify created file\" },\n  { label: \"Git add\", description: \"Stage with git add\" }\n]\n```\n\n## After refactoring\n\n```typescript\nmultiSelect: true,\noptions: [\n  { label: \"Run tests\", description: \"Verify existing tests pass\" },\n  { label: \"Check performance\", description: \"Run benchmarks (if applicable)\" },\n  { label: \"Commit\", description: \"Commit refactoring\" }\n]\n```\n\n## After complex workflow completion\n\n```typescript\nmultiSelect: true,\noptions: [\n  { label: \"Agentify\", description: \"Convert this workflow to an agent/skill\" },\n  { label: \"Serena memory\", description: \"Save key learnings to Serena memory\" }\n]\n```\n\n## After project exploration/research\n\n```typescript\nmultiSelect: true,\noptions: [\n  { label: \"Serena memory\", description: \"Store findings in project memory\" },\n  { label: \"Document\", description: \"Update project documentation\" }\n]\n```\n\n## After session wrap-up with pending tasks (HARD STOP — TaskList based)\n\n**Precondition**: The session's core work is complete and the user signals wrap-up intent (explicit wrap-up keyword such as \"wrap up\", \"cleanup\", \"end session\"), or only asset cleanup (file moves, doc updates) remains. At least one pending/in_progress task remains for carryover.\n\n### Context-usage gate (HARD STOP — before offering ANY wrap-up/cleanup option, in any ask)\n\n**Dependency precondition (HARD STOP)**: this entire gate applies ONLY when a session-cleanup skill is available in the current environment. If none is available, skip the context-usage gate and never offer a cleanup / wrap-up / retrospective option — see next SKILL.md \"Dependency-gated behaviors\". Evaluate the conditions below only after this precondition passes.\n\nA session-cleanup / retrospective / wrap-up option — including as a diversity slot inside a regular next-action ask — may be offered only when at least one of these holds:\n\n1. The user explicitly signaled wrap-up intent (wrap-up keyword, or 2+ consecutive declines of other follow-ups), or\n2. The injected context-usage signal (a `Context usage: ... (NN%)` line in hook additionalContext, when the environment provides one) reports at/above the **session model's live threshold** (Fable/Mythos 55%, Opus 50%, others 45% — 45% is also the generic fallback when the model is unknown; the injection script publishes the live per-model value and emits an explicit `CLEANUP-GATE` directive line when the reading is over it) — **read from the LATEST injection in the transcript at ask-composition time**. **Active trigger**: when this condition holds on a FRESH reading, the cleanup/retrospective option is not merely permitted — it is REQUIRED as the Recommended #1 option of the turn-final ask (or a standalone cleanup ask when no other ask is happening this turn), citing the live percentage. The signal only refreshes on user-prompt events, and a compact/summarization boundary shrinks context, so any reading taken before the most recent injection (or before an intervening compact) is stale and **overstates** usage. A stale reading NEVER satisfies the gate: if the freshest injection is below the threshold — or no post-compact reading exists yet — treat condition 2 as NOT met.\n\n**Post-compact floor (HARD STOP)**: immediately after a compact/summarization boundary — an explicit compact command, an `isCompactSummary` entry, or a session that opened with a \"continued from a previous conversation that ran out of context\" summary — assume usage is **under 20% until re-measured**, and never quote a percentage that appears in the pre-compact conversation or its summary. The measurement mechanism reads the last assistant-message usage field, which still describes the pre-compact session until a new assistant turn has been generated; a figure read at that moment can overstate reality by tens of percentage points. This is the operator-facing counterpart of the injection script's own fi\n\nArchive v0.10.2: 10 files, 69778 bytes\n\nFiles: ask-gates.md (63324b), CHANGELOG.md (18424b), LICENSE (1063b), resources/next-reactive-guard.sh (7021b), resources/next-trigger.sh (9720b), skill-card.md (2430b), SKILL.md (27009b), stall-detect.md (2545b), suggestion-patterns.md (53955b), _meta.json (124b)\n\nArchive v0.10.1: 10 files, 67893 bytes\n\nFiles: ask-gates.md (59090b), CHANGELOG.md (17870b), LICENSE (1063b), resources/next-reactive-guard.sh (7021b), resources/next-trigger.sh (9720b), skill-card.md (2617b), SKILL.md (25633b), stall-detect.md (2545b), suggestion-patterns.md (53955b), _meta.json (124b)\n\nArchive v0.10.0: 10 files, 67602 bytes\n\nFiles: ask-gates.md (59090b), CHANGELOG.md (17547b), LICENSE (1063b), resources/next-reactive-guard.sh (7021b), resources/next-trigger.sh (9720b), skill-card.md (2232b), SKILL.md (25633b), stall-detect.md (2545b), suggestion-patterns.md (53955b), _meta.json (124b)\n\nArchive v0.9.2: 10 files, 67613 bytes\n\nFiles: ask-gates.md (59090b), CHANGELOG.md (17271b), LICENSE (1063b), resources/next-reactive-guard.sh (7021b), resources/next-trigger.sh (9720b), skill-card.md (2556b), SKILL.md (25633b), stall-detect.md (2545b), suggestion-patterns.md (53955b), _meta.json (123b)\n\nArchive v0.9.1: 10 files, 67209 bytes\n\nFiles: ask-gates.md (59090b), CHANGELOG.md (16809b), LICENSE (1063b), resources/next-reactive-guard.sh (7021b), resources/next-trigger.sh (9720b), skill-card.md (2258b), SKILL.md (25118b), stall-detect.md (2545b), suggestion-patterns.md (53955b), _meta.json (123b)\n\nArchive v0.9.0: 8 files, 56805 bytes\n\nFiles: ask-gates.md (53995b), CHANGELOG.md (15224b), LICENSE (1063b), skill-card.md (2620b), SKILL.md (25875b), stall-detect.md (2545b), suggestion-patterns.md (51841b), _meta.json (123b)\n\nArchive v0.8.1: 8 files, 54052 bytes\n\nFiles: ask-gates.md (50372b), CHANGELOG.md (13997b), LICENSE (1063b), skill-card.md (2471b), SKILL.md (24939b), stall-detect.md (2552b), suggestion-patterns.md (49833b), _meta.json (123b)\n\nArchive v0.8.0: 8 files, 52836 bytes\n\nFiles: ask-gates.md (50372b), CHANGELOG.md (13195b), LICENSE (1063b), skill-card.md (2719b), SKILL.md (24939b), stall-detect.md (2552b), suggestion-patterns.md (46878b), _meta.json (123b)\n\nArchive v0.7.3: 8 files, 51144 bytes\n\nFiles: ask-gates.md (49617b), CHANGELOG.md (12546b), LICENSE (1063b), skill-card.md (2189b), SKILL.md (24420b), stall-detect.md (2552b), suggestion-patterns.md (44723b), _meta.json (123b)","readmeExcerpt":"Skill: next Owner: drumrobot Summary: Suggest next actions after completing any task. Auto-invocation via Stop hook + UserPromptSubmit reactive backstop, owned by the next-invocation-guard plugin (local-only, ported from resources/next-trigger.sh + resources/next-reactive-guard.sh). Fires when assistant response contains completion keywords (locale patterns in data/*.regex). stall-detect - detect stalled follow-up st","codeSnippets":[],"executableExamples":[{"language":"typescript","snippet":"AskUserQuestion({\n  questions: [{\n    question: \"What would you like to do next?\",\n    header: \"Next Action\",\n    multiSelect: true,\n    options: [\n      { label: \"Option 1\", description: \"Description\" },\n      { label: \"Option 2\", description: \"Description\" },\n      { label: \"Option 3\", description: \"Description\" },\n      { label: \"Option 4\", description: \"Description\" }\n    ]\n  }]\n})"},{"language":"text","snippet":"Skill(\"fix\", \"stall detected: <description of what's stalled>\")"},{"language":"text","snippet":"Completed: clawhub publish session v0.1.2\nStall: sync.sh not run, es6kr/skills repo not updated\n→ Skill(\"fix\", \"stall detected: ClawHub publish completed but es6kr/skills sync not executed\")"},{"language":"text","snippet":"AskUserQuestion answer: \"proceed\" (proceed with publish)\nStall: No clawhub publish command executed after approval\n→ Skill(\"fix\", \"stall detected: user approved publish but no action taken\")"},{"language":"text","snippet":"Completed: git push origin develop\nStall: No gh run watch or CI status check initiated\n→ Skill(\"fix\", \"stall detected: push completed but CI result not monitored\")"},{"language":"typescript","snippet":"options: [\n  { label: \"Run tests\", description: \"Verify changes with test suite\" },\n  { label: \"Commit\", description: \"Git commit the changes\" }\n]"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nmetadata:\n  author: es6kr\n  version: \"0.1.1\"\nname: next\ndepends-on:\n  - fix\n  - hook-kit\ndescription: |\n  Suggest next actions after completing any task. Auto-invocation via Stop hook + UserPromptSubmit reactive backstop, owned by the `next-invocation-guard` plugin (local-only, ported from `resources/next-trigger.sh` + `resources/next-reactive-guard.sh`). Fires when assistant response contains completion keywords (locale patterns in `data/*.regex`).\n  stall-detect - detect stalled follow-up steps and invoke /fix [stall-detect.md], ask-gates - recording-skip / decision-deferral forced-ask / TaskList primary-source / current-work confirmation gates [ask-gates.md], suggestion-patterns - per-context \"After X\" next-action option templates [suggestion-patterns.md].\n  Use when \"next action\", \"what next\", \"stall\", \"stuck\", \"not progressing\", \"follow-up missing\" is mentioned.\n---\n\n# Next Action Suggester\n\n## Topic Dispatch\n\n**When this skill is invoked with a topic specifier (e.g., `/next suggestion-patterns` or `Skill(\"next\", \"suggestion-patterns\")`), load and follow only the matching topic file. Do not echo the Topics table or summarize other topics in the response.** The Topics table below is an index — for a normal invocation, follow the Instructions and Read each topic when you reach the step that references it.\n\n## Topics\n\n| Topic | Description | Guide |\n|-------|-------------|-------|\n| stall-detect | Detect stalled follow-up steps and invoke /fix | [stall-detect.md](./stall-detect.md) |\n| ask-gates | Step 0.3/0.4/0.45/0.5/0.7 ask gates: recording-skip, decision-deferral forced-ask, invocation-argument priority, TaskList primary-source, current-work confirmation | [ask-gates.md](./ask-gates.md) |\n| suggestion-patterns | Per-context \"After X\" next-action option templates | [suggestion-patterns.md](./suggestion-patterns.md) |\n\nAfter task completion, use `AskUserQuestion` to suggest next steps and get user selection.\n\n## When to use\n\nUse `next` skill in the following scenarios:\n- **Explicit invocation**: When the user explicitly calls `/next` or requests next actions (\"what next\", \"next action\").\n  - **User Analysis Request Priority (HARD STOP)**: When `/next` is invoked alongside a specific request to analyze an issue or cause (e.g. `/next/fix analyze why next wasn't called`), perform the 5-Why analysis and present the investigation report **FIRST thing** before presenting any `AskUserQuestion` options.\n- **Automatic trigger (in supported environments)**: In environments with Stop-hook support (`resources/next-trigger.sh`), auto-triggers on completion keywords.\n- **Manual auto-invocation prohibition (HARD STOP)**: In environments without active Stop hooks (or after completing recording/fix tasks), do NOT manually append `next` options unless explicitly requested by the user or required by `ask-gates.md`. Specifically after `/fix` execution, do NOT automatically invoke `next` unless `/next` was explicitly requested in the user prompt.\n\nAfter task "},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn74k8yfvftx6f062qa8fzyd8h8373jd\",\n  \"slug\": \"next\",\n  \"version\": \"0.11.0\",\n  \"publishedAt\": 1790778072862\n}"},{"path":"ask-gates.md","content":"# Ask Gates — recording-skip / TaskList primary-source / current-work confirmation\n\n> **Applies even when this file wasn't Read this turn (HARD STOP — recurrence, 3rd occurrence)**: a Stop hook (e.g. `next-invocation-guard`'s `next-trigger.sh`) can force an `AskUserQuestion` directly, without `Skill(\"next\")` ever being invoked — its block message reads narrowly as \"just call AskUserQuestion, nothing else.\" That narrow framing is not license to skip the cross-cutting rules that would normally apply via this file and `suggestion-patterns.md`. The PR/issue full-URL requirement (`suggestion-patterns.md` \"Cross-cutting rule — PR/issue references in options require the full URL\") applies to **every** `AskUserQuestion` that references a PR/issue number, regardless of entry path. Recurrence: `failed-attempts.md` \"ask-option-pr-ref-missing-url\" (3rd, 2026-08-22) — the 1st and 2nd occurrences both went through `Skill(\"next\")` with a skipped topic Read; the 3rd bypassed `Skill(\"next\")` entirely via a Stop-hook-forced direct ask, so a self-check that only fires *inside* the skill's own Step 2 never ran. Before calling `AskUserQuestion` from a Stop-hook directive, still check: does any option reference a PR/issue number? If yes, does each distinct number have its own full URL?\n\n## Step 0.3: Recording/management topic ask-skip gate (HARD STOP)\n\n**If the just-completed work is a \"simple recording/management topic\", skip the next-action ask entirely.** Stop hook auto-triggers next skill on every task completion, but recording-topic completion is not a user-decision branch point.\n\n### Default = ask. Skip = exception (closed list — HARD STOP)\n\n**The skip-target table below is a CLOSED list.** Any just-completed work that does not exactly match a row in the table = **ask is required** (proceed to Step 0.4+). Do not extrapolate skip justification to \"similar\" cases such as plan/research authoring, user-awaiting-reply states, or \"prior turn already asked\" rationales.\n\n| # | Don't (skip extrapolation — forbidden) | Do (closed-list discipline) |\n|---|------|------|\n| 1 | \"Plan/research/analysis authoring just completed → similar to recording → skip\" | Plan/research/analysis is **not** recording (it creates new decision axes: proceed / refine / hold). Ask required |\n| 2 | \"User is awaiting reply on a prior chat-text question → skip the next-action ask\" | Awaiting-reply on one axis ≠ no decision on the next-action axis. trade-off ask and next-action ask are **separate axes** — both required |\n| 3 | \"Re-asking would revert the user's prior Other selection → skip\" | Prior ask = topic-decision axis (e.g., PR tag). Next-action ask = progress-decision axis (proceed / refine / hold). Different axes, no revert |\n| 4 | \"Stop hook re-triggered next, but I already asked once this turn → skip\" | The just-completed work is the trigger condition, not \"have I asked in this turn\". If the work changed (new artifact, new state), ask again |\n| 5 | \"TaskList has just one item and it depend"},{"path":"CHANGELOG.md","content":"# Changelog\n\n## [0.11.0](https://github.com/es6kr/skills/compare/next-v0.10.2...next-v0.11.0) (2026-09-30)\n\n\n### Features\n\n* **next:** enhance candidate discovery, context heuristics, and decision gates ([bdf3cd9](https://github.com/es6kr/skills/commit/bdf3cd9c3a38091cff85be9db382d7a1d8def496))\n\n\n### Bug Fixes\n\n* **next:** add already-satisfied candidate verification to option diversity gate ([1b6fc6c](https://github.com/es6kr/skills/commit/1b6fc6c11c94f91c1f2a75b22db7bd0ca8ae58b7))\n* **next:** add CodeRabbit tier x visibility gate to After-PR-creation pattern ([7bcae82](https://github.com/es6kr/skills/commit/7bcae82e38ee1d5eb08b785520518422b64a3ddd))\n* **next:** add continuation-over-re-ask gate, positive cleanup trigger, and harness candidate patterns ([88b5a26](https://github.com/es6kr/skills/commit/88b5a265287e85477c9196135e879e5d774544ec))\n* **next:** assume &lt;20% context right after /compact; generalize staleness gate to loop promises ([d88230a](https://github.com/es6kr/skills/commit/d88230a152d2d1d19884fb1583bc13bcb9290cde))\n* **next:** close chain-blindness gap for Step 0.4 prose-decision drops ([dba4b29](https://github.com/es6kr/skills/commit/dba4b294222a7046432d64564e72752403950cb0))\n* **next:** rank registered TaskList items above checklist-only backlog and frame them as actionable proceed ([c09074e](https://github.com/es6kr/skills/commit/c09074e92da799fa9f7be80f47e3abdd2d350b65))\n* **next:** require cross-workspace target labeling for fix_plan candidates ([5f7774c](https://github.com/es6kr/skills/commit/5f7774c9a6ddfd1f5053750c97af4dbfc395aa2d))\n* **next:** scope End-session-never-Recommended rule to all ask paths ([181f3e2](https://github.com/es6kr/skills/commit/181f3e23631d72ecf184db4c6cb8e2915e37f8cd))\n\n## [0.10.2](https://github.com/es6kr/skills/compare/next-v0.10.1...next-v0.10.2) (2026-09-24)\n\n\n### Bug Fixes\n\n* **next:** mandate physical cleanup skill invocation before wrapup ([#513](https://github.com/es6kr/skills/issues/513)) ([4773fe2](https://github.com/es6kr/skills/commit/4773fe2ca7ee01f21f7794cb588df605527f6879))\n* **next:** prioritize explicit invocation-argument candidates over generic sweep ([#543](https://github.com/es6kr/skills/issues/543)) ([4fd3850](https://github.com/es6kr/skills/commit/4fd38502af59bffb9157c03a4351dabbd66dfc2e))\n\n## [0.10.1](https://github.com/es6kr/skills/compare/next-v0.10.0...next-v0.10.1) (2026-09-18)\n\n\n### Bug Fixes\n\n* **cleanup:** make the session-end report table self-sufficient ([#487](https://github.com/es6kr/skills/issues/487)) ([c4a0255](https://github.com/es6kr/skills/commit/c4a02557fb8de3b32cf337c549f62535dabf824b))\n\n## [0.10.0](https://github.com/es6kr/skills/compare/next-v0.9.2...next-v0.10.0) (2026-09-06)\n\n\n### Features\n\n* **cc-plugin:** implement post-commit dev-reflect and cache drift guard ([3f78c05](https://github.com/es6kr/skills/commit/3f78c054e7c00e7c33730d3378c5aff6575566e4))\n\n## [0.9.2](https://github.com/es6kr/skills/compare/next-v0.9.1...next-v0.9.2) (2026-09-01)\n\n\n### "},{"path":"skill-card.md","content":"## Description:\n\nSuggests practical next actions after a task, including follow-up options for stalled work.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[drumrobot](https://clawhub.ai/user/drumrobot)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers and other assistant users use this skill to find actionable follow-ups after finishing a task, spot stalled steps, and choose what to do next.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Persistent hooks can automatically prompt for next actions.\n\nMitigation: Review hook paths and enable them only if automatic suggestions are wanted.\n\nRisk: Next-action discovery may inspect transcripts, task state, GitHub/CI context, and planning files across visited workspaces.\n\nMitigation: Limit use to trusted workspaces and review the scope of accessible project information.\n\nRisk: A helper-script lookup may execute code from agent plugin directories.\n\nMitigation: Verify the helper-script path and contents before enabling hooks.\n\n## Reference(s):\n\n- [Next skill listing](https://clawhub.ai/drumrobot/skills/next)\n- [Stall detection](artifact/stall-detect.md)\n- [Ask gates](artifact/ask-gates.md)\n- [Suggestion patterns](artifact/suggestion-patterns.md)\n\n## Skill Output:\n\n**Output Type(s):** [Guidance, Text]\n\n**Output Format:** [Markdown with next-action options and a user-selection prompt]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Suggestions depend on the current task and available skills.]\n\n## Skill Version(s):\n\n0.11.0 (source: ClawHub release)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment."}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":null,"editorialQuality":{"score":100,"threshold":65,"status":"thin","wordCount":2065,"uniquenessScore":40,"reasons":["uniqueness-below-45"]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-09T11:35:52.323Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-10-09T11:35:52.323Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-09T17:10:00.809Z","emptyReason":null},"items":[{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-10T18:48:31.762Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}