Agent Rally Point
Repo-local coordination room for coding agents sharing one checkout — durable facts, live room state, write-boundary checks, and managed sessions. No server.
The Problem
Run two coding agents in the same repository and they collide: both edit the same file, one overwrites the other’s commit, neither knows what the other has done or decided. The usual fixes — a server, a shared chat, constant manual narration — are heavyweight for what is really a local coordination problem.
What I Built
Rally is a repo-local coordination room for agents working the same checkout. State lives in the repo (.rally/) as an append-only JSONL ledger with a derived SQLite cache — no daemon, no network. Agents post durable facts (claims, releases, blockers, decisions, handoffs), read current room state on demand, and get next-action guidance. A check before-write step enforces write boundaries so two agents do not stomp the same file.
How It Works
The primary surface is a single Rust CLI, rally. The autonomous act-on-next loop is intentionally small:
whoami → enter → ack → next → if actionable, claim/check → execute
→ verify → say artifact/handoff/resolve/release → next
Core verbs:
| Command | Use |
|---|---|
enter / room | Join the room; print current state |
whoami / ack / next | Identity, acknowledge, get the recommended next action |
say | Post a claim, release, blocker, resolve, decision, handoff, or artifact |
check before-write | Verify no peer holds the file you’re about to edit (warm-snapshot cache, opt-in fail-CLOSED on watchdog timeout) |
run / inject / attach / capture / sessions | Drive and observe managed agent sessions |
lead / backlog / mission / locate / recent | Leadership, work queue, and history surfaces |
Facts are the source of truth; room state is derived, so history stays auditable and nothing depends on a long-running process staying up. Linked git worktrees share one room through the repo’s git common dir.
Managed Sessions
Managed sessions own live delivery into terminal panes — no setup step. rally run --backend <tmux|cmux> starts the addressable workspace, and rally inject delivers work to it. The legacy herdr backend has been replaced: Rally now writes to the .rally ledger and the rally-termd daemon subscribes, inverting the previous “Rally calls the daemon” path. Rally assigns readable per-agent IDs from the active room — rally run claude becomes claude-01, a named reviewer becomes reviewer-01.
Auto-Coordination Hooks
Portable, version-controlled hooks wire SessionStart and PreToolUse for both Claude Code and Codex automatically. The installer lives in the repo, not in any developer’s global config, so a fresh clone gets the same coordination behavior on any machine. Documented at docs/AUTO-COORDINATION-HOOKS.md.
Boundaries
Network transport stays out of scope. Files, Git, rsync, shared folders, A2A, or a future service can move facts; Rally defines what the bytes mean. Durable fact store: .rally/log/<engagement>.jsonl. Derived sqlite cache: .rally/facts.db, rebuildable any time from the log. The store quarantines and rebuilds on corruption and tolerates torn ledger lines — designed for agents that crash mid-write.
Install
git clone https://github.com/tyroneross/agent-rally-point.git
cd agent-rally-point
cargo install --path crates/rally-cli
Rust 1.85+. Apache-2.0.