opencodekit 0.20.7 → 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.
Files changed (41) hide show
  1. package/dist/index.js +1 -1
  2. package/dist/template/.opencode/AGENTS.md +48 -0
  3. package/dist/template/.opencode/agent/build.md +3 -2
  4. package/dist/template/.opencode/agent/explore.md +14 -14
  5. package/dist/template/.opencode/agent/general.md +1 -1
  6. package/dist/template/.opencode/agent/plan.md +1 -1
  7. package/dist/template/.opencode/agent/review.md +1 -1
  8. package/dist/template/.opencode/agent/vision.md +0 -9
  9. package/dist/template/.opencode/memory.db +0 -0
  10. package/dist/template/.opencode/memory.db-shm +0 -0
  11. package/dist/template/.opencode/memory.db-wal +0 -0
  12. package/dist/template/.opencode/opencode.json +0 -5
  13. package/dist/template/.opencode/package.json +1 -1
  14. package/dist/template/.opencode/pnpm-lock.yaml +791 -9
  15. package/dist/template/.opencode/skill/api-and-interface-design/SKILL.md +162 -0
  16. package/dist/template/.opencode/skill/beads/SKILL.md +10 -9
  17. package/dist/template/.opencode/skill/beads/references/MULTI_AGENT.md +10 -10
  18. package/dist/template/.opencode/skill/ci-cd-and-automation/SKILL.md +202 -0
  19. package/dist/template/.opencode/skill/code-search-patterns/SKILL.md +253 -0
  20. package/dist/template/.opencode/skill/code-simplification/SKILL.md +211 -0
  21. package/dist/template/.opencode/skill/condition-based-waiting/SKILL.md +12 -0
  22. package/dist/template/.opencode/skill/defense-in-depth/SKILL.md +16 -6
  23. package/dist/template/.opencode/skill/deprecation-and-migration/SKILL.md +189 -0
  24. package/dist/template/.opencode/skill/development-lifecycle/SKILL.md +12 -48
  25. package/dist/template/.opencode/skill/documentation-and-adrs/SKILL.md +220 -0
  26. package/dist/template/.opencode/skill/incremental-implementation/SKILL.md +191 -0
  27. package/dist/template/.opencode/skill/performance-optimization/SKILL.md +236 -0
  28. package/dist/template/.opencode/skill/receiving-code-review/SKILL.md +11 -0
  29. package/dist/template/.opencode/skill/security-and-hardening/SKILL.md +296 -0
  30. package/dist/template/.opencode/skill/structured-edit/SKILL.md +10 -0
  31. package/dist/template/.opencode/skill/swarm-coordination/SKILL.md +66 -1
  32. package/package.json +1 -1
  33. package/dist/template/.opencode/skill/beads-bridge/SKILL.md +0 -321
  34. package/dist/template/.opencode/skill/code-navigation/SKILL.md +0 -130
  35. package/dist/template/.opencode/skill/mqdh/SKILL.md +0 -171
  36. package/dist/template/.opencode/skill/obsidian/SKILL.md +0 -192
  37. package/dist/template/.opencode/skill/obsidian/mcp.json +0 -22
  38. package/dist/template/.opencode/skill/pencil/SKILL.md +0 -72
  39. package/dist/template/.opencode/skill/ralph/SKILL.md +0 -296
  40. package/dist/template/.opencode/skill/tilth-cli/SKILL.md +0 -207
  41. 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/)