opencode-ship 1.1.7 → 1.1.9-rc.1
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/CHANGELOG.md +36 -1
- package/README.md +13 -13
- package/THIRD_PARTY_NOTICES.md +1 -1
- package/assets/agents/ship-controller.md +47 -22
- package/assets/agents/ship-final-spec-reviewer.md +11 -11
- package/assets/agents/ship-final-standards-reviewer.md +11 -11
- package/assets/agents/ship-plan.md +24 -5
- package/assets/agents/ship-planner.md +46 -20
- package/assets/agents/{delivery-reviewer.md → ship-reviewer.md} +16 -16
- package/assets/agents/ship-task-builder.md +11 -11
- package/assets/agents/ship-task-reviewer.md +12 -12
- package/assets/agents/{delivery-verifier.md → ship-verifier.md} +13 -13
- package/assets/commands/setup-ship-workflow.md +6 -5
- package/assets/commands/ship-deliver.md +27 -30
- package/assets/defaults/workflow-models.history.json +7 -0
- package/assets/defaults/workflow-models.json +5 -0
- package/assets/skills/brainstorming/SKILL.md +10 -7
- package/assets/skills/dispatching-parallel-agents/SKILL.md +1 -1
- package/assets/skills/engineering-workflow/SKILL.md +10 -4
- package/assets/skills/executing-plans/SKILL.md +18 -63
- package/assets/skills/planning-research-checkpoint/SKILL.md +16 -13
- package/assets/skills/receiving-code-review/SKILL.md +1 -1
- package/assets/skills/requesting-code-review/SKILL.md +1 -1
- package/assets/skills/setup-ship-workflow/SKILL.md +27 -33
- package/assets/skills/ship-workflow/SKILL.md +83 -0
- package/assets/skills/skill-discovery/SKILL.md +17 -89
- package/assets/skills/subagent-driven-development/SKILL.md +6 -2
- package/assets/skills/systematic-debugging/SKILL.md +1 -1
- package/assets/skills/test-driven-development/SKILL.md +1 -1
- package/assets/skills/verification-before-completion/SKILL.md +1 -1
- package/assets/skills/wayfinder/SKILL.md +7 -1
- package/assets/skills/writing-plans/SKILL.md +31 -20
- package/dist/cli.js +1482 -175
- package/dist/core.d.ts +18 -0
- package/dist/core.js +528 -11
- package/dist/plugin.js +18613 -17483
- package/package.json +2 -1
- package/schema/project-adapter.example.json +2 -2
- package/schema/project-opencode-shim.json +2 -0
- package/schema/ship-lock.schema.json +23 -2
- package/tests/plugin/expected-tools.mjs +48 -5
- package/tests/plugin/plugin-load.test.mjs +27 -5
- package/vendor/sources.json +21 -21
- package/assets/skills/delivery-workflow/SKILL.md +0 -64
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: Read-only
|
|
2
|
+
description: Read-only ship verifier. Calls the project adapter's canonical verification command through the typed `ship_verify` tool. Returns the canonical six-section envelope.
|
|
3
3
|
mode: subagent
|
|
4
4
|
temperature: 0.1
|
|
5
5
|
steps: 8
|
|
@@ -10,18 +10,18 @@ permission:
|
|
|
10
10
|
external_directory: deny
|
|
11
11
|
webfetch: deny
|
|
12
12
|
websearch: deny
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
13
|
+
ship_verify: allow
|
|
14
|
+
ship_inspect: deny
|
|
15
|
+
ship_issue: deny
|
|
16
|
+
ship_worktree: deny
|
|
17
|
+
ship_review: deny
|
|
18
|
+
ship_pr: deny
|
|
19
|
+
ship_ready: deny
|
|
20
|
+
ship_merge: deny
|
|
21
|
+
ship_cleanup: deny
|
|
22
22
|
---
|
|
23
23
|
|
|
24
|
-
You are the
|
|
24
|
+
You are the ship verifier. You invoke only the `ship_verify` tool. You never edit, never invoke shell, never run the project command directly.
|
|
25
25
|
|
|
26
26
|
The verifier record includes `status`, `commandId`, `stdoutTail`, `stderrTail`, and `headSha`. `status=0` means every gate of the project adapter's verification command passed.
|
|
27
27
|
|
|
@@ -41,7 +41,7 @@ pass | fail | blocked | partial
|
|
|
41
41
|
|
|
42
42
|
| Command | Exit | Result |
|
|
43
43
|
| ---------- | ---: | ------ |
|
|
44
|
-
|
|
|
44
|
+
| ship_verify | <int> | <short> |
|
|
45
45
|
|
|
46
46
|
## Evidence
|
|
47
47
|
|
|
@@ -56,7 +56,7 @@ which commandId was used, what the adapter declared, what the recorded HEAD SHA
|
|
|
56
56
|
- unresolved concern
|
|
57
57
|
|
|
58
58
|
Rules:
|
|
59
|
-
- Call only the `
|
|
59
|
+
- Call only the `ship_verify` tool.
|
|
60
60
|
- Never run the project verification command through bash.
|
|
61
61
|
- Never edit code or config.
|
|
62
62
|
- If the manifest is missing or no verification command is declared, Status: blocked with Risks explaining.
|
|
@@ -18,11 +18,12 @@ in the consumer repo and in every issue worktree.
|
|
|
18
18
|
on disk from `init` and the install path requires a trusted
|
|
19
19
|
npm-owner allowlist that the `opencode-ship` publisher does
|
|
20
20
|
not satisfy.
|
|
21
|
-
2. **Follow** the procedure in the skill body.
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
21
|
+
2. **Follow** the procedure in the skill body. `init` already
|
|
22
|
+
populated `workflow.models` from packaged defaults; the skill
|
|
23
|
+
only asks if the user wants a per-role override. The skill
|
|
24
|
+
still writes the four required artifacts
|
|
25
|
+
(`docs/agents/issue-tracker.md`, `docs/agents/triage-labels.md`,
|
|
26
|
+
`docs/agents/domain.md`, `AGENTS.md`) and runs the
|
|
26
27
|
`opencode-ship setup-complete` CLI to flip
|
|
27
28
|
`lock.manager.setupComplete` to `true`.
|
|
28
29
|
|
|
@@ -1,11 +1,17 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: Start a
|
|
2
|
+
description: Start a ship workflow. First checks the setup-pending marker, then dispatches the durable ship-controller through ship_deliver.
|
|
3
3
|
---
|
|
4
4
|
|
|
5
5
|
# ship-deliver
|
|
6
6
|
|
|
7
7
|
`ship-deliver <issue-number>` is the canonical entry point
|
|
8
|
-
for a
|
|
8
|
+
for a ship workflow.
|
|
9
|
+
|
|
10
|
+
Never ask how to run the work: no Subagent-Driven vs Inline, no Tab vs
|
|
11
|
+
Build, no GitHub issues vs Task N, no "what next", no visual-companion
|
|
12
|
+
upsell, no Deep Research unless the user asked to research.
|
|
13
|
+
After the user approves a plan, call ship_deliver. Do not offer
|
|
14
|
+
execution-mode menus.
|
|
9
15
|
|
|
10
16
|
## Procedure
|
|
11
17
|
|
|
@@ -25,59 +31,50 @@ If the marker is present:
|
|
|
25
31
|
|
|
26
32
|
If the marker is absent, continue.
|
|
27
33
|
|
|
28
|
-
|
|
34
|
+
`ship_plan_start` runs stack skill sync before creating a workflow. Do not run the `skill-discovery` skill or `npx skills find` as a separate step.
|
|
29
35
|
|
|
30
|
-
|
|
36
|
+
### 1. Dispatch the controller
|
|
31
37
|
|
|
32
|
-
|
|
33
|
-
npx skills find "<query from issue/plan>"
|
|
34
|
-
```
|
|
38
|
+
Call `ship_deliver` with the issue number. Do not implement the issue through Build-owned `ship_issue` / `ship_worktree` / `ship_pr` calls.
|
|
35
39
|
|
|
36
|
-
|
|
40
|
+
1. Check setup-pending.
|
|
41
|
+
2. Call `ship_deliver(issueNumber)`.
|
|
42
|
+
3. Surface the controller session and `wf-<issue>` workflow id.
|
|
43
|
+
4. After issue ensure, print `Track: issue #<number>.`
|
|
44
|
+
5. Await the explicit plan approval prompt.
|
|
45
|
+
6. Resume only through `ship-controller`. After each successful
|
|
46
|
+
tool, print the matching `progressLine` as a normal chat
|
|
47
|
+
sentence. Do not wrap in JSON. Do not explain the stage.
|
|
37
48
|
|
|
38
49
|
### 2. Plan + approve
|
|
39
50
|
|
|
40
|
-
|
|
41
|
-
2. Dispatch the strong planner (`openai/gpt-5.6-sol` by default) to produce a PlanV2 contract.
|
|
42
|
-
3. Wait for `ship_plan_approve` from the user. Never auto-approve.
|
|
43
|
-
4. Mirror the plan to the issue.
|
|
51
|
+
The controller starts or resumes durable workflow state, dispatches the planner, and waits for `ship_plan_approve`. Never auto-approve.
|
|
44
52
|
|
|
45
53
|
### 3. Execute
|
|
46
54
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
- cheap builder (`minimax/MiniMax-M3` by default) — implement + report
|
|
50
|
-
- task reviewer (Spec + Quality) — verdict
|
|
51
|
-
- controller commit + push
|
|
52
|
-
- same-HEAD gate: Standards + Spec final reviews, verifier, required CI
|
|
55
|
+
The controller drives each task through the cheap builder, task reviewer, commit binding, and same-HEAD Standards + Spec + verifier + required CI gates. Print `Build: task <k>/<n> <title>.` and `Review: pass.` or `Review: fail (see notes).` per task, then `Verify: pass.` or `Verify: fail.` once.
|
|
53
56
|
|
|
54
57
|
### 4. Ready
|
|
55
58
|
|
|
56
|
-
Stop at Ready. Surface PR URL, worktree path, verifier SHA, and the explicit-merge instruction.
|
|
59
|
+
Stop at Ready. Print `Ready: PR #<number>.` Surface PR URL, worktree path, verifier SHA, and the explicit-merge instruction.
|
|
57
60
|
|
|
58
61
|
### 5. Merge
|
|
59
62
|
|
|
60
|
-
On explicit `merge it`: fresh gate recheck, squash merge, cleanup
|
|
63
|
+
On explicit `merge it`: fresh gate recheck, squash merge, and cleanup.
|
|
64
|
+
Print `Merge: <sha>.` then `Cleanup: done.`
|
|
61
65
|
|
|
62
66
|
## Hard rules
|
|
63
67
|
|
|
64
68
|
- **Never skip the setup gate.** If the marker is present, refuse to plan.
|
|
65
|
-
- **Never skip skill discovery.** The discovery is part of the autonomous-uplift contract.
|
|
66
69
|
- **Never auto-approve a plan.** The user always reviews the plan.
|
|
67
70
|
- **Never mark Ready or merge without a passing Standards review, a passing Spec review, a passing verifier run, and a passing required-CI check, all bound to one HEAD.**
|
|
68
71
|
- **Never force-push, hard-reset, stash, or `git worktree remove`.**
|
|
69
|
-
- **Never use `gh api` or raw shell on GitHub.** Use the typed `
|
|
70
|
-
|
|
71
|
-
## Single-shot research checkpoint
|
|
72
|
-
|
|
73
|
-
If you decide the task is non-trivial, pause once and **ask the user** whether to run Deep Research before generating any prompt. The default save-tokens path is "no research, continue with the plan as written". Only on explicit "yes" do you generate a draft Deep Research prompt and run the research; summarize the relevant findings inline and continue. Do not write to `docs/research/` unless the findings materially shape an ADR; ADR storage is the project's call, not yours. Continue only after the user confirms or declines.
|
|
74
|
-
|
|
75
|
-
The full procedure lives in the `planning-research-checkpoint` skill. Do not duplicate the prompt-generation logic here — just trigger the skill and respect its ask-first policy.
|
|
72
|
+
- **Never use `gh api` or raw shell on GitHub.** Use the typed `ship_*` tools.
|
|
73
|
+
- **Never abandon an attempt without an explicit user request after the PR is closed unmerged.** The controller may then call `ship_abandon`.
|
|
76
74
|
|
|
77
75
|
## Stop conditions
|
|
78
76
|
|
|
79
77
|
- Setup pending: stop, run setup, then re-dispatch.
|
|
80
78
|
- Ready reached: stop. Surface the PR URL, the worktree path, the recorded verifier SHA, and the explicit-merge instruction.
|
|
81
|
-
- `merge it` requested and gates are fresh: perform the squash merge. Surface the merge SHA.
|
|
79
|
+
- `merge it` requested and gates are fresh: perform the squash merge. Surface the merge SHA.
|
|
82
80
|
- Any gate fails after one re-run: stop. Surface the failing tool, the failing input, and the recorded evidence.
|
|
83
|
-
- Unexpected lifecycle error (missing-manifest, head-changed, ci-failing): stop. Surface the error envelope.
|
|
@@ -9,6 +9,12 @@ Help turn ideas into fully formed designs and specs through natural collaborativ
|
|
|
9
9
|
|
|
10
10
|
Start by understanding the current project context, then ask questions one at a time to refine the idea. Once you understand what you're building, present the design and get user approval.
|
|
11
11
|
|
|
12
|
+
Never ask how to run the work: no Subagent-Driven vs Inline, no Tab vs
|
|
13
|
+
Build, no GitHub issues vs Task N, no "what next", no visual-companion
|
|
14
|
+
upsell, no Deep Research unless the user asked to research.
|
|
15
|
+
After the user approves a plan, call ship_deliver. Do not offer
|
|
16
|
+
execution-mode menus.
|
|
17
|
+
|
|
12
18
|
<HARD-GATE>
|
|
13
19
|
Do NOT invoke any implementation skill, write any code, scaffold any project, or take any implementation action until you have presented a design and the user has approved it. This applies to EVERY project regardless of perceived simplicity.
|
|
14
20
|
</HARD-GATE>
|
|
@@ -22,7 +28,7 @@ Every project goes through this process. A todo list, a single-function utility,
|
|
|
22
28
|
You MUST create a task for each of these items and complete them in order:
|
|
23
29
|
|
|
24
30
|
1. **Explore project context** — check files, docs, recent commits
|
|
25
|
-
2. **
|
|
31
|
+
2. **Visual companion** — do not offer unless the user asked for a mockup. See the Visual Companion section below.
|
|
26
32
|
3. **Ask clarifying questions** — one at a time, understand purpose/constraints/success criteria
|
|
27
33
|
4. **Propose 2-3 approaches** — with trade-offs and your recommendation
|
|
28
34
|
5. **Present design** — in sections scaled to their complexity, get user approval after each section
|
|
@@ -128,17 +134,14 @@ Wait for the user's response. If they request changes, make them and re-run the
|
|
|
128
134
|
|
|
129
135
|
**Implementation:**
|
|
130
136
|
|
|
131
|
-
-
|
|
137
|
+
- After spec approval, invoke the writing-plans skill. Do not ask which skill to use.
|
|
132
138
|
- Do NOT invoke any other skill. writing-plans is the next step.
|
|
133
139
|
|
|
134
140
|
## Visual Companion
|
|
135
141
|
|
|
136
142
|
A browser-based companion for showing mockups, diagrams, and visual options during brainstorming. Available as a tool — not a mode. Accepting the companion means it's available for questions that benefit from visual treatment; it does NOT mean every question goes through the browser.
|
|
137
143
|
|
|
138
|
-
**Offering the companion
|
|
139
|
-
> "This next part might be easier if I show you — I can put together mockups, diagrams, and comparisons in a browser tab as we go. It's still new and can be token-intensive. Want me to? I'll open it for you."
|
|
140
|
-
|
|
141
|
-
**This offer MUST be its own message.** Only the offer — no clarifying question, summary, or other content. Wait for the user's response. If they accept, start the server with `--open` so their browser opens to the first screen automatically. If they decline, continue text-only and don't offer again unless they raise it.
|
|
144
|
+
**Offering the companion:** Do not offer unless the user asked for a mockup. If they did, start the server with `--open` so their browser opens to the first screen automatically. Never upsell it.
|
|
142
145
|
|
|
143
146
|
**Per-question decision:** Even after the user accepts, decide FOR EACH QUESTION whether to use the browser or the terminal. The test: **would the user understand this better by seeing it than reading it?**
|
|
144
147
|
|
|
@@ -157,4 +160,4 @@ This skill is part of the engineering profile shipped by
|
|
|
157
160
|
Ship controller; the cheap builder (`minimax/MiniMax-M3`) cannot
|
|
158
161
|
commit, push, mutate GitHub, mark Ready, or merge. The
|
|
159
162
|
verification-before-completion rule is enforced by
|
|
160
|
-
`
|
|
163
|
+
`ship_verify`, not by the model self-asserting completion.
|
|
@@ -173,4 +173,4 @@ This skill is part of the engineering profile shipped by
|
|
|
173
173
|
Ship controller; the cheap builder (`minimax/MiniMax-M3`) cannot
|
|
174
174
|
commit, push, mutate GitHub, mark Ready, or merge. The
|
|
175
175
|
verification-before-completion rule is enforced by
|
|
176
|
-
`
|
|
176
|
+
`ship_verify`, not by the model self-asserting completion.
|
|
@@ -13,7 +13,13 @@ Scaffold the per-repo configuration that the engineering skills assume:
|
|
|
13
13
|
- **Triage labels** — the strings used for the five canonical triage roles
|
|
14
14
|
- **Domain docs** — where `CONTEXT.md` and ADRs live, and the consumer rules for reading them
|
|
15
15
|
|
|
16
|
-
This is a prompt-driven skill, not a deterministic script. Explore,
|
|
16
|
+
This is a prompt-driven skill, not a deterministic script. Explore, then write. Do not ask how to run the work.
|
|
17
|
+
|
|
18
|
+
Never ask how to run the work: no Subagent-Driven vs Inline, no Tab vs
|
|
19
|
+
Build, no GitHub issues vs Task N, no "what next", no visual-companion
|
|
20
|
+
upsell, no Deep Research unless the user asked to research.
|
|
21
|
+
After the user approves a plan, call ship_deliver. Do not offer
|
|
22
|
+
execution-mode menus.
|
|
17
23
|
|
|
18
24
|
## Process
|
|
19
25
|
|
|
@@ -38,9 +44,9 @@ Lead each section with the recommended answer so the user can accept it in a wor
|
|
|
38
44
|
|
|
39
45
|
**Section A — Issue tracker.**
|
|
40
46
|
|
|
41
|
-
> Explainer: The "issue tracker" is where issues live for this repo. Skills like `to-tickets`, `triage`, `to-spec`, and `qa` read from and write to it — they need to know whether to call `gh issue create`, write a markdown file under `.scratch/`, or follow some other workflow you describe.
|
|
47
|
+
> Explainer: The "issue tracker" is where issues live for this repo. Skills like `to-tickets`, `triage`, `to-spec`, and `qa` read from and write to it — they need to know whether to call `gh issue create`, write a markdown file under `.scratch/`, or follow some other workflow you describe.
|
|
42
48
|
|
|
43
|
-
|
|
49
|
+
If a `git remote` points at GitHub, write the GitHub tracker without asking. If a `git remote` points at GitLab (`gitlab.com` or a self-hosted host), propose GitLab. Otherwise offer:
|
|
44
50
|
|
|
45
51
|
- **GitHub** — issues live in the repo's GitHub Issues (uses the `gh` CLI)
|
|
46
52
|
- **GitLab** — issues live in the repo's GitLab Issues (uses the [`glab`](https://gitlab.com/gitlab-org/cli) CLI)
|
|
@@ -76,7 +82,7 @@ Let them edit before writing.
|
|
|
76
82
|
|
|
77
83
|
- If `CLAUDE.md` exists, edit it.
|
|
78
84
|
- Else if `AGENTS.md` exists, edit it.
|
|
79
|
-
- If neither exists,
|
|
85
|
+
- If neither exists, create `AGENTS.md` without asking.
|
|
80
86
|
|
|
81
87
|
Never create `AGENTS.md` when `CLAUDE.md` already exists (or vice versa) — always edit the one that's already there.
|
|
82
88
|
|
|
@@ -1,73 +1,28 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: executing-plans
|
|
3
|
-
description: Use when
|
|
3
|
+
description: Hand an approved implementation plan to ship_deliver. Use when the user opens a new chat and says implement this plan. Never implement or commit in this session.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Executing Plans
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
This skill does not implement. It starts Ship.
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
Never ask how to run the work: no Subagent vs Inline, no Tab vs Build,
|
|
11
|
+
no GitHub issues vs Task N, no "what next".
|
|
12
|
+
Never commit. Never push. Never edit source. Never work on `main`.
|
|
11
13
|
|
|
12
|
-
|
|
14
|
+
## Procedure
|
|
13
15
|
|
|
14
|
-
|
|
16
|
+
1. Read the plan path the user named, or the latest `.opencode/plans/*.md`.
|
|
17
|
+
2. Print `Plan: <path>`.
|
|
18
|
+
3. Ensure a GitHub issue exists: call `ship_issue` with
|
|
19
|
+
`title` from the plan heading, `body` containing the plan path,
|
|
20
|
+
`baseBranch` from `.opencode/ship.config.json` `project.defaultBranch`,
|
|
21
|
+
`branch` `fix/<slug-from-title>`, `taskId` a slug from the title.
|
|
22
|
+
Print `Track: issue #N.`
|
|
23
|
+
4. Call `ship_deliver` with that `issueNumber`. Print its `progress`
|
|
24
|
+
and `next` lines so the user sees the stage.
|
|
25
|
+
5. Stop. The controller prints Build / Review / Verify / Ready.
|
|
15
26
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
### Step 1: Load and Review Plan
|
|
19
|
-
1. Ensure an isolated workspace: use superpowers:using-git-worktrees to create one or verify the existing one
|
|
20
|
-
2. Read plan file
|
|
21
|
-
3. Review critically - identify any questions or concerns about the plan
|
|
22
|
-
4. If concerns: Raise them with your human partner before starting
|
|
23
|
-
5. If no concerns: Create todos for the plan items and proceed
|
|
24
|
-
|
|
25
|
-
### Step 2: Execute Tasks
|
|
26
|
-
|
|
27
|
-
For each task:
|
|
28
|
-
1. Mark as in_progress
|
|
29
|
-
2. Follow each step exactly (plan has bite-sized steps)
|
|
30
|
-
3. Run verifications as specified
|
|
31
|
-
4. Mark as completed
|
|
32
|
-
|
|
33
|
-
### Step 3: Complete Development
|
|
34
|
-
|
|
35
|
-
After all tasks complete and verified:
|
|
36
|
-
- Announce: "I'm using the finishing-a-development-branch skill to complete this work."
|
|
37
|
-
- **REQUIRED SUB-SKILL:** Use superpowers:finishing-a-development-branch
|
|
38
|
-
- Follow that skill to verify tests, present options, execute choice
|
|
39
|
-
|
|
40
|
-
## When to Stop and Ask for Help
|
|
41
|
-
|
|
42
|
-
**STOP executing immediately when:**
|
|
43
|
-
- Hit a blocker (missing dependency, test fails, instruction unclear)
|
|
44
|
-
- Plan has critical gaps preventing starting
|
|
45
|
-
- You don't understand an instruction
|
|
46
|
-
- Verification fails repeatedly
|
|
47
|
-
|
|
48
|
-
**Ask for clarification rather than guessing.**
|
|
49
|
-
|
|
50
|
-
## When to Revisit Earlier Steps
|
|
51
|
-
|
|
52
|
-
**Return to Review (Step 1) when:**
|
|
53
|
-
- Partner updates the plan based on your feedback
|
|
54
|
-
- Fundamental approach needs rethinking
|
|
55
|
-
|
|
56
|
-
**Don't force through blockers** - stop and ask.
|
|
57
|
-
|
|
58
|
-
## Remember
|
|
59
|
-
- Review plan critically first
|
|
60
|
-
- Follow plan steps exactly
|
|
61
|
-
- Don't skip verifications
|
|
62
|
-
- Reference skills when plan says to
|
|
63
|
-
- Stop when blocked, don't guess
|
|
64
|
-
- Never start implementation on main/master branch without explicit user consent
|
|
65
|
-
|
|
66
|
-
## Ship integration
|
|
67
|
-
|
|
68
|
-
This skill is part of the engineering profile shipped by
|
|
69
|
-
`opencode-ship@1.0`. Execution is driven by the deterministic
|
|
70
|
-
Ship controller; the cheap builder (`minimax/MiniMax-M3`) cannot
|
|
71
|
-
commit, push, mutate GitHub, mark Ready, or merge. The
|
|
72
|
-
verification-before-completion rule is enforced by
|
|
73
|
-
`delivery_verify`, not by the model self-asserting completion.
|
|
27
|
+
If `ship_deliver` is missing, stop and say so. Do not fall back to
|
|
28
|
+
local commits or subagent-driven-development.
|
|
@@ -1,12 +1,21 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: planning-research-checkpoint
|
|
3
|
-
description:
|
|
3
|
+
description: Optional Deep Research gate before non-trivial plans proceed to implementation. Default is no research. Run research only if the user said "research" or "istrazi". Use when the parent agent has finished the plan-mode brief and the work touches architecture, lifecycle design, or an unfamiliar domain.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# planning-research-checkpoint
|
|
7
7
|
|
|
8
8
|
You trigger exactly once per non-trivial planning session. Trivial sessions (typo fixes, docstring changes, single-file edits, follow-up PRs on already-decided work) skip this gate silently.
|
|
9
9
|
|
|
10
|
+
Default is no research. Do not ask “Run Deep Research?”.
|
|
11
|
+
Run research only if the user said “research” / “istrazi”.
|
|
12
|
+
|
|
13
|
+
Never ask how to run the work: no Subagent-Driven vs Inline, no Tab vs
|
|
14
|
+
Build, no GitHub issues vs Task N, no "what next", no visual-companion
|
|
15
|
+
upsell, no Deep Research unless the user asked to research.
|
|
16
|
+
After the user approves a plan, call ship_deliver. Do not offer
|
|
17
|
+
execution-mode menus.
|
|
18
|
+
|
|
10
19
|
## When you trigger
|
|
11
20
|
|
|
12
21
|
- The plan touches architecture, lifecycle, API surface, or test strategy
|
|
@@ -23,19 +32,13 @@ Do **not** trigger on:
|
|
|
23
32
|
## Procedure
|
|
24
33
|
|
|
25
34
|
1. Read the current session's plan from the parent context. Do **not** ask the user to re-state it.
|
|
26
|
-
2.
|
|
27
|
-
|
|
28
|
-
3. If the answer is **no**:
|
|
29
|
-
- Proceed with the plan as written.
|
|
30
|
-
- Do not mention the offer again this session.
|
|
31
|
-
- Do not generate any research prompt — the explicit goal is to save the user's tokens.
|
|
32
|
-
4. If the answer is **yes**:
|
|
35
|
+
2. If the user did not say “research” or “istrazi”, proceed with the plan as written. Do not mention research. Do not generate any research prompt.
|
|
36
|
+
3. If the user said “research” or “istrazi”:
|
|
33
37
|
- Output a single Markdown block titled "Research checkpoint" containing:
|
|
34
38
|
- The plan summary in <= 3 bullets
|
|
35
39
|
- A **one-line** decision the research is meant to inform
|
|
36
40
|
- A draft Deep Research prompt in a copyable ```text fenced block
|
|
37
|
-
-
|
|
38
|
-
|
|
39
|
-
5. Never
|
|
40
|
-
6. Never
|
|
41
|
-
7. Never persist the full research output. The summary you write must be yours, dated, and bounded.
|
|
41
|
+
- Run the research. Wait for the result. Persist a concise dated summary into the consumer project's `docs/research/` only if the research materially shapes an ADR or other architectural decision; otherwise treat the result as session-local.
|
|
42
|
+
4. Never ask the user to formulate the prompt themselves. The draft is yours to write when they asked to research.
|
|
43
|
+
5. Never loop. One outcome, continue.
|
|
44
|
+
6. Never persist the full research output. The summary you write must be yours, dated, and bounded.
|
|
@@ -211,4 +211,4 @@ This skill is part of the engineering profile shipped by
|
|
|
211
211
|
Ship controller; the cheap builder (`minimax/MiniMax-M3`) cannot
|
|
212
212
|
commit, push, mutate GitHub, mark Ready, or merge. The
|
|
213
213
|
verification-before-completion rule is enforced by
|
|
214
|
-
`
|
|
214
|
+
`ship_verify`, not by the model self-asserting completion.
|
|
@@ -101,4 +101,4 @@ This skill is part of the engineering profile shipped by
|
|
|
101
101
|
Ship controller; the cheap builder (`minimax/MiniMax-M3`) cannot
|
|
102
102
|
commit, push, mutate GitHub, mark Ready, or merge. The
|
|
103
103
|
verification-before-completion rule is enforced by
|
|
104
|
-
`
|
|
104
|
+
`ship_verify`, not by the model self-asserting completion.
|
|
@@ -11,17 +11,23 @@ and before any `ship-deliver`. It is prompt-driven, idempotent, and refuses
|
|
|
11
11
|
to return until every step is committed or explicitly skipped.
|
|
12
12
|
|
|
13
13
|
The setup contract is GitHub-only. The skill refuses to drive GitLab,
|
|
14
|
-
Jira, Linear, or local markdown because the controller's own
|
|
14
|
+
Jira, Linear, or local markdown because the controller's own ship
|
|
15
15
|
tool belt is GitHub-bound. A team that needs a different tracker should
|
|
16
16
|
hold off on `opencode-ship@1.1.2` until 1.2 ships the next tracker.
|
|
17
17
|
|
|
18
|
+
Never ask how to run the work: no Subagent-Driven vs Inline, no Tab vs
|
|
19
|
+
Build, no GitHub issues vs Task N, no "what next", no visual-companion
|
|
20
|
+
upsell, no Deep Research unless the user asked to research.
|
|
21
|
+
After the user approves a plan, call ship_deliver. Do not offer
|
|
22
|
+
execution-mode menus.
|
|
23
|
+
|
|
18
24
|
## When you trigger
|
|
19
25
|
|
|
20
26
|
- The user runs `/setup-ship-workflow` or types "set up ship" / "continue setup".
|
|
21
27
|
- The installer creates `.opencode/ship.setup-pending.json` after `init`.
|
|
22
28
|
- The controller also routes `ship-deliver` to this skill until the marker is cleared.
|
|
23
29
|
|
|
24
|
-
Do **not** trigger on a normal planning or
|
|
30
|
+
Do **not** trigger on a normal planning or ship request.
|
|
25
31
|
|
|
26
32
|
## Process
|
|
27
33
|
|
|
@@ -51,9 +57,9 @@ Also check:
|
|
|
51
57
|
|
|
52
58
|
### 2. Section A — GitHub repository
|
|
53
59
|
|
|
54
|
-
|
|
55
|
-
detected `owner/repo` slug
|
|
56
|
-
|
|
60
|
+
If `git remote` is GitHub, write the GitHub tracker without asking,
|
|
61
|
+
using the detected `owner/repo` slug. If the user has multiple remotes,
|
|
62
|
+
ask which one is the ship target.
|
|
57
63
|
|
|
58
64
|
Write `docs/agents/issue-tracker.md` with the resolved `owner/repo`,
|
|
59
65
|
`default branch`, and the canonical `gh` commands:
|
|
@@ -95,44 +101,32 @@ Write `docs/agents/domain.md`.
|
|
|
95
101
|
|
|
96
102
|
### 5. Section D — AI model roles
|
|
97
103
|
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
explicitly states they have no credentials for the defaults.
|
|
104
|
+
`init` already filled `workflow.models` from packaged defaults. Do not
|
|
105
|
+
ask the user to type three ids. Ask only whether they want an override.
|
|
101
106
|
|
|
102
|
-
| Role |
|
|
107
|
+
| Role | Packaged default | Suggestion |
|
|
103
108
|
|---|---|---|
|
|
104
109
|
| planner | `openai/gpt-5.6-sol` | strong model for plan writing |
|
|
105
|
-
| builder | `minimax/MiniMax-M3` | cheap/fast model for code |
|
|
110
|
+
| builder | `minimax-coding-plan/MiniMax-M3` | cheap/fast model for code |
|
|
106
111
|
| finalReviewer | `openai/gpt-5.6-sol` | strong model for final Standards + Spec review |
|
|
107
112
|
|
|
113
|
+
If the user keeps the defaults, leave `workflow.models` unchanged.
|
|
114
|
+
CLI `--planner-model` / `--builder-model` / `--final-reviewer-model`
|
|
115
|
+
mark that role as an override in the lock. To override later, edit
|
|
116
|
+
`.opencode/ship.config.json` or run `opencode-ship update` with those
|
|
117
|
+
flags (do not use `--force-config` just to change a model id).
|
|
118
|
+
|
|
108
119
|
Alternatives to mention if the user has no OpenAI/MiniMax:
|
|
109
120
|
|
|
110
121
|
- Anthropic: `anthropic/claude-opus-4.1`, `anthropic/claude-sonnet-4.5`
|
|
111
122
|
- Google: `google/gemini-2.5-pro`, `google/gemini-2.5-flash`
|
|
112
123
|
- Or any `<provider>/<model>` string the user has credentials for
|
|
113
124
|
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
```json
|
|
117
|
-
{
|
|
118
|
-
"schemaVersion": 2,
|
|
119
|
-
"profile": "engineering",
|
|
120
|
-
"project": { ... },
|
|
121
|
-
"delivery": { ... },
|
|
122
|
-
"workflow": {
|
|
123
|
-
"models": {
|
|
124
|
-
"planner": "<answer>",
|
|
125
|
-
"builder": "<answer>",
|
|
126
|
-
"finalReviewer": "<answer>"
|
|
127
|
-
},
|
|
128
|
-
"approval": { "mirrorToIssue": true, "maxFailedRounds": 3 }
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
```
|
|
125
|
+
If they choose an override, run:
|
|
132
126
|
|
|
133
|
-
|
|
134
|
-
--
|
|
135
|
-
|
|
127
|
+
```
|
|
128
|
+
opencode-ship update --planner-model <a> --builder-model <b> --final-reviewer-model <c>
|
|
129
|
+
```
|
|
136
130
|
|
|
137
131
|
### 6. Section E — Provider auth probe
|
|
138
132
|
|
|
@@ -169,7 +163,7 @@ Pick the file to edit:
|
|
|
169
163
|
|
|
170
164
|
- If `CLAUDE.md` exists, edit it.
|
|
171
165
|
- Else if `AGENTS.md` exists, edit it.
|
|
172
|
-
- If neither,
|
|
166
|
+
- If neither exists, create `AGENTS.md` without asking.
|
|
173
167
|
|
|
174
168
|
If an `## Ship workflow` block exists, update in place. Otherwise append:
|
|
175
169
|
|
|
@@ -181,7 +175,7 @@ active model roles and approval policy. Issues live in GitHub.
|
|
|
181
175
|
See `docs/agents/issue-tracker.md`. Triage labels are documented in
|
|
182
176
|
`docs/agents/triage-labels.md`.
|
|
183
177
|
|
|
184
|
-
For a single-issue
|
|
178
|
+
For a single-issue ship, the user invokes `/setup-ship-workflow`
|
|
185
179
|
once, then `ship-deliver <issue-number>` (or types "Ship issue N"). The
|
|
186
180
|
controller dispatches the planner, builder, and reviewers; no further
|
|
187
181
|
user action is required until Ready.
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ship-workflow
|
|
3
|
+
description: Orchestrates the canonical ship lifecycle from issue creation through Ready PR. Use when the user asks for "implement issue N", "work on ready issues", "ship", "implement this plan", "execute the plan", "ok implement", or after a plan-mode session confirms the work scope.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# ship-workflow
|
|
7
|
+
|
|
8
|
+
You drive the opencode-ship package from a one-line user request to a green, conflict-free, ready-to-merge pull request by dispatching the durable controller.
|
|
9
|
+
|
|
10
|
+
Never ask how to run the work: no Subagent-Driven vs Inline, no Tab vs
|
|
11
|
+
Build, no GitHub issues vs Task N, no "what next", no visual-companion
|
|
12
|
+
upsell, no Deep Research unless the user asked to research.
|
|
13
|
+
After the user approves a plan, call ship_deliver. Do not offer
|
|
14
|
+
execution-mode menus.
|
|
15
|
+
|
|
16
|
+
## When you trigger
|
|
17
|
+
|
|
18
|
+
- "Implement issue N", "work on issue N", "deliver issue N"
|
|
19
|
+
- "implement this plan"
|
|
20
|
+
- "execute the plan"
|
|
21
|
+
- "ok implement"
|
|
22
|
+
- "Pick the next ready issue and implement it"
|
|
23
|
+
- "Open a PR for #N"
|
|
24
|
+
- "Mark PR #N ready"
|
|
25
|
+
- "Merge PR #N" — only valid if you already created the PR through this workflow
|
|
26
|
+
- "Clean up my worktree" / "Tidy old worktrees" — entry point for next-task cleanup
|
|
27
|
+
|
|
28
|
+
Do **not** trigger on:
|
|
29
|
+
|
|
30
|
+
- Read-only questions ("explain issue N")
|
|
31
|
+
- Plain chat about the project's domain model
|
|
32
|
+
- Typo / doc one-liners that do not deserve a PR
|
|
33
|
+
|
|
34
|
+
## Lifecycle contract
|
|
35
|
+
|
|
36
|
+
| Step | Tool | Notes |
|
|
37
|
+
|---|---|---|
|
|
38
|
+
| 1. Cleanup merged worktrees | `ship_inspect` / `ship_cleanup` | Only for provably merged attempts |
|
|
39
|
+
| 2. Setup gate | `/ship-deliver` | Refuse if `.opencode/ship.setup-pending.json` exists |
|
|
40
|
+
| 3. Dispatch controller | `ship_deliver` | Canonical Build-to-controller entrypoint |
|
|
41
|
+
| 4. Plan + approve | controller / `ship_plan_approve` | Never auto-approve |
|
|
42
|
+
| 5. Execute in linked worktree | controller | Builder, task review, commit, verifier, CI, dual-axis final review |
|
|
43
|
+
| 6. Ready | `ship_ready` | Controller-owned; same-HEAD gates required |
|
|
44
|
+
| 7. Stop at Ready | (this skill) | Do not merge without an explicit user request |
|
|
45
|
+
| 8. Merge | `ship_merge` | Explicit user request only |
|
|
46
|
+
| 9. Cleanup | `ship_cleanup` | After a successful merge |
|
|
47
|
+
| 10. Abandon closed unmerged attempts | `ship_abandon` | Only after the user explicitly closes the PR and requests abandon |
|
|
48
|
+
|
|
49
|
+
Do not call `ship_worktree`, `ship_pr`, `ship_ready`, or `ship_merge` from Build to implement an issue. Those mutations belong to `ship-controller` after `ship_deliver`.
|
|
50
|
+
|
|
51
|
+
## Progress
|
|
52
|
+
|
|
53
|
+
After each successful tool in the lifecycle, print the matching
|
|
54
|
+
`progressLine` as a normal chat sentence. Do not wrap in JSON. Do not
|
|
55
|
+
explain the stage.
|
|
56
|
+
|
|
57
|
+
- Track: after issue ensure — `Track: issue #<number>.`
|
|
58
|
+
- Build: per task — `Build: task <k>/<n> <title>.`
|
|
59
|
+
- Review: per task — `Review: pass.` or `Review: fail (see notes).`
|
|
60
|
+
- Verify: once — `Verify: pass.` or `Verify: fail.`
|
|
61
|
+
- Ready — `Ready: PR #<number>.`
|
|
62
|
+
- Merge — `Merge: <sha>.`
|
|
63
|
+
- Cleanup — `Cleanup: done.`
|
|
64
|
+
|
|
65
|
+
`shape` and `approve` have no line. Use `progressLine` from
|
|
66
|
+
`src/runtime/stages.js`.
|
|
67
|
+
|
|
68
|
+
## Hard rules
|
|
69
|
+
|
|
70
|
+
1. Every PR carries a `Closes #N` reference. If the issue does not exist, the controller creates it first.
|
|
71
|
+
2. The lifecycle stops at Ready by default. An explicit "merge it" is the only thing that triggers `ship_merge`.
|
|
72
|
+
3. Force-push, hard-reset, stash, and `git worktree remove` are denied. Use typed cleanup/abandon tools.
|
|
73
|
+
4. You never edit `main` directly. You never bypass the reviewer/verifier gates.
|
|
74
|
+
5. The typed tools are the only sanctioned way to mutate GitHub state. Do not invoke `gh pr merge`, `gh api`, or raw Git plumbing directly.
|
|
75
|
+
6. When a gate fails, fix the cause and re-run only the failed gate; never skip.
|
|
76
|
+
7. If `ship_merge` returns a `MergeError`, surface it verbatim. Do not invent a workaround.
|
|
77
|
+
|
|
78
|
+
## Stop conditions
|
|
79
|
+
|
|
80
|
+
- Ready reached: stop. Surface the PR URL, the worktree path, the recorded verifier SHA, and the explicit-merge instruction.
|
|
81
|
+
- `merge it` requested and gates are fresh: perform the squash merge. Surface the merge SHA.
|
|
82
|
+
- Any gate fails after one re-run: stop. Surface the failing tool, the failing input, and the recorded evidence.
|
|
83
|
+
- Unexpected lifecycle error (missing-manifest, missing-workflow-link, head-changed, ci-failing): stop. Surface the error envelope.
|