Caloron-Noether¶
Multi-Agent Orchestration via Noether Composition Graphs
Caloron-Noether is a reimplementation of the Caloron orchestration platform where all business logic is expressed as Noether composition graphs. The only native code is a ~200-line Rust HTTP server for process management.
Why This Exists¶
The original Caloron is ~9,300 lines of Rust. About 65% is business logic (event handling, DAG evaluation, supervisor decisions, retro analysis) that maps naturally to typed, content-addressed, effect-tracked pipelines — which is exactly what Noether provides.
Original Caloron → Caloron-Noether
───────────────── ─────────────────
9,300 lines Rust ~1,200 lines (Python + Rust shell)
Hand-written event loop noether-scheduler (cron)
In-memory DaemonState Noether KV store (SQLite)
Custom type system Noether structural typing
Manual caching Pure-stage output cache
How It Works¶
graph TB
SCH[noether-scheduler] -->|every 60s| TICK[sprint_tick.json]
TICK --> POLL[github_poll_events]
TICK --> EVAL[dag_evaluate]
TICK --> HEALTH[check_agent_health]
TICK --> ACTIONS[execute_actions]
ACTIONS -->|POST /spawn| SHELL[caloron-shell]
SHELL --> HARNESS[caloron-harness]
HARNESS -->|POST /heartbeat| SHELL
KV[(Noether KV)] -.-> TICK
TICK -.-> KV
- noether-scheduler runs
sprint_tick.jsonevery 60 seconds - The composition graph polls GitHub, evaluates the DAG, checks health, and dispatches actions
- caloron-shell manages agent processes (spawn/kill) and receives heartbeats
- All state lives in the Noether KV store — no in-memory state to lose
Quick Start¶
# 1. Build Noether CLI
cd ../noether # https://github.com/alpibrusl/noether && cargo build -p noether-cli
export PATH="$PWD/target/debug:$PATH"
# 2. Register custom stages
./register_stages.sh
# 3. Build the shell
cargo build -p caloron-shell
# 4. Start the shell
./target/debug/caloron-shell &
# 5. Run a sprint tick manually
noether run compositions/sprint_tick.json \
--input '{"sprint_id": "test", "repo": "owner/repo", "stall_threshold_m": 20}'
# 6. Or start the scheduler for continuous operation
noether-scheduler --config scheduler.json
Stage Overview¶
| Category | Stages | Effects | Lines |
|---|---|---|---|
| DAG | evaluate, is_complete, validate | Pure | ~240 |
| GitHub | poll_events, create_issue, post_comment, add_label, merge_pr | Network | ~250 |
| Supervisor | check_health, decide_intervention, compose_message | Pure | ~140 |
| Retro | collect_feedback, compute_kpis, write_report | Pure/Network | ~170 |
| Kickoff | fetch_repo_context, generate_dag | Network/LLM | ~100 |
| Total | 16 stages | ~900 |
All stages start as Python. When schemas stabilize, they can be promoted to Rust via InlineRegistry — zero graph changes needed.