The loop
voss team run composes the team config, board, session tree, and the Reviewer-A/B pair, then drives em_loop to completion and persists a final record.
Done or Blocked, when max-iterations is reached (default 50), or when the budget is exhausted.
EM operations
The EM agent emits a plan of typed ops — it never mutates state directly:The cage
The cage is enforced by API surface, not by trusting the model. The handle the EM drives has noset_ceiling, set_budget, extend_budget, register_role, or mutate_team_config method. Violations raise EMCageViolation(op, reason):
- Dispatching or ticketing a
worker_rolenot in the roster. - Rescoping to a scope not contained in the ceiling.
- Killing or rescoping a card already in
Done.
Blocked and ends the run.
The final record
When the loop ends it persists aRunFinal record:
Kill and rescope events persist their own lineage records, so a killed or rescoped card stays inspectable. Inspect the result with
voss review, voss board, and voss session tree.