Peer nodes can run a local orchestrator registered with claude.ai/code as
[<host>] claire, installed uniformly via deploy-agent.sh (not hand-wired).
- agent.orchestrator_enable + orchestrator.mcp_url config (round-trip safe)
- bootstrap points orchestrator MCP at central endpoint when set
- peer lifespan bootstraps + heartbeats the orchestrator (NO rounds loop)
- claire agent enable-orchestrator CLI + deploy-agent.sh wiring
(manual commit via ALLOW_COMMIT=1 — autocommit LLM was timing out on claire)
Push A (single-machine):
- HLC + event-sourced SQLite (events table is source of truth, projections rebuildable)
- Pydantic v2 domain models (Project, Task, Assignment, Session, Group, Update)
- rclaude subprocess wrapper (local_sessions via _claude-projects --sessions)
- Typer CLI: init, project, task, assign, pull, status, broadcast, serve, sync
- FastAPI + Jinja2 + HTMX dashboard
- 26 unit tests passing
Push B (HTTP API + sync substrate):
- /api/v1/* JSON routes (projects, tasks, assignments, sessions, status, broadcast, sync)
- CLI refactored as thin httpx client over the API — single business-logic codepath
- web/service.py: every business op defined once; HTML routes + API routes both call into it
- sync.py: peer-to-peer sync via /api/v1/sync/events with HLC + uuid-based dedup
- 32 tests passing including two-Clare convergence test
Push C (cross-host deployment):
- apricot install via uv (Python 3.12.12)
- systemd --user unit for clare-serve on apricot
- Cross-host sync demoed plum (10.9.0.3) ↔ apricot (10.9.0.2) over wg
- .local → .lan rename for forge URLs
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>