Show HN: Git worktrees and evidence gates for Codex and Claude Code Developer Alex Reysa released glueRun-go, an open-source orchestration engine that runs autonomous AI coding agents in parallel against software repositories using a three-tier scheduling model with git-worktree isolation. The tool supports Claude and Codex agents, implementing durable leases, state packets, and gate/audit pipelines to manage multi-agent coding workflows. It aims to improve developer productivity by enabling safe parallel AI-driven code generation and testing. | | | \ / | | || / - / || | ' \ / / \ \ , | |\ , \ | | \\ , | || | \ , \ / | / | / Autonomous multi-agent orchestration for software repos. One engine, many consumers. glueRun-go is a bash + Python orchestration engine that drives autonomous AI coding agents in parallel against a repository. It implements a three-tier scheduling model L0 origin loop → L1 area planners → L2 worker agents with durable leases, state packets, gate/audit pipelines, and git-worktree isolation. The engine is installed once per machine and pinned per consumer repo — improvements propagate by bumping a version pin, not by re-copying scripts. | Tier | Role | |---|---| L0 origin | The single scheduler. Runs the reconcile cycle: import → recover → integrate → dispatch → snapshot. Holds the origin lock only during control work. | L1 area planners | One planner per DAG node area . Reads the node's context, plans a batch of L2 tasks, and stages them as proposals for L0 to import. | L2 workers | Execute a single task in an isolated git worktree on a per-task branch. Produce a state packet owned files, changes, evidence . An auditor reviews the packet; the decider routes the outcome. | Each gluerun reconcile --actuate runs: Import — pull staged L1 task proposals into the DAG under the origin lock. Recover — reclaim stale leases whose workers have exited or timed out. Integrate — merge completed worker branches into the target branch under the git-op lock. Dispatch — pre-lease frontier tasks and spawn L2 workers. Snapshot — write a human-readable project state snapshot. Every in-flight task holds a lease a JSON file in .gluerun-state/leases/ that records ownership, retry count, and expiry. When a worker finishes it writes a state packet state-packet.v0.schema.json enumerating owned files, changed files, commands, tests, and evidence. The auditor validates the packet; the reaper attributes outcomes on later cycles. After each L2 worker run the host executes the configured gate command e.g. npm test . A gate result gate-result.v0.schema.json feeds the auditor model, which returns an audit verdict audit-verdict.v0.schema.json . The decider maps the failure-class, retries-left pair to a recovery action — retry, amend-scope, escalate, or park — using a deterministic fast-path table before falling back to a model round-trip. Detached dispatch is ON by default. When GLUERUN DETACHED DISPATCH=1 the default , reconcile pre-leases each frontier task and spawns the worker in its own session via dispatch-wrap.sh , then returns within seconds. The origin lock is held only for the cycle's control work. A reaper gluerun reap dispatches runs at the top of every apply/actuate cycle and attributes completions, failures, and crashes by checking dispatch records + worker exit files pid liveness defeats pid reuse; crash detection drops from the 60-min stale-lease window to ~one cycle . This is what keeps import, integrate, recover, STATUS, and STOP responsive while long workers run in the background. Set GLUERUN DETACHED DISPATCH=0 to restore the legacy synchronous batch path, where reconcile waits for every worker before returning. Prerequisites: - Bash = 4, python3 , and git . - At least one supported runner CLI on PATH claude , codex , or another configured runner . - macOS users may need brew install bash and a PATH entry that resolves bash to the Homebrew version before /bin/bash . Clone and install the engine to ~/.gluerun git clone https://github.com/alex-reysa/glueRun-go /path/to/glueRun-go cd /path/to/glueRun-go bash install.sh - ~/.gluerun/versions/