@oisincoveney/pipeline 1.6.0 → 1.8.0

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
@@ -10,6 +10,7 @@ artifacts.
10
10
 
11
11
  - Bun 1.1 or newer
12
12
  - Node.js 22.13 or newer
13
+ - `npx`, `backlog`, `uvx`, and Docker on `PATH` for default skill and MCP setup
13
14
  - At least one configured runner CLI on `PATH`: `codex`, `claude`,
14
15
  `opencode`, `kimi`, `pi`, or a declared command runner
15
16
 
@@ -27,6 +28,30 @@ Scaffold the default YAML workflow:
27
28
  pipe init
28
29
  ```
29
30
 
31
+ `pipe init` installs default skills with the `skills` CLI and registers default
32
+ MCP servers with the MCPM CLI from https://mcpm.sh/. The package invokes MCPM
33
+ through `uvx --python 3.12 mcpm`, so generated `.mcp.json` entries do not depend
34
+ on a globally installed `mcpm` binary. The default Qdrant/memory MCP is the
35
+ Momokaya remote endpoint
36
+ `https://memory-mcp.momokaya.ee/mcp/`.
37
+
38
+ The default GitHub MCP registration uses GitHub's official container in
39
+ read-only mode and reads `GITHUB_PERSONAL_ACCESS_TOKEN` from the environment.
40
+ The Momokaya Qdrant endpoint is protected by Traefik HTTP Basic auth. Set either
41
+ `MOMOKAYA_MCP_AUTHORIZATION` to the complete Authorization header value
42
+ (`Basic <base64-user-colon-password>`) or `MEMORY_MCP_BASIC_AUTH` to only the
43
+ base64 payload. `pipe init` resolves that value before registering the remote
44
+ server with MCPM.
45
+
46
+ Check local prerequisites and config health:
47
+
48
+ ```shell
49
+ pipe doctor
50
+ ```
51
+
52
+ For a compact operator guide covering every command plus how to attach skills
53
+ and MCP servers to agent profiles, see `docs/operator-guide.md`.
54
+
30
55
  Validate the config and compiled DAG:
31
56
 
32
57
  ```shell
@@ -57,6 +82,16 @@ Run a configured entrypoint alias:
57
82
  pipe run --entrypoint dogfood "Run deterministic local verification."
58
83
  ```
59
84
 
85
+ Run an epic drain workflow:
86
+
87
+ ```shell
88
+ pipe epic PIPE-31
89
+ ```
90
+
91
+ The `epic` entrypoint routes an epic's child tickets into fixed specialist
92
+ tracks, runs those tracks in parallel, merges passing branches, and then runs a
93
+ hardened review.
94
+
60
95
  The `pipe` binary also accepts the task directly:
61
96
 
62
97
  ```shell
@@ -150,6 +185,79 @@ The default scaffold includes a full research, red, green, verify, learn
150
185
  workflow. See `docs/config-architecture.md` for a complete example and the host
151
186
  support matrix.
152
187
 
188
+ ### Structural Parallelism
189
+
190
+ Workflows can compose other workflows with fixed YAML structure. A
191
+ `kind: workflow` node invokes another named workflow; without `worktree_root` it
192
+ runs in the current worktree, and with `worktree_root` it runs in an isolated
193
+ git worktree. A `kind: parallel` node contains a fixed set of child nodes that
194
+ run concurrently after dependencies pass. This is structural parallelism, not
195
+ dynamic fanout: agents may route work to tracks, but the branch topology stays
196
+ auditable in YAML.
197
+
198
+ The built-in `epic` entrypoint uses those primitives:
199
+
200
+ ```yaml
201
+ entrypoints:
202
+ epic:
203
+ workflow: epic-drain
204
+ description: Route an epic's tickets into specialist tracks, run them in parallel, then hardened-review.
205
+
206
+ workflows:
207
+ epic-drain:
208
+ description: Research, route, parallel-implement tracks in isolated worktrees, integrate, hardened-review.
209
+ nodes:
210
+ - id: research
211
+ kind: agent
212
+ profile: pipeline-researcher
213
+ - id: plan
214
+ kind: agent
215
+ profile: pipeline-epic-router
216
+ needs: [research]
217
+ - id: implement
218
+ kind: parallel
219
+ needs: [plan]
220
+ nodes:
221
+ - id: test
222
+ kind: workflow
223
+ workflow: default
224
+ worktree_root: .pipeline/runs/${runId}/test
225
+ - id: frontend
226
+ kind: workflow
227
+ workflow: default
228
+ worktree_root: .pipeline/runs/${runId}/frontend
229
+ - id: backend
230
+ kind: workflow
231
+ workflow: default
232
+ worktree_root: .pipeline/runs/${runId}/backend
233
+ - id: k8s
234
+ kind: workflow
235
+ workflow: infra
236
+ worktree_root: .pipeline/runs/${runId}/k8s
237
+ - id: merge
238
+ kind: builtin
239
+ builtin: drain-merge
240
+ needs: [implement]
241
+ - id: review
242
+ kind: agent
243
+ profile: pipeline-hardened-reviewer
244
+ needs: [merge]
245
+ gates:
246
+ - { id: review-verdict, kind: verdict, target: stdout }
247
+ ```
248
+
249
+ Use `.pipeline/runs/${runId}/<track>` for isolated track worktrees; the default
250
+ `.gitignore` excludes `.pipeline/runs/`. The `drain-merge` builtin consumes the
251
+ parallel output, skips non-passing or non-worktree children, verifies mergeable
252
+ branches share a base SHA, and merges passing branches into an integration
253
+ branch in declaration order. It reports merge conflicts; it does not resolve
254
+ them automatically.
255
+
256
+ The `hardened-review` skill is an external/local skill registered at
257
+ `.agents/skills/hardened-review/SKILL.md`. When that file is absent, normal
258
+ validation reports a `missing-file-reference` warning and continues; `--strict`
259
+ promotes that warning to a failure.
260
+
153
261
  ## Generated Host Resources
154
262
 
155
263
  Generate native host files from the YAML config:
@@ -164,14 +272,15 @@ runner matches the host. OpenCode also uses native subagents for cross-runner
164
272
  model-backed nodes when the runner/profile provides an OpenCode-compatible
165
273
  `model` or `host_models.opencode` value. Otherwise generated instructions
166
274
  dispatch to that runner's CLI instead of inventing a host model.
275
+ The installer creates one command surface per configured entrypoint.
167
276
 
168
- | Host | Generated files | Invocation |
169
- | ----------- | ------------------------------------------------------ | -------------------- |
170
- | Claude Code | `.claude/commands/pipe.md`, `.claude/agents/*.md` | `/pipe <task>` |
171
- | Codex | `.agents/skills/pipe/SKILL.md`, `.codex/agents/*.toml` | `$pipe <task>` |
172
- | OpenCode | `.opencode/commands/pipe.md`, `.opencode/agents/*.md` | `/pipe <task>` |
173
- | Kimi | `.kimi/skills/pipe/SKILL.md`, `.kimi/agents/*.yaml` | `/skill:pipe <task>` |
174
- | Pi | `.pi/prompts/pipe.md` | `/pipe <task>` |
277
+ | Host | Generated files | Invocation |
278
+ | ----------- | ----------------------------------------------------------------- | ---------------------------------- |
279
+ | Claude Code | `.claude/commands/<entrypoint>.md`, `.claude/agents/*.md` | `/pipe <task>`, `/inspect <task>`, `/epic <task>` |
280
+ | Codex | `.agents/skills/<entrypoint>/SKILL.md`, `.codex/agents/*.toml` | `$pipe <task>`, `$inspect <task>`, `$epic <task>` |
281
+ | OpenCode | `.opencode/commands/<entrypoint>.md`, `.opencode/agents/*.md` | `/pipe <task>`, `/inspect <task>`, `/epic <task>` |
282
+ | Kimi | `.kimi/commands/<entrypoint>.md`, `.kimi/agents/*.yaml` | `/pipe <task>`, `/inspect <task>`, `/epic <task>` |
283
+ | Pi | `.pi/prompts/<entrypoint>.md` | `/pipe <task>`, `/inspect <task>`, `/epic <task>` |
175
284
 
176
285
  The installer is idempotent, supports `--check` and `--dry-run`, and refuses to
177
286
  overwrite manually edited files unless `--force` is supplied.
@@ -196,6 +305,14 @@ runners:
196
305
  - Native subagent strategy is preferred when the selected runner can represent
197
306
  the configured semantics. Otherwise the runtime uses a subprocess boundary.
198
307
  - Parallel DAG batches run concurrently after dependencies and gates pass.
308
+ - `kind: parallel` child sets are fixed in YAML; routing agents decide which
309
+ work belongs in each declared track, not how many tracks exist.
310
+ - `kind: workflow` nodes invoke named workflows and can run in isolated
311
+ worktrees when `worktree_root` is set.
312
+ - Worktree roots support `${runId}` and `${nodeId}` templates and should live
313
+ under `.pipeline/runs/` for generated run artifacts.
314
+ - `drain-merge` merges passing worktree branches in declaration order and
315
+ reports conflicts for manual resolution.
199
316
  - Workflow execution can cap parallelism and enable fail-fast batch stopping.
200
317
  - Nodes can declare bounded retries, retry reasons, backoff, and execution
201
318
  timeouts.
@@ -0,0 +1,110 @@
1
+ {
2
+ "version": 1,
3
+ "skills": [
4
+ {
5
+ "source": "obra/superpowers",
6
+ "skills": [
7
+ "using-superpowers",
8
+ "writing-plans",
9
+ "dispatching-parallel-agents",
10
+ "requesting-code-review",
11
+ "receiving-code-review",
12
+ "verification-before-completion"
13
+ ]
14
+ },
15
+ {
16
+ "source": "addyosmani/agent-skills",
17
+ "skills": [
18
+ "context-engineering",
19
+ "source-driven-development",
20
+ "spec-driven-development",
21
+ "planning-and-task-breakdown",
22
+ "test-driven-development",
23
+ "incremental-implementation",
24
+ "debugging-and-error-recovery",
25
+ "code-review-and-quality",
26
+ "doubt-driven-development",
27
+ "security-and-hardening",
28
+ "performance-optimization",
29
+ "documentation-and-adrs",
30
+ "deprecation-and-migration"
31
+ ]
32
+ },
33
+ {
34
+ "source": "trailofbits/skills",
35
+ "skills": ["semgrep", "supply-chain-risk-auditor"]
36
+ },
37
+ {
38
+ "source": "vercel-labs/agent-skills",
39
+ "skills": ["vercel-react-best-practices", "web-design-guidelines"]
40
+ }
41
+ ],
42
+ "mcps": [
43
+ {
44
+ "name": "oisin-pipeline-backlog",
45
+ "transport": "stdio",
46
+ "command": "backlog",
47
+ "args": ["mcp", "start"]
48
+ },
49
+ {
50
+ "name": "oisin-pipeline-context7",
51
+ "transport": "remote",
52
+ "catalog": "context7"
53
+ },
54
+ {
55
+ "name": "oisin-pipeline-github-readonly",
56
+ "transport": "stdio",
57
+ "command": "docker",
58
+ "args": [
59
+ "run",
60
+ "-i",
61
+ "--rm",
62
+ "-e",
63
+ "GITHUB_PERSONAL_ACCESS_TOKEN",
64
+ "ghcr.io/github/github-mcp-server",
65
+ "stdio",
66
+ "--read-only"
67
+ ],
68
+ "env": {
69
+ "GITHUB_PERSONAL_ACCESS_TOKEN": "${GITHUB_PERSONAL_ACCESS_TOKEN}"
70
+ }
71
+ },
72
+ {
73
+ "name": "oisin-pipeline-playwright",
74
+ "transport": "stdio",
75
+ "catalog": "playwright"
76
+ },
77
+ {
78
+ "name": "oisin-pipeline-qdrant",
79
+ "transport": "remote",
80
+ "url": "https://memory-mcp.momokaya.ee/mcp/",
81
+ "headers": {
82
+ "Authorization": {
83
+ "sources": [
84
+ { "env": "MOMOKAYA_MCP_AUTHORIZATION" },
85
+ { "env": "MEMORY_MCP_BASIC_AUTH", "prefix": "Basic " }
86
+ ]
87
+ }
88
+ }
89
+ },
90
+ {
91
+ "name": "oisin-pipeline-semgrep",
92
+ "transport": "stdio",
93
+ "command": "docker",
94
+ "args": ["run", "-i", "--rm", "ghcr.io/semgrep/mcp", "-t", "stdio"]
95
+ },
96
+ {
97
+ "name": "oisin-pipeline-serena",
98
+ "transport": "stdio",
99
+ "command": "uvx",
100
+ "args": [
101
+ "--from",
102
+ "git+https://github.com/oraios/serena",
103
+ "serena",
104
+ "start-mcp-server",
105
+ "--project-from-cwd",
106
+ "--context=codex"
107
+ ]
108
+ }
109
+ ]
110
+ }