@hybridlabor-api/aos 4.14.1 → 4.16.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.
Files changed (51) hide show
  1. package/.claude/hooks/aos-bus.mjs +146 -0
  2. package/.claude/hooks/go-gate.mjs +2 -1
  3. package/.opencode/plugins/bdb-aos.js +111 -5
  4. package/bin/aos-acp.mjs +7 -3
  5. package/bin/aos-doctor.mjs +21 -6
  6. package/docs/master-session-acp.md +15 -0
  7. package/docs/sessions/audit-agents.md +2 -0
  8. package/installer.js +341 -163
  9. package/package.json +3 -2
  10. package/scripts/validate-skills.mjs +29 -6
  11. package/skills/basic/godmode-shipping/SKILL.md +0 -1
  12. package/skills/basic/master-session/SKILL.md +1 -1
  13. package/skills/basic/startcycle/SKILL.md +0 -1
  14. package/skills/basic/startcycle-graph/SKILL.md +0 -1
  15. package/skills/global_config/ask-tim/SKILL.md +0 -1
  16. package/skills/global_config/grill-me/SKILL.md +0 -1
  17. package/skills/global_config/grill-with-docs/SKILL.md +0 -1
  18. package/skills/playbooks/pb-bug-fix/SKILL.md +48 -0
  19. package/skills/playbooks/pb-ci-fix/SKILL.md +0 -1
  20. package/skills/playbooks/pb-clip-from-moodboard/SKILL.md +55 -0
  21. package/skills/playbooks/pb-crew-call-sheet/SKILL.md +40 -0
  22. package/skills/playbooks/pb-deploy-saas/SKILL.md +44 -0
  23. package/skills/playbooks/pb-docs-site/SKILL.md +44 -0
  24. package/skills/playbooks/pb-event-tracker/SKILL.md +0 -1
  25. package/skills/playbooks/pb-focus-chunks/SKILL.md +40 -0
  26. package/skills/playbooks/pb-handover/SKILL.md +41 -0
  27. package/skills/playbooks/pb-harness-work/SKILL.md +64 -0
  28. package/skills/playbooks/pb-health-weekly/SKILL.md +43 -0
  29. package/skills/playbooks/pb-idea-to-launch/SKILL.md +51 -0
  30. package/skills/playbooks/pb-image-to-3d/SKILL.md +46 -0
  31. package/skills/playbooks/pb-inbox-zero/SKILL.md +39 -0
  32. package/skills/playbooks/pb-invoice-check/SKILL.md +41 -0
  33. package/skills/playbooks/pb-landing-page/SKILL.md +46 -0
  34. package/skills/playbooks/pb-launch-video/SKILL.md +49 -0
  35. package/skills/playbooks/pb-machine-setup/SKILL.md +44 -0
  36. package/skills/playbooks/pb-master/SKILL.md +53 -0
  37. package/skills/playbooks/pb-meeting-actions/SKILL.md +0 -1
  38. package/skills/playbooks/pb-newsletter/SKILL.md +43 -0
  39. package/skills/playbooks/pb-offer/SKILL.md +39 -0
  40. package/skills/playbooks/pb-open-source/SKILL.md +50 -0
  41. package/skills/playbooks/pb-pcb-to-case/SKILL.md +46 -0
  42. package/skills/playbooks/pb-project-new/SKILL.md +0 -1
  43. package/skills/playbooks/pb-redesign-app/SKILL.md +47 -0
  44. package/skills/playbooks/pb-release-aos/SKILL.md +50 -0
  45. package/skills/playbooks/pb-security-sweep/SKILL.md +48 -0
  46. package/skills/playbooks/pb-ship/SKILL.md +49 -0
  47. package/skills/playbooks/pb-show-build/SKILL.md +48 -0
  48. package/skills/playbooks/pb-social-pack/SKILL.md +47 -0
  49. package/skills/playbooks/pb-todo/SKILL.md +41 -0
  50. package/skills/playbooks/pb-week-plan/SKILL.md +0 -1
  51. package/skills/playbooks/pb-worktrees-land/SKILL.md +52 -0
@@ -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.
@@ -19,7 +19,6 @@ outputs: [".aos/project.json", "AGENTS.md", ".openwiki/", "production_artifacts/
19
19
  verify: "gh repo view <owner>/<name> --json visibility -q .visibility == PRIVATE"
20
20
  difficulty: intermediate
21
21
  est_time: 20-40 min
22
- disable-model-invocation: true
23
22
  ---
24
23
 
25
24
  # New private AOS project
@@ -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.
@@ -0,0 +1,48 @@
1
+ ---
2
+ name: pb-show-build
3
+ description: >-
4
+ Build a show across lights (grandMA3), media (Resolume) and generative
5
+ visuals (TouchDesigner) from one cue list, offline first. A lane whose
6
+ console or app is not running is skipped and logged while the others
7
+ continue; the live rig is touched only after GO. Use for "build the show",
8
+ "cue list to grandMA3 Resolume and TouchDesigner", "show programming".
9
+ category: media-eventtech
10
+ kind: playbook
11
+ trigger: ["build the show", "cue list to grandMA3 Resolume and TouchDesigner", "show programming"]
12
+ inputs: [tracker, cue_list, fixture_list, media_folder]
13
+ requires:
14
+ skills: [godmode-eventtech, bdbmediastorm, bdb-grandma3-mcp, bdb-resolume-mcp, bdb-touchdesigner-mcp, pb-event-tracker]
15
+ agents: []
16
+ mcps: [bdb_grandma3_mcp, bdb_resolume_mcp, bdb_td_minddesigner]
17
+ store: []
18
+ go_points: [patch console, live rehearsal]
19
+ outputs: ["cue-sheet.md", "production_artifacts/pb-show-build-<date>.md"]
20
+ verify: "each available lane answers its ping; TD node errors empty; every cue in cue-sheet.md maps to a TD cue, Resolume clip or MA3 macro"
21
+ difficulty: advanced
22
+ est_time: 2-6 h
23
+ ---
24
+
25
+ # Show build: lights, media, visuals
26
+ What you get: a cue sheet and a show built per lane, rehearsed offline first, with the live rig touched only after your GO. A lane that is not available is skipped, not faked.
27
+
28
+ ## Inputs
29
+ - tracker — the pb-event-tracker output (`tracker.csv`, `brief.md`)
30
+ - cue_list — the cues: number, name, what happens in light, media and visuals
31
+ - fixture_list — fixtures with type, mode, universe and address
32
+ - media_folder — the clip files for Resolume
33
+
34
+ ## Steps
35
+ 1. Preflight — one probe per lane, each independent: `grandma3_ping` on `bdb_grandma3_mcp`; `resolume_ping` on `bdb_resolume_mcp`; `get_td_info` on `bdb_td_minddesigner` (pass: `connected: true`). MCP tools may be deferred in the harness: try to load the tool once via the harness tool search before declaring it missing. Tool not loaded, call errors or the pass condition fails → log "Missing MCP: `<server>` (`<tool>` unavailable). Start <the grandMA3 console or onPC|Resolume Arena|TouchDesigner> and check `mcpServers.<server>` in your harness config." and mark that lane `off`; the other lanes continue and every step below runs only for lanes marked `on`. All three `off` → stop and write nothing except the run log — each lane marked `on` or `off` in the run log
36
+ 2. bdbmediastorm + godmode-eventtech — tracker, cue_list, fixture_list, media_folder → `cue-sheet.md`, one row per cue with its target per lane (MA3 macro, Resolume clip, TD cue; `lane off` where a lane is missing) — stops for approval
37
+ 3. TouchDesigner lane (bdb-touchdesigner-mcp) — cue-sheet → `compose_cue_list` and `create_safety_blackout_chain`, then `get_td_node_errors` — errors empty; offline: nothing is sent to live outputs
38
+ 4. Resolume lane (bdb-resolume-mcp) — media_folder, cue-sheet → `get_composition` compared with the clips the cue sheet names — every Resolume clip in the sheet is present in the composition, missing ones listed for the human to load (no MCP tool loads media)
39
+ 5. [GO] patch console (grandMA3 lane) — `patch_fixture` for each fixture in fixture_list (patching only, no macro is executed here), the full fixture list named in the WAITING FOR GO line. The run stops here until the human types GO. This changes the live console, and no hook guards it, so this GO is the only guard. One GO = this one list, one time.
40
+ 6. [GO] live rehearsal — walk the cue sheet on live outputs with `trigger_clip` and `clear_layer` (Resolume), the TD cue list and `execute_macro` for each macro in cue-sheet.md (grandMA3), only for lanes marked `on`; the cue count, the macro list and the lanes named in the WAITING FOR GO line. The run stops here until the human types GO. Light, video and projection go live, and no hook guards it, so this GO is the only guard. One GO = one rehearsal pass.
41
+ 7. Check — every cue row in `cue-sheet.md` maps to a TD cue, Resolume clip or MA3 macro or is marked `lane off`; `get_td_node_errors` empty again after the rehearsal — mapping table and result in the run log
42
+
43
+ Run log: `production_artifacts/pb-show-build-<date>.md` in the start directory, never committed
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. A lane marked `off` is logged `skipped` with its Missing MCP line.
@@ -0,0 +1,47 @@
1
+ ---
2
+ name: pb-social-pack
3
+ description: >-
4
+ Turn a release or ship recap into a social pack: posts per platform where
5
+ every claim traces to a facts file, clip cut-downs per aspect ratio cut with
6
+ ffmpeg and checked with ffprobe, hand-off for publishing only after GO. Use
7
+ for "social pack for the release", "posts and clips for this launch",
8
+ "announce the release".
9
+ category: media-eventtech
10
+ kind: playbook
11
+ trigger: ["social pack for the release", "posts and clips for this launch", "announce the release"]
12
+ inputs: [recap, platforms, launch_video?, formats?]
13
+ requires:
14
+ skills: [copywriting, quick-recap, pb-ship, pb-launch-video, "ffmpeg (external)", "ffprobe (external)"]
15
+ agents: []
16
+ mcps: []
17
+ store: [content-engine]
18
+ go_points: [publish]
19
+ outputs: ["social/<slug>/facts.md", "social/<slug>/posts.md", "social/<slug>/clips/", "social/<slug>/publish.md", "production_artifacts/pb-social-pack-<date>.md"]
20
+ verify: "every post claim cites facts.md; ffprobe shows the asked WxH per clip"
21
+ difficulty: intermediate
22
+ est_time: 30-60 min
23
+ ---
24
+
25
+ # Release social pack
26
+ What you get: posts per platform and clip cut-downs from your release recap, every claim traceable to a fact, handed off for publishing after your GO.
27
+
28
+ ## Inputs
29
+ - recap — release notes, or a pb-ship / pb-release-aos run log
30
+ - platforms — for example LinkedIn, X, Instagram, YouTube Shorts
31
+ - launch_video (optional) — an mp4 from pb-launch-video; without it the pack is posts only and step 4 is skipped
32
+ - formats (optional) — default 9:16 (1080x1920), 1:1 (1080x1080) and 16:9 (1920x1080)
33
+
34
+ ## Steps
35
+ 1. Preflight — `test -d ~/.claude/skills/content-engine`; absent → log "content-engine not installed: copywriting fallback" and continue. With launch_video: `command -v ffmpeg` and `command -v ffprobe`; either missing → stop with "Missing tool: <name>. Install ffmpeg and rerun." and write nothing except the run log — probes answered
36
+ 2. Ask — recap path, platforms, slug, launch_video, formats → run log — all answered, recap file exists
37
+ 3. quick-recap — recap → `social/<slug>/facts.md`, one numbered fact per line with its source line in the recap; no fact without a source — file written
38
+ 4. content-engine (if present) or copywriting — facts.md → `social/<slug>/posts.md` per platform, each claim tagged `[F<n>]` — every claim has a tag that exists in facts.md — stops for approval
39
+ 5. ffmpeg — launch_video → `social/<slug>/clips/<name>_<WxH>.mp4` per format and per requested cut, for example `ffmpeg -ss <start> -t <seconds> -i <video> -vf "scale=<W>:<H>:force_original_aspect_ratio=increase,crop=<W>:<H>" -c:a copy <out>`, then `ffprobe -v error -select_streams v:0 -show_entries stream=width,height -of csv=p=0 <out>` — ffprobe equals the asked WxH for every clip; on a mismatch stop with "clip <file> has WxH, expected ...", do not publish
40
+ 6. [GO] publish — platforms, post texts and the full clip list shown. The run stops here until the human types GO. No publish MCP exists, so the GO releases the hand-off: posts, clips and captions in `social/<slug>/publish.md`; upload is manual unless the human named a tool in step 2 — hand-off file written
41
+
42
+ Run log: `production_artifacts/pb-social-pack-<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,41 @@
1
+ ---
2
+ name: pb-todo
3
+ description: >-
4
+ Turn one sentence into a task line in the right to-do list, with project,
5
+ priority and optional due date. Use for "add a to-do", "remember to ...",
6
+ "put this on my list", "quick task". Nothing leaves your computer.
7
+ category: bdb-core
8
+ kind: playbook
9
+ trigger: ["add a to-do", "put this on my list", "quick task"]
10
+ inputs: [sentence, lists_folder?]
11
+ requires:
12
+ skills: [memb-skill]
13
+ agents: []
14
+ mcps: []
15
+ store: []
16
+ go_points: []
17
+ outputs: ["<lists>/<project>.md", "run-log.md"]
18
+ verify: "the approved line appears exactly once, in one list file"
19
+ difficulty: beginner
20
+ est_time: 2-5 min
21
+ ---
22
+
23
+ # Quick to-do
24
+ What you get: one sentence becomes a task line in the right list, with priority and project.
25
+
26
+ ## Inputs
27
+ - One sentence describing the task
28
+ - A lists folder — asked once; default `./todo/`
29
+ - A save folder for the run log — default `./pb-todo-<date>/`
30
+
31
+ ## Steps
32
+ 1. Ask once — lists folder (and the sentence if not given) → `run-log.md` — the lists folder exists, or you confirm it may be created
33
+ 2. Parse the sentence → task, project, priority (P1-P3), due date if one is named — anything not stated is `?`, never guessed
34
+ 3. Pick the list file `<lists>/<project>.md` from the project — a new file only after you say yes → chosen file in `run-log.md`
35
+ 4. Show the exact line, e.g. `- [ ] P2 task text (due 2026-10-05)`, and wait for your approval — approval logged
36
+ 5. Append the approved line to the chosen list → the line appears exactly once in that file, and in no other list
37
+ 6. memb-skill — optional, ask first: store the task — memory id logged; skipped and logged if memB is not installed
38
+
39
+ Nothing in this plan is sent anywhere, so there is no GO step. It only writes into the lists folder and the save folder, except the opt-in step 6 (writes memB).
40
+
41
+ Run log: `run-log.md` in the save folder. One line per step as it completes (`N. done|skipped|failed — file — check result`). If a check fails, stop, write the failure into the log and tell the user.
@@ -19,7 +19,6 @@ outputs: ["inbox.md", "calendar.md", "week-plan.md", "run-log.md"]
19
19
  verify: "every line in week-plan.md points to a line in inbox.md"
20
20
  difficulty: beginner
21
21
  est_time: 10-20 min
22
- disable-model-invocation: true
23
22
  ---
24
23
 
25
24
  # Plan my week
@@ -0,0 +1,52 @@
1
+ ---
2
+ name: pb-worktrees-land
3
+ description: >-
4
+ Clean up git worktrees across your repos: list every worktree, classify it
5
+ as merged, remote-only, local-only or dirty, recap what each holds, and
6
+ remove only the merged clean ones after GO. Use for "clean up worktrees",
7
+ "what is in my aos-wt folders", "land my worktrees", "prune worktrees".
8
+ category: bdb-core
9
+ kind: playbook
10
+ trigger: ["clean up worktrees", "land my worktrees", "prune worktrees"]
11
+ inputs: [repos?]
12
+ requires:
13
+ skills: [using-git-worktrees, github, visual-recap, pb-ship, "gh (external)"]
14
+ agents: []
15
+ mcps: ["plan (optional)"]
16
+ store: []
17
+ go_points: [git worktree remove]
18
+ outputs: ["production_artifacts/pb-worktrees-land-<date>.md"]
19
+ verify: "git -C <repo> worktree list no longer shows any path the log marks removed; every removed branch was merged before removal"
20
+ difficulty: intermediate
21
+ est_time: 10-30 min
22
+ ---
23
+
24
+ # Land and clean up worktrees
25
+ What you get: an inventory of your worktrees with a class for each, and the merged clean ones removed after your GO.
26
+
27
+ ## Inputs
28
+ - repos (optional) — repo paths to scan; default is the current repo's main worktree (`git rev-parse --path-format=absolute --git-common-dir`, parent dir)
29
+ - `<owner/repo>` for each repo comes from `git -C <repo> remote get-url origin`
30
+
31
+ ## Steps
32
+ 1. Ask — repos (default as above) → run log in the start directory — repo list confirmed; stops for approval
33
+ 2. using-git-worktrees — per repo: `git -C <repo> worktree list --porcelain` → inventory table (path, branch, HEAD) in the run log — the main worktree, the worktree running this playbook, and any entry marked `locked` or `prunable` are `keep`
34
+ 3. github — `gh auth status` (fails → log it, skip the squash predicate, only ancestry merges count); `git -C <repo> fetch origin --prune`; default branch: `default=$(git -C <repo> symbolic-ref --short refs/remotes/origin/HEAD); default=${default#origin/}` (the command prints `origin/main`) → both in the run log — fetch fails → log it, classify against the local refs, mark the table "stale"
35
+ 4. Classify, first match wins:
36
+ - `dirty`: `git -C <wt> status --porcelain --ignored` shows anything other than `!!` entries; `!!` (ignored files, deleted by removal) are listed per row in the GO line
37
+ - detached HEAD (no `<branch>`): always `local-only`, never removed
38
+ - `merged`: `git -C <repo> merge-base --is-ancestor <branch> origin/<default>`, or (squash merge) `gh pr list -R <owner/repo> --head <branch> --state merged --json number,headRefOid` has a PR whose `headRefOid` equals the worktree `HEAD` (`git -C <wt> rev-parse HEAD`); a reused branch name with a different `headRefOid` does not count
39
+ - `remote-only`: the upstream exists and `git -C <wt> rev-list --count @{u}..HEAD` is 0 (safe on the remote, unmerged)
40
+ - `local-only`: everything else; commits exist only here
41
+ - check: every row has exactly one class plus the output of its evidence command
42
+ 5. visual-recap — per non-merged worktree: recap link; without the `plan` connector log `git -C <wt> log --oneline origin/<default>..HEAD` and `git -C <wt> diff --stat origin/<default>...HEAD` instead — one recap or fallback per row
43
+ 6. [GO] removal list = rows classified `merged` and not `keep`, shown in full with these exact commands per row: `git -C <repo> worktree remove <path>` (label the row `merged (empty)` when `git -C <repo> rev-parse <branch>` equals `git -C <repo> rev-parse origin/<default>`; never `--force`; git refuses dirty trees), then `git -C <repo> branch -d <branch>` (`-d` refuses squash-merged branches → log "branch kept, needs -D, human decides"; never `-D`). The run stops here until the human types GO. GO covers exactly that list, once. The hook does not guard these commands, so GO is by contract. Never remove dirty, remote-only, local-only or `keep` rows, and never use `rm -r`.
44
+ 7. Verify — `git -C <repo> worktree list` → removed paths are gone, kept rows unchanged
45
+ 8. Hand-off — remote-only and local-only rows → next action per row in the run log ("land via /pb-ship", or "push needs GO in that worktree") — nothing runs
46
+
47
+ Run log: `production_artifacts/pb-worktrees-land-<date>.md` in the start directory, never committed
48
+
49
+ Rules
50
+ - Anything other than the literal GO (case-insensitive) is not a GO; a GO covers only that one step, one time.
51
+ - A failed check stops the run: write the failure into the run log and report. No silent retries.
52
+ - 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.