Skip to content
Agentmart
Submit a tool

plan-parts

Plan work as parts that are each one pull request, and write each part's spec so that the builder-critic loop can build it and judge it: the parts table, the…

Skill by michakraus

IndexedMIT★ 2
Write a review

Install

Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.

npx agentmarket install skill/michakraus-plan-parts

Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.

Get the weekly diff

The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.

We use your email only for this newsletter. Privacy

About

Plan work as parts that are each one pull request, and write each part's spec so that the builder-critic loop can build it and judge it: the parts table, the collision map, a tier per part, and each part's Done when, edge-case decisions, named mutants and files, plus the plan's own §V and §L rules. Use when the user wants a task planned or broken into pull requests, wants to know what can run in parallel, asks which parts need a decision first, or wants a part's done-condition sharpened for a critic. Two entry paths — before a plan exists, to shape it; and on a finished plan, to add the table and the specs. Use the build-part skill to run the loop, julia-branch-verifier to check a part's branch, and the julia-pr-shepherd agent to take its pull request to green.

Use cases: writing, productivity, agent-building

No reviews yet. Installed it? Reviews come from verified installers only. How reviews work

Permissions

What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.

Tools
No tools found
Secrets
None asked for
Install scripts
None found

Network hosts it talks to 1

  • codeload.github.com · found in install command

Files it touches

  • ~/.claude/skills/plan-parts

What's inside

Skill name
plan-parts
Description
Plan work as parts that are each one pull request, and write each part's spec so that the builder-critic loop can build it and judge it: the parts table, the collision map, a tier per part, and each part's Done when, edge-case decisions, named mutants and files, plus the plan's own §V and §L rules. Use when the user wants a task planned or broken into pull requests, wants to know what can run in parallel, asks which parts need a decision first, or wants a part's done-condition sharpened for a critic. Two entry paths — before a plan exists, to shape it; and on a finished plan, to add the table and the specs. Use the build-part skill to run the loop, julia-branch-verifier to check a part's branch, and the julia-pr-shepherd agent to take its pull request to green.
License
MIT
Instructions
308 lines in SKILL.md · view on GitHub

Files (4)

  • SKILL.md
  • plan-sections.md
  • premise-check.md
  • spec-format.md

SKILL.md (first lines)

# Planning parts for the builder-critic loop

A **part** is one pull request. One branch, one worktree, one *Done when*. The parts table is the
plan's machine-readable half: a later session reads one row and builds it without reading the rest
of the file. Each part's own section is its **spec**: what the builder builds to and what the
critic judges against, blind.

Two entry paths, same output.

| path | you have | do |
|:--|:--|:--|
| **forward** | a discussion, no file yet | write the table and the specs as the plan forms, not after |
| **backward** | a finished task file | read it, add the table, the specs, §V and §L, change nothing else |

**Contents**

- [1 · A part is one pull request](#1--a-part-is-one-pull-request)
- [2 · The parts table, first section after the done-condition](#2--the-parts-table-first-section-after-the-done-condition)
- [3 · The collision map, before the split is fixed](#3--the-collision-map-before-the-split-is-fixed)
- [4 · A tier cell per part, from a stated reason](#4--a-tier-cell-per-part-from-a-stated-reason)
- [5 · What must not be split](#5--what-must-not-be-split)
- [6 · Each part's section is its spec](#6--each-parts-section-is-its-spec)
- [7 · The plan's §V and §L hold only what the plan adds](#7--the-plans-v-and-l-hold-only-what-the-plan-adds)
- [What this skill does not do](#what-this-skill-does-not-do)
- [Run this on the capable model](#run-this-on-the-capable-model)
- [Grading a table you produced](#grading-a-table-you-produced)

## 1 · A part is one pull request

One sentence describes it. A part that needs two sentences is two parts.

The test is the reviewer: **a part is right-sized when one person can review its diff in one
sitting and say yes or no.** Not "how long will this take" — a mechanical rename across forty files
is one part; two design decisions in one file are two.

**One part per finding is not a decomposition.** Group by theme — what a reviewer judges together —
not by numbered item. Findings that share a cause, a file set or a kind of fix belong in one part.

> **The check: if your part count is within two of your finding count, start again.** Twenty
> findings become about seven parts, not eighteen. Over-fragmentation is the common failure and it
> is worse than a part that is slightly too large: every extra part is another branch, another pull
> request, another review, and another row in the collision map.

**A part that changes ten or more source files (`src/`, `ext/`), or four or more kinds of work,
is two parts.** The kinds are source, tests, docs, scripts, CI and the project files; `CHANGELOG.md`
and `KNOWN_ISSUES.md` do not count. In the production loops such a part takes a median of three
critic rounds and a builder context near 480 k tokens, against one round and about 100 k for a part
of three source files or fewer. Split it where a reviewer judges apart: the interface, the
algorithm behind it, the migration of its callers. A mechanical change is exempt, as above.

**Do not split one part into steps with a critic loop each.** Each step pays a full loop, and no
critic judges the part as a whole.

**The exception is a change too wide to land green at once.** A rename or a signature change whose
blast radius reaches thousands of call sites breaks the suite the moment it starts, so no single
part can both make the change and pass CI. Sequence it as **expand → migrate → contract**:

| step | the part | state |
|:--|:--|:--|
| **expand** | add the new form beside the old one. Nothing breaks | open |
| **migrate** | move the call sites over in batches sized by repository or directory, one part each | `blocked by` the expand |
| **contract** | delete the old form once no caller remains | `blocked by` every migrate part |

Each migrate part stays green on its own, because the old form still exists. Where even a batch
cannot stay green alone, keep the sequence and give the batches a shared integration branch that a
final verify part is `blocked by`; green is promised there and nowhere earlier.

## 2 · The parts table, first section after the done-condition

```markdown
## Parts

A session given a part reads its spec bundle: the part's rows, its sections, §V, §L, and the
sections that §L names. It does not read the whole file.

| part | repository | sections | what it is | tier | state |
|:--|:--|:--|:--|:--|:--|
| **A** | `Example` | §1–§4, §V, §L | Wrong answers and unreachable API. No design decision. | build | open |
| **B** | `Example` | §5–§7, §V, §L | What `periodicity` returns. Changes the public answer. | decision | open |
| **C** | `ExampleTools` | §11, §V, §L | The accessor loops. Mechanical. | build | blocked by B |
| **D** | `Example` | spec, §V, §L | The new solver option. A spec in the spec-delta format. | build | open |
```

`state` is one of `open · in progress · waiting for the user · PR #NN in review · merged ·
declined`.

**Every `sections` cell ends in `§V, §L`.** The builder and the critic of a part read only the
spec bundle that `spec-bundle.py` writes from the task file: the sections a cell names, §V, §L,
and the sections that §L's lines **The builder also reads:** and **The critic also reads:** name.
A rule in any other section does not reach them. So a decision block of a parent part, a *Traps*
section and the plan's working rules reach a part only through its cell or through those two
lines. Name each one in a form the script resolves: a key (`§6`, `§5V.P38`), a heading in italics
(`*Traps*`), or `the preamble of §<key>`. A phrase that starts with "the part's" or "its" points
back to the cell and adds nothing. Give the builder and the critic the same sections, unless a
section is only a judging aid. The key `spec` names the part's spec in the spec-delta format
(§6).

**Write the bundle of each part before the plan is done**, and read its header:

```bash
cd ~/Research && python3 Harness/scripts/spec-bundle.py "Tasks/<file>.md" <part> --out ~/Research/.scratch/spec-bundles/<file>/<part>.md
```

Every `unresolved:` line is a defect of the plan: fix the cell or the §L line. The header's list
of sections is what the builder will read; a section the part needs and the list lacks is the
same defect.

**The table does not replace the checkboxes.** Checkboxes record findings; the table records units
of work. A file carries both.

## 3 · The collision map, before the split is fixed

List which files each part touches. Two parts that share a file **cannot be built in parallel**,
whatever they cost to run.

```markdown
### File collisions

| file | parts |

From michakraus/ResearchHarness, MIT.

More from michakraus/ResearchHarness

Signals

Stars
2
Forks
0
Open issues
0
Last commit (this folder)
Oct 23, 2026 (5 days ago)

From GitHub (fetched Oct 24, 2026).

Details

License
MIT
First seen
Oct 24, 2026
Last checked
Oct 24, 2026

More from michakraus

Cite this page

plan-parts skill. Agent Mart. https://agentmart.dev/skills/michakraus-plan-parts (last updated 2026-10-24)