opencodekit 0.20.6 → 0.20.8
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/AGENTS.md +48 -0
- package/dist/template/.opencode/agent/build.md +3 -2
- package/dist/template/.opencode/agent/explore.md +14 -14
- package/dist/template/.opencode/agent/general.md +1 -1
- package/dist/template/.opencode/agent/plan.md +1 -1
- package/dist/template/.opencode/agent/review.md +1 -1
- package/dist/template/.opencode/agent/vision.md +0 -9
- package/dist/template/.opencode/command/compound.md +102 -28
- package/dist/template/.opencode/command/curate.md +299 -0
- package/dist/template/.opencode/command/lfg.md +1 -0
- package/dist/template/.opencode/command/ship.md +1 -0
- package/dist/template/.opencode/memory.db +0 -0
- package/dist/template/.opencode/memory.db-shm +0 -0
- package/dist/template/.opencode/memory.db-wal +0 -0
- package/dist/template/.opencode/opencode.json +0 -5
- package/dist/template/.opencode/package.json +1 -1
- package/dist/template/.opencode/pnpm-lock.yaml +791 -9
- package/dist/template/.opencode/skill/api-and-interface-design/SKILL.md +162 -0
- package/dist/template/.opencode/skill/beads/SKILL.md +10 -9
- package/dist/template/.opencode/skill/beads/references/MULTI_AGENT.md +10 -10
- package/dist/template/.opencode/skill/ci-cd-and-automation/SKILL.md +202 -0
- package/dist/template/.opencode/skill/code-search-patterns/SKILL.md +253 -0
- package/dist/template/.opencode/skill/code-simplification/SKILL.md +211 -0
- package/dist/template/.opencode/skill/condition-based-waiting/SKILL.md +12 -0
- package/dist/template/.opencode/skill/defense-in-depth/SKILL.md +16 -6
- package/dist/template/.opencode/skill/deprecation-and-migration/SKILL.md +189 -0
- package/dist/template/.opencode/skill/development-lifecycle/SKILL.md +12 -48
- package/dist/template/.opencode/skill/documentation-and-adrs/SKILL.md +220 -0
- package/dist/template/.opencode/skill/incremental-implementation/SKILL.md +191 -0
- package/dist/template/.opencode/skill/performance-optimization/SKILL.md +236 -0
- package/dist/template/.opencode/skill/receiving-code-review/SKILL.md +11 -0
- package/dist/template/.opencode/skill/reflection-checkpoints/SKILL.md +183 -0
- package/dist/template/.opencode/skill/security-and-hardening/SKILL.md +296 -0
- package/dist/template/.opencode/skill/structured-edit/SKILL.md +10 -0
- package/dist/template/.opencode/skill/swarm-coordination/SKILL.md +66 -1
- package/package.json +1 -1
- package/dist/template/.opencode/skill/beads-bridge/SKILL.md +0 -321
- package/dist/template/.opencode/skill/code-navigation/SKILL.md +0 -130
- package/dist/template/.opencode/skill/mqdh/SKILL.md +0 -171
- package/dist/template/.opencode/skill/obsidian/SKILL.md +0 -192
- package/dist/template/.opencode/skill/obsidian/mcp.json +0 -22
- package/dist/template/.opencode/skill/pencil/SKILL.md +0 -72
- package/dist/template/.opencode/skill/ralph/SKILL.md +0 -296
- package/dist/template/.opencode/skill/tilth-cli/SKILL.md +0 -207
- package/dist/template/.opencode/skill/tool-priority/SKILL.md +0 -299
|
@@ -1,321 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: beads-bridge
|
|
3
|
-
description: >
|
|
4
|
-
Multi-agent task coordination using br (beads_rust) and OpenCode tools. Use when work spans multiple sessions,
|
|
5
|
-
has dependencies, needs file locking, or requires agent coordination. Covers claim/reserve/done cycle,
|
|
6
|
-
dependency management, hierarchical decomposition, and session protocols.
|
|
7
|
-
version: "2.0.0"
|
|
8
|
-
license: MIT
|
|
9
|
-
tags: [agent-coordination, workflow]
|
|
10
|
-
dependencies: [beads]
|
|
11
|
-
---
|
|
12
|
-
|
|
13
|
-
# Beads Bridge - Cross-Session Task Coordination
|
|
14
|
-
|
|
15
|
-
## When to Use
|
|
16
|
-
|
|
17
|
-
- Work spans multiple sessions and needs persistent task tracking
|
|
18
|
-
- Multiple agents must coordinate via Beads, swarm, and OpenCode todos
|
|
19
|
-
|
|
20
|
-
## When NOT to Use
|
|
21
|
-
|
|
22
|
-
- Single-session, single-agent work with no dependencies
|
|
23
|
-
- Simple tasks that don’t require Beads or swarm coordination
|
|
24
|
-
|
|
25
|
-
## Overview
|
|
26
|
-
|
|
27
|
-
**Beads Bridge = Beads (br) + OpenCode Todos + Swarm Monitor**
|
|
28
|
-
|
|
29
|
-
- **Beads (br)**: Git-backed task tracking with dependency management
|
|
30
|
-
- **OpenCode Todos**: Native session-scoped task lists for subagents
|
|
31
|
-
- **Swarm Monitor**: Real-time progress tracking (visualization only)
|
|
32
|
-
|
|
33
|
-
**Key Tools**:
|
|
34
|
-
|
|
35
|
-
| Tool | Purpose | When to Use |
|
|
36
|
-
| ------- | --------------------------- | ---------------------------------------------------- |
|
|
37
|
-
| `swarm` | Unified swarm coordination | All swarm operations (sync, monitor, plan, delegate) |
|
|
38
|
-
| `Task` | Parallel subagent execution | Spawning worker swarms |
|
|
39
|
-
|
|
40
|
-
**swarm operations:**
|
|
41
|
-
|
|
42
|
-
- `sync`: Sync Beads ↔ OpenCode todos (start of session, before spawning)
|
|
43
|
-
- `monitor`: Progress tracking/visualization (during swarm execution)
|
|
44
|
-
- `plan`: Task classification + dependency graphs (before spawning workers)
|
|
45
|
-
- `delegate`: Create delegation packets (assigning work to workers)
|
|
46
|
-
|
|
47
|
-
## Core Workflows
|
|
48
|
-
|
|
49
|
-
### 1. Session Start: Load Beads into Todos
|
|
50
|
-
|
|
51
|
-
Make Beads tasks visible to subagents:
|
|
52
|
-
|
|
53
|
-
```typescript
|
|
54
|
-
// Push Beads to OpenCode todos
|
|
55
|
-
const result = await swarm({
|
|
56
|
-
operation: "sync",
|
|
57
|
-
action: "push",
|
|
58
|
-
filter: "open", // or "in_progress", "all"
|
|
59
|
-
});
|
|
60
|
-
|
|
61
|
-
// Subagents can now use todoread to see tasks
|
|
62
|
-
// [Bead] task-title will appear in their todo list
|
|
63
|
-
```
|
|
64
|
-
|
|
65
|
-
### 2. Check Swarm Status
|
|
66
|
-
|
|
67
|
-
Check current swarm progress:
|
|
68
|
-
|
|
69
|
-
```typescript
|
|
70
|
-
// Check swarm status
|
|
71
|
-
const status = await swarm({
|
|
72
|
-
operation: "monitor",
|
|
73
|
-
action: "status",
|
|
74
|
-
team_name: "api-refactor-swarm",
|
|
75
|
-
});
|
|
76
|
-
|
|
77
|
-
const stats = JSON.parse(status).summary;
|
|
78
|
-
console.log(`Workers: ${stats.total_workers}, Completed: ${stats.completed}`);
|
|
79
|
-
|
|
80
|
-
// Render TUI for visualization
|
|
81
|
-
const ui = await swarm({
|
|
82
|
-
operation: "monitor",
|
|
83
|
-
action: "render_block",
|
|
84
|
-
team_name: "api-refactor-swarm",
|
|
85
|
-
});
|
|
86
|
-
console.log(ui);
|
|
87
|
-
```
|
|
88
|
-
|
|
89
|
-
### 3. Shared Task Lists for Cross-Session Work
|
|
90
|
-
|
|
91
|
-
For work that spans multiple sessions, use shared task lists:
|
|
92
|
-
|
|
93
|
-
```typescript
|
|
94
|
-
// Create a shared list that persists across sessions
|
|
95
|
-
const list = await swarm({
|
|
96
|
-
operation: "sync",
|
|
97
|
-
action: "create_shared",
|
|
98
|
-
name: "api-refactor-swarm",
|
|
99
|
-
tasks: JSON.stringify([
|
|
100
|
-
{ id: "task-1", content: "Refactor auth endpoint", status: "pending", priority: "high" },
|
|
101
|
-
{ id: "task-2", content: "Update user routes", status: "pending", priority: "medium" },
|
|
102
|
-
]),
|
|
103
|
-
});
|
|
104
|
-
|
|
105
|
-
// Workers update the shared list as they complete work
|
|
106
|
-
await swarm({
|
|
107
|
-
operation: "sync",
|
|
108
|
-
action: "update_shared",
|
|
109
|
-
list_id: list.list_id,
|
|
110
|
-
tasks: JSON.stringify([{ id: "task-1", status: "completed" }]),
|
|
111
|
-
});
|
|
112
|
-
```
|
|
113
|
-
|
|
114
|
-
### 4. Create Shared Task Lists for Swarms
|
|
115
|
-
|
|
116
|
-
Create persistent task lists that survive session boundaries:
|
|
117
|
-
|
|
118
|
-
```typescript
|
|
119
|
-
// Create a shared list for a swarm
|
|
120
|
-
const list = await swarm({
|
|
121
|
-
operation: "sync",
|
|
122
|
-
action: "create_shared",
|
|
123
|
-
name: "api-refactor-swarm",
|
|
124
|
-
tasks: JSON.stringify([
|
|
125
|
-
{ id: "task-1", content: "Refactor auth endpoint", status: "pending", priority: "high" },
|
|
126
|
-
{ id: "task-2", content: "Update user routes", status: "pending", priority: "medium" },
|
|
127
|
-
{ id: "task-3", content: "Fix validation", status: "pending", priority: "medium" },
|
|
128
|
-
]),
|
|
129
|
-
});
|
|
130
|
-
|
|
131
|
-
// Share the list ID with workers
|
|
132
|
-
console.log(`List ID: ${list.list_id}`);
|
|
133
|
-
// Workers can access via: swarm({ operation: "sync", action: "get_shared", list_id: "..." })
|
|
134
|
-
```
|
|
135
|
-
|
|
136
|
-
### 5. Worker Updates to Shared List
|
|
137
|
-
|
|
138
|
-
Workers can update their task status:
|
|
139
|
-
|
|
140
|
-
```typescript
|
|
141
|
-
// Worker completes a task
|
|
142
|
-
await swarm({
|
|
143
|
-
operation: "sync",
|
|
144
|
-
action: "update_shared",
|
|
145
|
-
list_id: "shl_abc123",
|
|
146
|
-
tasks: JSON.stringify([{ id: "task-1", status: "completed" }]),
|
|
147
|
-
});
|
|
148
|
-
```
|
|
149
|
-
|
|
150
|
-
## Integration Patterns
|
|
151
|
-
|
|
152
|
-
### Pattern A: Beads → Swarm → Beads
|
|
153
|
-
|
|
154
|
-
Full cycle from Beads task to swarm execution and back:
|
|
155
|
-
|
|
156
|
-
```typescript
|
|
157
|
-
// 1. Start: Push Beads to todos
|
|
158
|
-
await swarm({ operation: "sync", action: "push" });
|
|
159
|
-
|
|
160
|
-
// 2. Claim the parent Bead
|
|
161
|
-
await bash("br update parent-task --status in_progress");
|
|
162
|
-
|
|
163
|
-
// 3. Analyze and spawn swarm
|
|
164
|
-
const analysis = await swarm({
|
|
165
|
-
operation: "plan",
|
|
166
|
-
action: "analyze",
|
|
167
|
-
task: "Implement API refactor",
|
|
168
|
-
files: "src/api/users.ts,src/api/posts.ts,src/api/auth.ts",
|
|
169
|
-
});
|
|
170
|
-
|
|
171
|
-
// 4. Execute swarm (see swarm-coordination skill)
|
|
172
|
-
// ... spawn workers, monitor progress ...
|
|
173
|
-
|
|
174
|
-
// 5. Complete: Pull completed todos back to Beads
|
|
175
|
-
await swarm({ operation: "sync", action: "pull" });
|
|
176
|
-
|
|
177
|
-
// 6. Clear swarm state
|
|
178
|
-
await swarm({
|
|
179
|
-
operation: "monitor",
|
|
180
|
-
action: "clear",
|
|
181
|
-
team_name: "api-refactor-swarm",
|
|
182
|
-
});
|
|
183
|
-
|
|
184
|
-
// 7. Close parent Bead and sync
|
|
185
|
-
await bash("br close parent-task --reason 'Swarm completed all subtasks'");
|
|
186
|
-
await bash("br sync --flush-only");
|
|
187
|
-
await bash("git add .beads/ && git commit -m 'close parent-task'");
|
|
188
|
-
```
|
|
189
|
-
|
|
190
|
-
### Pattern B: Dependency-Aware Task Scheduling
|
|
191
|
-
|
|
192
|
-
Use swarm tool's dependency graph for proper ordering:
|
|
193
|
-
|
|
194
|
-
```typescript
|
|
195
|
-
// Get full analysis with dependency graph
|
|
196
|
-
const analysis = await swarm({
|
|
197
|
-
operation: "plan",
|
|
198
|
-
action: "analyze",
|
|
199
|
-
task: "Refactor authentication system",
|
|
200
|
-
files: "src/auth/service.ts,src/auth/types.ts,src/routes/auth.ts,src/middleware/auth.ts",
|
|
201
|
-
});
|
|
202
|
-
|
|
203
|
-
const plan = JSON.parse(analysis);
|
|
204
|
-
|
|
205
|
-
// Use parallelizable_groups for spawn order
|
|
206
|
-
for (const group of plan.dependency_graph.parallelizable_groups) {
|
|
207
|
-
// Spawn all tasks in this group in parallel
|
|
208
|
-
for (const taskId of group) {
|
|
209
|
-
const node = plan.dependency_graph.nodes.find((n) => n.id === taskId);
|
|
210
|
-
Task({
|
|
211
|
-
subagent_type: "general",
|
|
212
|
-
description: `Execute ${taskId}`,
|
|
213
|
-
prompt: `Execute task ${taskId}: ${node.content}
|
|
214
|
-
|
|
215
|
-
Files: ${node.assignedFiles.join(", ")}
|
|
216
|
-
Blocked by: ${node.blockedBy.join(", ") || "none"}
|
|
217
|
-
Team: auth-refactor-swarm
|
|
218
|
-
Worker: ${node.worker}`,
|
|
219
|
-
});
|
|
220
|
-
}
|
|
221
|
-
|
|
222
|
-
// Wait for this group to complete before starting next
|
|
223
|
-
// (dependency ordering)
|
|
224
|
-
}
|
|
225
|
-
```
|
|
226
|
-
|
|
227
|
-
### Pattern C: Cross-Session Handoff
|
|
228
|
-
|
|
229
|
-
When work needs to continue in a new session:
|
|
230
|
-
|
|
231
|
-
```typescript
|
|
232
|
-
// End of session 1: Save state to memory and shared list
|
|
233
|
-
await swarm({
|
|
234
|
-
operation: "sync",
|
|
235
|
-
action: "update_shared",
|
|
236
|
-
list_id: "api-refactor-swarm",
|
|
237
|
-
tasks: JSON.stringify([
|
|
238
|
-
{ id: "worker-1", content: "Auth service", status: "completed" },
|
|
239
|
-
{ id: "worker-2", content: "User routes", status: "completed" },
|
|
240
|
-
{ id: "worker-3", content: "Validation", status: "in_progress" },
|
|
241
|
-
]),
|
|
242
|
-
});
|
|
243
|
-
|
|
244
|
-
await memory_update({
|
|
245
|
-
file: "handoffs/swarm-state",
|
|
246
|
-
content: `
|
|
247
|
-
## Swarm Handoff
|
|
248
|
-
|
|
249
|
-
Team: api-refactor-swarm
|
|
250
|
-
Progress: 60% complete (3/5 workers done)
|
|
251
|
-
Remaining: worker-4 (blocked), worker-5 (pending)
|
|
252
|
-
Blockers: worker-4 needs auth types from worker-1
|
|
253
|
-
|
|
254
|
-
Next steps:
|
|
255
|
-
1. Check shared task list for current status
|
|
256
|
-
2. Unblock worker-4 with completed types
|
|
257
|
-
3. Spawn remaining workers
|
|
258
|
-
`,
|
|
259
|
-
mode: "replace",
|
|
260
|
-
});
|
|
261
|
-
|
|
262
|
-
// Sync beads before ending session
|
|
263
|
-
await bash("br sync --flush-only");
|
|
264
|
-
await bash("git add .beads/ && git commit -m 'session handoff'");
|
|
265
|
-
|
|
266
|
-
// Start of session 2: Check status and continue
|
|
267
|
-
const status = await swarm({
|
|
268
|
-
operation: "monitor",
|
|
269
|
-
action: "status",
|
|
270
|
-
team_name: "api-refactor-swarm",
|
|
271
|
-
});
|
|
272
|
-
|
|
273
|
-
const shared = await swarm({
|
|
274
|
-
operation: "sync",
|
|
275
|
-
action: "get_shared",
|
|
276
|
-
list_id: "api-refactor-swarm",
|
|
277
|
-
});
|
|
278
|
-
|
|
279
|
-
console.log(`Continuing swarm with ${shared.tasks.length} tasks...`);
|
|
280
|
-
```
|
|
281
|
-
|
|
282
|
-
## Data Locations
|
|
283
|
-
|
|
284
|
-
| Data Type | Location | Persistence |
|
|
285
|
-
| ----------------- | ----------------------------------------------- | ------------- |
|
|
286
|
-
| Beads tasks | `.beads/issues/*.md` | Git-backed |
|
|
287
|
-
| Swarm progress | `.beads/swarm-progress.jsonl` | Session |
|
|
288
|
-
| Shared task lists | `~/.local/share/opencode/storage/shared-tasks/` | Cross-session |
|
|
289
|
-
| OpenCode todos | `~/.local/share/opencode/storage/todo/` | Session |
|
|
290
|
-
|
|
291
|
-
## Quick Reference
|
|
292
|
-
|
|
293
|
-
```
|
|
294
|
-
SESSION START:
|
|
295
|
-
swarm({ operation: "sync", action: "push" }) // Make Beads visible to subagents
|
|
296
|
-
swarm({ operation: "monitor", action: "status", team_name: "..." }) // Check swarm status
|
|
297
|
-
|
|
298
|
-
DURING WORK:
|
|
299
|
-
swarm({ operation: "monitor", action: "progress_update", ... }) // Track worker progress
|
|
300
|
-
swarm({ operation: "monitor", action: "render_block", ... }) // TUI visualization
|
|
301
|
-
swarm({ operation: "sync", action: "update_shared", ... }) // Cross-session updates
|
|
302
|
-
|
|
303
|
-
SESSION END:
|
|
304
|
-
swarm({ operation: "sync", action: "pull" }) // Sync completed todos back to Beads
|
|
305
|
-
swarm({ operation: "monitor", action: "clear", team_name: "..." }) // Cleanup swarm state
|
|
306
|
-
br sync --flush-only // Export Beads changes
|
|
307
|
-
git add .beads/ && git commit -m "..." // Commit changes to git
|
|
308
|
-
|
|
309
|
-
RECOVERY:
|
|
310
|
-
swarm({ operation: "sync", action: "get_shared", list_id: "..." }) // Get shared task list
|
|
311
|
-
swarm({ operation: "monitor", action: "status", team_name: "..." }) // Check swarm status
|
|
312
|
-
```
|
|
313
|
-
|
|
314
|
-
## Rules
|
|
315
|
-
|
|
316
|
-
1. **Always push Beads at session start** - Subagents need visibility via todoread
|
|
317
|
-
2. **Use shared lists for long-running swarms** - Cross-session persistence via swarm sync
|
|
318
|
-
3. **Pull completed todos back to Beads** - Keep tracking system in sync
|
|
319
|
-
4. **Check swarm status before spawning** - Avoid duplicate work
|
|
320
|
-
5. **Clear swarm state when done** - Cleanup after completion
|
|
321
|
-
6. **Always sync and commit before session end** - `br sync --flush-only` then `git add .beads/ && git commit`
|
|
@@ -1,130 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: code-navigation
|
|
3
|
-
description: Use when navigating unfamiliar code, tracing cross-file dependencies, or before editing — efficient code reading patterns that minimize tool calls and token waste
|
|
4
|
-
version: 1.0.0
|
|
5
|
-
tags: [workflow, code-quality, context]
|
|
6
|
-
dependencies: []
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
# Code Navigation Skill
|
|
10
|
-
|
|
11
|
-
## When to Use
|
|
12
|
-
|
|
13
|
-
- Exploring an unfamiliar codebase or module
|
|
14
|
-
- Tracing a function call across multiple files
|
|
15
|
-
- Understanding blast radius before a breaking change
|
|
16
|
-
- Planning edits that touch multiple files
|
|
17
|
-
|
|
18
|
-
## When NOT to Use
|
|
19
|
-
|
|
20
|
-
- Simple single-file edits where you already know the location
|
|
21
|
-
- Reading config or documentation files
|
|
22
|
-
|
|
23
|
-
## Core Principle
|
|
24
|
-
|
|
25
|
-
> Collapse multiple tool calls into fewer, smarter ones. Every unnecessary read or search wastes tokens and turns.
|
|
26
|
-
|
|
27
|
-
## Navigation Patterns
|
|
28
|
-
|
|
29
|
-
### Pattern 1: Search First, Read Second
|
|
30
|
-
|
|
31
|
-
**Wrong** (3-6 tool calls):
|
|
32
|
-
```
|
|
33
|
-
glob("*.ts") → read(file1) → "too big" → grep("functionName") → read(file2) → read(file3, section)
|
|
34
|
-
```
|
|
35
|
-
|
|
36
|
-
**Right** (1-2 tool calls):
|
|
37
|
-
```
|
|
38
|
-
grep("functionName", path: "src/") → read(exact_file, offset: line-10, limit: 30)
|
|
39
|
-
```
|
|
40
|
-
|
|
41
|
-
Start with search (grep, LSP findReferences) to locate, then read only what you need.
|
|
42
|
-
|
|
43
|
-
### Pattern 2: Multi-Symbol Search
|
|
44
|
-
|
|
45
|
-
When tracing a call chain (A calls B calls C), search for all symbols together:
|
|
46
|
-
```
|
|
47
|
-
grep({ pattern: "functionA|functionB|functionC", path: "src/" })
|
|
48
|
-
```
|
|
49
|
-
|
|
50
|
-
Or use LSP outgoingCalls to get the full call tree from a single point.
|
|
51
|
-
|
|
52
|
-
### Pattern 3: Don't Re-Read What You've Already Seen
|
|
53
|
-
|
|
54
|
-
**Anti-pattern**: Search returns full function body, then agent reads the same file again.
|
|
55
|
-
|
|
56
|
-
If search results already show the code you need, work from that output. Only re-read when:
|
|
57
|
-
- You need surrounding context (lines above/below the match)
|
|
58
|
-
- You need the exact content for editing (verify before edit)
|
|
59
|
-
- The search result was truncated
|
|
60
|
-
|
|
61
|
-
### Pattern 4: Blast Radius Check (Before Breaking Changes)
|
|
62
|
-
|
|
63
|
-
**WHEN**: Before renaming, removing, or changing the signature of an export.
|
|
64
|
-
**SKIP**: When adding new code, fixing internal bugs, or reading.
|
|
65
|
-
|
|
66
|
-
Steps:
|
|
67
|
-
1. `lsp({ operation: "findReferences" })` — find all callers
|
|
68
|
-
2. `lsp({ operation: "incomingCalls" })` — get the call hierarchy
|
|
69
|
-
3. Review each caller to assess impact
|
|
70
|
-
4. Plan edits from leaf callers inward (furthest dependencies first)
|
|
71
|
-
|
|
72
|
-
### Pattern 5: Context Locality
|
|
73
|
-
|
|
74
|
-
When editing a file, search results from the same directory/package are more likely relevant. Pass context when available:
|
|
75
|
-
- In grep: use `path: "src/same-module/"` to scope
|
|
76
|
-
- In LSP: operations are already file-scoped
|
|
77
|
-
- In tilth: pass `context` param to boost nearby results
|
|
78
|
-
|
|
79
|
-
### Pattern 6: Outline Before Deep Read
|
|
80
|
-
|
|
81
|
-
For large files (>200 lines), get the structure first:
|
|
82
|
-
```
|
|
83
|
-
lsp({ operation: "documentSymbol", filePath: "src/large-file.ts", line: 1, character: 1 })
|
|
84
|
-
```
|
|
85
|
-
|
|
86
|
-
This gives you function names + line ranges. Then read only the section you need with `offset` and `limit`.
|
|
87
|
-
|
|
88
|
-
### Pattern 7: Follow the Call Chain (Not the File Tree)
|
|
89
|
-
|
|
90
|
-
**Wrong**: Read files top-to-bottom hoping to understand the flow.
|
|
91
|
-
**Right**: Start from the entry point, follow function calls:
|
|
92
|
-
|
|
93
|
-
```
|
|
94
|
-
1. lsp({ operation: "goToDefinition" }) → find where it's defined
|
|
95
|
-
2. lsp({ operation: "outgoingCalls" }) → what does it call?
|
|
96
|
-
3. lsp({ operation: "goToDefinition" }) → follow the interesting callee
|
|
97
|
-
```
|
|
98
|
-
|
|
99
|
-
## With tilth MCP
|
|
100
|
-
|
|
101
|
-
When tilth is available, it provides superior navigation:
|
|
102
|
-
|
|
103
|
-
| Built-in Tool | tilth Equivalent | Advantage |
|
|
104
|
-
|---|---|---|
|
|
105
|
-
| `grep` + `read` | `tilth_search` (expand: 2) | Returns definitions with inline source — no second read needed |
|
|
106
|
-
| `glob` | `tilth_files` | Adds token estimates per file |
|
|
107
|
-
| `read` (large file) | `tilth_read` | Auto-outlines large files, shows structure |
|
|
108
|
-
| `lsp(incomingCalls)` | `tilth_search(kind: "callers")` | Cross-language structural caller detection |
|
|
109
|
-
| Manual tracing | `tilth_deps` | Shows imports + downstream callers before breaking changes |
|
|
110
|
-
|
|
111
|
-
**IMPORTANT**: If tilth is available, prefer it over built-in grep/glob/read for code navigation. Tilth's expanded search results include full source — do NOT re-read files already shown in search output.
|
|
112
|
-
|
|
113
|
-
## Cost Awareness
|
|
114
|
-
|
|
115
|
-
Every tool call has a token cost. Efficient navigation means:
|
|
116
|
-
- Fewer tool calls per task
|
|
117
|
-
- Less context consumed by redundant reads
|
|
118
|
-
- More budget available for actual implementation
|
|
119
|
-
|
|
120
|
-
**Target**: Find and understand any symbol in ≤3 tool calls, not 6+.
|
|
121
|
-
|
|
122
|
-
## Common Mistakes
|
|
123
|
-
|
|
124
|
-
| Mistake | Fix |
|
|
125
|
-
|---|---|
|
|
126
|
-
| Read entire large file | Use outline first, then section read |
|
|
127
|
-
| Search → read same code again | Work from search results directly |
|
|
128
|
-
| Trace calls one-by-one | Multi-symbol search or outgoingCalls |
|
|
129
|
-
| Explore randomly | Start from entry point, follow calls |
|
|
130
|
-
| Forget to check blast radius | Always check before signature changes |
|
|
@@ -1,171 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: mqdh
|
|
3
|
-
description: Use when building Meta Quest VR/AR apps, accessing Meta Horizon OS docs, or managing Quest devices via ADB. MUST load before any Meta XR development or documentation lookup.
|
|
4
|
-
mcp:
|
|
5
|
-
mqdh:
|
|
6
|
-
command: "${MQDH_MCP_PATH}"
|
|
7
|
-
args: []
|
|
8
|
-
version: 1.0.0
|
|
9
|
-
tags: [integration, mcp]
|
|
10
|
-
dependencies: []
|
|
11
|
-
---
|
|
12
|
-
|
|
13
|
-
# Meta Quest Developer Hub MCP
|
|
14
|
-
|
|
15
|
-
## When to Use
|
|
16
|
-
|
|
17
|
-
- When you need Meta Quest docs, ADB tooling, or device management via MQDH MCP.
|
|
18
|
-
|
|
19
|
-
## When NOT to Use
|
|
20
|
-
|
|
21
|
-
- When you are not working on Meta Quest/VR development or MQDH is unavailable.
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
## Prerequisites
|
|
25
|
-
|
|
26
|
-
### 1. Install MQDH
|
|
27
|
-
|
|
28
|
-
Download and install Meta Quest Developer Hub v6.2.1 or later:
|
|
29
|
-
|
|
30
|
-
- **macOS**: [Download MQDH for Mac](https://developers.meta.com/horizon/documentation/android-apps/meta-quest-developer-hub)
|
|
31
|
-
- **Windows**: [Download MQDH for Windows](https://developers.meta.com/horizon/documentation/android-apps/meta-quest-developer-hub)
|
|
32
|
-
|
|
33
|
-
### 2. Set MCP Path Environment Variable
|
|
34
|
-
|
|
35
|
-
The MCP server is bundled with MQDH. Set the path to the MCP executable:
|
|
36
|
-
|
|
37
|
-
**macOS:**
|
|
38
|
-
|
|
39
|
-
```bash
|
|
40
|
-
export MQDH_MCP_PATH="/Applications/Meta Quest Developer Hub.app/Contents/Resources/mcp-server"
|
|
41
|
-
```
|
|
42
|
-
|
|
43
|
-
**Windows:**
|
|
44
|
-
|
|
45
|
-
```powershell
|
|
46
|
-
$env:MQDH_MCP_PATH = "C:\Program Files\Meta Quest Developer Hub\resources\mcp-server.exe"
|
|
47
|
-
```
|
|
48
|
-
|
|
49
|
-
> **Note**: Paths may vary based on your installation. Check MQDH's AI Tools settings tab for the exact path.
|
|
50
|
-
|
|
51
|
-
### 3. Alternative: Use MQDH's Built-in Setup
|
|
52
|
-
|
|
53
|
-
MQDH v6.2.1+ includes an **AI Tools settings tab** with:
|
|
54
|
-
|
|
55
|
-
- One-click install for **Cursor** and **VS Code**
|
|
56
|
-
- Guided setup for Claude Desktop, Gemini CLI, Android Studio
|
|
57
|
-
- Manual configuration export for other tools
|
|
58
|
-
|
|
59
|
-
## Quick Start
|
|
60
|
-
|
|
61
|
-
After setting up the environment variable and loading this skill:
|
|
62
|
-
|
|
63
|
-
```
|
|
64
|
-
skill_mcp(skill_name="mqdh", list_tools=true)
|
|
65
|
-
```
|
|
66
|
-
|
|
67
|
-
Then invoke tools:
|
|
68
|
-
|
|
69
|
-
```
|
|
70
|
-
skill_mcp(skill_name="mqdh", tool_name="fetch_meta_quest_doc", arguments='{"query": "hand tracking setup"}')
|
|
71
|
-
```
|
|
72
|
-
|
|
73
|
-
## Available Tools
|
|
74
|
-
|
|
75
|
-
### fetch_meta_quest_doc
|
|
76
|
-
|
|
77
|
-
Search and retrieve Meta Horizon OS documentation.
|
|
78
|
-
|
|
79
|
-
| Parameter | Type | Required | Description |
|
|
80
|
-
| --------- | ------ | -------- | -------------------------- |
|
|
81
|
-
| `query` | string | Yes | Documentation search query |
|
|
82
|
-
|
|
83
|
-
**Example:**
|
|
84
|
-
|
|
85
|
-
```
|
|
86
|
-
skill_mcp(skill_name="mqdh", tool_name="fetch_meta_quest_doc", arguments='{"query": "passthrough API Unity"}')
|
|
87
|
-
```
|
|
88
|
-
|
|
89
|
-
### get_adb_path
|
|
90
|
-
|
|
91
|
-
Get the path to the bundled ADB executable.
|
|
92
|
-
|
|
93
|
-
**Example:**
|
|
94
|
-
|
|
95
|
-
```
|
|
96
|
-
skill_mcp(skill_name="mqdh", tool_name="get_adb_path", arguments='{}')
|
|
97
|
-
```
|
|
98
|
-
|
|
99
|
-
### device_list
|
|
100
|
-
|
|
101
|
-
List connected Quest devices.
|
|
102
|
-
|
|
103
|
-
**Example:**
|
|
104
|
-
|
|
105
|
-
```
|
|
106
|
-
skill_mcp(skill_name="mqdh", tool_name="device_list", arguments='{}')
|
|
107
|
-
```
|
|
108
|
-
|
|
109
|
-
### install_apk
|
|
110
|
-
|
|
111
|
-
Install an APK to a connected Quest device.
|
|
112
|
-
|
|
113
|
-
| Parameter | Type | Required | Description |
|
|
114
|
-
| ----------- | ------ | -------- | ---------------- |
|
|
115
|
-
| `apk_path` | string | Yes | Path to APK file |
|
|
116
|
-
| `device_id` | string | No | Target device ID |
|
|
117
|
-
|
|
118
|
-
**Example:**
|
|
119
|
-
|
|
120
|
-
```
|
|
121
|
-
skill_mcp(skill_name="mqdh", tool_name="install_apk", arguments='{"apk_path": "/path/to/app.apk"}')
|
|
122
|
-
```
|
|
123
|
-
|
|
124
|
-
## Use Cases
|
|
125
|
-
|
|
126
|
-
- **Documentation Lookup**: Quickly search Meta Horizon OS docs for APIs, best practices
|
|
127
|
-
- **Device Management**: List devices, install APKs, manage Quest headsets
|
|
128
|
-
- **Development Workflow**: Integrate ADB operations into AI-assisted development
|
|
129
|
-
- **Troubleshooting**: Find solutions in Meta's documentation
|
|
130
|
-
|
|
131
|
-
## Workflow Examples
|
|
132
|
-
|
|
133
|
-
### 1. Look Up API Documentation
|
|
134
|
-
|
|
135
|
-
```
|
|
136
|
-
# Search for hand tracking documentation
|
|
137
|
-
skill_mcp(skill_name="mqdh", tool_name="fetch_meta_quest_doc", arguments='{"query": "hand tracking gesture detection"}')
|
|
138
|
-
|
|
139
|
-
# Search for passthrough setup
|
|
140
|
-
skill_mcp(skill_name="mqdh", tool_name="fetch_meta_quest_doc", arguments='{"query": "mixed reality passthrough Unity"}')
|
|
141
|
-
```
|
|
142
|
-
|
|
143
|
-
### 2. Device Operations
|
|
144
|
-
|
|
145
|
-
```
|
|
146
|
-
# List connected devices
|
|
147
|
-
skill_mcp(skill_name="mqdh", tool_name="device_list", arguments='{}')
|
|
148
|
-
|
|
149
|
-
# Install a build
|
|
150
|
-
skill_mcp(skill_name="mqdh", tool_name="install_apk", arguments='{"apk_path": "/builds/myapp.apk", "device_id": "1234567890"}')
|
|
151
|
-
```
|
|
152
|
-
|
|
153
|
-
## Transport
|
|
154
|
-
|
|
155
|
-
This MCP uses **STDIO** transport to communicate with the LLM agent.
|
|
156
|
-
|
|
157
|
-
## Troubleshooting
|
|
158
|
-
|
|
159
|
-
**"Command not found"**: Verify `MQDH_MCP_PATH` points to the correct executable. Check MQDH's AI Tools settings for the exact path.
|
|
160
|
-
|
|
161
|
-
**"MQDH not installed"**: Download MQDH v6.2.1+ from [Meta Developer Portal](https://developers.meta.com/horizon/documentation/android-apps/meta-quest-developer-hub).
|
|
162
|
-
|
|
163
|
-
**"Device not found"**: Ensure your Quest is connected via USB and developer mode is enabled.
|
|
164
|
-
|
|
165
|
-
**One-click setup preferred**: Use MQDH's built-in AI Tools settings tab for automatic configuration with Cursor or VS Code.
|
|
166
|
-
|
|
167
|
-
## References
|
|
168
|
-
|
|
169
|
-
- [MQDH MCP Documentation](https://developers.meta.com/horizon/documentation/unity/ts-mqdh-mcp/)
|
|
170
|
-
- [Install MQDH](https://developers.meta.com/horizon/documentation/android-apps/meta-quest-developer-hub)
|
|
171
|
-
- [Meta Horizon OS Developer Docs](https://developers.meta.com/horizon/documentation/)
|