opencode-agent-kit 1.0.5 → 1.0.7
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/bin/commands/init.mjs
CHANGED
|
@@ -5,6 +5,7 @@ import {
|
|
|
5
5
|
mkdirSync,
|
|
6
6
|
writeFileSync,
|
|
7
7
|
readdirSync,
|
|
8
|
+
appendFileSync,
|
|
8
9
|
} from "fs";
|
|
9
10
|
import { join, dirname } from "path";
|
|
10
11
|
import { fileURLToPath } from "url";
|
|
@@ -201,7 +202,15 @@ export async function init(options) {
|
|
|
201
202
|
);
|
|
202
203
|
}
|
|
203
204
|
|
|
204
|
-
// 6.
|
|
205
|
+
// 6. Copy opencode.example.json
|
|
206
|
+
const exampleSrc = join(TEMPLATE_DIR, "opencode.example.json");
|
|
207
|
+
const exampleDest = join(targetDir, "opencode.example.json");
|
|
208
|
+
if (existsSync(exampleSrc)) {
|
|
209
|
+
console.log(` 📄 Copying opencode.example.json...`);
|
|
210
|
+
copyFileSync(exampleSrc, exampleDest);
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
// 7. Install dependencies
|
|
205
214
|
if (!skipInstall) {
|
|
206
215
|
const pm = detectPackageManager(opencodeDir);
|
|
207
216
|
console.log(` 📦 Installing .opencode/ dependencies with ${pm}...`);
|
|
@@ -213,13 +222,36 @@ export async function init(options) {
|
|
|
213
222
|
}
|
|
214
223
|
}
|
|
215
224
|
|
|
216
|
-
//
|
|
225
|
+
// 8. Update .gitignore
|
|
226
|
+
const gitignorePath = join(targetDir, ".gitignore");
|
|
227
|
+
const gitignoreEntries = [
|
|
228
|
+
".opencode/*",
|
|
229
|
+
"opencode.json",
|
|
230
|
+
"opencode.example.json",
|
|
231
|
+
];
|
|
232
|
+
if (!existsSync(gitignorePath)) {
|
|
233
|
+
writeFileSync(gitignorePath, gitignoreEntries.join("\n") + "\n", "utf-8");
|
|
234
|
+
console.log(` 📄 Created .gitignore...`);
|
|
235
|
+
} else {
|
|
236
|
+
const gitignoreContent = readFileSync(gitignorePath, "utf-8");
|
|
237
|
+
let appended = false;
|
|
238
|
+
for (const entry of gitignoreEntries) {
|
|
239
|
+
if (!gitignoreContent.includes(entry)) {
|
|
240
|
+
appendFileSync(gitignorePath, entry + "\n", "utf-8");
|
|
241
|
+
appended = true;
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
if (appended) {
|
|
245
|
+
console.log(` 📄 Updated .gitignore...`);
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
// 9. Done
|
|
217
250
|
console.log(`\n ✅ opencode-agent-kit installed!\n`);
|
|
218
251
|
console.log(` Location: ${targetDir}`);
|
|
219
252
|
console.log(` What you got:`);
|
|
220
|
-
console.log(
|
|
221
|
-
|
|
222
|
-
);
|
|
253
|
+
console.log(` • opencode.json — 13 agents config with MCP servers`);
|
|
254
|
+
console.log(` • opencode.example.json — Example config for reference`);
|
|
223
255
|
console.log(` • .opencode/agents — 14 agent prompt files`);
|
|
224
256
|
console.log(` • .opencode/skills/ — 60+ skill playbooks`);
|
|
225
257
|
console.log(` • .opencode/commands/ — 35+ slash commands`);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "opencode-agent-kit",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.7",
|
|
4
4
|
"description": "Multi-stack OpenCode agent toolkit — 13 specialized AI agents (Nuxt, React, Node.js, Laravel, CI3, Android, Flutter, DevOps, SEO) with 62 skills, 36 commands, and 6 MCP servers",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -22,8 +22,8 @@ You are a **senior UI/UX Designer** specializing in modern web applications, des
|
|
|
22
22
|
|
|
23
23
|
1. **Design Direction** — Define visual language, layout patterns, and interaction models for features
|
|
24
24
|
2. **Design System Creation** — Build and maintain design tokens, component libraries, and style guides
|
|
25
|
-
|
|
26
|
-
|
|
25
|
+
3. **AI-Assisted Design with Stitch** — Immediately attempt to use Stitch MCP tools (`stitch_generate_screen_from_text`, `stitch_edit_screens`, `stitch_create_project`, etc.) to generate UI screens and variations. If Stitch MCP is unavailable, fall back to manual design specs without asking.
|
|
26
|
+
4. **Impeccable Context** — Use Impeccable (23 commands) for design critique, audit, polish, shaping, and visual iteration
|
|
27
27
|
5. **UX Flow Mapping** — Map user journeys, wireframe screens, define interaction states
|
|
28
28
|
6. **Accessibility Guidelines** — Define WCAG 2.1 compliance requirements, contrast ratios, keyboard navigation, screen reader support
|
|
29
29
|
7. **Component Design Specs** — Provide detailed specifications for each component (layout, states, variants, spacing, typography, color)
|
|
@@ -154,6 +154,132 @@ Designer (internal, automatic):
|
|
|
154
154
|
6. Provide spec to @frontend-nuxt or @frontend-react for implementation
|
|
155
155
|
```
|
|
156
156
|
|
|
157
|
+
## Google Stitch Integration
|
|
158
|
+
|
|
159
|
+
**Google Stitch** is an AI-powered UI design tool accessible via MCP. Use Stitch to accelerate design exploration and generate design variations.
|
|
160
|
+
|
|
161
|
+
### Stitch MCP Availability
|
|
162
|
+
|
|
163
|
+
Stitch tools are available when Stitch MCP is enabled in your OpenCode config (`opencode.json` or `~/.config/opencode/opencode.json`). The Stitch MCP must be configured with your API key and set to `"enabled": true`.
|
|
164
|
+
|
|
165
|
+
**Check Stitch availability**: When you receive a design request, immediately attempt to use Stitch tools. If Stitch MCP is not available (disabled, no API key, or connection error), proceed with manual design specs without Stitch.
|
|
166
|
+
|
|
167
|
+
### Stitch MCP Tool Reference
|
|
168
|
+
|
|
169
|
+
| Tool | Purpose |
|
|
170
|
+
|------|---------|
|
|
171
|
+
| `stitch_create_project` | Create a new Stitch project for design work |
|
|
172
|
+
| `stitch_generate_screen_from_text` | Generate UI screens from natural language descriptions |
|
|
173
|
+
| `stitch_get_screen` | Retrieve a generated screen's details |
|
|
174
|
+
| `stitch_list_screens` | List all screens in a Stitch project |
|
|
175
|
+
| `stitch_edit_screens` | Refine existing screens with new prompts |
|
|
176
|
+
| `stitch_list_design_systems` | List available design systems in a project |
|
|
177
|
+
| `stitch_update_design_system` | Update design system tokens (colors, fonts, roundness) |
|
|
178
|
+
| `stitch_create_design_system` | Create a new design system for a project |
|
|
179
|
+
| `stitch_upload_design_md` | Upload DESIGN.md to a Stitch project |
|
|
180
|
+
| `stitch_create_design_system_from_design_md` | Create design system from uploaded DESIGN.md |
|
|
181
|
+
|
|
182
|
+
### Stitch Workflow
|
|
183
|
+
|
|
184
|
+
```markdown
|
|
185
|
+
1. Define Design Requirements
|
|
186
|
+
- User need, target audience, brand context
|
|
187
|
+
- Key features and interactions
|
|
188
|
+
- Accessibility requirements
|
|
189
|
+
|
|
190
|
+
2. Generate with Stitch
|
|
191
|
+
- Use `stitch_generate_screen_from_text` with natural language descriptions
|
|
192
|
+
- Example: "A marketplace listing page with filter sidebar, product cards with images, prices, and pagination at the bottom"
|
|
193
|
+
- Specify deviceType: "MOBILE" or "DESKTOP"
|
|
194
|
+
- Optionally attach a designSystem for consistency
|
|
195
|
+
|
|
196
|
+
3. Review and Iterate
|
|
197
|
+
- Use `stitch_get_screen` to examine generated screens
|
|
198
|
+
- Use `stitch_edit_screens` to refine specific screens
|
|
199
|
+
- Iterate until design direction is solid
|
|
200
|
+
|
|
201
|
+
4. Extract Design Specs
|
|
202
|
+
- Examine Stitch output for color tokens, typography, spacing patterns
|
|
203
|
+
- Identify component structures and interaction patterns
|
|
204
|
+
- Note accessibility considerations
|
|
205
|
+
|
|
206
|
+
5. Create Formal Specs
|
|
207
|
+
- Convert Stitch output to structured component specs
|
|
208
|
+
- Define exact token values in OKLCH
|
|
209
|
+
- Document states and variants
|
|
210
|
+
- Prepare handoff for @frontend-nuxt (Vue) or @frontend-react (React)
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
### When to Use Stitch
|
|
214
|
+
|
|
215
|
+
| Use Stitch | Don't Use Stitch |
|
|
216
|
+
|------------|-----------------|
|
|
217
|
+
| Rapid design exploration | Final design system decisions |
|
|
218
|
+
| Generating layout variations | Detailed component specs (manual is better) |
|
|
219
|
+
| Visual direction brainstorming | Accessibility-critical components (verify manually) |
|
|
220
|
+
| Style/pattern ideation | Brand-critical designs (requires manual refinement) |
|
|
221
|
+
| Multiple screen mockups | Single micro-component specs |
|
|
222
|
+
|
|
223
|
+
### Stitch Best Practices
|
|
224
|
+
|
|
225
|
+
- Use Stitch output as starting point, not final deliverable
|
|
226
|
+
- Always verify accessibility in generated designs
|
|
227
|
+
- Extract and document tokens explicitly
|
|
228
|
+
- Refine Stitch output before handoff to @frontend-nuxt or @frontend-react
|
|
229
|
+
- Keep Stitch as a creative tool, not a replacement for design thinking
|
|
230
|
+
- Use `stitch_edit_screens` to iterate rather than regenerating entire projects
|
|
231
|
+
- Apply design system updates (`stitch_update_design_system`) for brand consistency across screens
|
|
232
|
+
|
|
233
|
+
### Stitch Integration Example
|
|
234
|
+
|
|
235
|
+
```markdown
|
|
236
|
+
User: Design a marketplace card component for product listings
|
|
237
|
+
|
|
238
|
+
Designer (using Stitch):
|
|
239
|
+
|
|
240
|
+
1. Generate screens with Stitch:
|
|
241
|
+
- Call `stitch_generate_screen_from_text` with prompt:
|
|
242
|
+
"Create a responsive marketplace product listing page.
|
|
243
|
+
Left sidebar with category filters and price range slider.
|
|
244
|
+
Grid of product cards showing: product image, title, price,
|
|
245
|
+
seller name, rating stars. Each card has a save/wishlist button.
|
|
246
|
+
Bottom pagination with 12 items per page.
|
|
247
|
+
Modern, clean design with good whitespace."
|
|
248
|
+
- Set deviceType: "DESKTOP"
|
|
249
|
+
|
|
250
|
+
2. Review generated designs:
|
|
251
|
+
- Call `stitch_get_screen` to examine output
|
|
252
|
+
- Identify best layout direction
|
|
253
|
+
- Extract color tokens, typography patterns, spacing values
|
|
254
|
+
|
|
255
|
+
3. Refine with iteration:
|
|
256
|
+
- Call `stitch_edit_screens` to adjust specific elements
|
|
257
|
+
- Example: "Make the product cards more compact, increase image size,
|
|
258
|
+
add a quick-view button overlay on hover"
|
|
259
|
+
|
|
260
|
+
4. Create formal component spec:
|
|
261
|
+
- Layout: [ Stitch-derived structure ]
|
|
262
|
+
- Tokens: [ Extracted from Stitch output + refined ]
|
|
263
|
+
- States: hover, loading, empty, error
|
|
264
|
+
- Accessibility: [ Manual verification ]
|
|
265
|
+
|
|
266
|
+
5. Handoff to @frontend-nuxt or @frontend-react with complete spec
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
### Stitch Fallback
|
|
270
|
+
|
|
271
|
+
If Stitch MCP is unavailable (check by attempting a Stitch tool call):
|
|
272
|
+
|
|
273
|
+
```markdown
|
|
274
|
+
Stitch MCP not available. Proceeding with manual design specs:
|
|
275
|
+
|
|
276
|
+
1. Define design direction based on requirements
|
|
277
|
+
2. Create wireframe descriptions
|
|
278
|
+
3. Define design tokens manually
|
|
279
|
+
4. Write component specifications
|
|
280
|
+
5. Prepare handoff for @frontend-nuxt or @frontend-react
|
|
281
|
+
```
|
|
282
|
+
|
|
157
283
|
## Design Process
|
|
158
284
|
|
|
159
285
|
When receiving a design request, follow this process:
|
|
@@ -0,0 +1,359 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://opencode.ai/config.json",
|
|
3
|
+
"description": "IT Team Agent Configuration Example - Copy ke opencode.json dan sesuaikan model sesuai kebutuhan",
|
|
4
|
+
"note": "Opsional: Jika tidak set model per agent, subagent akan inherit dari primary (IT Leader). Untuk customize, uncomment model line per agent.",
|
|
5
|
+
"formatter": true,
|
|
6
|
+
"permission": {
|
|
7
|
+
"read": {
|
|
8
|
+
"*": "allow",
|
|
9
|
+
"*.env": "deny",
|
|
10
|
+
"*.env.*": "deny",
|
|
11
|
+
"*.env.example": "allow"
|
|
12
|
+
},
|
|
13
|
+
"webfetch": "allow",
|
|
14
|
+
"skill": {
|
|
15
|
+
"*": "allow"
|
|
16
|
+
},
|
|
17
|
+
"todowrite": "allow",
|
|
18
|
+
"question": "allow",
|
|
19
|
+
"doom_loop": "ask",
|
|
20
|
+
"external_directory": "ask"
|
|
21
|
+
},
|
|
22
|
+
"instructions": [
|
|
23
|
+
".opencode/instructions/INSTRUCTIONS.md",
|
|
24
|
+
".opencode/skills/coding-standards/SKILL.md",
|
|
25
|
+
".opencode/skills/security-review/SKILL.md",
|
|
26
|
+
".opencode/skills/frontend-design/SKILL.md"
|
|
27
|
+
],
|
|
28
|
+
"mcp": {
|
|
29
|
+
"nuxt": {
|
|
30
|
+
"type": "remote",
|
|
31
|
+
"url": "https://nuxt.com/mcp",
|
|
32
|
+
"enabled": true,
|
|
33
|
+
"description": "Nuxt documentation, blog posts, and deployment guides"
|
|
34
|
+
},
|
|
35
|
+
"nuxt-ui": {
|
|
36
|
+
"type": "remote",
|
|
37
|
+
"url": "https://ui.nuxt.com/mcp",
|
|
38
|
+
"enabled": true,
|
|
39
|
+
"description": "Nuxt UI component documentation and examples"
|
|
40
|
+
},
|
|
41
|
+
"figma": {
|
|
42
|
+
"type": "stdio",
|
|
43
|
+
"command": "npx",
|
|
44
|
+
"args": ["-y", "@modelcontextprotocol/server-figma"],
|
|
45
|
+
"env": {
|
|
46
|
+
"FIGMA_ACCESS_TOKEN": "${FIGMA_ACCESS_TOKEN}"
|
|
47
|
+
},
|
|
48
|
+
"enabled": false,
|
|
49
|
+
"description": "Figma design file access (requires FIGMA_ACCESS_TOKEN)"
|
|
50
|
+
},
|
|
51
|
+
"playwright": {
|
|
52
|
+
"type": "stdio",
|
|
53
|
+
"command": "npx",
|
|
54
|
+
"args": ["-y", "@modelcontextprotocol/server-playwright"],
|
|
55
|
+
"enabled": true,
|
|
56
|
+
"description": "Browser automation and E2E testing with Playwright"
|
|
57
|
+
},
|
|
58
|
+
"stitch": {
|
|
59
|
+
"type": "remote",
|
|
60
|
+
"url": "https://stitch.googleapis.com/mcp",
|
|
61
|
+
"headers": {
|
|
62
|
+
"X-Goog-Api-Key": "${STITCH_API_KEY}"
|
|
63
|
+
},
|
|
64
|
+
"enabled": false,
|
|
65
|
+
"description": "Google Stitch AI design generation (requires STITCH_API_KEY)"
|
|
66
|
+
},
|
|
67
|
+
"postman": {
|
|
68
|
+
"type": "remote",
|
|
69
|
+
"url": "https://mcp.postman.com/mcp",
|
|
70
|
+
"headers": {
|
|
71
|
+
"Authorization": "Bearer ${POSTMAN_API_KEY}"
|
|
72
|
+
},
|
|
73
|
+
"enabled": true,
|
|
74
|
+
"description": "Postman API management for collections, requests, and documentation"
|
|
75
|
+
}
|
|
76
|
+
},
|
|
77
|
+
"agent": {
|
|
78
|
+
"leader": {
|
|
79
|
+
"description": "IT Leader & Technical Project Manager — analyzes requirements, designs architecture, decomposes tasks, delegates to subagents, and unifies outputs",
|
|
80
|
+
"mode": "primary",
|
|
81
|
+
"prompt": "{file:.opencode/agents/it-leader.md}",
|
|
82
|
+
"model": "opencode/claude-opus-4.7",
|
|
83
|
+
"temperature": 0.4,
|
|
84
|
+
"color": "#8b5cf6",
|
|
85
|
+
"permission": {
|
|
86
|
+
"webfetch": "allow",
|
|
87
|
+
"skill": { "*": "allow" },
|
|
88
|
+
"bash": {
|
|
89
|
+
"*": "ask",
|
|
90
|
+
"npm *": "allow",
|
|
91
|
+
"pnpm *": "allow",
|
|
92
|
+
"bun *": "allow",
|
|
93
|
+
"yarn *": "allow",
|
|
94
|
+
"npx playwright*": "allow"
|
|
95
|
+
},
|
|
96
|
+
"nuxt_*": "allow",
|
|
97
|
+
"nuxt-ui_*": "allow",
|
|
98
|
+
"figma_*": "ask",
|
|
99
|
+
"playwright_*": "allow",
|
|
100
|
+
"postman_*": "allow",
|
|
101
|
+
"task": { "*": "allow" }
|
|
102
|
+
}
|
|
103
|
+
},
|
|
104
|
+
"frontend-nuxt": {
|
|
105
|
+
"description": "Expert Vue/Nuxt frontend developer for Nuxt.js, Vue 3, Nuxt UI, and modern web technologies with MCP integration (subagent of IT Leader)",
|
|
106
|
+
"mode": "subagent",
|
|
107
|
+
"prompt": "{file:.opencode/agents/nuxt-frontend-developer.md}",
|
|
108
|
+
"model": "opencode/claude-sonnet-4.5",
|
|
109
|
+
"temperature": 0.4,
|
|
110
|
+
"color": "#3b82f6",
|
|
111
|
+
"permission": {
|
|
112
|
+
"edit": "allow",
|
|
113
|
+
"webfetch": "allow",
|
|
114
|
+
"skill": { "*": "allow" },
|
|
115
|
+
"bash": {
|
|
116
|
+
"*": "ask",
|
|
117
|
+
"npm *": "allow",
|
|
118
|
+
"pnpm *": "allow",
|
|
119
|
+
"bun *": "allow",
|
|
120
|
+
"yarn *": "allow",
|
|
121
|
+
"npx playwright*": "allow"
|
|
122
|
+
},
|
|
123
|
+
"nuxt_*": "allow",
|
|
124
|
+
"nuxt-ui_*": "allow",
|
|
125
|
+
"figma_*": "ask",
|
|
126
|
+
"playwright_*": "allow"
|
|
127
|
+
}
|
|
128
|
+
},
|
|
129
|
+
"frontend-react": {
|
|
130
|
+
"description": "Expert React/Next.js frontend developer for React 19, Next.js 15, Vite, shadcn/ui, and modern web technologies (subagent of IT Leader)",
|
|
131
|
+
"mode": "subagent",
|
|
132
|
+
"prompt": "{file:.opencode/agents/react-frontend-developer.md}",
|
|
133
|
+
"model": "opencode/claude-sonnet-4.5",
|
|
134
|
+
"temperature": 0.4,
|
|
135
|
+
"color": "#06b6d4",
|
|
136
|
+
"permission": {
|
|
137
|
+
"edit": "allow",
|
|
138
|
+
"webfetch": "allow",
|
|
139
|
+
"skill": { "*": "allow" },
|
|
140
|
+
"bash": {
|
|
141
|
+
"*": "ask",
|
|
142
|
+
"npm *": "allow",
|
|
143
|
+
"pnpm *": "allow",
|
|
144
|
+
"bun *": "allow",
|
|
145
|
+
"yarn *": "allow",
|
|
146
|
+
"npx playwright*": "allow"
|
|
147
|
+
},
|
|
148
|
+
"figma_*": "ask",
|
|
149
|
+
"playwright_*": "allow"
|
|
150
|
+
}
|
|
151
|
+
},
|
|
152
|
+
"backend": {
|
|
153
|
+
"description": "Expert backend developer for Node.js, Express, Prisma, and PostgreSQL (subagent of IT Leader)",
|
|
154
|
+
"mode": "subagent",
|
|
155
|
+
"prompt": "{file:.opencode/agents/node-backend-developer.md}",
|
|
156
|
+
"model": "opencode/claude-sonnet-4.5",
|
|
157
|
+
"temperature": 0.4,
|
|
158
|
+
"color": "#10b981",
|
|
159
|
+
"permission": {
|
|
160
|
+
"edit": "allow",
|
|
161
|
+
"webfetch": "allow",
|
|
162
|
+
"skill": { "*": "allow" },
|
|
163
|
+
"bash": {
|
|
164
|
+
"*": "ask",
|
|
165
|
+
"npm *": "allow",
|
|
166
|
+
"pnpm *": "allow",
|
|
167
|
+
"bun *": "allow",
|
|
168
|
+
"yarn *": "allow"
|
|
169
|
+
},
|
|
170
|
+
"postman_*": "allow"
|
|
171
|
+
}
|
|
172
|
+
},
|
|
173
|
+
"ci3": {
|
|
174
|
+
"description": "CodeIgniter 3 MVC fullstack developer for REST API, JWT, MySQL/PostgreSQL (subagent of IT Leader)",
|
|
175
|
+
"mode": "subagent",
|
|
176
|
+
"prompt": "{file:.opencode/agents/code-igniter-3-fullstack.md}",
|
|
177
|
+
"model": "opencode/claude-sonnet-4.5",
|
|
178
|
+
"temperature": 0.4,
|
|
179
|
+
"color": "#84cc16",
|
|
180
|
+
"permission": {
|
|
181
|
+
"edit": "allow",
|
|
182
|
+
"webfetch": "allow",
|
|
183
|
+
"skill": { "*": "allow" },
|
|
184
|
+
"bash": {
|
|
185
|
+
"*": "ask",
|
|
186
|
+
"git status": "allow",
|
|
187
|
+
"git diff": "allow",
|
|
188
|
+
"git log*": "allow"
|
|
189
|
+
},
|
|
190
|
+
"postman_*": "allow"
|
|
191
|
+
}
|
|
192
|
+
},
|
|
193
|
+
"laravel": {
|
|
194
|
+
"description": "Laravel backend engineer for REST API, Service/Repository, JWT, MySQL/PostgreSQL (subagent of IT Leader)",
|
|
195
|
+
"mode": "subagent",
|
|
196
|
+
"prompt": "{file:.opencode/agents/laravel-advanced.md}",
|
|
197
|
+
"model": "opencode/claude-sonnet-4.5",
|
|
198
|
+
"temperature": 0.4,
|
|
199
|
+
"color": "#f97316",
|
|
200
|
+
"permission": {
|
|
201
|
+
"edit": "allow",
|
|
202
|
+
"webfetch": "allow",
|
|
203
|
+
"skill": { "*": "allow" },
|
|
204
|
+
"bash": {
|
|
205
|
+
"*": "ask",
|
|
206
|
+
"git status": "allow",
|
|
207
|
+
"git diff": "allow",
|
|
208
|
+
"git log*": "allow"
|
|
209
|
+
},
|
|
210
|
+
"postman_*": "allow"
|
|
211
|
+
}
|
|
212
|
+
},
|
|
213
|
+
"designer": {
|
|
214
|
+
"description": "UI/UX Designer specializing in design systems, Google Stitch, Figma, accessibility, and design-to-code handoff (subagent of IT Leader)",
|
|
215
|
+
"mode": "subagent",
|
|
216
|
+
"prompt": "{file:.opencode/agents/ui-ux-designer.md}",
|
|
217
|
+
"model": "opencode/claude-sonnet-4.5",
|
|
218
|
+
"temperature": 0.5,
|
|
219
|
+
"color": "#f59e0b",
|
|
220
|
+
"permission": {
|
|
221
|
+
"edit": "allow",
|
|
222
|
+
"webfetch": "allow",
|
|
223
|
+
"skill": { "*": "allow" },
|
|
224
|
+
"bash": {
|
|
225
|
+
"*": "ask",
|
|
226
|
+
"git status": "allow",
|
|
227
|
+
"git diff": "allow",
|
|
228
|
+
"git log*": "allow"
|
|
229
|
+
},
|
|
230
|
+
"stitch_*": "allow",
|
|
231
|
+
"figma_*": "ask",
|
|
232
|
+
"nuxt-ui_*": "allow"
|
|
233
|
+
}
|
|
234
|
+
},
|
|
235
|
+
"reviewer": {
|
|
236
|
+
"description": "Code Reviewer & QA Engineer specializing in code quality, security audit, testing strategy, and verification (subagent of IT Leader)",
|
|
237
|
+
"mode": "subagent",
|
|
238
|
+
"prompt": "{file:.opencode/agents/code-reviewer.md}",
|
|
239
|
+
"model": "opencode/claude-sonnet-4.5",
|
|
240
|
+
"temperature": 0.4,
|
|
241
|
+
"color": "#ef4444",
|
|
242
|
+
"permission": {
|
|
243
|
+
"edit": "allow",
|
|
244
|
+
"webfetch": "allow",
|
|
245
|
+
"skill": { "*": "allow" },
|
|
246
|
+
"bash": {
|
|
247
|
+
"*": "ask",
|
|
248
|
+
"npm *": "allow",
|
|
249
|
+
"pnpm *": "allow",
|
|
250
|
+
"bun *": "allow",
|
|
251
|
+
"yarn *": "allow",
|
|
252
|
+
"npx playwright*": "allow"
|
|
253
|
+
},
|
|
254
|
+
"playwright_*": "allow"
|
|
255
|
+
}
|
|
256
|
+
},
|
|
257
|
+
"database": {
|
|
258
|
+
"description": "Database Specialist specializing in PostgreSQL schema design, query optimization, Prisma ORM, and migrations (subagent of IT Leader)",
|
|
259
|
+
"mode": "subagent",
|
|
260
|
+
"prompt": "{file:.opencode/agents/database-specialist.md}",
|
|
261
|
+
"model": "opencode/claude-sonnet-4.5",
|
|
262
|
+
"temperature": 0.4,
|
|
263
|
+
"color": "#06b6d4",
|
|
264
|
+
"permission": {
|
|
265
|
+
"edit": "allow",
|
|
266
|
+
"webfetch": "allow",
|
|
267
|
+
"skill": { "*": "allow" },
|
|
268
|
+
"bash": {
|
|
269
|
+
"*": "ask",
|
|
270
|
+
"npm *": "allow",
|
|
271
|
+
"pnpm *": "allow",
|
|
272
|
+
"bun *": "allow",
|
|
273
|
+
"yarn *": "allow"
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
},
|
|
277
|
+
"devops": {
|
|
278
|
+
"description": "DevOps Engineer specializing in CI/CD, deployment, Docker, monitoring, and infrastructure (subagent of IT Leader)",
|
|
279
|
+
"mode": "subagent",
|
|
280
|
+
"prompt": "{file:.opencode/agents/devops-specialist.md}",
|
|
281
|
+
"model": "opencode/claude-sonnet-4.5",
|
|
282
|
+
"temperature": 0.4,
|
|
283
|
+
"color": "#6366f1",
|
|
284
|
+
"permission": {
|
|
285
|
+
"edit": "allow",
|
|
286
|
+
"webfetch": "allow",
|
|
287
|
+
"skill": { "*": "allow" },
|
|
288
|
+
"bash": {
|
|
289
|
+
"*": "ask",
|
|
290
|
+
"npm *": "allow",
|
|
291
|
+
"pnpm *": "allow",
|
|
292
|
+
"bun *": "allow",
|
|
293
|
+
"yarn *": "allow",
|
|
294
|
+
"docker *": "allow"
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
},
|
|
298
|
+
"seo": {
|
|
299
|
+
"description": "SEO Specialist specializing in meta tags, structured data, Core Web Vitals, and content optimization (subagent of IT Leader)",
|
|
300
|
+
"mode": "subagent",
|
|
301
|
+
"prompt": "{file:.opencode/agents/seo-specialist.md}",
|
|
302
|
+
"model": "opencode/claude-sonnet-4.5",
|
|
303
|
+
"temperature": 0.4,
|
|
304
|
+
"color": "#84cc16",
|
|
305
|
+
"permission": {
|
|
306
|
+
"edit": "allow",
|
|
307
|
+
"webfetch": "allow",
|
|
308
|
+
"skill": { "*": "allow" },
|
|
309
|
+
"bash": {
|
|
310
|
+
"*": "ask",
|
|
311
|
+
"git status": "allow",
|
|
312
|
+
"git diff": "allow",
|
|
313
|
+
"git log*": "allow"
|
|
314
|
+
},
|
|
315
|
+
"nuxt_*": "allow"
|
|
316
|
+
}
|
|
317
|
+
},
|
|
318
|
+
"android": {
|
|
319
|
+
"description": "Expert Android developer for Kotlin, Jetpack Compose, XML, Material Design 3, and Google Play (subagent of IT Leader)",
|
|
320
|
+
"mode": "subagent",
|
|
321
|
+
"prompt": "{file:.opencode/agents/android-developer.md}",
|
|
322
|
+
"model": "opencode/claude-sonnet-4.5",
|
|
323
|
+
"temperature": 0.4,
|
|
324
|
+
"color": "#22c55e",
|
|
325
|
+
"permission": {
|
|
326
|
+
"edit": "allow",
|
|
327
|
+
"webfetch": "allow",
|
|
328
|
+
"skill": { "*": "allow" },
|
|
329
|
+
"bash": {
|
|
330
|
+
"*": "ask",
|
|
331
|
+
"./gradlew *": "allow",
|
|
332
|
+
"gradle *": "allow"
|
|
333
|
+
},
|
|
334
|
+
"figma_*": "ask",
|
|
335
|
+
"playwright_*": "allow"
|
|
336
|
+
}
|
|
337
|
+
},
|
|
338
|
+
"flutter": {
|
|
339
|
+
"description": "Expert Flutter developer for Dart, Flutter SDK, Material Design 3, Firebase, and cross-platform mobile apps (subagent of IT Leader)",
|
|
340
|
+
"mode": "subagent",
|
|
341
|
+
"prompt": "{file:.opencode/agents/flutter-developer.md}",
|
|
342
|
+
"model": "opencode/claude-sonnet-4.5",
|
|
343
|
+
"temperature": 0.4,
|
|
344
|
+
"color": "#0284c7",
|
|
345
|
+
"permission": {
|
|
346
|
+
"edit": "allow",
|
|
347
|
+
"webfetch": "allow",
|
|
348
|
+
"skill": { "*": "allow" },
|
|
349
|
+
"bash": {
|
|
350
|
+
"*": "ask",
|
|
351
|
+
"flutter *": "allow",
|
|
352
|
+
"dart *": "allow"
|
|
353
|
+
},
|
|
354
|
+
"figma_*": "ask",
|
|
355
|
+
"playwright_*": "allow"
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
}
|
package/template/opencode.json
CHANGED
|
@@ -7,14 +7,6 @@
|
|
|
7
7
|
"*.env.*": "deny",
|
|
8
8
|
"*.env.example": "allow"
|
|
9
9
|
},
|
|
10
|
-
"edit": "allow",
|
|
11
|
-
"bash": {
|
|
12
|
-
"*": "ask",
|
|
13
|
-
"git status": "allow",
|
|
14
|
-
"git diff": "allow",
|
|
15
|
-
"git log*": "allow",
|
|
16
|
-
"grep *": "allow"
|
|
17
|
-
},
|
|
18
10
|
"webfetch": "allow",
|
|
19
11
|
"skill": {
|
|
20
12
|
"*": "allow"
|
|
@@ -30,6 +22,48 @@
|
|
|
30
22
|
".opencode/skills/security-review/SKILL.md",
|
|
31
23
|
".opencode/skills/frontend-design/SKILL.md"
|
|
32
24
|
],
|
|
25
|
+
"mcp": {
|
|
26
|
+
"nuxt": {
|
|
27
|
+
"type": "remote",
|
|
28
|
+
"url": "https://nuxt.com/mcp",
|
|
29
|
+
"enabled": true,
|
|
30
|
+
"description": "Nuxt documentation, blog posts, and deployment guides"
|
|
31
|
+
},
|
|
32
|
+
"nuxt-ui": {
|
|
33
|
+
"type": "remote",
|
|
34
|
+
"url": "https://ui.nuxt.com/mcp",
|
|
35
|
+
"enabled": true,
|
|
36
|
+
"description": "Nuxt UI component documentation and examples"
|
|
37
|
+
},
|
|
38
|
+
"figma": {
|
|
39
|
+
"type": "remote",
|
|
40
|
+
"url": "https://mcp.figma.com/mcp"
|
|
41
|
+
},
|
|
42
|
+
"playwright": {
|
|
43
|
+
"type": "stdio",
|
|
44
|
+
"command": "npx",
|
|
45
|
+
"args": ["-y", "@modelcontextprotocol/server-playwright"],
|
|
46
|
+
"enabled": true,
|
|
47
|
+
"description": "Browser automation and E2E testing with Playwright"
|
|
48
|
+
},
|
|
49
|
+
"stitch": {
|
|
50
|
+
"type": "remote",
|
|
51
|
+
"url": "https://stitch.googleapis.com/mcp",
|
|
52
|
+
"headers": {
|
|
53
|
+
"X-Goog-Api-Key": "${STITCH_API_KEY}"
|
|
54
|
+
},
|
|
55
|
+
"description": "Google Stitch AI design generation (requires STITCH_API_KEY)"
|
|
56
|
+
},
|
|
57
|
+
"postman": {
|
|
58
|
+
"type": "remote",
|
|
59
|
+
"url": "https://mcp.postman.com/mcp",
|
|
60
|
+
"headers": {
|
|
61
|
+
"Authorization": "Bearer ${POSTMAN_API_KEY}"
|
|
62
|
+
},
|
|
63
|
+
"enabled": true,
|
|
64
|
+
"description": "Postman API management for collections, requests, and documentation"
|
|
65
|
+
}
|
|
66
|
+
},
|
|
33
67
|
"agent": {
|
|
34
68
|
"leader": {
|
|
35
69
|
"description": "IT Leader & Technical Project Manager — analyzes requirements, designs architecture, decomposes tasks, delegates to subagents, and unifies outputs",
|
|
@@ -38,7 +72,6 @@
|
|
|
38
72
|
"temperature": 0.4,
|
|
39
73
|
"color": "#8b5cf6",
|
|
40
74
|
"permission": {
|
|
41
|
-
"edit": "allow",
|
|
42
75
|
"webfetch": "allow",
|
|
43
76
|
"skill": { "*": "allow" },
|
|
44
77
|
"bash": {
|