build-part
Run the next part of a decomposed task file through the builder-critic loop.
Skill by michakraus
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-build-part
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.
About
Use cases: backend, writing, productivity, agent-building
Reviews
Write a reviewNo 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/build-part
What's inside
- Skill name
build-part- Description
- Run the next part of a decomposed task file through the builder-critic loop. Triggers on: work on this task file, build the next part, take the next open part, build part D, what is next in this task file, which parts can run now, run the open parts. Dispatches julia-builder to build, and critics beside a full-suite run: in round 1 two critics judge the whole part blind, and in each verify round one critic judges only the fix. After each round a new builder on the same worktree fixes the blocking defects and the defects that the branch causes, and records the rest in KNOWN_ISSUES.md, until a critic passes the part on a green suite; then a builder opens the pull request. A question inside the loop goes to the advisor agent, not to the user. A loop that does not converge goes to the arbitrator agent: the second critic FAIL, a code change after a PASS, or a defect that turns on a rule outside the part. Use the plan-parts skill to write the table, and the julia-pr-shepherd agent to take a pull request to green.
- License
- MIT
- Instructions
- 414 lines in SKILL.md · view on GitHub
Files (3)
- SKILL.md
- edges.md
- evidence.md
SKILL.md (first lines)
# Running a part through the builder-critic loop A parts table lists the parts of a plan. This skill starts each available part in the **builder-critic loop**: a specialist builder makes the work, and a separate critic with a fresh context judges it blind against the part's benchmark. The loop repeats until a critic passes the work. **The `model: medium` of this skill does not apply**, typed as `/build-part` or invoked through the Skill tool: the turn stays on the session's model. Dispatching is table reading, and it is not worth an opus turn: run the loop in a session on sonnet. **When this session runs on another model, say so to the user in one line before the first spawn**, and go on. **Spawn `julia-test-runner` without a `model` parameter.** A `model` passed to the `Agent` tool replaces the agent's own, so a runner spawned with `model: opus` runs on Opus, not on Haiku. **Contents** - [Never read the task file](#never-read-the-task-file) - [Choose the part](#choose-the-part) - [The tier cell decides whether the loop starts now](#the-tier-cell-decides-whether-the-loop-starts-now) - [The spec gate](#the-spec-gate) - [The loop](#the-loop) - [A question inside the loop goes to the advisor](#a-question-inside-the-loop-goes-to-the-advisor) - [Hold the state cell yourself](#hold-the-state-cell-yourself) - [Several parts at once](#several-parts-at-once) - [Stop, and say why](#stop-and-say-why) - [What this skill does not do](#what-this-skill-does-not-do) ## Never read the task file Run the extractor. The largest task file is about 33 000 tokens; this output is about 200. ```bash cd ~/Research && awk -f Harness/scripts/parts-table.awk "Tasks/<file>.md" ``` ``` PART part repository sections tier state COLLISION repository file parts ``` Empty output means the file carries no parts table. Say so, and offer the `plan-parts` skill. Do not decompose it here. **Every builder and critic reads the part's spec bundle, not the task file.** Write it with `spec-bundle.py`, which copies the part's rows, its sections, §V, §L and every section that §L's *also reads* lines name into one file: ```bash cd ~/Research && python3 Harness/scripts/spec-bundle.py "Tasks/<file>.md" <part> --out ~/Research/.scratch/spec-bundles/<file>/<part>.md ``` It prints the path, the line count and the body's hash, and one `unresolved: <name>` line on stderr for each name of the cell or of §L that matches no heading and no table row; then it exits 1. **Write the bundle again before every spawn of a builder or a critic**, so that a decision written into the task file since the last spawn is in it. Pass its path on the spawn. **A part whose `sections` cell names `spec` has its spec in the spec-delta format**, at `Tasks/Evidence/<file>/<part>/spec.md`, and the bundle holds it whole. For such a part, *the part's section* in this skill is that spec's `## Decisions`, below its four sections: write every decision and the loop's record there, and commit it with the task file. The state cell stays in the task file. Its gate adds the spec's checks and CI (*The gate of a spec-delta part*, in the loop). ## Choose the part **Check every cell that names a pull request against GitHub first.** The user merges in silence, so a `PR #NN in review` cell can be stale for days, and every part `blocked by` it reads as blocked. For each such cell, run `gh pr view <NN> -R <owner>/<repo> --json state,mergedAt` as a Bash call of its own, with the repository from the part's `git remote get-url origin`. Write a merged one as `merged — PR #NN, <date>`, and a closed one as `declined — PR #NN closed`. Then a `blocked by` cell whose parts have all merged becomes `open — <part> merged`. Commit the task file before you go on. Where the user names a part, use it. Otherwise take the first part that passes all three: 1. the state is `open`; 2. no `blocked by` part of it is still unmerged; 3. its files collide with no part you are about to start, and with none that is `in progress`. `state` is one of `open · in progress · waiting for the user · PR #NN in review · merged · declined`. Anything else is prose that a person wrote — read it, and treat an unclear state as *not available*. A part `waiting for the user` is not available until the user writes its decision. ## The tier cell decides whether the loop starts now | `tier` cell | do | |:--|:--| | `build` | start the loop, once the part passes the spec gate below | | `reviewed` | not this loop: the `build-reviewed` skill builds it, with one builder and one critic | | `direct` | not a loop: the main session makes the change, or a workflow for a change across many repositories, and checks it with the commands of its *Done when*. Report the part | | `decision` | **do not start it unprompted.** Report the part: it holds a decision. Start the loop when the user names the part and says its decisions are recorded | | empty, or anything else | treat as `decision`, and name the cell so the user can fix it | **The roles have fixed tiers.** The builder is `julia-builder` at `opus-medium`; every critic is `julia-critic`, at `opus-high` in round 1 and at `opus-medium` in a verify round; the advisor is `advisor` and the arbitrator is `arbitrator`, both at `opus-high`. Their frontmatter sets the effort, except for a round-1 critic: its `Agent` call passes `effort: "high"` over the frontmatter's `medium`. Pass `model: opus` on every spawn of these four, and never spawn one of them on sonnet or haiku. **A decision part is the user's.** Name the part, its repository and its `Done when`, and say it waits for the user's decisions. Where its section holds no recommendation yet, spawn the `advisor` once with the part's open questions, and write its answer into the section as `**Recommendation (advisor, <date>):** <decision>` — the user then decides with the work done. Then carry on to the next available part. Reporting a decision part is not a reason to stop; only **substituting** one part for another in silence is. Your report names every part you started, and every part you did not, with the reason. ## The spec gate A `build` part in `Packages/` or `Experiments/` starts only when its sections hold a `**Decided at the edges**` and a `**Tests catch**`. Run the check for the part: ```bash cd ~/Research && python3 Harness/scripts/spec-gate.py "Tasks/<file>.md" <part> ``` It prints `PASS`, `EXEMPT`, `MISSING <labels>`, `INVALID <n> errors`, `UNMEASURED <devices>` or `SPANS <repositories>`, and exits 0, 0, 1, 1, 2 or 1. **`UNMEASURED` is no pass**: a premise needs a
From michakraus/ResearchHarness, MIT.
More from michakraus/ResearchHarness
- 0.598score
build-reviewed
michakraus
Build one part of a decomposed task file whose tier cell is reviewed: one part-builder, one blind part-critic, at most one fix round by a new part-builder…
SkillAFreshness: A★ 2Claude Code +9 - 0.598score
julia-package-audit
michakraus
Audit the correctness and code quality of a whole Julia package, and return one findings report in a fixed format: type piracy, type instabilities, avoidable…
SkillAFreshness: A★ 2Claude Code +9 - 0.598score
julia-performance
michakraus
Measure Julia performance so that the number means something: allocations, type stability, timings and before/after comparisons, each in a cold process with…
SkillAFreshness: A★ 2Claude Code +9 - 0.598score
julia-release
michakraus
Release and register a Julia package in the General registry.
SkillAFreshness: A★ 2Claude Code +9 - 0.598score
math-verify
michakraus
Check one mathematical statement in Julia, analytically, symbolically or numerically, together with a case that should make the check fail, and keep the check…
SkillAFreshness: A★ 2Claude Code +9 - 0.598score
plan-parts
michakraus
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…
SkillAFreshness: A★ 2Claude Code +9 - 0.598score
julia-surgical-fix
michakraus
Fix a reported problem in a Julia repository so that the diff holds that fix and nothing else, then check it again: the scope rule, the fix and re-verify…
SkillAFreshness: A★ 2Claude Code +9 - 0.598score
latex-revision
michakraus
Run a revision pass over a LaTeX manuscript with colour-marked changes.
SkillAFreshness: A★ 2Claude Code +9 - 0.594score
julia-structure
michakraus
Answer a structural question about Julia code with tools that read it as Julia, not with grep: julia-methods.jl, Kaimon's live session and julia-callers.jl…
SkillAFreshness: A★ 2Claude Code +9 - 0.565score
which-model
michakraus
Probe: report which model runs a typed slash command whose frontmatter names the tier small.
SkillAFreshness: A★ 2Claude Code +9
Signals
- Stars
- 2
- Forks
- 0
- Open issues
- 0
- Last commit (this folder)
- Oct 24, 2026 (3 days ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- Repository
- github.com/michakraus/ResearchHarness
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from michakraus
- 0.598score
build-reviewed
michakraus
Build one part of a decomposed task file whose tier cell is reviewed: one part-builder, one blind part-critic, at most one fix round by a new part-builder…
SkillAFreshness: A★ 2Claude Code +9 - 0.598score
julia-package-audit
michakraus
Audit the correctness and code quality of a whole Julia package, and return one findings report in a fixed format: type piracy, type instabilities, avoidable…
SkillAFreshness: A★ 2Claude Code +9 - 0.598score
julia-performance
michakraus
Measure Julia performance so that the number means something: allocations, type stability, timings and before/after comparisons, each in a cold process with…
SkillAFreshness: A★ 2Claude Code +9 - 0.598score
julia-release
michakraus
Release and register a Julia package in the General registry.
SkillAFreshness: A★ 2Claude Code +9 - 0.598score
math-verify
michakraus
Check one mathematical statement in Julia, analytically, symbolically or numerically, together with a case that should make the check fail, and keep the check…
SkillAFreshness: A★ 2Claude Code +9 - 0.598score
plan-parts
michakraus
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…
SkillAFreshness: A★ 2Claude Code +9
Cite this page
build-part skill. Agent Mart. https://agentmart.dev/skills/michakraus-build-part (last updated 2026-10-24)