aio-patch-compile
aio-patch-compile — apply patches + bun build
Goal
Produce one or more patched claude binaries at dist/<arch>/claude. Inner loop after editing tools/pipeline/patches.json or any tools/pipeline/sources/*.js file.
Usage
/aio-claude-toolkit:aio-patch-compile # current host arch only (default)
/aio-claude-toolkit:aio-patch-compile --target=all # all 4 platforms
/aio-claude-toolkit:aio-patch-compile --target=darwin-arm64,linux-amd64 # csv list
STRICT=0 /aio-claude-toolkit:aio-patch-compile # ALLOW missing patches (NOT recommended)
Behavior
For each target arch in the list:
- If
dist/<arch>/cli.jsdoes NOT exist → transitively runARCH=<arch> ./tools/extract.shfirst - Run
ARCH=<arch> ./tools/build.shwhich: inlinessources/*.js, appliespatches.json(strict by default), bun-compiles →dist/<arch>/claude
Requires
- Walk-up must find a scaffolded project
bun(>= 1.3 for stable cross-compile)python3(for patch + inline scripts)tools/pipeline/patches.jsonpopulated (NOT empty) — compile fails fast on empty patches
Drift recovery
If compile reports MISSING patches (anchors not found in cli.js), Claude version likely shifted:
- Read
.aio-patch-setupto see the tested-against Claude version - Use
/aio-claude-toolkit:aio-patch-anchor find <fragment>to locate new anchor - Update
tools/pipeline/patches.jsonoldfield with new anchor text - Re-run compile
See docs/repatching-playbook.md (step-by-step re-anchoring recipe) and docs/patches.md (anchor selection strategy).
Implementation
Invokes ${CLAUDE_PLUGIN_ROOT}/skills/aio-patch-compile/scripts/compile.sh "$@".