rch
Made by JeffOffloads cargo, gcc and bun builds with RCH. Use when "[RCH] local" appears, strict remote is refused, completion is unconfirmed, admission or sync fails, the hook is silent, builds slow, or recovering SSH, daemon, disk, telemetry or capacity state.
Works With
Quality and Utility come from canonical skill metadata. Community ratings appear separately as stars when subscriber reviews exist.
Subscribe to download
Public previews are available, but downloads, CLI sync, and premium content require an active subscription.
Sign In to Subscribe- Full skill content with deterministic versioning
- CLI sync + local search index
- Access to Jeffrey’s premium library
Save to your account
Saved skills live in your cloud list. Run jsm sync on each machine to pull them locally.
What's New with this Skill
3Updates, enhancements, and release notes for this skill.
Updated: rch, recover an unconfirmed job by its ID before rerunning it, and a remote exit zero is not a pass
When SSH drops after Finished or the local wrapper dies, the remote command may still be running. The skill now recovers that same job with rch jobs recover before any replay and spells out what counts as settled. A remote line with exit zero is no longer treated as qualification, exit 103 alone no longer proves nothing started, and two new playbooks cover unconfirmed completion and a healthy probe that admission still refuses.
- Playbook Q: recover an unconfirmed job with rch jobs recover on the same ID before any replay
- A remote exit zero is not qualification, and exit 103 alone does not prove nothing started
- Playbook R: refresh daemon capacity with workers capabilities --refresh, since a standalone probe does not publish it
- Daemon restarts are drained and coordinated, and slots change only from measured capacity
- Raising RCH_DAEMON_WAIT_RESPONSE_TIMEOUT_SECS never lengthened a build's queue wait: the daemon caps it at 300 s
Source-checked against rch CLI 2.1.36 (commit 3c4e10fa5aff), with notes on where the deployed 2.1.35 differs. Explanations are bound to the deployed revision, not the checkout's HEAD.
- Playbook Q, completion unconfirmed. For
RCH_SCOPED_COMPLETION_UNCONFIRMED, SSH 255 afterFinished, or a dead wrapper: keep the attempt, runrch jobsandrch jobs recover <wrapper-id>, and attach instead of replaying if it is still running. Recovery exit 0 means reconciliation worked, not that Cargo passed, and the top-level exit code can describe the wrapper's delivery instead of the compiler.
Updated: rch, re-checked line by line against rch 1.0.58
The skill was last tested against rch 1.0.18. The tool is now at 1.0.58 and has grown a cargo shim, job mode, clean-overlay builds, source receipts, a JSON result envelope, three code namespaces and worker quarantine. Every reference file was re-verified against the source tree and the live binary. Two of the diagnostic scripts and most of the jq recipes had been wrong for months without anyone noticing, because they failed quietly.
- New SHIM.md: the managed cargo shim, rustup toolchain wrapping, the local-builds alarm, and the only recipe that builds locally on purpose (config for the hook, RCH_CARGO_WRAPPER_BYPASS=1 for the shim; an inline RCH_ENABLED=0 is rewritten like any other build).
- New EXEC_MODES.md: strict remote and exit 103, job mode with --result-dir, clean overlays, source-content receipts, the exec result envelope, and source-authority locks.
- rch daemon restart -y interrupts active builds; it never drained. Check rch queue first. The daemon may answer shutdown_blocked and the CLI does not say so.
- The queued-wait default is 330 s. Setting RCH_DAEMON_WAIT_RESPONSE_TIMEOUT_SECS=120, which the old text recommended, made agents fall back to local sooner.
- workers probe is .data.results[] plus .data.summary. Both diagnostic scripts had been reading a flat array and reporting a dead fleet.
- Hook facts verified live: sh -c and bash -c wrappers are unwrapped and offloaded, bash -lc is not; only the last && segment is offloaded; pipes only to tee, grep, head, tail, wc and the other benign pagers; cargo build & is offloaded.
- Every main-only feature (the ownership doctor scope, toolchain-wrapper status fields, the worker PATH fallback) is marked, so a 1.0.58 binary is never asked for a flag it lacks.
- Scripts branch on error_code, use 0x1F delimiters, resolve the worker's ssh user from workers.toml, and run on stock macOS with no GNU timeout, stat -c or date -Is.
- Nine upstream issues filed (#50 to #58): no drain option, compound && offloading only the last segment, force_local ignored by rch exec, silent Go/Nix passthrough, phantom env vars, and more.
Two references are new. SHIM.md covers the managed cargo shim that gives Codex, scripts and CI the same offload the Claude Code hook gives Claude: what rch shim install writes, why it is fail-closed by default, how it wraps rustup toolchain binaries so absolute-path cargo calls stop compiling locally, and what to do when rch shim status reports local rustc processes. It also settles a question that cost real time: an inline RCH_ENABLED=0 in front of a command does nothing, because the hook rewrites the command text and never reads it. The config file stops the hook; RCH_CARGO_WRAPPER_BYPASS=1
rch v3: anti-asking ruleset, 12 recovery playbooks, fail-open taxonomy, and SSH/disk/telemetry self-heal paths
Every [RCH] local (<reason>) fail-open now maps to a named self-fix. Twelve lettered playbooks route symptoms to recoveries meant to take 90 seconds or less. Disk pressure (RCH-E210/211/215/216) hands off to the sbh skill; corrupt telemetry dbs move aside; missing SSH keys are recovered from a sibling host. Six operator scripts: auto_recover, worker_disk_triage, protocol_test, multi_agent_safety, mine_rch_history, diagnose-rch.
- Fail-open taxonomy: every [RCH] local (<reason>) maps to a verbatim self-fix in references/FAIL_OPEN.md.
- 12 lettered recovery playbooks (A–L), each routing a symptom to a fix in ≤90 seconds, with an escalation-packet template for the cases that genuinely need a human.
- RCH-Exxx error catalog with each code cross-linked to the playbook that resolves it.
- SSH key recovery: copy missing keys from a sibling host when workers.toml references identities this machine doesn't hold.
- Disk-pressure flow inspects / and /tmp separately, then hands off to the sbh skill for heavy cleanup.
- Corrupt telemetry db no longer bricks the daemon; move aside, restart, keep building.
- Path-dependency closure config ([path_topology]) plus RCH_CANONICAL_PROJECT_ROOT and RCH_ALIAS_PROJECT_ROOT env overrides for multi-repo workspaces.
- Six operator scripts: auto_recover.sh, worker_disk_triage.sh, protocol_test.sh, multi_agent_safety.sh, mine_rch_history.sh, diagnose-rch.sh.
- Anti-asking ruleset codifies nine questions agents should answer themselves: daemon restart, tmp cleanup, telemetry db, SSH key recovery, and five more.
- Machine-introspection chapter documents --json, --schema, --help-json, and --capabilities for programmatic drivers.
v3 reorganizes the skill around one rule: self-resolve before asking the human. Every diagnostic path ends in a command the agent can run alone.
What changed:
- Fail-open taxonomy:
references/FAIL_OPEN.mdmaps every[RCH] local (...)reason verbatim to a self-fix, so a local fallback is no longer ambiguous between "expected" and "broken." - Error code catalog:
references/ERROR_CODES.mdcatalogs everyRCH-Exxxcode and cross-links each row to the playbook that resolves it.