Skip to content

Commit a24d0df

Browse files
committed
Overhaul plan skill
Rewrite /plan as a Skywalker spawn recipe for Counsel (plan director): agent-proof eng plans only, no ship, no tracker filing. Pin the contract in catalog tests.
1 parent 02a3f85 commit a24d0df

2 files changed

Lines changed: 38 additions & 6 deletions

File tree

Lines changed: 27 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,37 @@
11
---
22
name: plan
3-
description: Skywalker spawn recipe — plan director authors an agent-proof eng change plan. Does not implement. Does not file tracker issues.
3+
description: Skywalker spawn recipe — Counsel (plan) authors an agent-proof eng change plan. Does not implement. Does not file tracker issues.
4+
argument-hint: "[change target | spec]"
45
---
56

67
# Plan
78

8-
You are Skywalker. This skill is a spawn recipe. You do not write the plan yourself.
9+
You are Skywalker. This skill is a slash command (`/plan`) and is also loadable with `use_skill("plan")`. You do not write the plan yourself. Do not implement. Do not ship product code. Do not file Linear or GitHub issues.
910

10-
Spawn `task(agent="plan")` with the operator args as the brief. Prefer a typed spawn: `intent="plan"`, `success_criteria`, `do_not`, `report_focus`.
11+
Spawn `task(agent="plan")` — Counsel — with the operator args as the brief. Prefer a typed spawn: `intent="plan"`, `success_criteria`, `do_not`, `report_focus`.
1112

12-
The plan director authors files, acceptance criteria, non-goals, risks, and ordered steps. It does not ship code. Greybeard is the architecture gate, not this slash.
13+
Counsel is the plan lane only. Greybeard is the architecture gate, not this slash. A later `/implement` or `use_skill("dispatch")` ships the plan.
1314

14-
This is not `/create-issue`. Do not file Linear or GitHub issues. If the operator wants tickets, they use `/create-issue` after the plan.
15+
## Brief to Counsel
1516

16-
Use `ask_operator` if the change target is too fuzzy to brief plan.
17+
Pass whatever the operator gave you, plus enough for an agent-proof plan:
18+
19+
- Change target / problem / desired outcome
20+
- Known constraints, paths, or specs
21+
- That Counsel must return: files/paths, acceptance criteria, non-goals, risks/open questions, and ordered steps a Builder can execute without guessing
22+
- That Counsel must not implement, ship, review as Critic, explore as primary, or run the fleet
23+
24+
## When to ask first
25+
26+
Use `ask_operator` if the change target is too fuzzy to brief Counsel. Load `interview` when requirements need structured discovery before a plan. Do not invent scope.
27+
28+
## Hard rules
29+
30+
- Spawn with `task(agent="plan")`. Do not author the plan on this session.
31+
- Do not ship code under this recipe — even a "tiny" DIY of the planned change is out of lane here. This slash is plan-only.
32+
- This is not `/create-issue`. Do not file Linear or GitHub issues. If the operator wants tickets, they use `/create-issue` after the plan.
33+
- Do not act as Greybeard, Builder, Critic, or Explorer.
34+
35+
## After the report
36+
37+
Synthesize Counsel's Summary / Findings / Blockers / Paths for the operator. Counsel's report is the artifact — do not write the plan to disk yourself.

tests/unit/corbits-skills-catalog.test.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,17 @@ test("spawn-recipe skills contain task(agent=", async () => {
106106
}
107107
});
108108

109+
test("plan skill spawns Counsel (plan) and does not ship", async () => {
110+
const skill = await Bun.file(join(pluginRoot, "skills/plan/SKILL.md")).text();
111+
expect(skill).toContain('task(agent="plan")');
112+
expect(skill).toMatch(/Counsel/);
113+
expect(skill).toMatch(/agent-proof/);
114+
expect(skill).toMatch(/[Dd]o not (implement|ship)/);
115+
expect(skill).toContain("/create-issue");
116+
expect(skill).toContain("intent=\"plan\"");
117+
expect(skill).not.toContain(USER_INVOCABLE_FALSE);
118+
});
119+
109120
test("create-issue selects Linear MCP, GitHub gh, and MEMORY.md preference", async () => {
110121
const skill = await Bun.file(join(pluginRoot, "skills/create-issue/SKILL.md")).text();
111122
expect(skill).toContain("mcp__linear__");

0 commit comments

Comments
 (0)