opencode-onboard 0.4.14 → 0.4.15

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 CHANGED
@@ -6,7 +6,7 @@
6
6
 
7
7
  **One command to prepare any codebase for AI agent workflows in OpenCode.**
8
8
 
9
- Works with [OpenCode](https://opencode.ai), [OpenCode Ensemble](https://github.com/hueyexe/opencode-ensemble), [OpenSpec](https://github.com/fission-ai/openspec), GitHub, Azure DevOps, or no tracker/PR platform at all.
9
+ Works with [OpenCode](https://opencode.ai), [OpenCode Ensemble](https://github.com/hueyexe/opencode-ensemble), [OpenSpec](https://github.com/fission-ai/openspec), GitHub, Azure DevOps, or no tracker/PR platform at all.
10
10
 
11
11
  [![npm version](https://img.shields.io/npm/v/opencode-onboard?style=flat-square&color=black)](https://www.npmjs.com/package/opencode-onboard)
12
12
  [![npm downloads](https://img.shields.io/npm/dm/opencode-onboard?style=flat-square&color=black)](https://www.npmjs.com/package/opencode-onboard)
@@ -74,8 +74,8 @@ The CLI runs a 10-step onboarding wizard. It keeps the current step visible, plu
74
74
  | --------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
75
75
  | **1. Source scope** | Choose current repo or sibling source roots for code analysis |
76
76
  | **2. Clean AI files** | Detects existing `AGENTS.md`, `.cursorrules`, `CLAUDE.md`, `.agents/` etc. and removes them, preserves your `.agents/skills/` |
77
- | **3. Choose platform** | GitHub, Azure DevOps, or None |
78
- | **4. Check platform CLI** | Verifies `gh` (GitHub) or `az` + `azure-devops` (Azure DevOps), or skips checks when platform is None |
77
+ | **3. Choose platform** | GitHub, Azure DevOps, or None |
78
+ | **4. Check platform CLI** | Verifies `gh` (GitHub) or `az` + `azure-devops` (Azure DevOps), or skips checks when platform is None |
79
79
  | **5. Copy scaffolding** | Copies agents + built-in skills + bootstrap docs, writes source-roots metadata, applies AGENTS bootstrap patching, copies `skills-lock.json`, then runs `npx skills` |
80
80
  | **6. Init OpenSpec** | Runs `npx @fission-ai/openspec init` silently for structured change management |
81
81
  | **7. Choose models** | Fetches live model list from [models.dev](https://models.dev), lets you pick plan / build / fast models with cost indicators and canonical pricing |
@@ -100,7 +100,7 @@ Custom slash commands are installed into `.opencode/commands/` and are available
100
100
  | Command | Description |
101
101
  | -------------- | ----------------------------------------------------------------------------------------------------- |
102
102
  | `/ob-init` | Initialize the project. Asks greenfield vs brownfield, then activates the agent team. Supports skipping doc generation for new projects. |
103
- | `/ob-plan <url>` | Parse a user story URL and produce a plan, proposal, specs, and tasks. Stops before implementation. Use platform mode, not `None`. |
103
+ | `/ob-plan <url>` | Parse a user story URL and produce a plan, proposal, specs, and tasks. Stops before implementation. Use platform mode, not `None`. |
104
104
  | `/ob-main <task>` | Quick direct implementation, no OpenSpec, no ensemble, no PRs. Just do it. |
105
105
  | `/ob-create-engineer <name> "<description>"` | Create a custom engineer agent from a description, with skills auto-installed from [skills.sh](https://www.skills.sh/) |
106
106
  | `/ob-create-architecture` | Generate or regenerate `ARCHITECTURE.md` from the codebase. Safe to rerun any time the architecture changes. |
@@ -123,14 +123,14 @@ devops-manager lead/orchestrator, planning, PR lifecycle
123
123
  basic-engineer implementation worker, ability-driven
124
124
  ```
125
125
 
126
- `basic-engineer` behavior is composed by abilities, not hardcoded role silos.
127
- Project-specific specialization comes from user-created custom engineers via `/ob-create-engineer`. During `/opsx-apply`, the lead should inspect the engineers that actually exist in `.opencode/agents/`, prefer matching custom engineers, and fall back to `basic-engineer` only when no specialist is a clear fit.
126
+ `basic-engineer` behavior is composed by abilities, not hardcoded role silos.
127
+ Project-specific specialization comes from user-created custom engineers via `/ob-create-engineer`. During `/opsx-apply`, the lead should inspect the engineers that actually exist in `.opencode/agents/`, prefer matching custom engineers, and fall back to `basic-engineer` only when no specialist is a clear fit.
128
128
 
129
- ### Skills, platform knowledge
130
-
131
- Skills define _what to know_. They provide project rules, platform behavior, and task-specific execution guidance. Agents auto-detect/load relevant skills; **you do not manually choose skills per prompt**.
132
-
133
- If you choose platform `None` during onboarding, no userstory or pull-request platform skills are injected into the workflow. The project works from direct conversation, local repo context, and optional OpenSpec artifacts only.
129
+ ### Skills, platform knowledge
130
+
131
+ Skills define _what to know_. They provide project rules, platform behavior, and task-specific execution guidance. Agents auto-detect/load relevant skills; **you do not manually choose skills per prompt**.
132
+
133
+ If you choose platform `None` during onboarding, no userstory or pull-request platform skills are injected into the workflow. The project works from direct conversation, local repo context, and optional OpenSpec artifacts only.
134
134
 
135
135
  Current loading model:
136
136
 
@@ -179,7 +179,7 @@ Models are fetched live from [models.dev](https://models.dev) (3000+ models, cac
179
179
 
180
180
  ## The pipeline
181
181
 
182
- When you give the lead agent a work item URL, execution follows this pipeline. If onboarding platform is `None`, skip the work item / PR stages and work directly from conversation plus optional OpenSpec artifacts:
182
+ When you give the lead agent a work item URL, execution follows this pipeline. If onboarding platform is `None`, skip the work item / PR stages and work directly from conversation plus optional OpenSpec artifacts:
183
183
 
184
184
  ```
185
185
  devops-manager (load ob-global first)
@@ -218,7 +218,7 @@ Each agent runs in its own isolated git worktree via [OpenCode Ensemble](https:/
218
218
 
219
219
  ```
220
220
  your-project/
221
- ├── AGENTS.md ← bootstrap mode, replaced after first "init"
221
+ ├── AGENTS.md ← bootstrap mode, replaced after first "/ob-init"
222
222
  ├── ARCHITECTURE.md ← prompt for agents to fill in from your codebase
223
223
  ├── DESIGN.md ← prompt for agents to fill in from your codebase
224
224
  ├── .opencode/
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  description: Basic Engineer Agent.
3
3
  mode: primary
4
- color: #68A063
4
+ color: success
5
5
  permission:
6
6
  edit: allow
7
7
  bash: allow
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  description: Process agent. Reads work items and user stories at pipeline start. Creates PRs, posts screenshots, responds to review comments at pipeline end. Bridges the work tracker and the repository. Platform knowledge comes from skills.
3
- mode: primary
4
- color: #690a69
3
+ mode: subagent
4
+ color: primary
5
5
  permission:
6
6
  edit: allow
7
7
  bash: allow
@@ -46,7 +46,7 @@ Example: `/ob-create-engineer frontend-engineer "A frontend engineer specialized
46
46
  ---
47
47
  description: <description>
48
48
  mode: primary
49
- color: <pick a unique hex color>
49
+ color: <pick a theme color: primary|secondary|accent|success|warning|error|info>
50
50
  permission:
51
51
  edit: allow
52
52
  bash: allow
package/content/AGENTS.md CHANGED
@@ -6,7 +6,7 @@
6
6
 
7
7
  ## Trigger
8
8
 
9
- When the user says anything resembling initialization, "init", "initialize", "setup", "start", "bootstrap", "get started", "prepare", execute the steps below. Follow the greenfield/brownfield branching exactly.
9
+ When the user says anything resembling initialization, "/ob-init", "initialize", "setup", "start", "bootstrap", "get started", "prepare", execute the steps below. Follow the greenfield/brownfield branching exactly.
10
10
 
11
11
  ---
12
12
 
@@ -174,10 +174,10 @@ Source scope is defined by mandatory `ob-global` skill.
174
174
  - Follow the generated `## Source Roots` section from that skill.
175
175
  - Do not duplicate source-scope rules here.
176
176
 
177
- ## I Am the Lead, Full Workflow Ownership
178
-
179
- <!-- OB-PLATFORM-WORKFLOW-START -->
180
- When the user provides a work item URL or says "implement the plan" or "I've added comments to the PR", **I own the full lifecycle**. I load `ob-global` skill first, then the appropriate userstory skill, and use ensemble tools to coordinate the agent team.
177
+ ## I Am the Lead, Full Workflow Ownership
178
+
179
+ <!-- OB-PLATFORM-WORKFLOW-START -->
180
+ When the user provides a work item URL or says "implement the plan" or "I've added comments to the PR", **I own the full lifecycle**. I load `ob-global` skill first, then the appropriate userstory skill, and use ensemble tools to coordinate the agent team.
181
181
 
182
182
  Trigger patterns, I recognize ALL of these, exact wording does not matter:
183
183
  - User pastes or mentions a GitHub Issue URL → load `ob-userstory-gh` skill → parse issue → run `/opsx-propose` → confirm with user → run `/opsx-apply` → ship
@@ -186,20 +186,20 @@ Trigger patterns, I recognize ALL of these, exact wording does not matter:
186
186
  - `I've added comments to the PR` → read PR comments → fix → update PR
187
187
  - Any GitHub/Azure DevOps PR URL in a feedback/fix request (e.g. "check comments", "fix PR feedback") → run PR Feedback Loop
188
188
 
189
- **A GitHub or Azure DevOps URL anywhere in the user's message is always a trigger, regardless of surrounding words.**
190
- <!-- OB-PLATFORM-WORKFLOW-END -->
191
-
192
- **Never delegate without a plan. Default to specialists for implementation. If ensemble is clearly non-functional in the current session (idle teammate, no claim, or repeated spawn failure after one retry), stop forcing it: report the failure, then continue in the main session or ask the user whether to retry later.**
193
-
194
- ## Engineer Selection
195
-
196
- Before spawning implementation workers:
197
- - Inspect `.opencode/agents/*.md` and build the list of engineers that actually exist in this project.
198
- - Exclude `devops-manager` from implementation selection.
199
- - Prefer the most specialized custom engineer whose description and abilities clearly match the task domain.
200
- - Use `basic-engineer` only when no custom engineer is a clear fit or as a recovery fallback.
201
- - Never spawn engineer names that are not present in `.opencode/agents/`.
202
- - When multiple engineers could fit, choose the narrower specialist before the generalist.
189
+ **A GitHub or Azure DevOps URL anywhere in the user's message is always a trigger, regardless of surrounding words.**
190
+ <!-- OB-PLATFORM-WORKFLOW-END -->
191
+
192
+ **Never delegate without a plan. Default to specialists for implementation. If ensemble is clearly non-functional in the current session (idle teammate, no claim, or repeated spawn failure after one retry), stop forcing it: report the failure, then continue in the main session or ask the user whether to retry later.**
193
+
194
+ ## Engineer Selection
195
+
196
+ Before spawning implementation workers:
197
+ - Inspect `.opencode/agents/*.md` and build the list of engineers that actually exist in this project.
198
+ - Exclude `devops-manager` from implementation selection.
199
+ - Prefer the most specialized custom engineer whose description and abilities clearly match the task domain.
200
+ - Use `basic-engineer` only when no custom engineer is a clear fit or as a recovery fallback.
201
+ - Never spawn engineer names that are not present in `.opencode/agents/`.
202
+ - When multiple engineers could fit, choose the narrower specialist before the generalist.
203
203
 
204
204
  ## Multi-Agent Execution, opencode-ensemble
205
205
 
@@ -218,10 +218,10 @@ Core tools used in this workflow:
218
218
  - **Max {{MAX_CONCURRENT_AGENTS}} truly concurrent agents.** All {{MAX_CONCURRENT_AGENTS}} must be spawned and running simultaneously, not sequentially. Spawn in waves if more than {{MAX_CONCURRENT_AGENTS}} are needed. Wait for wave N to finish before spawning wave N+1.
219
219
  - **Non-overlapping file domains.** Each agent owns exclusive directories. Two agents must NEVER touch the same file.
220
220
  - **Immediate shutdown on completion.** The moment an agent's domain has no more pending tasks → `team_shutdown` → `team_merge`. Keep agents alive if more tasks in their domain are pending (rolling batch).
221
- - **Rolling batch assignment.** Agents receive up to 3 tasks initially. When they complete a batch, lead assigns the next batch of up to 3 from the board. Never leave pending tasks orphaned.
222
- - **Stall detection at 5 minutes.** No commits after 5 min → nudge message → 2 min grace → force shutdown + respawn.
223
- - **Idle-without-claim is an earlier stall.** If a spawned teammate sits idle with no claimed task after a short wait, resend one short claim-only message with the exact task IDs. If still idle, force shutdown + respawn once with a shorter prompt. If the retry repeats the same failure, treat ensemble as unavailable for that session and stop recycling equivalent workers.
224
- - **Retry limit.** Max 3 retries per failing task → stop-and-report to user. Never retry indefinitely.
221
+ - **Rolling batch assignment.** Agents receive up to 3 tasks initially. When they complete a batch, lead assigns the next batch of up to 3 from the board. Never leave pending tasks orphaned.
222
+ - **Stall detection at 5 minutes.** No commits after 5 min → nudge message → 2 min grace → force shutdown + respawn.
223
+ - **Idle-without-claim is an earlier stall.** If a spawned teammate sits idle with no claimed task after a short wait, resend one short claim-only message with the exact task IDs. If still idle, force shutdown + respawn once with a shorter prompt. If the retry repeats the same failure, treat ensemble as unavailable for that session and stop recycling equivalent workers.
224
+ - **Retry limit.** Max 3 retries per failing task → stop-and-report to user. Never retry indefinitely.
225
225
 
226
226
  **Progress inspection commands (tell user explicitly after spawning):**
227
227
  - `team_status` for live team snapshot
@@ -236,12 +236,12 @@ If a teammate stalls due to model quota/rate-limit exhaustion:
236
236
 
237
237
  ---
238
238
 
239
- ## Pipeline
240
-
241
- <!-- OB-PLATFORM-PIPELINE-START -->
242
- ```
243
- devops-manager (lead mode)
244
- → load ob-global + parse work item via skill
239
+ ## Pipeline
240
+
241
+ <!-- OB-PLATFORM-PIPELINE-START -->
242
+ ```
243
+ devops-manager (lead mode)
244
+ → load ob-global + parse work item via skill
245
245
 
246
246
  openspec-propose
247
247
  → proposal.md + specs + tasks
@@ -269,11 +269,11 @@ devops-manager (ship mode)
269
269
 
270
270
  ```
271
271
  0. Run /quota to check remaining budget before spawning.
272
- 1. Run /opsx-apply.
273
- - Step 5b: classify cost tier, announce scope, ask user to confirm if ≥4 tasks.
274
- - Lead adds all tasks to board.
275
- - When dependencies exist, lead uses multiple `team_tasks_add` waves so later tasks can reference real task IDs returned by earlier waves.
276
- - Lead discovers available engineers from `.opencode/agents/*.md`, prefers matching custom engineers, then spawns engineers with initial batch of up to 3 tasks each (rolling batch model).
272
+ 1. Run /opsx-apply.
273
+ - Step 5b: classify cost tier, announce scope, ask user to confirm if ≥4 tasks.
274
+ - Lead adds all tasks to board.
275
+ - When dependencies exist, lead uses multiple `team_tasks_add` waves so later tasks can reference real task IDs returned by earlier waves.
276
+ - Lead discovers available engineers from `.opencode/agents/*.md`, prefers matching custom engineers, then spawns engineers with initial batch of up to 3 tasks each (rolling batch model).
277
277
  - Each engineer claims tasks, implements, completes, messages lead.
278
278
  - Lead assigns next batch (up to 3) to agents that report done. Repeat until board empty.
279
279
  - Lead merges each engineer branch after shutdown, then marks tasks done in tasks.md.
@@ -306,10 +306,10 @@ When user says "I've added comments to the PR" or asks to fix PR comments from P
306
306
  6. Wait for engineer results → team_shutdown + team_merge per engineer
307
307
  7. Run verification tasks (tests/build/lint) and fix blockers if any
308
308
  8. team_spawn devops-manager (ship mode) with "push + update PR threads" task ID + team_message "Start now"
309
- 9. Wait → team_results → report what was updated
310
- 10. team_cleanup
311
- ```
312
- <!-- OB-PLATFORM-PIPELINE-END -->
309
+ 9. Wait → team_results → report what was updated
310
+ 10. team_cleanup
311
+ ```
312
+ <!-- OB-PLATFORM-PIPELINE-END -->
313
313
 
314
314
  ---
315
315
 
@@ -322,7 +322,7 @@ All agents are universal, no project-specific knowledge. Platform and tech knowl
322
322
  | `devops-manager` | .opencode/agents/devops-manager.md | Reads work items, creates PRs, handles review feedback |
323
323
  | `basic-engineer` | .opencode/agents/basic-engineer.md | Generic implementation worker using ability-loaded skills |
324
324
 
325
- User can add more custom engineer agents and run them in parallel. Keep behavior ability-driven via skill mappings. Custom engineers are the primary specialization mechanism; `basic-engineer` is the general fallback when no custom engineer is a clear fit.
325
+ User can add more custom engineer agents and run them in parallel. Keep behavior ability-driven via skill mappings. Custom engineers are the primary specialization mechanism; `basic-engineer` is the general fallback when no custom engineer is a clear fit.
326
326
 
327
327
  Default `basic-engineer` abilities:
328
328
 
@@ -336,7 +336,7 @@ Default `basic-engineer` abilities:
336
336
 
337
337
  ## Skills
338
338
 
339
- Skills provide platform and tech-specific knowledge. Agents usually detect and load them automatically. Prefer auto-detection, but explicitly naming a skill in a spawn prompt is allowed when a workflow requires it or repeated misses show the agent is not loading the right context.
339
+ Skills provide platform and tech-specific knowledge. Agents usually detect and load them automatically. Prefer auto-detection, but explicitly naming a skill in a spawn prompt is allowed when a workflow requires it or repeated misses show the agent is not loading the right context.
340
340
 
341
341
  `ob-global` is always loaded first, it provides baseline rules for all agents.
342
342
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "opencode-onboard",
3
- "version": "0.4.14",
3
+ "version": "0.4.15",
4
4
  "description": "Prepare any brownfield codebase for AI agent workflows using OpenCode, OpenSpec, and ensemble orchestration.",
5
5
  "keywords": [
6
6
  "opencode",
@@ -111,7 +111,7 @@ export async function runWizard(version) {
111
111
  console.log(chalk.bold.green('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━'))
112
112
  console.log()
113
113
  console.log(' Open this project in OpenCode and type:')
114
- console.log(chalk.bold(' "init"'))
114
+ console.log(chalk.bold(' "/ob-init"'))
115
115
  console.log()
116
116
  if (toGenerate.length > 0) {
117
117
  console.log(` OpenCode will generate ${toGenerate.join(' and ')}`)
@@ -1,6 +1,6 @@
1
1
  import { execa } from "execa"
2
2
  import path from "node:path"
3
- import { commandExists, error, header, info, loading, success, warn} from "../../utils/exec.js"
3
+ import { commandExists, error, header, info, loading, success, warn } from "../../utils/exec.js"
4
4
  import { APPLY_TARGETS, patchApplyFile } from "./ensemble.js"
5
5
 
6
6
  export const openspecSteps = {
@@ -58,7 +58,7 @@ async function install() {
58
58
  success("OpenSpec installed")
59
59
  } catch (err) {
60
60
  error(`Failed to run openspec install: ${err.message}`)
61
- }
61
+ }
62
62
  }
63
63
 
64
64
  async function check() {
@@ -77,7 +77,7 @@ async function init() {
77
77
  try {
78
78
  const result = await execa(
79
79
  "npx",
80
- ["@fission-ai/openspec", "init", "--tools", "opencode", "--force"],
80
+ ["@fission-ai/openspec", "/ob-init", "--tools", "opencode", "--force"],
81
81
  {
82
82
  cwd: process.cwd(),
83
83
  stdio: "pipe",