pastor
An agent orchestrator for a flock of machines.
Queue tasks, schedule jobs, and let pastor spread coding agents (Claude Code, Codex, opencode) across your flock over ssh.
- queue tasks wait their turn, by priority
- jobs cron or a board turns into tasks
- flocks any box you can ssh to runs agents
Every agent is a real terminal you can attach to. You check back later: done, stuck, or waiting on you.
install
$ curl -fsSL https://cacari.co/pastor/install.sh | shOne binary in ~/.local/bin. Each machine needs herdr 0.9+, and the head needs ssh to the others. more
live · a scripted session
# by hand $ pastor flock list NAME DEFAULT MACHINES AGENTS QUEUED default yes desk 1/2, server-1 2/3 3 0 sandbox no sandbox-1 0/1 0 0 $ pastor task run "Fix the flaky login test" --repo '~/src/app' --worktree --profile develop ID STATE PRIORITY MACHINE FLOCK AGENT MODEL JOB AGE NOTE t-12 queued normal - default claude sonnet run 0s Fix the flaky login test $ pastor task run "Triage the new issues" --repo '~/src/tracker' --flock sandbox --priority high ID STATE PRIORITY MACHINE FLOCK AGENT MODEL JOB AGE NOTE t-13 queued high - sandbox claude-sandbox - run 0s Triage the new issues $ pastor job run morning started job morning $ pastor queue POS TASK LEVEL WHERE FROM WAITED WHY NOT YET 1 t-15 normal flock default job morning 6s flock default is full 2 t-16 normal flock default job morning 6s flock default is full $ pastor task list ID STATE PRIORITY MACHINE FLOCK AGENT MODEL JOB AGE NOTE t-12 running normal server-1 default claude sonnet run 1m Fix the flaky login test t-13 blocked high sandbox-1 sandbox claude-sandbox - run 1m agent asked: 2 issues look like spam, skip them? t-14 running normal desk default claude - morning 40s Update the dependencies t-15 queued normal - default claude - morning 40s Run the test suite t-16 queued normal - default claude - morning 40s Sort the inbox notes # Running commands by hand is cool, but pastor is even more powerful in the hands of agents. > keep the PRs on app moving, and tell me if anything is stuck ● I'll start with anything that is waiting on an answer. ● Bash(pastor task list --blocked --json | jq -c '.[] | {id, state, error}') ⎿ {"id":13,"state":"blocked","error":"agent asked: 2 issues look like spam, skip them?"} ● Bash(pastor task read t-13 --lines 3) ⎿ Read 6 new issues: 4 bugs with steps to reproduce, summarised above. 2 look like spam (a link and no details). Skip them? ● t-13 is triaging issues in the sandbox. Skipping spam is safe, so I'll answer it. ● Bash(pastor task send t-13 "yes, skip them") ⎿ sent text and 1 key to t-13 ● Next, the open review on #42, in a worktree of its own. ● Bash(pastor task run "Address the review on #42" --repo '~/src/app' --worktree) ⎿ ID STATE PRIORITY MACHINE FLOCK AGENT MODEL JOB AGE NOTE t-17 queued normal - default claude sonnet run 0s Address the review on #42 ● CI is red on main. That should not wait behind the rest. ● Bash(pastor task run "CI is red on main: find out why" --repo '~/src/app' --priority critical --preempt) ⎿ ID STATE PRIORITY MACHINE FLOCK AGENT MODEL JOB AGE NOTE t-18 queued critical - default claude - run 0s CI is red on main: find out why ● Where things stand: - t-13 asked about two spam issues; I told it to skip them. - The review on #42 is being addressed in t-17. - t-18 is looking at the red CI; it jumped the queue and paused a low task. Nothing needs you yet.
what you can do
- run agents on another machine: add a box over ssh, and it shares the load.
- fix a PR with one command: an agent in its own worktree, on the model you name.
- put urgent work first: priorities, a queue you can reorder, low work paused for urgent.
- run a job every morning: a schedule that turns into tasks on its own.
- hand board cards to agents: tag a card, and it becomes a branch.
- keep untrusted work in a sandbox: outside PRs and issues run on a machine with nothing to steal.
why it exists
I built pastor to learn how AI agents, their harnesses and AI governance work in practice, and to hand my own daily tasks and processes to agents.
It is shaped by that use first. why I built it
what it is not
- a platform. Built for my own workflow first. Ideas are welcome when they fit.
- a cloud service. Everything runs on your machines, over ssh.
- a chat app. Every agent is a real terminal you can attach to.
- stable. It is young. Compatibility is best effort.