opencodekit 0.10.0 → 0.11.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +1 -1
- package/dist/template/.opencode/agent/planner.md +3 -2
- package/dist/template/.opencode/command/accessibility-check.md +297 -30
- package/dist/template/.opencode/command/analyze-mockup.md +412 -20
- package/dist/template/.opencode/command/analyze-project.md +445 -30
- package/dist/template/.opencode/command/brainstorm.md +294 -5
- package/dist/template/.opencode/command/commit.md +231 -17
- package/dist/template/.opencode/command/create.md +415 -77
- package/dist/template/.opencode/command/design-audit.md +483 -29
- package/dist/template/.opencode/command/design.md +615 -6
- package/dist/template/.opencode/command/edit-image.md +223 -20
- package/dist/template/.opencode/command/finish.md +163 -71
- package/dist/template/.opencode/command/fix-ci.md +297 -24
- package/dist/template/.opencode/command/fix-types.md +351 -13
- package/dist/template/.opencode/command/fix-ui.md +299 -13
- package/dist/template/.opencode/command/fix.md +262 -9
- package/dist/template/.opencode/command/generate-diagram.md +327 -26
- package/dist/template/.opencode/command/generate-icon.md +266 -22
- package/dist/template/.opencode/command/generate-image.md +232 -12
- package/dist/template/.opencode/command/generate-pattern.md +234 -20
- package/dist/template/.opencode/command/generate-storyboard.md +231 -21
- package/dist/template/.opencode/command/handoff.md +208 -31
- package/dist/template/.opencode/command/implement.md +163 -50
- package/dist/template/.opencode/command/import-plan.md +253 -52
- package/dist/template/.opencode/command/init.md +154 -35
- package/dist/template/.opencode/command/integration-test.md +410 -24
- package/dist/template/.opencode/command/issue.md +177 -21
- package/dist/template/.opencode/command/new-feature.md +390 -54
- package/dist/template/.opencode/command/plan.md +394 -107
- package/dist/template/.opencode/command/pr.md +235 -29
- package/dist/template/.opencode/command/quick-build.md +234 -5
- package/dist/template/.opencode/command/research-and-implement.md +442 -12
- package/dist/template/.opencode/command/research-ui.md +444 -34
- package/dist/template/.opencode/command/research.md +179 -45
- package/dist/template/.opencode/command/restore-image.md +416 -22
- package/dist/template/.opencode/command/resume.md +447 -63
- package/dist/template/.opencode/command/revert-feature.md +347 -65
- package/dist/template/.opencode/command/review-codebase.md +199 -4
- package/dist/template/.opencode/command/skill-create.md +506 -14
- package/dist/template/.opencode/command/skill-optimize.md +487 -16
- package/dist/template/.opencode/command/status.md +326 -60
- package/dist/template/.opencode/command/summarize.md +374 -33
- package/dist/template/.opencode/command/triage.md +361 -0
- package/dist/template/.opencode/command/ui-review.md +296 -25
- package/dist/template/.opencode/skill/beads/SKILL.md +108 -3
- package/dist/template/.opencode/skill/playwriter/SKILL.md +148 -0
- package/package.json +1 -1
|
@@ -3,8 +3,8 @@ name: beads
|
|
|
3
3
|
description: >
|
|
4
4
|
Multi-agent task coordination using Beads Village plugin tools. Use when work spans multiple
|
|
5
5
|
sessions, has dependencies, needs file locking, or requires agent coordination. Covers
|
|
6
|
-
claim/reserve/done cycle, dependency management, and session protocols.
|
|
7
|
-
version: "1.
|
|
6
|
+
claim/reserve/done cycle, dependency management, hierarchical decomposition, and session protocols.
|
|
7
|
+
version: "1.1.0"
|
|
8
8
|
license: MIT
|
|
9
9
|
---
|
|
10
10
|
|
|
@@ -30,6 +30,111 @@ Graph-based task tracker with file locking for multi-agent coordination. Persist
|
|
|
30
30
|
|
|
31
31
|
**Decision Rule**: If resuming in 2 weeks would be hard without beads, use beads.
|
|
32
32
|
|
|
33
|
+
## Hierarchical Structure: Epic → Task → Subtask
|
|
34
|
+
|
|
35
|
+
**Beads supports up to 3 levels of hierarchy using hierarchical IDs:**
|
|
36
|
+
|
|
37
|
+
```
|
|
38
|
+
bd-a3f8 (Epic - parent feature)
|
|
39
|
+
├── bd-a3f8.1 (Task - first child)
|
|
40
|
+
├── bd-a3f8.2 (Task - second child)
|
|
41
|
+
│ ├── bd-a3f8.2.1 (Subtask - child of .2)
|
|
42
|
+
│ └── bd-a3f8.2.2 (Subtask - child of .2)
|
|
43
|
+
└── bd-a3f8.3 (Task - third child)
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
### When to Decompose
|
|
47
|
+
|
|
48
|
+
| Scenario | Structure |
|
|
49
|
+
| ---------------------------- | ------------------------------------ |
|
|
50
|
+
| Bug fix, config change | Single bead |
|
|
51
|
+
| Small feature (1-2 files) | Single bead |
|
|
52
|
+
| Feature crossing FE/BE | Epic + tasks by domain |
|
|
53
|
+
| New system/service | Epic + tasks by component |
|
|
54
|
+
| Multi-day work | Epic + tasks for parallelization |
|
|
55
|
+
| Work needing multiple agents | Epic + tasks (agents claim children) |
|
|
56
|
+
|
|
57
|
+
### Creating Hierarchical Beads
|
|
58
|
+
|
|
59
|
+
```typescript
|
|
60
|
+
// Step 1: Create Epic (parent)
|
|
61
|
+
const epic = bd_add({
|
|
62
|
+
title: "User Authentication System",
|
|
63
|
+
type: "epic",
|
|
64
|
+
pri: 1,
|
|
65
|
+
desc: "Complete auth with OAuth, sessions, and protected routes",
|
|
66
|
+
tags: ["epic", "auth"],
|
|
67
|
+
});
|
|
68
|
+
// Returns: { id: "bd-a3f8" }
|
|
69
|
+
|
|
70
|
+
// Step 2: Create child tasks with `parent` parameter
|
|
71
|
+
const task1 = bd_add({
|
|
72
|
+
title: "Database schema for auth",
|
|
73
|
+
type: "task",
|
|
74
|
+
pri: 2,
|
|
75
|
+
parent: "bd-a3f8", // Links to epic
|
|
76
|
+
desc: "Create user and session tables",
|
|
77
|
+
tags: ["backend", "database"],
|
|
78
|
+
});
|
|
79
|
+
// Returns: { id: "bd-a3f8.1" } ← Hierarchical ID!
|
|
80
|
+
|
|
81
|
+
// Step 3: Create dependent tasks with `deps` parameter
|
|
82
|
+
const task2 = bd_add({
|
|
83
|
+
title: "OAuth integration",
|
|
84
|
+
type: "task",
|
|
85
|
+
pri: 2,
|
|
86
|
+
parent: "bd-a3f8",
|
|
87
|
+
deps: ["bd-a3f8.1"], // Blocked until .1 completes
|
|
88
|
+
tags: ["backend"],
|
|
89
|
+
});
|
|
90
|
+
// Returns: { id: "bd-a3f8.2" }
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
### Dependency Types
|
|
94
|
+
|
|
95
|
+
Beads supports four dependency types:
|
|
96
|
+
|
|
97
|
+
| Type | Meaning | Use Case |
|
|
98
|
+
| ----------------- | ------------------------- | ------------------- |
|
|
99
|
+
| `blocks` | Task A blocks Task B | Sequential work |
|
|
100
|
+
| `related` | Tasks are connected | Cross-references |
|
|
101
|
+
| `parent-child` | Hierarchy (via `parent:`) | Epic → Task |
|
|
102
|
+
| `discovered-from` | Found during work | New work discovered |
|
|
103
|
+
|
|
104
|
+
### Parallel Execution with Dependencies
|
|
105
|
+
|
|
106
|
+
```
|
|
107
|
+
bd-a3f8.1 [Database] ──┬──> bd-a3f8.2 [Backend] ──┐
|
|
108
|
+
(READY) │ │
|
|
109
|
+
│ ▼
|
|
110
|
+
└──> bd-a3f8.3 [Frontend] bd-a3f8.5 [Testing]
|
|
111
|
+
│ │ ▲
|
|
112
|
+
└──> bd-a3f8.4 [Docs] ──────────┘
|
|
113
|
+
|
|
114
|
+
Parallel tracks:
|
|
115
|
+
• Agent 1 (backend): .1 → .2
|
|
116
|
+
• Agent 2 (frontend): wait for .1, then .3
|
|
117
|
+
• Agent 3 (qa): wait for .2 and .3, then .5
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
**Key insight**: After bd-a3f8.1 completes, .2, .3, and .4 all become READY simultaneously. Multiple agents can claim them in parallel.
|
|
121
|
+
|
|
122
|
+
### Querying Hierarchy
|
|
123
|
+
|
|
124
|
+
````typescript
|
|
125
|
+
// See all children of an epic
|
|
126
|
+
bd_ls({ status: "all", limit: 20 });
|
|
127
|
+
// Filter by parent prefix in results
|
|
128
|
+
|
|
129
|
+
// See ready work (unblocked tasks)
|
|
130
|
+
bd_ready();
|
|
131
|
+
// Returns tasks where all dependencies are closed
|
|
132
|
+
|
|
133
|
+
// See execution plan with parallel tracks
|
|
134
|
+
bd_plan();
|
|
135
|
+
// Groups ready tasks by priority
|
|
136
|
+
```
|
|
137
|
+
|
|
33
138
|
## Session Start Protocol
|
|
34
139
|
|
|
35
140
|
**Every session, follow these steps:**
|
|
@@ -38,7 +143,7 @@ Graph-based task tracker with file locking for multi-agent coordination. Persist
|
|
|
38
143
|
|
|
39
144
|
```typescript
|
|
40
145
|
bd_init({ team: "project", role: "fe" });
|
|
41
|
-
|
|
146
|
+
````
|
|
42
147
|
|
|
43
148
|
Joins workspace, enables role-based task filtering. Roles: fe, be, mobile, devops, qa.
|
|
44
149
|
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: playwriter
|
|
3
|
+
description: Browser automation via Chrome extension. Single execute tool with full Playwright API. Uses your existing browser with extensions, sessions, cookies. 90% less context than traditional browser MCP.
|
|
4
|
+
mcp:
|
|
5
|
+
playwriter:
|
|
6
|
+
command: npx
|
|
7
|
+
args: ["playwriter@latest"]
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Playwriter Browser Automation (MCP)
|
|
11
|
+
|
|
12
|
+
Control your actual Chrome browser via extension. Unlike traditional browser MCP tools that spawn isolated instances, Playwriter:
|
|
13
|
+
|
|
14
|
+
- **Uses your existing browser** - extensions, sessions, cookies all work
|
|
15
|
+
- **Single `execute` tool** - send Playwright code snippets directly
|
|
16
|
+
- **90% less context** - no tool schema bloat
|
|
17
|
+
- **Full Playwright API** - LLMs already know it from training
|
|
18
|
+
- **Bypass automation detection** - disconnect extension when needed
|
|
19
|
+
|
|
20
|
+
## Prerequisites
|
|
21
|
+
|
|
22
|
+
**You must install the Chrome extension first:**
|
|
23
|
+
|
|
24
|
+
1. Install [Playwriter Extension](https://chromewebstore.google.com/detail/playwriter-mcp/jfeammnjpkecdekppnclgkkffahnhfhe)
|
|
25
|
+
2. Click extension icon on tabs you want to control (icon turns green)
|
|
26
|
+
3. Now the skill can interact with those tabs
|
|
27
|
+
|
|
28
|
+
## Quick Start
|
|
29
|
+
|
|
30
|
+
After loading this skill:
|
|
31
|
+
|
|
32
|
+
```
|
|
33
|
+
# List available tabs (enabled ones)
|
|
34
|
+
skill_mcp(skill_name="playwriter", tool_name="listTabs")
|
|
35
|
+
|
|
36
|
+
# Execute Playwright code on a tab
|
|
37
|
+
skill_mcp(skill_name="playwriter", tool_name="execute", arguments='{"tabId": "tab-id-here", "code": "await page.goto(\"https://example.com\")"}')
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## Available Tools
|
|
41
|
+
|
|
42
|
+
| Tool | Description | Arguments |
|
|
43
|
+
| ---------- | -------------------------------- | --------------------------------- |
|
|
44
|
+
| `listTabs` | List tabs with extension enabled | `{}` |
|
|
45
|
+
| `execute` | Run Playwright code snippet | `{"tabId": "...", "code": "..."}` |
|
|
46
|
+
|
|
47
|
+
That's it. Two tools. The power is in the Playwright code you send.
|
|
48
|
+
|
|
49
|
+
## The `execute` Pattern
|
|
50
|
+
|
|
51
|
+
Send any valid Playwright code. The `page` object is already available:
|
|
52
|
+
|
|
53
|
+
```javascript
|
|
54
|
+
// Navigate
|
|
55
|
+
await page.goto("https://github.com");
|
|
56
|
+
|
|
57
|
+
// Click
|
|
58
|
+
await page.click("button.sign-in");
|
|
59
|
+
|
|
60
|
+
// Fill form
|
|
61
|
+
await page.fill("#email", "user@example.com");
|
|
62
|
+
await page.fill("#password", "secret");
|
|
63
|
+
await page.click('button[type="submit"]');
|
|
64
|
+
|
|
65
|
+
// Wait for element
|
|
66
|
+
await page.waitForSelector(".dashboard");
|
|
67
|
+
|
|
68
|
+
// Get text
|
|
69
|
+
const title = await page.title();
|
|
70
|
+
|
|
71
|
+
// Screenshot
|
|
72
|
+
await page.screenshot({ path: "/tmp/screenshot.png" });
|
|
73
|
+
|
|
74
|
+
// Complex selectors
|
|
75
|
+
await page.click("text=Submit");
|
|
76
|
+
await page.click('[data-testid="login-btn"]');
|
|
77
|
+
|
|
78
|
+
// Evaluate JS in page
|
|
79
|
+
const links = await page.evaluate(() =>
|
|
80
|
+
Array.from(document.querySelectorAll("a")).map((a) => a.href),
|
|
81
|
+
);
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
## Examples
|
|
85
|
+
|
|
86
|
+
### Navigate and Screenshot
|
|
87
|
+
|
|
88
|
+
```
|
|
89
|
+
skill_mcp(skill_name="playwriter", tool_name="execute", arguments='{"tabId": "abc123", "code": "await page.goto(\"https://example.com\"); await page.screenshot({ path: \"/tmp/example.png\" })"}')
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
### Fill a Form
|
|
93
|
+
|
|
94
|
+
```
|
|
95
|
+
skill_mcp(skill_name="playwriter", tool_name="execute", arguments='{"tabId": "abc123", "code": "await page.fill(\"#name\", \"John Doe\"); await page.fill(\"#email\", \"john@example.com\"); await page.click(\"button[type=submit]\")"}')
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
### Login Flow (Using Your Saved Sessions)
|
|
99
|
+
|
|
100
|
+
```
|
|
101
|
+
# If you're already logged in via browser, just navigate
|
|
102
|
+
skill_mcp(skill_name="playwriter", tool_name="execute", arguments='{"tabId": "abc123", "code": "await page.goto(\"https://github.com/settings/profile\")"}')
|
|
103
|
+
|
|
104
|
+
# Your cookies/session already work - no login needed!
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
### Scrape Data
|
|
108
|
+
|
|
109
|
+
```
|
|
110
|
+
skill_mcp(skill_name="playwriter", tool_name="execute", arguments='{"tabId": "abc123", "code": "const items = await page.$$eval(\".product\", els => els.map(e => ({ name: e.querySelector(\"h2\").textContent, price: e.querySelector(\".price\").textContent }))); return items"}')
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
### Test Responsive
|
|
114
|
+
|
|
115
|
+
```
|
|
116
|
+
skill_mcp(skill_name="playwriter", tool_name="execute", arguments='{"tabId": "abc123", "code": "await page.setViewportSize({ width: 375, height: 667 }); await page.screenshot({ path: \"/tmp/mobile.png\" })"}')
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
## Bypassing Automation Detection
|
|
120
|
+
|
|
121
|
+
For sites that detect automation (Google login, etc.):
|
|
122
|
+
|
|
123
|
+
1. **Disconnect the extension** before sensitive actions
|
|
124
|
+
2. Perform login manually
|
|
125
|
+
3. **Reconnect** after authentication
|
|
126
|
+
4. Continue automation with your authenticated session
|
|
127
|
+
|
|
128
|
+
This works because the browser is real - not a Puppeteer/Playwright-spawned instance.
|
|
129
|
+
|
|
130
|
+
## vs Traditional Playwright MCP
|
|
131
|
+
|
|
132
|
+
| Aspect | `playwright` skill | `playwriter` skill |
|
|
133
|
+
| -------------------- | ----------------------- | ----------------------- |
|
|
134
|
+
| Tools | 17+ | 2 |
|
|
135
|
+
| Context usage | High | ~90% less |
|
|
136
|
+
| Browser | New instance | Your existing browser |
|
|
137
|
+
| Extensions | None | All yours |
|
|
138
|
+
| Sessions/cookies | Fresh | Your logged-in sessions |
|
|
139
|
+
| Automation detection | Always detected | Can bypass |
|
|
140
|
+
| API knowledge | Must learn tool schemas | Standard Playwright |
|
|
141
|
+
|
|
142
|
+
## Tips
|
|
143
|
+
|
|
144
|
+
- **List tabs first** to get valid tabId values
|
|
145
|
+
- **Chain commands** in single execute for efficiency
|
|
146
|
+
- **Use your sessions** - if you're logged into GitHub in Chrome, it just works
|
|
147
|
+
- **Return data** from execute to get values back
|
|
148
|
+
- **Standard Playwright docs** apply - no special syntax to learn
|