Back to projects
Active Started May 2026

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.

Rust Python SQLite tmux cmux ptyd

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:

CommandUse
enter / roomJoin the room; print current state
whoami / ack / nextIdentity, acknowledge, get the recommended next action
sayPost a claim, release, blocker, resolve, decision, handoff, or artifact
check before-writeVerify no peer holds the file you’re about to edit (warm-snapshot cache, opt-in fail-CLOSED on watchdog timeout)
run / inject / attach / capture / sessionsDrive and observe managed agent sessions
lead / backlog / mission / locate / recentLeadership, 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.