
curl -fsSL "https://raw.githubusercontent.com/Dicklesworthstone/remote_compilation_helper/main/install.sh?$(date +%s)" | bash -s -- --easy-mode
Installs rch + rchd, bootstraps config, and can install/start the background daemon. If remote execution cannot proceed, RCH fails open to local execution.

Transparent remote compilation for multi-agent development
Problem: Many concurrent AI agents can saturate local CPU and make your workstation unusable.
Solution: RCH runs as a Claude Code PreToolUse hook, classifies build-like commands in milliseconds, executes them on remote workers, and returns artifacts/output as if they ran locally.
Design constraint: RCH is fail-open. If remote execution is not safe/possible, commands run locally.
RCH currently recognizes and can offload:
| Ecosystem | Intercepted Commands |
|---|---|
| Rust | cargo build, cargo check, cargo clippy, cargo doc, cargo test, cargo nextest run, cargo bench, rustc |
| Bun/TypeScript | bun test, bun typecheck |
| C/C++ | gcc, g++, clang, clang++ |
| Build Systems | make, cmake --build, ninja, meson compile |
RCH explicitly does not intercept local-mutating or interactive patterns (examples):
cargo install, cargo clean, bun install, bun add, bun removebun run, bun build, bun dev, bun x / bunxAgent Shell / Claude Code
|
v
PreToolUse Hook -> rch (classifier + hook protocol)
|
v
rchd (daemon)
- worker selection
- queueing and cancellation metadata
- health, alerts, telemetry, history
- reliability subsystems (convergence, pressure, triage)
|
v
Remote workers (rch-wkr)
- execute build/test commands
- manage worker cache
- report capabilities/health/telemetry
Workspace crates:
rch/: Hook + primary CLIrchd/: Local daemon + scheduling/reliability APIsrch-wkr/: Worker execution/caching agentrch-common/: Shared protocol/types/patterns/UI foundationsrch-telemetry/: Telemetry collection/storage integrationRCH now includes a deterministic reliability stack for multi-repo and multi-worker stability:
/data/projects and /dp conventions.curl -fsSL "https://raw.githubusercontent.com/Dicklesworthstone/remote_compilation_helper/main/install.sh?$(date +%s)" | bash -s -- --easy-mode
git clone https://github.com/Dicklesworthstone/remote_compilation_helper.git
cd remote_compilation_helper
cargo build --release
cp target/release/rch ~/.local/bin/
cp target/release/rchd ~/.local/bin/
All dependencies — including the FrankenTUI (ftui-*), rich_rust, and TOON
(tru) crates — resolve from crates.io, so a clean git clone && cargo build
builds on any machine with no special directory layout or pre-cloned
dependency tree required.
rch init
rch init can guide:
rch-wkr deployment# 1) configure workers
mkdir -p ~/.config/rch
cat > ~/.config/rch/workers.toml << 'TOML'
[[workers]]
id = "css"
host = "203.0.113.20"
user = "ubuntu"
identity_file = "~/.ssh/id_rsa"
total_slots = 32
priority = 100
TOML
# 2) start daemon
rch daemon start
# 3) verify workers
rch workers probe --all
# 4) install hook
rch hook install
# 5) check posture
rch check
rch status --workers --jobs
Global flags:
-v, --verbose
-q, --quiet
-j, --json
-F, --format json|toon
--color auto|always|never
--no-color
--schema
--help-json
--robot-triage
rch daemon start|stop|restart|status|logs|reload
rch workers list|capabilities|probe|benchmark|drain|enable|disable
rch status [--workers] [--jobs]
rch check
rch queue [--watch|--follow]
rch cancel <id> | --all
rch hook install|uninstall|status|test
rch agents list|status|install-hook|uninstall-hook
rch diagnose "cargo build --release"
rch exec -- cargo build --release
rch --robot-triage --json
rch capabilities --json
rch robot-docs guide
rch config show|get|set|reset|init|validate|lint|doctor|edit|diff|export
rch doctor [--fix] [--dry-run]
rch doctor --reliability [--check-schemas] [--json]
rch self-test [--worker <id>|--all]
rch self-test status
rch self-test history --limit 10
rch update [--check|--rollback|--fleet]
rch fleet deploy|rollback|status|verify|drain|history
rch speedscore <worker>|--all [--history]
rch dashboard # alias: rch tui
rch web
rch schema export|list
rch completions generate|install|uninstall|status
For AI agents and automation, start with:
rch --robot-triage --json # quick_ref + recommended commands + health probes
rch capabilities --json # commands, aliases, env vars, exit codes, output formats
rch robot-docs guide # in-tool operating guide, no README lookup needed
rch --help-json workers/list # machine-readable help for nested command paths
--json uses the standard API envelope for command output; --format toon
emits the same data as TOON. The legacy rch --capabilities flag remains a
raw JSON shortcut for lightweight discovery.
Primary files:
~/.config/rch/config.toml~/.config/rch/workers.toml.rch/config.toml.rchignorePrecedence (highest first):
.env / .rch.env[general]
enabled = true
force_local = false
force_remote = false
socket_path = "~/.cache/rch/rch.sock"
log_level = "info"
[compilation]
confidence_threshold = 0.85
min_local_time_ms = 2000
remote_speedup_threshold = 1.2
build_slots = 4
test_slots = 8
check_slots = 2
build_timeout_sec = 300
test_timeout_sec = 1800
bun_timeout_sec = 600
external_timeout_enabled = true
[transfer]
compression_level = 3
remote_base = "/tmp/rch"
adaptive_compression = true
verify_artifacts = false
max_transfer_mb = 2048
[selection]
strategy = "balanced"
[self_healing]
hook_starts_daemon = true
daemon_installs_hooks = true
[alerts]
enabled = true
suppress_duplicates_secs = 300
Built-in worker selection defaults to balanced, which blends speed, load,
health, and cache affinity. Use priority only when you want explicit
worker-priority control, and fair_fastest when you want extra load spreading.
[[workers]]
id = "css"
host = "203.0.113.20"
user = "ubuntu"
identity_file = "~/.ssh/id_rsa"
total_slots = 32
priority = 100
tags = ["fast", "ssd"]
RCH auto-selects output mode by context:
hook: strict JSON for hook protocolmachine: explicit machine output (--json, --format)interactive: rich terminal renderingcolored: ANSI-only when forced without TTYplain: text fallbackEnvironment controls:
RCH_JSON=1, RCH_HOOK_MODE=1NO_COLOR=1, FORCE_COLOR=1, FORCE_COLOR=0RCH_OUTPUT_FORMAT=json|toon, TOON_DEFAULT_FORMATJSON responses use a stable envelope (api_version, timestamp, success, data, error).
Worker placement, strict-remote, queue, wait-timeout, visibility, and target-dir
behavior are first-class, canonical controls — not folklore. The authoritative
list is discoverable at runtime (rch capabilities --json), and the resolved
plan for any command is shown by rch diagnose <command> --json under
data.placement (and in the human Placement Controls section):
| Control | Env (aliases) | Effect |
|---|---|---|
| Requested worker | RCH_WORKER (RCH_WORKERS) |
Request specific worker(s) by id. Still passes capability/admission checks; an inadmissible requested worker is refused with a stable RCH-Innn reason code and a next action — never silently swapped. |
| Requested profile | RCH_PRESET |
Named execution profile (recorded as requested_profile). |
| Strict remote (fail-closed) | RCH_REQUIRE_REMOTE |
Refuse local fallback (proof mode). Takes precedence over RCH_FORCE_REMOTE. |
| Force remote (fail-open) | RCH_FORCE_REMOTE |
Always attempt offload (bypass local-time/speedup gating) but still fail open to local. Distinct from RCH_REQUIRE_REMOTE. |
| Queue when busy | RCH_QUEUE_WHEN_BUSY (default 1) |
Wait for a busy worker instead of falling back to local. Set 0 to disable. |
| Wait timeout | RCH_DAEMON_WAIT_RESPONSE_TIMEOUT_SECS (RCH_DAEMON_RESPONSE_TIMEOUT_SECS) |
Max seconds to wait for a queued worker. |
| Visibility | RCH_VISIBILITY=none\|summary\|verbose (RCH_QUIET, RCH_VERBOSE) |
Hook output verbosity. |
| Target dir | RCH_DISABLE_TARGET_REUSE |
Legacy unique-per-job remote target dir instead of the pooled, reuse-friendly dir. |
The resolved plan reports requested_worker, requested_profile,
effective_worker, strict_remote_policy, queue_policy, visibility_mode,
wait_timeout_ms, target_dir_policy, the requested-worker admissibility
outcome, and a diagnostics list. Any control value that cannot be applied as
written (an unrecognized value or a superseded alias) surfaces a diagnostic
rather than being silently ignored.
RCH exposes observability through daemon APIs and metrics:
Quick checks:
rch status --workers --jobs
rch speedscore --all
rch doctor --json
Workspace checks:
cargo fmt --check
cargo check --workspace --all-targets
cargo clippy --workspace --all-targets -- -D warnings
cargo test --workspace
Reliability and E2E suites are provided under:
tests/tests/e2e/rch-common/tests/ (contract/reliability/perf suites)If you are running CPU-intensive validation manually and want explicit offload:
rch exec -- cargo check --workspace --all-targets
rch exec -- cargo test --workspace
rch exec -- cargo clippy --workspace --all-targets -- -D warnings
When local fallback is not acceptable, set RCH_REQUIRE_REMOTE=1 on the
rch exec process and keep the build command as direct argv:
RCH_REQUIRE_REMOTE=1 rch exec -- cargo test --workspace
RCH_REQUIRE_REMOTE=1 rch exec -- cargo clippy --workspace --all-targets -- -D warnings
Do not batch several Cargo commands behind a shell wrapper such as
rch exec -- bash -lc "cargo test ... && cargo test ...". Shell-wrapped
commands are classified as non-compilation for hook safety. Under
RCH_REQUIRE_REMOTE=1, RCH refuses that local fallback before executing the
shell and reports RCH-E301; without the env var, ordinary non-compilation
commands may still run locally. For several focused checks, run separate direct
RCH_REQUIRE_REMOTE=1 rch exec -- cargo ... invocations.
Operational recommendations:
$ claude mcp add remote_compilation_helper \
-- python -m otcore.mcp_server <graph>