/logic-plan
writes a workspace plan
It does not write TypeScript.
Problem
The first message names the situation. It does not name a job or a type. An empty first message is success.
Open
<open> holds unknowns you have not bound. It does not hold answers.
Grounding
<ground> holds paths only. Put the story in <problem> or <open>. At most five files.
Priming
A *-requirments.md or *-discovery.md file stops the skill from re-deriving settled facts. That filename is the skill spelling.
Multiple labels
Stack tags when the situation, the unknowns, and the paths are all known.
Skill path
If the slash name does not start the skill, put the skill file on line 1.
Examples
Thought1s
The user sent a situation. No job. No type.
Do local intake. Do not call MCP. Do not write a plan file.
Worked for 4s
Intake. <problem> filled. <open> empty. Seen none.
Wanted outcome. No named producer. Live: spawn, handoff-discovery. Recommend spawn.
Ask what job this run is.
Thought1s
Job is spawn. Type is feature. MCP is now legal.
Map documents and hooks. Write order. Do not write TypeScript.
Worked for 1m 12s
Wrote tasks/bin-freeze-plan.md. Type feature. Status Draft.
Every required identity is VERIFIED or asked. No TypeScript.
Freeze a warehouse bin
tasks/bin-freeze-plan.md — type feature. Status Draft. Source: MCP `flow_documents`, `hook_graph`.
Do not write TypeScript. Ground names in MCP spelling. Do not invent paths.
Gradual order. Skip a missing step. Never reorder.
new documents → document deletes → document updates → new hooks → hook updates → hook deletes → conflict / overlap resolution
A later step before an earlier required step is a BLOCKER.
| Artifact | Path |
|---|---|
| Freeze flag | UNKNOWN. Ask. Do not invent. |
| Allocate block | UNKNOWN. Ask. Do not invent. |
| Level | Technical meaning |
|---|---|
| 🟢 | Local. No upstream callers. No cross-domain write. |
| 🟡 | Shared calculate/validator, dependents, or replay-sensitive. |
| 🔴 | Cross-domain, lifecycle/status, inventory or accounting posting, unbounded scan, or unresolved graph edge |
Business impact is a decision. Ask. Do not invent it.
Pick a job
The first message does not name a job. The skill asks. Skip does not bind a job.
The question box shows only live jobs.
What job is this run?
| You want | Pick |
|---|---|
| New documents or hooks | spawn |
| A change to this situation | patch |
| A wide change | impact |
| Remove or unwire | retire |
| Read-back only | explain |
| Facts first | handoff-discovery |
| One hook | handoff-hook-plan |
| Audit a plan that exists | handoff-critic |
If the job you want is missing, change <problem> or <open> and send again.
patch is hidden when the text names a batch, an import, a volume, or a flooded callee.
retire is hidden when the text does not unwire, remove, or stop a named hook or document.
explain is live only for a read with no change to build.
If <problem>, <open>, and <ground> are empty, live jobs are spawn and handoff-discovery.
A workspace *-plan.md or a <plan> block can add handoff-critic.
explain and every handoff-* write no plan file.
Confirm the type
Do not put <type> in the first message. The skill asks once.
Name type
| Type | Must include | Must not |
|---|---|---|
bug | Symptom. Expected vs actual. Technical blast radius | Root cause as fact |
feature | Document and hook tables. Phased separation of concerns | Implementation code |
fix | Smallest converging change. Replay | Unrelated refactors |
user-request | User words quoted. Phased separation of concerns | Silent scope expansion |
research | Remaining questions. Evidence ledger | Implementation phases |
Next steps
When a plan file exists and the type is not research, run /logic-plan-critic.