From 43b582cfa2e89302923ad57a4b83ea0d578e7b24 Mon Sep 17 00:00:00 2001 From: Trevin Chow Date: Tue, 21 Apr 2026 01:02:33 -0700 Subject: [PATCH 1/3] fix(question-tool): require explicit fallback so Codex edit modes never silently skip questions Skills listed `request_user_input` as Codex's blocking question tool, but Codex only exposes it in Plan mode. In edit modes the model would try the tool, find it unavailable, and silently skip the question instead of routing to the numbered-options-in-chat fallback. Tighten the canonical rule in AGENTS.md and every skill site to the unified form: "If the tool is unavailable or errors, present numbered options in chat and wait for the user's reply -- never silently skip the question." One-line-for-one-line swap (52+/52-) preserves the existing succinct pattern while closing the silent-skip gap. --- plugins/compound-engineering/AGENTS.md | 2 +- plugins/compound-engineering/skills/ce-brainstorm/SKILL.md | 2 +- .../skills/ce-brainstorm/references/handoff.md | 2 +- .../ce-brainstorm/references/universal-brainstorming.md | 2 +- .../skills/ce-clean-gone-branches/SKILL.md | 2 +- plugins/compound-engineering/skills/ce-code-review/SKILL.md | 4 ++-- .../skills/ce-code-review/references/bulk-preview.md | 2 +- .../skills/ce-code-review/references/tracker-defer.md | 2 +- .../skills/ce-code-review/references/walkthrough.md | 2 +- .../compound-engineering/skills/ce-commit-push-pr/SKILL.md | 2 +- plugins/compound-engineering/skills/ce-commit/SKILL.md | 4 ++-- .../skills/ce-compound-refresh/SKILL.md | 6 +++--- plugins/compound-engineering/skills/ce-compound/SKILL.md | 6 +++--- plugins/compound-engineering/skills/ce-debug/SKILL.md | 2 +- plugins/compound-engineering/skills/ce-demo-reel/SKILL.md | 4 ++-- .../skills/ce-demo-reel/references/upload-and-approval.md | 2 +- plugins/compound-engineering/skills/ce-doc-review/SKILL.md | 4 ++-- .../skills/ce-doc-review/references/bulk-preview.md | 2 +- .../ce-doc-review/references/synthesis-and-presentation.md | 2 +- .../skills/ce-doc-review/references/walkthrough.md | 2 +- .../compound-engineering/skills/ce-frontend-design/SKILL.md | 2 +- plugins/compound-engineering/skills/ce-ideate/SKILL.md | 2 +- .../skills/ce-ideate/references/post-ideation-workflow.md | 2 +- .../skills/ce-ideate/references/universal-ideation.md | 2 +- plugins/compound-engineering/skills/ce-onboarding/SKILL.md | 2 +- plugins/compound-engineering/skills/ce-optimize/SKILL.md | 2 +- plugins/compound-engineering/skills/ce-plan/SKILL.md | 4 ++-- .../skills/ce-plan/references/plan-handoff.md | 4 ++-- .../skills/ce-plan/references/universal-planning.md | 4 ++-- .../compound-engineering/skills/ce-pr-description/SKILL.md | 2 +- .../skills/ce-proof/references/hitl-review.md | 6 +++--- plugins/compound-engineering/skills/ce-report-bug/SKILL.md | 2 +- .../skills/ce-resolve-pr-feedback/SKILL.md | 4 ++-- plugins/compound-engineering/skills/ce-sessions/SKILL.md | 2 +- plugins/compound-engineering/skills/ce-setup/SKILL.md | 2 +- .../compound-engineering/skills/ce-slack-research/SKILL.md | 2 +- .../compound-engineering/skills/ce-test-browser/SKILL.md | 2 +- plugins/compound-engineering/skills/ce-test-xcode/SKILL.md | 2 +- 38 files changed, 52 insertions(+), 52 deletions(-) diff --git a/plugins/compound-engineering/AGENTS.md b/plugins/compound-engineering/AGENTS.md index bec480967..708eeaa7e 100644 --- a/plugins/compound-engineering/AGENTS.md +++ b/plugins/compound-engineering/AGENTS.md @@ -124,7 +124,7 @@ Keep rationale at the highest-level location that covers it; restate behavioral ### Cross-Platform User Interaction - [ ] When a skill needs to ask the user a question, instruct use of the platform's blocking question tool and name the known equivalents (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini) -- [ ] Include a fallback for environments without a question tool (e.g., present numbered options and wait for the user's reply before proceeding) +- [ ] Include a fallback: if the tool is unavailable or errors, present numbered options in chat and wait for the user's reply — never silently skip the question. (Codex's `request_user_input` is only available in Plan mode, so the fallback path is the default in Codex's edit modes.) ### Interactive Question Tool Design diff --git a/plugins/compound-engineering/skills/ce-brainstorm/SKILL.md b/plugins/compound-engineering/skills/ce-brainstorm/SKILL.md index 3dc582ad3..52bfd1854 100644 --- a/plugins/compound-engineering/skills/ce-brainstorm/SKILL.md +++ b/plugins/compound-engineering/skills/ce-brainstorm/SKILL.md @@ -30,7 +30,7 @@ This skill does not implement code. It explores, clarifies, and documents decisi 1. **Ask one question at a time** - Do not batch several unrelated questions into one message. 2. **Prefer single-select multiple choice** - Use single-select when choosing one direction, one priority, or one next step. 3. **Use multi-select rarely and intentionally** - Use it only for compatible sets such as goals, constraints, non-goals, or success criteria that can all coexist. If prioritization matters, follow up by asking which selected item is primary. -4. **Use the platform's question tool when available** - When asking the user a question, prefer the platform's blocking question tool if one exists (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). Otherwise, present numbered options in chat and wait for the user's reply before proceeding. +4. **Use the platform's blocking question tool** - When asking the user a question, prefer the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). If the tool is unavailable or errors, present numbered options in chat and wait for the user's reply — never silently skip the question. ## Output Guidance diff --git a/plugins/compound-engineering/skills/ce-brainstorm/references/handoff.md b/plugins/compound-engineering/skills/ce-brainstorm/references/handoff.md index 40e30f7eb..9cc860e06 100644 --- a/plugins/compound-engineering/skills/ce-brainstorm/references/handoff.md +++ b/plugins/compound-engineering/skills/ce-brainstorm/references/handoff.md @@ -6,7 +6,7 @@ This content is loaded when Phase 4 begins — after the requirements document i #### 4.1 Present Next-Step Options -Present the options using the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). If no question tool is available, present the numbered options in chat and wait for the user's reply before proceeding. +Present the options using the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). If the tool is unavailable or errors, present the numbered options in chat and wait for the user's reply — never silently skip the question. If `Resolve Before Planning` contains any items: - Ask the blocking questions now, one at a time, by default diff --git a/plugins/compound-engineering/skills/ce-brainstorm/references/universal-brainstorming.md b/plugins/compound-engineering/skills/ce-brainstorm/references/universal-brainstorming.md index c56505ce8..54b0e3d91 100644 --- a/plugins/compound-engineering/skills/ce-brainstorm/references/universal-brainstorming.md +++ b/plugins/compound-engineering/skills/ce-brainstorm/references/universal-brainstorming.md @@ -45,7 +45,7 @@ When the conversation has enough material to narrow — reflect back what you've **Always synthesize a summary in the chat.** Before offering any next steps, reflect back what emerged: key decisions, the direction chosen, open threads, and any assumptions made. This is the primary output of the brainstorm — the user should be able to read the summary and know what they landed on. -**Then offer next steps** using the platform's question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). If no question tool is available, present the numbered options in chat and wait for the user's reply before proceeding. +**Then offer next steps** using the platform's question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). If the tool is unavailable or errors, present the numbered options in chat and wait for the user's reply — never silently skip the question. **Question:** "Brainstorm wrapped. What would you like to do next?" diff --git a/plugins/compound-engineering/skills/ce-clean-gone-branches/SKILL.md b/plugins/compound-engineering/skills/ce-clean-gone-branches/SKILL.md index 460ccf313..f96715c6a 100644 --- a/plugins/compound-engineering/skills/ce-clean-gone-branches/SKILL.md +++ b/plugins/compound-engineering/skills/ce-clean-gone-branches/SKILL.md @@ -37,7 +37,7 @@ These local branches have been deleted from the remote: Delete all of them? (y/n) ``` -Wait for the user's answer using the platform's question tool (e.g., `AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). If no question tool is available, present the list and wait for the user's reply before proceeding. +Wait for the user's answer using the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). If the tool is unavailable or errors, present the list and wait for the user's reply — never silently skip the question. This is a yes-or-no decision on the entire list -- do not offer multi-selection or per-branch choices. diff --git a/plugins/compound-engineering/skills/ce-code-review/SKILL.md b/plugins/compound-engineering/skills/ce-code-review/SKILL.md index 24cb1556a..b02a054ac 100644 --- a/plugins/compound-engineering/skills/ce-code-review/SKILL.md +++ b/plugins/compound-engineering/skills/ce-code-review/SKILL.md @@ -321,7 +321,7 @@ Pass this to every reviewer in their spawn prompt. Intent shapes *how hard each **When intent is ambiguous:** -- **Interactive mode:** Ask one question using the platform's interactive question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini): "What is the primary goal of these changes?" Do not spawn reviewers until intent is established. **Claude Code only:** if `AskUserQuestion` has not yet been loaded this session (per the Interactive mode rules pre-load), call `ToolSearch` with query `select:AskUserQuestion` first before asking. On Codex (`request_user_input`) and Gemini (`ask_user`) this preload step does not apply — the platform-native question tool is loaded by default. +- **Interactive mode:** Ask one question using the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini): "What is the primary goal of these changes?" Do not spawn reviewers until intent is established. If the tool is unavailable or errors, present numbered options in chat and wait for the user's reply — never silently skip the question. **Claude Code only:** if `AskUserQuestion` has not yet been loaded this session (per the Interactive mode rules pre-load), call `ToolSearch` with query `select:AskUserQuestion` first before asking. On Codex and Gemini this preload step does not apply. - **Autofix/report-only/headless modes:** Infer intent conservatively from the branch name, diff, PR metadata, and caller context. Note the uncertainty in Coverage or Verdict reasoning instead of blocking. ### Stage 2b: Plan discovery (requirements verification) @@ -637,7 +637,7 @@ After presenting findings and verdict (Stage 6), route the next steps by mode. R Render option C per `references/tracker-defer.md`: when `confidence = high` AND `named_sink_available = true`, replace `[TRACKER]` with the concrete name and keep the full label (e.g., `File a Linear ticket per finding without applying fixes`). When `any_sink_available = true` but either `confidence = low` or `named_sink_available = false` (a fallback tier like GitHub Issues or the harness task primitive is working instead), use the generic label `File an issue per finding without applying fixes` — this is a whole-label substitution, not a `[TRACKER]` token swap. When `any_sink_available = false`, **omit option C entirely** and add one line to the stem explaining why (e.g., `Defer unavailable — no tracker or task-tracking primitive detected on this platform.`). The three remaining options (A, B, D) survive. - The numbered-list text fallback applies only when `ToolSearch` explicitly returns no match for the platform's question tool or the tool call errors. It does not apply when the agent simply hasn't loaded the tool yet — in that case, load it now (see the verification checklist above). On platforms genuinely without a blocking question tool, present the applicable options as a numbered list and wait for the user's reply. + The numbered-list text fallback applies when `ToolSearch` explicitly returns no match for the platform's question tool or the tool call errors (including Codex runtime modes where `request_user_input` is unavailable). It does not apply when the agent simply hasn't loaded the tool yet — in that case, load it now (see the verification checklist above). When the fallback applies, present the options as a numbered list and wait for the user's reply — never silently skip the question. - **Dispatch on selection.** Route by the option letter (A / B / C / D), not by the rendered label string. The option-C label varies by tracker-detection confidence (`File a [TRACKER] ticket per finding without applying fixes` for a named tracker, `File an issue per finding without applying fixes` as the generic fallback, or omitted entirely when no sink is available — see `references/tracker-defer.md`), and options A / B / D have a single canonical label each. The letter is the stable dispatch signal; the canonical labels below are shown for documentation only. A low-confidence run that rendered option C as the generic label routes to the same branch as a high-confidence run that rendered it with the named tracker. - (A) `Review each finding one by one` — load `references/walkthrough.md` and enter the per-finding walk-through loop. The walk-through accumulates Apply decisions in memory; Defer decisions execute inline via `references/tracker-defer.md`; Skip / Acknowledge decisions are recorded as no-action; `LFG the rest` routes through `references/bulk-preview.md`. At end of the loop, dispatch one fixer subagent for the accumulated Apply set (Step 3). Emit the unified completion report. diff --git a/plugins/compound-engineering/skills/ce-code-review/references/bulk-preview.md b/plugins/compound-engineering/skills/ce-code-review/references/bulk-preview.md index 1f865c238..2b37d49df 100644 --- a/plugins/compound-engineering/skills/ce-code-review/references/bulk-preview.md +++ b/plugins/compound-engineering/skills/ce-code-review/references/bulk-preview.md @@ -86,7 +86,7 @@ When no `why_it_matters` is available for a finding (e.g., Unit 2's template upg ## Question and options -After the preview body is rendered, ask the user using the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). In Claude Code, the tool should already be loaded from the Interactive-mode pre-load step — if it isn't, call `ToolSearch` with query `select:AskUserQuestion` now. The text fallback below applies only when that load explicitly fails. +After the preview body is rendered, ask the user using the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). In Claude Code, the tool should already be loaded from the Interactive-mode pre-load step — if it isn't, call `ToolSearch` with query `select:AskUserQuestion` now. The text fallback below applies when the tool is unavailable or errors (e.g., the load explicitly fails, or Codex runtime modes without `request_user_input`) — never silently skip the question. Stem (adapted to the path): - For routing B: `The agent is about to apply the plan above. Proceed?` diff --git a/plugins/compound-engineering/skills/ce-code-review/references/tracker-defer.md b/plugins/compound-engineering/skills/ce-code-review/references/tracker-defer.md index d932a0b02..9679a2e6c 100644 --- a/plugins/compound-engineering/skills/ce-code-review/references/tracker-defer.md +++ b/plugins/compound-engineering/skills/ce-code-review/references/tracker-defer.md @@ -133,6 +133,6 @@ When uncertain, prefer "drop with explicit user-facing notice" over "pass throug ## Cross-platform notes -The question-tool name varies by platform. Use the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). In Claude Code the tool should already be loaded from the Interactive-mode pre-load step — if it isn't, call `ToolSearch` with query `select:AskUserQuestion` now. Only when that load explicitly fails, or on a platform with no blocking tool, fall back to numbered options and waiting for the user's next reply before proceeding. +The question-tool name varies by platform. Use the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). In Claude Code the tool should already be loaded from the Interactive-mode pre-load step — if it isn't, call `ToolSearch` with query `select:AskUserQuestion` now. If the tool is unavailable or errors (load failure, platform with no blocking tool, or a Codex runtime mode without `request_user_input`), fall back to numbered options and wait for the user's reply — never silently skip the question. The fallback chain's final tier (harness task-tracking primitive) does not exist on every target platform. When converted for a platform that has no equivalent of `TaskCreate` / `update_plan`, the agent should treat that platform as "no harness sink" and move directly to the no-sink behavior (omit Defer from menus and tell the user why). diff --git a/plugins/compound-engineering/skills/ce-code-review/references/walkthrough.md b/plugins/compound-engineering/skills/ce-code-review/references/walkthrough.md index 86a13eb01..e1bc95b1e 100644 --- a/plugins/compound-engineering/skills/ce-code-review/references/walkthrough.md +++ b/plugins/compound-engineering/skills/ce-code-review/references/walkthrough.md @@ -22,7 +22,7 @@ Each finding's recommended action has already been normalized by Stage 5 (step 7 Each finding is presented in two parts: a **terminal output block** carrying the explanation, and a **question** via the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini) carrying the decision. Never merge the two — the terminal block uses markdown; the question uses plain text. -In Claude Code the tool should already be loaded from the Interactive-mode pre-load step in `SKILL.md` — if it isn't, call `ToolSearch` with query `select:AskUserQuestion` now. Rendering the per-finding question as narrative text is a bug, not a valid fallback. +In Claude Code the tool should already be loaded from the Interactive-mode pre-load step in `SKILL.md` — if it isn't, call `ToolSearch` with query `select:AskUserQuestion` now. If the tool is genuinely unavailable or errors (e.g., Codex runtime modes without `request_user_input`), present the per-finding options as a numbered list and wait for the user's reply — never silently skip the question. ### Terminal output block (print before firing the question) diff --git a/plugins/compound-engineering/skills/ce-commit-push-pr/SKILL.md b/plugins/compound-engineering/skills/ce-commit-push-pr/SKILL.md index ee2bcb007..f5e40c198 100644 --- a/plugins/compound-engineering/skills/ce-commit-push-pr/SKILL.md +++ b/plugins/compound-engineering/skills/ce-commit-push-pr/SKILL.md @@ -7,7 +7,7 @@ description: Commit, push, and open a PR with an adaptive, value-first descripti Go from working changes to an open pull request, or rewrite an existing PR description. -**Asking the user:** When this skill says "ask the user", use the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). If unavailable, present the question and wait for a reply. +**Asking the user:** When this skill says "ask the user", use the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). If the tool is unavailable or errors, present the question in chat and wait for a reply — never silently skip the question. ## Mode detection diff --git a/plugins/compound-engineering/skills/ce-commit/SKILL.md b/plugins/compound-engineering/skills/ce-commit/SKILL.md index 7274d5083..259a743aa 100644 --- a/plugins/compound-engineering/skills/ce-commit/SKILL.md +++ b/plugins/compound-engineering/skills/ce-commit/SKILL.md @@ -56,7 +56,7 @@ If both fail, fall back to `main`. If the git status from the context above shows a clean working tree (no staged, modified, or untracked files), report that there is nothing to commit and stop. -If the current branch from the context above is empty, the repository is in detached HEAD state. Explain that a branch is required before committing if the user wants this work attached to a branch. Ask whether to create a feature branch now. Use the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). If no question tool is available, present the options and wait for the user's reply before proceeding. +If the current branch from the context above is empty, the repository is in detached HEAD state. Explain that a branch is required before committing if the user wants this work attached to a branch. Ask whether to create a feature branch now. Use the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). If the tool is unavailable or errors, present the options and wait for the user's reply — never silently skip the question. - If the user chooses to create a branch, derive the name from the change content, create it with `git checkout -b `, then run `git branch --show-current` again and use that result as the current branch name for the rest of the workflow. - If the user declines, continue with the detached HEAD commit. @@ -80,7 +80,7 @@ Keep this lightweight: ### Step 4: Stage and commit -If the current branch from the context above is `main`, `master`, or the resolved default branch from Step 1, warn the user and ask whether to continue committing here or create a feature branch first. Use the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). If no question tool is available, present the options and wait for the user's reply before proceeding. If the user chooses to create a branch, derive the name from the change content, create it with `git checkout -b `, then continue. +If the current branch from the context above is `main`, `master`, or the resolved default branch from Step 1, warn the user and ask whether to continue committing here or create a feature branch first. Use the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). If the tool is unavailable or errors, present the options and wait for the user's reply — never silently skip the question. If the user chooses to create a branch, derive the name from the change content, create it with `git checkout -b `, then continue. Write the commit message: - **Subject line**: Concise, imperative mood, focused on *why* not *what*. Follow the convention determined in Step 2. diff --git a/plugins/compound-engineering/skills/ce-compound-refresh/SKILL.md b/plugins/compound-engineering/skills/ce-compound-refresh/SKILL.md index 7724f93fd..d0070600f 100644 --- a/plugins/compound-engineering/skills/ce-compound-refresh/SKILL.md +++ b/plugins/compound-engineering/skills/ce-compound-refresh/SKILL.md @@ -31,7 +31,7 @@ Check if `$ARGUMENTS` contains `mode:autofix`. If present, strip it from argumen Follow the same interaction style as `ce-brainstorm`: -- Ask questions **one at a time** — use the platform's blocking question tool when available (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). Otherwise, present numbered options in plain text and wait for the user's reply before continuing +- Ask questions **one at a time** — use the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). If the tool is unavailable or errors, present numbered options in plain text and wait for the user's reply — never silently skip the question - Prefer **multiple choice** when natural options exist - Start with **scope and intent**, then narrow only when needed - Do **not** ask the user to make decisions before you have evidence @@ -393,7 +393,7 @@ Do **not** ask questions about whether code changes were intentional, whether th #### Question Style -Always present choices using the platform's blocking question tool when available (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). Otherwise, present numbered options in plain text and wait for the user's reply before proceeding. +Always present choices using the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). If the tool is unavailable or errors, present numbered options in plain text and wait for the user's reply — never silently skip the question. Question rules: @@ -673,6 +673,6 @@ After the refresh report is generated, check whether the project's instruction f `docs/solutions/` — documented solutions to past problems (bugs, best practices, workflow patterns), organized by category with YAML frontmatter (`module`, `tags`, `problem_type`). Relevant when implementing or debugging in documented areas. ``` - c. In interactive mode, explain to the user why this matters — agents working in this repo (including fresh sessions, other tools, or collaborators without the plugin) won't know to check `docs/solutions/` unless the instruction file surfaces it. Show the proposed change and where it would go, then use the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini) to get consent before making the edit. If no question tool is available, present the proposal and wait for the user's reply. In autofix mode, include it as a "Discoverability recommendation" line in the report — do not attempt to edit instruction files (autofix scope is doc maintenance, not project config). + c. In interactive mode, explain to the user why this matters — agents working in this repo (including fresh sessions, other tools, or collaborators without the plugin) won't know to check `docs/solutions/` unless the instruction file surfaces it. Show the proposed change and where it would go, then use the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini) to get consent before making the edit. If the tool is unavailable or errors, present the proposal and wait for the user's reply — never silently skip the question. In autofix mode, include it as a "Discoverability recommendation" line in the report — do not attempt to edit instruction files (autofix scope is doc maintenance, not project config). 5. **Amend or create a follow-up commit when the check produces edits.** If step 4 resulted in an edit to an instruction file and Phase 5 already committed the refresh changes, stage the newly edited file and either amend the existing commit (if still on the same branch and no push has occurred) or create a small follow-up commit (e.g., `docs: add docs/solutions/ discoverability to AGENTS.md`). If Phase 5 already pushed the branch to a remote (e.g., the branch+PR path), push the follow-up commit as well so the open PR includes the discoverability change. This keeps the working tree clean and the remote in sync at the end of the run. If the user chose "Don't commit" in Phase 5, leave the instruction-file edit unstaged alongside the other uncommitted refresh changes — no separate commit logic needed. diff --git a/plugins/compound-engineering/skills/ce-compound/SKILL.md b/plugins/compound-engineering/skills/ce-compound/SKILL.md index 4d85ad74b..9a66c5906 100644 --- a/plugins/compound-engineering/skills/ce-compound/SKILL.md +++ b/plugins/compound-engineering/skills/ce-compound/SKILL.md @@ -32,7 +32,7 @@ When spawning subagents, pass the relevant file contents into the task prompt so ## Execution Strategy -Present the user with two options before proceeding, using the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). If no question tool is available, present the options and wait for the user's reply. +Present the user with two options before proceeding, using the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). If the tool is unavailable or errors, present the options and wait for the user's reply — never silently skip the question. ``` 1. Full (recommended) — the complete compound workflow. Researches, @@ -304,7 +304,7 @@ After the learning is written and the refresh decision is made, check whether th `docs/solutions/` — documented solutions to past problems (bugs, best practices, workflow patterns), organized by category with YAML frontmatter (`module`, `tags`, `problem_type`). Relevant when implementing or debugging in documented areas. ``` - c. In full mode, explain to the user why this matters — agents working in this repo (including fresh sessions, other tools, or collaborators without the plugin) won't know to check `docs/solutions/` unless the instruction file surfaces it. Show the proposed change and where it would go, then use the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini) to get consent before making the edit. If no question tool is available, present the proposal and wait for the user's reply. In lightweight mode, output a one-liner note and move on + c. In full mode, explain to the user why this matters — agents working in this repo (including fresh sessions, other tools, or collaborators without the plugin) won't know to check `docs/solutions/` unless the instruction file surfaces it. Show the proposed change and where it would go, then use the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini) to get consent before making the edit. If the tool is unavailable or errors, present the proposal and wait for the user's reply — never silently skip the question. In lightweight mode, output a one-liner note and move on ### Phase 3: Optional Enhancement @@ -460,7 +460,7 @@ What's next? 5. Other ``` -**After displaying the success output, present the "What's next?" options using the platform's blocking question tool** (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). If no question tool is available, present the numbered options and wait for the user's reply before proceeding. Do not continue the workflow or end the turn without the user's selection. +**After displaying the success output, present the "What's next?" options using the platform's blocking question tool** (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). If the tool is unavailable or errors, present the numbered options and wait for the user's reply — never silently skip the question. Do not continue the workflow or end the turn without the user's selection. **Alternate output (when updating an existing doc due to high overlap):** diff --git a/plugins/compound-engineering/skills/ce-debug/SKILL.md b/plugins/compound-engineering/skills/ce-debug/SKILL.md index 6e9ff6097..4ddbf45a3 100644 --- a/plugins/compound-engineering/skills/ce-debug/SKILL.md +++ b/plugins/compound-engineering/skills/ce-debug/SKILL.md @@ -113,7 +113,7 @@ Once the root cause is confirmed, present: - Which tests to add or modify to prevent recurrence (specific test file, test case description, what the assertion should verify) - Whether existing tests should have caught this and why they did not -Then offer next steps (use the platform's question tool — `AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini — or present numbered options and wait): +Then offer next steps using the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). If the tool is unavailable or errors, present numbered options in chat and wait for the user's reply — never silently skip the question: 1. **Fix it now** — proceed to Phase 3 2. **View in Proof** (`/ce-proof`) — for easy review and sharing with others diff --git a/plugins/compound-engineering/skills/ce-demo-reel/SKILL.md b/plugins/compound-engineering/skills/ce-demo-reel/SKILL.md index 7d596f156..2abd9ce0f 100644 --- a/plugins/compound-engineering/skills/ce-demo-reel/SKILL.md +++ b/plugins/compound-engineering/skills/ce-demo-reel/SKILL.md @@ -49,7 +49,7 @@ Before capturing anything, verify the feature works by actually using it: - **Library**: Run example code using the new/changed API - **Bug fix**: Reproduce the original bug scenario and confirm it's fixed -Use the workspace where the feature was built. Do not reinstall from scratch. If setup requires credentials or services, use the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini) to ask the user. +Use the workspace where the feature was built. Do not reinstall from scratch. If setup requires credentials or services, use the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini) to ask the user. If the tool is unavailable or errors, ask in chat and wait for a reply — never silently skip the question. ## Step 2: Detect Project Type @@ -114,7 +114,7 @@ python3 scripts/capture-demo.py recommend --project-type [TYPE] --change-type [m This outputs JSON with `recommended` (the best tier), `available` (list of tiers whose tools are present), and `reasoning`. -Present the available tiers to the user via the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). Mark the recommended tier. Always include "No evidence needed" as a final option. +Present the available tiers to the user via the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). If the tool is unavailable or errors, present numbered options in chat and wait for the user's reply — never silently skip the question. Mark the recommended tier. Always include "No evidence needed" as a final option. **Question:** "How should evidence be captured for this change?" diff --git a/plugins/compound-engineering/skills/ce-demo-reel/references/upload-and-approval.md b/plugins/compound-engineering/skills/ce-demo-reel/references/upload-and-approval.md index bbc352d7f..cc8807694 100644 --- a/plugins/compound-engineering/skills/ce-demo-reel/references/upload-and-approval.md +++ b/plugins/compound-engineering/skills/ce-demo-reel/references/upload-and-approval.md @@ -18,7 +18,7 @@ For multiple files (static screenshots tier), upload each file separately. ## Step 2: Approval Gate -Present the preview URL to the user for approval. Use the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). +Present the preview URL to the user for approval. Use the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). If the tool is unavailable or errors, present the options in chat and wait for the user's reply — never silently skip the question. **Question:** "Evidence preview (1h link): [PREVIEW_URL]" diff --git a/plugins/compound-engineering/skills/ce-doc-review/SKILL.md b/plugins/compound-engineering/skills/ce-doc-review/SKILL.md index 7d94111c4..b54bf2640 100644 --- a/plugins/compound-engineering/skills/ce-doc-review/SKILL.md +++ b/plugins/compound-engineering/skills/ce-doc-review/SKILL.md @@ -10,8 +10,8 @@ Review requirements or plan documents through multi-persona analysis. Dispatches ## Interactive mode rules -- **Pre-load the platform question tool before any question fires.** In Claude Code, `AskUserQuestion` is a deferred tool — its schema is not available at session start. At the start of Interactive-mode work (before the routing question, per-finding walk-through questions, bulk-preview Proceed/Cancel, and Phase 5 terminal question), call `ToolSearch` with query `select:AskUserQuestion` to load the schema. Load it once, eagerly, at the top of the Interactive flow — do not wait for the first question site. On Codex (`request_user_input`) and Gemini (`ask_user`) this step is not required; the tools are loaded by default. -- **The numbered-list fallback only applies on confirmed load failure.** Presenting options as a numbered list and waiting for the user's reply is valid only when `ToolSearch` returns no match or the tool call explicitly fails. Rendering a question as narrative text because the tool feels inconvenient, because the model is in report-formatting mode, or because the instruction was buried in a long skill is a bug. A question that calls for a user decision must either fire the tool or fail loudly. +- **Pre-load the platform question tool before any question fires.** In Claude Code, `AskUserQuestion` is a deferred tool — its schema is not available at session start. At the start of Interactive-mode work (before the routing question, per-finding walk-through questions, bulk-preview Proceed/Cancel, and Phase 5 terminal question), call `ToolSearch` with query `select:AskUserQuestion` to load the schema. Load it once, eagerly, at the top of the Interactive flow — do not wait for the first question site. On Codex and Gemini this preload is not required. +- **The numbered-list fallback applies when the tool is unavailable or errors** — including `ToolSearch` returning no match, the tool call explicitly failing, or Codex runtime modes where `request_user_input` is unavailable. In those cases, present options as a numbered list and wait for the user's reply — never silently skip the question. Rendering a question as narrative text because the tool feels inconvenient, because the model is in report-formatting mode, or because the instruction was buried in a long skill is a bug. A question that calls for a user decision must either fire the tool or fall back loudly. ## Phase 0: Detect Mode diff --git a/plugins/compound-engineering/skills/ce-doc-review/references/bulk-preview.md b/plugins/compound-engineering/skills/ce-doc-review/references/bulk-preview.md index bd444114a..e51c2ceb8 100644 --- a/plugins/compound-engineering/skills/ce-doc-review/references/bulk-preview.md +++ b/plugins/compound-engineering/skills/ce-doc-review/references/bulk-preview.md @@ -80,7 +80,7 @@ When no `why_it_matters` is available for a finding (rare — only if persona ou ## Question and options -After the preview body is rendered, ask the user using the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). In Claude Code, the tool should already be loaded from the Interactive-mode pre-load step — if it isn't, call `ToolSearch` with query `select:AskUserQuestion` now. The text fallback below applies only when that load explicitly fails. +After the preview body is rendered, ask the user using the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). In Claude Code, the tool should already be loaded from the Interactive-mode pre-load step — if it isn't, call `ToolSearch` with query `select:AskUserQuestion` now. The text fallback below applies when the tool is unavailable or errors (e.g., the load explicitly fails, or Codex runtime modes without `request_user_input`) — never silently skip the question. Stem (adapted to the path): diff --git a/plugins/compound-engineering/skills/ce-doc-review/references/synthesis-and-presentation.md b/plugins/compound-engineering/skills/ce-doc-review/references/synthesis-and-presentation.md index 952f762b9..96828f481 100644 --- a/plugins/compound-engineering/skills/ce-doc-review/references/synthesis-and-presentation.md +++ b/plugins/compound-engineering/skills/ce-doc-review/references/synthesis-and-presentation.md @@ -300,7 +300,7 @@ These are pipeline artifacts and must not be flagged for removal. **Headless mode:** Return "Review complete" immediately. Do not ask questions. The caller receives the text envelope from Phase 4 and handles any remaining findings. -**Interactive mode:** fire the terminal question using the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). This question is distinct from the mid-flow routing question (`references/walkthrough.md`) — the routing question chooses *how* to engage with findings, this one chooses *what to do next* once engagement is complete. Do not merge them. +**Interactive mode:** fire the terminal question using the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). If the tool is unavailable or errors, present numbered options in chat and wait for the user's reply — never silently skip the question. This question is distinct from the mid-flow routing question (`references/walkthrough.md`) — the routing question chooses *how* to engage with findings, this one chooses *what to do next* once engagement is complete. Do not merge them. **Stem:** `Apply decisions and what next?` diff --git a/plugins/compound-engineering/skills/ce-doc-review/references/walkthrough.md b/plugins/compound-engineering/skills/ce-doc-review/references/walkthrough.md index 53b207701..a8032d85d 100644 --- a/plugins/compound-engineering/skills/ce-doc-review/references/walkthrough.md +++ b/plugins/compound-engineering/skills/ce-doc-review/references/walkthrough.md @@ -10,7 +10,7 @@ Interactive mode only. After `safe_auto` fixes apply and synthesis produces the remaining finding set, the orchestrator asks a four-option routing question before any walk-through or bulk action runs. -Use the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). In Claude Code, the tool should already be loaded from the Interactive-mode pre-load step in `SKILL.md` — if it isn't, call `ToolSearch` with query `select:AskUserQuestion` now. Rendering the routing question as narrative text is a bug, not a valid fallback. +Use the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). In Claude Code, the tool should already be loaded from the Interactive-mode pre-load step in `SKILL.md` — if it isn't, call `ToolSearch` with query `select:AskUserQuestion` now. If the tool is unavailable or errors (e.g., Codex runtime modes without `request_user_input`), present the options as a numbered list and wait for the user's reply — never silently skip the question. Rendering the routing question as narrative text without the numbered-list fallback is a bug. **Stem:** `What should the agent do with the remaining N findings?` diff --git a/plugins/compound-engineering/skills/ce-frontend-design/SKILL.md b/plugins/compound-engineering/skills/ce-frontend-design/SKILL.md index 696111fdf..e1bd58727 100644 --- a/plugins/compound-engineering/skills/ce-frontend-design/SKILL.md +++ b/plugins/compound-engineering/skills/ce-frontend-design/SKILL.md @@ -52,7 +52,7 @@ Based on detected signals, choose a mode: ### Asking the User -When context is ambiguous, use the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). If no question tool is available, assume "partial" mode and proceed conservatively. +When context is ambiguous, use the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). If the tool is unavailable or errors, present the options in chat and wait for a reply — never silently skip. If the user declines to pick, assume "partial" mode and proceed conservatively. Example question: "I found [detected signals]. Should I follow your existing design patterns or create something distinctive?" diff --git a/plugins/compound-engineering/skills/ce-ideate/SKILL.md b/plugins/compound-engineering/skills/ce-ideate/SKILL.md index fadcb8b39..2026d6bf8 100644 --- a/plugins/compound-engineering/skills/ce-ideate/SKILL.md +++ b/plugins/compound-engineering/skills/ce-ideate/SKILL.md @@ -18,7 +18,7 @@ This workflow produces a ranked ideation artifact in `docs/ideation/`. It does * ## Interaction Method -Use the platform's blocking question tool when available (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). Otherwise, present numbered options in chat and wait for the user's reply before proceeding. +Use the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). If the tool is unavailable or errors, present numbered options in chat and wait for the user's reply — never silently skip the question. Ask one question at a time. Prefer concise single-select choices when natural options exist. diff --git a/plugins/compound-engineering/skills/ce-ideate/references/post-ideation-workflow.md b/plugins/compound-engineering/skills/ce-ideate/references/post-ideation-workflow.md index baa99a907..a71e14948 100644 --- a/plugins/compound-engineering/skills/ce-ideate/references/post-ideation-workflow.md +++ b/plugins/compound-engineering/skills/ce-ideate/references/post-ideation-workflow.md @@ -136,7 +136,7 @@ When the proof skill returns control: ## Phase 6: Refine or Hand Off -Ask what should happen next using the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). If no question tool is available, present numbered options in chat and wait for the user's reply. +Ask what should happen next using the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). If the tool is unavailable or errors, present numbered options in chat and wait for the user's reply — never silently skip the question. **Question:** "What should the agent do next?" diff --git a/plugins/compound-engineering/skills/ce-ideate/references/universal-ideation.md b/plugins/compound-engineering/skills/ce-ideate/references/universal-ideation.md index c909fecf2..10363ec2c 100644 --- a/plugins/compound-engineering/skills/ce-ideate/references/universal-ideation.md +++ b/plugins/compound-engineering/skills/ce-ideate/references/universal-ideation.md @@ -53,7 +53,7 @@ Present survivors before any persistence. For each: title, description, rational Persistence is opt-in. The terminal review loop is a complete ideation cycle. Refinement happens in conversation with no file or network cost. Persistence triggers only when the user explicitly chooses to save, share, or hand off. -Use the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini) — or numbered options in chat as a fallback — and offer four choices: +Use the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). If the tool is unavailable or errors, present numbered options in chat and wait for the user's reply — never silently skip the question. Offer four choices: - **Refine the ideation in conversation (or stop here — no save)** — add ideas, re-evaluate, or deepen analysis without writing anything. Ending the conversation at any point after this pick is a valid no-save exit. - **Open and iterate in Proof** — invoke the Proof HITL review path per the §6.2 contract in `references/post-ideation-workflow.md`: upload the survivors to Proof (rendered to a temp file since no local file is written in non-software elsewhere mode), iterate via comments, and exit cleanly with the Proof URL as the canonical record on successful return. Proof iteration is typically the terminal act in this mode, so the flow does not force another menu choice afterward. Only an `aborted` status returns to this menu. On persistent Proof failure, apply the §6.5 Proof Failure Ladder from `references/post-ideation-workflow.md` so the iteration attempt is not stranded without recovery. diff --git a/plugins/compound-engineering/skills/ce-onboarding/SKILL.md b/plugins/compound-engineering/skills/ce-onboarding/SKILL.md index 4cc315d25..d0224c4b1 100644 --- a/plugins/compound-engineering/skills/ce-onboarding/SKILL.md +++ b/plugins/compound-engineering/skills/ce-onboarding/SKILL.md @@ -385,7 +385,7 @@ Write the file to the repo root as `ONBOARDING.md`. ### Phase 5: Present Result -After writing, inform the user that `ONBOARDING.md` has been generated. Offer next steps using the platform's blocking question tool when available (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). Otherwise, present numbered options in chat. +After writing, inform the user that `ONBOARDING.md` has been generated. Offer next steps using the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). If the tool is unavailable or errors, present numbered options in chat and wait for the user's reply — never silently skip the question. Options: 1. Open the file for review diff --git a/plugins/compound-engineering/skills/ce-optimize/SKILL.md b/plugins/compound-engineering/skills/ce-optimize/SKILL.md index d663e0cdb..37a9d82e5 100644 --- a/plugins/compound-engineering/skills/ce-optimize/SKILL.md +++ b/plugins/compound-engineering/skills/ce-optimize/SKILL.md @@ -10,7 +10,7 @@ Run metric-driven iterative optimization. Define a goal, build measurement scaff ## Interaction Method -Use the platform's blocking question tool when available (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). Otherwise, present numbered options in chat and wait for the user's reply before proceeding. +Use the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). If the tool is unavailable or errors, present numbered options in chat and wait for the user's reply — never silently skip the question. ## Input diff --git a/plugins/compound-engineering/skills/ce-plan/SKILL.md b/plugins/compound-engineering/skills/ce-plan/SKILL.md index ac34bf16f..3f1640124 100644 --- a/plugins/compound-engineering/skills/ce-plan/SKILL.md +++ b/plugins/compound-engineering/skills/ce-plan/SKILL.md @@ -16,7 +16,7 @@ This workflow produces a durable implementation plan. It does **not** implement ## Interaction Method -Use the platform's question tool when available. When asking the user a question, prefer the platform's blocking question tool if one exists (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). Otherwise, present numbered options in chat and wait for the user's reply before proceeding. +When asking the user a question, prefer the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). If the tool is unavailable or errors, present numbered options in chat and wait for the user's reply — never silently skip the question. Ask one question at a time. Prefer a concise single-select choice when natural options exist. @@ -735,7 +735,7 @@ When deepening is warranted, read `references/deepening-workflow.md` for confide **Load `references/plan-handoff.md` now.** It contains the full instructions for 5.3.8 (document review), 5.3.9 (final checks and cleanup), and 5.4 (post-generation handoff, including the Proof HITL flow, post-HITL re-review, and Issue Creation branching). Document review is mandatory — do not skip it even if the confidence check already ran. -After document review and final checks, present this menu using the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). If no question tool is available, present the numbered options in chat and wait for the user's reply before proceeding. +After document review and final checks, present this menu using the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). If the tool is unavailable or errors, present the numbered options in chat and wait for the user's reply — never silently skip the question. **Question:** "Plan ready at `docs/plans/YYYY-MM-DD-NNN---plan.md`. What would you like to do next?" diff --git a/plugins/compound-engineering/skills/ce-plan/references/plan-handoff.md b/plugins/compound-engineering/skills/ce-plan/references/plan-handoff.md index c1706688b..219fec2d3 100644 --- a/plugins/compound-engineering/skills/ce-plan/references/plan-handoff.md +++ b/plugins/compound-engineering/skills/ce-plan/references/plan-handoff.md @@ -31,7 +31,7 @@ If artifact-backed mode was used: **Pipeline mode:** If invoked from an automated workflow such as LFG, SLFG, or any `disable-model-invocation` context, skip the interactive menu below and return control to the caller immediately. The plan file has already been written, the confidence check has already run, and ce-doc-review has already run — the caller (e.g., lfg, slfg) determines the next step. -After document-review completes, present the options using the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). If no question tool is available, present the numbered options in chat and wait for the user's reply before proceeding. +After document-review completes, present the options using the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). If the tool is unavailable or errors, present the numbered options in chat and wait for the user's reply — never silently skip the question. **Question:** "Plan ready at `docs/plans/YYYY-MM-DD-NNN---plan.md`. What would you like to do next?" @@ -82,7 +82,7 @@ When the user selects "Create Issue", detect their project tracker: linear issue create --title "" --description "$(cat <plan_path>)" ``` -4. If no tracker is configured, ask the user which tracker they use with the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). If no question tool is available, ask in chat and wait for the reply. Options: `GitHub`, `Linear`, `Skip`. Then: +4. If no tracker is configured, ask the user which tracker they use with the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). If the tool is unavailable or errors, ask in chat and wait for the reply — never silently skip. Options: `GitHub`, `Linear`, `Skip`. Then: - Proceed with the chosen tracker's command above - Offer to persist the choice by adding `project_tracker: <value>` to `AGENTS.md`, where `<value>` is the lowercase tracker key (`github` or `linear`) — not the display label — so future runs match the detector in step 1 and skip this prompt - If `Skip`, return to the options without creating an issue diff --git a/plugins/compound-engineering/skills/ce-plan/references/universal-planning.md b/plugins/compound-engineering/skills/ce-plan/references/universal-planning.md index 697b5629f..29caf48d5 100644 --- a/plugins/compound-engineering/skills/ce-plan/references/universal-planning.md +++ b/plugins/compound-engineering/skills/ce-plan/references/universal-planning.md @@ -44,7 +44,7 @@ Example for "plan a date night in Seattle this Saturday": ## Step 1b: Focused Q&A -Ask up to 3 questions targeting the unknowns that would most change the plan. Use the platform's question tool when available (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). Otherwise, present numbered options in chat and wait for the user's reply. +Ask up to 3 questions targeting the unknowns that would most change the plan. Use the platform's question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). If the tool is unavailable or errors, present numbered options in chat and wait for the user's reply — never silently skip the question. **How to ask well:** - Offer informed options, not open-ended blanks. Instead of "When are you going?", try "Mid-week visits have 30-40% shorter lines — are you flexible on timing?" The question should give the user a frame of reference, not just extract information. @@ -93,7 +93,7 @@ Example: A date night plan should present 2-3 restaurant options, 2-3 activity o ## Step 3: Save or Share -After structuring the plan, ask the user how they want to receive it using the platform's question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). Otherwise, present numbered options in chat. +After structuring the plan, ask the user how they want to receive it using the platform's question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). If the tool is unavailable or errors, present numbered options in chat and wait for the user's reply — never silently skip the question. **Question:** "Plan ready. How would you like to receive it?" diff --git a/plugins/compound-engineering/skills/ce-pr-description/SKILL.md b/plugins/compound-engineering/skills/ce-pr-description/SKILL.md index dd7eaf66f..8e9ca5ae2 100644 --- a/plugins/compound-engineering/skills/ce-pr-description/SKILL.md +++ b/plugins/compound-engineering/skills/ce-pr-description/SKILL.md @@ -397,4 +397,4 @@ If Step 1 exited gracefully (closed/merged PR, invalid range, empty commit list) This skill does not ask questions directly. If the diff is ambiguous about something the caller should decide (e.g., focus conflicts with the actual changes, or evidence is technically capturable but the caller did not pre-stage it), surface the ambiguity in the returned output or a short note to the caller — do not invoke a platform question tool. -Callers that need to ask the user are responsible for using their own platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini) before or after invoking this skill. +Callers that need to ask the user are responsible for using their own platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini), with a numbered-options fallback when the tool is unavailable or errors — never silently skipping the question. diff --git a/plugins/compound-engineering/skills/ce-proof/references/hitl-review.md b/plugins/compound-engineering/skills/ce-proof/references/hitl-review.md index 338fca7e6..4e07e2690 100644 --- a/plugins/compound-engineering/skills/ce-proof/references/hitl-review.md +++ b/plugins/compound-engineering/skills/ce-proof/references/hitl-review.md @@ -40,7 +40,7 @@ Return shape (used by upstream callers to resume their handoff; also shown to th Doc ready for review: <tokenUrl> ``` -5. Ask the user with the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). If no question tool is available, present the options in chat and wait for the reply. +5. Ask the user with the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). If the tool is unavailable or errors, present the options in chat and wait for the reply — never silently skip the question. **Question:** "Highlight text in Proof to leave a comment. The agent will read each one, reply in-thread or apply the fix, then sync changes back to your local file. What's next?" @@ -182,7 +182,7 @@ Phrase them in whatever voice matches the situation rather than matching a templ ## Phase 4: Next-Signal Prompt -Ask the user with the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). If no question tool is available, present the options in chat and wait for the reply. +Ask the user with the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). If the tool is unavailable or errors, present the options in chat and wait for the reply — never silently skip the question. **Question:** "Proof review pass done. What's next?" @@ -220,7 +220,7 @@ Runs when the user selects **Proceed**. Before prompting anything, check whether **If different** — continue to step 3. -3. Ask with the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). If no question tool is available, present the options in chat and wait for the reply. +3. Ask with the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). If the tool is unavailable or errors, present the options in chat and wait for the reply — never silently skip the question. **Question:** "Sync the reviewed doc back to `<localPath>`? Proof has your review changes; local still has the pre-review copy." diff --git a/plugins/compound-engineering/skills/ce-report-bug/SKILL.md b/plugins/compound-engineering/skills/ce-report-bug/SKILL.md index 3fda3f9c2..0a4897a90 100644 --- a/plugins/compound-engineering/skills/ce-report-bug/SKILL.md +++ b/plugins/compound-engineering/skills/ce-report-bug/SKILL.md @@ -11,7 +11,7 @@ Report bugs encountered while using the compound-engineering plugin. This skill ## Step 1: Gather Bug Information -Ask the user the following questions (using the platform's blocking question tool — e.g., `AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini — or present numbered options and wait for a reply): +Ask the user the following questions using the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). If the tool is unavailable or errors, present numbered options in chat and wait for a reply — never silently skip the question: **Question 1: Bug Category** - What type of issue are you experiencing? diff --git a/plugins/compound-engineering/skills/ce-resolve-pr-feedback/SKILL.md b/plugins/compound-engineering/skills/ce-resolve-pr-feedback/SKILL.md index 98c8bd6bb..79fc7b3cc 100644 --- a/plugins/compound-engineering/skills/ce-resolve-pr-feedback/SKILL.md +++ b/plugins/compound-engineering/skills/ce-resolve-pr-feedback/SKILL.md @@ -344,9 +344,9 @@ Still pending from a previous run (count): If a blocking question tool is available, use it to ask about all pending decisions (both new `needs-human` and previous-run pending) together. If there are only pending decisions and no new work was done, the summary is just the pending items. -If a blocking question tool is available (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini), use it to present the decisions and wait for the user's response. After they decide, process the remaining items: fix the code, compose the reply, post it, and resolve the thread. +Use the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini) to present the decisions and wait for the user's response. After they decide, process the remaining items: fix the code, compose the reply, post it, and resolve the thread. -If no question tool is available, present the decisions in the summary output and wait for the user to respond in conversation. If they don't respond, the items remain open on the PR for later handling. +If the tool is unavailable or errors, present the decisions in the summary output and wait for the user to respond in conversation — never silently skip. If they don't respond, the items remain open on the PR for later handling. --- diff --git a/plugins/compound-engineering/skills/ce-sessions/SKILL.md b/plugins/compound-engineering/skills/ce-sessions/SKILL.md index f88a34f89..860a928a4 100644 --- a/plugins/compound-engineering/skills/ce-sessions/SKILL.md +++ b/plugins/compound-engineering/skills/ce-sessions/SKILL.md @@ -24,7 +24,7 @@ If the lines above resolved to plain values (a folder name like `my-repo` and a ## Execution -If no argument is provided, ask what the user wants to know about their session history. Use the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). If no question tool is available, ask in plain text and wait for a reply. +If no argument is provided, ask what the user wants to know about their session history. Use the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). If the tool is unavailable or errors, ask in plain text and wait for a reply — never silently skip the question. Dispatch `research:ce-session-historian` with the user's question as the task prompt. Omit the `mode` parameter so the user's configured permission settings apply. Include in the dispatch prompt: diff --git a/plugins/compound-engineering/skills/ce-setup/SKILL.md b/plugins/compound-engineering/skills/ce-setup/SKILL.md index 1d598f8e9..2f8a86291 100644 --- a/plugins/compound-engineering/skills/ce-setup/SKILL.md +++ b/plugins/compound-engineering/skills/ce-setup/SKILL.md @@ -8,7 +8,7 @@ disable-model-invocation: true ## Interaction Method -Ask the user each question below using the platform's blocking question tool (e.g., `AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). If no structured question tool is available, present each question as a numbered list and wait for a reply before proceeding. For multiSelect questions, accept comma-separated numbers (e.g. `1, 3`). Never skip or auto-configure. +Ask the user each question below using the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). If the tool is unavailable or errors, present each question as a numbered list and wait for a reply — never silently skip or auto-configure. For multiSelect questions, accept comma-separated numbers (e.g. `1, 3`). Interactive setup for compound-engineering — diagnoses environment health, cleans obsolete repo-local CE config, and helps configure required tools. Review agent selection is handled automatically by `ce-code-review`; project-specific review guidance belongs in `CLAUDE.md` or `AGENTS.md`. diff --git a/plugins/compound-engineering/skills/ce-slack-research/SKILL.md b/plugins/compound-engineering/skills/ce-slack-research/SKILL.md index 8fdb45642..574308916 100644 --- a/plugins/compound-engineering/skills/ce-slack-research/SKILL.md +++ b/plugins/compound-engineering/skills/ce-slack-research/SKILL.md @@ -27,7 +27,7 @@ The input can be a keyword, a natural language question, or include Slack search ## Execution -If no argument is provided, ask what topic to research. Use the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). If no question tool is available, ask in plain text and wait for a reply. +If no argument is provided, ask what topic to research. Use the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). If the tool is unavailable or errors, ask in plain text and wait for a reply — never silently skip the question. Dispatch `research:ce-slack-researcher` with the user's topic as the task prompt. Omit the `mode` parameter so the user's configured permission settings apply. diff --git a/plugins/compound-engineering/skills/ce-test-browser/SKILL.md b/plugins/compound-engineering/skills/ce-test-browser/SKILL.md index 5e841c79a..dd0fe20b7 100644 --- a/plugins/compound-engineering/skills/ce-test-browser/SKILL.md +++ b/plugins/compound-engineering/skills/ce-test-browser/SKILL.md @@ -48,7 +48,7 @@ If not installed, inform the user: "`agent-browser` is not installed. Run `/ce-s ### 2. Ask Browser Mode -Ask the user whether to run headed or headless (using the platform's question tool — e.g., `AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini — or present options and wait for a reply): +Ask the user whether to run headed or headless using the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). If the tool is unavailable or errors, present the options in chat and wait for a reply — never silently skip the question: ``` Do you want to watch the browser tests run? diff --git a/plugins/compound-engineering/skills/ce-test-xcode/SKILL.md b/plugins/compound-engineering/skills/ce-test-xcode/SKILL.md index a94395b1e..7d5fd13fd 100644 --- a/plugins/compound-engineering/skills/ce-test-xcode/SKILL.md +++ b/plugins/compound-engineering/skills/ce-test-xcode/SKILL.md @@ -110,7 +110,7 @@ Pause for human input when testing touches flows that require device interaction | Location | "Allow location access and verify map updates" | | SwiftUI Text links | "Please tap on [element description] manually — automated taps cannot trigger inline text links" | -Ask the user (using the platform's question tool — e.g., `AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini — or present numbered options and wait): +Ask the user using the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). If the tool is unavailable or errors, present numbered options and wait for the user's reply — never silently skip the question: ``` Human Verification Needed From 23218033741e88aac74bc55472c09d0489e3ce18 Mon Sep 17 00:00:00 2001 From: Trevin Chow <trevin@trevinchow.com> Date: Tue, 21 Apr 2026 01:15:12 -0700 Subject: [PATCH 2/3] fix(question-tool): require ToolSearch preload so Claude Code doesn't skip to text fallback MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Claude Code's `AskUserQuestion` is a deferred tool — its schema isn't loaded at session start. The prior "if the tool is unavailable or errors, fall back to text" phrasing let the model read "not yet loaded" as "unavailable" and skip straight to text instead of calling `ToolSearch` first. Tighten the canonical sentence in AGENTS.md and every skill site: name `AskUserQuestion` with an inline "call `ToolSearch` with `select:AskUserQuestion` first if its schema isn't loaded" step, and narrow the fallback trigger to "no blocking tool exists in the harness or the call errors (e.g., Codex edit modes) -- not because a schema load is required." The existing preload rules in ce-code-review and ce-doc-review are strengthened the same way. --- plugins/compound-engineering/AGENTS.md | 3 ++- .../compound-engineering/skills/ce-brainstorm/SKILL.md | 2 +- .../skills/ce-brainstorm/references/handoff.md | 2 +- .../ce-brainstorm/references/universal-brainstorming.md | 2 +- .../skills/ce-clean-gone-branches/SKILL.md | 2 +- .../compound-engineering/skills/ce-code-review/SKILL.md | 8 ++++---- .../skills/ce-code-review/references/bulk-preview.md | 2 +- .../skills/ce-code-review/references/tracker-defer.md | 2 +- .../skills/ce-code-review/references/walkthrough.md | 2 +- .../skills/ce-commit-push-pr/SKILL.md | 2 +- plugins/compound-engineering/skills/ce-commit/SKILL.md | 4 ++-- .../skills/ce-compound-refresh/SKILL.md | 6 +++--- plugins/compound-engineering/skills/ce-compound/SKILL.md | 6 +++--- plugins/compound-engineering/skills/ce-debug/SKILL.md | 2 +- plugins/compound-engineering/skills/ce-demo-reel/SKILL.md | 4 ++-- .../skills/ce-demo-reel/references/upload-and-approval.md | 2 +- .../compound-engineering/skills/ce-doc-review/SKILL.md | 2 +- .../skills/ce-doc-review/references/bulk-preview.md | 2 +- .../references/synthesis-and-presentation.md | 2 +- .../skills/ce-doc-review/references/walkthrough.md | 2 +- .../skills/ce-frontend-design/SKILL.md | 2 +- plugins/compound-engineering/skills/ce-ideate/SKILL.md | 2 +- .../skills/ce-ideate/references/post-ideation-workflow.md | 2 +- .../skills/ce-ideate/references/universal-ideation.md | 2 +- .../compound-engineering/skills/ce-onboarding/SKILL.md | 2 +- plugins/compound-engineering/skills/ce-optimize/SKILL.md | 2 +- plugins/compound-engineering/skills/ce-plan/SKILL.md | 4 ++-- .../skills/ce-plan/references/plan-handoff.md | 4 ++-- .../skills/ce-plan/references/universal-planning.md | 4 ++-- .../skills/ce-pr-description/SKILL.md | 2 +- .../skills/ce-proof/references/hitl-review.md | 6 +++--- .../compound-engineering/skills/ce-report-bug/SKILL.md | 2 +- .../skills/ce-resolve-pr-feedback/SKILL.md | 4 ++-- plugins/compound-engineering/skills/ce-sessions/SKILL.md | 2 +- plugins/compound-engineering/skills/ce-setup/SKILL.md | 2 +- .../skills/ce-slack-research/SKILL.md | 2 +- .../compound-engineering/skills/ce-test-browser/SKILL.md | 2 +- .../compound-engineering/skills/ce-test-xcode/SKILL.md | 2 +- 38 files changed, 54 insertions(+), 53 deletions(-) diff --git a/plugins/compound-engineering/AGENTS.md b/plugins/compound-engineering/AGENTS.md index 708eeaa7e..c1fa5fc21 100644 --- a/plugins/compound-engineering/AGENTS.md +++ b/plugins/compound-engineering/AGENTS.md @@ -124,7 +124,8 @@ Keep rationale at the highest-level location that covers it; restate behavioral ### Cross-Platform User Interaction - [ ] When a skill needs to ask the user a question, instruct use of the platform's blocking question tool and name the known equivalents (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini) -- [ ] Include a fallback: if the tool is unavailable or errors, present numbered options in chat and wait for the user's reply — never silently skip the question. (Codex's `request_user_input` is only available in Plan mode, so the fallback path is the default in Codex's edit modes.) +- [ ] For Claude Code, also instruct to load `AskUserQuestion` via `ToolSearch` with `select:AskUserQuestion` first if its schema isn't already loaded — `AskUserQuestion` is a deferred tool and won't be available at session start. A pending schema load is not a valid reason to fall back to text. +- [ ] Include a fallback: when no blocking tool exists in the harness or the call errors (e.g., Codex edit modes where `request_user_input` is unavailable, or `ToolSearch` returns no match), present numbered options in chat and wait for the user's reply — never silently skip the question. ### Interactive Question Tool Design diff --git a/plugins/compound-engineering/skills/ce-brainstorm/SKILL.md b/plugins/compound-engineering/skills/ce-brainstorm/SKILL.md index 52bfd1854..b8699437a 100644 --- a/plugins/compound-engineering/skills/ce-brainstorm/SKILL.md +++ b/plugins/compound-engineering/skills/ce-brainstorm/SKILL.md @@ -30,7 +30,7 @@ This skill does not implement code. It explores, clarifies, and documents decisi 1. **Ask one question at a time** - Do not batch several unrelated questions into one message. 2. **Prefer single-select multiple choice** - Use single-select when choosing one direction, one priority, or one next step. 3. **Use multi-select rarely and intentionally** - Use it only for compatible sets such as goals, constraints, non-goals, or success criteria that can all coexist. If prioritization matters, follow up by asking which selected item is primary. -4. **Use the platform's blocking question tool** - When asking the user a question, prefer the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). If the tool is unavailable or errors, present numbered options in chat and wait for the user's reply — never silently skip the question. +4. **Use the platform's blocking question tool** - `AskUserQuestion` in Claude Code (call `ToolSearch` with `select:AskUserQuestion` first if its schema isn't loaded), `request_user_input` in Codex, `ask_user` in Gemini. Fall back to numbered options in chat only when no blocking tool exists in the harness or the call errors (e.g., Codex edit modes) — not because a schema load is required. Never silently skip the question. ## Output Guidance diff --git a/plugins/compound-engineering/skills/ce-brainstorm/references/handoff.md b/plugins/compound-engineering/skills/ce-brainstorm/references/handoff.md index 9cc860e06..30c3a6ba9 100644 --- a/plugins/compound-engineering/skills/ce-brainstorm/references/handoff.md +++ b/plugins/compound-engineering/skills/ce-brainstorm/references/handoff.md @@ -6,7 +6,7 @@ This content is loaded when Phase 4 begins — after the requirements document i #### 4.1 Present Next-Step Options -Present the options using the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). If the tool is unavailable or errors, present the numbered options in chat and wait for the user's reply — never silently skip the question. +Present the options using the platform's blocking question tool: `AskUserQuestion` in Claude Code (call `ToolSearch` with `select:AskUserQuestion` first if its schema isn't loaded), `request_user_input` in Codex, `ask_user` in Gemini. Fall back to numbered options in chat only when no blocking tool exists in the harness or the call errors (e.g., Codex edit modes) — not because a schema load is required. Never silently skip the question. If `Resolve Before Planning` contains any items: - Ask the blocking questions now, one at a time, by default diff --git a/plugins/compound-engineering/skills/ce-brainstorm/references/universal-brainstorming.md b/plugins/compound-engineering/skills/ce-brainstorm/references/universal-brainstorming.md index 54b0e3d91..48447b50b 100644 --- a/plugins/compound-engineering/skills/ce-brainstorm/references/universal-brainstorming.md +++ b/plugins/compound-engineering/skills/ce-brainstorm/references/universal-brainstorming.md @@ -45,7 +45,7 @@ When the conversation has enough material to narrow — reflect back what you've **Always synthesize a summary in the chat.** Before offering any next steps, reflect back what emerged: key decisions, the direction chosen, open threads, and any assumptions made. This is the primary output of the brainstorm — the user should be able to read the summary and know what they landed on. -**Then offer next steps** using the platform's question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). If the tool is unavailable or errors, present the numbered options in chat and wait for the user's reply — never silently skip the question. +**Then offer next steps** using the platform's blocking question tool: `AskUserQuestion` in Claude Code (call `ToolSearch` with `select:AskUserQuestion` first if its schema isn't loaded), `request_user_input` in Codex, `ask_user` in Gemini. Fall back to numbered options in chat only when no blocking tool exists in the harness or the call errors (e.g., Codex edit modes) — not because a schema load is required. Never silently skip the question. **Question:** "Brainstorm wrapped. What would you like to do next?" diff --git a/plugins/compound-engineering/skills/ce-clean-gone-branches/SKILL.md b/plugins/compound-engineering/skills/ce-clean-gone-branches/SKILL.md index f96715c6a..1371b9303 100644 --- a/plugins/compound-engineering/skills/ce-clean-gone-branches/SKILL.md +++ b/plugins/compound-engineering/skills/ce-clean-gone-branches/SKILL.md @@ -37,7 +37,7 @@ These local branches have been deleted from the remote: Delete all of them? (y/n) ``` -Wait for the user's answer using the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). If the tool is unavailable or errors, present the list and wait for the user's reply — never silently skip the question. +Wait for the user's answer using the platform's blocking question tool: `AskUserQuestion` in Claude Code (call `ToolSearch` with `select:AskUserQuestion` first if its schema isn't loaded), `request_user_input` in Codex, `ask_user` in Gemini. Fall back to presenting the list in chat only when no blocking tool exists in the harness or the call errors (e.g., Codex edit modes) — not because a schema load is required. Never silently skip the question. This is a yes-or-no decision on the entire list -- do not offer multi-selection or per-branch choices. diff --git a/plugins/compound-engineering/skills/ce-code-review/SKILL.md b/plugins/compound-engineering/skills/ce-code-review/SKILL.md index b02a054ac..69a0da0db 100644 --- a/plugins/compound-engineering/skills/ce-code-review/SKILL.md +++ b/plugins/compound-engineering/skills/ce-code-review/SKILL.md @@ -72,8 +72,8 @@ All tokens are optional. Each one present means one less thing to infer. When ab ### Interactive mode rules -- **Pre-load the platform question tool before any question fires.** In Claude Code, `AskUserQuestion` is a deferred tool — its schema is not available at session start. At the start of Interactive-mode work (before Stage 2 intent-ambiguity questions, the After-Review routing question, walk-through per-finding questions, bulk-preview Proceed/Cancel, and tracker-defer failure sub-questions), call `ToolSearch` with query `select:AskUserQuestion` to load the schema. Load it **once, eagerly, at the top of the Interactive flow** — do not wait for the first question site and do not decide it on a per-site basis. On Codex (`request_user_input`) and Gemini (`ask_user`) this step is not required; the tools are loaded by default. -- **The numbered-list fallback only applies on confirmed load failure.** The skill's fallback pattern — "present the options as a numbered list and wait for the user's reply" — is valid **only** when `ToolSearch` returns no match or the tool call explicitly fails. Rendering a question as narrative text because the tool feels inconvenient, because the model is in report-formatting mode, or because the instruction was buried in a long skill is a bug. A question that calls for a user decision must either fire the tool or fail loudly. +- **Pre-load the platform question tool before any question fires.** In Claude Code, `AskUserQuestion` is a deferred tool — its schema is not available at session start. At the start of Interactive-mode work (before Stage 2 intent-ambiguity questions, the After-Review routing question, walk-through per-finding questions, bulk-preview Proceed/Cancel, and tracker-defer failure sub-questions), call `ToolSearch` with query `select:AskUserQuestion` to load the schema. Load it **once, eagerly, at the top of the Interactive flow** — do not wait for the first question site and do not decide it on a per-site basis. On Codex and Gemini this preload step does not apply. +- **The numbered-list fallback only applies when the harness genuinely lacks a blocking question tool** — `ToolSearch` returns no match, the tool call explicitly fails, or the runtime mode does not expose it (e.g., Codex edit modes where `request_user_input` is unavailable). A pending schema load is not a fallback trigger; call `ToolSearch` first per the pre-load rule. Rendering a question as narrative text because the tool feels inconvenient, because the model is in report-formatting mode, or because the instruction was buried in a long skill is a bug. A question that calls for a user decision must either fire the tool or fall back loudly. ## Severity Scale @@ -321,7 +321,7 @@ Pass this to every reviewer in their spawn prompt. Intent shapes *how hard each **When intent is ambiguous:** -- **Interactive mode:** Ask one question using the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini): "What is the primary goal of these changes?" Do not spawn reviewers until intent is established. If the tool is unavailable or errors, present numbered options in chat and wait for the user's reply — never silently skip the question. **Claude Code only:** if `AskUserQuestion` has not yet been loaded this session (per the Interactive mode rules pre-load), call `ToolSearch` with query `select:AskUserQuestion` first before asking. On Codex and Gemini this preload step does not apply. +- **Interactive mode:** Ask one question using the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini): "What is the primary goal of these changes?" Do not spawn reviewers until intent is established. **Claude Code only:** if `AskUserQuestion` has not yet been loaded this session (per the Interactive mode rules pre-load), call `ToolSearch` with query `select:AskUserQuestion` first before asking. Fall back to numbered options in chat only when the harness genuinely lacks a blocking tool or the call errors (e.g., Codex edit modes) — not because a schema load is required. Never silently skip the question. - **Autofix/report-only/headless modes:** Infer intent conservatively from the branch name, diff, PR metadata, and caller context. Note the uncertainty in Coverage or Verdict reasoning instead of blocking. ### Stage 2b: Plan discovery (requirements verification) @@ -625,7 +625,7 @@ After presenting findings and verdict (Stage 6), route the next steps by mode. R - Apply `safe_auto -> review-fixer` findings automatically without asking. These are safe by definition. - **Zero-remaining case:** if no `gated_auto` or `manual` findings remain after the `safe_auto` pass, skip the routing question entirely. Emit a one-line completion summary phrased so advisory and pre-existing findings (which are not handled by this flow) are not implied to be cleared. When no advisory or pre-existing findings remain in the report, `All findings resolved — N safe_auto fixes applied.` is accurate. When advisory and/or pre-existing findings do remain, use the qualified form `All actionable findings resolved — N safe_auto fixes applied. (K advisory, J pre-existing findings remain in the report.)`, omitting any zero-count clause. Follow the summary with the existing end-of-review verdict, then proceed to Step 5 per the gating rule there. - **Tracker pre-detection:** before rendering the routing question, consult `references/tracker-defer.md` for the session's tracker tuple `{ tracker_name, confidence, named_sink_available, any_sink_available }`. The probe runs at most once per session and is cached for the rest of the run. `named_sink_available` drives the option C label (inline tracker name only when the named sink can actually be invoked). `any_sink_available` drives whether option C is offered at all (it can still be offered when the named tracker is unreachable but `gh` or the harness task primitive works). -- **Verify question-tool pre-load (checklist, Claude Code only).** Before firing the routing question in Claude Code, confirm `AskUserQuestion` is loaded (per Interactive mode rules at the top of this skill). If not yet loaded this session, call `ToolSearch` with query `select:AskUserQuestion` now. Do not proceed to the routing question without this verification. Rendering the question as narrative text is a bug, not a valid fallback. On Codex (`request_user_input`) and Gemini (`ask_user`) this checklist does not apply — the platform-native question tool is loaded by default and there is no `ToolSearch` preload step to perform. +- **Verify question-tool pre-load (checklist, Claude Code only).** Before firing the routing question in Claude Code, confirm `AskUserQuestion` is loaded (per Interactive mode rules at the top of this skill). If not yet loaded this session, call `ToolSearch` with query `select:AskUserQuestion` now. Do not proceed to the routing question without this verification. Rendering the question as narrative text because the schema isn't loaded yet is a bug, not a valid fallback. On Codex and Gemini this checklist does not apply — there is no `ToolSearch` preload step to perform. (If `request_user_input` is unavailable in the current Codex runtime mode, use the numbered-list fallback described below.) - **Routing question.** Ask using the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). Stem: `What should the agent do with the remaining N findings?` — use third-person voice referring to "the agent", not first-person "me" / "I". Options: ``` diff --git a/plugins/compound-engineering/skills/ce-code-review/references/bulk-preview.md b/plugins/compound-engineering/skills/ce-code-review/references/bulk-preview.md index 2b37d49df..68af18d1f 100644 --- a/plugins/compound-engineering/skills/ce-code-review/references/bulk-preview.md +++ b/plugins/compound-engineering/skills/ce-code-review/references/bulk-preview.md @@ -86,7 +86,7 @@ When no `why_it_matters` is available for a finding (e.g., Unit 2's template upg ## Question and options -After the preview body is rendered, ask the user using the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). In Claude Code, the tool should already be loaded from the Interactive-mode pre-load step — if it isn't, call `ToolSearch` with query `select:AskUserQuestion` now. The text fallback below applies when the tool is unavailable or errors (e.g., the load explicitly fails, or Codex runtime modes without `request_user_input`) — never silently skip the question. +After the preview body is rendered, ask the user using the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). In Claude Code, the tool should already be loaded from the Interactive-mode pre-load step — if it isn't, call `ToolSearch` with query `select:AskUserQuestion` now. The text fallback below applies only when the harness genuinely lacks a blocking tool — `ToolSearch` returns no match, the tool call explicitly fails, or the runtime mode does not expose it (e.g., Codex edit modes without `request_user_input`). A pending schema load is not a fallback trigger. Never silently skip the question. Stem (adapted to the path): - For routing B: `The agent is about to apply the plan above. Proceed?` diff --git a/plugins/compound-engineering/skills/ce-code-review/references/tracker-defer.md b/plugins/compound-engineering/skills/ce-code-review/references/tracker-defer.md index 9679a2e6c..04c94b071 100644 --- a/plugins/compound-engineering/skills/ce-code-review/references/tracker-defer.md +++ b/plugins/compound-engineering/skills/ce-code-review/references/tracker-defer.md @@ -133,6 +133,6 @@ When uncertain, prefer "drop with explicit user-facing notice" over "pass throug ## Cross-platform notes -The question-tool name varies by platform. Use the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). In Claude Code the tool should already be loaded from the Interactive-mode pre-load step — if it isn't, call `ToolSearch` with query `select:AskUserQuestion` now. If the tool is unavailable or errors (load failure, platform with no blocking tool, or a Codex runtime mode without `request_user_input`), fall back to numbered options and wait for the user's reply — never silently skip the question. +The question-tool name varies by platform. Use the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). In Claude Code the tool should already be loaded from the Interactive-mode pre-load step — if it isn't, call `ToolSearch` with query `select:AskUserQuestion` now. Fall back to numbered options in chat only when the harness genuinely lacks a blocking tool — `ToolSearch` returns no match, the tool call explicitly fails, or the runtime mode does not expose it (e.g., Codex edit modes without `request_user_input`). A pending schema load is not a fallback trigger. Never silently skip the question. The fallback chain's final tier (harness task-tracking primitive) does not exist on every target platform. When converted for a platform that has no equivalent of `TaskCreate` / `update_plan`, the agent should treat that platform as "no harness sink" and move directly to the no-sink behavior (omit Defer from menus and tell the user why). diff --git a/plugins/compound-engineering/skills/ce-code-review/references/walkthrough.md b/plugins/compound-engineering/skills/ce-code-review/references/walkthrough.md index e1bc95b1e..953725355 100644 --- a/plugins/compound-engineering/skills/ce-code-review/references/walkthrough.md +++ b/plugins/compound-engineering/skills/ce-code-review/references/walkthrough.md @@ -22,7 +22,7 @@ Each finding's recommended action has already been normalized by Stage 5 (step 7 Each finding is presented in two parts: a **terminal output block** carrying the explanation, and a **question** via the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini) carrying the decision. Never merge the two — the terminal block uses markdown; the question uses plain text. -In Claude Code the tool should already be loaded from the Interactive-mode pre-load step in `SKILL.md` — if it isn't, call `ToolSearch` with query `select:AskUserQuestion` now. If the tool is genuinely unavailable or errors (e.g., Codex runtime modes without `request_user_input`), present the per-finding options as a numbered list and wait for the user's reply — never silently skip the question. +In Claude Code the tool should already be loaded from the Interactive-mode pre-load step in `SKILL.md` — if it isn't, call `ToolSearch` with query `select:AskUserQuestion` now. Fall back to presenting the per-finding options as a numbered list only when the harness genuinely lacks a blocking tool — `ToolSearch` returns no match, the tool call explicitly fails, or the runtime mode does not expose it (e.g., Codex edit modes without `request_user_input`). A pending schema load is not a fallback trigger. Never silently skip the question. ### Terminal output block (print before firing the question) diff --git a/plugins/compound-engineering/skills/ce-commit-push-pr/SKILL.md b/plugins/compound-engineering/skills/ce-commit-push-pr/SKILL.md index f5e40c198..677adcedd 100644 --- a/plugins/compound-engineering/skills/ce-commit-push-pr/SKILL.md +++ b/plugins/compound-engineering/skills/ce-commit-push-pr/SKILL.md @@ -7,7 +7,7 @@ description: Commit, push, and open a PR with an adaptive, value-first descripti Go from working changes to an open pull request, or rewrite an existing PR description. -**Asking the user:** When this skill says "ask the user", use the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). If the tool is unavailable or errors, present the question in chat and wait for a reply — never silently skip the question. +**Asking the user:** When this skill says "ask the user", use the platform's blocking question tool: `AskUserQuestion` in Claude Code (call `ToolSearch` with `select:AskUserQuestion` first if its schema isn't loaded), `request_user_input` in Codex, `ask_user` in Gemini. Fall back to presenting the question in chat only when no blocking tool exists in the harness or the call errors (e.g., Codex edit modes) — not because a schema load is required. Never silently skip the question. ## Mode detection diff --git a/plugins/compound-engineering/skills/ce-commit/SKILL.md b/plugins/compound-engineering/skills/ce-commit/SKILL.md index 259a743aa..9329e9656 100644 --- a/plugins/compound-engineering/skills/ce-commit/SKILL.md +++ b/plugins/compound-engineering/skills/ce-commit/SKILL.md @@ -56,7 +56,7 @@ If both fail, fall back to `main`. If the git status from the context above shows a clean working tree (no staged, modified, or untracked files), report that there is nothing to commit and stop. -If the current branch from the context above is empty, the repository is in detached HEAD state. Explain that a branch is required before committing if the user wants this work attached to a branch. Ask whether to create a feature branch now. Use the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). If the tool is unavailable or errors, present the options and wait for the user's reply — never silently skip the question. +If the current branch from the context above is empty, the repository is in detached HEAD state. Explain that a branch is required before committing if the user wants this work attached to a branch. Ask whether to create a feature branch now. Use the platform's blocking question tool: `AskUserQuestion` in Claude Code (call `ToolSearch` with `select:AskUserQuestion` first if its schema isn't loaded), `request_user_input` in Codex, `ask_user` in Gemini. Fall back to presenting options in chat only when no blocking tool exists in the harness or the call errors (e.g., Codex edit modes) — not because a schema load is required. Never silently skip the question. - If the user chooses to create a branch, derive the name from the change content, create it with `git checkout -b <branch-name>`, then run `git branch --show-current` again and use that result as the current branch name for the rest of the workflow. - If the user declines, continue with the detached HEAD commit. @@ -80,7 +80,7 @@ Keep this lightweight: ### Step 4: Stage and commit -If the current branch from the context above is `main`, `master`, or the resolved default branch from Step 1, warn the user and ask whether to continue committing here or create a feature branch first. Use the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). If the tool is unavailable or errors, present the options and wait for the user's reply — never silently skip the question. If the user chooses to create a branch, derive the name from the change content, create it with `git checkout -b <branch-name>`, then continue. +If the current branch from the context above is `main`, `master`, or the resolved default branch from Step 1, warn the user and ask whether to continue committing here or create a feature branch first. Use the platform's blocking question tool: `AskUserQuestion` in Claude Code (call `ToolSearch` with `select:AskUserQuestion` first if its schema isn't loaded), `request_user_input` in Codex, `ask_user` in Gemini. Fall back to presenting options in chat only when no blocking tool exists in the harness or the call errors (e.g., Codex edit modes) — not because a schema load is required. Never silently skip the question. If the user chooses to create a branch, derive the name from the change content, create it with `git checkout -b <branch-name>`, then continue. Write the commit message: - **Subject line**: Concise, imperative mood, focused on *why* not *what*. Follow the convention determined in Step 2. diff --git a/plugins/compound-engineering/skills/ce-compound-refresh/SKILL.md b/plugins/compound-engineering/skills/ce-compound-refresh/SKILL.md index d0070600f..b7f277a84 100644 --- a/plugins/compound-engineering/skills/ce-compound-refresh/SKILL.md +++ b/plugins/compound-engineering/skills/ce-compound-refresh/SKILL.md @@ -31,7 +31,7 @@ Check if `$ARGUMENTS` contains `mode:autofix`. If present, strip it from argumen Follow the same interaction style as `ce-brainstorm`: -- Ask questions **one at a time** — use the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). If the tool is unavailable or errors, present numbered options in plain text and wait for the user's reply — never silently skip the question +- Ask questions **one at a time** — use the platform's blocking question tool: `AskUserQuestion` in Claude Code (call `ToolSearch` with `select:AskUserQuestion` first if its schema isn't loaded), `request_user_input` in Codex, `ask_user` in Gemini. Fall back to numbered options in plain text only when no blocking tool exists in the harness or the call errors (e.g., Codex edit modes) — not because a schema load is required. Never silently skip the question - Prefer **multiple choice** when natural options exist - Start with **scope and intent**, then narrow only when needed - Do **not** ask the user to make decisions before you have evidence @@ -393,7 +393,7 @@ Do **not** ask questions about whether code changes were intentional, whether th #### Question Style -Always present choices using the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). If the tool is unavailable or errors, present numbered options in plain text and wait for the user's reply — never silently skip the question. +Always present choices using the platform's blocking question tool: `AskUserQuestion` in Claude Code (call `ToolSearch` with `select:AskUserQuestion` first if its schema isn't loaded), `request_user_input` in Codex, `ask_user` in Gemini. Fall back to numbered options in plain text only when no blocking tool exists in the harness or the call errors (e.g., Codex edit modes) — not because a schema load is required. Never silently skip the question. Question rules: @@ -673,6 +673,6 @@ After the refresh report is generated, check whether the project's instruction f `docs/solutions/` — documented solutions to past problems (bugs, best practices, workflow patterns), organized by category with YAML frontmatter (`module`, `tags`, `problem_type`). Relevant when implementing or debugging in documented areas. ``` - c. In interactive mode, explain to the user why this matters — agents working in this repo (including fresh sessions, other tools, or collaborators without the plugin) won't know to check `docs/solutions/` unless the instruction file surfaces it. Show the proposed change and where it would go, then use the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini) to get consent before making the edit. If the tool is unavailable or errors, present the proposal and wait for the user's reply — never silently skip the question. In autofix mode, include it as a "Discoverability recommendation" line in the report — do not attempt to edit instruction files (autofix scope is doc maintenance, not project config). + c. In interactive mode, explain to the user why this matters — agents working in this repo (including fresh sessions, other tools, or collaborators without the plugin) won't know to check `docs/solutions/` unless the instruction file surfaces it. Show the proposed change and where it would go, then use the platform's blocking question tool to get consent before making the edit: `AskUserQuestion` in Claude Code (call `ToolSearch` with `select:AskUserQuestion` first if its schema isn't loaded), `request_user_input` in Codex, `ask_user` in Gemini. Fall back to presenting the proposal in chat only when no blocking tool exists in the harness or the call errors (e.g., Codex edit modes) — not because a schema load is required. Never silently skip the question. In autofix mode, include it as a "Discoverability recommendation" line in the report — do not attempt to edit instruction files (autofix scope is doc maintenance, not project config). 5. **Amend or create a follow-up commit when the check produces edits.** If step 4 resulted in an edit to an instruction file and Phase 5 already committed the refresh changes, stage the newly edited file and either amend the existing commit (if still on the same branch and no push has occurred) or create a small follow-up commit (e.g., `docs: add docs/solutions/ discoverability to AGENTS.md`). If Phase 5 already pushed the branch to a remote (e.g., the branch+PR path), push the follow-up commit as well so the open PR includes the discoverability change. This keeps the working tree clean and the remote in sync at the end of the run. If the user chose "Don't commit" in Phase 5, leave the instruction-file edit unstaged alongside the other uncommitted refresh changes — no separate commit logic needed. diff --git a/plugins/compound-engineering/skills/ce-compound/SKILL.md b/plugins/compound-engineering/skills/ce-compound/SKILL.md index 9a66c5906..797da1fe2 100644 --- a/plugins/compound-engineering/skills/ce-compound/SKILL.md +++ b/plugins/compound-engineering/skills/ce-compound/SKILL.md @@ -32,7 +32,7 @@ When spawning subagents, pass the relevant file contents into the task prompt so ## Execution Strategy -Present the user with two options before proceeding, using the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). If the tool is unavailable or errors, present the options and wait for the user's reply — never silently skip the question. +Present the user with two options before proceeding, using the platform's blocking question tool: `AskUserQuestion` in Claude Code (call `ToolSearch` with `select:AskUserQuestion` first if its schema isn't loaded), `request_user_input` in Codex, `ask_user` in Gemini. Fall back to presenting options in chat only when no blocking tool exists in the harness or the call errors (e.g., Codex edit modes) — not because a schema load is required. Never silently skip the question. ``` 1. Full (recommended) — the complete compound workflow. Researches, @@ -304,7 +304,7 @@ After the learning is written and the refresh decision is made, check whether th `docs/solutions/` — documented solutions to past problems (bugs, best practices, workflow patterns), organized by category with YAML frontmatter (`module`, `tags`, `problem_type`). Relevant when implementing or debugging in documented areas. ``` - c. In full mode, explain to the user why this matters — agents working in this repo (including fresh sessions, other tools, or collaborators without the plugin) won't know to check `docs/solutions/` unless the instruction file surfaces it. Show the proposed change and where it would go, then use the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini) to get consent before making the edit. If the tool is unavailable or errors, present the proposal and wait for the user's reply — never silently skip the question. In lightweight mode, output a one-liner note and move on + c. In full mode, explain to the user why this matters — agents working in this repo (including fresh sessions, other tools, or collaborators without the plugin) won't know to check `docs/solutions/` unless the instruction file surfaces it. Show the proposed change and where it would go, then use the platform's blocking question tool to get consent before making the edit: `AskUserQuestion` in Claude Code (call `ToolSearch` with `select:AskUserQuestion` first if its schema isn't loaded), `request_user_input` in Codex, `ask_user` in Gemini. Fall back to presenting the proposal in chat only when no blocking tool exists in the harness or the call errors (e.g., Codex edit modes) — not because a schema load is required. Never silently skip the question. In lightweight mode, output a one-liner note and move on ### Phase 3: Optional Enhancement @@ -460,7 +460,7 @@ What's next? 5. Other ``` -**After displaying the success output, present the "What's next?" options using the platform's blocking question tool** (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). If the tool is unavailable or errors, present the numbered options and wait for the user's reply — never silently skip the question. Do not continue the workflow or end the turn without the user's selection. +**After displaying the success output, present the "What's next?" options using the platform's blocking question tool:** `AskUserQuestion` in Claude Code (call `ToolSearch` with `select:AskUserQuestion` first if its schema isn't loaded), `request_user_input` in Codex, `ask_user` in Gemini. Fall back to numbered options in chat only when no blocking tool exists in the harness or the call errors (e.g., Codex edit modes) — not because a schema load is required. Never silently skip the question. Do not continue the workflow or end the turn without the user's selection. **Alternate output (when updating an existing doc due to high overlap):** diff --git a/plugins/compound-engineering/skills/ce-debug/SKILL.md b/plugins/compound-engineering/skills/ce-debug/SKILL.md index 4ddbf45a3..4e569dfc4 100644 --- a/plugins/compound-engineering/skills/ce-debug/SKILL.md +++ b/plugins/compound-engineering/skills/ce-debug/SKILL.md @@ -113,7 +113,7 @@ Once the root cause is confirmed, present: - Which tests to add or modify to prevent recurrence (specific test file, test case description, what the assertion should verify) - Whether existing tests should have caught this and why they did not -Then offer next steps using the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). If the tool is unavailable or errors, present numbered options in chat and wait for the user's reply — never silently skip the question: +Then offer next steps using the platform's blocking question tool: `AskUserQuestion` in Claude Code (call `ToolSearch` with `select:AskUserQuestion` first if its schema isn't loaded), `request_user_input` in Codex, `ask_user` in Gemini. Fall back to numbered options in chat only when no blocking tool exists in the harness or the call errors (e.g., Codex edit modes) — not because a schema load is required. Never silently skip the question: 1. **Fix it now** — proceed to Phase 3 2. **View in Proof** (`/ce-proof`) — for easy review and sharing with others diff --git a/plugins/compound-engineering/skills/ce-demo-reel/SKILL.md b/plugins/compound-engineering/skills/ce-demo-reel/SKILL.md index 2abd9ce0f..00e321a21 100644 --- a/plugins/compound-engineering/skills/ce-demo-reel/SKILL.md +++ b/plugins/compound-engineering/skills/ce-demo-reel/SKILL.md @@ -49,7 +49,7 @@ Before capturing anything, verify the feature works by actually using it: - **Library**: Run example code using the new/changed API - **Bug fix**: Reproduce the original bug scenario and confirm it's fixed -Use the workspace where the feature was built. Do not reinstall from scratch. If setup requires credentials or services, use the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini) to ask the user. If the tool is unavailable or errors, ask in chat and wait for a reply — never silently skip the question. +Use the workspace where the feature was built. Do not reinstall from scratch. If setup requires credentials or services, use the platform's blocking question tool: `AskUserQuestion` in Claude Code (call `ToolSearch` with `select:AskUserQuestion` first if its schema isn't loaded), `request_user_input` in Codex, `ask_user` in Gemini. Fall back to asking in chat only when no blocking tool exists in the harness or the call errors (e.g., Codex edit modes) — not because a schema load is required. Never silently skip the question. ## Step 2: Detect Project Type @@ -114,7 +114,7 @@ python3 scripts/capture-demo.py recommend --project-type [TYPE] --change-type [m This outputs JSON with `recommended` (the best tier), `available` (list of tiers whose tools are present), and `reasoning`. -Present the available tiers to the user via the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). If the tool is unavailable or errors, present numbered options in chat and wait for the user's reply — never silently skip the question. Mark the recommended tier. Always include "No evidence needed" as a final option. +Present the available tiers to the user via the platform's blocking question tool: `AskUserQuestion` in Claude Code (call `ToolSearch` with `select:AskUserQuestion` first if its schema isn't loaded), `request_user_input` in Codex, `ask_user` in Gemini. Fall back to numbered options in chat only when no blocking tool exists in the harness or the call errors (e.g., Codex edit modes) — not because a schema load is required. Never silently skip the question. Mark the recommended tier. Always include "No evidence needed" as a final option. **Question:** "How should evidence be captured for this change?" diff --git a/plugins/compound-engineering/skills/ce-demo-reel/references/upload-and-approval.md b/plugins/compound-engineering/skills/ce-demo-reel/references/upload-and-approval.md index cc8807694..a9f9c1d42 100644 --- a/plugins/compound-engineering/skills/ce-demo-reel/references/upload-and-approval.md +++ b/plugins/compound-engineering/skills/ce-demo-reel/references/upload-and-approval.md @@ -18,7 +18,7 @@ For multiple files (static screenshots tier), upload each file separately. ## Step 2: Approval Gate -Present the preview URL to the user for approval. Use the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). If the tool is unavailable or errors, present the options in chat and wait for the user's reply — never silently skip the question. +Present the preview URL to the user for approval. Use the platform's blocking question tool: `AskUserQuestion` in Claude Code (call `ToolSearch` with `select:AskUserQuestion` first if its schema isn't loaded), `request_user_input` in Codex, `ask_user` in Gemini. Fall back to presenting options in chat only when no blocking tool exists in the harness or the call errors (e.g., Codex edit modes) — not because a schema load is required. Never silently skip the question. **Question:** "Evidence preview (1h link): [PREVIEW_URL]" diff --git a/plugins/compound-engineering/skills/ce-doc-review/SKILL.md b/plugins/compound-engineering/skills/ce-doc-review/SKILL.md index b54bf2640..8a0887151 100644 --- a/plugins/compound-engineering/skills/ce-doc-review/SKILL.md +++ b/plugins/compound-engineering/skills/ce-doc-review/SKILL.md @@ -11,7 +11,7 @@ Review requirements or plan documents through multi-persona analysis. Dispatches ## Interactive mode rules - **Pre-load the platform question tool before any question fires.** In Claude Code, `AskUserQuestion` is a deferred tool — its schema is not available at session start. At the start of Interactive-mode work (before the routing question, per-finding walk-through questions, bulk-preview Proceed/Cancel, and Phase 5 terminal question), call `ToolSearch` with query `select:AskUserQuestion` to load the schema. Load it once, eagerly, at the top of the Interactive flow — do not wait for the first question site. On Codex and Gemini this preload is not required. -- **The numbered-list fallback applies when the tool is unavailable or errors** — including `ToolSearch` returning no match, the tool call explicitly failing, or Codex runtime modes where `request_user_input` is unavailable. In those cases, present options as a numbered list and wait for the user's reply — never silently skip the question. Rendering a question as narrative text because the tool feels inconvenient, because the model is in report-formatting mode, or because the instruction was buried in a long skill is a bug. A question that calls for a user decision must either fire the tool or fall back loudly. +- **The numbered-list fallback applies only when the harness genuinely lacks a blocking question tool** — `ToolSearch` returns no match, the tool call explicitly fails, or the runtime mode does not expose it (e.g., Codex edit modes where `request_user_input` is unavailable). A pending schema load is not a fallback trigger; call `ToolSearch` first per the pre-load rule. In genuine-fallback cases, present options as a numbered list and wait for the user's reply — never silently skip the question. Rendering a question as narrative text because the tool feels inconvenient, because the model is in report-formatting mode, or because the instruction was buried in a long skill is a bug. A question that calls for a user decision must either fire the tool or fall back loudly. ## Phase 0: Detect Mode diff --git a/plugins/compound-engineering/skills/ce-doc-review/references/bulk-preview.md b/plugins/compound-engineering/skills/ce-doc-review/references/bulk-preview.md index e51c2ceb8..07df53211 100644 --- a/plugins/compound-engineering/skills/ce-doc-review/references/bulk-preview.md +++ b/plugins/compound-engineering/skills/ce-doc-review/references/bulk-preview.md @@ -80,7 +80,7 @@ When no `why_it_matters` is available for a finding (rare — only if persona ou ## Question and options -After the preview body is rendered, ask the user using the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). In Claude Code, the tool should already be loaded from the Interactive-mode pre-load step — if it isn't, call `ToolSearch` with query `select:AskUserQuestion` now. The text fallback below applies when the tool is unavailable or errors (e.g., the load explicitly fails, or Codex runtime modes without `request_user_input`) — never silently skip the question. +After the preview body is rendered, ask the user using the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). In Claude Code, the tool should already be loaded from the Interactive-mode pre-load step — if it isn't, call `ToolSearch` with query `select:AskUserQuestion` now. The text fallback below applies only when the harness genuinely lacks a blocking tool — `ToolSearch` returns no match, the tool call explicitly fails, or the runtime mode does not expose it (e.g., Codex edit modes without `request_user_input`). A pending schema load is not a fallback trigger. Never silently skip the question. Stem (adapted to the path): diff --git a/plugins/compound-engineering/skills/ce-doc-review/references/synthesis-and-presentation.md b/plugins/compound-engineering/skills/ce-doc-review/references/synthesis-and-presentation.md index 96828f481..8e354cc0d 100644 --- a/plugins/compound-engineering/skills/ce-doc-review/references/synthesis-and-presentation.md +++ b/plugins/compound-engineering/skills/ce-doc-review/references/synthesis-and-presentation.md @@ -300,7 +300,7 @@ These are pipeline artifacts and must not be flagged for removal. **Headless mode:** Return "Review complete" immediately. Do not ask questions. The caller receives the text envelope from Phase 4 and handles any remaining findings. -**Interactive mode:** fire the terminal question using the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). If the tool is unavailable or errors, present numbered options in chat and wait for the user's reply — never silently skip the question. This question is distinct from the mid-flow routing question (`references/walkthrough.md`) — the routing question chooses *how* to engage with findings, this one chooses *what to do next* once engagement is complete. Do not merge them. +**Interactive mode:** fire the terminal question using the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). In Claude Code the tool should already be loaded from the Interactive-mode pre-load step in `SKILL.md` — if it isn't, call `ToolSearch` with `select:AskUserQuestion` now. Fall back to numbered options in chat only when no blocking tool exists in the harness or the call errors (e.g., Codex edit modes) — not because a schema load is required. Never silently skip the question. This question is distinct from the mid-flow routing question (`references/walkthrough.md`) — the routing question chooses *how* to engage with findings, this one chooses *what to do next* once engagement is complete. Do not merge them. **Stem:** `Apply decisions and what next?` diff --git a/plugins/compound-engineering/skills/ce-doc-review/references/walkthrough.md b/plugins/compound-engineering/skills/ce-doc-review/references/walkthrough.md index a8032d85d..c3ab85e34 100644 --- a/plugins/compound-engineering/skills/ce-doc-review/references/walkthrough.md +++ b/plugins/compound-engineering/skills/ce-doc-review/references/walkthrough.md @@ -10,7 +10,7 @@ Interactive mode only. After `safe_auto` fixes apply and synthesis produces the remaining finding set, the orchestrator asks a four-option routing question before any walk-through or bulk action runs. -Use the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). In Claude Code, the tool should already be loaded from the Interactive-mode pre-load step in `SKILL.md` — if it isn't, call `ToolSearch` with query `select:AskUserQuestion` now. If the tool is unavailable or errors (e.g., Codex runtime modes without `request_user_input`), present the options as a numbered list and wait for the user's reply — never silently skip the question. Rendering the routing question as narrative text without the numbered-list fallback is a bug. +Use the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). In Claude Code, the tool should already be loaded from the Interactive-mode pre-load step in `SKILL.md` — if it isn't, call `ToolSearch` with query `select:AskUserQuestion` now. Fall back to presenting the options as a numbered list only when the harness genuinely lacks a blocking tool — `ToolSearch` returns no match, the tool call explicitly fails, or the runtime mode does not expose it (e.g., Codex edit modes without `request_user_input`). A pending schema load is not a fallback trigger. Never silently skip the question. Rendering the routing question as narrative text without the numbered-list fallback is a bug. **Stem:** `What should the agent do with the remaining N findings?` diff --git a/plugins/compound-engineering/skills/ce-frontend-design/SKILL.md b/plugins/compound-engineering/skills/ce-frontend-design/SKILL.md index e1bd58727..f0993084e 100644 --- a/plugins/compound-engineering/skills/ce-frontend-design/SKILL.md +++ b/plugins/compound-engineering/skills/ce-frontend-design/SKILL.md @@ -52,7 +52,7 @@ Based on detected signals, choose a mode: ### Asking the User -When context is ambiguous, use the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). If the tool is unavailable or errors, present the options in chat and wait for a reply — never silently skip. If the user declines to pick, assume "partial" mode and proceed conservatively. +When context is ambiguous, use the platform's blocking question tool: `AskUserQuestion` in Claude Code (call `ToolSearch` with `select:AskUserQuestion` first if its schema isn't loaded), `request_user_input` in Codex, `ask_user` in Gemini. Fall back to presenting options in chat only when no blocking tool exists in the harness or the call errors (e.g., Codex edit modes) — not because a schema load is required. Never silently skip. If the user declines to pick, assume "partial" mode and proceed conservatively. Example question: "I found [detected signals]. Should I follow your existing design patterns or create something distinctive?" diff --git a/plugins/compound-engineering/skills/ce-ideate/SKILL.md b/plugins/compound-engineering/skills/ce-ideate/SKILL.md index 2026d6bf8..9c7574b4c 100644 --- a/plugins/compound-engineering/skills/ce-ideate/SKILL.md +++ b/plugins/compound-engineering/skills/ce-ideate/SKILL.md @@ -18,7 +18,7 @@ This workflow produces a ranked ideation artifact in `docs/ideation/`. It does * ## Interaction Method -Use the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). If the tool is unavailable or errors, present numbered options in chat and wait for the user's reply — never silently skip the question. +Use the platform's blocking question tool: `AskUserQuestion` in Claude Code (call `ToolSearch` with `select:AskUserQuestion` first if its schema isn't loaded), `request_user_input` in Codex, `ask_user` in Gemini. Fall back to numbered options in chat only when no blocking tool exists in the harness or the call errors (e.g., Codex edit modes) — not because a schema load is required. Never silently skip the question. Ask one question at a time. Prefer concise single-select choices when natural options exist. diff --git a/plugins/compound-engineering/skills/ce-ideate/references/post-ideation-workflow.md b/plugins/compound-engineering/skills/ce-ideate/references/post-ideation-workflow.md index a71e14948..880883157 100644 --- a/plugins/compound-engineering/skills/ce-ideate/references/post-ideation-workflow.md +++ b/plugins/compound-engineering/skills/ce-ideate/references/post-ideation-workflow.md @@ -136,7 +136,7 @@ When the proof skill returns control: ## Phase 6: Refine or Hand Off -Ask what should happen next using the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). If the tool is unavailable or errors, present numbered options in chat and wait for the user's reply — never silently skip the question. +Ask what should happen next using the platform's blocking question tool: `AskUserQuestion` in Claude Code (call `ToolSearch` with `select:AskUserQuestion` first if its schema isn't loaded), `request_user_input` in Codex, `ask_user` in Gemini. Fall back to numbered options in chat only when no blocking tool exists in the harness or the call errors (e.g., Codex edit modes) — not because a schema load is required. Never silently skip the question. **Question:** "What should the agent do next?" diff --git a/plugins/compound-engineering/skills/ce-ideate/references/universal-ideation.md b/plugins/compound-engineering/skills/ce-ideate/references/universal-ideation.md index 10363ec2c..c48d3e84b 100644 --- a/plugins/compound-engineering/skills/ce-ideate/references/universal-ideation.md +++ b/plugins/compound-engineering/skills/ce-ideate/references/universal-ideation.md @@ -53,7 +53,7 @@ Present survivors before any persistence. For each: title, description, rational Persistence is opt-in. The terminal review loop is a complete ideation cycle. Refinement happens in conversation with no file or network cost. Persistence triggers only when the user explicitly chooses to save, share, or hand off. -Use the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). If the tool is unavailable or errors, present numbered options in chat and wait for the user's reply — never silently skip the question. Offer four choices: +Use the platform's blocking question tool: `AskUserQuestion` in Claude Code (call `ToolSearch` with `select:AskUserQuestion` first if its schema isn't loaded), `request_user_input` in Codex, `ask_user` in Gemini. Fall back to numbered options in chat only when no blocking tool exists in the harness or the call errors (e.g., Codex edit modes) — not because a schema load is required. Never silently skip the question. Offer four choices: - **Refine the ideation in conversation (or stop here — no save)** — add ideas, re-evaluate, or deepen analysis without writing anything. Ending the conversation at any point after this pick is a valid no-save exit. - **Open and iterate in Proof** — invoke the Proof HITL review path per the §6.2 contract in `references/post-ideation-workflow.md`: upload the survivors to Proof (rendered to a temp file since no local file is written in non-software elsewhere mode), iterate via comments, and exit cleanly with the Proof URL as the canonical record on successful return. Proof iteration is typically the terminal act in this mode, so the flow does not force another menu choice afterward. Only an `aborted` status returns to this menu. On persistent Proof failure, apply the §6.5 Proof Failure Ladder from `references/post-ideation-workflow.md` so the iteration attempt is not stranded without recovery. diff --git a/plugins/compound-engineering/skills/ce-onboarding/SKILL.md b/plugins/compound-engineering/skills/ce-onboarding/SKILL.md index d0224c4b1..b92e6f005 100644 --- a/plugins/compound-engineering/skills/ce-onboarding/SKILL.md +++ b/plugins/compound-engineering/skills/ce-onboarding/SKILL.md @@ -385,7 +385,7 @@ Write the file to the repo root as `ONBOARDING.md`. ### Phase 5: Present Result -After writing, inform the user that `ONBOARDING.md` has been generated. Offer next steps using the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). If the tool is unavailable or errors, present numbered options in chat and wait for the user's reply — never silently skip the question. +After writing, inform the user that `ONBOARDING.md` has been generated. Offer next steps using the platform's blocking question tool: `AskUserQuestion` in Claude Code (call `ToolSearch` with `select:AskUserQuestion` first if its schema isn't loaded), `request_user_input` in Codex, `ask_user` in Gemini. Fall back to numbered options in chat only when no blocking tool exists in the harness or the call errors (e.g., Codex edit modes) — not because a schema load is required. Never silently skip the question. Options: 1. Open the file for review diff --git a/plugins/compound-engineering/skills/ce-optimize/SKILL.md b/plugins/compound-engineering/skills/ce-optimize/SKILL.md index 37a9d82e5..e8da566f0 100644 --- a/plugins/compound-engineering/skills/ce-optimize/SKILL.md +++ b/plugins/compound-engineering/skills/ce-optimize/SKILL.md @@ -10,7 +10,7 @@ Run metric-driven iterative optimization. Define a goal, build measurement scaff ## Interaction Method -Use the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). If the tool is unavailable or errors, present numbered options in chat and wait for the user's reply — never silently skip the question. +Use the platform's blocking question tool: `AskUserQuestion` in Claude Code (call `ToolSearch` with `select:AskUserQuestion` first if its schema isn't loaded), `request_user_input` in Codex, `ask_user` in Gemini. Fall back to numbered options in chat only when no blocking tool exists in the harness or the call errors (e.g., Codex edit modes) — not because a schema load is required. Never silently skip the question. ## Input diff --git a/plugins/compound-engineering/skills/ce-plan/SKILL.md b/plugins/compound-engineering/skills/ce-plan/SKILL.md index 3f1640124..4823a6d09 100644 --- a/plugins/compound-engineering/skills/ce-plan/SKILL.md +++ b/plugins/compound-engineering/skills/ce-plan/SKILL.md @@ -16,7 +16,7 @@ This workflow produces a durable implementation plan. It does **not** implement ## Interaction Method -When asking the user a question, prefer the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). If the tool is unavailable or errors, present numbered options in chat and wait for the user's reply — never silently skip the question. +When asking the user a question, use the platform's blocking question tool: `AskUserQuestion` in Claude Code (call `ToolSearch` with `select:AskUserQuestion` first if its schema isn't loaded), `request_user_input` in Codex, `ask_user` in Gemini. Fall back to numbered options in chat only when no blocking tool exists in the harness or the call errors (e.g., Codex edit modes) — not because a schema load is required. Never silently skip the question. Ask one question at a time. Prefer a concise single-select choice when natural options exist. @@ -735,7 +735,7 @@ When deepening is warranted, read `references/deepening-workflow.md` for confide **Load `references/plan-handoff.md` now.** It contains the full instructions for 5.3.8 (document review), 5.3.9 (final checks and cleanup), and 5.4 (post-generation handoff, including the Proof HITL flow, post-HITL re-review, and Issue Creation branching). Document review is mandatory — do not skip it even if the confidence check already ran. -After document review and final checks, present this menu using the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). If the tool is unavailable or errors, present the numbered options in chat and wait for the user's reply — never silently skip the question. +After document review and final checks, present this menu using the platform's blocking question tool: `AskUserQuestion` in Claude Code (call `ToolSearch` with `select:AskUserQuestion` first if its schema isn't loaded), `request_user_input` in Codex, `ask_user` in Gemini. Fall back to numbered options in chat only when no blocking tool exists in the harness or the call errors (e.g., Codex edit modes) — not because a schema load is required. Never silently skip the question. **Question:** "Plan ready at `docs/plans/YYYY-MM-DD-NNN-<type>-<name>-plan.md`. What would you like to do next?" diff --git a/plugins/compound-engineering/skills/ce-plan/references/plan-handoff.md b/plugins/compound-engineering/skills/ce-plan/references/plan-handoff.md index 219fec2d3..f5e097d3b 100644 --- a/plugins/compound-engineering/skills/ce-plan/references/plan-handoff.md +++ b/plugins/compound-engineering/skills/ce-plan/references/plan-handoff.md @@ -31,7 +31,7 @@ If artifact-backed mode was used: **Pipeline mode:** If invoked from an automated workflow such as LFG, SLFG, or any `disable-model-invocation` context, skip the interactive menu below and return control to the caller immediately. The plan file has already been written, the confidence check has already run, and ce-doc-review has already run — the caller (e.g., lfg, slfg) determines the next step. -After document-review completes, present the options using the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). If the tool is unavailable or errors, present the numbered options in chat and wait for the user's reply — never silently skip the question. +After document-review completes, present the options using the platform's blocking question tool: `AskUserQuestion` in Claude Code (call `ToolSearch` with `select:AskUserQuestion` first if its schema isn't loaded), `request_user_input` in Codex, `ask_user` in Gemini. Fall back to numbered options in chat only when no blocking tool exists in the harness or the call errors (e.g., Codex edit modes) — not because a schema load is required. Never silently skip the question. **Question:** "Plan ready at `docs/plans/YYYY-MM-DD-NNN-<type>-<name>-plan.md`. What would you like to do next?" @@ -82,7 +82,7 @@ When the user selects "Create Issue", detect their project tracker: linear issue create --title "<title>" --description "$(cat <plan_path>)" ``` -4. If no tracker is configured, ask the user which tracker they use with the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). If the tool is unavailable or errors, ask in chat and wait for the reply — never silently skip. Options: `GitHub`, `Linear`, `Skip`. Then: +4. If no tracker is configured, ask the user which tracker they use with the platform's blocking question tool: `AskUserQuestion` in Claude Code (call `ToolSearch` with `select:AskUserQuestion` first if its schema isn't loaded), `request_user_input` in Codex, `ask_user` in Gemini. Fall back to asking in chat only when no blocking tool exists or the call errors (e.g., Codex edit modes) — not because a schema load is required. Never silently skip. Options: `GitHub`, `Linear`, `Skip`. Then: - Proceed with the chosen tracker's command above - Offer to persist the choice by adding `project_tracker: <value>` to `AGENTS.md`, where `<value>` is the lowercase tracker key (`github` or `linear`) — not the display label — so future runs match the detector in step 1 and skip this prompt - If `Skip`, return to the options without creating an issue diff --git a/plugins/compound-engineering/skills/ce-plan/references/universal-planning.md b/plugins/compound-engineering/skills/ce-plan/references/universal-planning.md index 29caf48d5..64da7dd41 100644 --- a/plugins/compound-engineering/skills/ce-plan/references/universal-planning.md +++ b/plugins/compound-engineering/skills/ce-plan/references/universal-planning.md @@ -44,7 +44,7 @@ Example for "plan a date night in Seattle this Saturday": ## Step 1b: Focused Q&A -Ask up to 3 questions targeting the unknowns that would most change the plan. Use the platform's question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). If the tool is unavailable or errors, present numbered options in chat and wait for the user's reply — never silently skip the question. +Ask up to 3 questions targeting the unknowns that would most change the plan. Use the platform's blocking question tool: `AskUserQuestion` in Claude Code (call `ToolSearch` with `select:AskUserQuestion` first if its schema isn't loaded), `request_user_input` in Codex, `ask_user` in Gemini. Fall back to numbered options in chat only when no blocking tool exists or the call errors (e.g., Codex edit modes) — not because a schema load is required. Never silently skip the question. **How to ask well:** - Offer informed options, not open-ended blanks. Instead of "When are you going?", try "Mid-week visits have 30-40% shorter lines — are you flexible on timing?" The question should give the user a frame of reference, not just extract information. @@ -93,7 +93,7 @@ Example: A date night plan should present 2-3 restaurant options, 2-3 activity o ## Step 3: Save or Share -After structuring the plan, ask the user how they want to receive it using the platform's question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). If the tool is unavailable or errors, present numbered options in chat and wait for the user's reply — never silently skip the question. +After structuring the plan, ask the user how they want to receive it using the platform's blocking question tool: `AskUserQuestion` in Claude Code (call `ToolSearch` with `select:AskUserQuestion` first if its schema isn't loaded), `request_user_input` in Codex, `ask_user` in Gemini. Fall back to numbered options in chat only when no blocking tool exists or the call errors (e.g., Codex edit modes) — not because a schema load is required. Never silently skip the question. **Question:** "Plan ready. How would you like to receive it?" diff --git a/plugins/compound-engineering/skills/ce-pr-description/SKILL.md b/plugins/compound-engineering/skills/ce-pr-description/SKILL.md index 8e9ca5ae2..a1db8c990 100644 --- a/plugins/compound-engineering/skills/ce-pr-description/SKILL.md +++ b/plugins/compound-engineering/skills/ce-pr-description/SKILL.md @@ -397,4 +397,4 @@ If Step 1 exited gracefully (closed/merged PR, invalid range, empty commit list) This skill does not ask questions directly. If the diff is ambiguous about something the caller should decide (e.g., focus conflicts with the actual changes, or evidence is technically capturable but the caller did not pre-stage it), surface the ambiguity in the returned output or a short note to the caller — do not invoke a platform question tool. -Callers that need to ask the user are responsible for using their own platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini), with a numbered-options fallback when the tool is unavailable or errors — never silently skipping the question. +Callers that need to ask the user are responsible for using their own platform's blocking question tool: `AskUserQuestion` in Claude Code (call `ToolSearch` with `select:AskUserQuestion` first if its schema isn't loaded), `request_user_input` in Codex, `ask_user` in Gemini. Fall back to numbered options in chat only when no blocking tool exists in the harness or the call errors (e.g., Codex edit modes) — not because a schema load is required. Never silently skip the question. diff --git a/plugins/compound-engineering/skills/ce-proof/references/hitl-review.md b/plugins/compound-engineering/skills/ce-proof/references/hitl-review.md index 4e07e2690..30c7a60d5 100644 --- a/plugins/compound-engineering/skills/ce-proof/references/hitl-review.md +++ b/plugins/compound-engineering/skills/ce-proof/references/hitl-review.md @@ -40,7 +40,7 @@ Return shape (used by upstream callers to resume their handoff; also shown to th Doc ready for review: <tokenUrl> ``` -5. Ask the user with the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). If the tool is unavailable or errors, present the options in chat and wait for the reply — never silently skip the question. +5. Ask the user with the platform's blocking question tool: `AskUserQuestion` in Claude Code (call `ToolSearch` with `select:AskUserQuestion` first if its schema isn't loaded), `request_user_input` in Codex, `ask_user` in Gemini. Fall back to presenting options in chat only when no blocking tool exists in the harness or the call errors (e.g., Codex edit modes) — not because a schema load is required. Never silently skip the question. **Question:** "Highlight text in Proof to leave a comment. The agent will read each one, reply in-thread or apply the fix, then sync changes back to your local file. What's next?" @@ -182,7 +182,7 @@ Phrase them in whatever voice matches the situation rather than matching a templ ## Phase 4: Next-Signal Prompt -Ask the user with the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). If the tool is unavailable or errors, present the options in chat and wait for the reply — never silently skip the question. +Ask the user with the platform's blocking question tool: `AskUserQuestion` in Claude Code (call `ToolSearch` with `select:AskUserQuestion` first if its schema isn't loaded), `request_user_input` in Codex, `ask_user` in Gemini. Fall back to presenting options in chat only when no blocking tool exists in the harness or the call errors (e.g., Codex edit modes) — not because a schema load is required. Never silently skip the question. **Question:** "Proof review pass done. What's next?" @@ -220,7 +220,7 @@ Runs when the user selects **Proceed**. Before prompting anything, check whether **If different** — continue to step 3. -3. Ask with the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). If the tool is unavailable or errors, present the options in chat and wait for the reply — never silently skip the question. +3. Ask with the platform's blocking question tool: `AskUserQuestion` in Claude Code (call `ToolSearch` with `select:AskUserQuestion` first if its schema isn't loaded), `request_user_input` in Codex, `ask_user` in Gemini. Fall back to presenting options in chat only when no blocking tool exists in the harness or the call errors (e.g., Codex edit modes) — not because a schema load is required. Never silently skip the question. **Question:** "Sync the reviewed doc back to `<localPath>`? Proof has your review changes; local still has the pre-review copy." diff --git a/plugins/compound-engineering/skills/ce-report-bug/SKILL.md b/plugins/compound-engineering/skills/ce-report-bug/SKILL.md index 0a4897a90..d3a3e842e 100644 --- a/plugins/compound-engineering/skills/ce-report-bug/SKILL.md +++ b/plugins/compound-engineering/skills/ce-report-bug/SKILL.md @@ -11,7 +11,7 @@ Report bugs encountered while using the compound-engineering plugin. This skill ## Step 1: Gather Bug Information -Ask the user the following questions using the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). If the tool is unavailable or errors, present numbered options in chat and wait for a reply — never silently skip the question: +Ask the user the following questions using the platform's blocking question tool: `AskUserQuestion` in Claude Code (call `ToolSearch` with `select:AskUserQuestion` first if its schema isn't loaded), `request_user_input` in Codex, `ask_user` in Gemini. Fall back to numbered options in chat only when no blocking tool exists in the harness or the call errors (e.g., Codex edit modes) — not because a schema load is required. Never silently skip the question: **Question 1: Bug Category** - What type of issue are you experiencing? diff --git a/plugins/compound-engineering/skills/ce-resolve-pr-feedback/SKILL.md b/plugins/compound-engineering/skills/ce-resolve-pr-feedback/SKILL.md index 79fc7b3cc..4ffff9148 100644 --- a/plugins/compound-engineering/skills/ce-resolve-pr-feedback/SKILL.md +++ b/plugins/compound-engineering/skills/ce-resolve-pr-feedback/SKILL.md @@ -344,9 +344,9 @@ Still pending from a previous run (count): If a blocking question tool is available, use it to ask about all pending decisions (both new `needs-human` and previous-run pending) together. If there are only pending decisions and no new work was done, the summary is just the pending items. -Use the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini) to present the decisions and wait for the user's response. After they decide, process the remaining items: fix the code, compose the reply, post it, and resolve the thread. +Use the platform's blocking question tool: `AskUserQuestion` in Claude Code (call `ToolSearch` with `select:AskUserQuestion` first if its schema isn't loaded), `request_user_input` in Codex, `ask_user` in Gemini. Use it to present the decisions and wait for the user's response. After they decide, process the remaining items: fix the code, compose the reply, post it, and resolve the thread. -If the tool is unavailable or errors, present the decisions in the summary output and wait for the user to respond in conversation — never silently skip. If they don't respond, the items remain open on the PR for later handling. +Fall back to presenting the decisions in the summary output and waiting in conversation only when no blocking tool exists in the harness or the call errors (e.g., Codex edit modes) — not because a schema load is required. Never silently skip. If the user doesn't respond, the items remain open on the PR for later handling. --- diff --git a/plugins/compound-engineering/skills/ce-sessions/SKILL.md b/plugins/compound-engineering/skills/ce-sessions/SKILL.md index 860a928a4..190d5665a 100644 --- a/plugins/compound-engineering/skills/ce-sessions/SKILL.md +++ b/plugins/compound-engineering/skills/ce-sessions/SKILL.md @@ -24,7 +24,7 @@ If the lines above resolved to plain values (a folder name like `my-repo` and a ## Execution -If no argument is provided, ask what the user wants to know about their session history. Use the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). If the tool is unavailable or errors, ask in plain text and wait for a reply — never silently skip the question. +If no argument is provided, ask what the user wants to know about their session history. Use the platform's blocking question tool: `AskUserQuestion` in Claude Code (call `ToolSearch` with `select:AskUserQuestion` first if its schema isn't loaded), `request_user_input` in Codex, `ask_user` in Gemini. Fall back to asking in plain text only when no blocking tool exists in the harness or the call errors (e.g., Codex edit modes) — not because a schema load is required. Never silently skip the question. Dispatch `research:ce-session-historian` with the user's question as the task prompt. Omit the `mode` parameter so the user's configured permission settings apply. Include in the dispatch prompt: diff --git a/plugins/compound-engineering/skills/ce-setup/SKILL.md b/plugins/compound-engineering/skills/ce-setup/SKILL.md index 2f8a86291..860fa3d79 100644 --- a/plugins/compound-engineering/skills/ce-setup/SKILL.md +++ b/plugins/compound-engineering/skills/ce-setup/SKILL.md @@ -8,7 +8,7 @@ disable-model-invocation: true ## Interaction Method -Ask the user each question below using the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). If the tool is unavailable or errors, present each question as a numbered list and wait for a reply — never silently skip or auto-configure. For multiSelect questions, accept comma-separated numbers (e.g. `1, 3`). +Ask the user each question below using the platform's blocking question tool: `AskUserQuestion` in Claude Code (call `ToolSearch` with `select:AskUserQuestion` first if its schema isn't loaded), `request_user_input` in Codex, `ask_user` in Gemini. Fall back to presenting each question as a numbered list in chat only when no blocking tool exists in the harness or the call errors (e.g., Codex edit modes) — not because a schema load is required. Never silently skip or auto-configure. For multiSelect questions, accept comma-separated numbers (e.g. `1, 3`). Interactive setup for compound-engineering — diagnoses environment health, cleans obsolete repo-local CE config, and helps configure required tools. Review agent selection is handled automatically by `ce-code-review`; project-specific review guidance belongs in `CLAUDE.md` or `AGENTS.md`. diff --git a/plugins/compound-engineering/skills/ce-slack-research/SKILL.md b/plugins/compound-engineering/skills/ce-slack-research/SKILL.md index 574308916..8530de6c5 100644 --- a/plugins/compound-engineering/skills/ce-slack-research/SKILL.md +++ b/plugins/compound-engineering/skills/ce-slack-research/SKILL.md @@ -27,7 +27,7 @@ The input can be a keyword, a natural language question, or include Slack search ## Execution -If no argument is provided, ask what topic to research. Use the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). If the tool is unavailable or errors, ask in plain text and wait for a reply — never silently skip the question. +If no argument is provided, ask what topic to research. Use the platform's blocking question tool: `AskUserQuestion` in Claude Code (call `ToolSearch` with `select:AskUserQuestion` first if its schema isn't loaded), `request_user_input` in Codex, `ask_user` in Gemini. Fall back to asking in plain text only when no blocking tool exists in the harness or the call errors (e.g., Codex edit modes) — not because a schema load is required. Never silently skip the question. Dispatch `research:ce-slack-researcher` with the user's topic as the task prompt. Omit the `mode` parameter so the user's configured permission settings apply. diff --git a/plugins/compound-engineering/skills/ce-test-browser/SKILL.md b/plugins/compound-engineering/skills/ce-test-browser/SKILL.md index dd0fe20b7..bd0878053 100644 --- a/plugins/compound-engineering/skills/ce-test-browser/SKILL.md +++ b/plugins/compound-engineering/skills/ce-test-browser/SKILL.md @@ -48,7 +48,7 @@ If not installed, inform the user: "`agent-browser` is not installed. Run `/ce-s ### 2. Ask Browser Mode -Ask the user whether to run headed or headless using the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). If the tool is unavailable or errors, present the options in chat and wait for a reply — never silently skip the question: +Ask the user whether to run headed or headless using the platform's blocking question tool: `AskUserQuestion` in Claude Code (call `ToolSearch` with `select:AskUserQuestion` first if its schema isn't loaded), `request_user_input` in Codex, `ask_user` in Gemini. Fall back to presenting options in chat only when no blocking tool exists in the harness or the call errors (e.g., Codex edit modes) — not because a schema load is required. Never silently skip the question: ``` Do you want to watch the browser tests run? diff --git a/plugins/compound-engineering/skills/ce-test-xcode/SKILL.md b/plugins/compound-engineering/skills/ce-test-xcode/SKILL.md index 7d5fd13fd..1cfbe00d5 100644 --- a/plugins/compound-engineering/skills/ce-test-xcode/SKILL.md +++ b/plugins/compound-engineering/skills/ce-test-xcode/SKILL.md @@ -110,7 +110,7 @@ Pause for human input when testing touches flows that require device interaction | Location | "Allow location access and verify map updates" | | SwiftUI Text links | "Please tap on [element description] manually — automated taps cannot trigger inline text links" | -Ask the user using the platform's blocking question tool (`AskUserQuestion` in Claude Code, `request_user_input` in Codex, `ask_user` in Gemini). If the tool is unavailable or errors, present numbered options and wait for the user's reply — never silently skip the question: +Ask the user using the platform's blocking question tool: `AskUserQuestion` in Claude Code (call `ToolSearch` with `select:AskUserQuestion` first if its schema isn't loaded), `request_user_input` in Codex, `ask_user` in Gemini. Fall back to numbered options in chat only when no blocking tool exists in the harness or the call errors (e.g., Codex edit modes) — not because a schema load is required. Never silently skip the question: ``` Human Verification Needed From ca48bcd0710d06fb2e3197add5b78764c76a7818 Mon Sep 17 00:00:00 2001 From: Trevin Chow <trevin@trevinchow.com> Date: Tue, 21 Apr 2026 01:15:45 -0700 Subject: [PATCH 3/3] docs(question-tool): mark platform constraints as April-2026 snapshot Add a note below the Cross-Platform User Interaction checklist flagging that the `AskUserQuestion` deferred-load and Codex Plan-mode-only `request_user_input` behaviors reflect current platform state as of April 2026. If either platform changes that behavior, revisit the guidance rather than carrying the workaround forward indefinitely. --- plugins/compound-engineering/AGENTS.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/plugins/compound-engineering/AGENTS.md b/plugins/compound-engineering/AGENTS.md index c1fa5fc21..b31d253f9 100644 --- a/plugins/compound-engineering/AGENTS.md +++ b/plugins/compound-engineering/AGENTS.md @@ -127,6 +127,8 @@ Keep rationale at the highest-level location that covers it; restate behavioral - [ ] For Claude Code, also instruct to load `AskUserQuestion` via `ToolSearch` with `select:AskUserQuestion` first if its schema isn't already loaded — `AskUserQuestion` is a deferred tool and won't be available at session start. A pending schema load is not a valid reason to fall back to text. - [ ] Include a fallback: when no blocking tool exists in the harness or the call errors (e.g., Codex edit modes where `request_user_input` is unavailable, or `ToolSearch` returns no match), present numbered options in chat and wait for the user's reply — never silently skip the question. +> **Platform-behavior note (April 2026, may change):** The specifics above reflect current behavior — `AskUserQuestion` is deferred in Claude Code, and `request_user_input` in Codex is exposed only in Plan mode. If Anthropic changes `AskUserQuestion` to a non-deferred tool, or Codex exposes `request_user_input` in edit modes, revisit this guidance rather than carrying the workaround forward indefinitely. Verify before assuming these constraints still hold. + ### Interactive Question Tool Design Design rules for blocking question menus (`AskUserQuestion` / `request_user_input` / `ask_user`). Violations silently degrade the UX in harnesses where secondary description text is hidden or labels are truncated.