diff --git a/documentation/docs/mcp/beads-mcp.md b/documentation/docs/mcp/beads-mcp.md new file mode 100644 index 000000000000..f4c6bc787694 --- /dev/null +++ b/documentation/docs/mcp/beads-mcp.md @@ -0,0 +1,428 @@ +--- +title: Beads Extension +description: Add Beads MCP Server as a goose Extension +--- + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; +import CLIExtensionInstructions from '@site/src/components/CLIExtensionInstructions'; +import GooseDesktopInstaller from '@site/src/components/GooseDesktopInstaller'; + + + +This tutorial covers how to add the [Beads MCP Server](https://github.com/steveyegge/beads) as a goose extension. Beads is a distributed, git-backed issue tracker designed for AI agents. It enables persistent task tracking with dependency management, so multiple goose sessions can coordinate work on complex projects. + +:::tip TLDR + + + [Launch the installer](goose://extension?cmd=uvx&arg=beads-mcp&id=beads&name=Beads&description=Git-backed%20issue%20tracker%20for%20AI%20agent%20task%20management) + + + **Command** + ```sh + uvx beads-mcp + ``` + + +::: + +## Configuration + +:::info +Note that you'll need [uv](https://docs.astral.sh/uv/#installation) installed on your system to run this command, as it uses `uvx`. +::: + +:::note Troubleshooting +If the extension fails to start with `ModuleNotFoundError: No module named 'packaging'` (fixed in versions after 0.49.1), run: +```sh +uv tool install beads-mcp --with packaging +``` +::: + + + + + + + + + + +## Example Usage + +In this example, we'll use Beads to coordinate building an expense tracker web app across **multiple parallel sessions**. This demonstrates how Beads enables multiple goose instances to work on the same project without conflicts. + +:::info LLM +Anthropic's Claude Opus 4.5 was used for this task. +::: + +### Overview + +We'll run **4 goose sessions**: +1. **Step 1**: Create all tasks with dependencies +2. **Step 2**: Build frontend tasks +3. **Step 3**: Build backend tasks (in parallel with Step 2) +4. **Step 4**: Wait for blockers, then wire everything together + +--- + +### Step 1: Plan the Project + +Create a new directory and start a goose session. + +#### goose Prompt +``` +I want to build an expense tracker web app. Initialize beads and create all tasks with dependencies: + +Frontend tasks: +- "HTML Structure" - create form, expense list, total display (no dependencies) +- "CSS Styling" - style the app (depends on "HTML Structure") +- "Wire Up UI" - connect buttons to functions (depends on "CSS Styling" AND all backend tasks) + +Backend tasks: +- "Storage Setup" - localStorage helpers to save/load expenses (no dependencies) +- "Add Expense" - function to add expense to storage (depends on "Storage Setup") +- "Calculate Total" - function to sum all expenses (depends on "Storage Setup") +- "Delete Expense" - function to remove expense (depends on "Storage Setup") + +Show me all tasks and which ones are ready to work on. +``` + +#### goose Output +``` +I'll initialize beads and create all the tasks with their dependencies. + +─── context | beads ────────────────────────── +action: init + +─── create | beads ────────────────────────── +title: HTML Structure +description: Create form, expense list, and total display for the expense tracker app +labels: frontend + +─── create | beads ────────────────────────── +title: Storage Setup +description: Create localStorage helpers to save/load expenses +labels: backend + +─── create | beads ────────────────────────── +title: CSS Styling +deps: ultimate-beads-test-987 +description: Style the expense tracker app with CSS +labels: frontend + +─── create | beads ────────────────────────── +title: Add Expense +deps: ultimate-beads-test-6gs +description: Function to add expense to storage +labels: backend + +─── create | beads ────────────────────────── +title: Calculate Total +deps: ultimate-beads-test-6gs +description: Function to sum all expenses +labels: backend + +─── create | beads ────────────────────────── +title: Delete Expense +deps: ultimate-beads-test-6gs +description: Function to remove expense from storage +labels: backend + +─── create | beads ────────────────────────── +title: Wire Up UI +deps: ultimate-beads-test-vt2, ultimate-beads-test-5x5, ultimate-beads-test-29u, ultimate-beads-test-ae4 +description: Connect buttons to functions - wire up the complete UI +labels: frontend + +Here's the complete overview of your expense tracker tasks: + +## 📋 All Tasks + +### Frontend Tasks +| ID | Task | Status | Blocked By | +|----|------|--------|------------| +| `987` | **HTML Structure** | ✅ Ready | - | +| `vt2` | CSS Styling | 🚫 Blocked | HTML Structure | +| `m7i` | Wire Up UI | 🚫 Blocked | CSS Styling, Add Expense, Calculate Total, Delete Expense | + +### Backend Tasks +| ID | Task | Status | Blocked By | +|----|------|--------|------------| +| `6gs` | **Storage Setup** | ✅ Ready | - | +| `5x5` | Add Expense | 🚫 Blocked | Storage Setup | +| `29u` | Calculate Total | 🚫 Blocked | Storage Setup | +| `ae4` | Delete Expense | 🚫 Blocked | Storage Setup | + +## 📊 Dependency Graph + +HTML Structure (987) Storage Setup (6gs) + │ / | \ + ▼ ▼ ▼ ▼ + CSS Styling (vt2) Add Expense Calculate Delete Expense + │ (5x5) Total (29u) (ae4) + │ \ | / + └────────────────────────────┼────────┘ + ▼ + Wire Up UI (m7i) + +## 🚀 Ready to Work On + +Two tasks have no blockers and can be started immediately: + +1. **HTML Structure** (frontend) +2. **Storage Setup** (backend) + +These two foundation tasks can be worked on **in parallel** since they're independent of each other! +``` + +--- + +### Step 2: Build the Frontend + +Open a **new terminal** in the same directory and start a new goose session. + +#### goose Prompt +``` +Check beads for the expense tracker project. + +Build the "HTML Structure" task. + +When done, mark it complete in beads, then build "CSS Styling" and mark it complete. +``` + +#### goose Output +``` +─── ready | beads ────────────────────────── + +📋 Ready work (2 issues with no blockers): +1. [● P2] [task] ultimate-beads-test-987: HTML Structure +2. [● P2] [task] ultimate-beads-test-6gs: Storage Setup + +I'll build the HTML Structure task first. + +─── text_editor | developer ────────────────────────── +path: index.html +command: write + +HTML Structure is complete. Now let me mark it as complete in beads: + +─── shell | developer ────────────────────────── +command: bd close ultimate-beads-test-987 -m "Created index.html with expense form, expense list, and total display" + +✓ Closed ultimate-beads-test-987 + +Now let me build the CSS Styling task: + +─── text_editor | developer ────────────────────────── +path: styles.css +command: write + +─── shell | developer ────────────────────────── +command: bd close ultimate-beads-test-vt2 -m "Created styles.css with responsive design" + +✓ Closed ultimate-beads-test-vt2 + +Let me verify the current state: + +─── shell | developer ────────────────────────── +command: bd ready + +📋 Ready work (2 issues with no blockers): +1. [● P2] [task] ultimate-beads-test-29u: Calculate Total +2. [● P2] [task] ultimate-beads-test-ae4: Delete Expense + +## ✅ Completed Tasks + +### 1. HTML Structure (`ultimate-beads-test-987`) +Created `index.html` with: +- **Expense Form** - Input fields for expense name, amount, category, and date +- **Total Display** - Section showing the total expenses amount +- **Expense List** - Table layout with headers for Name, Category, Date, Amount, and Action + +### 2. CSS Styling (`ultimate-beads-test-vt2`) +Created `styles.css` with: +- **Modern design** using CSS custom properties for consistent theming +- **Responsive grid layout** for the expense list +- **Mobile-responsive design** with breakpoints + +## 📋 Next Ready Tasks +The dependency chain has unblocked new work: +1. Calculate Total +2. Delete Expense +``` + +--- + +### Step 3: Build the Backend + +Open a **third terminal** in the same directory and start another goose session. Run this in parallel with Step 2. + +#### goose Prompt +``` +Check beads for the expense tracker project. + +Build the "Storage Setup" task and mark it complete. + +Then build "Add Expense", "Calculate Total", and "Delete Expense", marking each complete as you go. +``` + +#### goose Output +``` +─── ready | beads ────────────────────────── + +📋 Ready work (2 issues with no blockers): +1. [● P2] [task] ultimate-beads-test-987: HTML Structure +2. [● P2] [task] ultimate-beads-test-6gs: Storage Setup + +I'll start with Storage Setup. + +─── update | beads ────────────────────────── +issue_id: ultimate-beads-test-6gs +status: in_progress + +─── text_editor | developer ────────────────────────── +path: storage.js +command: write + +─── close | beads ────────────────────────── +issue_id: ultimate-beads-test-6gs +reason: Implemented localStorage helpers: getExpenses, saveExpenses, clearExpenses, generateId + +Now let me build "Add Expense": + +─── text_editor | developer ────────────────────────── +path: addExpense.js +command: write + +─── close | beads ────────────────────────── +issue_id: ultimate-beads-test-5x5 +reason: Implemented addExpense() function + +Now "Calculate Total": + +─── text_editor | developer ────────────────────────── +path: calculateTotal.js +command: write + +─── close | beads ────────────────────────── +issue_id: ultimate-beads-test-29u +reason: Implemented calculateTotal() and calculateTotalByCategory() + +And finally "Delete Expense": + +─── text_editor | developer ────────────────────────── +path: deleteExpense.js +command: write + +─── close | beads ────────────────────────── +issue_id: ultimate-beads-test-ae4 +reason: Implemented deleteExpense() and deleteExpensesByCategory() + +## ✅ Completed Tasks + +| Task | ID | File Created | +|------|-----|--------------| +| **Storage Setup** | `6gs` | `storage.js` | +| **Add Expense** | `5x5` | `addExpense.js` | +| **Calculate Total** | `29u` | `calculateTotal.js` | +| **Delete Expense** | `ae4` | `deleteExpense.js` | + +All backend tasks complete! The "Wire Up UI" task should now be unblocked. +``` + +--- + +### Step 4: Wire It All Together + +Open a **fourth terminal** in the same directory. This session will wait for the parallel work to complete before proceeding. + +#### goose Prompt +``` +Check beads for the expense tracker "Wire Up UI" task. + +If blocked, tell me what it's waiting on and keep checking every minute. + +If ready, implement it - connect the UI buttons to the backend functions. + +When done, mark the task complete in beads. +``` + +#### goose Output +``` +─── blocked | beads ────────────────────────── + +Found it! The **"Wire Up UI"** task (`ultimate-beads-test-m7i`) is currently **blocked** by 4 dependencies: + +| Blocker ID | Title | Status | +|------------|-------|--------| +| `29u` | Calculate Total | blocked | +| `5x5` | Add Expense | blocked | +| `ae4` | Delete Expense | blocked | +| `vt2` | CSS Styling | blocked | + +## 🔄 Status: BLOCKED + +The **"Wire Up UI"** task is waiting on: +1. **Add Expense** - Function to add expense to storage +2. **Calculate Total** - Function to sum all expenses +3. **Delete Expense** - Function to remove expense from storage +4. **CSS Styling** - Style the expense tracker app with CSS + +I'll check again in 1 minute to see if these blockers have been completed... + +─── shell | developer ────────────────────────── +command: sleep 60 + +─── show | beads ────────────────────────── +issue_id: ultimate-beads-test-m7i + +🎉 **All blockers are now CLOSED!** The "Wire Up UI" task is now **READY** to work on! + +| Blocker | Title | Status | +|---------|-------|--------| +| `29u` | Calculate Total | ✅ closed | +| `5x5` | Add Expense | ✅ closed | +| `ae4` | Delete Expense | ✅ closed | +| `vt2` | CSS Styling | ✅ closed | + +─── update | beads ────────────────────────── +issue_id: ultimate-beads-test-m7i +status: in_progress + +─── text_editor | developer ────────────────────────── +path: app.js +command: write + +─── close | beads ────────────────────────── +issue_id: ultimate-beads-test-m7i +reason: Implemented app.js to wire up UI - connected form submission to addExpense, delete buttons to deleteExpense, total display to calculateTotal + +## ✅ Task Complete: Wire Up UI + +**Created `app.js`** that: +- Connects form submission to `addExpense()` +- Renders expenses from storage on page load +- Wires delete buttons to `deleteExpense()` +- Updates total display using `calculateTotal()` + +To test it, run: open index.html + +Or start a local server: python3 -m http.server 8000 and visit http://localhost:8000 +``` + + diff --git a/documentation/static/servers.json b/documentation/static/servers.json index 09b309ba6024..3acc9c3efe9e 100644 --- a/documentation/static/servers.json +++ b/documentation/static/servers.json @@ -78,6 +78,17 @@ "endorsed": true, "environmentVariables": [] }, + { + "id": "beads", + "name": "Beads", + "description": "Git-backed issue tracker for AI agent task management", + "command": "uvx beads-mcp", + "link": "https://github.com/steveyegge/beads", + "installation_notes": "Install using uvx package manager. Requires uv to be installed.", + "is_builtin": false, + "endorsed": false, + "environmentVariables": [] + }, { "id": "blender-mcp", "name": "Blender",