{
  "markdown": "<div align=\"center\">\n\n<img src=\"./assets/banner.jpg\" alt=\"batuta-mcp — disjoint plans and git worktrees for parallel agents\" width=\"100%\" />\n\n# batuta-mcp\n\n**Split a task into plans with disjoint file boundaries, then scaffold a git worktree per plan — so parallel agents never step on each other.**\n\nA stateless MCP server that turns a brain dump into conflict-free parallel work.\n\n[![License: Apache 2.0](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](./LICENSE)\n[![Bun](https://img.shields.io/badge/Bun-1.3+-fbf0df?logo=bun&logoColor=black)](https://bun.sh)\n[![Model Context Protocol](https://img.shields.io/badge/MCP-compatible-6E56CF)](https://modelcontextprotocol.io)\n[![Built with Claude Code](https://img.shields.io/badge/Built_with-Claude_Code-D97757)](https://claude.com/claude-code)\n\n</div>\n\n---\n\n> ## Retired\n>\n> **Claude Code now does this itself.** Splitting work across isolated worktrees so parallel agents do\n> not collide is built in, which is what this existed to provide.\n>\n> The repository is archived and read-only. **It still works** — nothing was removed from npm, and the\n> last published version keeps installing — but it will not be maintained, and it does not need to be.\n> If you want the idea rather than the package, the whole design is in `docs/` and the licence lets you\n> take it.\n\n\n## Why\n\nRunning several coding agents in parallel is fast — until two of them edit the same file and silently clobber each other's work. The fix isn't live coordination; it's **separation**: give each agent a set of files that **don't overlap**, and the conflict can't happen by design.\n\n**batuta-mcp** is the brain that does that split. You hand it a brain dump; it returns plans with **disjoint file boundaries**, and scaffolds an isolated git worktree for each one.\n\n## How it works\n\nIt's a **stateless** MCP server (stdio). No database, no daemon, no web UI — just three tools that compose:\n\n1. **Decompose** a brain dump into 2–5 plans whose `fileBoundaries` don't overlap (auto-corrects once if they do).\n2. **Check** that the boundaries are truly disjoint.\n3. **Scaffold** a `git worktree` per plan, returning a ready-to-paste prompt for each — open them in separate terminals/tabs and let one agent work each, conflict-free.\n\nThe \"muscle\" (running the agents, the terminals) stays in your editor; batuta-mcp is just the planning brain.\n\n## Features\n\n- 🧠 **Disjoint decomposition** — plans are generated so no file appears in two plans.\n- ♻️ **Auto-correction** — if the model returns overlapping boundaries, it retries once to separate them.\n- 🌳 **Worktree scaffolding** — one isolated `git worktree` per plan, with a ready-to-paste prompt.\n- 🔒 **Safe by design** — pre-flight checks (valid git repo, no overlaps, no path traversal) before touching disk; `dryRun` previews without writing.\n- 🪶 **Stateless** — nothing persisted; uses your logged-in `claude` CLI (no API key needed).\n\n## Requirements\n\n- [Bun](https://bun.sh) 1.3+\n- `git` 2.x (for `scaffold_worktrees`)\n- The [`claude`](https://claude.com/claude-code) CLI, logged in (for `decompose_into_plans`)\n- [Claude Code](https://claude.com/claude-code) or any MCP client\n\n## Installation\n\n**From npm** — nothing to clone:\n\n```bash\nclaude mcp add batuta -- bunx --bun @vorluno/batuta-mcp\n```\n\n**From source** — if you want to change it:\n\n```bash\ngit clone https://github.com/vorluno/batuta-mcp.git\ncd batuta-mcp\nbun install\nclaude mcp add batuta -- bun run /absolute/path/to/batuta-mcp/src/index.ts\n```\n\n## Configuration\n\nAny MCP client works. The `mcpServers` entry:\n\n```json\n{\n  \"mcpServers\": {\n    \"batuta\": {\n      \"command\": \"bun\",\n      \"args\": [\"run\", \"/absolute/path/to/batuta-mcp/src/index.ts\"]\n    }\n  }\n}\n```\n\nFor **Claude Code**, `claude mcp add` (above) writes this for you. For **Warp** or **Cursor**, paste the snippet into their MCP settings.\n\n## Tools\n\n| Tool | Description |\n|------|-------------|\n| `decompose_into_plans` | `{ brainDump, projectHint?, repoPath? }` → `{ plans, overlapsResolved, attempts }`. Splits the work into plans with disjoint boundaries (auto-corrects overlaps once). |\n| `check_boundary_overlaps` | `{ plans }` → `{ overlaps, ok }`. Pure check: do any plans share files? |\n| `scaffold_worktrees` | `{ repoPath, plans, dryRun? }` → `{ results }`. Pre-flight, then `git worktree add` per plan + a ready-to-paste prompt. |\n\n## Typical flow\n\n1. `decompose_into_plans` → plans with disjoint boundaries.\n2. `check_boundary_overlaps` → confirm `ok: true` (or adjust).\n3. `scaffold_worktrees` → creates the worktrees; open each in its own terminal/tab and paste its `suggestedPrompt`.\n\n## Development\n\n```bash\nbun test          # full suite\nbunx tsc --noEmit # type-check\n```\n\nBuilt test-first across 10 TDD tasks with per-task and whole-branch review.\n\n## Contributing and security\n\nRead [CONTRIBUTING.md](./CONTRIBUTING.md) first — its first line tells you whether your pull request\nwill be considered. Vulnerabilities go to **security@vorluno.dev**, never to an issue: see\n[SECURITY.md](./SECURITY.md), where the 72-hour acknowledgement is the one response time we commit to.\n\n## License\n\n[Apache-2.0](./LICENSE) © 2026 Vorluno. See [NOTICE](./NOTICE).\n\nUp to and including **0.1.0** this was MIT. Those releases stay MIT — a licence already granted\ncannot be withdrawn. From **0.2.0** on it is Apache-2.0, which grants patent rights explicitly.\n\n---\n\n<div align=\"center\">\n\nBuilt by **[Vorluno](https://vorluno.dev)** — a software studio from Panamá 🇵🇦\n\nPart of the [`mcp-s`](https://github.com/vorluno/mcp-s) family of MCP servers.\nLooking for live coordination between sessions instead of separation? See [`agora`](https://github.com/vorluno/agora-mcp).\n\n</div>\n",
  "bytes": 5701,
  "sha": "faae75c6fd7672d8d437e0f18f7d2dafcd5c9e7621ffa6468e0098d539506037",
  "repo_slug": "vorluno/batuta-mcp",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_vorluno_batuta_mcp_76f93f72/readme"
}