nexu-io/patch-edit
Apply one rewrite-plan step at a time as small reviewable file edits, never rewriting whole files when a localised change suffices.
npx skills add https://github.com/nexu-io/open-design --skill patch-edit
Spec §20.3 / §21.3.2: code-migration / tune-collab cannot ship a
trustworthy diff when the agent rewrites whole files in one pass —
the reviewer can't audit the change. This atom enforces "one step
per turn, smallest possible localised edit".
plan/steps.json from rewrite-plan.iterations (the daemon's per-stage counter).code/index.json for the file's known imports + neighbours.The atom mutates files inside the project cwd via the file-edit tool.
After every iteration, it writes a per-step receipt:
project-cwd/
└── plan/
├── steps.json (status updated: 'pending' → 'completed' | 'skipped')
└── receipts/
└── step-<id>.json # { files: ['...'], diffSummary, rationale, completedAt }
The atom completes when every step in plan/steps.json is in a
terminal state (completed / skipped) OR `iterations >=
OD_MAX_DEVLOOP_ITERATIONS`. Use:
{
"id": "patch-edit-loop",
"atoms": ["patch-edit"],
"repeat": true,
"until": "plan.steps.terminal === plan.steps.total || iterations >= 8"
}
files[].shell-tier file when the step's risk is not'high' or the user hasn't confirmed.
Implemented by the daemon runner in
apps/daemon/src/plugins/atoms/patch-edit.ts. It validates step ownership and
risk, applies unified diffs with atomic writes, and records receipts and
progress.
Take nexu-io/patch-edit from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.