ambiguity-gate
Blocks action on an ambiguous task until the interpretation is chosen.
Skill by dmsdc-ai
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/dmsdc-ai-ambiguity-gate
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: design, productivity
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/ambiguity-gate
What's inside
- Skill name
ambiguity-gate- Description
- Blocks action on an ambiguous task until the interpretation is chosen. Interactive sessions enter plan mode with the competing interpretations written out; dispatched workers send a HOLD inject instead (plan-approval UI is on a screen nobody watches). Fires on task-shaped requests only. Use when a request has ≥2 plausible readings of target/scope/deliverable/success-criteria, or implies a destructive operation that is unbounded or irreversible. Triggers: "ambiguous", "not sure what you mean", "plan mode", "which one", "모호", "애매", "플랜 모드", "뭘 말하는지", "범위가", "어디까지".
- License
- MIT
- Instructions
- 262 lines in SKILL.md · view on GitHub
Files (12)
- SKILL.md
- 01-fire-a5-unbounded-reset.md · tests/
- 02-fire-a6-vague-verb.md · tests/
- 03-fire-a1-target-survives-reading.md · tests/
- 04-fire-a2-a3-cut-point.md · tests/
- 05-fire-a7-constraint-conflict.md · tests/
- 06-nofire-brake-resolves.md · tests/
- 07-nofire-gate-a-status-query.md · tests/
- 08-nofire-write-two-fails.md · tests/
- 09-nofire-mode-directive-and-ack.md · tests/
- 10-nofire-operational-condition.md · tests/
- README.md · tests/
SKILL.md (first lines)
# Ambiguity Gate
**A task-shaped request with residual ambiguity does not get acted on until the interpretation is chosen.**
The branch variable is not your role. It is **whether a human is watching the surface on which the
question would appear.** Plan mode is a blocking modal: on a watched surface it is the cheapest
possible gate; on an unwatched one it is indistinguishable from a hung session — and it eats the
injects sent to wake it. Role is the observable proxy for "watched", nothing more.
Normative source: `docs/rules.md` **Rule 37** (HARD). This skill is its operational aid, not its
authority — the rule binds even where this skill is not installed.
## Where this skill fits
| Situation | Route to | Boundary |
|---|---|---|
| The request has ≥2 plausible readings — we do not know **what the user wants** | **`ambiguity-gate`** (this skill) | Request-space multiplicity. **Only the user can resolve it.** |
| The goal is known; **2+ equally valid approaches** to reach it | `auto-multi-llm-review` | Solution-space multiplicity. An LLM panel *can* resolve it. **If both fire, ambiguity-gate goes first** — you cannot deliberate approaches to an unknown target. Deliberation may then run inside the plan or after approval. |
| An artifact already exists (design doc, review feedback, dead-ended debug) and needs multi-AI verification | `deliberation-gate` | Fires on **outputs**; this gate fires on **inputs**. Sequential, never competing. |
| A plan exists and must be stress-tested into a written ADR (Rule 24 SPEC FIRST) | `grill-with-adr` | **Downstream exit**, not a competitor: gate → approved plan → if the decision is ADR-weight (scope ≥ cross-project, or one-way) → grill. Also: grill is user-invoked; this gate is automatic. |
| oh-my-claudecode "Broad Request Detection" → `explore` → `architect` → `plan` | Compatible — runs **inside** plan mode | OMC owns an optional *interview method*; Rule 37 owns the *gate* (no action before approval). Art.17.2: OMC must never be required — the gate uses native plan mode and works with OMC absent. Conflict exists **only** if an OMC flow acts before approval; then Rule 37 wins. |
| Design exploration before building something new | `superpowers:brainstorming` | Brainstorming explores a *chosen* direction; the gate decides *which* direction is being asked for. Brainstorm inside plan mode, or after approval. |
| "Why does this break?" rather than "what should we build?" | `diagnose` | Wrong axis entirely — no ambiguity gate on a reproduction. |
---
## Step 1 — Gate A: is this task-shaped?
The request asks for a change to durable state (files, config, running systems, dispatched work)
or for a deliverable artifact (doc, design, report). Excluded, enumerated:
| Excluded class | Example |
|---|---|
| Answerable from context already loaded | "what did #743 conclude?" |
| Status / read-only query | "which sessions are alive?" |
| 1-line ack, follow-up, `send-key`, broadcast | "ok", "go", "yes do that" |
| Preference / tone / mode directive | "caveman mode", "shorter answers" |
| Conversation about a decision already made | "why did we pick two-way?" |
Enumerating exclusions is deliberate: a positive definition of "task" drifts between readers, a
closed exclusion list does not. **Gate A fails ⇒ stop here. No gate, answer normally.**
Operational conditions are not requests. A sandbox prompt, a trust modal, a blank panel, a stuck
session, stale cleanup, AUTO_REPORT — Rule 30 autonomy is untouched by this gate.
> **If skipped:** the gate fires on chatter and status queries. Every "ok" becomes an approval round
> trip, the user learns to route around it, and the gate stops carrying information — worse than no
> gate, because it still *looks* like one.
## Step 2 — Resolve by reading first (the brake)
Cheap disambiguation comes **first**. Only **residual ambiguity that survives reading** triggers
the gate.
The stopping condition is a criterion, not a budget — an effort count is not a test two readers can
apply:
> **Does the residual difference between the readings concern the user's *intent*, or the
> repository's *facts*?** Facts are readable — keep reading. **Intent is not in the repo** — no
> amount of further reading will settle it, and that is exactly when the gate fires.
A targeted search (grep the named symbol, read the named file, `tq-status`) settles fact-shaped
differences; roughly three such calls is the practical point past which a fact-shaped difference
would already have resolved. That figure is **guidance for the judgment, not the threshold** — the
decidable test is the intent-vs-facts distinction above, and a reader who reaches a different call
count but the same intent-vs-facts verdict has applied the rule correctly.
This is the single most important step in the skill.
> **If skipped:** "무조건" degenerates into an interview before every task. Users approve without
> reading within days, and the gate becomes a tax that buys nothing. Over-triggering — not
> under-triggering — is the way this gate fails.
## Step 3 — Gate B: does a signal survive the reading?
Fires if **≥1** signal holds:
| # | Signal | Firing test |
|---|---|---|
| **A1** | **Target** | ≥2 concrete referents in the repo match the named target and the request does not disambiguate |
| **A2** | **Scope** | The change boundary has ≥2 defensible cut points (this call site / this module / every caller) |
| **A3** | **Deliverable** | You cannot name the exact file(s) or artifact(s) that will exist when it is done |
| **A4** | **Success criteria** | You cannot state one checkable pass/fail condition |
| **A5** | **Destructive op: unbounded *or* irreversible** | delete / overwrite / force-push / reset / drop / publish / kill that **either** (i) lacks an explicit bound (which files, which remote, which sessions), **or** (ii) **irreversibly destroys work not recoverable from any remote or backup**, absent an explicit user acknowledgement of that loss. **Fires alone, always** |
| **A6** | **Vague verb, no target** | improve / enhance / fix / refactor / 정리 / 개선 with no named file, function, or symbol |
| **A7** | **Constraint conflict** | Proceeding requires choosing which standing rule, ADR, or constitutional article to violate |
A6 is the oh-my-claudecode "Broad Request Detection" heuristic, cited rather than reinvented
(Art.1 경량; the heuristic is sound, only its plugin coupling is unacceptable).
**The write-two rule.** A signal fires **only if you can write down the ≥2 competing readings
verbatim.** Suspicion is not a signal. If you can produce two, you may not silently pick one
(응답원칙 §4); if you cannot produce two, the signal did not fire and you proceed.
The written interpretations *are* the first section of the plan — detecting the ambiguity and
drafting the plan are the same act. No extra work, and the plan cannot be vaguer than the detection.
> **If skipped:** two readers of the same request disagree on whether it fired, and the rule stops
> being enforceable. Writing the two readings is the entire mechanism for inter-reader agreement.
**Decision rule:** `Gate A pass AND (≥1 of A1–A7 survives reading) → ambiguous`.
## Step 4 — Branch by watched surface
| Branch | Condition | Action |
|---|---|---|
| **Interactive** | human watching this surface | `EnterPlanMode` → plan whose §1 is the written interpretations + recommendation → wait for approval → `ExitPlanMode` → act |
| **Dispatched worker** | nobody watching | **MUST NOT enter plan mode.** `telepty inject` **HOLD** to orchestrator with the same written interpretations + recommendation → wait. Orchestrator opens a HITL Gate (`bin/hitl.sh open --kind decision --resume reinject`) → `awaiting_user` → resume by re-inject |
**Detection signal — one env var:**
```sh
[ "${AIGENTRY_WORKER_SESSION:-}" = "1" ] && echo worker || echo interactive
```
Set to `1` by `bin/dispatch.sh` in the generated per-session `worker-launcher.sh`, for **all** CLIs
(claude / codex / gemini), and already load-bearing as the orchestrator-vs-worker discriminator in
`bin/session-cleanup.sh`. Do not infer the branch from cwd, from the `[SAWP]` envelope, or from
`TELEPTY_SESSION_ID` — the first is empirically wrong under cwd decoupling, the second is invisibleFrom dmsdc-ai/aigentry-devkit, MIT.
More from dmsdc-ai/aigentry-devkit
- 0.561score
context-manage
dmsdc-ai
컨텍스트 윈도우 관리 스킬.
SkillAFreshness: AClaude Code +9 - 0.474score
session-create
dmsdc-ai
Create a new aigentry ecosystem project with full session bootstrapping — folder, CLAUDE.md, devkit bootstrap, terminal-agnostic session spawn…
SkillCFreshness: CClaude Code +9 - 0.474score
caveman
dmsdc-ai
Ultra-compressed reply mode.
SkillCFreshness: CClaude Code +9 - 0.474score
deliberation-gate
dmsdc-ai
Use after brainstorming produces design doc, after code-review produces feedback, when debugging hits dead end with failed hypotheses, or when user says…
SkillCFreshness: CClaude Code +9 - 0.474score
grill-with-adr
dmsdc-ai
Adversarial spec interview that grills your plan against existing domain language and decisions, capturing crystallised choices into ADRs…
SkillCFreshness: CClaude Code +9 - 0.471score
sawe
dmsdc-ai
세션 자율 워크플로우 엔진.
SkillCFreshness: CClaude Code +9 - 0.471score
deliberation-executor
dmsdc-ai
deliberation 합의안을 실제 구현으로 전환하는 실행 전용 스킬.
SkillCFreshness: CClaude Code +9 - 0.471score
work-breakdown
dmsdc-ai
Spec이나 자연어 설명을 병렬화 가능한 태스크로 분해하고, 사용 가능한 세션에 할당하는 스킬.
SkillCFreshness: CClaude Code +9 - 0.466score
deliberation-test
dmsdc-ai
딜리버레이션 테스트를 자동으로 오케스트레이션합니다.
SkillCFreshness: CClaude Code +9 - 0.455score
diagnose
dmsdc-ai
Disciplined diagnosis loop for hard bugs and performance regressions.
SkillCFreshness: CClaude Code +9 - 0.411score
telepty-deliberate
dmsdc-ai
telepty 기반 멀티세션 토론을 자동 시작하고 운영하는 스킬.
SkillDFreshness: DClaude Code +9 - 0.408score
clipboard-image
dmsdc-ai
Capture and view clipboard image.
SkillDFreshness: DClaude Code +9
Signals
- Stars
- 0
- Forks
- 0
- Open issues
- 5
- Last commit (this folder)
- Jul 26, 2026 (3 months ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- Repository
- github.com/dmsdc-ai/aigentry-devkit
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from dmsdc-ai
- 0.561score
context-manage
dmsdc-ai
컨텍스트 윈도우 관리 스킬.
SkillAFreshness: AClaude Code +9 - 0.474score
session-create
dmsdc-ai
Create a new aigentry ecosystem project with full session bootstrapping — folder, CLAUDE.md, devkit bootstrap, terminal-agnostic session spawn…
SkillCFreshness: CClaude Code +9 - 0.474score
deliberation-gate
dmsdc-ai
Use after brainstorming produces design doc, after code-review produces feedback, when debugging hits dead end with failed hypotheses, or when user says…
SkillCFreshness: CClaude Code +9 - 0.474score
caveman
dmsdc-ai
Ultra-compressed reply mode.
SkillCFreshness: CClaude Code +9 - 0.474score
grill-with-adr
dmsdc-ai
Adversarial spec interview that grills your plan against existing domain language and decisions, capturing crystallised choices into ADRs…
SkillCFreshness: CClaude Code +9 - 0.471score
deliberation-executor
dmsdc-ai
deliberation 합의안을 실제 구현으로 전환하는 실행 전용 스킬.
SkillCFreshness: CClaude Code +9
Cite this page
ambiguity-gate skill. Agent Mart. https://agentmart.dev/skills/dmsdc-ai-ambiguity-gate (last updated 2026-10-24)