Fold agent sub-tasks into structured summaries — a branching conversation-tree engine, CLI, and MCP server for LLM workflows.
convotree demonstrates solid tool design with clear naming (verb_noun pattern), comprehensive descriptions (150-300 chars), and well-structured input schemas using Zod. All 9 tools have descriptions and typed parameters. However, output schemas are not explicitly documented in the visible code, responses are described narratively rather than as formal JSON schemas. Error handling is present but generic ('Error: {message}'). Tool composition is excellent (each tool has one clear responsibility), and parameter descriptions are detailed with enums for branch_type. Missing: output schema documentation, structured error recovery guidance, and tool annotations (readOnlyHint/destructiveHint).
Send one turn within a branch (addressed by short id). Returns the assistant's response. Branches maintain multi-turn memory across separate tool calls.
Inject a branch's outcome into a target as one patch message. The branch is summarized and merged into the parent as a natural continuation.
Open a NEW branch for multi-turn manual work and return its short id. Send turns with branch_chat(branch_id, ...), then close with branch_park (summarize back to parent) or branch_merge (inject the outcome into the parent). Branches are addressed by short id — echoed here and in convo_tree; pass it back on each call. Default parent is the session root.
Summarize a branch back to its parent; returns the summary. The branch is marked parked and the active node returns to the parent.
Reopen a branch: returns its indexed message history. Allows inspection of a branch's conversation without changing the active node.
Output schemas not formally documented. Tool descriptions state what is returned (e.g., 'returns the summary', 'returns a JSON array') but no explicit JSON Schema or TypeScript interface is visible in the code. LLMs cannot reliably parse unstructured responses.
Error handling is generic ('Error: {message}'). No recovery guidance, error classification (retryable vs fatal), or actionable next steps. LLMs cannot self-correct or decide whether to retry.
Tool annotations missing. No readOnlyHint, destructiveHint, or idempotentHint declared. Clients cannot determine which tools are safe to retry or which modify state without parsing descriptions.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 61 | 2026-07-28+ | v2 |
Fork a branch from an earlier message index. Deprecates the current branch forward and creates a new fork at the specified message index.
Run a sub-task in an isolated branch and return ONLY a distilled, branch-type-structured summary — without polluting your main context. Use for reasoning/research/synthesis sub-questions; the fold has no access to your files or shell, so pass any needed material via `context` (or enable `web_search` to let it gather from the web). Each fold can run on its own model.
Current session / root (read-only). Returns metadata about the active session tree, root node, and current state.
Inspect the session tree (read-only). Returns a JSON array of all nodes with their metadata, ids, goals, statuses, and relationships.
Confirmation/dry-run pattern absent for destructive operations. branch_rollback and branch_merge modify state irreversibly with no confirmation step. Agents can accidentally corrupt conversation trees.
Parameter descriptions lack explicit constraints. 'message_index' in branch_rollback has no stated range (0-based, max value?). 'goal' and 'instructions' have no length limits. LLMs may pass invalid values.