opencode-ship 1.1.8 → 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 +21 -0
- package/README.md +10 -10
- package/THIRD_PARTY_NOTICES.md +1 -1
- package/assets/agents/ship-controller.md +50 -28
- 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 +21 -9
- 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/{delivery-workflow → ship-workflow}/SKILL.md +37 -11
- 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 +1476 -174
- package/dist/core.js +99 -7
- package/dist/plugin.js +18510 -17921
- 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 +46 -5
- package/tests/plugin/plugin-load.test.mjs +27 -5
- package/vendor/sources.json +21 -21
|
@@ -1,104 +1,32 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: skill-discovery
|
|
3
|
-
description:
|
|
3
|
+
description: Documentation for automatic stack skill discovery. Discovery runs inside init and ship_plan_start via syncSkills; do not treat this skill as a step the model must remember.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# skill-discovery
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
Trusted stack skills are discovered and installed by `syncSkills`, not by remembering to run `npx skills find`. `init` runs the pipeline after a successful commit. `ship_plan_start` runs the same pipeline before creating a workflow, so discovery cannot be skipped.
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
This skill is documentation only. Do not run a separate discovery pass unless the user asks.
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
- The task objective references a domain where a public skill likely exists (web frameworks, testing, deployment, design, etc.).
|
|
14
|
-
- The user has not yet opted out of skill discovery for this session.
|
|
12
|
+
## What the pipeline does
|
|
15
13
|
|
|
16
|
-
|
|
14
|
+
1. Map `package.json` dependencies to 1–5 short queries (`react`, `nextjs`, `vitest`, …).
|
|
15
|
+
2. On `ship_plan_start`, append extra queries from issue text without replacing the stack.
|
|
16
|
+
3. Query the public skills registry and partition with `isAutoInstallable`.
|
|
17
|
+
4. Auto-install trusted owners (`vercel-labs`, `anthropics`, `obra`, `mattpocock`, `ComposioHQ`) with `minInstalls >= 1000`, max 5 per pass, into `.opencode/skills/<name>/`.
|
|
18
|
+
5. Skip untrusted owners, managed-skill name collisions, existing destinations, and policy rejects.
|
|
17
19
|
|
|
18
|
-
|
|
19
|
-
- Tasks that are already covered by a vendored skill from the engineering catalog
|
|
20
|
+
## Untrusted candidates
|
|
20
21
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
### 1. Extract a discovery query
|
|
24
|
-
|
|
25
|
-
From the current task brief (interfaces, files, technology stack), build one short query string (2–5 words). Example: `react testing`, `docker deploy`, `postgres migrations`, `tailwind components`.
|
|
26
|
-
|
|
27
|
-
### 2. Search the skills ecosystem
|
|
28
|
-
|
|
29
|
-
```bash
|
|
30
|
-
npx skills find "<query>"
|
|
31
|
-
```
|
|
32
|
-
|
|
33
|
-
The CLI returns candidates with source repo, install count, and skill name. Parse the output, do not transcribe it.
|
|
34
|
-
|
|
35
|
-
### 3. Score and filter
|
|
36
|
-
|
|
37
|
-
The install allowlist and quality threshold live in `ship.config.json` under `skillDiscovery`:
|
|
38
|
-
|
|
39
|
-
```json
|
|
40
|
-
{
|
|
41
|
-
"skillDiscovery": {
|
|
42
|
-
"trustedOwners": [
|
|
43
|
-
"vercel-labs",
|
|
44
|
-
"anthropics",
|
|
45
|
-
"obra",
|
|
46
|
-
"mattpocock",
|
|
47
|
-
"ComposioHQ"
|
|
48
|
-
],
|
|
49
|
-
"minInstalls": 1000,
|
|
50
|
-
"blocklist": ["known-bad-owner/example"]
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
```
|
|
54
|
-
|
|
55
|
-
**Auto-install** is allowed only if all of the following are true:
|
|
56
|
-
|
|
57
|
-
- source owner is in `trustedOwners`
|
|
58
|
-
- install count >= `minInstalls` (default 1000)
|
|
59
|
-
- skill name does not conflict with a managed `opencode-ship` skill
|
|
60
|
-
- the user has not previously blocked this skill in this repo
|
|
61
|
-
|
|
62
|
-
Otherwise:
|
|
63
|
-
|
|
64
|
-
- If the source is untrusted but the skill looks relevant, present 1–3 candidates to the user and wait for a yes/no.
|
|
65
|
-
- If no candidates match, continue without installation.
|
|
66
|
-
|
|
67
|
-
### 4. Install project-locally
|
|
68
|
-
|
|
69
|
-
Auto-approved candidates install to `.opencode/skills/<skill>/SKILL.md` (project-local). The typed tool `ship_skill_install` records every install in the run ledger so `doctor` and `uninstall` can audit it.
|
|
70
|
-
|
|
71
|
-
Manual install if the user prefers global:
|
|
72
|
-
|
|
73
|
-
```bash
|
|
74
|
-
npx skills add <owner/repo@skill> -g -y
|
|
75
|
-
```
|
|
76
|
-
|
|
77
|
-
Prefer project-local unless the user explicitly asks for global.
|
|
78
|
-
|
|
79
|
-
### 5. Report
|
|
80
|
-
|
|
81
|
-
After discovery, emit a one-line summary in the run:
|
|
82
|
-
|
|
83
|
-
```text
|
|
84
|
-
Skill discovery: <n> candidates, <m> installed (<owner/skill list>).
|
|
85
|
-
```
|
|
86
|
-
|
|
87
|
-
If 0 installed, say `Skill discovery: 0 installed, continuing with catalog skills only.`
|
|
22
|
+
- `init`: print untrusted package/skill names; do not wait.
|
|
23
|
+
- `ship_plan_start`: return them on the success envelope as `skills.skippedUntrusted`. Ask the user yes/no before any extra install.
|
|
88
24
|
|
|
89
25
|
## Hard rules
|
|
90
26
|
|
|
91
|
-
- Never
|
|
92
|
-
- Never
|
|
93
|
-
- Never
|
|
27
|
+
- Never auto-install an untrusted owner.
|
|
28
|
+
- Never shadow a managed opencode-ship skill.
|
|
29
|
+
- Never overwrite an existing `.opencode/skills/<name>` directory.
|
|
94
30
|
- Never install more than 5 skills in one discovery pass.
|
|
95
|
-
-
|
|
96
|
-
|
|
97
|
-
## Permissions
|
|
98
|
-
|
|
99
|
-
This skill expects the following bash allowances on the host (configured in `ship-controller` frontmatter):
|
|
100
|
-
|
|
101
|
-
- `npx skills find *`
|
|
102
|
-
- `npx skills add *`
|
|
103
|
-
- `ls .opencode/skills`
|
|
104
|
-
- `cat .opencode/skills/*/SKILL.md`
|
|
31
|
+
- Registry / `skills` CLI failure is a warning. Continue with catalog skills only.
|
|
32
|
+
- Prefer project-local `.opencode/skills` unless the user explicitly asks for `~/.config/opencode`.
|
|
@@ -1,10 +1,14 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: subagent-driven-development
|
|
3
|
-
description:
|
|
3
|
+
description: Do not use when opencode-ship is installed. Use ship_deliver. (Upstream Superpowers executor; ship consumers must not run it.)
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Subagent-Driven Development
|
|
7
7
|
|
|
8
|
+
If this repo has `.opencode/plugins/opencode-ship.js`, do not use this
|
|
9
|
+
skill. Call `ship_deliver` (via executing-plans / ship-workflow)
|
|
10
|
+
instead. Never implement or commit in the current session.
|
|
11
|
+
|
|
8
12
|
Execute plan by dispatching a fresh implementer subagent per task, a task review (spec compliance + code quality) after each, and a broad whole-branch review at the end.
|
|
9
13
|
|
|
10
14
|
**Why subagents:** You delegate tasks to specialized agents with isolated context. By precisely crafting their instructions and context, you ensure they stay focused and succeed at their task. They should never inherit your session's context or history — you construct exactly what they need. This also preserves your own context for coordination work.
|
|
@@ -509,4 +513,4 @@ This skill is part of the engineering profile shipped by
|
|
|
509
513
|
Ship controller; the cheap builder (`minimax/MiniMax-M3`) cannot
|
|
510
514
|
commit, push, mutate GitHub, mark Ready, or merge. The
|
|
511
515
|
verification-before-completion rule is enforced by
|
|
512
|
-
`
|
|
516
|
+
`ship_verify`, not by the model self-asserting completion.
|
|
@@ -289,4 +289,4 @@ This skill is part of the engineering profile shipped by
|
|
|
289
289
|
Ship controller; the cheap builder (`minimax/MiniMax-M3`) cannot
|
|
290
290
|
commit, push, mutate GitHub, mark Ready, or merge. The
|
|
291
291
|
verification-before-completion rule is enforced by
|
|
292
|
-
`
|
|
292
|
+
`ship_verify`, not by the model self-asserting completion.
|
|
@@ -326,4 +326,4 @@ This skill is part of the engineering profile shipped by
|
|
|
326
326
|
Ship controller; the cheap builder (`minimax/MiniMax-M3`) cannot
|
|
327
327
|
commit, push, mutate GitHub, mark Ready, or merge. The
|
|
328
328
|
verification-before-completion rule is enforced by
|
|
329
|
-
`
|
|
329
|
+
`ship_verify`, not by the model self-asserting completion.
|
|
@@ -126,4 +126,4 @@ This skill is part of the engineering profile shipped by
|
|
|
126
126
|
Ship controller; the cheap builder (`minimax/MiniMax-M3`) cannot
|
|
127
127
|
commit, push, mutate GitHub, mark Ready, or merge. The
|
|
128
128
|
verification-before-completion rule is enforced by
|
|
129
|
-
`
|
|
129
|
+
`ship_verify`, not by the model self-asserting completion.
|
|
@@ -6,6 +6,12 @@ disable-model-invocation: true
|
|
|
6
6
|
|
|
7
7
|
A loose idea has arrived — too big for one agent session, and wrapped in fog: the way from here to the **destination** isn't visible yet. Wayfinding is about finding that way, not charging at the destination. This skill charts the way as a **shared map** on the repo's issue tracker, then works its **decision tickets** — questions whose resolution is a decision, not slices of a build to execute — one at a time until the route is clear.
|
|
8
8
|
|
|
9
|
+
Never ask how to run the work: no Subagent-Driven vs Inline, no Tab vs
|
|
10
|
+
Build, no GitHub issues vs Task N, no "what next", no visual-companion
|
|
11
|
+
upsell, no Deep Research unless the user asked to research.
|
|
12
|
+
After the user approves a plan, call ship_deliver. Do not offer
|
|
13
|
+
execution-mode menus.
|
|
14
|
+
|
|
9
15
|
The destination varies per effort, and naming it is the first act of charting — it shapes every ticket. It might be a spec to hand off and iterate on, a decision to lock before planning starts, or a change made in place like a data-structure migration. The map is domain-agnostic — engineering work, course content, whatever fits the shape.
|
|
10
16
|
|
|
11
17
|
## Plan, don't do
|
|
@@ -109,7 +115,7 @@ Two modes. Either way, **never resolve more than one ticket per session** — wi
|
|
|
109
115
|
User invokes with a loose idea.
|
|
110
116
|
|
|
111
117
|
1. **Name the destination.** Run a `/grilling` and `/domain-modeling` session to pin down what this map is finding its way to — the spec, decision, or change. The destination fixes the scope, so it's settled first.
|
|
112
|
-
2. **Map the frontier.** Grill again, **breadth-first** this time: fan out across the whole space rather than deep on any one thread, surfacing the open decisions and the first steps takeable now. **If this surfaces no fog** — the way to the destination is already clear, the whole journey small enough for one session — you don't need a map.
|
|
118
|
+
2. **Map the frontier.** Grill again, **breadth-first** this time: fan out across the whole space rather than deep on any one thread, surfacing the open decisions and the first steps takeable now. **If this surfaces no fog** — the way to the destination is already clear, the whole journey small enough for one session — you don't need a map. Continue into `ship_deliver`, or stop after the map exists.
|
|
113
119
|
3. **Create the map** (label `wayfinder:map`): Destination and Notes filled in, Decisions-so-far empty, the fog sketched into **Not yet specified**.
|
|
114
120
|
4. **Create the tickets you can specify now** as child issues of the map — then wire blocking edges in a **second pass** (issues need ids before they can reference each other). Wiring sorts them into the frontier and the blocked; everything you can't yet specify stays in the fog — the **Not yet specified** section.
|
|
115
121
|
5. **Fire the research subagents.** For each `research` ticket you just created, spin up a `/research` subagent to resolve it in parallel, capturing its findings on a throwaway `research/<name>` branch with a context pointer from the ticket.
|
|
@@ -149,29 +149,40 @@ If you find issues, fix them inline. No need to re-review — just fix and move
|
|
|
149
149
|
|
|
150
150
|
## Execution Handoff
|
|
151
151
|
|
|
152
|
-
After saving the plan,
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
152
|
+
After saving the plan, tell the user the file path in one sentence
|
|
153
|
+
using: `Plan: <path>`. Ask one product question: whether the plan
|
|
154
|
+
matches what they want. Then stop.
|
|
155
|
+
|
|
156
|
+
Never ask how to run the work: no Subagent vs Inline, no Tab vs
|
|
157
|
+
Build, no GitHub issues vs Task N, no "what next".
|
|
158
|
+
|
|
159
|
+
### After the user confirms the plan
|
|
160
|
+
|
|
161
|
+
The plan is product-shaped, not workflow-shaped. The next step is
|
|
162
|
+
a single fork — does the user want to start building now in this
|
|
163
|
+
chat, or continue later in a new chat?
|
|
164
|
+
|
|
165
|
+
1. Ask **one** `question`: "Start building now in this chat, or
|
|
166
|
+
continue later?" Recommend "Start now" — this chat waits until
|
|
167
|
+
the controller finishes and prints the PR Ready.
|
|
168
|
+
2. On **Start now**: call `ship_issue` (use the plan heading as
|
|
169
|
+
the title and the plan path as the body) and then call
|
|
170
|
+
`ship_deliver` with that issue number. Print the envelope
|
|
171
|
+
`progress` and `next` lines so the user sees the stage. Stop
|
|
172
|
+
talking about how the work runs; the controller prints Build /
|
|
173
|
+
Review / Verify / Ready per task.
|
|
174
|
+
3. On **Continue later**: print exactly two lines and stop.
|
|
175
|
+
|
|
176
|
+
```
|
|
177
|
+
Plan: <path>
|
|
178
|
+
To build this later, start a new chat and say: Implement the approved plan at <path>
|
|
179
|
+
```
|
|
169
180
|
|
|
170
181
|
## Ship integration
|
|
171
182
|
|
|
172
183
|
This skill is part of the engineering profile shipped by
|
|
173
184
|
`opencode-ship@1.0`. Execution is driven by the deterministic
|
|
174
|
-
Ship controller; the cheap builder (`minimax/MiniMax-M3`)
|
|
175
|
-
commit, push, mutate GitHub, mark Ready, or merge. The
|
|
185
|
+
Ship controller; the cheap builder (`minimax-coding-plan/MiniMax-M3`)
|
|
186
|
+
cannot commit, push, mutate GitHub, mark Ready, or merge. The
|
|
176
187
|
verification-before-completion rule is enforced by
|
|
177
|
-
`
|
|
188
|
+
`ship_verify`, not by the model self-asserting completion.
|