ワンクリックで
speckit-plan
Execute the implementation planning workflow using the plan template to generate design artifacts.
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
Execute the implementation planning workflow using the plan template to generate design artifacts.
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
SOC 職業分類に基づく
Consumer-facing guide to hosting an interactive FS.Skia.UI app — the keyboard/pointer input surface, the preview-vs-tree render distinction, and the windowed-fullscreen blur caveat.
Build Skia-rendered FS.Skia.UI Controls, rich text, chart controls, graph controls, DataGrid, custom wrappers, and generated product examples.
Generated product guidance for Skia-rendered FS.Skia.UI Controls, rich text, chart controls, graph controls, DataGrid, and custom wrappers.
Wire a generated FS.Skia.UI product to the desktop viewer host.
Understand and work with the internal keyed VDOM diff over the lowered Control<'msg> IR (feature 067) — its key-first-then-positional matching, the NodePatch/ChildOp operation set, the totality/determinism/identity-at-rest/round-trip invariants, and the module's disposition (internal, property-tested, wired onto the live render path via RetainedRender in feature 091 and current through feature 103 — layout/bounds cache, injected-delta animation clock, visual-state cross-fade). Use when reading the diff invariants, extending the property tests, or working on the wired retained render path.
Maintainer-facing guide to the FS.Skia.UI.Controls.Elmish interactive-host seam — how runInteractiveApp drives the retained render structure each frame (RetainedRender.step over the keyed diff), advances per-identity animation clocks from an injected Tick delta, stamps runtime visual state pre-reconcile, routes keys focus-first through routeFocusedKey, and resolves pointer hits to a stable identity via retainedHitTest. Use when reading or extending the live controls host loop, the per-frame retained-state/clock/visual-state wiring, or the key/pointer routing seam.
| name | speckit-plan |
| description | Execute the implementation planning workflow using the plan template to generate design artifacts. |
| compatibility | Requires spec-kit project structure with .specify/ directory |
| metadata | {"author":"github-spec-kit","source":"templates/commands/plan.md"} |
$ARGUMENTS
You MUST consider the user input before proceeding (if not empty).
Check for extension hooks (before planning):
.specify/extensions.yml from the project root (if present) and collect entries under the hooks.before_plan key..specify/extensions/*/*.yml file in sorted order, parse each, and collect its hooks.before_plan entries too — so a hook registered only in a per-extension file (e.g. the feedback extension at .specify/extensions/feedback/feedback.yml) is still discovered and runs.(extension, command) (first occurrence wins, so a hook declared in both files runs once).optional: true hook that is discovered but not executed this phase, emit one line so the skip is a visible decision: Note: optional hook {extension}:{command} is registered but was not run (skipped).enabled is explicitly false. Treat hooks without an enabled field as enabled.condition expressions:
condition field, or it is null/empty, treat the hook as executablecondition, skip it and leave condition evaluation to the HookExecutor implementationoptional flag:
optional: true):
## Extension Hooks
**Optional Pre-Hook**: {extension}
Command: `/{command}`
Description: {description}
Prompt: {prompt}
To execute: `/{command}`
optional: false):
## Extension Hooks
**Automatic Pre-Hook**: {extension}
Executing: `/{command}`
EXECUTE_COMMAND: {command}
Wait for the result of the hook command before proceeding to the Outline.
.specify/extensions.yml does not exist, skip silentlySetup: Run .specify/scripts/bash/setup-plan.sh --json from repo root and parse JSON for FEATURE_SPEC, IMPL_PLAN, SPECS_DIR, BRANCH. For single quotes in args like "I'm Groot", use escape syntax: e.g 'I'''m Groot' (or double-quote if possible: "I'm Groot").
Load context: Read FEATURE_SPEC and .specify/memory/constitution.md. Load IMPL_PLAN template (already copied). When planning a generated FS Skia UI product, read docs/scaffold-map.md first (it ships into every generated project) — it is the authoritative durable-vs-replaceable map of the scaffold (which files you own and design freely vs. which are framework-owned). Read it rather than reconstructing that map by hand from the file tree, and let it inform your game-model design (e.g. record-label collisions with Scene's X/Y/Width/Height).
Execute plan workflow: Follow the structure in IMPL_PLAN template to:
Stop and report: Command ends after Phase 2 planning. Report branch, IMPL_PLAN path, and generated artifacts.
Check for extension hooks: After reporting, discover hooks across all extension files (multi-file discovery), not just the central file:
.specify/extensions.yml from the project root (if present) and collect entries under the hooks.after_plan key..specify/extensions/*/*.yml file in sorted order, parse each, and collect its hooks.after_plan entries too — so a hook registered only in a per-extension file (e.g. the feedback extension at .specify/extensions/feedback/feedback.yml) is still discovered and runs on phase completion.(extension, command) (first occurrence wins, so a hook declared in both files runs once).settings.auto_execute_hooks: true in .specify/extensions.yml, a mandatory hook (optional: false) auto-runs with no confirmation; an optional hook (optional: true) is always surfaced ("To execute: /{command}") and is never force-run by auto_execute_hooks; a hook with a non-empty condition is never evaluated by this skill — evaluation is left to the executor and the notice reports the resolved decision. When auto_execute_hooks: false, even mandatory hooks are surfaced for confirmation.(extension, command), emit one consolidated notice for the phase so the operator never hand-reconciles files — the promoted feedback hook (optional: false) appears as auto-run, never as a surfaced optional:
## Effective hooks for plan
- {extension}:{command} — auto-run (mandatory; auto_execute_hooks=true)
- {extension}:{command} — surfaced (optional)
- {extension}:{command} — skipped (enabled: false)
- {extension}:{command} — condition-deferred
optional: true hook that is discovered but not executed this phase, emit one line so the skip is a visible decision: Note: optional hook {extension}:{command} is registered but was not run (skipped).enabled is explicitly false. Treat hooks without an enabled field as enabled.condition expressions:
condition field, or it is null/empty, treat the hook as executablecondition, skip it and leave condition evaluation to the HookExecutor implementationoptional flag:
optional: true):
## Extension Hooks
**Optional Hook**: {extension}
Command: `/{command}`
Description: {description}
Prompt: {prompt}
To execute: `/{command}`
optional: false):
## Extension Hooks
**Automatic Hook**: {extension}
Executing: `/{command}`
EXECUTE_COMMAND: {command}
.specify/extensions.yml does not exist, skip silentlyExtract unknowns from Technical Context above:
Generate and dispatch research agents:
For each unknown in Technical Context:
Task: "Research {unknown} for {feature context}"
For each technology choice:
Task: "Find best practices for {tech} in {domain}"
Consolidate findings in research.md using format:
Output: research.md with all NEEDS CLARIFICATION resolved
Prerequisites: research.md complete
Extract entities from feature spec → data-model.md:
Define interface contracts (if project has external interfaces) → /contracts/:
Agent context update:
<!-- SPECKIT START --> and <!-- SPECKIT END --> markers in AGENTS.md to point to the plan file created in step 1 (the IMPL_PLAN path)Output: data-model.md, /contracts/*, quickstart.md, updated agent context file
GeneratedGuidanceCheck gate fails the build if any required Repository Governance Decisions area is empty, still boilerplate, or carries a NEEDS CLARIFICATION/TODO placeholder (N/A-with-rationale counts as filled)