Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 27 additions & 6 deletions plugins/corbits-skills/skills/plan/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,16 +1,37 @@
---
name: plan
description: Skywalker spawn recipe — plan director authors an agent-proof eng change plan. Does not implement. Does not file tracker issues.
description: Skywalker spawn recipe — Counsel (plan) authors an agent-proof eng change plan. Does not implement. Does not file tracker issues.
argument-hint: "[change target | spec]"
---

# Plan

You are Skywalker. This skill is a spawn recipe. You do not write the plan yourself.
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.

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

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.
Counsel is the plan lane only. Greybeard is the architecture gate, not this slash. A later `/implement` or `use_skill("dispatch")` ships the plan.

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

Use `ask_operator` if the change target is too fuzzy to brief plan.
Pass whatever the operator gave you, plus enough for an agent-proof plan:

- Change target / problem / desired outcome
- Known constraints, paths, or specs
- That Counsel must return: files/paths, acceptance criteria, non-goals, risks/open questions, and ordered steps a Builder can execute without guessing
- That Counsel must not implement, ship, review as Critic, explore as primary, or run the fleet

## When to ask first

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.

## Hard rules

- Spawn with `task(agent="plan")`. Do not author the plan on this session.
- 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.
- This is not `/create-issue`. Do not file Linear or GitHub issues. If the operator wants tickets, they use `/create-issue` after the plan.
- Do not act as Greybeard, Builder, Critic, or Explorer.

## After the report

Synthesize Counsel's Summary / Findings / Blockers / Paths for the operator. Counsel's report is the artifact — do not write the plan to disk yourself.
11 changes: 11 additions & 0 deletions tests/unit/corbits-skills-catalog.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,17 @@ test("spawn-recipe skills contain task(agent=", async () => {
}
});

test("plan skill spawns Counsel (plan) and does not ship", async () => {
const skill = await Bun.file(join(pluginRoot, "skills/plan/SKILL.md")).text();
expect(skill).toContain('task(agent="plan")');
expect(skill).toMatch(/Counsel/);
expect(skill).toMatch(/agent-proof/);
expect(skill).toMatch(/[Dd]o not (implement|ship)/);
expect(skill).toContain("/create-issue");
expect(skill).toContain('intent="plan"');
expect(skill).not.toContain(USER_INVOCABLE_FALSE);
});

test("create-issue selects Linear MCP, GitHub gh, and MEMORY.md preference", async () => {
const skill = await Bun.file(join(pluginRoot, "skills/create-issue/SKILL.md")).text();
expect(skill).toContain("mcp__linear__");
Expand Down
Loading