ultraplan-discover
Gray-area extraction stage — surfaces decisions the user must make before the plan can be authored, without expanding scope
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Gray-area extraction stage — surfaces decisions the user must make before the plan can be authored, without expanding scope
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
Handle cross-platform compatibility including file paths, environment detection, platform-specific dependencies, and testing across Windows, macOS, and Linux. Use when dealing with platform-specific code or OS compatibility.
Use when creating, modifying, debugging, or scaffolding OMP extensions, slash commands, custom tools, event hooks, TUI primitives, ExtensionAPI integrations, .omp/extensions, .omp/commands, .omp/tools, package.json omp.extensions, or OMP lifecycle handlers.
Design Director state machine for `/supi:ui-design`. Drives 9 model-owned phases from scope selection through user review, producing a validated HTML mockup artifact.
Guides the harness-engineering pipeline — turn a codebase into one that resists agentic slop with agent-neutral docs, mechanically enforced architecture, and three runtime guardrails
Structured extraction of the user's seed prompt into a typed intake artifact — first stage of the UltraPlan authoring pipeline
Per-stack research stage — produces library choices, established patterns, pitfalls, and test architecture for one applicable stack
| name | ultraplan-discover |
| description | Gray-area extraction stage — surfaces decisions the user must make before the plan can be authored, without expanding scope |
Identify the open decisions and ambiguities that block confident scenario authoring. This stage mirrors the GSD discuss phase. It runs after scout and before research. Its sole output is a set of decision records and, optionally, deferred-idea records.
| Aspect | Detail |
|---|---|
| Inputs | Intake artifact + scout artifact (provided by pipeline runner) |
| Output | One ultraplan_decision_record call per decision area; deferred ideas via the same tool with deferred: true |
| Scope | Identification only — no library selection, no scenario generation |
| Scope guardrail | You MUST NOT expand scope beyond what the intake goal states |
| Storage tools | ultraplan_decision_record — one call per area |
A decision area is any ambiguity that, if resolved differently, would materially change the plan's scenarios, slots, or test architecture. Examples:
| Category | Example Questions |
|---|---|
| Auth strategy | Session vs JWT vs OAuth provider — which applies? |
| API shape | REST vs GraphQL vs RPC — does the intake imply a choice? |
| Error semantics | Should errors surface to the UI or be swallowed silently? |
| Library choice | Is there an existing library in the scout, or is a new one needed? |
| Data ownership | Which service owns the canonical record? |
| Deployment target | Is this cloud-agnostic, or tied to a specific provider? |
| Test boundary | Should integration tests hit a real database or a test double? |
For each area you identify, assign a disposition:
deferred: true.Only OPEN areas require user input. RESOLVED areas are recorded for downstream stages to use as constraints.
You MUST NOT add new requirements, features, or capabilities not present in the intake. If a discovery area reveals an attractive extension, record it with deferred: true and move on. The goal statement in the intake is the boundary.
Anchor every decision area to a field in the intake. If an area cannot be linked to the intake goal, it is out of scope.
For each applicable stack, check whether the scout already resolved the area. Mark accordingly.
Call ultraplan_decision_record once per area:
ultraplan_decision_record({
area: string, // short label, e.g. "auth-strategy"
category: string, // one of: auth, api-shape, error-semantics,
// library-choice, data-ownership, deployment, test-boundary, other
disposition: "OPEN" | "RESOLVED-BY-SCOUT" | "RESOLVED-BY-INTAKE" | "DEFERRED",
question: string, // the specific question to answer
resolution: string | null, // null when OPEN; the answer when RESOLVED or DEFERRED
deferred: boolean, // true when disposition is DEFERRED
affectedStacks: ("frontend" | "backend" | "infrastructure")[]
})
Before finishing, confirm: do all recorded areas trace to the intake goal? If any do not, mark them DEFERRED.
| MUST DO | MUST NOT DO |
|---|---|
| Link every area to the intake goal | Introduce requirements not in the intake |
| Record RESOLVED areas even when no user input is needed | Skip an area because it seems obvious |
| Mark attractive extensions as DEFERRED | Silently fold deferred ideas into the plan |
Call ultraplan_decision_record once per area | Batch multiple areas into one call |
| Consult scout findings before marking an area OPEN | Ask the user to resolve something the scout already answered |
ultraplan_decision_record calldeferred: true