@hybridlabor-api/aos 4.15.0 → 4.17.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/.agents/plugins/marketplace.json +20 -0
- package/.claude/hooks/env-file-protection.mjs +19 -1
- package/.claude/hooks/go-gate.mjs +787 -68
- package/.claude/hooks/go-grant.mjs +88 -0
- package/.claude/settings.json +8 -0
- package/.codex-plugin/plugin.json +36 -6
- package/.opencode/commands/bdb-aos-brainstorm.md +5 -0
- package/.opencode/commands/bdb-aos-doctor.md +5 -0
- package/.opencode/commands/bdb-aos-graph.md +5 -0
- package/.opencode/commands/bdb-aos-init.md +5 -0
- package/.opencode/commands/bdb-aos-loop.md +5 -0
- package/.opencode/commands/bdb-aos-mastersession.md +5 -0
- package/.opencode/commands/bdb-aos-memb.md +5 -0
- package/.opencode/commands/bdb-aos-orchestrator.md +5 -0
- package/.opencode/commands/bdb-aos-plan.md +5 -0
- package/.opencode/commands/bdb-aos-playbooks.md +5 -0
- package/.opencode/commands/bdb-aos-setup.md +5 -0
- package/.opencode/commands/bdb-aos-shipping.md +5 -0
- package/.opencode/commands/bdb-aos-startproject.md +5 -0
- package/.opencode/commands/bdb-aos-store.md +5 -0
- package/.opencode/plugins/bdb-aos.js +54 -10
- package/README.md +4 -4
- package/agy-commands/loop.md +5 -0
- package/bin/aos-acp.mjs +7 -3
- package/bin/aos-doctor.mjs +26 -9
- package/bin/aos-uninstall.mjs +25 -1
- package/commands/brainstorm.md +5 -0
- package/commands/doctor.md +5 -0
- package/commands/graph.md +5 -0
- package/commands/init.md +5 -0
- package/commands/loop.md +5 -0
- package/commands/mastersession.md +5 -0
- package/commands/memb.md +5 -0
- package/commands/orchestrator.md +5 -0
- package/commands/plan.md +5 -0
- package/commands/playbooks.md +5 -0
- package/commands/setup.md +5 -0
- package/commands/shipping.md +5 -0
- package/commands/startproject.md +5 -0
- package/commands/store.md +5 -0
- package/docs/codex-agy-setup.md +16 -0
- package/docs/opencode-setup.md +36 -0
- package/docs/plugin-migration.md +61 -0
- package/installer.js +564 -215
- package/lib/plugin-migration.js +462 -0
- package/lib/store-ui/index.html +9 -1
- package/lib/store-ui/server.mjs +2 -0
- package/package.json +7 -2
- package/plugin-commands.json +144 -0
- package/plugin.json +302 -0
- package/plugins/bdb-aos-codex/.codex-plugin/plugin.json +38 -0
- package/plugins/bdb-aos-codex/skills/brainstorm/SKILL.md +6 -0
- package/plugins/bdb-aos-codex/skills/doctor/SKILL.md +6 -0
- package/plugins/bdb-aos-codex/skills/graph/SKILL.md +6 -0
- package/plugins/bdb-aos-codex/skills/init/SKILL.md +6 -0
- package/plugins/bdb-aos-codex/skills/loop/SKILL.md +6 -0
- package/plugins/bdb-aos-codex/skills/mastersession/SKILL.md +6 -0
- package/plugins/bdb-aos-codex/skills/memb/SKILL.md +6 -0
- package/plugins/bdb-aos-codex/skills/orchestrator/SKILL.md +6 -0
- package/plugins/bdb-aos-codex/skills/plan/SKILL.md +6 -0
- package/plugins/bdb-aos-codex/skills/playbooks/SKILL.md +6 -0
- package/plugins/bdb-aos-codex/skills/setup/SKILL.md +6 -0
- package/plugins/bdb-aos-codex/skills/shipping/SKILL.md +6 -0
- package/plugins/bdb-aos-codex/skills/startproject/SKILL.md +6 -0
- package/plugins/bdb-aos-codex/skills/store/SKILL.md +6 -0
- package/scripts/build-plugin-manifest.mjs +202 -3
- package/skills/basic/master-session/SKILL.md +1 -1
- package/skills/bdb-aos/scripts/list-playbooks.mjs +72 -0
- package/skills/global_config/gogate/SKILL.md +123 -0
- package/skills/global_config/loop-templates/SKILL.md +27 -0
- package/skills/global_config/loop-templates/references/ci-until-green.md +27 -0
- package/skills/global_config/loop-templates/references/daily-summary.md +27 -0
- package/skills/global_config/loop-templates/references/pr-to-merge.md +27 -0
- package/skills/global_config/loop-templates/references/review-rounds.md +27 -0
- package/skills/playbooks/pb-bug-fix/SKILL.md +48 -0
- package/skills/playbooks/pb-clip-from-moodboard/SKILL.md +55 -0
- package/skills/playbooks/pb-crew-call-sheet/SKILL.md +40 -0
- package/skills/playbooks/pb-deploy-saas/SKILL.md +44 -0
- package/skills/playbooks/pb-docs-site/SKILL.md +44 -0
- package/skills/playbooks/pb-focus-chunks/SKILL.md +40 -0
- package/skills/playbooks/pb-handover/SKILL.md +41 -0
- package/skills/playbooks/pb-harness-work/SKILL.md +64 -0
- package/skills/playbooks/pb-health-weekly/SKILL.md +43 -0
- package/skills/playbooks/pb-idea-to-launch/SKILL.md +51 -0
- package/skills/playbooks/pb-image-to-3d/SKILL.md +46 -0
- package/skills/playbooks/pb-inbox-zero/SKILL.md +39 -0
- package/skills/playbooks/pb-invoice-check/SKILL.md +41 -0
- package/skills/playbooks/pb-landing-page/SKILL.md +46 -0
- package/skills/playbooks/pb-launch-video/SKILL.md +49 -0
- package/skills/playbooks/pb-machine-setup/SKILL.md +44 -0
- package/skills/playbooks/pb-master/SKILL.md +53 -0
- package/skills/playbooks/pb-newsletter/SKILL.md +43 -0
- package/skills/playbooks/pb-offer/SKILL.md +39 -0
- package/skills/playbooks/pb-open-source/SKILL.md +50 -0
- package/skills/playbooks/pb-pcb-to-case/SKILL.md +46 -0
- package/skills/playbooks/pb-redesign-app/SKILL.md +47 -0
- package/skills/playbooks/pb-release-aos/SKILL.md +50 -0
- package/skills/playbooks/pb-security-sweep/SKILL.md +48 -0
- package/skills/playbooks/pb-ship/SKILL.md +49 -0
- package/skills/playbooks/pb-show-build/SKILL.md +48 -0
- package/skills/playbooks/pb-social-pack/SKILL.md +47 -0
- package/skills/playbooks/pb-todo/SKILL.md +41 -0
- package/skills/playbooks/pb-worktrees-land/SKILL.md +52 -0
- package/.codex-plugin/marketplace.json +0 -11
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: pb-landing-page
|
|
3
|
+
description: >-
|
|
4
|
+
Build and launch a landing page: confirmed copy without invented claims, a
|
|
5
|
+
generated page in your brand tokens, UI and SEO review, deploy only after
|
|
6
|
+
GO, then a check on the live URL. Use for "landing page", "launch page for
|
|
7
|
+
this product", "ship a one-pager".
|
|
8
|
+
category: design-ui-ux
|
|
9
|
+
kind: playbook
|
|
10
|
+
trigger: ["landing page", "launch page for this product", "ship a one-pager"]
|
|
11
|
+
inputs: [brief, brand_tokens, deploy_target, launch_video?]
|
|
12
|
+
requires:
|
|
13
|
+
skills: [copywriting, landing-page-generator, godmode-ui-ux, ui-review, seo-audit, bdb-deploy, vercel-deployment, pb-launch-video]
|
|
14
|
+
agents: []
|
|
15
|
+
mcps: [chrome-devtools]
|
|
16
|
+
store: []
|
|
17
|
+
go_points: [deploy]
|
|
18
|
+
outputs: ["<page source>", "production_artifacts/pb-landing-page-<date>.md"]
|
|
19
|
+
verify: "curl -sI <url> returns 200; seo-audit on the live URL has zero blocking items"
|
|
20
|
+
difficulty: intermediate
|
|
21
|
+
est_time: 1-3 h
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
# Landing page launch
|
|
25
|
+
What you get: a live landing page with checked copy, SEO basics and, if you have one, a launch video.
|
|
26
|
+
|
|
27
|
+
## Inputs
|
|
28
|
+
- brief — product brief: audience, offer, proof you can show
|
|
29
|
+
- brand_tokens — path to the design tokens or brand notes
|
|
30
|
+
- deploy_target — `bdb-deploy` (rsync over SSH) or `vercel`, with the target host or project
|
|
31
|
+
- launch_video (optional) — an mp4 from pb-launch-video, used as the hero video
|
|
32
|
+
|
|
33
|
+
## Steps
|
|
34
|
+
1. Ask — brief, brand_tokens, deploy_target, launch_video → run log — all answered; token path exists; `chrome-devtools` is optional, if its tools are not loaded the screenshot in step 3 is skipped and logged
|
|
35
|
+
2. copywriting — brief → confirmed brief, then page copy in the run folder — brief confirmed by the human, no claim without a source in the brief (no fabricated numbers, logos or quotes) — stops for approval
|
|
36
|
+
3. landing-page-generator + godmode-ui-ux — approved copy, brand_tokens, launch_video → page source in the project — page opens locally; `puppeteer_navigate` and `puppeteer_screenshot` of the local page attached to the run log when chrome-devtools is available
|
|
37
|
+
4. ui-review + seo-audit — page → findings table in the run log — no open blocking finding; fixes applied and rechecked before step 5
|
|
38
|
+
5. [GO] deploy — via bdb-deploy (rsync) or vercel-deployment (`vercel deploy`), target host or project and the file list named in the WAITING FOR GO line. The run stops here until the human types GO. Neither command is hook-guarded, so this GO is the only guard. One GO = one deploy.
|
|
39
|
+
6. Live check — `curl -sI <url>` and seo-audit on the live URL → run log — status 200 and zero blocking items; otherwise stop and report, no redeploy without a fresh GO at step 5
|
|
40
|
+
|
|
41
|
+
Run log: `production_artifacts/pb-landing-page-<date>.md` in the start directory, never committed
|
|
42
|
+
|
|
43
|
+
Rules
|
|
44
|
+
- Anything other than the literal GO (case-insensitive) is not a GO; a GO covers only that one step, one time.
|
|
45
|
+
- A failed check stops the run: write the failure into the run log and report. No silent retries.
|
|
46
|
+
- Write one run-log line per step as it completes (`N. done|skipped|failed — artifact — check result`) and `WAITING FOR GO: <step>` at each gate.
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: pb-launch-video
|
|
3
|
+
description: >-
|
|
4
|
+
Turn a live app or landing page into a short launch video: composition
|
|
5
|
+
brief, render in Hyperframes or Remotion, an ffprobe check per format,
|
|
6
|
+
publish hand-off only after GO. Use for "launch video", "make a video of
|
|
7
|
+
the shipped app", "promo clip for the landing page".
|
|
8
|
+
category: media-eventtech
|
|
9
|
+
kind: playbook
|
|
10
|
+
trigger: ["launch video", "video of the shipped app", "promo clip for the landing page"]
|
|
11
|
+
inputs: [url, project, length, formats, render_tool]
|
|
12
|
+
requires:
|
|
13
|
+
skills: [brag, remotion, "hyperframes (external)", "ffprobe (external)"]
|
|
14
|
+
agents: []
|
|
15
|
+
mcps: []
|
|
16
|
+
store: []
|
|
17
|
+
go_points: [publish]
|
|
18
|
+
outputs: ["renders/<project>/launch_<fmt>.mp4", "renders/<project>/publish.md", "production_artifacts/pb-launch-video-<date>.md"]
|
|
19
|
+
verify: "ffprobe shows the asked WxH and duration per file"
|
|
20
|
+
difficulty: intermediate
|
|
21
|
+
est_time: 30-90 min
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
# Launch video of a shipped app
|
|
25
|
+
What you get: a short launch video per format, checked with ffprobe, handed off for publishing after your GO.
|
|
26
|
+
|
|
27
|
+
## Inputs
|
|
28
|
+
- url — the live URL of the shipped app or landing page (for example from pb-landing-page)
|
|
29
|
+
- project — a slug for `renders/<project>/`
|
|
30
|
+
- length — target duration in seconds
|
|
31
|
+
- formats — for example 16:9 (1920x1080) and 9:16 (1080x1920)
|
|
32
|
+
- render_tool — `hyperframes` or `remotion` (remotion needs an existing Remotion project)
|
|
33
|
+
|
|
34
|
+
## Steps
|
|
35
|
+
1. Preflight — ask render_tool first; then `command -v ffprobe` and, for hyperframes, `test -f ~/.claude/skills/hyperframes/SKILL.md`. ffprobe missing → stop with "Missing tool: ffprobe. Install ffmpeg and rerun." Hyperframes missing → stop with "Missing skill: hyperframes (installed locally only, not shipped by AOS). Install it, or rerun with render_tool = remotion and the path of an existing Remotion project." Remotion chosen without an existing project → stop and ask for its path. Write nothing except the run log on a stop — all probes answered
|
|
36
|
+
2. Ask — url, project slug, length, formats, render_tool → run log and `renders/<project>/` — all answered; `curl -sI <url>` returns 200
|
|
37
|
+
3. brag — url → composition brief in `renders/<project>/brief.md` (scenes, copy lines, length, formats; brag's brief stage only, the render choice stays with render_tool) — stops for approval
|
|
38
|
+
4. Render — either way one file per format:
|
|
39
|
+
- hyperframes: brag with hyperframes → `renders/<project>/launch_<fmt>.mp4`
|
|
40
|
+
- remotion: from the Remotion project dir, `npx remotion render <Composition> <out>` per format (network/npm on first run needs approval)
|
|
41
|
+
5. ffprobe — per file: `ffprobe -v error -select_streams v:0 -show_entries stream=width,height:format=duration -of json <file>` → WxH and duration in the run log — equals the asked WxH, duration within 1 s of length; on a mismatch stop with "export <format> has WxH, expected ...", do not publish, invent no conversion command; then the clips stop for approval (taste review)
|
|
42
|
+
6. [GO] publish — destination and the full file list shown. The run stops here until the human types GO. No publish MCP or CLI exists on this machine, so the GO releases the hand-off: the files plus the caption in `renders/<project>/publish.md`; upload is manual unless the human named a tool in step 2 — hand-off file written
|
|
43
|
+
|
|
44
|
+
Run log: `production_artifacts/pb-launch-video-<date>.md` in the start directory, never committed
|
|
45
|
+
|
|
46
|
+
Rules
|
|
47
|
+
- Anything other than the literal GO (case-insensitive) is not a GO; a GO covers only that one step, one time.
|
|
48
|
+
- A failed check stops the run: write the failure into the run log and report. No silent retries.
|
|
49
|
+
- Write one run-log line per step as it completes (`N. done|skipped|failed — artifact — check result`) and `WAITING FOR GO: <step>` at each gate.
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: pb-machine-setup
|
|
3
|
+
description: >-
|
|
4
|
+
Bring a new machine to a verified AOS installation: read-only doctor
|
|
5
|
+
baseline, install after GO, MCP servers wired per harness with the configs
|
|
6
|
+
backed up first, memB and OpenWiki checks, and a second doctor run for the
|
|
7
|
+
delta. Use for "set up this machine", "onboard a new computer", "install AOS
|
|
8
|
+
on this laptop".
|
|
9
|
+
category: bdb-core
|
|
10
|
+
kind: playbook
|
|
11
|
+
trigger: ["set up this machine", "onboard a new computer", "install AOS on this machine"]
|
|
12
|
+
inputs: [machine_role, harnesses]
|
|
13
|
+
requires:
|
|
14
|
+
skills: [aos-setup, mcp-manage, memb-skill, openwiki-skill, "node (external)"]
|
|
15
|
+
agents: []
|
|
16
|
+
mcps: []
|
|
17
|
+
store: []
|
|
18
|
+
go_points: [install]
|
|
19
|
+
outputs: ["production_artifacts/pb-machine-setup-<date>.md", "production_artifacts/pb-machine-setup-<date>/config-backup/"]
|
|
20
|
+
verify: "second doctor run shows zero failing rows, or each remaining one is logged with its fix hint"
|
|
21
|
+
difficulty: intermediate
|
|
22
|
+
est_time: 30-60 min
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
# New machine to a verified AOS install
|
|
26
|
+
What you get: a machine with AOS, MCP servers, hooks, memB and OpenWiki installed and checked by the doctor, with a before-and-after report and a backup of every harness config that was edited.
|
|
27
|
+
|
|
28
|
+
## Inputs
|
|
29
|
+
- machine_role — `dev`, `show` or `server`, asked if missing; a `server` skips the desktop-only rows (LaunchAgents, Synapse) and logs that choice
|
|
30
|
+
- harnesses — the harnesses to wire (Claude Code, Antigravity, Codex, OpenCode, Cursor, Roo), asked if missing; only these are touched
|
|
31
|
+
|
|
32
|
+
## Steps
|
|
33
|
+
1. aos-setup (Measure) — `command -v node` (Node 22 or newer, else stop with an install hint), then the doctor read-only, exactly as the aos-setup skill gives it: `node skills/global_config/aos-setup/scripts/aos-doctor.mjs` from the AOS repo, or `node ~/.claude/skills/aos-setup/scripts/aos-doctor.mjs` from an installed copy → baseline table (failing rows with their fix commands) in the run log — doctor ran, exit code and failing-row count logged; nothing was installed or edited. Then the backup: copy every harness config of the chosen harnesses (for example `~/.claude.json`, `~/.gemini/config/mcp_config.json`, `~/.codex/config.toml`, `opencode.jsonc`) into `production_artifacts/pb-machine-setup-<date>/config-backup/` and log the copied paths; a config that is missing is logged, not created — backup files exist before step 2, because the installer itself rewrites the harness configs
|
|
34
|
+
2. [GO] install — the install or update commands aos-setup section 3 gives for the harnesses chosen, for example `npx -y @hybridlabor-api/aos@latest` — the WAITING FOR GO line shows the exact command, the harness list and the backup path (and the installer's `--dry-run` output if aos-setup section 3 offers it). The run stops here until the human types GO. The hook does not guard npm installs, so this GO is the only guard; the installed `aos` binary is never run to inspect the version (it starts the full installer and rewrites harness configs).
|
|
35
|
+
3. mcp-manage — chosen harnesses → wire the MCP servers the machine_role needs per harness → server list per harness in the run log — this step never edits a config that step 1 has not backed up; a missing config is logged, not created blind
|
|
36
|
+
4. memb-skill and openwiki-skill — memB engine, MCP registration and ambient hook; OpenWiki CLI, `~/.openwiki/.env` credentials and refresh daemon → check results in the run log — each check passes or is logged with its fix hint from aos-setup; credentials are never written into the run log
|
|
37
|
+
5. aos-setup (Verify) — the doctor again, same command as step 1 → delta (fixed, still failing, new) in the run log — zero failing rows, or each remaining one logged with its fix hint and a note whether it is deliberate for this machine_role
|
|
38
|
+
|
|
39
|
+
Run log: `production_artifacts/pb-machine-setup-<date>.md` in the start directory, never committed; the config backups are never committed
|
|
40
|
+
|
|
41
|
+
Rules
|
|
42
|
+
- Anything other than the literal GO (case-insensitive) is not a GO; a GO covers only that one step, one time.
|
|
43
|
+
- A failed check stops the run: write the failure into the run log and report. No silent retries.
|
|
44
|
+
- Write one run-log line per step as it completes (`N. done|skipped|failed — artifact — check result`) and `WAITING FOR GO: <step>` at each gate.
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: pb-master
|
|
3
|
+
description: >-
|
|
4
|
+
Run one control session over several Claude Code, Codex or OpenCode
|
|
5
|
+
sessions: roster, status board, GO board, GO <session> tokens, idle
|
|
6
|
+
notices and a handover file. Use for "master session", "supervise my
|
|
7
|
+
sessions", "run several agents", "one control window".
|
|
8
|
+
category: bdb-core
|
|
9
|
+
kind: playbook
|
|
10
|
+
trigger: ["master session", "supervise my sessions", "run several agents"]
|
|
11
|
+
inputs: [plan?, workers?]
|
|
12
|
+
requires:
|
|
13
|
+
skills: [master-session, agenttrail, stay-within-limits, "claude (external)", "aos-acp (external)"]
|
|
14
|
+
agents: []
|
|
15
|
+
mcps: []
|
|
16
|
+
store: []
|
|
17
|
+
go_points: [spawn workers, "GO <session>"]
|
|
18
|
+
outputs: ["docs/sessions/master-<date>.md", "production_artifacts/pb-master-<date>.md"]
|
|
19
|
+
verify: "handover lists every roster session with open/closed GO state; no file older than 10 min in ~/.aos/go/ unless listed as stale in the handover"
|
|
20
|
+
difficulty: advanced
|
|
21
|
+
est_time: 15 min setup, then session-long
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
# One control session over several agents
|
|
25
|
+
What you get: a live roster, status board and GO board for your agent sessions, GO tokens relayed per session, and a handover file.
|
|
26
|
+
|
|
27
|
+
## Inputs
|
|
28
|
+
- plan (optional) — a plan file for the trail board, e.g. `production_artifacts/00_execution_plan.md`
|
|
29
|
+
- workers (optional) — sessions to spawn (name, cwd or worktree, model, prompt) or to adopt (already running)
|
|
30
|
+
|
|
31
|
+
## Steps
|
|
32
|
+
1. Preflight — `command -v claude`, `command -v aos-trail`, `command -v aos-acp` → run log header — claude and aos-trail present, else stop with an install hint; `aos-acp` missing → log "aos-acp not on PATH" and look for `bin/aos-acp.mjs`: `p="$(dirname "$(readlink -f "$(command -v aos-trail)")")/../../../../bin/aos-acp.mjs"; test -f "$p"` (or the repo path the human gives), run it as `node "$p"` in place of `aos-acp`; missing → Claude workers only (logged); read `docs/sessions/master-*.md` if one exists (the previous handover)
|
|
33
|
+
2. master-session (Roster) — `ListAgents` minus self → roster table (name, repo@branch, adopted or spawned) in the run log — stops for approval (the human confirms scope)
|
|
34
|
+
3. agenttrail — plan given → `aos-trail . --plan <plan> --no-open` → board URL in the run log; no plan → `aos-trail . --no-open` (file activity only), logged — URL printed (output says "already running" → log it as "existing map", its plan is unchanged); runs before any worker is spawned, so no spawn line exists in the run log before the board URL line
|
|
35
|
+
4. [GO] spawn — worker list (name, cwd or worktree, model, prompt) shown in full, then one line per worker:
|
|
36
|
+
- Claude: `(cd <cwd> && claude --bg --name <n> --permission-mode auto --model <opus|sonnet|haiku> "<prompt>")` (`claude` has no cwd flag; prompt before any `--disallowedTools`)
|
|
37
|
+
- Codex or OpenCode: `aos-acp <codex|opencode> --name <n> --cwd <worktree> --prompt "<task>" --go-wait 600` in the background, log `~/.aos/acp/<n>.jsonl`
|
|
38
|
+
- agy: adopt-only (an already running session, no spawn); never `aos-acp agy`, the adapter is third-party and unverified (`bin/aos-acp.mjs` lines 26+)
|
|
39
|
+
- Never `aos-acp claude` (no model flag), never `--model fable`, never omit `--model`
|
|
40
|
+
- The run stops here until the human types GO. The hook does not guard `claude --bg`, so GO is by contract. Check: every spawned name shows in `ListAgents` or has an ACP log
|
|
41
|
+
- Adopt-only roster → step skipped
|
|
42
|
+
5. master-session (Status) — master-session Step 2 template verbatim, reply in at most 10 lines, one `SendMessage` per session → replies in the run log — every in-scope session replied or is marked "no reply"
|
|
43
|
+
6. master-session (GO board) — replies → GO board block per session, `GO needed` commands verbatim → board in the run log — no paraphrased command
|
|
44
|
+
7. [GO] token relay — the human types `GO <session>` in the master (`go-token.mjs` writes `~/.aos/go/<session>.token`); the master then tells that worker only "retry the blocked command". The run stops here until the human types `GO <session>`. The master never types or forwards a GO itself, and any other human message cancels a pending token — the worker's log shows the command ran
|
|
45
|
+
8. Idle rules — `notify_when_idle` only after sending a session work; no polling, no "are you done?" → idle events in the run log; between waves a stay-within-limits check, logged — events logged
|
|
46
|
+
9. Handover — roster, last GO board, open GO items, who waits on whom, next command → `docs/sessions/master-<date>.md` (outside a repo: `~/.aos/handover/`) — every roster session listed with its GO state; `ls ~/.aos/go/` has no token older than 10 min unless listed as stale in the handover (report stale ones, do not delete them)
|
|
47
|
+
|
|
48
|
+
Run log: `production_artifacts/pb-master-<date>.md` in the start directory; the run log and the handover file `docs/sessions/master-<date>.md` are never staged or committed
|
|
49
|
+
|
|
50
|
+
Rules
|
|
51
|
+
- Anything other than the literal GO (case-insensitive; in step 7 `GO <session>`) is not a GO; a GO covers only that one step, one time.
|
|
52
|
+
- A failed check stops the run: write the failure into the run log and report. No silent retries.
|
|
53
|
+
- Write one run-log line per step as it completes (`N. done|skipped|failed — artifact — check result`) and `WAITING FOR GO: <step>` at each gate.
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: pb-newsletter
|
|
3
|
+
description: >-
|
|
4
|
+
Turn a pb-ship recap, a changelog range or a quick recap into a newsletter
|
|
5
|
+
email draft where every claim cites a source line, and send it only after
|
|
6
|
+
GO. Use for "newsletter from the recap", "write the release newsletter",
|
|
7
|
+
"email update from the changelog".
|
|
8
|
+
category: design-ui-ux
|
|
9
|
+
kind: playbook
|
|
10
|
+
trigger: ["newsletter from the recap", "release newsletter", "email update from the changelog"]
|
|
11
|
+
inputs: [recap, audience]
|
|
12
|
+
requires:
|
|
13
|
+
skills: [quick-recap, copywriting, pb-ship]
|
|
14
|
+
agents: []
|
|
15
|
+
mcps: []
|
|
16
|
+
store: [brand-voice, email-ops]
|
|
17
|
+
go_points: ["send newsletter"]
|
|
18
|
+
outputs: ["facts.md", "newsletter.md", "run-log.md"]
|
|
19
|
+
verify: "every product claim in newsletter.md cites a line in facts.md"
|
|
20
|
+
difficulty: intermediate
|
|
21
|
+
est_time: 20-40 min
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
# Newsletter from a recap
|
|
25
|
+
What you get: a newsletter draft (subject, preheader, body) built only from facts you can trace, sent after your GO.
|
|
26
|
+
|
|
27
|
+
## Inputs
|
|
28
|
+
- recap — a pb-ship run log, a CHANGELOG range, or quick-recap output
|
|
29
|
+
- audience — who reads it, asked once
|
|
30
|
+
- A save folder — asked once; default `./pb-newsletter-<date>/`
|
|
31
|
+
|
|
32
|
+
## Steps
|
|
33
|
+
1. Check the store — `test -d ~/.claude/skills/brand-voice` and `test -d ~/.claude/skills/email-ops` → `run-log.md` (create the folder only after the recap file or range is confirmed readable) — an absent item is logged "Missing store item: <name>, install via aos-store" and the run continues with copywriting
|
|
34
|
+
2. quick-recap — the recap → `facts.md`, one line per fact with its source line or file — every fact cites a source
|
|
35
|
+
3. brand-voice if present, else copywriting — `facts.md` and the audience → `newsletter.md` with subject, preheader and body, no claim outside `facts.md` — stops for approval, edits applied until approved
|
|
36
|
+
4. [GO] send newsletter — through a connector the human names (email-ops if present); the recipients or list, the subject and the full text shown first. The run stops here until the human types GO. Without a connector, the GO releases a hand-off file instead: `newsletter.md` with the recipient list, you send it yourself. A sending connector is not hook-guarded, so this GO is its only guard. The GO covers exactly the audience and message shown; a changed audience needs a fresh GO.
|
|
37
|
+
|
|
38
|
+
Run log: `run-log.md` in the save folder, never committed
|
|
39
|
+
|
|
40
|
+
Rules
|
|
41
|
+
- Anything other than the literal GO (case-insensitive) is not a GO; a GO covers only that one step, one time.
|
|
42
|
+
- A failed check stops the run: write the failure into the run log and report. No silent retries.
|
|
43
|
+
- Write one run-log line per step as it completes (`N. done|skipped|failed — artifact — check result`) and `WAITING FOR GO: <step>` at each gate.
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: pb-offer
|
|
3
|
+
description: >-
|
|
4
|
+
Draft a client offer with line items priced only from your price list, and
|
|
5
|
+
send it only after your GO. Use for "write an offer", "quote for this
|
|
6
|
+
client", "draft a quote", "price this job".
|
|
7
|
+
category: bdb-core
|
|
8
|
+
kind: playbook
|
|
9
|
+
trigger: ["write an offer", "quote for this client", "draft a quote"]
|
|
10
|
+
inputs: [client_brief, price_list]
|
|
11
|
+
requires:
|
|
12
|
+
skills: [bdb-eventagency-skill, copywriting]
|
|
13
|
+
agents: []
|
|
14
|
+
mcps: []
|
|
15
|
+
store: []
|
|
16
|
+
go_points: [send offer]
|
|
17
|
+
outputs: ["offer.md", "run-log.md"]
|
|
18
|
+
verify: "every unit price exists in the price list; total recomputed from line items matches"
|
|
19
|
+
difficulty: beginner
|
|
20
|
+
est_time: 10-20 min
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
# Client offer
|
|
24
|
+
What you get: a client offer with line items, priced only from your price list.
|
|
25
|
+
|
|
26
|
+
## Inputs
|
|
27
|
+
- A client brief — a text or document file
|
|
28
|
+
- A price list file — item and unit price per line
|
|
29
|
+
- A save folder — asked once; default `./pb-offer-<date>/`
|
|
30
|
+
|
|
31
|
+
## Steps
|
|
32
|
+
1. Ask once — save folder, client brief, price list; also the VAT rate and the offer validity → `run-log.md` — the files are readable
|
|
33
|
+
2. bdb-eventagency-skill (section "2. Client & Project Intake") — brief → scope and line items; an item with no price in the list is marked `no price`, never priced by guess
|
|
34
|
+
3. Write `offer.md`: items, quantity, unit price, line total, net total, VAT at the rate you gave, gross total, validity — every unit price exists in the price list; the net total recomputed from the line items matches
|
|
35
|
+
4. copywriting — brief and `offer.md` → the cover text at the top of `offer.md`; no claims beyond the brief
|
|
36
|
+
5. Show `offer.md` in full and apply your edits until you approve — approval logged
|
|
37
|
+
6. [GO] Send the offer through a connector you name, or send it yourself — show the recipient (name + address, `?` blocks sending until you fill it) and the full text first. The run stops here until the human types GO. The GO covers exactly the recipient and message shown and nothing else; a different or added recipient needs a fresh GO. The go-gate hook does not guard sending: this [GO] is the only guard.
|
|
38
|
+
|
|
39
|
+
Run log: `run-log.md` in the save folder. One line per step as it completes (`N. done|skipped|failed — file — check result`), and `WAITING FOR GO: <step>` at the gate. Anything other than the literal GO (case-insensitive) is not a GO. If a check fails, stop, write the failure into the log and tell the user.
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: pb-open-source
|
|
3
|
+
description: >-
|
|
4
|
+
Prepare a project for open sourcing: a sanitized fork with secrets and
|
|
5
|
+
internal references stripped, a sanitizer verdict, README and LICENSE, then a
|
|
6
|
+
new PRIVATE GitHub repo created and pushed only after GO. The playbook never
|
|
7
|
+
makes the repo public. Use for "open source this project", "make a sanitized
|
|
8
|
+
fork", "prepare a public release".
|
|
9
|
+
category: engineering-method
|
|
10
|
+
kind: playbook
|
|
11
|
+
trigger: ["open source this project", "sanitized fork", "prepare a public release"]
|
|
12
|
+
inputs: [source_repo, target_name, owner, license]
|
|
13
|
+
requires:
|
|
14
|
+
skills: [github-repo, readme, github, "gh (external)"]
|
|
15
|
+
agents: [opensource-forker, opensource-sanitizer]
|
|
16
|
+
mcps: []
|
|
17
|
+
store: []
|
|
18
|
+
go_points: ["gh repo create", "git push"]
|
|
19
|
+
outputs: ["<fork dir>", "<sanitizer report>", "production_artifacts/pb-open-source-<date>.md"]
|
|
20
|
+
verify: "sanitizer verdict PASS or PASS-WITH-WARNINGS logged; gh repo view <owner>/<name> --json visibility -q .visibility == PRIVATE; LICENSE and README.md exist on the pushed default branch (gh api repos/<owner>/<name>/contents/LICENSE and README.md return 200)"
|
|
21
|
+
difficulty: advanced
|
|
22
|
+
est_time: 1-3 h
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
# Sanitized fork in a new private repo
|
|
26
|
+
What you get: a sanitized copy of the project with README and LICENSE in a new private GitHub repo, with the sanitizer verdict logged. Going public stays your own action, outside this run.
|
|
27
|
+
|
|
28
|
+
## Inputs
|
|
29
|
+
- source_repo — the local checkout to fork, asked if missing
|
|
30
|
+
- target_name — the new repo name, asked if missing
|
|
31
|
+
- owner — the GitHub user or org for the new repo, asked if missing
|
|
32
|
+
- license — the license id for the LICENSE file (for example MIT or Apache-2.0), asked if missing
|
|
33
|
+
|
|
34
|
+
## Steps
|
|
35
|
+
1. opensource-forker (agent) — source_repo → fork dir `<scratch>/<target_name>` (`<scratch>` = `mktemp -d`) and `.env.example`, secrets and internal references stripped, git history cleaned — fork dir exists; the source repo is untouched (`git -C <source_repo> status --short` is unchanged)
|
|
36
|
+
2. opensource-sanitizer (agent) — fork dir → report with the verdict PASS, FAIL or PASS-WITH-WARNINGS in the run log — FAIL stops the run: the findings are logged, nothing is created or pushed
|
|
37
|
+
3. github-repo + readme — fork dir, license → README.md and LICENSE in the fork dir following the repo standards — stops for approval (the human reads both files and the warnings from step 2)
|
|
38
|
+
4. git — `git -C <fork dir> rev-parse --git-dir` (not a repo → `git -C <fork dir> init`), then `git -C <fork dir> add README.md LICENSE` plus each file the forker produced, listed by explicit path (never `-A` or `.`), then `git -C <fork dir> commit -m "Initial sanitized release"` → commit SHA in the run log — `git -C <fork dir> status --short` is empty and README.md and LICENSE are in `git -C <fork dir> ls-tree -r HEAD --name-only`
|
|
39
|
+
5. [GO] gh repo create — `gh repo create <owner>/<target_name> --private` — the WAITING FOR GO line names owner, name and `--private`. The run stops here until the human types GO. (`gh repo create` is not hook-guarded; this GO is its only guard.)
|
|
40
|
+
6. github — `gh repo view <owner>/<target_name> --json visibility -q .visibility` → run log line — equals `PRIVATE`, else stop
|
|
41
|
+
7. [GO] git push — `git -C <fork dir> remote add origin <url>` is part of this step, then the push of the default branch to `origin` — the WAITING FOR GO line names the remote URL, the branch and the commit SHA from step 4. The run stops here until the human types GO. (The hook guards `git push`; the other commands here are not hook-guarded.)
|
|
42
|
+
8. github — `gh repo view <owner>/<target_name> --json visibility -q .visibility`, then `gh api repos/<owner>/<target_name>/contents/LICENSE` and `.../contents/README.md` → final run log line — LICENSE and README.md both return 200 on the default branch, else stop; the run log ends with the sanitizer verdict and the line "visibility stays PRIVATE; flipping it is the human's own action"
|
|
43
|
+
|
|
44
|
+
Run log: `production_artifacts/pb-open-source-<date>.md` in the start directory, never committed
|
|
45
|
+
|
|
46
|
+
Rules
|
|
47
|
+
- This playbook never runs `gh repo edit --visibility` or any other command that changes visibility.
|
|
48
|
+
- Anything other than the literal GO (case-insensitive) is not a GO; a GO covers only that one step, one time.
|
|
49
|
+
- A failed check stops the run: write the failure into the run log and report. No silent retries.
|
|
50
|
+
- Write one run-log line per step as it completes (`N. done|skipped|failed — artifact — check result`) and `WAITING FOR GO: <step>` at each gate.
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: pb-pcb-to-case
|
|
3
|
+
description: >-
|
|
4
|
+
From a KiCad board to a parametric enclosure that fits it: ERC and DRC
|
|
5
|
+
clean, board dimensions extracted, an OpenSCAD case with your clearance,
|
|
6
|
+
Gerbers exported, fab hand-off only after GO. Use for "PCB to enclosure",
|
|
7
|
+
"case for this board", "KiCad to OpenSCAD case".
|
|
8
|
+
category: engineering-hardware
|
|
9
|
+
kind: playbook
|
|
10
|
+
trigger: ["PCB to enclosure", "case for this board", "KiCad to OpenSCAD case"]
|
|
11
|
+
inputs: [kicad_project, clearance_mm, mounting_style]
|
|
12
|
+
requires:
|
|
13
|
+
skills: [godmode-hardware-pcb, "pcb-validation-dfm-signoff (external)", "pcb-constraint-definition (external)", "code-first-hardware-design (external)"]
|
|
14
|
+
agents: []
|
|
15
|
+
mcps: [kicad, openscad]
|
|
16
|
+
store: []
|
|
17
|
+
go_points: [fab order]
|
|
18
|
+
outputs: ["hw/<project>/dims.json", "hw/<project>/case.scad", "hw/<project>/case.stl", "hw/<project>/gerbers/", "hw/<project>/fab.md", "production_artifacts/pb-pcb-to-case-<date>.md"]
|
|
19
|
+
verify: "run_drc zero errors; case inner dims >= board dims + clearance on every axis (recomputed from dims.json)"
|
|
20
|
+
difficulty: advanced
|
|
21
|
+
est_time: 1-3 h
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
# PCB to enclosure
|
|
25
|
+
What you get: a DRC-clean board and a parametric enclosure that fits it, with Gerbers ready for a fab order that you place after your GO.
|
|
26
|
+
|
|
27
|
+
## Inputs
|
|
28
|
+
- kicad_project — path to the KiCad project (`.kicad_pro`, `.kicad_pcb`, `.kicad_sch`)
|
|
29
|
+
- clearance_mm — gap between board and case wall on every axis
|
|
30
|
+
- mounting_style — for example standoffs, rails or snap-fit
|
|
31
|
+
|
|
32
|
+
## Steps
|
|
33
|
+
1. Preflight — `get_pcb_statistics` on `kicad`; `get_capabilities` on `openscad`; `test -f ~/.claude/skills/<name>/SKILL.md` for `pcb-validation-dfm-signoff`, `pcb-constraint-definition` and `code-first-hardware-design`. MCP tools may be deferred in the harness: try to load the tool once via the harness tool search before declaring it missing. MCP tool not loaded or call errors → stop with "Missing MCP: `<server>` (`<tool>` unavailable). Check `mcpServers.<server>` in your harness config." A skill file absent → stop with "Missing skill: <name> (installed locally only, not shipped by AOS). Install it and rerun." Write nothing except the run log on a stop — all probes answered
|
|
34
|
+
2. Ask — kicad_project, clearance_mm, mounting_style, project slug → run log and `hw/<project>/` — all answered, project files exist
|
|
35
|
+
3. pcb-validation-dfm-signoff + godmode-hardware-pcb — `run_erc` and `run_drc` (details via `get_erc_violations` and `get_drc_violations`) → violation list in the run log — zero errors; any error stops the run, the board is not edited by this playbook
|
|
36
|
+
4. pcb-constraint-definition — board outline, mounting holes and connector positions (`get_pcb_statistics`, `list_pcb_footprints`) → `hw/<project>/dims.json` (length, width, thickness, holes, connector edges, all in mm) — all values present; a missing value is asked of the human, never guessed
|
|
37
|
+
5. code-first-hardware-design + openscad — dims.json, clearance_mm, mounting_style → `case.scad` (parameters at the top, driven by dims.json), then `create_model_from_scad` (returns the `model_id`), then STL and a preview via `export_model` and `get_model_preview` with that `model_id` → `case.stl` — inner dims >= board dims + clearance_mm on every axis, recomputed from dims.json and logged — stops for approval
|
|
38
|
+
6. Gerbers — `export_gerber` → `hw/<project>/gerbers/` — files exist; `run_drc` again with zero errors on the exported state
|
|
39
|
+
7. [GO] fab hand-off — `hw/<project>/fab.md` with the Gerber list, board dimensions, layer count and case STL, shown in full. The run stops here until the human types GO. No fab ordering tool exists: the GO releases only the hand-off file and the order is placed manually by the human. — fab.md written
|
|
40
|
+
|
|
41
|
+
Run log: `production_artifacts/pb-pcb-to-case-<date>.md` in the start directory, never committed
|
|
42
|
+
|
|
43
|
+
Rules
|
|
44
|
+
- Anything other than the literal GO (case-insensitive) is not a GO; a GO covers only that one step, one time.
|
|
45
|
+
- A failed check stops the run: write the failure into the run log and report. No silent retries.
|
|
46
|
+
- Write one run-log line per step as it completes (`N. done|skipped|failed — artifact — check result`) and `WAITING FOR GO: <step>` at each gate.
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: pb-redesign-app
|
|
3
|
+
description: >-
|
|
4
|
+
Overhaul one app's UI against an audit: UX audit and UI review of the
|
|
5
|
+
running app, current versus proposed design tokens, a before/after visual
|
|
6
|
+
plan, a startcycle build, point fixes, accessibility and browser tests,
|
|
7
|
+
delivered as a PR after GO. Use for "redesign this app", "design overhaul",
|
|
8
|
+
"audit and fix the UI", "give the app a new look".
|
|
9
|
+
category: design-ui-ux
|
|
10
|
+
kind: playbook
|
|
11
|
+
trigger: ["redesign this app", "design overhaul", "audit and fix the UI"]
|
|
12
|
+
inputs: [repo, app_url, scope]
|
|
13
|
+
requires:
|
|
14
|
+
skills: [ux-audit, ui-review, ui-tokens, godmode-ui-ux, visual-plan, visual-edit, startcycle, wcag-audit-patterns, webapp-testing, github, "gh (external)"]
|
|
15
|
+
agents: [architect, techlead, reviewer]
|
|
16
|
+
mcps: [chrome-devtools]
|
|
17
|
+
store: []
|
|
18
|
+
go_points: ["git push + gh pr create"]
|
|
19
|
+
outputs: ["production_artifacts/pb-redesign-app-<date>.md", "production_artifacts/pb-redesign-app-<date>/audit.md", "production_artifacts/pb-redesign-app-<date>/tokens-diff.md"]
|
|
20
|
+
verify: "repo test/lint scripts exit 0 on the pushed SHA; gh pr view <branch> --json state -q .state == OPEN; every audit finding marked fixed or deferred in the run log"
|
|
21
|
+
difficulty: advanced
|
|
22
|
+
est_time: 2-4 h
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
# Redesign one app
|
|
26
|
+
What you get: one app's UI overhauled against a written audit, new design tokens and a before/after plan, delivered as a pull request after your GO.
|
|
27
|
+
|
|
28
|
+
## Inputs
|
|
29
|
+
- repo — the app's checkout, default the current directory
|
|
30
|
+
- app_url — the running local dev URL (not a remote or production site)
|
|
31
|
+
- scope — the screens or flows to redesign, asked once
|
|
32
|
+
|
|
33
|
+
## Steps
|
|
34
|
+
1. ux-audit and ui-review — `app_url` opened and screenshotted per screen in scope with chrome-devtools (`puppeteer_navigate`, `puppeteer_screenshot`) → `production_artifacts/pb-redesign-app-<date>/audit.md` with numbered findings — app_url unreachable or chrome-devtools unavailable → log it and stop; every finding has a screenshot or a file reference
|
|
35
|
+
2. ui-tokens — current tokens read from the repo versus proposed DTCG tokens → `tokens-diff.md` in the same folder — diff written, nothing applied yet
|
|
36
|
+
3. visual-plan — before/after per screen in scope → plan link or file in the run log — stops for approval
|
|
37
|
+
4. startcycle (architect, techlead, reviewer) — the approved plan and audit → build on a new branch; godmode-ui-ux rules apply to the UI work — reviewer reports no open `blocking` finding
|
|
38
|
+
5. visual-edit — point fixes the human picks in the running app, each after its diff plan is approved → edited files in the run log — only the picked files change
|
|
39
|
+
6. wcag-audit-patterns and webapp-testing — accessibility pass plus a browser test of the changed screens, then the repo's lint and test scripts → results in the run log — all exit 0; each audit finding marked fixed or deferred
|
|
40
|
+
7. [GO] git push -u origin <branch> and gh pr create — one combined GO; the WAITING FOR GO line names the branch, base branch, PR title and the head SHA. The run stops here until the human types GO. The hook guards `git push`; `gh pr create` is not hook-guarded, so this GO is its only guard. Afterwards `gh pr view <branch> --json state -q .state` equals `OPEN` and the PR URL is logged.
|
|
41
|
+
|
|
42
|
+
Run log: `production_artifacts/pb-redesign-app-<date>.md` in the start directory, never committed
|
|
43
|
+
|
|
44
|
+
Rules
|
|
45
|
+
- Anything other than the literal GO (case-insensitive) is not a GO; a GO covers only that one step, one time.
|
|
46
|
+
- A failed check stops the run: write the failure into the run log and report. No silent retries.
|
|
47
|
+
- Write one run-log line per step as it completes (`N. done|skipped|failed — artifact — check result`) and `WAITING FOR GO: <step>` at each gate.
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: pb-release-aos
|
|
3
|
+
description: >-
|
|
4
|
+
Release a new AOS version to npm through the release-please PR: check the
|
|
5
|
+
commit subjects, review and gate the release PR, merge it only after GO,
|
|
6
|
+
watch the release workflow and check version drift. Use for "release AOS",
|
|
7
|
+
"cut an AOS release", "merge the release PR", "publish a new AOS version".
|
|
8
|
+
category: bdb-core
|
|
9
|
+
kind: playbook
|
|
10
|
+
trigger: ["release AOS", "cut an AOS release", "merge the release PR"]
|
|
11
|
+
inputs: [repo?]
|
|
12
|
+
requires:
|
|
13
|
+
skills: [github, pb-ship, bdb-shipping-skill, git-pr-review, visual-recap, godmode-shipping, quick-recap, "bdb-ecosystem-health (external)", "gh (external)"]
|
|
14
|
+
agents: [reviewer]
|
|
15
|
+
mcps: ["plan (optional)"]
|
|
16
|
+
store: []
|
|
17
|
+
go_points: ["gh pr merge (release PR)"]
|
|
18
|
+
outputs: ["production_artifacts/pb-release-aos-<date>.md"]
|
|
19
|
+
verify: "npm view @hybridlabor-api/aos version == version in .release-please-manifest.json on main after merge"
|
|
20
|
+
difficulty: advanced
|
|
21
|
+
est_time: 30-60 min
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
# Release AOS to npm
|
|
25
|
+
What you get: a new AOS version on npm through the release-please PR, never a hand bump, with the PR reviewed and gated before your GO.
|
|
26
|
+
|
|
27
|
+
## Inputs
|
|
28
|
+
- repo (optional) — the AOS checkout, default the current directory; `<owner/repo>` comes from `git -C <repo> remote get-url origin`
|
|
29
|
+
|
|
30
|
+
## Steps
|
|
31
|
+
1. Preflight — `gh auth status` and `test -f ~/.claude/skills/bdb-ecosystem-health/SKILL.md` → run log header — gh missing or unauthenticated → log it, give the `gh auth login` hint, stop; skill absent → log "Missing skill: bdb-ecosystem-health (installed locally only, not shipped by AOS). Drift report in step 7 skipped; the npm check still runs." and continue
|
|
32
|
+
2. github — commits since the last tag (`git -C <repo> fetch --tags`, then `git -C <repo> describe --tags --abbrev=0`, then `git -C <repo> log <tag>..HEAD --format=%s`) → subject list in the run log, every non-Conventional subject flagged (release-please cannot see it, see AGENTS.md) — stops for approval
|
|
33
|
+
3. github — `gh pr list -R <owner/repo> --state open --head release-please--branches--main --json number,title,headRefName` → the release PR number in the run log — none → stop with "no release PR"
|
|
34
|
+
4. Review and gate on that PR, using these skills:
|
|
35
|
+
- git-pr-review — `gh pr view <n> -R <owner/repo> --json commits` → description draft in the run log — draft only, nothing posted
|
|
36
|
+
- visual-recap — `plan` connector present → recap link; absent → log "visual-recap skipped: no plan connector" and paste `gh pr diff <n> -R <owner/repo> --name-only` instead; no `npx` without approval
|
|
37
|
+
- reviewer (agent) — `gh pr diff <n> -R <owner/repo>`; the contract is the commit list from step 2, never the PR body → findings table — any open `blocking` finding stops the run
|
|
38
|
+
- bdb-shipping-skill — door class of the release PR (two-way or one-way; unclear counts as one-way) → class in the run log; one-way → ADR-lite `production_artifacts/decisions/<date>-<slug>.md` — class recorded
|
|
39
|
+
- godmode-shipping — `gh pr checks <n> -R <owner/repo>` all pass (pending, `gh pr checks` exit 8, counts as not passed), plus the local gate exactly as pb-ship step 8 gives it (scratch worktree from `pull/<n>/head`, lint, typecheck and test scripts that exist, a fork PR skips the local gate and is held, worktree removed without `--force`) → exit codes in the run log
|
|
40
|
+
5. [GO] github — `gh pr merge <n> -R <owner/repo> --squash` — the WAITING FOR GO line names PR number, title, base branch, method and the version in `.release-please-manifest.json`. The run stops here until the human types GO. (The hook guards `gh pr merge`.) Never `npm version` or `npm publish` by hand.
|
|
41
|
+
6. github — `<sha>` = the merge commit (`gh pr view <n> -R <owner/repo> --json mergeCommit -q .mergeCommit.oid`); `gh run list -R <owner/repo> --workflow release-please.yml --commit <sha> --limit 1 --json databaseId` (wait until a run exists), then `gh run watch <id> -R <owner/repo> --exit-status` → conclusion in the run log — exit 0
|
|
42
|
+
7. npm check and drift — `npm view @hybridlabor-api/aos version` → run log — always run; equals the version in `.release-please-manifest.json` on main. bdb-ecosystem-health drift report only if step 1 found the skill
|
|
43
|
+
8. quick-recap — run log → final line `🟢|🟡|🔴` with the released version — line written
|
|
44
|
+
|
|
45
|
+
Run log: `production_artifacts/pb-release-aos-<date>.md` in the start directory, never committed
|
|
46
|
+
|
|
47
|
+
Rules
|
|
48
|
+
- Anything other than the literal GO (case-insensitive) is not a GO; a GO covers only that one step, one time.
|
|
49
|
+
- A failed check stops the run: write the failure into the run log and report. No silent retries.
|
|
50
|
+
- Write one run-log line per step as it completes (`N. done|skipped|failed — artifact — check result`) and `WAITING FOR GO: <step>` at each gate.
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: pb-security-sweep
|
|
3
|
+
description: >-
|
|
4
|
+
Run a security sweep over one repo: secrets, dependencies and the diff,
|
|
5
|
+
a security review and a silent-failure hunt, one deduped and ranked findings
|
|
6
|
+
report, issues filed for blocking findings only after GO, each one handed to
|
|
7
|
+
pb-bug-fix. Use for "security sweep", "audit this repo", "check for leaked
|
|
8
|
+
secrets and vulnerable deps".
|
|
9
|
+
category: engineering-method
|
|
10
|
+
kind: playbook
|
|
11
|
+
trigger: ["security sweep", "audit this repo", "check for leaked secrets"]
|
|
12
|
+
inputs: [repo, scope]
|
|
13
|
+
requires:
|
|
14
|
+
skills: [bdb-security-audit, pb-bug-fix, github, verification-before-completion, "gh (external)"]
|
|
15
|
+
agents: [security-reviewer, silent-failure-hunter]
|
|
16
|
+
mcps: []
|
|
17
|
+
store: []
|
|
18
|
+
go_points: ["gh issue create"]
|
|
19
|
+
outputs: ["production_artifacts/pb-security-sweep-<date>.md", "production_artifacts/pb-security-sweep-<date>/findings.md"]
|
|
20
|
+
verify: "re-run shows zero open blocking findings, or each remaining one names its pb-bug-fix PR"
|
|
21
|
+
difficulty: advanced
|
|
22
|
+
est_time: 1-2 h
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
# Security sweep with ranked findings
|
|
26
|
+
What you get: one ranked findings report for the repo (blocking, should, note), an issue per blocking finding filed after your GO on a private repo, and a before-and-after delta from the re-run.
|
|
27
|
+
|
|
28
|
+
## Inputs
|
|
29
|
+
- repo — the current directory, or the one the user names; `<owner/repo>` comes from `git -C <repo> remote get-url origin`
|
|
30
|
+
- scope — `diff` (changes against the default branch) or `full` (the whole tree), asked if missing
|
|
31
|
+
|
|
32
|
+
## Steps
|
|
33
|
+
1. bdb-security-audit — repo, scope → secrets, dependency and diff findings in `production_artifacts/pb-security-sweep-<date>/findings.md` (optional scanners the skill cannot find are logged as skipped by the skill itself) — file written; secret values are never copied into the report, only file and line
|
|
34
|
+
2. security-reviewer (agent) — same scope → findings appended to `findings.md` — each finding cites file and line
|
|
35
|
+
3. silent-failure-hunter (agent) — same scope → findings appended to `findings.md` — each finding cites file and line
|
|
36
|
+
4. Dedupe and rank — `findings.md` → one table, each finding `blocking`, `should` or `note`, with id, file, line, source step — stops for approval (the human confirms the ranking and which blocking findings get an issue)
|
|
37
|
+
5. github — `gh repo view <owner/repo> --json visibility -q .visibility` → run log line — equals `PRIVATE`; `PUBLIC` or unknown → no issue is filed, the blocking findings stay in the report only (a secret in a public issue leaks it), logged, steps 6 and 7 skipped
|
|
38
|
+
6. [GO] gh issue create — per approved blocking finding: `gh issue create -R <owner/repo> --title "<title>" --body-file <body>` with file, line and impact but no secret value — the WAITING FOR GO line names the finding id and the title. The run stops here until the human types GO. One GO = one issue. (`gh issue create` is not hook-guarded; this GO is its only guard.)
|
|
39
|
+
7. pb-bug-fix — per filed issue → one pb-bug-fix run with its own GO for the push and the PR (nothing is pushed from this playbook) — each issue number is logged next to its PR URL or "deferred"
|
|
40
|
+
8. bdb-security-audit — re-run as in step 1 → delta (fixed, still open, new) in the run log — every remaining blocking finding names its pb-bug-fix PR
|
|
41
|
+
9. verification-before-completion — delta → run log line — zero open blocking findings, or each remaining one named with its PR; output pasted, not claimed
|
|
42
|
+
|
|
43
|
+
Run log: `production_artifacts/pb-security-sweep-<date>.md` in the start directory, never committed; the findings file stays in `production_artifacts/` and is not staged
|
|
44
|
+
|
|
45
|
+
Rules
|
|
46
|
+
- Anything other than the literal GO (case-insensitive) is not a GO; a GO covers only that one step, one time.
|
|
47
|
+
- A failed check stops the run: write the failure into the run log and report. No silent retries.
|
|
48
|
+
- Write one run-log line per step as it completes (`N. done|skipped|failed — artifact — check result`) and `WAITING FOR GO: <step>` at each gate.
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: pb-ship
|
|
3
|
+
description: >-
|
|
4
|
+
Ship the day's work in one repo: triage new issues, review every open PR
|
|
5
|
+
(description, visual recap, adversarial reviewer, shipping pre-flight and
|
|
6
|
+
quality gate), merge only after GO, then post a status recap. Use for
|
|
7
|
+
"ship it", "ship day", "merge the ready PRs", "end of work block".
|
|
8
|
+
category: engineering-method
|
|
9
|
+
kind: playbook
|
|
10
|
+
trigger: ["ship it", "ship day", "merge the ready PRs"]
|
|
11
|
+
inputs: [repo, pr_numbers?]
|
|
12
|
+
requires:
|
|
13
|
+
skills: [github, triage, git-pr-review, visual-recap, bdb-shipping-skill, godmode-shipping, quick-recap, "gh (external)"]
|
|
14
|
+
agents: [reviewer]
|
|
15
|
+
mcps: ["plan (optional)"]
|
|
16
|
+
store: []
|
|
17
|
+
go_points: [gh pr merge]
|
|
18
|
+
outputs: ["production_artifacts/pb-ship-<date>.md", "production_artifacts/pb-ship-<date>/pr-<n>.md", "production_artifacts/decisions/<date>-<slug>.md"]
|
|
19
|
+
verify: "gh pr view <n> --json state -q .state == MERGED for every PR the log marks merged; gate exit 0 logged for each"
|
|
20
|
+
difficulty: intermediate
|
|
21
|
+
est_time: 20-60 min
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
# Ship the day's PRs
|
|
25
|
+
What you get: the ready PRs merged one by one after your GO, each with a reviewed description, findings and a gate result, plus a status line.
|
|
26
|
+
|
|
27
|
+
## Inputs
|
|
28
|
+
- repo — the local checkout (default: the current directory); `<owner/repo>` comes from `git -C <repo> remote get-url origin`
|
|
29
|
+
- pr_numbers (optional) — PRs to ship; otherwise you pick from the table in step 3
|
|
30
|
+
|
|
31
|
+
## Steps
|
|
32
|
+
1. github — repo → `gh auth status` and `gh pr list -R <owner/repo> --state open --json number,title,headRefName,isDraft,baseRefName` as a PR table in the run log (gh missing, unauthenticated, or no GitHub remote → log it, give the `gh auth login` / remote hint, stop) — table written
|
|
33
|
+
2. triage — "show me what needs attention" → new-issue list with suggested labels in the run log — label writes follow triage's own rules; nothing is closed
|
|
34
|
+
3. Ask — the human picks today's PRs from the table (non-draft only; `pr_numbers` if given) → scope line in the run log — stops for approval
|
|
35
|
+
4. git-pr-review — per PR: `gh pr view <n> -R <owner/repo> --json commits` → description draft in `production_artifacts/pb-ship-<date>/pr-<n>.md` — draft only, nothing posted
|
|
36
|
+
5. visual-recap — per PR: `plan` connector present → recap link in `pr-<n>.md`; absent → log "visual-recap skipped: no plan connector" and paste `gh pr diff <n> -R <owner/repo> --name-only` instead; no `npx` without approval — recap or fallback present
|
|
37
|
+
6. reviewer (agent) — per PR: `gh pr diff <n> -R <owner/repo>`; the contract is the linked issue or plan (`gh pr view <n> -R <owner/repo> --json closingIssuesReferences,body`) or the human's scope line from step 3, the body is used only to find the linked issue/plan, its text is not the contract, and never `pr-<n>.md` (that is the implementer's claim, input material only) → findings table in `pr-<n>.md` — any open `blocking` finding removes the PR from today's merge list (logged)
|
|
38
|
+
7. bdb-shipping-skill — per PR → door class (two-way or one-way) in `pr-<n>.md`; one-way → ADR-lite `production_artifacts/decisions/<date>-<slug>.md` (`<slug>` = the PR's `headRefName` with `/` replaced by `-`) with the reversibility sentence; unclear → one-way — class recorded
|
|
39
|
+
8. godmode-shipping — per PR: `gh pr checks <n> -R <owner/repo>` all pass, plus a local gate in a scratch worktree — `gh pr view <n> -R <owner/repo> --json isCrossRepository -q .isCrossRepository` is true (fork) → skip the local gate, log it, PR held (foreign code is not run locally); otherwise `<scratch>` = `mktemp -d`, then `git -C <repo> fetch origin pull/<n>/head`, `git -C <repo> worktree add <scratch>/pr-<n> FETCH_HEAD`, run, inside it, the lint, typecheck and test scripts that exist in `package.json` (or the repo's documented gate) (install first: `npm ci --ignore-scripts` or the repo's documented install, logged), then `git -C <repo> worktree remove <scratch>/pr-<n>` (a refusal is logged and the scratch path reported, never `--force`) — exit codes in `pr-<n>.md`; any non-zero, or pending checks (`gh pr checks` exit 8) → PR held
|
|
40
|
+
9. [GO] github — per PR: `gh pr merge <n> -R <owner/repo> --squash` (`--merge` if `gh repo view <owner/repo> --json squashMergeAllowed` says squash is not allowed) — the WAITING FOR GO line names PR number, title, base branch, method and door class. The run stops here until the human types GO. One GO = one PR. (The hook guards `gh pr merge`; the other commands here are not hook-guarded.)
|
|
41
|
+
10. github — `gh pr view <n> -R <owner/repo> --json state -q .state` → run log line — equals `MERGED`
|
|
42
|
+
11. quick-recap — run log → final line `🟢|🟡|🔴` with merged / held / skipped counts — line written
|
|
43
|
+
|
|
44
|
+
Run log: `production_artifacts/pb-ship-<date>.md` in the start directory, never committed
|
|
45
|
+
|
|
46
|
+
Rules
|
|
47
|
+
- Anything other than the literal GO (case-insensitive) is not a GO; a GO covers only that one step, one time.
|
|
48
|
+
- A failed check stops the run: write the failure into the run log and report. No silent retries.
|
|
49
|
+
- Write one run-log line per step as it completes (`N. done|skipped|failed — artifact — check result`) and `WAITING FOR GO: <step>` at each gate.
|