refactor(lanes): drop the workflow skills and Superpowers link; pipelines go dormant

The plugin stops shipping its workflow layer:
- skills/ship-feature and skills/ship-feature-lane, the 18 stage/ship slash
  commands (plugin.json keeps agenthub-doctor/update/open), and all four
  agents/ (qc-local, senior-gate-reviewer, backend-reviewer, frontend-reviewer).
- CLI `agenthub skills install`, `agenthub lanes agents install`,
  `agenthub ship-full|ship-quick`; routes POST /api/skills/install and
  POST /api/lanes/:id/agents/install; the Settings button, the lane Tools
  menu item and the Add-lane setup step that called them.
- The Superpowers auto-install: server/lib/skill-plugins.js, the bootstrap's
  autoInstallSkillPlugins / skillPluginsSettled gate and the doctor row.

Pipelines are kept but dormant: server/data/pipelines/ is deleted, so no
template ships. `default` resolves to EMPTY_PIPELINE (no nodes, progress 0),
createLane still accepts it, POST /api/lanes/:id/stage answers 400
ENOPIPELINE, and the Workspace hides the stage timer, pickers, PipelineMap
and strip stage chip for a lane with no nodes. A template dropped into
DASHBOARD_PIPELINES_DIR turns it all back on. The server suite loads its
templates from server/__tests__/fixtures/pipelines/.

Docs: CLAUDE.md (marker, retired rules), README(.vi), INSTALL, ARCHITECTURE,
docs/LANES|PLUGINS|CLI|API, agenthub-introduction.html.
This commit is contained in:
2026-09-28 17:44:27 +07:00
parent 3c238bc5c4
commit 2b8f83d2dd
72 changed files with 325 additions and 3305 deletions
@@ -25,12 +25,6 @@ Print the output verbatim, then add at most three lines of guidance based on the
- `FAIL npm` or `FAIL Disk` → nothing else in the report can be trusted until
these are fixed; both silently truncate installs.
- `WARN agenthub CLI` → print the exact `export PATH=...` line from the output.
- `WARN Skill plugins` → the pipelines name slash commands no installed plugin
provides. The dashboard is unaffected; `/agenthub:ship-feature(-lane)` is what
stops partway. The bootstrap normally installs these itself, so this row also
means that attempt has not run or did not succeed — say `/agenthub-update` retries
it, and print the `claude plugin install …` line from the output as the manual
route.
- `WARN systemd` → when it says the unit names a **previous plugin version**,
the dashboard is running now but will NOT come back after a reboot. Starting
a new Claude Code session repairs it; print the `--force` command from the
-23
View File
@@ -1,23 +0,0 @@
---
description: Declare the lane done
argument-hint: [extra prompt words]
allowed-tools: Bash(agenthub lanes node:*)
---
The command this lane pipeline template declares for its `done` node, resolved
against whichever template the lane is actually on (matched by id or alias):
!`agenthub lanes node done $ARGUMENTS --print`
Run that here, in THIS session - never start a nested `claude` process:
- Line reads `cd <dir> && "claude" "<slash command>"` -> invoke that slash
command yourself, passing any extra words as its argument.
- Anything else is a shell argv -> run it with Bash from `<dir>`.
- Line is an error (`no node ...`, `declares no command`, no lane owns this
directory) -> print it verbatim and stop. Do not guess a substitute.
Do NOT call `agenthub stage` afterwards: a command running is not proof the node
passed. Declare the stage when the work is actually done. (The exception is a
node whose command already IS `agenthub stage <id>` - there the declaration is the
whole step.)
-23
View File
@@ -1,23 +0,0 @@
---
description: Declare e2e passed (ship-feature only)
argument-hint: [extra prompt words]
allowed-tools: Bash(agenthub lanes node:*)
---
The command this lane pipeline template declares for its `e2e-passed` node, resolved
against whichever template the lane is actually on (matched by id or alias):
!`agenthub lanes node e2e-passed $ARGUMENTS --print`
Run that here, in THIS session - never start a nested `claude` process:
- Line reads `cd <dir> && "claude" "<slash command>"` -> invoke that slash
command yourself, passing any extra words as its argument.
- Anything else is a shell argv -> run it with Bash from `<dir>`.
- Line is an error (`no node ...`, `declares no command`, no lane owns this
directory) -> print it verbatim and stop. Do not guess a substitute.
Do NOT call `agenthub stage` afterwards: a command running is not proof the node
passed. Declare the stage when the work is actually done. (The exception is a
node whose command already IS `agenthub stage <id>` - there the declaration is the
whole step.)
-23
View File
@@ -1,23 +0,0 @@
---
description: E2e on the feature branch (ship-feature only)
argument-hint: [extra prompt words]
allowed-tools: Bash(agenthub lanes node:*)
---
The command this lane pipeline template declares for its `e2e` node, resolved
against whichever template the lane is actually on (matched by id or alias):
!`agenthub lanes node e2e $ARGUMENTS --print`
Run that here, in THIS session - never start a nested `claude` process:
- Line reads `cd <dir> && "claude" "<slash command>"` -> invoke that slash
command yourself, passing any extra words as its argument.
- Anything else is a shell argv -> run it with Bash from `<dir>`.
- Line is an error (`no node ...`, `declares no command`, no lane owns this
directory) -> print it verbatim and stop. Do not guess a substitute.
Do NOT call `agenthub stage` afterwards: a command running is not proof the node
passed. Declare the stage when the work is actually done. (The exception is a
node whose command already IS `agenthub stage <id>` - there the declaration is the
whole step.)
-23
View File
@@ -1,23 +0,0 @@
---
description: Senior GO/NO-GO gate
argument-hint: [extra prompt words]
allowed-tools: Bash(agenthub lanes node:*)
---
The command this lane pipeline template declares for its `gate` node, resolved
against whichever template the lane is actually on (matched by id or alias):
!`agenthub lanes node gate $ARGUMENTS --print`
Run that here, in THIS session - never start a nested `claude` process:
- Line reads `cd <dir> && "claude" "<slash command>"` -> invoke that slash
command yourself, passing any extra words as its argument.
- Anything else is a shell argv -> run it with Bash from `<dir>`.
- Line is an error (`no node ...`, `declares no command`, no lane owns this
directory) -> print it verbatim and stop. Do not guess a substitute.
Do NOT call `agenthub stage` afterwards: a command running is not proof the node
passed. Declare the stage when the work is actually done. (The exception is a
node whose command already IS `agenthub stage <id>` - there the declaration is the
whole step.)
-23
View File
@@ -1,23 +0,0 @@
---
description: Implement (TDD)
argument-hint: [extra prompt words]
allowed-tools: Bash(agenthub lanes node:*)
---
The command this lane pipeline template declares for its `implement` node, resolved
against whichever template the lane is actually on (matched by id or alias):
!`agenthub lanes node implement $ARGUMENTS --print`
Run that here, in THIS session - never start a nested `claude` process:
- Line reads `cd <dir> && "claude" "<slash command>"` -> invoke that slash
command yourself, passing any extra words as its argument.
- Anything else is a shell argv -> run it with Bash from `<dir>`.
- Line is an error (`no node ...`, `declares no command`, no lane owns this
directory) -> print it verbatim and stop. Do not guess a substitute.
Do NOT call `agenthub stage` afterwards: a command running is not proof the node
passed. Declare the stage when the work is actually done. (The exception is a
node whose command already IS `agenthub stage <id>` - there the declaration is the
whole step.)
-23
View File
@@ -1,23 +0,0 @@
---
description: Intake — brainstorm the requirement
argument-hint: [extra prompt words]
allowed-tools: Bash(agenthub lanes node:*)
---
The command this lane pipeline template declares for its `intake` node, resolved
against whichever template the lane is actually on (matched by id or alias):
!`agenthub lanes node intake $ARGUMENTS --print`
Run that here, in THIS session - never start a nested `claude` process:
- Line reads `cd <dir> && "claude" "<slash command>"` -> invoke that slash
command yourself, passing any extra words as its argument.
- Anything else is a shell argv -> run it with Bash from `<dir>`.
- Line is an error (`no node ...`, `declares no command`, no lane owns this
directory) -> print it verbatim and stop. Do not guess a substitute.
Do NOT call `agenthub stage` afterwards: a command running is not proof the node
passed. Declare the stage when the work is actually done. (The exception is a
node whose command already IS `agenthub stage <id>` - there the declaration is the
whole step.)
-23
View File
@@ -1,23 +0,0 @@
---
description: Declare merged (ship-feature only)
argument-hint: [extra prompt words]
allowed-tools: Bash(agenthub lanes node:*)
---
The command this lane pipeline template declares for its `merged` node, resolved
against whichever template the lane is actually on (matched by id or alias):
!`agenthub lanes node merged $ARGUMENTS --print`
Run that here, in THIS session - never start a nested `claude` process:
- Line reads `cd <dir> && "claude" "<slash command>"` -> invoke that slash
command yourself, passing any extra words as its argument.
- Anything else is a shell argv -> run it with Bash from `<dir>`.
- Line is an error (`no node ...`, `declares no command`, no lane owns this
directory) -> print it verbatim and stop. Do not guess a substitute.
Do NOT call `agenthub stage` afterwards: a command running is not proof the node
passed. Declare the stage when the work is actually done. (The exception is a
node whose command already IS `agenthub stage <id>` - there the declaration is the
whole step.)
-23
View File
@@ -1,23 +0,0 @@
---
description: Plan — write the implementation plan
argument-hint: [extra prompt words]
allowed-tools: Bash(agenthub lanes node:*)
---
The command this lane pipeline template declares for its `plan` node, resolved
against whichever template the lane is actually on (matched by id or alias):
!`agenthub lanes node plan $ARGUMENTS --print`
Run that here, in THIS session - never start a nested `claude` process:
- Line reads `cd <dir> && "claude" "<slash command>"` -> invoke that slash
command yourself, passing any extra words as its argument.
- Anything else is a shell argv -> run it with Bash from `<dir>`.
- Line is an error (`no node ...`, `declares no command`, no lane owns this
directory) -> print it verbatim and stop. Do not guess a substitute.
Do NOT call `agenthub stage` afterwards: a command running is not proof the node
passed. Declare the stage when the work is actually done. (The exception is a
node whose command already IS `agenthub stage <id>` - there the declaration is the
whole step.)
-23
View File
@@ -1,23 +0,0 @@
---
description: Open the PR
argument-hint: [extra prompt words]
allowed-tools: Bash(agenthub lanes node:*)
---
The command this lane pipeline template declares for its `pr-open` node, resolved
against whichever template the lane is actually on (matched by id or alias):
!`agenthub lanes node pr-open $ARGUMENTS --print`
Run that here, in THIS session - never start a nested `claude` process:
- Line reads `cd <dir> && "claude" "<slash command>"` -> invoke that slash
command yourself, passing any extra words as its argument.
- Anything else is a shell argv -> run it with Bash from `<dir>`.
- Line is an error (`no node ...`, `declares no command`, no lane owns this
directory) -> print it verbatim and stop. Do not guess a substitute.
Do NOT call `agenthub stage` afterwards: a command running is not proof the node
passed. Declare the stage when the work is actually done. (The exception is a
node whose command already IS `agenthub stage <id>` - there the declaration is the
whole step.)
-23
View File
@@ -1,23 +0,0 @@
---
description: Publish the branch
argument-hint: [extra prompt words]
allowed-tools: Bash(agenthub lanes node:*)
---
The command this lane pipeline template declares for its `publishing` node, resolved
against whichever template the lane is actually on (matched by id or alias):
!`agenthub lanes node publishing $ARGUMENTS --print`
Run that here, in THIS session - never start a nested `claude` process:
- Line reads `cd <dir> && "claude" "<slash command>"` -> invoke that slash
command yourself, passing any extra words as its argument.
- Anything else is a shell argv -> run it with Bash from `<dir>`.
- Line is an error (`no node ...`, `declares no command`, no lane owns this
directory) -> print it verbatim and stop. Do not guess a substitute.
Do NOT call `agenthub stage` afterwards: a command running is not proof the node
passed. Declare the stage when the work is actually done. (The exception is a
node whose command already IS `agenthub stage <id>` - there the declaration is the
whole step.)
-23
View File
@@ -1,23 +0,0 @@
---
description: Declare the QC plan (ship-feature only)
argument-hint: [extra prompt words]
allowed-tools: Bash(agenthub lanes node:*)
---
The command this lane pipeline template declares for its `qc-plan` node, resolved
against whichever template the lane is actually on (matched by id or alias):
!`agenthub lanes node qc-plan $ARGUMENTS --print`
Run that here, in THIS session - never start a nested `claude` process:
- Line reads `cd <dir> && "claude" "<slash command>"` -> invoke that slash
command yourself, passing any extra words as its argument.
- Anything else is a shell argv -> run it with Bash from `<dir>`.
- Line is an error (`no node ...`, `declares no command`, no lane owns this
directory) -> print it verbatim and stop. Do not guess a substitute.
Do NOT call `agenthub stage` afterwards: a command running is not proof the node
passed. Declare the stage when the work is actually done. (The exception is a
node whose command already IS `agenthub stage <id>` - there the declaration is the
whole step.)
-23
View File
@@ -1,23 +0,0 @@
---
description: Browser QC + proof gallery (ship-feature only)
argument-hint: [extra prompt words]
allowed-tools: Bash(agenthub lanes node:*)
---
The command this lane pipeline template declares for its `qc` node, resolved
against whichever template the lane is actually on (matched by id or alias):
!`agenthub lanes node qc $ARGUMENTS --print`
Run that here, in THIS session - never start a nested `claude` process:
- Line reads `cd <dir> && "claude" "<slash command>"` -> invoke that slash
command yourself, passing any extra words as its argument.
- Anything else is a shell argv -> run it with Bash from `<dir>`.
- Line is an error (`no node ...`, `declares no command`, no lane owns this
directory) -> print it verbatim and stop. Do not guess a substitute.
Do NOT call `agenthub stage` afterwards: a command running is not proof the node
passed. Declare the stage when the work is actually done. (The exception is a
node whose command already IS `agenthub stage <id>` - there the declaration is the
whole step.)
-23
View File
@@ -1,23 +0,0 @@
---
description: Declare the run reported (ship-feature only)
argument-hint: [extra prompt words]
allowed-tools: Bash(agenthub lanes node:*)
---
The command this lane pipeline template declares for its `reported` node, resolved
against whichever template the lane is actually on (matched by id or alias):
!`agenthub lanes node reported $ARGUMENTS --print`
Run that here, in THIS session - never start a nested `claude` process:
- Line reads `cd <dir> && "claude" "<slash command>"` -> invoke that slash
command yourself, passing any extra words as its argument.
- Anything else is a shell argv -> run it with Bash from `<dir>`.
- Line is an error (`no node ...`, `declares no command`, no lane owns this
directory) -> print it verbatim and stop. Do not guess a substitute.
Do NOT call `agenthub stage` afterwards: a command running is not proof the node
passed. Declare the stage when the work is actually done. (The exception is a
node whose command already IS `agenthub stage <id>` - there the declaration is the
whole step.)
-23
View File
@@ -1,23 +0,0 @@
---
description: Code review
argument-hint: [extra prompt words]
allowed-tools: Bash(agenthub lanes node:*)
---
The command this lane pipeline template declares for its `review` node, resolved
against whichever template the lane is actually on (matched by id or alias):
!`agenthub lanes node review $ARGUMENTS --print`
Run that here, in THIS session - never start a nested `claude` process:
- Line reads `cd <dir> && "claude" "<slash command>"` -> invoke that slash
command yourself, passing any extra words as its argument.
- Anything else is a shell argv -> run it with Bash from `<dir>`.
- Line is an error (`no node ...`, `declares no command`, no lane owns this
directory) -> print it verbatim and stop. Do not guess a substitute.
Do NOT call `agenthub stage` afterwards: a command running is not proof the node
passed. Declare the stage when the work is actually done. (The exception is a
node whose command already IS `agenthub stage <id>` - there the declaration is the
whole step.)
-23
View File
@@ -1,23 +0,0 @@
---
description: Run the full 16-stage lane pipeline (implement → gates → e2e → review → QC → senior gate → PR, watched until merged)
argument-hint: <requirement>
allowed-tools: Bash(agenthub lanes pipeline:*)
---
Put this lane on the 16-node `ship-feature` template first, so the dashboard
renders the right node count from the first stage rather than after the skill
self-corrects:
!`agenthub lanes pipeline ship-feature`
Then run the pipeline **in this session** by invoking `/agenthub:ship-feature-lane`
with this requirement:
$ARGUMENTS
- No requirement given → ask for one. Never guess what to build.
- The switch above failed (no lane owns this directory) → say so and stop; the
skill has no lane to report stages against.
This is the in-session twin of `agenthub ship-full "<requirement>"`, which does the
same two steps from a terminal by spawning its own `claude`.
-23
View File
@@ -1,23 +0,0 @@
---
description: Run the 8-stage in-repo pipeline (plan → implement → tests → review → gate → ship). No PR, no browser QC
argument-hint: <requirement>
allowed-tools: Bash(agenthub lanes pipeline:*)
---
Put this lane on the 8-node `default` template first, so the dashboard renders
the right node count from the first stage:
!`agenthub lanes pipeline default`
Then run the pipeline **in this session** by invoking `/agenthub:ship-feature` with
this requirement:
$ARGUMENTS
- No requirement given → ask for one. Never guess what to build.
- The switch above failed (no lane owns this directory) → say so and stop; the
skill has no lane to report stages against.
This is the in-session twin of `agenthub ship-quick "<requirement>"`. It stops at
review/gate: no PR is opened and no browser QC runs — use `/ship-full` when the
work should reach reviewers.
-23
View File
@@ -1,23 +0,0 @@
---
description: Tests / pre-push CI gates
argument-hint: [extra prompt words]
allowed-tools: Bash(agenthub lanes node:*)
---
The command this lane pipeline template declares for its `tests` node, resolved
against whichever template the lane is actually on (matched by id or alias):
!`agenthub lanes node tests $ARGUMENTS --print`
Run that here, in THIS session - never start a nested `claude` process:
- Line reads `cd <dir> && "claude" "<slash command>"` -> invoke that slash
command yourself, passing any extra words as its argument.
- Anything else is a shell argv -> run it with Bash from `<dir>`.
- Line is an error (`no node ...`, `declares no command`, no lane owns this
directory) -> print it verbatim and stop. Do not guess a substitute.
Do NOT call `agenthub stage` afterwards: a command running is not proof the node
passed. Declare the stage when the work is actually done. (The exception is a
node whose command already IS `agenthub stage <id>` - there the declaration is the
whole step.)
-23
View File
@@ -1,23 +0,0 @@
---
description: Watch the PR / CI (ship-feature only)
argument-hint: [extra prompt words]
allowed-tools: Bash(agenthub lanes node:*)
---
The command this lane pipeline template declares for its `watching-pr` node, resolved
against whichever template the lane is actually on (matched by id or alias):
!`agenthub lanes node watching-pr $ARGUMENTS --print`
Run that here, in THIS session - never start a nested `claude` process:
- Line reads `cd <dir> && "claude" "<slash command>"` -> invoke that slash
command yourself, passing any extra words as its argument.
- Anything else is a shell argv -> run it with Bash from `<dir>`.
- Line is an error (`no node ...`, `declares no command`, no lane owns this
directory) -> print it verbatim and stop. Do not guess a substitute.
Do NOT call `agenthub stage` afterwards: a command running is not proof the node
passed. Declare the stage when the work is actually done. (The exception is a
node whose command already IS `agenthub stage <id>` - there the declaration is the
whole step.)