One issue. One working copy.
Claims and worktrees keep concurrent runs from stepping on the same checkout. The worker gets a focused repository state, not the daemon's entire world.
Caduceus watches your repositories in two directions: it reviews new pull-request revisions in a constrained container, and turns labelled issues into bounded implementation runs and pull requests.
hermes plugins install barkley-assistant/caduceus --enable
Auto Review polls watched repositories, freezes each new head SHA, and gives the worker an OCI review workspace with a read-only root filesystem. It publishes a structured PASS or FAIL result to the pull request, then does it again when the code changes.
Auto Fix is the other half of Caduceus. A label starts a run in its own worktree; the daemon supervises the worker, then owns the predictable Git and GitHub work around the resulting branch and pull request.
Claims and worktrees keep concurrent runs from stepping on the same checkout. The worker gets a focused repository state, not the daemon's entire world.
Point the bridge at Codex, Claude Code, pi, or your own harness. Caduceus supplies the contract and supervision, not a hidden model layer.
The daemon handles timeouts, retries, commits, pushes and pull-request lifecycle. The worker reasons about the code. Those jobs stay separate on purpose.
Both modes use a narrow worker contract. Caduceus owns GitHub access, state and finalisation. The worker receives only what it needs to review a revision or work on a labelled issue.
CADUCEUS_*worker-result.json◀──────validated resultAuto Review requires OCI execution. Before a pull request reaches the worker, Caduceus checks the engine and the digest-pinned image, then starts a container with a fixed, deliberately narrow runtime posture.
The review worker cannot write outside the declared workspace and output surfaces. A modified review checkout is treated as a violation, not a successful review.
With the default network: none policy, review containers have no network. They never receive a runtime socket, host namespaces, devices, or the daemon's GitHub credentials.
CPU, memory, process count, temporary storage and worker lifetime are capped. The supervisor owns cancellation and cleanup if a run goes wrong.
External-contributor pull requests are off by default. Opted-in repositories use a disposable, SHA-anchored quarantine clone before the review worktree exists.
For a repository you explicitly allow, Caduceus clones from the trusted base, fetches the contributor's SHA into a disposable quarantine, and removes it when the review is done.
auto_review:
enabled: true
fork_policy:
allow_fork_prs:
- owner/repoAuto Review refuses the trusted-host executor. Docker or Podman must be ready, and the worker image must be pinned by digest before a review is admitted.
executor_mode: oci
sandbox:
image: registry.example.com/caduceus-worker@sha256:<64-hex-digest>
network: none
auto_review:
enabled: trueAuto Review records each repository, pull request and head SHA as a separate piece of work. The same daemon also keeps transcripts, queue state and recovery data for Auto Fix. It is software you inspect with commands, not a dashboard that hides the difficult part.
$ caduceus review status owner/repo
$ caduceus review list --json
$ caduceus review show owner/repo 184
$ caduceus doctor --json
$ caduceus status --json
$ _For review, that means a clear verdict and findings on the pull request. For Auto Fix, it means an implementation run with a visible branch and lifecycle. Maintainers still decide what belongs in their repository.
I wanted coding agents reviewing pull requests and picking up issues without handing them the keys to my GitHub account or my machine. Most of the tooling I tried let the model do everything, including the parts that really shouldn't be left to something non-deterministic: pushing branches, managing state and deciding when a run has gone on long enough.
Polling, claims, worktrees, timeouts, commits and pull requests all live in Rust. The worker gets a narrow contract and a result file, and it never sees GitHub credentials.
Auto Review refuses the trusted-host executor. Docker or Podman has to be ready, the image has to be pinned by digest, and the default network policy is none.
The worker bridge can point at Codex, Claude Code, pi or anything else. I care about the boundary around the model far more than which model sits inside it.
External pull requests are off by default. When a repository allows them, the contributor SHA is fetched into a disposable quarantine clone rather than the trusted mirror.
Caduceus is open source, MIT licensed and Linux-first. It keeps PR review contained and issue implementation bounded without hiding the machinery from the operator.