Skip to content
Back to skills

Plan

ASecurity

Use when the user asks to plan or break work into tasks ("plan this", "create the tasks for this", "turn it into cards", "build the plan for X"), and in --problem mode when a human OR an agent in the middle of another task needs to record a bug/unexpected behaviour without stopping what it is doing. Writes task docs — What / Why / Acceptance criteria / Technical notes (task) or Symptom / Origin / How to reproduce / Expected vs. actual (problem) — ready for /dotask to execute and for an option...

  • 2 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added September 26, 2026
ai-agentsgogitapi

Works with

  • api

Security analysis

A100/100

Scanned September 26, 2026

npx -y skills add FabianoArthur/claude-code-kitchen --skill plan --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Plan?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Plan
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/fabianoarthur-plan/badge)](https://www.skillsdirectory.com/skills/fabianoarthur-plan)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: plan
description: Use when the user asks to plan or break work into tasks ("plan this", "create the tasks for this", "turn it into cards", "build the plan for X"), and in --problem mode when a human OR an agent in the middle of another task needs to record a bug/unexpected behaviour without stopping what it is doing. Writes task docs — What / Why / Acceptance criteria / Technical notes (task) or Symptom / Origin / How to reproduce / Expected vs. actual (problem) — ready for /dotask to execute and for an optional tracker sync.
---

# /plan — brainstorm → task docs

```
/plan <description of what to build/change>   split into tasks and write the docs
/plan --problem <report of the finding>        record a problem WITHOUT stopping whoever found it
/plan --revise <slug>                          refine an existing task
```

**Read `../orchestrate/CORE.md` §1** — the adapter (`.claude/orchestrator.md`, found walking
up from cwd) provides `vault.cards`, `backlog.*`, the size scale and `layers`. No adapter →
CORE §9 bootstrap; **do not invent a docs path**.

Companions: `/dotask` runs one task created here; `/orchestrate` sequences several. This
skill only PLANS and WRITES.

## Step 1 — Real context before any task

- Understand the request against the code as it IS: a code-graph query (if you have one) +
  reading the entry point. A task planned only from the request's text is born wrong —
  text describes intent, not what exists.
- **Reality filter (CORE §1.4):** was the request (or part of it) already done?
  `git log <base> --grep`, the named artifact in the code. Already there → report it with
  the evidence (sha, file:line) and do NOT create the task.
- Ambiguity that reading the code does not resolve → **ask before splitting** (one question
  at a time). Preference and validating the obvious do not count (CORE §10).

## Step 2 — Split

- Smallest sensible deliverables; **each task = one PR** that stands on its own.
- Per task: short title, repo/layer (adapter vocabulary), `size` on the adapter's scale
  (default `XS|S|M|L|XL`), **`priority` (urgent|high|normal|low — required)**, `depends_on`
  (slugs/ids that must close first).
- Two tasks crossing the same files → note the collision in both tasks' Technical notes
  (`/orchestrate` uses it to keep them out of the same batch).

## Step 3 — Confirm BEFORE writing

Show the table (title · size · priority · repo · depends_on · one-line scope) and **STOP —
the human confirms, edits or cuts.** It is this skill's only human gate.
Exception: `--problem` mode does not pause — a record is not a decision; write and report.

## Step 4 — Write the docs

One file per task: `<vault.cards>/<kebab-slug>.md`. The slug is the **local id** — it is
what `/dotask` receives. Task template (also in `examples/task.md`):

```markdown
---
card_id:
title: "<slug> — <short title>"
status: backlog
priority: <urgent|high|normal|low>
size: <XS|S|M|L|XL>
difficulty: <low|medium|high>
model_exec: <alias for --model at dispatch — guide below>
model_review: <alias for the independent pre-PR reviewer — guide below>
repos: <repo(s), comma separated>
branch:
depends_on:
epic:
updated: <YYYY-MM-DD>
type: task
origin: plan
---

# <short title>

## What
<the deliverable in 1–3 sentences — what changes in the system when this closes>

## Why
<motivation tied to a fact: the task/PR/incident it came from, the risk it covers>

## Acceptance criteria
- [ ] <verifiable, with HOW to verify (command, screen, API call …)>
- [ ] <…>

## Technical notes
<file:line, what already exists, constraints, reference PR/commit, collisions>

## Current state
<one self-contained line — a tracker sync can use it as the card description>

## Links
- <repo / integration / related tasks / permanent notes>

## Session log
### <YYYY-MM-DD> — created by /plan
- **Changed:** task created from <request/context>.
```

Template rules:

- **An acceptance criterion is verifiable**: each one says HOW to verify it. "Works
  correctly" is not a criterion; `gh api repos/<owner>/<repo>/rules/branches/main` showing
  the check is.
- **Technical notes carry the context you already paid to gather** — file:line, what
  exists, where it came from. Whoever executes should not rediscover any of it.
- Dates: `date +%F`. Never from memory.
- `epic:` is optional — fill it when the split came from an epic (`status_push` runs once
  per epic).
- **Slug collision**: a file with that name already exists → do NOT overwrite. Same task →
  it is a `--revise` case (append, do not recreate); different task → suffix the slug; in
  doubt, resolve it at the Step 3 gate.

### Difficulty and models — who executes and who reviews

`size` measures duration; `difficulty` measures the risk of getting it wrong. A giant rename
is L/low; a concurrency fix is S/high. The pair picks the models (aliases of
`claude --model`; **the doc WINS over the adapter's `model_by_size`** at dispatch):

| difficulty | model_exec | model_review |
|---|---|---|
| low — mechanical, config, text, rename | sonnet | sonnet |
| medium — ordinary logic, known integration | sonnet | opus |
| high — concurrency, data migration, algorithm, production | opus | opus |

Deviating from the table → justify it in the Technical notes. In doubt between two levels,
pick the higher one: a stronger review is cheap next to a wrong PR.

## Step 5 — Report

Slugs created + how to continue: `/dotask <slug>` (run one) · `/orchestrate <slugs>`
(sequence several) · tracker sync (if you use one — a separate, human call).

## --revise mode — refine an existing task

Reopen `<vault.cards>/<slug>.md` and apply Steps 1–3 to it (real context again — the code
may have moved since it was created). Rules:

- Keep `card_id` — the tracker card stays the same.
- May change `size`/`difficulty`/`model_*`/`depends_on`/criteria — and goes through the
  Step 3 human gate like any plan.
- Log it in `## Session log` (`### <date> — revised by /plan --revise`, saying what changed).
- Task at `🔄`/`⏳` in some manifest → **do not revise under a running agent**: report and
  stop.

## --problem mode — record without stopping anyone

For a bug/unexpected behaviour found in the middle of other work (by you, by the human, or
by a `/dotask` kitchen session — the "detour rule" there points here). Rules:

1. **Do not fix.** Recording is not executing; fixing here is scope leak.
2. **Do not stop the caller.** Whoever was executing carries on with the original task.
3. **Real evidence**: file:line of the culprits, grep output, origin PR/epic — no "it
   seems". Without enough evidence, write what remains to be verified.
4. **Dedup**: before creating, search `<vault.cards>` for a similar symptom. Already there →
   add the new evidence to the existing doc instead of duplicating.

Problem template (same front matter as a task, with `origin: plan--problem` and
`found_during`):

```markdown
---
card_id:
title: "<slug> — <symptom in half a line>"
status: backlog
priority: <estimated from the evidence — production broken or data being corrupted → urgent/high; say you estimated>
size: <estimated — say you estimated>
difficulty: <estimated — a bug of unknown cause is never "low">
model_exec: <per the difficulty table>
model_review: <per the difficulty table>
repos: <repo where the bug lives>
branch:
depends_on:
updated: <YYYY-MM-DD>
type: task
origin: plan--problem
found_during: "<slug/id of the task running when the problem showed up>"
---

# <symptom in half a line>

## Symptom
<the wrong behaviour, from the point of view of whoever uses the system>

## Origin
<repo · origin epic/PR · file:line of the culprits — with what grep/reading proved, e.g.
"loadDraft defined in draft-storage.ts:22 but NOT called anywhere (grep: definition +
test only)">

## How to reproduce
1. <concrete step>
2. <concrete step>
3. <concrete step>

## Expected vs. actual
**Expected:** <the promised behaviour, with the reference (design/spec/card) that promises
it> / **Actual:** <what happens>. Side effect: <secondary effect, if any>.

## Current state
Problem recorded via /plan --problem during <found_during> — evidence above; no fix applied.

## Session log
### <YYYY-MM-DD> — recorded by /plan --problem
- **Changed:** record created; no fix applied (detour rule).
```

## This skill does NOT

- Execute, open a PR or create a branch — that is `/dotask` / `/execute`.
- Push to a tracker — that is a separate call.
- Create a task for something that already exists (reality filter first, always).
- Fix the problem it is recording (`--problem` mode).
- Write outside `<vault.cards>` or invent fields outside the template.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.