86 lines
1.9 KiB
Markdown
86 lines
1.9 KiB
Markdown
# Mosaic Matrix Orchestrator Rail
|
|
|
|
Runtime-agnostic orchestration rail for delegating work to worker agents and enforcing
|
|
mechanical quality gates.
|
|
|
|
## Purpose
|
|
|
|
- Decouple orchestration from any single agent runtime feature set
|
|
- Persist state in repo-local `.mosaic/orchestrator/` files
|
|
- Emit structured events for Matrix transport and audit trails
|
|
- Enforce rails before marking tasks complete
|
|
|
|
## Components
|
|
|
|
- `protocol/` - JSON schemas for task/event payloads
|
|
- `controller/mosaic_orchestrator.py` - deterministic controller loop
|
|
- `adapters/` - runtime adapter guidance
|
|
|
|
## Repo Contract
|
|
|
|
The controller expects this layout in each bootstrapped repo:
|
|
|
|
```text
|
|
.mosaic/orchestrator/
|
|
config.json
|
|
tasks.json
|
|
state.json
|
|
events.ndjson
|
|
logs/
|
|
results/
|
|
```
|
|
|
|
## Quick Start
|
|
|
|
From a bootstrapped repo:
|
|
|
|
```bash
|
|
~/.config/mosaic/bin/mosaic-orchestrator-matrix-cycle
|
|
~/.config/mosaic/bin/mosaic-orchestrator-run --once
|
|
~/.config/mosaic/bin/mosaic-orchestrator-drain
|
|
```
|
|
|
|
Continuous loop:
|
|
|
|
```bash
|
|
~/.config/mosaic/bin/mosaic-orchestrator-run --poll-sec 10
|
|
```
|
|
|
|
Sync from `docs/TASKS.md` to queue:
|
|
|
|
```bash
|
|
~/.config/mosaic/bin/mosaic-orchestrator-sync-tasks --apply
|
|
```
|
|
|
|
Set worker command when needed:
|
|
|
|
```bash
|
|
export MOSAIC_WORKER_EXEC="codex -p"
|
|
# or
|
|
export MOSAIC_WORKER_EXEC="opencode -p"
|
|
```
|
|
|
|
Publish new orchestrator events to Matrix:
|
|
|
|
```bash
|
|
~/.config/mosaic/bin/mosaic-orchestrator-matrix-publish
|
|
```
|
|
|
|
Consume Matrix task messages into `tasks.json`:
|
|
|
|
```bash
|
|
~/.config/mosaic/bin/mosaic-orchestrator-matrix-consume
|
|
```
|
|
|
|
## Matrix Note
|
|
|
|
This rail writes canonical events to `.mosaic/orchestrator/events.ndjson`.
|
|
The Matrix transport bridge publishes those events into the configured control room
|
|
and can consume task commands from that room.
|
|
|
|
Task injection message format (room text):
|
|
|
|
```text
|
|
!mosaic-task {"id":"TASK-123","title":"Fix bug","command":"echo run","quality_gates":["pnpm lint"]}
|
|
```
|