Use when reviewing UI for accessibility — WCAG 2.2 AA, keyboard nav, focus, ARIA, contrast, screen-reader semantics — even on 'is this a11y-OK?' or 'mach das barrierefrei'.
日本語の概要は準備中です。原文の説明を表示しています。
Reconstruct a free-form prompt into actionable AC + assumptions + confidence band before the engine plans — '/work "…"', 'baue X', 'ist der Prompt klar genug für die Engine?'.
インストールする前に、エージェントに与えられる指示の中身を確認できます。
Move a free-form prompt from "raw text" to "engine-ready" in one run. Produces reconstructed acceptance criteria, explicit assumptions, and a confidence band that decides whether the engine proceeds silently, halts for confirmation, or refuses to plan.
Sibling of
refine-ticket— same reconstruction-of-intent pattern, different input shape. Tickets arrive structured (id, title, AC); prompts arrive as one string.
/work "<prompt>" or pastes a free-form request.input.kind="prompt" in the refine step.| Phrasing | Route to |
|---|---|
| "refine this ticket" | refine-ticket |
| "estimate this prompt" | not supported — score then estimate downstream |
| "plan this feature" | /feature-plan (downstream) |
| "is this a duplicate?" | validate-feature-fit (sub-skill, post-refine) |
refine-prompt is the first gate on prompt-driven flow. It does not
plan, does not implement, does not write back anywhere.
Exactly one path: a non-empty raw string carried in
state.input.data.raw (built by work_engine/resolvers/prompt.ts).
No branch detection, no URL parsing, no clipboard fallback — the
calling command (/work) owns prompt capture; this skill only refines.
If raw is missing, empty, or whitespace-only the resolver already
raised PromptResolverError. The skill never receives that input.
The skill honours prompt_optimization.inbound (or
prompt_optimization.default when no inbound override is set) from
.agent-project-settings.yml / .agent-settings.yml. Three modes:
| Mode | Behaviour |
|---|---|
off | The skill is a no-op. The dispatcher writes confidence={"band":"high","score":1.0} directly and the engine proceeds with the literal prompt. No assumption inference, no clarifying questions. |
mini | Stack-aware light shaping. Steps 1-2 run; step 3 only emits assumes: lines for implicit stack constraints (framework, package manager) detected from config files. Steps 4-5 produce 3 AC bullets max. Low-band halts ask at most one question; medium-band halts are auto-confirmed silently. |
max (default) | Full procedure — every step 1–6 runs. Medium-band halts surface the assumption list verbatim; low-band halts ask one clarifying question. This is the existing behaviour. |
Bypass prefix. If the raw prompt starts with the configured
prompt_optimization.bypass_prefix (default /raw), the skill
becomes a no-op regardless of mode. The dispatcher strips the
prefix, passes the remainder through verbatim, and records
bypass:true in the envelope so downstream surfaces (delivery
report, --no-prose-synthesis) can attribute the skip.
/raw migrate auth.service.ts to use jose, keep the API shape
/raw is reserved at the prompt boundary only — it has no meaning
mid-prompt and is not stripped when it appears inside the body.
When the mode is mini or max, step 3 may read these config files
(read-only, scope-locked) to enrich the assumes: block:
package.json — JS / TS framework detection (Next.js App vs Pages,
Remix, SvelteKit, Astro, Expo, …)composer.json — PHP framework detection (Laravel, Symfony,
framework-less)pyproject.toml / requirements.txt — Python framework detectionCLAUDE.md / AGENTS.md — project-declared stack hints.cursorrules — project-declared stack hintstsconfig.json — TS path-alias / module-resolution hintsThe skill MUST NOT read source files, .env*, secrets, or user
data. Detection lands as a single assumes: stack=<framework>@<version>
line; the medium-band halt is the user's chance to flip it.
Examine the raw text top to bottom before changing anything in
state. Identify the single desired outcome in one sentence —
verb + object + observable result. If the prompt names two
unrelated outcomes (e.g. "fix login AND refactor the dashboard"),
record both but flag scope-overload in step 5; the score will
land in medium or low.
This is an analysis pass, not an execution pass. The skill does not modify the prompt, infer code changes, or call any tool — it investigates the input and produces a structured envelope the dispatcher reads.
Pull every concrete signal from the prompt verbatim:
UserController,
auth.service.ts, migrations/2024_…).Constraints come from the prompt only. Inferred constraints belong in step 3 (assumptions), never here.
Anything the prompt implies but does not state. Examples:
auth/
module (no new auth provider)..agent-settings.yml / config/cache.php).Each assumption is a single line, prefixed with assumes:. The
medium-band halt surfaces them verbatim — no rewording, no
explanations.
Three to seven bullet points. Each bullet is observable and testable in the project's existing test surface (Pest / Jest / pytest / etc.). Avoid:
Anchor each bullet to a constraint from step 2 or an assumption from step 3 — never both implicit.
Delegate to work_engine/scoring/confidence.ts:
import { score } from './work_engine/scoring/confidence.js';
const result = score({ raw: promptRaw, ac: reconstructedAc, assumptions });
// result.band ∈ {"high", "medium", "low"}
// result.score ∈ [0.0, 1.0]
// result.dimensions: Record<string, number> // 0–2 per dimension
// result.reasons: string[] // human-readable rationale
The rubric (5 dimensions × 0–2, sum / 10) and band thresholds
(high ≥ 0.8, medium 0.5–0.79, low < 0.5) are owned by
confidence.ts. Do not re-derive them in prose.
Before emitting the envelope, run these three scans. Each is a fast pass; failure blocks emission.
<placeholder>, TODO, FIXME, tbd, ???, XXX strings. The literal angle-bracket placeholders in the template (<one sentence …>, <bullet>) must be replaced with concrete text before emission.auth.service.ts but the codebase uses AuthService.php, surface the mismatch in Assumptions rather than adopting the prompt's spelling.Source: adapted from an external reference.
The refine dispatcher step in directives/backend/refine.ts reads
the score and returns one of three outcomes — the skill does not
decide the action, only produces the inputs.
| Band | Outcome | What the user sees |
|---|---|---|
high | SUCCESS | Silent proceed; AC + assumptions land in the delivery report |
medium | PARTIAL | Assumptions report halt: numbered list of assumes: lines + AC, user confirms or edits |
low | BLOCKED | One clarifying question (per ask-when-uncertain Iron Law) |
The skill emits a structured envelope; the dispatcher renders it. Required fields, in order:
assumes:work_engine.scoring.confidenceThe shape below is the rendered surface for medium / low
halts; for high the same envelope lands in the delivery report
without a halt.
## Reconstructed prompt
**Goal:** <one sentence, verb + object + observable result>
**Acceptance criteria:**
1. <bullet>
2. <bullet>
3. <bullet>
**Assumptions:**
- assumes: <line>
- assumes: <line>
**Confidence:** medium (0.62) — goal_clarity 2 · scope_boundary 1 · ac_evidence 2 · stack_data 1 · reversibility 0
For low, the question replaces the AC list:
> The prompt does not name <missing dimension>.
>
> 1. <option that resolves the gap>
> 2. <alternative resolution>
> 3. <skip / abandon>
low if the goal is vague,
and a 20-word prompt can score high if scope is unambiguous.low on stack_data until R3 lands the UI
directive set; band-action is a pointer to R3, not a refusal.input.kind="ticket" — that path runs
through refine-ticket.state.input.data.raw. The original prompt stays
verbatim for replay; reconstructed output lands in
data.reconstructed_ac and data.assumptions.confidence.ts and only there..env*, secrets, or arbitrary user
files when stack-detecting in mini / max mode. The allowlist
above (package.json, composer.json, pyproject.toml,
requirements.txt, CLAUDE.md, AGENTS.md, .cursorrules,
tsconfig.json) is exhaustive.bypass_prefix mid-prompt. The prefix is only
recognised at the prompt boundary; matches inside the body stay
literal.max mode without
surfacing the assumption list on a medium-band halt. The diff
is the contract.refine-ticket — sibling for ticket-shaped inputprompt-optimizer — engine-outbound sibling; same prompt_optimization setting controls its modework_engine/resolvers/prompt.ts — envelope builderwork_engine/scoring/confidence.ts — rubric + band thresholdsask-when-uncertain — one-question-per-turn Iron Lawartifact-drafting-protocol — this skill was drafted under itagents/runtime/council/responses/prompt-master-mini.json (2026-05-17) — analysis behind the mini/max split and /raw bypass <!-- council-ref-allowed: ADR decision trace -->まだレビューはありません。使ってみた感想をお寄せください。
概要と使いどころ
Use when reviewing UI for accessibility — WCAG 2.2 AA, keyboard nav, focus, ARIA, contrast, screen-reader semantics — even on 'is this a11y-OK?' or 'mach das barrierefrei'.
日本語の概要は準備中です。原文の説明を表示しています。
Use when defining or auditing the activation event — aha-moment selection, retention correlation, falsifiable definition. Triggers on 'what is our aha moment', 'redefine activation'.
日本語の概要は準備中です。原文の説明を表示しています。
Use when capturing an architectural decision — file naming, next ADR number, Status / Context / Decision / Consequences, index regen; fires even without saying 'ADR'.
日本語の概要は準備中です。原文の説明を表示しています。
Adversarial critique — devil's advocate, stress-test, honest teardown ('poke holes', 'be brutal', 'was hältst du davon'); explicit request only. Routine code or design review → code-review.
日本語の概要は準備中です。原文の説明を表示しています。
Use when reading, creating, or updating agent documentation, module docs, roadmaps, or AGENTS.md. Understands the full .augment/, agents/, and copilot-instructions structure.
日本語の概要は準備中です。原文の説明を表示しています。
Use for an adversarial red-team / blue-team / auditor review of an AI agent's CONFIG + behaviour (rules, skills, MCP, hooks, permissions) — attack-chain → defensive-gap list, not a code audit.
日本語の概要は準備中です。原文の説明を表示しています。