Repository navigation
issue-worker: issues become pull requests, through Agent Orchestrator on rax - #4
Merged
Merged
Conversation
…hrough Agent Orchestrator The daemon lives for one run in a rax pod. The worker only edits files: managed settings take its shell and network tools, and ao starts from an empty environment. The harness checks the diff, commits, pushes and opens the pull request. It never merges. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Both sides kept. The harness now names the worktree's git directory, as gramatico-loop does, so a .git the worker rewrites never runs as code. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
issue-workerturns one issue into one pull request per run. It's built on Agent Orchestrator (ao, Apache-2.0), running in araxpod: the daemon lives only for the run, makes the worktree, and runs Claude Code intmux.agent-readyby someone who can write to the repo. The worker reads its title and body, never its comments.agent-workingbefore work starts, so a dead run isn't paid for twice.agent-blocked, with the reason as a comment, when a person has to step in.agents/issue-<n>that closes the issue. It never merges.Why the worker has no shell
Every task pod gets the App's private key in its environment, and on
nix-osa merge is a deploy. A worker with a shell could read that key. So:rules/worker-settings.json, installed as Claude Code's managed settings, deniesBash, the web tools, sub-agents, reading/proc, and writing.claude/or.git/. The agent refuses to start if the file is missing, writable or weaker.aostarts from an empty environment holding only Claude's token..github/,.claude/,keys/,flake.lock, key files,stateVersionor credentials), and only then mints a write token, commits with repo hooks off, pushes and opens the PR.gramatico-loopdoes: the worktree's.gitfile is never read, so one the worker rewrites can't run code in a pod holding the key.The cost: AO's main feature, sending CI failures and review comments back to the worker, isn't used, because the session ends with the pod. The worker also can't run checks, so PR CI is the first real test of its work.
Verified
test/run.shpasses on Linux, with new scenarios for the happy path, an untrusted labeller, forbidden files, a blocked worker, a worker that stops without a result, a credential in the diff, a worker that can't be stopped, and missing settings.Not verified
aohas not been run. Its calls come from reading the v0.14.8 source, andtest/fake-aofakes them. Runtest/ao-smoke.shbefore merging: it runs the realaofrom the image, in pod limits, with a stand-in for Claude.Bashreally is denied.The image grows by
ao,tmux, and the managed settings, which apply to every agent. No other agent uses a denied tool.🤖 Generated with Claude Code