opencodekit 0.16.8 → 0.16.10
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 +5 -5
- package/dist/template/.opencode/command/plan.md +30 -30
- package/dist/template/.opencode/command/review-codebase.md +2 -2
- package/dist/template/.opencode/command/start.md +3 -3
- package/dist/template/.opencode/command/status.md +14 -14
- package/dist/template/.opencode/command/ui-review.md +1 -1
- package/dist/template/.opencode/command/verify.md +3 -3
- package/dist/template/.opencode/dcp.jsonc +7 -9
- package/dist/template/.opencode/memory/_templates/prd.md +1 -1
- package/dist/template/.opencode/opencode.json +113 -95
- package/dist/template/.opencode/package.json +2 -2
- package/dist/template/.opencode/plugin/compaction.ts +86 -80
- package/dist/template/.opencode/skill/development-lifecycle/SKILL.md +5 -5
- package/dist/template/.opencode/skill/gemini-large-context/SKILL.md +2 -2
- package/dist/template/.opencode/skill/jira/SKILL.md +146 -0
- package/dist/template/.opencode/skill/jira/mcp.json +14 -0
- package/dist/template/.opencode/skill/memory-system/SKILL.md +1 -1
- package/dist/template/.opencode/skill/prd/SKILL.md +1 -1
- package/dist/template/.opencode/skill/prd-task/SKILL.md +2 -2
- package/dist/template/.opencode/skill/prd-task/references/prd-schema.json +1 -1
- package/dist/template/.opencode/skill/source-code-research/SKILL.md +7 -7
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -759,7 +759,7 @@ var cac = (name = "") => new CAC(name);
|
|
|
759
759
|
// package.json
|
|
760
760
|
var package_default = {
|
|
761
761
|
name: "opencodekit",
|
|
762
|
-
version: "0.16.
|
|
762
|
+
version: "0.16.10",
|
|
763
763
|
description: "CLI tool for bootstrapping and managing OpenCodeKit projects",
|
|
764
764
|
keywords: ["agents", "cli", "mcp", "opencode", "opencodekit", "template"],
|
|
765
765
|
license: "MIT",
|
|
@@ -9255,16 +9255,16 @@ var MODEL_PRESETS = {
|
|
|
9255
9255
|
}
|
|
9256
9256
|
},
|
|
9257
9257
|
recommend: {
|
|
9258
|
-
model: "
|
|
9258
|
+
model: "opencode/kimi-k2.5-free",
|
|
9259
9259
|
agents: {
|
|
9260
|
-
build: "github-copilot/claude-opus-4.
|
|
9260
|
+
build: "github-copilot/claude-opus-4.6",
|
|
9261
9261
|
plan: "github-copilot/gpt-5.2-codex",
|
|
9262
9262
|
review: "github-copilot/gpt-5.2-codex",
|
|
9263
9263
|
explore: "proxypal/gemini-3-flash-preview",
|
|
9264
|
-
general: "opencode/
|
|
9264
|
+
general: "opencode/minimax-m2.1-free",
|
|
9265
9265
|
looker: "proxypal/gemini-3-flash-preview",
|
|
9266
9266
|
vision: "proxypal/gemini-3-pro-preview",
|
|
9267
|
-
scout: "
|
|
9267
|
+
scout: "proxypal/gemini-3-flash-preview",
|
|
9268
9268
|
painter: "proxypal/gemini-3-pro-image-preview"
|
|
9269
9269
|
}
|
|
9270
9270
|
}
|
|
@@ -292,24 +292,24 @@ PARENT=$ARGUMENTS
|
|
|
292
292
|
|
|
293
293
|
# Task 1 (no blockers - starts immediately)
|
|
294
294
|
br create "[Task 1 title]" --type task --priority 2
|
|
295
|
-
# Capture:
|
|
295
|
+
# Capture: br-xxx1
|
|
296
296
|
|
|
297
297
|
# Link to parent
|
|
298
|
-
br dep add
|
|
298
|
+
br dep add br-xxx1 $PARENT
|
|
299
299
|
|
|
300
300
|
# Task 2 (blocked by Task 1)
|
|
301
301
|
br create "[Task 2 title]" --type task --priority 2
|
|
302
|
-
# Capture:
|
|
302
|
+
# Capture: br-xxx2
|
|
303
303
|
|
|
304
|
-
br dep add
|
|
305
|
-
br dep add
|
|
304
|
+
br dep add br-xxx2 $PARENT
|
|
305
|
+
br dep add br-xxx2 br-xxx1 # br-xxx2 blocked by br-xxx1
|
|
306
306
|
|
|
307
307
|
# Task 3 (blocked by Task 2)
|
|
308
308
|
br create "[Task 3 title]" --type task --priority 2
|
|
309
|
-
# Capture:
|
|
309
|
+
# Capture: br-xxx3
|
|
310
310
|
|
|
311
|
-
br dep add
|
|
312
|
-
br dep add
|
|
311
|
+
br dep add br-xxx3 $PARENT
|
|
312
|
+
br dep add br-xxx3 br-xxx2 # br-xxx3 blocked by br-xxx2
|
|
313
313
|
```
|
|
314
314
|
|
|
315
315
|
### Create Subtasks (for complex tasks)
|
|
@@ -317,15 +317,15 @@ br dep add bd-xxx3 bd-xxx2 # bd-xxx3 blocked by bd-xxx2
|
|
|
317
317
|
```bash
|
|
318
318
|
# For Task 2, create subtasks:
|
|
319
319
|
br create "[Subtask 2.1 title]" --type subtask --priority 2
|
|
320
|
-
# Capture:
|
|
320
|
+
# Capture: br-xxx2.1
|
|
321
321
|
|
|
322
|
-
br dep add
|
|
322
|
+
br dep add br-xxx2.1 br-xxx2
|
|
323
323
|
|
|
324
324
|
br create "[Subtask 2.2 title]" --type subtask --priority 2
|
|
325
|
-
# Capture:
|
|
325
|
+
# Capture: br-xxx2.2
|
|
326
326
|
|
|
327
|
-
br dep add
|
|
328
|
-
br dep add
|
|
327
|
+
br dep add br-xxx2.2 br-xxx2
|
|
328
|
+
br dep add br-xxx2.2 br-xxx2.1 # Sequential dependency
|
|
329
329
|
```
|
|
330
330
|
|
|
331
331
|
### Verify Hierarchy
|
|
@@ -351,11 +351,11 @@ Write `.beads/artifacts/$ARGUMENTS/plan.md`:
|
|
|
351
351
|
```
|
|
352
352
|
|
|
353
353
|
$ARGUMENTS (Epic/Task)
|
|
354
|
-
├──
|
|
355
|
-
├──
|
|
356
|
-
│ ├──
|
|
357
|
-
│ └──
|
|
358
|
-
└──
|
|
354
|
+
├── br-xxx1: [Title] [S] ← READY
|
|
355
|
+
├── br-xxx2: [Title] [M] → blocked by br-xxx1
|
|
356
|
+
│ ├── br-xxx2.1: [Subtask] [S]
|
|
357
|
+
│ └── br-xxx2.2: [Subtask] [S] → blocked by br-xxx2.1
|
|
358
|
+
└── br-xxx3: [Title] [S] → blocked by br-xxx2
|
|
359
359
|
|
|
360
360
|
```
|
|
361
361
|
|
|
@@ -363,7 +363,7 @@ $ARGUMENTS (Epic/Task)
|
|
|
363
363
|
|
|
364
364
|
## Task 1: [Title] [S]
|
|
365
365
|
|
|
366
|
-
**Bead:**
|
|
366
|
+
**Bead:** br-xxx1
|
|
367
367
|
**Estimate:** ~10 tool calls (30 min)
|
|
368
368
|
**Blocked by:** None
|
|
369
369
|
|
|
@@ -380,7 +380,7 @@ $ARGUMENTS (Epic/Task)
|
|
|
380
380
|
|
|
381
381
|
## Task 2: [Title] [M]
|
|
382
382
|
|
|
383
|
-
**Bead:**
|
|
383
|
+
**Bead:** br-xxx2
|
|
384
384
|
**Estimate:** ~30 tool calls (1-2 hours)
|
|
385
385
|
**Blocked by:** Task 1
|
|
386
386
|
|
|
@@ -388,7 +388,7 @@ $ARGUMENTS (Epic/Task)
|
|
|
388
388
|
|
|
389
389
|
### 2.1: [Subtask Title] [S]
|
|
390
390
|
|
|
391
|
-
**Bead:**
|
|
391
|
+
**Bead:** br-xxx2.1
|
|
392
392
|
**Files:** `src/bar.ts`
|
|
393
393
|
**Changes:**
|
|
394
394
|
- [ ] [Specific change]
|
|
@@ -397,7 +397,7 @@ $ARGUMENTS (Epic/Task)
|
|
|
397
397
|
|
|
398
398
|
### 2.2: [Subtask Title] [S]
|
|
399
399
|
|
|
400
|
-
**Bead:**
|
|
400
|
+
**Bead:** br-xxx2.2
|
|
401
401
|
**Blocked by:** 2.1
|
|
402
402
|
**Files:** `src/baz.ts`
|
|
403
403
|
**Changes:**
|
|
@@ -409,7 +409,7 @@ $ARGUMENTS (Epic/Task)
|
|
|
409
409
|
|
|
410
410
|
## Task 3: [Title] [S]
|
|
411
411
|
|
|
412
|
-
**Bead:**
|
|
412
|
+
**Bead:** br-xxx3
|
|
413
413
|
**Estimate:** ~10 tool calls (30 min)
|
|
414
414
|
**Blocked by:** Task 2
|
|
415
415
|
|
|
@@ -517,19 +517,19 @@ Approach: [Selected option]
|
|
|
517
517
|
Total estimate: ~N tool calls ([X-Y hours])
|
|
518
518
|
|
|
519
519
|
Hierarchy:
|
|
520
|
-
├──
|
|
521
|
-
├──
|
|
522
|
-
│ ├──
|
|
523
|
-
│ └──
|
|
524
|
-
└──
|
|
520
|
+
├── br-xxx1: [Title] [S] ← READY
|
|
521
|
+
├── br-xxx2: [Title] [M] → blocked by br-xxx1
|
|
522
|
+
│ ├── br-xxx2.1: [Subtask] [S]
|
|
523
|
+
│ └── br-xxx2.2: [Subtask] [S]
|
|
524
|
+
└── br-xxx3: [Title] [S] → blocked by br-xxx2
|
|
525
525
|
|
|
526
526
|
Artifacts:
|
|
527
527
|
├── .beads/artifacts/$ARGUMENTS/design.md
|
|
528
528
|
└── .beads/artifacts/$ARGUMENTS/plan.md
|
|
529
529
|
|
|
530
|
-
Ready to start:
|
|
530
|
+
Ready to start: br-xxx1
|
|
531
531
|
|
|
532
|
-
Next: /start
|
|
532
|
+
Next: /start br-xxx1
|
|
533
533
|
```
|
|
534
534
|
|
|
535
535
|
---
|
|
@@ -35,7 +35,7 @@ Parse `$ARGUMENTS` to determine what to review:
|
|
|
35
35
|
| Input | Scope | How to Get Code |
|
|
36
36
|
| ------------------------ | ---------------------- | ------------------------------------------- |
|
|
37
37
|
| File/directory path | That path only | `read` or `glob` + `read` |
|
|
38
|
-
| Bead ID (e.g., `
|
|
38
|
+
| Bead ID (e.g., `br-123`) | Implementation vs spec | `br show` then `git diff` from spec |
|
|
39
39
|
| PR number (e.g., `#45`) | PR changes | `gh pr diff 45` |
|
|
40
40
|
| `all` or empty | Recent changes | `git diff main...HEAD` or `git diff HEAD~5` |
|
|
41
41
|
|
|
@@ -200,7 +200,7 @@ Skip creating beads for Minor issues (just report them).
|
|
|
200
200
|
/review-codebase src/auth/login.ts
|
|
201
201
|
|
|
202
202
|
# Review against a bead spec
|
|
203
|
-
/review-codebase
|
|
203
|
+
/review-codebase br-feature-auth
|
|
204
204
|
|
|
205
205
|
# Review a PR
|
|
206
206
|
/review-codebase #45
|
|
@@ -127,9 +127,9 @@ git checkout -b "$BRANCH_NAME" 2>/dev/null || echo "Branch already exists or alr
|
|
|
127
127
|
**Branch naming convention:**
|
|
128
128
|
| Parent Branch | Bead Type | Example |
|
|
129
129
|
|---------------|-----------|---------|
|
|
130
|
-
| main | bug | `main/fix/
|
|
131
|
-
| develop | feature | `develop/feat/
|
|
132
|
-
| release-v2 | chore | `release-v2/chore/
|
|
130
|
+
| main | bug | `main/fix/br-a1b2-login-error` |
|
|
131
|
+
| develop | feature | `develop/feat/br-c3d4-user-auth` |
|
|
132
|
+
| release-v2 | chore | `release-v2/chore/br-e5f6-update-deps` |
|
|
133
133
|
|
|
134
134
|
### Option B: Git Worktree (if --worktree flag)
|
|
135
135
|
|
|
@@ -112,18 +112,18 @@ IN PROGRESS
|
|
|
112
112
|
━━━━━━━━━━━
|
|
113
113
|
ID │ Priority │ Title │ Assignee │ Age
|
|
114
114
|
─────────┼──────────┼──────────────────────────┼──────────┼────────
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
115
|
+
br-abc12 │ P0 │ Fix auth regression │ user │ 2h
|
|
116
|
+
br-def34 │ P1 │ Add user dashboard │ user │ 1d
|
|
117
|
+
br-ghi56 │ P2 │ Refactor logging │ user │ 3h
|
|
118
118
|
|
|
119
119
|
|
|
120
120
|
READY TO START
|
|
121
121
|
━━━━━━━━━━━━━━
|
|
122
122
|
ID │ Priority │ Title │ Blocked By
|
|
123
123
|
─────────┼──────────┼──────────────────────────┼───────────
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
124
|
+
br-xyz11 │ P1 │ Add notifications │ -
|
|
125
|
+
br-xyz22 │ P2 │ Update API docs │ -
|
|
126
|
+
br-xyz33 │ P2 │ Add analytics │ br-abc12
|
|
127
127
|
|
|
128
128
|
|
|
129
129
|
GIT STATUS
|
|
@@ -164,11 +164,11 @@ TASK COMPLIANCE
|
|
|
164
164
|
[Check .beads/artifacts/<id>/ for each in-progress task]
|
|
165
165
|
|
|
166
166
|
Complete (spec + plan):
|
|
167
|
-
✓
|
|
168
|
-
✓
|
|
167
|
+
✓ br-abc12: Fix auth regression
|
|
168
|
+
✓ br-def34: Add user dashboard
|
|
169
169
|
|
|
170
170
|
Incomplete:
|
|
171
|
-
⚠
|
|
171
|
+
⚠ br-ghi56: Missing plan.md
|
|
172
172
|
|
|
173
173
|
Compliance: 2/3 (67%)
|
|
174
174
|
|
|
@@ -186,7 +186,7 @@ REQUIRED ACTIONS
|
|
|
186
186
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
187
187
|
Priority │ Action │ Command
|
|
188
188
|
─────────┼─────────────────────────────────────┼────────────────────
|
|
189
|
-
HIGH │ Add plan for
|
|
189
|
+
HIGH │ Add plan for br-ghi56 │ /plan br-ghi56
|
|
190
190
|
MEDIUM │ Review 2 stale tasks │ /triage --stale
|
|
191
191
|
LOW │ Push 2 local commits │ git push
|
|
192
192
|
|
|
@@ -300,7 +300,7 @@ staging-deploy │ ✓ Passing │ 1d ago
|
|
|
300
300
|
|
|
301
301
|
Failed Check: feature/auth
|
|
302
302
|
└── Jest tests: 2 failures in auth.test.ts
|
|
303
|
-
└── Fix: /implement
|
|
303
|
+
└── Fix: /implement br-abc12 (related task)
|
|
304
304
|
```
|
|
305
305
|
|
|
306
306
|
## Examples
|
|
@@ -324,13 +324,13 @@ RECOMMENDED NEXT STEPS
|
|
|
324
324
|
Based on current status:
|
|
325
325
|
|
|
326
326
|
1. High Priority Messages:
|
|
327
|
-
→ Reply to build-1:
|
|
327
|
+
→ Reply to build-1: br msg --to "build-1" --subj "Re: API spec" --body "..."
|
|
328
328
|
|
|
329
329
|
2. Continue In-Progress Work:
|
|
330
|
-
→ /implement
|
|
330
|
+
→ /implement br-abc12 (P0, 2h old)
|
|
331
331
|
|
|
332
332
|
3. Start Ready Tasks:
|
|
333
|
-
→ /start
|
|
333
|
+
→ /start br-xyz11 (P1, unblocked)
|
|
334
334
|
|
|
335
335
|
4. Session Maintenance:
|
|
336
336
|
→ Consider /handoff if switching tasks
|
|
@@ -302,7 +302,7 @@ br dep add <task-id> <bead-id>
|
|
|
302
302
|
/ui-review src/components/Card.tsx --responsive
|
|
303
303
|
|
|
304
304
|
# Review and link to bead
|
|
305
|
-
/ui-review screenshots/dashboard.png --bead=
|
|
305
|
+
/ui-review screenshots/dashboard.png --bead=br-feature-123
|
|
306
306
|
|
|
307
307
|
# Full review with dark mode
|
|
308
308
|
/ui-review app/page.tsx --responsive --dark-mode
|
|
@@ -287,13 +287,13 @@ Cannot proceed until:
|
|
|
287
287
|
|
|
288
288
|
```bash
|
|
289
289
|
# Full verification
|
|
290
|
-
/verify
|
|
290
|
+
/verify br-feature-auth
|
|
291
291
|
|
|
292
292
|
# Quick check (gates only)
|
|
293
|
-
/verify
|
|
293
|
+
/verify br-feature-auth --quick
|
|
294
294
|
|
|
295
295
|
# Verify and auto-fix where possible
|
|
296
|
-
/verify
|
|
296
|
+
/verify br-feature-auth --fix
|
|
297
297
|
```
|
|
298
298
|
|
|
299
299
|
---
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
|
-
"$schema": "https://raw.githubusercontent.com/Opencode-DCP/opencode-dynamic-context-pruning/
|
|
2
|
+
"$schema": "https://raw.githubusercontent.com/Opencode-DCP/opencode-dynamic-context-pruning/master/dcp.schema.json",
|
|
3
3
|
"enabled": true,
|
|
4
4
|
"debug": false,
|
|
5
5
|
// "minimal" shows prune activity without noise; "detailed" shows token counts
|
|
6
6
|
"pruneNotification": "off",
|
|
7
|
-
// "chat" (in-conversation) or "toast" (system notification)
|
|
7
|
+
// "chat" (in-conversation) or "toast" (system notification)
|
|
8
8
|
"pruneNotificationType": "chat",
|
|
9
9
|
// Commands: /dcp context, /dcp stats, /dcp sweep
|
|
10
10
|
"commands": {
|
|
@@ -47,19 +47,17 @@
|
|
|
47
47
|
"todoread"
|
|
48
48
|
]
|
|
49
49
|
},
|
|
50
|
-
//
|
|
50
|
+
// v2.0.0: permission model - "allow", "ask", or "deny"
|
|
51
51
|
"prune": {
|
|
52
|
-
"
|
|
52
|
+
"permission": "allow"
|
|
53
53
|
},
|
|
54
|
-
// Beta: renamed from "extract" - distills key findings before removing
|
|
55
54
|
"distill": {
|
|
56
|
-
"
|
|
55
|
+
"permission": "allow",
|
|
57
56
|
"showDistillation": false
|
|
58
57
|
},
|
|
59
|
-
// Beta: NEW - collapses range of messages + tools into single summary
|
|
60
58
|
"compress": {
|
|
61
|
-
"
|
|
62
|
-
"showCompression":
|
|
59
|
+
"permission": "ask",
|
|
60
|
+
"showCompression": false
|
|
63
61
|
}
|
|
64
62
|
},
|
|
65
63
|
"strategies": {
|
|
@@ -138,122 +138,98 @@
|
|
|
138
138
|
"question": "allow",
|
|
139
139
|
"read": {
|
|
140
140
|
"*": "allow",
|
|
141
|
-
"*credentials*": "deny",
|
|
142
141
|
"*.env": "deny",
|
|
143
142
|
"*.env.*": "deny",
|
|
144
143
|
"*.env.example": "allow",
|
|
145
144
|
"*.key": "deny",
|
|
146
145
|
"*.pem": "deny",
|
|
146
|
+
"*credentials*": "deny",
|
|
147
147
|
"*password*": "deny",
|
|
148
148
|
"*secret*": "deny",
|
|
149
149
|
"*token*": "deny"
|
|
150
150
|
}
|
|
151
151
|
},
|
|
152
152
|
"plugin": [
|
|
153
|
-
"@tarquinen/opencode-dcp@
|
|
153
|
+
"@tarquinen/opencode-dcp@latest",
|
|
154
154
|
"@franlol/opencode-md-table-formatter@0.0.3"
|
|
155
155
|
],
|
|
156
156
|
"provider": {
|
|
157
|
-
"
|
|
157
|
+
"github-copilot": {
|
|
158
158
|
"models": {
|
|
159
|
-
"
|
|
160
|
-
"
|
|
161
|
-
|
|
162
|
-
"
|
|
159
|
+
"claude-haiku-4.5": {
|
|
160
|
+
"attachment": true,
|
|
161
|
+
"options": {
|
|
162
|
+
"thinking_budget": 10000,
|
|
163
|
+
"type": "enabled"
|
|
163
164
|
},
|
|
164
|
-
"temperature": true,
|
|
165
165
|
"reasoning": true,
|
|
166
|
+
"temperature": true,
|
|
166
167
|
"tool_call": true,
|
|
167
|
-
"options": {
|
|
168
|
-
"thinking": {
|
|
169
|
-
"type": "enabled",
|
|
170
|
-
"budgetTokens": 8192,
|
|
171
|
-
"reasoning_effort": "high"
|
|
172
|
-
},
|
|
173
|
-
"interleaved": {
|
|
174
|
-
"field": "reasoning_content"
|
|
175
|
-
}
|
|
176
|
-
},
|
|
177
168
|
"variants": {
|
|
178
169
|
"high": {
|
|
179
170
|
"options": {
|
|
180
|
-
"
|
|
181
|
-
"type": "enabled"
|
|
182
|
-
"reasoning_effort": "high"
|
|
183
|
-
},
|
|
184
|
-
"interleaved": {
|
|
185
|
-
"field": "reasoning_content"
|
|
171
|
+
"thinking_budget": 8000,
|
|
172
|
+
"type": "enabled"
|
|
186
173
|
}
|
|
187
174
|
},
|
|
188
175
|
"max": {
|
|
189
176
|
"options": {
|
|
190
|
-
"
|
|
191
|
-
"type": "enabled"
|
|
192
|
-
"reasoning_effort": "high"
|
|
193
|
-
},
|
|
194
|
-
"interleaved": {
|
|
195
|
-
"field": "reasoning_content"
|
|
177
|
+
"thinking_budget": 16000,
|
|
178
|
+
"type": "enabled"
|
|
196
179
|
}
|
|
197
180
|
}
|
|
198
181
|
}
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
},
|
|
202
|
-
"github-copilot": {
|
|
203
|
-
"models": {
|
|
204
|
-
"claude-haiku-4.5": {
|
|
182
|
+
},
|
|
183
|
+
"claude-opus-4.5": {
|
|
205
184
|
"attachment": true,
|
|
185
|
+
"options": {
|
|
186
|
+
"thinking_budget": 10000
|
|
187
|
+
},
|
|
206
188
|
"reasoning": true,
|
|
207
189
|
"temperature": true,
|
|
208
190
|
"tool_call": true,
|
|
209
|
-
"options": {
|
|
210
|
-
"thinking_budget": 10000,
|
|
211
|
-
"type": "enabled"
|
|
212
|
-
},
|
|
213
191
|
"variants": {
|
|
214
192
|
"high": {
|
|
215
193
|
"options": {
|
|
216
|
-
"thinking_budget": 8000
|
|
217
|
-
"type": "enabled"
|
|
194
|
+
"thinking_budget": 8000
|
|
218
195
|
}
|
|
219
196
|
},
|
|
220
197
|
"max": {
|
|
221
198
|
"options": {
|
|
222
|
-
"thinking_budget": 16000
|
|
223
|
-
"type": "enabled"
|
|
199
|
+
"thinking_budget": 16000
|
|
224
200
|
}
|
|
225
201
|
}
|
|
226
202
|
}
|
|
227
203
|
},
|
|
228
|
-
"claude-opus-4.
|
|
204
|
+
"claude-opus-4.6": {
|
|
229
205
|
"attachment": true,
|
|
206
|
+
"options": {
|
|
207
|
+
"thinking_budget": 16000
|
|
208
|
+
},
|
|
230
209
|
"reasoning": true,
|
|
231
210
|
"temperature": true,
|
|
232
211
|
"tool_call": true,
|
|
233
|
-
"options": {
|
|
234
|
-
"thinking_budget": 10000
|
|
235
|
-
},
|
|
236
212
|
"variants": {
|
|
237
213
|
"high": {
|
|
238
214
|
"options": {
|
|
239
|
-
"thinking_budget":
|
|
215
|
+
"thinking_budget": 24000
|
|
240
216
|
}
|
|
241
217
|
},
|
|
242
218
|
"max": {
|
|
243
219
|
"options": {
|
|
244
|
-
"thinking_budget":
|
|
220
|
+
"thinking_budget": 32000
|
|
245
221
|
}
|
|
246
222
|
}
|
|
247
223
|
}
|
|
248
224
|
},
|
|
249
225
|
"claude-sonnet-4.5": {
|
|
250
226
|
"attachment": true,
|
|
251
|
-
"reasoning": true,
|
|
252
|
-
"temperature": true,
|
|
253
|
-
"tool_call": true,
|
|
254
227
|
"options": {
|
|
255
228
|
"thinking_budget": 10000
|
|
256
229
|
},
|
|
230
|
+
"reasoning": true,
|
|
231
|
+
"temperature": true,
|
|
232
|
+
"tool_call": true,
|
|
257
233
|
"variants": {
|
|
258
234
|
"high": {
|
|
259
235
|
"options": {
|
|
@@ -269,19 +245,19 @@
|
|
|
269
245
|
},
|
|
270
246
|
"gpt-5.2": {
|
|
271
247
|
"attachment": true,
|
|
272
|
-
"reasoning": true,
|
|
273
|
-
"temperature": true,
|
|
274
|
-
"tool_call": true,
|
|
275
248
|
"options": {
|
|
276
249
|
"reasoningEffort": "medium",
|
|
277
250
|
"reasoningSummary": "auto",
|
|
278
251
|
"textVerbosity": "medium"
|
|
279
252
|
},
|
|
253
|
+
"reasoning": true,
|
|
254
|
+
"temperature": true,
|
|
255
|
+
"tool_call": true,
|
|
280
256
|
"variants": {
|
|
281
257
|
"high": {
|
|
258
|
+
"include": ["reasoning.encrypted_content"],
|
|
282
259
|
"reasoningEffort": "high",
|
|
283
|
-
"reasoningSummary": "auto"
|
|
284
|
-
"include": ["reasoning.encrypted_content"]
|
|
260
|
+
"reasoningSummary": "auto"
|
|
285
261
|
},
|
|
286
262
|
"low": {
|
|
287
263
|
"reasoningEffort": "low",
|
|
@@ -295,23 +271,23 @@
|
|
|
295
271
|
},
|
|
296
272
|
"gpt-5.2-codex": {
|
|
297
273
|
"attachment": true,
|
|
298
|
-
"reasoning": true,
|
|
299
|
-
"temperature": true,
|
|
300
|
-
"tool_call": true,
|
|
301
274
|
"options": {
|
|
302
275
|
"reasoningEffort": "medium",
|
|
303
276
|
"reasoningSummary": "auto",
|
|
304
277
|
"textVerbosity": "medium"
|
|
305
278
|
},
|
|
279
|
+
"reasoning": true,
|
|
280
|
+
"temperature": true,
|
|
281
|
+
"tool_call": true,
|
|
306
282
|
"variants": {
|
|
307
283
|
"fast": {
|
|
308
284
|
"disabled": true
|
|
309
285
|
},
|
|
310
286
|
"high": {
|
|
287
|
+
"include": ["reasoning.encrypted_content"],
|
|
311
288
|
"reasoningEffort": "high",
|
|
312
289
|
"reasoningSummary": "auto",
|
|
313
|
-
"textVerbosity": "medium"
|
|
314
|
-
"include": ["reasoning.encrypted_content"]
|
|
290
|
+
"textVerbosity": "medium"
|
|
315
291
|
},
|
|
316
292
|
"low": {
|
|
317
293
|
"reasoningEffort": "low",
|
|
@@ -326,6 +302,51 @@
|
|
|
326
302
|
}
|
|
327
303
|
}
|
|
328
304
|
},
|
|
305
|
+
"kimi-for-coding": {
|
|
306
|
+
"models": {
|
|
307
|
+
"k2p5": {
|
|
308
|
+
"limit": {
|
|
309
|
+
"context": 262144,
|
|
310
|
+
"output": 32768
|
|
311
|
+
},
|
|
312
|
+
"options": {
|
|
313
|
+
"interleaved": {
|
|
314
|
+
"field": "reasoning_content"
|
|
315
|
+
},
|
|
316
|
+
"thinking": {
|
|
317
|
+
"budgetTokens": 8192,
|
|
318
|
+
"reasoning_effort": "high",
|
|
319
|
+
"type": "enabled"
|
|
320
|
+
}
|
|
321
|
+
},
|
|
322
|
+
"reasoning": true,
|
|
323
|
+
"temperature": true,
|
|
324
|
+
"tool_call": true,
|
|
325
|
+
"variants": {
|
|
326
|
+
"high": {
|
|
327
|
+
"interleaved": {
|
|
328
|
+
"field": "reasoning_content"
|
|
329
|
+
},
|
|
330
|
+
"options": {
|
|
331
|
+
"reasoning_effort": "high",
|
|
332
|
+
"thinkingBudget": 16384,
|
|
333
|
+
"type": "enabled"
|
|
334
|
+
}
|
|
335
|
+
},
|
|
336
|
+
"max": {
|
|
337
|
+
"interleaved": {
|
|
338
|
+
"field": "reasoning_content"
|
|
339
|
+
},
|
|
340
|
+
"options": {
|
|
341
|
+
"reasoning_effort": "high",
|
|
342
|
+
"thinkingBudget": 32768,
|
|
343
|
+
"type": "enabled"
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
},
|
|
329
350
|
"openai": {
|
|
330
351
|
"models": {
|
|
331
352
|
"gpt-5.2": {
|
|
@@ -384,38 +405,38 @@
|
|
|
384
405
|
"context": 262144,
|
|
385
406
|
"output": 32768
|
|
386
407
|
},
|
|
387
|
-
"temperature": true,
|
|
388
|
-
"reasoning": true,
|
|
389
|
-
"tool_call": true,
|
|
390
408
|
"options": {
|
|
391
|
-
"thinking": {
|
|
392
|
-
"type": "enabled",
|
|
393
|
-
"budgetTokens": 8192,
|
|
394
|
-
"reasoning_effort": "high"
|
|
395
|
-
},
|
|
396
409
|
"interleaved": {
|
|
397
410
|
"field": "reasoning_content"
|
|
411
|
+
},
|
|
412
|
+
"thinking": {
|
|
413
|
+
"budgetTokens": 8192,
|
|
414
|
+
"reasoning_effort": "high",
|
|
415
|
+
"type": "enabled"
|
|
398
416
|
}
|
|
399
417
|
},
|
|
418
|
+
"reasoning": true,
|
|
419
|
+
"temperature": true,
|
|
420
|
+
"tool_call": true,
|
|
400
421
|
"variants": {
|
|
401
422
|
"high": {
|
|
402
|
-
"options": {
|
|
403
|
-
"thinkingBudget": 16384,
|
|
404
|
-
"type": "enabled",
|
|
405
|
-
"reasoning_effort": "high"
|
|
406
|
-
},
|
|
407
423
|
"interleaved": {
|
|
408
424
|
"field": "reasoning_content"
|
|
425
|
+
},
|
|
426
|
+
"options": {
|
|
427
|
+
"reasoning_effort": "high",
|
|
428
|
+
"thinkingBudget": 16384,
|
|
429
|
+
"type": "enabled"
|
|
409
430
|
}
|
|
410
431
|
},
|
|
411
432
|
"max": {
|
|
412
|
-
"options": {
|
|
413
|
-
"thinkingBudget": 32768,
|
|
414
|
-
"type": "enabled",
|
|
415
|
-
"reasoning_effort": "high"
|
|
416
|
-
},
|
|
417
433
|
"interleaved": {
|
|
418
434
|
"field": "reasoning_content"
|
|
435
|
+
},
|
|
436
|
+
"options": {
|
|
437
|
+
"reasoning_effort": "high",
|
|
438
|
+
"thinkingBudget": 32768,
|
|
439
|
+
"type": "enabled"
|
|
419
440
|
}
|
|
420
441
|
}
|
|
421
442
|
}
|
|
@@ -724,6 +745,17 @@
|
|
|
724
745
|
},
|
|
725
746
|
"reasoning": true
|
|
726
747
|
},
|
|
748
|
+
"gpt-5.3-codex": {
|
|
749
|
+
"limit": {
|
|
750
|
+
"context": 400000,
|
|
751
|
+
"output": 32768
|
|
752
|
+
},
|
|
753
|
+
"name": "Gpt 5 3 Codex",
|
|
754
|
+
"options": {
|
|
755
|
+
"reasoningEffort": "medium"
|
|
756
|
+
},
|
|
757
|
+
"reasoning": true
|
|
758
|
+
},
|
|
727
759
|
"gpt-oss-120b-medium": {
|
|
728
760
|
"limit": {
|
|
729
761
|
"context": 128000,
|
|
@@ -752,20 +784,6 @@
|
|
|
752
784
|
},
|
|
753
785
|
"name": "Kiro Claude Haiku 4 5 Agentic"
|
|
754
786
|
},
|
|
755
|
-
"kiro-claude-opus-4-5": {
|
|
756
|
-
"limit": {
|
|
757
|
-
"context": 200000,
|
|
758
|
-
"output": 64000
|
|
759
|
-
},
|
|
760
|
-
"name": "Kiro Claude Opus 4 5"
|
|
761
|
-
},
|
|
762
|
-
"kiro-claude-opus-4-5-agentic": {
|
|
763
|
-
"limit": {
|
|
764
|
-
"context": 200000,
|
|
765
|
-
"output": 64000
|
|
766
|
-
},
|
|
767
|
-
"name": "Kiro Claude Opus 4 5 Agentic"
|
|
768
|
-
},
|
|
769
787
|
"kiro-claude-sonnet-4": {
|
|
770
788
|
"limit": {
|
|
771
789
|
"context": 200000,
|
|
@@ -11,11 +11,11 @@
|
|
|
11
11
|
"type-check": "tsc --noEmit"
|
|
12
12
|
},
|
|
13
13
|
"dependencies": {
|
|
14
|
-
"@opencode-ai/plugin": "1.1.
|
|
14
|
+
"@opencode-ai/plugin": "1.1.53"
|
|
15
15
|
},
|
|
16
16
|
"devDependencies": {
|
|
17
17
|
"@types/node": "^25.1.0",
|
|
18
18
|
"bun-types": "^1.3.8",
|
|
19
19
|
"typescript": "^5.9.3"
|
|
20
20
|
}
|
|
21
|
-
}
|
|
21
|
+
}
|
|
@@ -20,83 +20,89 @@
|
|
|
20
20
|
import type { Plugin } from "@opencode-ai/plugin";
|
|
21
21
|
|
|
22
22
|
export const CompactionPlugin: Plugin = async ({ $, directory }) => {
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
23
|
+
const MEMORY_DIR = `${directory}/.opencode/memory`;
|
|
24
|
+
const HANDOFF_DIR = `${MEMORY_DIR}/handoffs`;
|
|
25
|
+
|
|
26
|
+
return {
|
|
27
|
+
"experimental.session.compacting": async (input, output) => {
|
|
28
|
+
// 1. Load session context (CONTINUITY.md pattern) - HIGHEST PRIORITY
|
|
29
|
+
let sessionContext = "";
|
|
30
|
+
try {
|
|
31
|
+
const sessionFile = `${MEMORY_DIR}/session-context.md`;
|
|
32
|
+
const content = await $`cat ${sessionFile} 2>/dev/null`.text();
|
|
33
|
+
if (content.trim()) {
|
|
34
|
+
sessionContext = `\n## Session Continuity (Compaction-Safe)\n${content}`;
|
|
35
|
+
}
|
|
36
|
+
} catch {
|
|
37
|
+
// No session context yet
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
// 2. Load project memory files
|
|
41
|
+
let memoryContext = "";
|
|
42
|
+
try {
|
|
43
|
+
const memoryFiles =
|
|
44
|
+
await $`find ${MEMORY_DIR}/project -name '*.md' -type f 2>/dev/null | head -10`.quiet();
|
|
45
|
+
if (memoryFiles.stdout) {
|
|
46
|
+
const files = memoryFiles.stdout.toString().trim().split("\n");
|
|
47
|
+
for (const file of files) {
|
|
48
|
+
const content = await $`cat ${file}`.text();
|
|
49
|
+
if (content.trim() && !content.includes("<!-- ")) {
|
|
50
|
+
const name = file.split("/").pop()?.replace(".md", "");
|
|
51
|
+
memoryContext += `\n## Project ${name}\n${content}`;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
} catch {
|
|
56
|
+
// Memory dir doesn't exist or other error
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
// 3. Inject beads in-progress state
|
|
60
|
+
let beadsContext = "";
|
|
61
|
+
try {
|
|
62
|
+
const result =
|
|
63
|
+
await $`cd ${directory} && br list --status in_progress --json 2>/dev/null`.quiet();
|
|
64
|
+
if (result.stdout) {
|
|
65
|
+
const inProgress = JSON.parse(result.stdout.toString());
|
|
66
|
+
if (inProgress.length > 0) {
|
|
67
|
+
beadsContext = `\n## Active Beads (In Progress)\n${inProgress.map((b: { id: string; title: string }) => `- ${b.id}: ${b.title}`).join("\n")}`;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
} catch {
|
|
71
|
+
// Beads not available, skip
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
// 4. Load most recent handoff file (session continuity)
|
|
75
|
+
let handoffContext = "";
|
|
76
|
+
try {
|
|
77
|
+
const result =
|
|
78
|
+
await $`ls -t ${HANDOFF_DIR}/*.md 2>/dev/null | head -1`.quiet();
|
|
79
|
+
if (result.stdout) {
|
|
80
|
+
const handoffPath = result.stdout.toString().trim();
|
|
81
|
+
if (handoffPath) {
|
|
82
|
+
const handoffContent = await $`cat ${handoffPath}`.text();
|
|
83
|
+
handoffContext = `\n## Previous Session Handoff\n\n${handoffContent}\n\n**IMPORTANT**: Resume work from where previous session left off.`;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
} catch {
|
|
87
|
+
// No handoff files, skip
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
// Inject all context - session context FIRST (most important)
|
|
91
|
+
const allContext = [
|
|
92
|
+
sessionContext,
|
|
93
|
+
beadsContext,
|
|
94
|
+
handoffContext,
|
|
95
|
+
memoryContext,
|
|
96
|
+
]
|
|
97
|
+
.filter(Boolean)
|
|
98
|
+
.join("\n");
|
|
99
|
+
|
|
100
|
+
if (allContext) {
|
|
101
|
+
output.context.push(`## Session Context\n${allContext}\n`);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
// Append workflow-specific rules to OpenCode's default prompt
|
|
105
|
+
output.prompt = `${output.prompt}
|
|
100
106
|
|
|
101
107
|
## Additional Rules for This Workflow
|
|
102
108
|
|
|
@@ -123,7 +129,7 @@ Update session-context.md when:
|
|
|
123
129
|
After compaction: Check session-context.md, ask 1-3 targeted questions if gaps exist.
|
|
124
130
|
|
|
125
131
|
### Beads Workflow
|
|
126
|
-
- PRESERVE: Bead IDs (
|
|
132
|
+
- PRESERVE: Bead IDs (br-xxx format), bead states, in-progress task IDs
|
|
127
133
|
- DROP: Closed/completed beads (already tracked in git)
|
|
128
134
|
|
|
129
135
|
### TodoWrite Items
|
|
@@ -141,6 +147,6 @@ If you discover:
|
|
|
141
147
|
- PRESERVE: File paths (file:line_number), user constraints, decisions, UNCONFIRMED items
|
|
142
148
|
- DROP: Failed attempts, superseded info, verbose tool outputs, exploration dead-ends
|
|
143
149
|
`;
|
|
144
|
-
|
|
145
|
-
|
|
150
|
+
},
|
|
151
|
+
};
|
|
146
152
|
};
|
|
@@ -263,23 +263,23 @@ User: "I want to add a dark mode toggle"
|
|
|
263
263
|
→ skill({ name: "brainstorming" })
|
|
264
264
|
→ Questions about scope, triggers, persistence
|
|
265
265
|
→ Design decisions documented
|
|
266
|
-
→ Output: .beads/artifacts/
|
|
266
|
+
→ Output: .beads/artifacts/br-dark-mode/design.md
|
|
267
267
|
|
|
268
268
|
2. SPECIFICATION
|
|
269
269
|
→ skill({ name: "prd" })
|
|
270
270
|
→ Full PRD with requirements
|
|
271
271
|
→ Tasks section for conversion
|
|
272
|
-
→ Output: .beads/artifacts/
|
|
272
|
+
→ Output: .beads/artifacts/br-dark-mode/prd.md
|
|
273
273
|
|
|
274
274
|
3. TASK CONVERSION
|
|
275
275
|
→ skill({ name: "prd-task" })
|
|
276
276
|
→ JSON task list with dependencies
|
|
277
|
-
→ Output: .beads/artifacts/
|
|
277
|
+
→ Output: .beads/artifacts/br-dark-mode/prd.json
|
|
278
278
|
|
|
279
279
|
4. PLANNING
|
|
280
280
|
→ skill({ name: "writing-plans" })
|
|
281
281
|
→ Bite-sized implementation steps
|
|
282
|
-
→ Output: .beads/artifacts/
|
|
282
|
+
→ Output: .beads/artifacts/br-dark-mode/plan.md
|
|
283
283
|
|
|
284
284
|
5. IMPLEMENTATION
|
|
285
285
|
→ skill({ name: "executing-plans" })
|
|
@@ -291,7 +291,7 @@ User: "I want to add a dark mode toggle"
|
|
|
291
291
|
→ Tests pass: ✓
|
|
292
292
|
→ Lint clean: ✓
|
|
293
293
|
→ Build succeeds: ✓
|
|
294
|
-
→ br close
|
|
294
|
+
→ br close br-dark-mode --reason "Dark mode implemented and verified"
|
|
295
295
|
```
|
|
296
296
|
|
|
297
297
|
---
|
|
@@ -120,11 +120,11 @@ When researching within task boundaries:
|
|
|
120
120
|
|
|
121
121
|
```bash
|
|
122
122
|
# 1. Include bead spec in context
|
|
123
|
-
gemini -p "@src/ @.beads/artifacts/
|
|
123
|
+
gemini -p "@src/ @.beads/artifacts/br-xxx/spec.md
|
|
124
124
|
Research implementations matching spec constraints"
|
|
125
125
|
|
|
126
126
|
# 2. Save findings to bead artifacts
|
|
127
|
-
# Write to .beads/artifacts/
|
|
127
|
+
# Write to .beads/artifacts/br-xxx/research.md
|
|
128
128
|
```
|
|
129
129
|
|
|
130
130
|
### Delegating Large Research to Gemini
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: jira
|
|
3
|
+
description: Jira and Confluence integration via MCP. Search issues, create tickets, update status, manage sprints, and access Confluence docs. Use when working with Atlassian products.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Jira & Confluence Integration (MCP)
|
|
7
|
+
|
|
8
|
+
Jira and Confluence integration via `sooperset/mcp-atlassian` MCP server.
|
|
9
|
+
|
|
10
|
+
## Available Tools
|
|
11
|
+
|
|
12
|
+
### Jira
|
|
13
|
+
|
|
14
|
+
- `jira_search` - Search with JQL
|
|
15
|
+
- `jira_get_issue` - Get issue details
|
|
16
|
+
- `jira_create_issue` - Create new issues
|
|
17
|
+
- `jira_update_issue` - Update existing issues
|
|
18
|
+
- `jira_transition_issue` - Change issue status
|
|
19
|
+
- `jira_get_issue_sla` - Calculate SLA metrics
|
|
20
|
+
|
|
21
|
+
### Confluence
|
|
22
|
+
|
|
23
|
+
- `confluence_search` - Search with CQL
|
|
24
|
+
- `confluence_get_page` - Get page content
|
|
25
|
+
- `confluence_create_page` - Create pages
|
|
26
|
+
- `confluence_update_page` - Update pages
|
|
27
|
+
- `confluence_add_comment` - Add comments
|
|
28
|
+
|
|
29
|
+
## Quick Start
|
|
30
|
+
|
|
31
|
+
### 1. Configure Environment Variables
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
export JIRA_URL="https://your-company.atlassian.net"
|
|
35
|
+
export JIRA_USERNAME="your.email@company.com"
|
|
36
|
+
export JIRA_API_TOKEN="your_api_token"
|
|
37
|
+
export CONFLUENCE_URL="https://your-company.atlassian.net/wiki"
|
|
38
|
+
export CONFLUENCE_API_TOKEN="your_confluence_token"
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
Get API token: https://id.atlassian.com/manage-profile/security/api-tokens
|
|
42
|
+
|
|
43
|
+
### 2. Use MCP Tools
|
|
44
|
+
|
|
45
|
+
```typescript
|
|
46
|
+
// Search issues
|
|
47
|
+
skill_mcp(
|
|
48
|
+
(skill_name = "jira"),
|
|
49
|
+
(tool_name = "jira_search"),
|
|
50
|
+
(arguments = '{"jql": "project = PROJ AND status = Open"}'),
|
|
51
|
+
);
|
|
52
|
+
|
|
53
|
+
// Get issue details
|
|
54
|
+
skill_mcp(
|
|
55
|
+
(skill_name = "jira"),
|
|
56
|
+
(tool_name = "jira_get_issue"),
|
|
57
|
+
(arguments = '{"issue_key": "PROJ-123"}'),
|
|
58
|
+
);
|
|
59
|
+
|
|
60
|
+
// Create issue
|
|
61
|
+
skill_mcp(
|
|
62
|
+
(skill_name = "jira"),
|
|
63
|
+
(tool_name = "jira_create_issue"),
|
|
64
|
+
(arguments = '{"project_key": "PROJ", "summary": "Bug: Login fails", "issue_type": "Bug"}'),
|
|
65
|
+
);
|
|
66
|
+
|
|
67
|
+
// Update status
|
|
68
|
+
skill_mcp(
|
|
69
|
+
(skill_name = "jira"),
|
|
70
|
+
(tool_name = "jira_transition_issue"),
|
|
71
|
+
(arguments = '{"issue_key": "PROJ-123", "transition": "In Progress"}'),
|
|
72
|
+
);
|
|
73
|
+
|
|
74
|
+
// Search Confluence
|
|
75
|
+
skill_mcp(
|
|
76
|
+
(skill_name = "jira"),
|
|
77
|
+
(tool_name = "confluence_search"),
|
|
78
|
+
(arguments = '{"cql": "title ~ \"Onboarding\""}'),
|
|
79
|
+
);
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
## Common Workflows
|
|
83
|
+
|
|
84
|
+
### Daily Standup
|
|
85
|
+
|
|
86
|
+
```typescript
|
|
87
|
+
skill_mcp(
|
|
88
|
+
(skill_name = "jira"),
|
|
89
|
+
(tool_name = "jira_search"),
|
|
90
|
+
(arguments = '{"jql": "assignee = currentUser() AND updated >= -1d"}'),
|
|
91
|
+
);
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
### Bug Triage
|
|
95
|
+
|
|
96
|
+
```typescript
|
|
97
|
+
skill_mcp(
|
|
98
|
+
(skill_name = "jira"),
|
|
99
|
+
(tool_name = "jira_search"),
|
|
100
|
+
(arguments = '{"jql": "type = Bug AND priority in (High, Critical) AND status != Done"}'),
|
|
101
|
+
);
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
### Sprint Planning
|
|
105
|
+
|
|
106
|
+
```typescript
|
|
107
|
+
skill_mcp(
|
|
108
|
+
(skill_name = "jira"),
|
|
109
|
+
(tool_name = "jira_create_issue"),
|
|
110
|
+
(arguments =
|
|
111
|
+
'{"project_key": "PROJ", "summary": "Implement auth", "issue_type": "Story", "priority": "High"}'),
|
|
112
|
+
);
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
## JQL Examples
|
|
116
|
+
|
|
117
|
+
```sql
|
|
118
|
+
-- My open issues
|
|
119
|
+
assignee = currentUser() AND status != Done
|
|
120
|
+
|
|
121
|
+
-- High priority bugs
|
|
122
|
+
project = PROJ AND type = Bug AND priority in (High, Critical)
|
|
123
|
+
|
|
124
|
+
-- Recently updated
|
|
125
|
+
project = PROJ AND updated >= -7d
|
|
126
|
+
|
|
127
|
+
-- Current sprint
|
|
128
|
+
project = PROJ AND sprint in openSprints()
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
## Server/Data Center
|
|
132
|
+
|
|
133
|
+
For self-hosted Jira, use Personal Access Token:
|
|
134
|
+
|
|
135
|
+
```bash
|
|
136
|
+
export JIRA_URL="https://jira.your-company.com"
|
|
137
|
+
export JIRA_PERSONAL_TOKEN="your_pat"
|
|
138
|
+
export CONFLUENCE_PERSONAL_TOKEN="your_confluence_pat"
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
Then update mcp.json to use `JIRA_PERSONAL_TOKEN` instead of `JIRA_USERNAME` + `JIRA_API_TOKEN`.
|
|
142
|
+
|
|
143
|
+
## Resources
|
|
144
|
+
|
|
145
|
+
- GitHub: https://github.com/sooperset/mcp-atlassian
|
|
146
|
+
- Docs: https://personal-1d37018d.mintlify.app
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
{
|
|
2
|
+
"jira": {
|
|
3
|
+
"command": "uvx",
|
|
4
|
+
"args": ["mcp-atlassian"],
|
|
5
|
+
"env": {
|
|
6
|
+
"JIRA_URL": "{env:JIRA_URL}",
|
|
7
|
+
"JIRA_USERNAME": "{env:JIRA_USERNAME}",
|
|
8
|
+
"JIRA_API_TOKEN": "{env:JIRA_API_TOKEN}",
|
|
9
|
+
"CONFLUENCE_URL": "{env:CONFLUENCE_URL}",
|
|
10
|
+
"CONFLUENCE_USERNAME": "{env:CONFLUENCE_USERNAME}",
|
|
11
|
+
"CONFLUENCE_API_TOKEN": "{env:CONFLUENCE_API_TOKEN}"
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
}
|
|
@@ -92,7 +92,7 @@ observation({
|
|
|
92
92
|
confidence: "high", // high, medium, low
|
|
93
93
|
files_read: "src/auth.ts, src/middleware.ts", // Files consulted
|
|
94
94
|
files_modified: "src/auth.ts", // Files changed
|
|
95
|
-
bead_id: "
|
|
95
|
+
bead_id: "br-abc123", // Link to task (optional)
|
|
96
96
|
});
|
|
97
97
|
```
|
|
98
98
|
|
|
@@ -15,7 +15,7 @@ The PRD describes WHAT to build and WHY, not HOW or in WHAT ORDER.
|
|
|
15
15
|
|
|
16
16
|
## Beads-Native Output (Recommended)
|
|
17
17
|
|
|
18
|
-
When you are working on a Beads task (you have a bead id like `
|
|
18
|
+
When you are working on a Beads task (you have a bead id like `br-...`), the PRD should live with the task artifacts:
|
|
19
19
|
|
|
20
20
|
- Write PRD to: `.beads/artifacts/<bead-id>/prd.md`
|
|
21
21
|
|
|
@@ -26,7 +26,7 @@ This template uses Beads artifacts (no `.opencode/state`).
|
|
|
26
26
|
|
|
27
27
|
## Workflow
|
|
28
28
|
|
|
29
|
-
1. Input: bead id (`
|
|
29
|
+
1. Input: bead id (`br-...`).
|
|
30
30
|
2. Read `.beads/artifacts/<bead-id>/prd.md`.
|
|
31
31
|
3. Extract tasks from `## Tasks`.
|
|
32
32
|
4. Write `.beads/artifacts/<bead-id>/prd.json`.
|
|
@@ -56,7 +56,7 @@ Write JSON to `.beads/artifacts/<bead-id>/prd.json`.
|
|
|
56
56
|
|
|
57
57
|
```json
|
|
58
58
|
{
|
|
59
|
-
"beadId": "
|
|
59
|
+
"beadId": "br-...",
|
|
60
60
|
"prdName": "<optional-slug>",
|
|
61
61
|
"tasks": [
|
|
62
62
|
{
|
|
@@ -362,13 +362,13 @@ If opensrc doesn't work:
|
|
|
362
362
|
|
|
363
363
|
Source code research complements other tools:
|
|
364
364
|
|
|
365
|
-
| Method
|
|
366
|
-
|
|
|
367
|
-
| **Context7**
|
|
368
|
-
| **codesearch**
|
|
365
|
+
| Method | Best For | Source Code Adds |
|
|
366
|
+
| -------------- | -------------------------- | ------------------------------ |
|
|
367
|
+
| **Context7** | API docs, official guides | Implementation details |
|
|
368
|
+
| **codesearch** | Usage patterns in the wild | Canonical implementation |
|
|
369
369
|
| **grepsearch** | Real-world examples | How library itself works |
|
|
370
|
-
| **Web search**
|
|
371
|
-
| **Codebase**
|
|
370
|
+
| **Web search** | Tutorials, blog posts | Ground truth from source |
|
|
371
|
+
| **Codebase** | Project-specific patterns | How dependencies actually work |
|
|
372
372
|
|
|
373
373
|
**Recommended flow:**
|
|
374
374
|
|
|
@@ -437,7 +437,7 @@ read({
|
|
|
437
437
|
|
|
438
438
|
// 6. Document findings
|
|
439
439
|
write({
|
|
440
|
-
filePath: ".beads/artifacts/
|
|
440
|
+
filePath: ".beads/artifacts/br-xxx/research.md",
|
|
441
441
|
content: `# Zod Async Refinements
|
|
442
442
|
|
|
443
443
|
**Finding:** Async refinements use \`parseAsync()\` not \`parse()\`
|
package/package.json
CHANGED