Autonomous work orchestrator — MCP server exposing bead (work item) management, reconciliation, and dispatch tools for coordinated agent-driven development across multiple repositories
Rosary exposes 4 well-named, action-verb tools (rsry_run_once, rsry_bead_create, rsry_bead_update, rsry_bead_close) with detailed descriptions and structured JSON schemas. Tools follow verb_noun naming convention. Descriptions are substantive (100 - 400 chars), explaining WHAT the tool does, WHEN to use it, and key prerequisites. Input schemas are present with proper JSON types. However, there are notable gaps: (1) Output schemas are not documented in the provided code, we cannot verify what fields are returned or their structure; (2) Tool descriptions lack explicit error guidance or recovery patterns; (3) Some parameter relationships are complex (e.g., scope vs repo_path, or the intricate file overlap semantics) but underdocumented; (4) No tool annotations (readOnlyHint/destructiveHint/idempotentHint) present in the MCP registration, limiting LLM ability to reason about side effects. The bead creation tool has exceptionally detailed parameter descriptions that reference internal functions (has_file_overlap, ADR-0010), which is good for domain experts but potentially confusing for LLMs without those implementation details. Descriptions are LLM-optimized where present, but lack actionable error guidance (e.g., 'if bead creation fails due to missing close condition, add a test_files parameter or acceptance_criteria field').
Close a bead by ID, marking it as done. Use after your changes are committed and tests pass. Do not close if the fix is incomplete or tests are failing — comment explaining the state instead. Pass either `scope` or `repo_path`.
Create a new bead (work item) in a repo's Dolt database. Use when you've identified a discrete, actionable issue. Set file scopes accurately — they determine parallel dispatch safety via has_file_overlap(). IMPLEMENTATION beads (bug/feature/task/chore) MUST declare a close condition — a runnable test/build command in `description` (e.g. `cargo test -p <crate>`) or `test_files` — or the create fails loud (ADR-0010: a bead with no defined 'done' can never be closed by an observation). Pass either `scope: 'repo:<name>'` (canonical) or `repo_path: '/path/to/repo'` (legacy).
Update a bead's fields (PATCH semantics). Only provided fields are changed; omitted fields are left unchanged. Pass either `scope: 'repo:<name>'` (canonical) or `repo_path` (legacy).
Run a reconciliation pass. With bead_id: starts the full pipeline in the background (async — returns immediately with status 'started', use rsry_active for the merged active view, or rsry_pipeline_query/rsry_dispatch_history for per-bead details). Without bead_id: single synchronous pass across all beads. Use dry_run=true to preview without dispatching.
Output schemas not documented for any tool. LLMs cannot infer response structure or plan downstream calls.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) registered in MCP. LLMs cannot reason about side effects or retry safety.
Parameter descriptions in rsry_bead_update are generic ('New title', 'New priority'). Under 30 chars; violates baseline of 72 chars avg. No validation constraints provided.
Complex domain logic (file overlap, close conditions, ADR references) embedded in descriptions without actionable LLM guidance. Descriptions assume code context LLMs lack.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 68 | 2026-07-28+ | v2 |
No error guidance or recovery patterns documented. If bead creation fails (e.g., missing close condition), LLMs have no guidance on next steps.
Mutually exclusive parameters (scope vs repo_path) not explicitly documented as such. LLMs may pass both, causing ambiguity.