| name | Phase Prompting |
| description | Turn verified project state into execution-ready phase prompts with wave structure, hard rules, acceptance criteria, and delivery reports. For writing prompts that drive real implementation progress, not design docs. |
| when_to_use | when writing execution prompts, round plans, phase delivery packets, or multi-wave coordination plans for any project. Especially when the prompt will be handed to another session or executor. |
| version | 1.1.0 |
| languages | all |
Phase Prompting
Overview
This skill turns current verified project state into execution-ready prompts. The output is a prompt that another session (or the same session later) can pick up and execute with zero additional context.
Announce at start: "I'm using the Phase Prompting skill to write the execution prompt."
Core principle: Write from current truth, not from summaries. If code and docs disagree, trust code.
When to use
- Writing a phase/round/task prompt for implementation work
- Creating a multi-wave execution packet
- Writing a follow-on phase after reviewing delivery summaries
- Any time a prompt will be handed to an executor who has zero conversation context
First principles
These are non-negotiable:
running code > design document
verified state > claimed support
one executable round > one giant roadmap
honest blocked state > fake green
concrete file paths > vague references
Prompt archiving is mandatory and project-scoped
When you produce a complete execution-ready prompt, do not leave it only in chat.
- Save the final prompt into the project repo unless the user explicitly says not to.
- Archive prompts under a project-specific directory, not a shared flat folder.
- Archive root convention:
<project-repo>/prompts/ or
<project-repo>/docs/execution-prompts/
- If the directory does not exist, create it.
- If you are writing prompts for a project not listed above, create and use an appropriate directory within that project's repo.
- Use deterministic filenames:
task-19-round-2-verify-and-commit.md
phase-8-upstream-full-capability.md
phase-40-round-7.md
phase-40-round-7a.md (branch variant)
phase-40-round-7-revision.md (revision of existing)
- Archive the final prompt only, not chain-of-thought or scratch analysis.
- If you materially revise an already-archived prompt in the same turn, update the file instead of creating near-duplicates unless the user clearly wants a separate branch prompt.
- In your final answer, include the saved file path.
Before writing: gather truth
Always do this before drafting:
- Read the project's source-of-truth docs (AGENTS.md, README, architecture docs)
- Read the actual implementation files relevant to the task
- Check git log for recent changes in the area
- If delivery summaries exist, verify claims against code
If summaries and code disagree, trust code, tests, and live behavior.
Prompt structure
Follow this skeleton. Every section is mandatory unless marked optional.
# Phase XX Round Y: [One-line delivery goal]
## Identity
You are [role]. Your task is not [anti-goal] but [real goal].
## First principles
- [3-5 hard rules as inequalities: X > Y]
## Current verified state
### What already works
- [Only list verified facts, with evidence]
### Key gaps
- [What actually blocks delivery]
## This round's goal
[One sentence. One dominant delivery objective.]
## Must-read files
1. [Absolute path]
2. [Absolute path]
3. [Absolute path]
Read these first. Output a <10 line execution plan before touching code.
## Hard rules
- Do not [specific anti-pattern]
- Do not [specific anti-pattern]
- [Runtime/safety constraints if applicable]
## Wave plan
| Wave | Goal | Time |
|------|------|------|
| 0 | Baseline freeze | 10m |
| 1 | [First real action] | 30m |
| 2 | [Second real action] | 30m |
| 3 | [Surface/gate/test sync] | 20m |
| 4 | [Verification and closeout] | 15m |
## Wave 0: [Title]
Goal: [One line]
Tasks:
- [Concrete task with file path]
- [Concrete task with file path]
Acceptance:
- [Observable, verifiable result]
## Wave 1: [Title]
[Same structure]
## Wave N: [Title]
[Same structure]
## Required tests
- [Exact command to run]
- [Exact command to run]
## Out of scope
- [Explicit exclusion]
- [Explicit exclusion]
## After each wave, answer these 4 questions
1. What real capability did the user gain?
2. What false claim was removed or corrected?
3. What formal gate or verification was added?
4. What still blocks delivery?
## Final delivery report format
### Modified files
- [list]
### Wave-by-wave outcomes
- Wave 0: [one line]
- Wave 1: [one line]
### New user-visible capabilities
- [list]
### Tests run
- [command + result]
### Build/check run
- [command + result]
### Release-readiness delta
- [one line]
### Remaining blockers
- [list]
### Why this round advances delivery
- [one line]
## Commit message
[Project] vX.Y.Z -- Phase XX round Y [short summary]
Writing rules
Round sizing
One round should be:
- 2-3 hours of execution time
- 3-7 waves
- One dominant delivery goal
- Branch conditions when outcome is uncertain
If the next step depends on whether A passes or fails, write Round 2A and Round 2B, not one oversized prompt.
Wave quality
Good waves:
- Fix a real broken path
- Replace an overclaim with verified truth
- Turn a doc concept into a real gate
- Sync API, UI, protocol, and tests across layers
Weak waves (avoid these):
- "review some files"
- "polish docs"
- "clean up naming"
- "do more validation" with no delivery objective
Every round must create real user value
Do not write rounds that mostly rename things, restate earlier work, add surface labels without runtime truth, or repeat already-proven chains.
Force multi-layer progress
Unless scope is explicitly narrowed, each round should advance:
- Backend/core behavior
- At least one user-facing surface
- Tests
- Docs or protocol or verification assets
Capability honesty
Always distinguish and label:
supported -- verified working
partial -- works with caveats
best_effort -- may work, not guaranteed
blocked -- known broken, with reason
unsupported -- not applicable
Never let a prompt reward inflated claims.
Branching rules
When the round depends on a high-risk result:
If [condition A succeeds]:
-> proceed to Wave 3A: [productize it]
If [condition A fails]:
-> fall back to Wave 3B: [alternative path]
If [prerequisite missing]:
-> mark blocked, close honesty gap first
Do not make later waves depend on a success path that may never happen.
Constraint writing
Write constraints as hard negations, not suggestions:
- "Do not expand scope beyond [X]"
- "Do not write inferred as verified"
- "Do not add design docs"
- "Do not modify [specific file] unless [specific condition]"
File references
Always use repo-relative paths. Never write "the config file" when you can write src/config.ts. Repo-relative paths read the same regardless of where the repo lives on disk.
Anti-repeat rule
If the prior round overclaimed or repeated earlier work, write the anti-repeat rule directly into the prompt:
- "Wave 1 of Phase 5 already verified X. Do not re-verify."
- "The following paths are already proven: [list]. Skip them."
Heuristics
- If the prior round overclaimed, make honesty closure the first job
- If the problem is strategic, write a sharper round, not a larger round
- If a round risks repeating earlier work, write the anti-repeat rule into the prompt
- Prefer "blocked with reason" over vague "flaky" language
- Use exact file paths, explicit acceptance criteria, concrete dates
- One round that closes one real gap beats three rounds that touch everything lightly
Output
When using this skill, produce one of:
- A complete execution-ready prompt (most common)
- A split plan: roadmap + Round 1 prompt + branch prompts
- A revision of an earlier phase prompt that tightens truth, scope, and gates
The output should be ready to hand to an executor with zero additional conversation context, and by default should be archived under the correct project directory.