opencodekit 0.14.5 → 0.15.0
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/README.md +2 -2
- package/dist/index.js +100 -58
- package/dist/template/.opencode/.env.example +1 -0
- package/dist/template/.opencode/AGENTS.md +13 -24
- package/dist/template/.opencode/README.md +8 -119
- package/dist/template/.opencode/agent/explore.md +2 -3
- package/dist/template/.opencode/agent/general.md +56 -0
- package/dist/template/.opencode/agent/plan.md +54 -0
- package/dist/template/.opencode/agent/scout.md +15 -5
- package/dist/template/.opencode/command/analyze-project.md +2 -2
- package/dist/template/.opencode/command/brainstorm.md +1 -1
- package/dist/template/.opencode/command/design-audit.md +4 -5
- package/dist/template/.opencode/command/design.md +4 -13
- package/dist/template/.opencode/command/generate-pattern.md +2 -9
- package/dist/template/.opencode/command/implement.md +4 -4
- package/dist/template/.opencode/command/init.md +1 -1
- package/dist/template/.opencode/command/new-feature.md +2 -3
- package/dist/template/.opencode/command/plan.md +1 -1
- package/dist/template/.opencode/command/pr.md +0 -1
- package/dist/template/.opencode/command/research.md +20 -6
- package/dist/template/.opencode/command/restore-image.md +1 -9
- package/dist/template/.opencode/command/revert-feature.md +1 -1
- package/dist/template/.opencode/command/review-codebase.md +4 -4
- package/dist/template/.opencode/command/status.md +1 -2
- package/dist/template/.opencode/command/summarize.md +1 -2
- package/dist/template/.opencode/command/triage.md +4 -32
- package/dist/template/.opencode/dcp.jsonc +68 -68
- package/dist/template/.opencode/memory/_templates/README.md +35 -0
- package/dist/template/.opencode/memory/_templates/project/architecture.md +60 -0
- package/dist/template/.opencode/memory/_templates/project/commands.md +72 -0
- package/dist/template/.opencode/memory/_templates/project/conventions.md +68 -0
- package/dist/template/.opencode/memory/_templates/project/gotchas.md +41 -0
- package/dist/template/.opencode/memory/beads-workflow.md +30 -29
- package/dist/template/.opencode/memory/project/architecture.md +31 -50
- package/dist/template/.opencode/memory/project/commands.md +41 -22
- package/dist/template/.opencode/memory/project/conventions.md +39 -177
- package/dist/template/.opencode/memory/project/gotchas.md +21 -177
- package/dist/template/.opencode/memory/user.example.md +5 -0
- package/dist/template/.opencode/opencode.json +644 -533
- package/dist/template/.opencode/package.json +18 -21
- package/dist/template/.opencode/plugin/compaction.ts +79 -85
- package/dist/template/.opencode/plugin/env-ctx.ts +34 -0
- package/dist/template/.opencode/plugin/lib/notify.ts +41 -45
- package/dist/template/.opencode/plugin/lsp.ts +197 -200
- package/dist/template/.opencode/plugin/memory.ts +14 -112
- package/dist/template/.opencode/plugin/package.json +5 -5
- package/dist/template/.opencode/plugin/sessions.ts +1 -1
- package/dist/template/.opencode/plugin/skill-mcp.ts +486 -521
- package/dist/template/.opencode/plugin/truncator.ts +47 -50
- package/dist/template/.opencode/plugin/tsconfig.json +14 -14
- package/dist/template/.opencode/skill/chrome-devtools/mcp.json +17 -17
- package/dist/template/.opencode/skill/condition-based-waiting/SKILL.md +17 -12
- package/dist/template/.opencode/skill/condition-based-waiting/example.ts +63 -69
- package/dist/template/.opencode/skill/defense-in-depth/SKILL.md +14 -8
- package/dist/template/.opencode/skill/dispatching-parallel-agents/SKILL.md +14 -3
- package/dist/template/.opencode/skill/playwright/mcp.json +14 -14
- package/dist/template/.opencode/skill/receiving-code-review/SKILL.md +21 -8
- package/dist/template/.opencode/skill/requesting-code-review/review.md +14 -0
- package/dist/template/.opencode/skill/root-cause-tracing/SKILL.md +18 -4
- package/dist/template/.opencode/skill/source-code-research/SKILL.md +9 -7
- package/dist/template/.opencode/skill/test-driven-development/SKILL.md +49 -32
- package/dist/template/.opencode/skill/testing-anti-patterns/SKILL.md +40 -22
- package/dist/template/.opencode/skill/testing-skills-with-subagents/SKILL.md +46 -26
- package/dist/template/.opencode/skill/tool-priority/SKILL.md +117 -44
- package/dist/template/.opencode/skill/v0/SKILL.md +1 -7
- package/dist/template/.opencode/skill/verification-before-completion/SKILL.md +27 -19
- package/dist/template/.opencode/skill/writing-skills/anthropic-best-practices.md +171 -148
- package/dist/template/.opencode/skill/writing-skills/persuasion-principles.md +39 -6
- package/dist/template/.opencode/tool/memory-read.ts +44 -56
- package/dist/template/.opencode/tool/memory-search.ts +8 -291
- package/dist/template/.opencode/tool/memory-update.ts +47 -51
- package/dist/template/.opencode/tool/observation.ts +6 -180
- package/dist/template/.opencode/tsconfig.json +19 -19
- package/package.json +19 -15
- package/dist/template/.opencode/.background-tasks.json +0 -114
- package/dist/template/.opencode/.ralph-state.json +0 -12
- package/dist/template/.opencode/agent/build.md +0 -327
- package/dist/template/.opencode/agent/planner.md +0 -281
- package/dist/template/.opencode/agent/rush.md +0 -223
- package/dist/template/.opencode/memory/handoffs/README.md +0 -83
- package/dist/template/.opencode/memory/observations/.gitkeep +0 -0
- package/dist/template/.opencode/memory/observations/2026-01-09-pattern-ampcode-mcp-json-includetools-pattern.md +0 -42
- package/dist/template/.opencode/memory/vector_db/memories.lance/_transactions/0-0d25ba80-ba3b-4209-9046-b45d6093b4da.txn +0 -0
- package/dist/template/.opencode/memory/vector_db/memories.lance/_versions/1.manifest +0 -0
- package/dist/template/.opencode/memory/vector_db/memories.lance/data/1111100101010101011010004a9ef34df6b29f36a9a53a2892.lance +0 -0
- package/dist/template/.opencode/tool/ast-grep.ts +0 -245
- package/dist/template/.opencode/tool/background.ts +0 -509
- package/dist/template/.opencode/tool/bd-inbox.ts +0 -110
- package/dist/template/.opencode/tool/bd-msg.ts +0 -62
- package/dist/template/.opencode/tool/bd-release.ts +0 -71
- package/dist/template/.opencode/tool/bd-reserve.ts +0 -121
- package/dist/template/.opencode/tool/memory-embed.ts +0 -183
- package/dist/template/.opencode/tool/memory-index.ts +0 -769
- package/dist/template/.opencode/tool/repo-map.ts +0 -451
|
@@ -1,206 +1,68 @@
|
|
|
1
1
|
---
|
|
2
|
-
purpose: Code patterns, commit style,
|
|
3
|
-
updated:
|
|
2
|
+
purpose: Code patterns, commit style, team conventions
|
|
3
|
+
updated: { { DATE } }
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Project Conventions
|
|
7
7
|
|
|
8
8
|
## Code Style
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
- **Python**: 3.10+, type hints required, dataclasses for config, pathlib for paths
|
|
12
|
-
- **Imports**: Group stdlib, third-party, local imports
|
|
13
|
-
- **Naming**: PascalCase classes, snake_case functions/variables, UPPER_CASE constants
|
|
10
|
+
### TypeScript
|
|
14
11
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
## PR Process
|
|
20
|
-
|
|
21
|
-
<!-- Review requirements, CI checks, merge strategy -->
|
|
22
|
-
|
|
23
|
-
## OpenCode Configuration Patterns (v1.1.2+)
|
|
24
|
-
|
|
25
|
-
### Permission Structure Best Practice
|
|
26
|
-
|
|
27
|
-
```jsonc
|
|
28
|
-
{
|
|
29
|
-
"permission": {
|
|
30
|
-
"bash": {
|
|
31
|
-
"*": "allow", // 1. Base rule first (catch-all)
|
|
32
|
-
"git status*": "allow", // 2. Safe operations whitelisted
|
|
33
|
-
"git diff*": "allow",
|
|
34
|
-
"npm *": "allow",
|
|
35
|
-
"rm*": "deny", // 3. Dangerous operations denied
|
|
36
|
-
"sudo*": "deny",
|
|
37
|
-
},
|
|
38
|
-
"read": {
|
|
39
|
-
".env": "deny", // 4. Protect secrets
|
|
40
|
-
".env.example": "allow", // But allow examples
|
|
41
|
-
},
|
|
42
|
-
},
|
|
43
|
-
}
|
|
44
|
-
```
|
|
45
|
-
|
|
46
|
-
### LSP Tool Strategy
|
|
47
|
-
|
|
48
|
-
**This project uses built-in experimental LSP** (`experimental.lsp: true`).
|
|
49
|
-
|
|
50
|
-
| Tool | Purpose |
|
|
51
|
-
| --------------------------- | ---------------------------- |
|
|
52
|
-
| `lsp_lsp_hover` | Type info and docs at cursor |
|
|
53
|
-
| `lsp_lsp_goto_definition` | Jump to symbol definition |
|
|
54
|
-
| `lsp_lsp_find_references` | Find all usages |
|
|
55
|
-
| `lsp_lsp_rename` | Rename across codebase |
|
|
56
|
-
| `lsp_lsp_code_actions` | Get available refactorings |
|
|
57
|
-
| `lsp_lsp_code_action_apply` | Apply a code action |
|
|
58
|
-
| `lsp_lsp_diagnostics` | Get errors/warnings |
|
|
59
|
-
| `lsp_lsp_document_symbols` | File outline |
|
|
60
|
-
| `lsp_lsp_workspace_symbols` | Search symbols |
|
|
61
|
-
| `lsp_lsp_organize_imports` | Clean up imports |
|
|
62
|
-
|
|
63
|
-
### DCP Configuration Tiers
|
|
64
|
-
|
|
65
|
-
| Tier | Strategies | nudgeFrequency | turnProtection | Use When |
|
|
66
|
-
| ---------------- | ------------------ | -------------- | -------------- | ---------------------------- |
|
|
67
|
-
| **Aggressive** | All enabled | 8 | 3 | Long sessions, context-heavy |
|
|
68
|
-
| **Conservative** | Deduplication only | 12+ | 6+ | Safety-first, debugging |
|
|
69
|
-
| **Balanced** | All enabled | 10 | 4 | Default, general use |
|
|
70
|
-
|
|
71
|
-
### Protected Tools Pattern
|
|
72
|
-
|
|
73
|
-
Always protect these tools from auto-pruning:
|
|
74
|
-
|
|
75
|
-
```jsonc
|
|
76
|
-
"protectedTools": [
|
|
77
|
-
// State-modifying
|
|
78
|
-
"write", "edit", "skill_mcp", "bd_sync",
|
|
79
|
-
// Metadata
|
|
80
|
-
"memory-search", "memory-update", "observation", "todowrite", "todoread",
|
|
81
|
-
// Task management
|
|
82
|
-
"task", "batch",
|
|
83
|
-
// LSP (if using plugin)
|
|
84
|
-
"lsp_lsp_find_references", "lsp_lsp_goto_definition"
|
|
85
|
-
]
|
|
86
|
-
```
|
|
12
|
+
- **Module**: ESNext, bundler moduleResolution
|
|
13
|
+
- **Strict**: Disabled
|
|
14
|
+
- **Imports**: Group stdlib, third-party, local
|
|
87
15
|
|
|
88
|
-
###
|
|
16
|
+
### Python
|
|
89
17
|
|
|
90
|
-
|
|
18
|
+
- **Version**: 3.10+
|
|
19
|
+
- **Style**: type hints required, dataclasses for config
|
|
91
20
|
|
|
92
|
-
|
|
93
|
-
"chat.message": async (input, output) => {
|
|
94
|
-
const { message, parts } = output;
|
|
95
|
-
if (message.role !== "user") return;
|
|
96
|
-
|
|
97
|
-
// 1. Detect trigger keywords
|
|
98
|
-
const fullText = parts.map(p => p.text).join(" ");
|
|
99
|
-
if (!fullText.match(/trigger pattern/)) return;
|
|
100
|
-
|
|
101
|
-
// 2. Inject synthetic prompt
|
|
102
|
-
parts.push({
|
|
103
|
-
type: "text",
|
|
104
|
-
text: "━━━━━━━━\n[TRIGGER DETECTED]\nAction required: ...\n━━━━━━━━",
|
|
105
|
-
synthetic: true
|
|
106
|
-
});
|
|
107
|
-
}
|
|
108
|
-
```
|
|
21
|
+
## Naming Conventions
|
|
109
22
|
|
|
110
|
-
|
|
23
|
+
| Type | Convention | Example |
|
|
24
|
+
| --------- | ---------- | ----------------- |
|
|
25
|
+
| Classes | PascalCase | `UserService` |
|
|
26
|
+
| Functions | snake_case | `get_user_data()` |
|
|
27
|
+
| Variables | snake_case | `user_data` |
|
|
28
|
+
| Constants | UPPER_CASE | `MAX_RETRIES` |
|
|
29
|
+
| Files | kebab-case | `user-service.ts` |
|
|
111
30
|
|
|
112
|
-
##
|
|
31
|
+
## Import Order
|
|
113
32
|
|
|
114
|
-
|
|
33
|
+
```typescript
|
|
34
|
+
// 1. Node.js stdlib
|
|
35
|
+
import fs from "node:fs/promises";
|
|
36
|
+
import path from "node:path";
|
|
115
37
|
|
|
116
|
-
|
|
38
|
+
// 2. Third-party
|
|
39
|
+
import { cli } from "cac";
|
|
40
|
+
import { log } from "@clack/prompts";
|
|
117
41
|
|
|
42
|
+
// 3. Local
|
|
43
|
+
import { initCommand } from "./commands/init.js";
|
|
118
44
|
```
|
|
119
|
-
grep/read → LSP → understand → THEN edit
|
|
120
|
-
```
|
|
121
|
-
|
|
122
|
-
**After EVERY grep/glob/read that returns code files:**
|
|
123
45
|
|
|
124
|
-
|
|
125
|
-
2. **IMMEDIATELY** call `lsp` with `findReferences` on symbols you'll modify
|
|
126
|
-
3. **IMMEDIATELY** call `lsp` with `goToDefinition` to trace dependencies
|
|
127
|
-
4. **USE** additional LSP operations as needed:
|
|
128
|
-
- `hover` - Get type info and documentation
|
|
129
|
-
- `goToImplementation` - Find implementations of interface/abstract
|
|
130
|
-
- `workspaceSymbol` - Search symbols across entire workspace
|
|
131
|
-
- `prepareCallHierarchy` - Get call hierarchy item at position
|
|
132
|
-
- `incomingCalls` - Find what calls this function
|
|
133
|
-
- `outgoingCalls` - Find what this function calls
|
|
134
|
-
5. **ONLY THEN** proceed with edits
|
|
135
|
-
|
|
136
|
-
**Example - The Correct Flow:**
|
|
46
|
+
## Commit Messages
|
|
137
47
|
|
|
138
48
|
```
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
# Step 1: Read the file
|
|
142
|
-
read({ filePath: "src/auth.ts" })
|
|
49
|
+
type(scope): subject
|
|
143
50
|
|
|
144
|
-
|
|
145
|
-
lsp({ operation: "documentSymbol", filePath: "src/auth.ts", line: 1, character: 1 })
|
|
146
|
-
lsp({ operation: "findReferences", filePath: "src/auth.ts", line: 42, character: 10 })
|
|
147
|
-
lsp({ operation: "goToDefinition", filePath: "src/auth.ts", line: 42, character: 10 })
|
|
148
|
-
lsp({ operation: "hover", filePath: "src/auth.ts", line: 42, character: 10 })
|
|
149
|
-
lsp({ operation: "incomingCalls", filePath: "src/auth.ts", line: 42, character: 10 })
|
|
150
|
-
lsp({ operation: "outgoingCalls", filePath: "src/auth.ts", line: 42, character: 10 })
|
|
51
|
+
body (optional)
|
|
151
52
|
|
|
152
|
-
|
|
153
|
-
edit({ filePath: "src/auth.ts", ... })
|
|
53
|
+
footer (optional)
|
|
154
54
|
```
|
|
155
55
|
|
|
156
|
-
**
|
|
56
|
+
**Types**: `feat`, `fix`, `docs`, `style`, `refactor`, `test`, `chore`
|
|
157
57
|
|
|
158
|
-
|
|
159
|
-
- grep/read only gives you text (no understanding of relationships)
|
|
160
|
-
- Editing without LSP context leads to broken refactors
|
|
58
|
+
## Code Review
|
|
161
59
|
|
|
162
|
-
**
|
|
163
|
-
|
|
164
|
-
-
|
|
165
|
-
- ❌ `grep → edit` (WRONG - no LSP)
|
|
166
|
-
- ✅ `read → LSP → edit` (CORRECT)
|
|
167
|
-
- ✅ `grep → read → LSP → edit` (CORRECT)
|
|
60
|
+
- **Self-review**: Run lint/typecheck before PR
|
|
61
|
+
- **Test coverage**: Add tests for new features
|
|
62
|
+
- **Docs**: Update README for user-facing changes
|
|
168
63
|
|
|
169
64
|
## Patterns to Avoid
|
|
170
65
|
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
// DON'T: Causes tool duplication and naming confusion
|
|
175
|
-
{
|
|
176
|
-
"experimental": { "lsp": true }, // Built-in: lsp_lsp_*
|
|
177
|
-
// AND .opencode/tool/lsp.ts // Custom: lsp_*
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
// DO: Use built-in only (recommended for this project)
|
|
181
|
-
{
|
|
182
|
-
"experimental": { "lsp": true }
|
|
183
|
-
}
|
|
184
|
-
// Delete any custom .opencode/tool/lsp.ts
|
|
185
|
-
```
|
|
186
|
-
|
|
187
|
-
### Anti-Pattern: Over-Restrictive Permissions
|
|
188
|
-
|
|
189
|
-
```jsonc
|
|
190
|
-
// DON'T: Blocks legitimate workflow
|
|
191
|
-
{
|
|
192
|
-
"bash": { "git *": "ask" } // Every git command asks
|
|
193
|
-
}
|
|
194
|
-
|
|
195
|
-
// DO: Whitelist safe, ask dangerous
|
|
196
|
-
{
|
|
197
|
-
"bash": {
|
|
198
|
-
"git status*": "allow",
|
|
199
|
-
"git diff*": "allow",
|
|
200
|
-
"git log*": "allow",
|
|
201
|
-
"git commit*": "ask",
|
|
202
|
-
"git push*": "ask",
|
|
203
|
-
"git reset*": "ask"
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
```
|
|
66
|
+
- Premature abstraction
|
|
67
|
+
- Circular dependencies
|
|
68
|
+
- Magic numbers/strings
|
|
@@ -1,197 +1,41 @@
|
|
|
1
1
|
---
|
|
2
2
|
purpose: Footguns, edge cases, and "don't forget this" warnings
|
|
3
|
-
updated:
|
|
3
|
+
updated: { { DATE } }
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Project Gotchas
|
|
7
7
|
|
|
8
8
|
## Configuration Quirks
|
|
9
9
|
|
|
10
|
-
###
|
|
10
|
+
### Field Name
|
|
11
11
|
|
|
12
|
-
**
|
|
12
|
+
**Issue**: What goes wrong
|
|
13
|
+
**Fix**: How to handle it
|
|
13
14
|
|
|
14
|
-
|
|
15
|
-
- **Config precedence fix**: Local `.opencode/opencode.json` now correctly overrides remote/global config
|
|
16
|
-
- **`.claude` loading toggle**: Can disable via `--no-claude-prompts` / `--no-claude-skills` flags
|
|
17
|
-
- **Task tool filtering**: Simplified subagent filtering
|
|
15
|
+
## Dependencies
|
|
18
16
|
|
|
19
|
-
|
|
17
|
+
### Package Name
|
|
20
18
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
- **OpenTUI v0.1.70**: UI improvements
|
|
25
|
-
|
|
26
|
-
**Plugin SDK Update Required:**
|
|
27
|
-
|
|
28
|
-
```json
|
|
29
|
-
"@opencode-ai/plugin": "^1.1.8" // Was ^1.1.2
|
|
30
|
-
```
|
|
31
|
-
|
|
32
|
-
### DCP Protected Tools (v1.1.8)
|
|
33
|
-
|
|
34
|
-
Legacy `bd_*` tool names don't exist - use actual custom tool names:
|
|
35
|
-
|
|
36
|
-
| Old (Wrong) | New (Correct) |
|
|
37
|
-
| ----------------- | ------------- |
|
|
38
|
-
| `bd_init` | N/A (use CLI) |
|
|
39
|
-
| `bd_claim` | N/A (use CLI) |
|
|
40
|
-
| `bd_reserve` | `bd-reserve` |
|
|
41
|
-
| `bd_reservations` | `bd-release` |
|
|
42
|
-
| `bd_sync` | N/A (use CLI) |
|
|
43
|
-
|
|
44
|
-
### DCP v1.1.3 Schema Breaking Changes
|
|
45
|
-
|
|
46
|
-
1. **Legacy `strategies.onIdle` removed**: v1.1.2+ no longer supports this field
|
|
47
|
-
- Error: `Unknown keys: strategies.onIdle`
|
|
48
|
-
- Fix: Remove the entire `onIdle` block from `dcp.jsonc`
|
|
49
|
-
|
|
50
|
-
2. **Permission model changed**: v1.1.1+ deprecated legacy `tools: { write: true }` boolean syntax
|
|
51
|
-
- Old: Global `tools: {}` with booleans
|
|
52
|
-
- New: `permission: {}` with `"allow"` / `"ask"` / `"deny"` actions
|
|
53
|
-
- Both still work for backwards compatibility, but new syntax preferred
|
|
54
|
-
|
|
55
|
-
### OpenCode v1.1.2 New Features
|
|
56
|
-
|
|
57
|
-
- `compaction.auto` and `compaction.prune` are NEW - enable both for long sessions
|
|
58
|
-
- `experimental.continue_loop_on_deny` - controls agent behavior after permission denial
|
|
59
|
-
- `cargo-fmt` formatter support added for Rust projects
|
|
60
|
-
|
|
61
|
-
## Non-Obvious Dependencies
|
|
62
|
-
|
|
63
|
-
### LSP Tool Naming Convention
|
|
64
|
-
|
|
65
|
-
- OpenCode built-in LSP uses `lsp_lsp_*` prefix (e.g., `lsp_lsp_rename`, `lsp_lsp_hover`)
|
|
66
|
-
- Requires `experimental.lsp: true` in opencode.json
|
|
67
|
-
- **This project uses built-in LSP** (custom plugin removed for simplicity)
|
|
68
|
-
- Custom plugins would use `lsp_*` prefix - avoid mixing both
|
|
69
|
-
|
|
70
|
-
### Protected Tools in DCP
|
|
71
|
-
|
|
72
|
-
v1.1.8 recognizes more tool variants. Ensure these are protected:
|
|
73
|
-
|
|
74
|
-
```jsonc
|
|
75
|
-
"protectedTools": [
|
|
76
|
-
// State-modifying
|
|
77
|
-
"write", "edit", "question",
|
|
78
|
-
// Memory/observation
|
|
79
|
-
"memory-read", "memory-update", "memory-search", "observation",
|
|
80
|
-
// Skills/tasks
|
|
81
|
-
"skill", "skill_mcp", "task", "batch", "todowrite", "todoread",
|
|
82
|
-
// LSP
|
|
83
|
-
"lsp", "lsp_lsp_rename", "lsp_lsp_find_references", "lsp_lsp_goto_definition",
|
|
84
|
-
"lsp_lsp_code_actions", "lsp_lsp_code_action_apply", "lsp_lsp_organize_imports",
|
|
85
|
-
// Beads (custom tools only - CLI uses bash)
|
|
86
|
-
"bd-reserve", "bd-release", "bd-msg", "bd-inbox"
|
|
87
|
-
]
|
|
88
|
-
```
|
|
19
|
+
**Version**: x.y.z
|
|
20
|
+
**Why Required**: Purpose
|
|
21
|
+
**Gotcha**: Edge case or limitation
|
|
89
22
|
|
|
90
23
|
## Time Wasters
|
|
91
24
|
|
|
92
|
-
###
|
|
93
|
-
|
|
94
|
-
If DCP plugin throws "Unknown keys" errors:
|
|
95
|
-
|
|
96
|
-
1. Check OpenCode version (`opencode --version`)
|
|
97
|
-
2. Compare against [DCP schema](https://github.com/opencode/dcp) for your version
|
|
98
|
-
3. Remove deprecated fields - don't try to "fix" them
|
|
99
|
-
|
|
100
|
-
### Permission Debugging
|
|
101
|
-
|
|
102
|
-
If tools are unexpectedly blocked:
|
|
103
|
-
|
|
104
|
-
1. Check global config: `~/.config/opencode/opencode.json`
|
|
105
|
-
2. Check project config: `.opencode/opencode.json`
|
|
106
|
-
3. Project config takes precedence
|
|
107
|
-
4. Use `"*": "ask"` as base rule to debug which pattern is matching
|
|
108
|
-
|
|
109
|
-
## Beads Gotchas
|
|
110
|
-
|
|
111
|
-
### Architecture: CLI + Custom Tools
|
|
112
|
-
|
|
113
|
-
**Beads CLI** (`bd`) handles all issue tracking natively with `--json` output.
|
|
114
|
-
|
|
115
|
-
**Custom Tools** (`.opencode/tool/bd-*.ts`) provide agent-specific features NOT in CLI:
|
|
116
|
-
|
|
117
|
-
| Tool | Purpose |
|
|
118
|
-
| ------------ | --------------------------------- |
|
|
119
|
-
| `bd-reserve` | Atomic file locking (mkdir-based) |
|
|
120
|
-
| `bd-release` | Release locks / list active locks |
|
|
121
|
-
| `bd-msg` | Send messages to other agents |
|
|
122
|
-
| `bd-inbox` | Read messages, mark as read |
|
|
123
|
-
|
|
124
|
-
### CLI for Everything Else
|
|
125
|
-
|
|
126
|
-
Use bash tool with `bd` CLI directly:
|
|
127
|
-
|
|
128
|
-
```bash
|
|
129
|
-
bd ready --json # Find unblocked tasks
|
|
130
|
-
bd create "Title" -p 2 # Create task
|
|
131
|
-
bd update bd-xxx --status in_progress # Claim
|
|
132
|
-
bd close bd-xxx --reason "Done" # Complete
|
|
133
|
-
bd sync # Push to git
|
|
134
|
-
```
|
|
135
|
-
|
|
136
|
-
### Agent Workflow Pattern
|
|
137
|
-
|
|
138
|
-
```bash
|
|
139
|
-
# 1. Find work
|
|
140
|
-
bd ready --json
|
|
141
|
-
|
|
142
|
-
# 2. Claim task
|
|
143
|
-
bd update bd-xxx --status in_progress
|
|
144
|
-
|
|
145
|
-
# 3. Lock files (custom tool)
|
|
146
|
-
bd-reserve({ paths: ["src/foo.ts"] })
|
|
147
|
-
|
|
148
|
-
# 4. Do work...
|
|
149
|
-
|
|
150
|
-
# 5. Release + close + sync
|
|
151
|
-
bd-release({ paths: ["src/foo.ts"] })
|
|
152
|
-
bd close bd-xxx --reason "Completed: description"
|
|
153
|
-
bd sync
|
|
154
|
-
```
|
|
155
|
-
|
|
156
|
-
### Hash-Based IDs Prevent Collisions
|
|
157
|
-
|
|
158
|
-
Beads uses hash IDs (`bd-a3f8`) not sequential IDs (`bd-1`, `bd-2`). This eliminates merge conflicts when multiple agents create issues on different branches.
|
|
159
|
-
|
|
160
|
-
Don't assume sequential IDs. Always use `bd show` to get exact IDs.
|
|
161
|
-
|
|
162
|
-
### `bd ready` Is Your Friend
|
|
163
|
-
|
|
164
|
-
`bd ready` shows tasks with NO unresolved blockers. Use it to find work instead of `bd list`.
|
|
165
|
-
|
|
166
|
-
### Dependencies Block Work
|
|
167
|
-
|
|
168
|
-
```bash
|
|
169
|
-
bd dep add bd-child bd-parent --type blocks
|
|
170
|
-
```
|
|
171
|
-
|
|
172
|
-
Now `bd-child` won't appear in `bd ready` until `bd-parent` closes. Check `bd blocked` to see what's waiting.
|
|
173
|
-
|
|
174
|
-
### Git Is The Coordination Layer
|
|
175
|
-
|
|
176
|
-
No central server. Agents coordinate via:
|
|
177
|
-
|
|
178
|
-
1. Issue status (in_progress = claimed)
|
|
179
|
-
2. Git branches
|
|
180
|
-
3. `bd sync` to push/pull changes
|
|
181
|
-
|
|
182
|
-
### Sandbox Environments (Claude Code, etc.)
|
|
25
|
+
### Issue Description
|
|
183
26
|
|
|
184
|
-
|
|
27
|
+
**Symptoms**: What you'll see
|
|
28
|
+
**Cause**: Root cause
|
|
29
|
+
**Fix**: Solution
|
|
185
30
|
|
|
186
|
-
|
|
187
|
-
bd --sandbox ready
|
|
188
|
-
# Or: bd --no-daemon --no-auto-flush --no-auto-import list
|
|
189
|
-
```
|
|
31
|
+
## Common Errors
|
|
190
32
|
|
|
191
|
-
|
|
33
|
+
| Error Message | Cause | Fix |
|
|
34
|
+
| ------------- | ------ | --------- |
|
|
35
|
+
| "Error: ..." | Reason | Fix steps |
|
|
192
36
|
|
|
193
|
-
|
|
37
|
+
## TODO
|
|
194
38
|
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
39
|
+
- [ ] Document more edge cases
|
|
40
|
+
- [ ] Add troubleshooting section
|
|
41
|
+
- [ ] List known issues
|
|
@@ -6,16 +6,21 @@ updated: 2024-12-21
|
|
|
6
6
|
# User Profile
|
|
7
7
|
|
|
8
8
|
## Identity
|
|
9
|
+
|
|
9
10
|
<!-- Name, role, git contributor identity -->
|
|
10
11
|
|
|
11
12
|
## Communication Preferences
|
|
13
|
+
|
|
12
14
|
<!-- Concise vs detailed, tone preferences -->
|
|
13
15
|
|
|
14
16
|
## Workflow Preferences
|
|
17
|
+
|
|
15
18
|
<!-- Preferred tools, testing habits, review style -->
|
|
16
19
|
|
|
17
20
|
## Technical Preferences
|
|
21
|
+
|
|
18
22
|
<!-- Languages, frameworks, patterns they favor -->
|
|
19
23
|
|
|
20
24
|
## Things to Remember
|
|
25
|
+
|
|
21
26
|
<!-- Personal quirks, pet peeves, preferences learned -->
|