What
A new subcommand for people running their own Claude Code runner fleet. It polls the server for hints that more runner capacity is needed and runs ${hooks-dir}/spawn-runner once per hint, so autoscaling is handled by a script you write. --hook-concurrency defaults to 4, --hook-timeout to 60s, and --expected-spawn-seconds to 120 (sent to the server as the lease time). --min-idle requests standby capacity, --debug-dir keeps diagnostics.
Details
- Hook exit codes are a contract: 0 is success, 1 is retryable and backs off, 2 or higher is non-retryable and trips a circuit break.
- The tail of the hook's stderr is forwarded to the server as the failure reason.
- It exits non-zero if the poll endpoint returns HTTP 400, 401, 403, 404 or 426.
- It refuses to start when the hook timeout plus the 5s SIGKILL grace period exceeds
--expected-spawn-seconds. The hooks directory is required.
Evidence
/v1/code/runners/self-hosted/spawn-hints/poll
Strings lifted out of the shipped bundle, so the claim above can be checked against them.
Names in the bundleself-hosted-runner orchestrator--hook-concurrency--hook-timeout--expected-spawn-seconds--min-idle