ADR-004: Tool Surface — Phase 0 ships 14 tools (amended after R75 Wave H)
Status: Accepted, amended R75 Wave H (implementation reconciliation) Date: 2026-04-09 (R73 original), 2026-04-10 (R74.5 revision), 2026-04-18 (R75 Wave H amendment) Round: R74.5 (original) · R75 Wave H (amendment) Supersedes: None Superseded by: None
R75 Wave H amendment. The R74.5 revision locked a 19-tool Phase 0 target. Implementation through Waves A–G shipped 14 tools — 5 tools in the R74.5 table were never implemented (
task_transition,task_delete,task_depends_on,server_info,server_shutdown,audit_session_end) and 1 shipping tool was omitted from the R74.5 table (thought_record_list). The decision to mergetask_transitionbehavior intotask_updatewas made during P0.3.4 implementation —task_updateaccepts astatusfield and routes transitions through the β state machine (src/domains/tasks/state-machine.ts). See the “Phase 0 shipped surface (R75 Wave H)” section below for the locked 14-tool inventory. The earlier R74.5 19-tool table is preserved in the genealogy section as the planned target. This is an amendment, not a supersession — ADR-004 remains Accepted.
R74.5 revision. The R73 original of this ADR set the long-term target at 60–80 tools across 10 domains. R74.5 tightened Phase 0 specifically to Option C: exactly 19 tools over stdio, matching S17 §1. The full 60–80 target remains the long-term Phase 1+ ceiling; Phase 0 is the minimum-viable subset. The 14 tools that actually shipped are a strict subset of the R74.5 plan except for
thought_record_list, which was earned during P0.7.1.
Context
The AMS donor codebase (src/ before deletion in R53) exposed 484 MCP tools across 10+ domains. This number is accurate as an inventory of AMS history — it was AMS’s actual surface when running. After src/ was deleted in R53, the 484-tool claim persisted in docs/colibri-master-context.md, docs/reference/extractions/mcp-tools-complete-extraction.md, and MEMORY.md. In R73 the human asked: “там 484 тулза зачем то???” (“there are 484 tools why??”).
The honest answer: 484 is an AMS donor fact, not a Colibri target. Colibri is a clean rewrite. It needs its own target tool surface, planned from first principles.
Why 484 got so large in AMS
- Legacy accretion — AMS grew over years, each domain adding tools without retirement
- Ergonomic helpers — many tools were thin convenience wrappers around two or three underlying operations
- Per-project variants — some tools had 3–5 variants differing only in default arguments
- Debug and ops tools — many tools existed to support runtime diagnostics, monitoring, introspection
- Historical experiments — several domains had tools that were created during experiments and never removed
None of this is wrong. It’s what happens when a real system runs for years. But Colibri’s clean rewrite gets to plan the surface rather than inherit it.
Decision
Colibri Phase 0 ships 14 tools over stdio (amended R75 Wave H — was a 19-tool plan; 5 planned tools were not implemented, 1 non-planned tool was added).
The long-term Phase 1+ ceiling remains 60–80 tools across 10 domains (the original R73 target). Phase 0 is a strict, minimum-viable subset of that surface — just enough to run the β Task Pipeline, the ζ/η proof chain, ε discovery, and a health-check boundary. Everything else is deferred.
Phase 0 shipped surface (R75 Wave H locked — 14 tools)
| # | Tool | Concept | Category | Notes |
|---|---|---|---|---|
| 1 | task_create |
β | Task | Initial state INIT |
| 2 | task_list |
β | Task | Filters + pagination |
| 3 | task_get |
β | Task | Full detail |
| 4 | task_update |
β | Task | Partial mutable update; accepts status and routes through src/domains/tasks/state-machine.ts for FSM validation. No separate task_transition tool in Phase 0 — see §”task_update vs task_transition” below. |
| 5 | task_next_actions |
β | Task | Unblocked queue |
| 6 | audit_session_start |
ζ | Audit | Open proof-grade session |
| 7 | thought_record |
ζ | Audit | Hash-chained append |
| 8 | thought_record_list |
ζ | Audit | Read thought chain (earned during P0.7.1, not in original R74.5 table) |
| 9 | audit_verify_chain |
ζ | Audit | SHA-256 chain walk (shipped Wave G, P0.7.3) |
| 10 | merkle_finalize |
η | Proof | Build tree (MUST come after final reflection) |
| 11 | merkle_root |
η | Proof | Return root hash |
| 12 | skill_list |
ε | Skill | Read-only discovery of .agents/skills/ |
| 13 | server_ping |
α/γ | System | <100 ms round-trip |
| 14 | server_health |
α/γ | System | DB open, middleware registered, runtime mode |
Counts by category: 5 β Task · 4 ζ Audit · 2 η Proof · 1 ε (skill_list) · 2 System. Total = 14.
Tools from the R74.5 19-tool plan that did NOT ship in Phase 0
| Planned tool | Why not shipped | Decision |
|---|---|---|
task_transition |
Merged into task_update during P0.3.4 (state writes accepted; FSM enforced via state-machine.ts) |
Closed — behavior preserved in a simpler API |
task_delete |
Not implemented in Wave C/D/E task tool set; CANCELLED state reachable via task_update { status: "CANCELLED" } |
Deferred — revisit in Phase 1 if cascade semantics are needed |
task_depends_on |
Dependencies live in the schema (task_dependencies table), but no MCP tool surfaces them in Phase 0 | Deferred to Phase 1 |
audit_session_end |
Sessions close implicitly when merkle_finalize runs; no explicit end tool implemented |
Closed — merkle_finalize is the session-close signal |
server_info |
Not implemented. Capabilities and COLIBRI_MODE are reported by server_health |
Struck — server_info is a phantom tool; references in other docs are being removed |
server_shutdown |
Shutdown is process-level (SIGTERM/SIGINT); no MCP-exposed shutdown tool | Struck from Phase 0 — donor-era feature, revisit in Phase 1 |
task_update vs task_transition — behavioral spec (R75 Wave H amendment)
task_update accepts a status field and routes transitions through the β state machine (src/domains/tasks/state-machine.ts). A separate task_transition tool is NOT exposed in Phase 0 — the two were merged during P0.3.4 implementation. State-machine enforcement is preserved; the API surface is simpler.
Callers invoke task_update({ task_id, status: "GATHER" }) and the middleware:
- Loads the current task row.
- Calls
transition(current_status, new_status, now)fromstate-machine.ts. - Rejects illegal transitions with
ERR_INVALID_TRANSITION. - Commits the row if legal.
Direct status writes that would bypass the FSM are impossible because the state-machine call is inside the repository layer, not optional middleware.
What was dropped from the R73 target for Phase 0
| Category | Dropped tools | Where they went |
|---|---|---|
| Skills | hot-reload + registration path | Deferred to Phase 1 (skill_get, skill_invoke, skill_register, skill_unregister are not in Phase 0) |
| Router | all δ tools | Deferred to Phase 1.5 per ADR-005. Phase 0 is Claude-only. |
| Integration | all ν tools | Deferred to P0.9 target implementation — ν exists as docs/ integration bridges, not as MCP tool names |
| Integrity | μ verify/report/scan | Deferred to Phase 4 |
| Memory | all memory_* tools | Deferred entirely; reasoning state lives in the 6-tool ζ/η chain |
| Admin | backup/metrics | Merged into server_health (R75 Wave H: the R74.5 plan also merged some admin surface into server_info, which was later struck). |
| Tasks (extras) | task_add_dependency (merged into task_depends_on), task_promote (replaced by task_transition), task_assign, task_block, task_unblock, task_cancel (replaced by task_transition { to: "CANCELLED" }), task_status_transition (renamed task_transition), task_comment |
Consolidated into the 8-tool β surface |
This is less than 4% of the AMS donor surface — and it still covers every function the Phase 0 pipeline needs.
R73 original decision (preserved for genealogy)
Colibri Phase 0 targets 60–80 tools across 10 domains: System (4–6), Tasks (10–14), Skills (5–7), Thought (6–8), Merkle (5–7), Router (4–6), Integration (6–10), Integrity (3–5), Memory (4–6), Admin (3–5). Target range 50–74 tools at Phase 0 end, plus 10–20 for Phase 1–2 proof-grade extensions. Total long-term target 60–100 tools.
The R73 decision is kept as the Phase 1+ ceiling. The R74.5 revision narrows Phase 0 only to the 19-tool Option C subset above.
Consequences
Positive
- Cognitive fit. A 60-tool surface is small enough that a new executor can read the whole reference in a sitting.
- Easier testing. Fewer tools means fewer integration surfaces and fewer edge cases to cover.
- Clearer ownership. Each tool maps to exactly one domain and one concept.
- Scope discipline. If a new feature proposal requires more than two new tools, the feature probably needs its own ADR.
- Security surface shrinks. Each tool is an attack surface; fewer tools is a smaller surface.
Negative
- Migration surface is narrower. If a user of the AMS donor system relied on one of the 400+ tools we are not porting, they lose that functionality. Mitigation: AMS runtime (
data/ams.db) continues to run during Phase 0 bootstrap as the task store, so the human’s PM session workflow is preserved. - Convenience helpers removed. Some flows will take two or three tool calls where AMS had one. Mitigation: Tier-1 chains in
colibri-tier1-chainsskill provide canonical sequences. - Re-extraction effort. Some AMS tools encapsulated nontrivial logic that must now be re-planned. Mitigation: the 49 extractions in
docs/reference/extractions/preserve every algorithm as pseudocode; nothing is lost, only re-organized.
Neutral
- The “484” number is now explicitly a donor artifact and documented as such in
docs/colibri-master-context.md(deprecation header) anddocs/reference/extractions/mcp-tools-complete-extraction.md(marked as genealogy).
Implementation
Phase 0 tool reference
The authoritative Phase 0 target is docs/reference/mcp-tools-phase-0.md. That file must list every tool with:
- Name and domain
- Concept letter
- TypeScript Zod schema
- Preconditions and postconditions
- Example invocation
Any tool not in that file is not in Phase 0. If a task needs a tool not listed, the task is blocked and Sigma is notified.
Running AMS donor runtime during bootstrap
The AMS donor runtime is still available at data/ams.db and its server binary. During Phase 0 bootstrap (P0.1 – P0.2), the following AMS tools are used by PM and executors for task store and writeback:
unified_init,unified_vitals,unified_set_project,task_next_actionstask_update,task_create,thought_recordaudit_session_start,audit_verify_chain,merkle_finalize,merkle_root
These are the same names Colibri will expose, which allows a seamless switchover once P0.2 + P0.3 land. This is the one case where Colibri shares a namespace with AMS: the task store.
When does the switchover happen?
Once P0.3.4 (β Task Pipeline binding) is complete, Colibri’s own task tools are wired up. PM tests both runtimes side-by-side, then switches writeback from data/ams.db to data/colibri.db. AMS becomes read-only historical archive.
Alternatives Considered
Alternative A — Port all 484 AMS tools verbatim
Rejected. The whole point of the R53 deletion was to escape AMS’s legacy accretion. Re-porting everything throws away the clean slate.
Alternative B — Start with 20 tools and grow
Rejected as too minimal. The pipeline requires task + skill + thought + merkle + router + integration + system tools from day one. Below 50 total tools, the pipeline can’t run at all.
Alternative C — Different tool count per domain
Considered. The per-domain numbers above were chosen to match the minimum coverage the pipeline needs, not a uniform split. Some domains (Tasks, Integration) need more tools; others (Admin, Integrity) can be lean.
Alternative D — Defer the router until Phase 1.5
Accepted in a separate ADR (ADR-005). R75 Wave I update: Phase 0 shipped δ Model Router as library-only stubs (src/domains/router/scoring.ts + src/domains/router/fallback.ts — constant-returns-claude scoring + single-member fallback chain). No router_* MCP tools are registered in the 14-tool Phase 0 surface — δ is consulted internally by β’s dispatch layer. The MCP tool surface for δ lands in Phase 1.5 alongside real multi-model scoring. See ADR-005 §R75 Wave I.
Verification
This decision is verified if and only if (R75 Wave H amendment):
docs/reference/mcp-tools-phase-0.mdlists the 14 tools that actually shipped in Phase 0 (the R75 Wave H inventory in §”Phase 0 shipped surface” above). The R73 figure of “50–80 tools” refers to the long-term Phase 1+ ceiling and is not the Phase 0 verification gate. The R74.5 figure of 19 tools was the plan; 14 are what shipped.- Each listed tool maps to exactly one concept letter.
- Each listed tool has shipping
src/code (verified by live stdio boot at09d462f8— 14 tools returned). docs/reference/extractions/mcp-tools-complete-extraction.mdis explicitly marked “AMS donor genealogy — not a Colibri target”.
Verification is performed by Sigma at R80 Phase B (Phase 0 completion round).
References
docs/reference/extractions/mcp-tools-complete-extraction.md— AMS donor tool inventory (484)docs/reference/mcp-tools-phase-0.md— Phase 0 target tool reference (60–80)docs/concepts/α-system-core.md— System toolsdocs/concepts/β-task-pipeline.md— Task toolsdocs/concepts/ζ-decision-trail.md— Thought/audit toolsdocs/concepts/η-proof-store.md— Merkle toolsdocs/colibri-system.md§2 — Ground-truth counts
R73 unification corpus. Answers the “484 tools, why?” question raised by the human at R73 kickoff. Amended R75 Wave H to reflect that Phase 0 shipped 14 tools (not 19) — 5 planned tools were closed, struck, or deferred; 1 tool (thought_record_list) was added during implementation. See the R75 Wave H amendment note at the top of this ADR.