@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.
Files changed (104) hide show
  1. package/.agents/plugins/marketplace.json +20 -0
  2. package/.claude/hooks/env-file-protection.mjs +19 -1
  3. package/.claude/hooks/go-gate.mjs +787 -68
  4. package/.claude/hooks/go-grant.mjs +88 -0
  5. package/.claude/settings.json +8 -0
  6. package/.codex-plugin/plugin.json +36 -6
  7. package/.opencode/commands/bdb-aos-brainstorm.md +5 -0
  8. package/.opencode/commands/bdb-aos-doctor.md +5 -0
  9. package/.opencode/commands/bdb-aos-graph.md +5 -0
  10. package/.opencode/commands/bdb-aos-init.md +5 -0
  11. package/.opencode/commands/bdb-aos-loop.md +5 -0
  12. package/.opencode/commands/bdb-aos-mastersession.md +5 -0
  13. package/.opencode/commands/bdb-aos-memb.md +5 -0
  14. package/.opencode/commands/bdb-aos-orchestrator.md +5 -0
  15. package/.opencode/commands/bdb-aos-plan.md +5 -0
  16. package/.opencode/commands/bdb-aos-playbooks.md +5 -0
  17. package/.opencode/commands/bdb-aos-setup.md +5 -0
  18. package/.opencode/commands/bdb-aos-shipping.md +5 -0
  19. package/.opencode/commands/bdb-aos-startproject.md +5 -0
  20. package/.opencode/commands/bdb-aos-store.md +5 -0
  21. package/.opencode/plugins/bdb-aos.js +54 -10
  22. package/README.md +4 -4
  23. package/agy-commands/loop.md +5 -0
  24. package/bin/aos-acp.mjs +7 -3
  25. package/bin/aos-doctor.mjs +26 -9
  26. package/bin/aos-uninstall.mjs +25 -1
  27. package/commands/brainstorm.md +5 -0
  28. package/commands/doctor.md +5 -0
  29. package/commands/graph.md +5 -0
  30. package/commands/init.md +5 -0
  31. package/commands/loop.md +5 -0
  32. package/commands/mastersession.md +5 -0
  33. package/commands/memb.md +5 -0
  34. package/commands/orchestrator.md +5 -0
  35. package/commands/plan.md +5 -0
  36. package/commands/playbooks.md +5 -0
  37. package/commands/setup.md +5 -0
  38. package/commands/shipping.md +5 -0
  39. package/commands/startproject.md +5 -0
  40. package/commands/store.md +5 -0
  41. package/docs/codex-agy-setup.md +16 -0
  42. package/docs/opencode-setup.md +36 -0
  43. package/docs/plugin-migration.md +61 -0
  44. package/installer.js +564 -215
  45. package/lib/plugin-migration.js +462 -0
  46. package/lib/store-ui/index.html +9 -1
  47. package/lib/store-ui/server.mjs +2 -0
  48. package/package.json +7 -2
  49. package/plugin-commands.json +144 -0
  50. package/plugin.json +302 -0
  51. package/plugins/bdb-aos-codex/.codex-plugin/plugin.json +38 -0
  52. package/plugins/bdb-aos-codex/skills/brainstorm/SKILL.md +6 -0
  53. package/plugins/bdb-aos-codex/skills/doctor/SKILL.md +6 -0
  54. package/plugins/bdb-aos-codex/skills/graph/SKILL.md +6 -0
  55. package/plugins/bdb-aos-codex/skills/init/SKILL.md +6 -0
  56. package/plugins/bdb-aos-codex/skills/loop/SKILL.md +6 -0
  57. package/plugins/bdb-aos-codex/skills/mastersession/SKILL.md +6 -0
  58. package/plugins/bdb-aos-codex/skills/memb/SKILL.md +6 -0
  59. package/plugins/bdb-aos-codex/skills/orchestrator/SKILL.md +6 -0
  60. package/plugins/bdb-aos-codex/skills/plan/SKILL.md +6 -0
  61. package/plugins/bdb-aos-codex/skills/playbooks/SKILL.md +6 -0
  62. package/plugins/bdb-aos-codex/skills/setup/SKILL.md +6 -0
  63. package/plugins/bdb-aos-codex/skills/shipping/SKILL.md +6 -0
  64. package/plugins/bdb-aos-codex/skills/startproject/SKILL.md +6 -0
  65. package/plugins/bdb-aos-codex/skills/store/SKILL.md +6 -0
  66. package/scripts/build-plugin-manifest.mjs +202 -3
  67. package/skills/basic/master-session/SKILL.md +1 -1
  68. package/skills/bdb-aos/scripts/list-playbooks.mjs +72 -0
  69. package/skills/global_config/gogate/SKILL.md +123 -0
  70. package/skills/global_config/loop-templates/SKILL.md +27 -0
  71. package/skills/global_config/loop-templates/references/ci-until-green.md +27 -0
  72. package/skills/global_config/loop-templates/references/daily-summary.md +27 -0
  73. package/skills/global_config/loop-templates/references/pr-to-merge.md +27 -0
  74. package/skills/global_config/loop-templates/references/review-rounds.md +27 -0
  75. package/skills/playbooks/pb-bug-fix/SKILL.md +48 -0
  76. package/skills/playbooks/pb-clip-from-moodboard/SKILL.md +55 -0
  77. package/skills/playbooks/pb-crew-call-sheet/SKILL.md +40 -0
  78. package/skills/playbooks/pb-deploy-saas/SKILL.md +44 -0
  79. package/skills/playbooks/pb-docs-site/SKILL.md +44 -0
  80. package/skills/playbooks/pb-focus-chunks/SKILL.md +40 -0
  81. package/skills/playbooks/pb-handover/SKILL.md +41 -0
  82. package/skills/playbooks/pb-harness-work/SKILL.md +64 -0
  83. package/skills/playbooks/pb-health-weekly/SKILL.md +43 -0
  84. package/skills/playbooks/pb-idea-to-launch/SKILL.md +51 -0
  85. package/skills/playbooks/pb-image-to-3d/SKILL.md +46 -0
  86. package/skills/playbooks/pb-inbox-zero/SKILL.md +39 -0
  87. package/skills/playbooks/pb-invoice-check/SKILL.md +41 -0
  88. package/skills/playbooks/pb-landing-page/SKILL.md +46 -0
  89. package/skills/playbooks/pb-launch-video/SKILL.md +49 -0
  90. package/skills/playbooks/pb-machine-setup/SKILL.md +44 -0
  91. package/skills/playbooks/pb-master/SKILL.md +53 -0
  92. package/skills/playbooks/pb-newsletter/SKILL.md +43 -0
  93. package/skills/playbooks/pb-offer/SKILL.md +39 -0
  94. package/skills/playbooks/pb-open-source/SKILL.md +50 -0
  95. package/skills/playbooks/pb-pcb-to-case/SKILL.md +46 -0
  96. package/skills/playbooks/pb-redesign-app/SKILL.md +47 -0
  97. package/skills/playbooks/pb-release-aos/SKILL.md +50 -0
  98. package/skills/playbooks/pb-security-sweep/SKILL.md +48 -0
  99. package/skills/playbooks/pb-ship/SKILL.md +49 -0
  100. package/skills/playbooks/pb-show-build/SKILL.md +48 -0
  101. package/skills/playbooks/pb-social-pack/SKILL.md +47 -0
  102. package/skills/playbooks/pb-todo/SKILL.md +41 -0
  103. package/skills/playbooks/pb-worktrees-land/SKILL.md +52 -0
  104. package/.codex-plugin/marketplace.json +0 -11
@@ -0,0 +1,48 @@
1
+ ---
2
+ name: pb-bug-fix
3
+ description: >-
4
+ Turn a GitHub issue into a tested fix on a branch with an open PR: read the
5
+ issue as the contract, find the root cause, write the failing test first,
6
+ fix, prove it, review the diff against the issue, push and open the PR only
7
+ after GO. Merging stays with pb-ship. Use for "fix issue 42", "bug fix from
8
+ this issue", "turn this issue into a PR".
9
+ category: engineering-method
10
+ kind: playbook
11
+ trigger: ["fix issue", "bug fix from issue", "issue to PR"]
12
+ inputs: [repo, issue_number]
13
+ requires:
14
+ skills: [github, deja-memory, systematic-debugging, test-driven-development, verification-before-completion, git-pr-review, "gh (external)"]
15
+ agents: [reviewer]
16
+ mcps: []
17
+ store: []
18
+ go_points: ["git push + gh pr create"]
19
+ outputs: ["production_artifacts/pb-bug-fix-<date>.md"]
20
+ verify: "new test fails on the base SHA and passes on the branch SHA; gh pr view <branch> --json closingIssuesReferences contains <n>"
21
+ difficulty: intermediate
22
+ est_time: 30-90 min
23
+ ---
24
+
25
+ # GitHub issue to tested fix and PR
26
+ What you get: a branch with a failing-then-passing test and the fix, reviewed against the issue, and an open PR that closes it. Merging is a separate run (pb-ship).
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
+ - issue_number — the GitHub issue to fix, asked if missing
31
+
32
+ ## Steps
33
+ 1. github — repo, issue_number → `gh auth status`, then `gh issue view <n> -R <owner/repo> --json title,body,labels,state` as the contract (acceptance points as a list) in the run log (gh missing, unauthenticated, no GitHub remote, or the issue is closed → log it, give the `gh auth login` / remote hint, stop) — contract written
34
+ 2. deja-memory — error text or symptom from the issue → `deja fix` result in the run log — prior fix found, or "none"
35
+ 3. systematic-debugging — contract → root cause and a local repro command in the run log — repro fails locally on the base SHA (base SHA logged), or the reason it cannot run locally
36
+ 4. test-driven-development — root cause → failing test first (run, red, output pasted), then the minimal fix on a new branch `fix/<n>-<slug>` — the new test fails on the base SHA and passes after the fix; no unrelated edits
37
+ 5. verification-before-completion — repro command and the repo's test, lint and typecheck scripts that exist → fresh passing output pasted in the run log — output pasted, not claimed
38
+ 6. reviewer (agent) — `git diff <base>...HEAD`; the contract is the issue from step 1, never the run log and never the implementer's claim (input material only) → findings table in the run log — any open `blocking` finding sends the run back to step 4, at most 2 cycles, then stop and escalate
39
+ 7. git-pr-review — `git log <base>..HEAD` → PR body draft in the run log, ending in `Fixes #<n>` — draft only, nothing posted
40
+ 8. [GO] git push + gh pr create — `git push -u origin <branch>` then `gh pr create -R <owner/repo> --base <base> --head <branch> --title "<title>" --body-file <draft>` — the WAITING FOR GO line names branch, base, title and issue number. The run stops here until the human types GO. One GO covers the push and the PR creation, one time. (The hook guards the push only; `gh pr create` is not hook-guarded, so this GO is its only guard.)
41
+ 9. github — `gh pr view <branch> -R <owner/repo> --json url,closingIssuesReferences` → PR URL in the run log — `closingIssuesReferences` contains `<n>`
42
+
43
+ Run log: `production_artifacts/pb-bug-fix-<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 beyond what a step names.
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,55 @@
1
+ ---
2
+ name: pb-clip-from-moodboard
3
+ description: >-
4
+ Turn a look brief and reference images into a finished social clip:
5
+ concept, TouchDesigner look and palette, ComfyUI stills, a recorded take,
6
+ a cut in DaVinci Resolve or Remotion, 9:16 and 16:9 exports, publish only
7
+ after GO. Use for "moodboard to clip", "make a social clip from these
8
+ references", "look brief to video".
9
+ category: media-eventtech
10
+ kind: playbook
11
+ trigger: ["moodboard to clip", "social clip from references", "look brief to video"]
12
+ inputs: [brief, reference_images, project, comfy_workflow, cut_tool, formats?]
13
+ requires:
14
+ skills: [bdbmediastorm, bdb-touchdesigner-mcp, bdb-davinci-mcp, remotion, "ffprobe (external)"]
15
+ agents: []
16
+ mcps: [bdb_td_minddesigner, comfyui-mcp, bdb_davinci_mcp]
17
+ store: []
18
+ go_points: [publish]
19
+ outputs: ["renders/<project>/concept.md", "renders/<project>/look.tox", "renders/<project>/stills/", "renders/<project>/clip_9x16.mp4", "renders/<project>/clip_16x9.mp4", "production_artifacts/pb-clip-from-moodboard-<date>.md"]
20
+ verify: "ffprobe shows 1080x1920 and 1920x1080 at the asked duration; comfyui get_history status success; get_td_node_errors empty"
21
+ difficulty: advanced
22
+ est_time: 1-3 h
23
+ ---
24
+
25
+ # Moodboard to social clip
26
+ What you get: a 9:16 and a 16:9 clip built from your look brief and references, checked with ffprobe, handed off for publishing after your GO.
27
+
28
+ ## Inputs
29
+ - brief — the look brief, asked in step 2
30
+ - reference_images — a folder of reference images, asked in step 2
31
+ - project — a slug for `renders/<project>/`, asked in step 2
32
+ - comfy_workflow — path to a ComfyUI API-format workflow JSON, required, never invented
33
+ - cut_tool — `davinci` or `remotion` (remotion needs an existing Remotion project)
34
+ - formats (optional) — default 9:16 and 16:9
35
+
36
+ ## Steps
37
+ 1. Preflight — ask cut_tool first; then one probe per server, before any file is written: `get_td_info` on `bdb_td_minddesigner`; `check_comfyui_health` on `comfyui-mcp`; `get_resolve_status` on `bdb_davinci_mcp` (only if cut_tool = davinci); `command -v ffprobe`. 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 payload fails its pass condition (TD `get_td_info`: `connected: true`; ComfyUI `check_comfyui_health`: `status` is `"online"`; Resolve `get_resolve_status`: no `error` key) → stop with "Missing MCP: `<server>` (`<tool>` unavailable). Start <TouchDesigner|ComfyUI|DaVinci Resolve> and check `mcpServers.<server>` in your harness config." and write nothing except the run log; davinci missing while cut_tool = remotion → continue, logged — all probes answered
38
+ 2. Ask — brief, reference image folder, project slug, ComfyUI workflow JSON path, cut_tool, formats (default 9:16 and 16:9), length → run log and `renders/<project>/` — all answered, workflow path exists
39
+ 3. bdbmediastorm — brief → `renders/<project>/concept.md` (look, palette intent, shot list, length) — stops for approval
40
+ 4. bdb-touchdesigner-mcp — references → `moodboard_to_system` / `extract_palette` → network and palette; `get_td_node_errors` empty, `get_preview` shown (stops for approval), then `export_look_tox` → `renders/<project>/look.tox` — errors empty
41
+ 5. ComfyUI — the workflow file's text (palette and prompt filled in) as the JSON string for `queue_prompt` → `get_history <prompt_id>` status success → `get_output_media_info` paths copied to `renders/<project>/stills/` and loaded into the TD network (e.g. as a `moviefilein` TOP feeding the look) before step 6, then `get_td_node_errors` empty again — at least 1 still; `local_path` is only set when `COMFYUI_DIR` is set, so if `local_path` is empty or `exists_locally` is false, stop with a clear message and copy nothing
42
+ 6. Record — TD `record_movie` → `renders/<project>/raw.mov` — `ffprobe` duration > 0
43
+ 7. Cut — either way the output is the two clips, and `ffprobe` shows the asked width, height and duration per file:
44
+ - davinci: `create_project` → `import_media` → `create_timeline` → `append_to_timeline` → `set_render_settings` per format → `add_render_job` → `start_rendering` → `get_render_job_status` complete
45
+ - remotion: from the Remotion project dir, copy `raw.mov` into its `public/`, then `npx remotion render <Composition> <out>` per format (network/npm on first run needs approval; the skill's Stitch steps do not apply)
46
+ - `ffprobe` is the gate, since nothing proves `set_render_settings` sets 1080x1920: on a width/height mismatch stop with "export <format> has WxH, expected ...", log it, do not publish, invent no conversion command, and tell the human what to change in Resolve
47
+ - then the clips stop for approval (taste review)
48
+ 8. [GO] publish — the 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
49
+
50
+ Run log: `production_artifacts/pb-clip-from-moodboard-<date>.md` in the start directory, never committed
51
+
52
+ Rules
53
+ - Anything other than the literal GO (case-insensitive) is not a GO; a GO covers only that one step, one time.
54
+ - A failed check stops the run: write the failure into the run log and report. No silent retries.
55
+ - 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,40 @@
1
+ ---
2
+ name: pb-crew-call-sheet
3
+ description: >-
4
+ Build a crew call sheet and a load-in / load-out plan for one show day from
5
+ your event tracker or brief and your crew list, and send it to the crew only
6
+ after your GO. Use for "call sheet", "crew call times", "load-in plan",
7
+ "load-out schedule".
8
+ category: media-eventtech
9
+ kind: playbook
10
+ trigger: ["call sheet", "crew call times", "load-in plan"]
11
+ inputs: [tracker_csv_or_event_brief, crew_list]
12
+ requires:
13
+ skills: [bdb-eventagency-skill, pb-event-tracker]
14
+ agents: []
15
+ mcps: []
16
+ store: []
17
+ go_points: [send to crew]
18
+ outputs: ["call-sheet.md", "load-plan.md", "run-log.md"]
19
+ verify: "every crew member has a call time; load-in ends before doors; load-out starts after show end"
20
+ difficulty: beginner
21
+ est_time: 10-20 min
22
+ ---
23
+
24
+ # Crew call sheet
25
+ What you get: a call sheet and a load-in / load-out plan for one show day.
26
+
27
+ ## Inputs
28
+ - The `tracker.csv` from pb-event-tracker, or an event brief — a text or document file
29
+ - A crew list — a file with name, role and contact for each person
30
+ - A save folder — asked once; default `./pb-crew-call-sheet-<date>/`
31
+
32
+ ## Steps
33
+ 1. Ask once — save folder, tracker or brief, crew list → `run-log.md` — the files are readable; no tracker yet: run pb-event-tracker first or give the brief
34
+ 2. Read the tracker or brief and the crew list → show date, venue, doors time, show start and end, per crew member name, role, contact — missing times are `?`, never guessed
35
+ 3. bdb-eventagency-skill (section "5.1 Pre-production", run-of-show and day-minus milestones) — the read data → `call-sheet.md`, one row per crew member: who, role, call time, contact — every crew member has a call time
36
+ 4. bdb-eventagency-skill (section "5.1 Pre-production") — the read data → `load-plan.md` with load-in, line check, doors, show, load-out, each with a start and end time — load-in ends before doors; load-out starts after show end
37
+ 5. Show `call-sheet.md` and `load-plan.md` in full and apply your edits until you approve — approval logged
38
+ 6. [GO] Send the call sheet to the crew through a connector you name, or send it yourself — show every recipient (name + address, `?` blocks sending until you fill it) and the full text of every message first. The run stops here until the human types GO. The GO covers exactly the recipients and messages shown and nothing else; a different or added recipient needs a fresh GO. Never send to anyone not listed in `call-sheet.md`. The go-gate hook does not guard sending: this [GO] is the only guard.
39
+
40
+ 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,44 @@
1
+ ---
2
+ name: pb-deploy-saas
3
+ description: >-
4
+ Deploy a SaaS app to the BDB fleet: preflight of the fleet skills, a guardrail plan, green CI, the deploy after GO (Incus via
5
+ Forgejo CI, or direct rsync), and a health URL check. Use for "deploy this to the
6
+ fleet", "deploy the SaaS app", "ship to the Incus instance".
7
+ category: saas-ops
8
+ kind: playbook
9
+ trigger: ["deploy this to the fleet", "deploy the SaaS app", "deploy to the Incus instance"]
10
+ inputs: [repo, target_instance, path, version_source?]
11
+ requires:
12
+ skills: [bdb-deploy, pb-ci-fix, "bdbsaashost (external)", "deploy-incus (external)"]
13
+ agents: []
14
+ mcps: []
15
+ store: []
16
+ go_points: [deploy]
17
+ outputs: ["production_artifacts/pb-deploy-saas-<date>.md"]
18
+ verify: "curl -sI <health_url> returns 200; the version marker read in step 5 equals the deployed commit SHA, or the run log says marker absent: unverified"
19
+ difficulty: advanced
20
+ est_time: 30-90 min
21
+ ---
22
+
23
+ # Deploy a SaaS app to the fleet
24
+ What you get: the app deployed to the chosen fleet instance after your GO, with a health check logged.
25
+
26
+ ## Inputs
27
+ - repo — the current directory, or the one the user names
28
+ - target_instance — the fleet instance to deploy to, asked if missing
29
+ - path — `incus-ci` (push to Forgejo, the runner deploys to Incus) or `direct` (rsync over SSH), asked if missing
30
+ - version_source (optional) — where the app exposes its commit SHA: a `/version`-style URL or a response header name of the health URL, taken from the deploy plan; none given means the app exposes none
31
+
32
+ ## Steps
33
+ 1. Preflight — `test -f ~/.claude/skills/bdbsaashost/SKILL.md`; `test -f ~/.claude/skills/deploy-incus/SKILL.md` (needed only for path = incus-ci) → run log header — a skill absent → stop with "Missing skill: <name> (installed locally only, not shipped by AOS). Install it under `~/.claude/skills/` or run this playbook on the machine that has it."; write nothing except the run log — all probes answered
34
+ 2. bdbsaashost (external) — repo, target_instance → deploy plan with target, guardrails and the health URL in the run log — stops for approval (the human confirms target, path and health URL)
35
+ 3. pb-ci-fix — only if `gh run list --commit <HEAD sha> --limit 1 --json conclusion` for the repo is not `success` (a repo with no GitHub CI is logged and skipped) → one pb-ci-fix run, with its own GO for the push — latest run is green, else stop
36
+ 4. [GO] deploy — path = incus-ci: deploy-incus pushes the repo to the Forgejo remote, the push command is hook-guarded; path = direct: bdb-deploy runs `rsync` over SSH to the target, which is not hook-guarded (the same goes for `incus` commands), so this GO is the only guard there — RemoteOS approval does not cover a Forgejo push or an rsync, only actions run through its own tools (for example container manage), which this step does not use. The WAITING FOR GO line names the path, target_instance, the exact command, and the commit SHA. The run stops here until the human types GO. One GO = one deploy.
37
+ 5. Health check — `curl -sI <health_url>` for the status line; then the marker from `version_source` (`curl -s <version_url>` for a URL, or the named header in the `curl -sI` output) → status line and marker in the run log — status 200 and the marker equals the SHA from the step 4 GO line; if `version_source` is empty or returns no marker, log "marker absent: unverified" and accept the 200 alone; a marker that differs from the SHA, or any other status, stops the run and reports, no automatic rollback
38
+
39
+ Run log: `production_artifacts/pb-deploy-saas-<date>.md` in the start directory, 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,44 @@
1
+ ---
2
+ name: pb-docs-site
3
+ description: >-
4
+ Publish a project's docs as a static HTML manual on GitHub Pages: check
5
+ that Pages is enabled, bring the wiki up to date, list the doc gaps, build
6
+ the site, preview it locally and push it after GO. Use for "publish the
7
+ docs", "docs site", "put the manual on GitHub Pages".
8
+ category: design-ui-ux
9
+ kind: playbook
10
+ trigger: ["publish the docs", "docs site", "manual on GitHub Pages"]
11
+ inputs: [repo, source]
12
+ requires:
13
+ skills: [openwiki-skill, readme, documentation, bdbhtmlmanueldocs, github, "gh (external)"]
14
+ agents: []
15
+ mcps: []
16
+ store: []
17
+ go_points: ["git push"]
18
+ outputs: ["docs/", "production_artifacts/pb-docs-site-<date>.md"]
19
+ verify: "gh api repos/<owner>/<repo>/pages -q .status == built; curl -sI <pages_url> returns 200"
20
+ difficulty: intermediate
21
+ est_time: 30-90 min
22
+ ---
23
+
24
+ # Publish a docs site
25
+ What you get: the project's docs as a static HTML manual on GitHub Pages, pushed only after your GO.
26
+
27
+ ## Inputs
28
+ - repo — the local checkout, default the current directory; `<owner/repo>` comes from `git -C <repo> remote get-url origin`
29
+ - source — where the content lives: OpenWiki pages, the README, or `docs/`
30
+
31
+ ## Steps
32
+ 1. Preflight — `gh auth status`, then `gh api repos/<owner>/<repo>/pages` → run log header — gh missing, unauthenticated or no GitHub remote → log it, give the `gh auth login` / remote hint, stop; 404 → stop with "Pages not enabled: enable it in repo settings", this playbook does not enable Pages; a private repo whose Pages call is refused for plan reasons → stop with "Pages on a private repo needs a paid plan", and never change the repo's visibility. Then openwiki-skill — wiki refreshed or confirmed current → log line — Pages answered and the wiki is current
33
+ 2. readme and documentation — `source` against the code → list of doc gaps in the run log — stops for approval
34
+ 3. bdbhtmlmanueldocs — approved content → site files in `docs/` (or the Pages source path the step 1 response names) — files written, nothing committed; the skill's Pages build-type switch (`gh api -X PUT .../pages`) and its Pages deploy workflow are NOT run here, only the site files are written
35
+ 4. Preview — a local preview link or the path to the built `index.html` in the run log — link or path given
36
+ 5. [GO] git push — the site files committed to the branch and path the step 1 response names as the Pages source; the WAITING FOR GO line names the branch and the file list. The WAITING FOR GO line also says: a Pages site of a private repo is public. The run stops here until the human types GO. The hook guards `git push`; it does not guard `gh api` settings writes, so no Pages setting or workflow is changed in this playbook.
37
+ 6. github — `gh api repos/<owner>/<repo>/pages -q .status` equals `built` (poll, at most 5 minutes), then `curl -sI <pages_url>` → status line in the run log — returns 200
38
+
39
+ Run log: `production_artifacts/pb-docs-site-<date>.md` in the start directory, 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,40 @@
1
+ ---
2
+ name: pb-focus-chunks
3
+ description: >-
4
+ Split one big task into chunks of at most 25 minutes, each with a
5
+ done-check, and place the demanding ones in your high-energy hours. Use for
6
+ "split this task", "break it into chunks", "I can't start this", "focus
7
+ plan". Nothing leaves your computer.
8
+ category: bdb-core
9
+ kind: playbook
10
+ trigger: ["split this task", "break it into chunks", "focus plan"]
11
+ inputs: [task, energy_pattern]
12
+ requires:
13
+ skills: [concise-planning]
14
+ agents: []
15
+ mcps: []
16
+ store: []
17
+ go_points: []
18
+ outputs: ["chunks.md", "run-log.md"]
19
+ verify: "every chunk is <= 25 min and has a done-check; sum of chunks equals the estimate"
20
+ difficulty: beginner
21
+ est_time: 5-10 min
22
+ ---
23
+
24
+ # Focus chunks
25
+ What you get: one big task split into 25-minute chunks, ordered by your energy level, each with a done-check.
26
+
27
+ ## Inputs
28
+ - One task, in your own words, with your total time estimate
29
+ - Your energy pattern — asked once, e.g. morning high / afternoon low
30
+ - A save folder — asked once; default `./pb-focus-chunks-<date>/`
31
+
32
+ ## Steps
33
+ 1. Ask once — save folder, task, total estimate, energy pattern → `run-log.md` — all answered
34
+ 2. concise-planning — task and estimate → `chunks.md`: numbered chunks of at most 25 minutes, each with minutes, a done-check and an energy tag (high / low) — every chunk is <= 25 min and has a done-check; the minutes add up to your estimate
35
+ 3. Order `chunks.md` so high-energy chunks fall into your high-energy slots and low-energy chunks into the rest → slot named per chunk — no high-energy chunk sits in a low slot
36
+ 4. Show `chunks.md` in full and apply your edits until you approve — approval logged
37
+
38
+ Nothing in this plan is sent anywhere, so there is no GO step. It only writes into the save folder.
39
+
40
+ 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.
@@ -0,0 +1,41 @@
1
+ ---
2
+ name: pb-handover
3
+ description: >-
4
+ Write a handover note for a colleague from the state of a project folder:
5
+ what is done, what is open, what is risky, the next 3 steps and where
6
+ things live. Sent only after your GO. Use for "handover note", "hand this
7
+ project over", "I'm going on leave, brief my colleague".
8
+ category: bdb-core
9
+ kind: playbook
10
+ trigger: ["handover note", "hand this project over", "brief my colleague"]
11
+ inputs: [project_folder, colleague_name]
12
+ requires:
13
+ skills: [quick-recap, memb-skill, github, "gh (external)"]
14
+ agents: []
15
+ mcps: []
16
+ store: []
17
+ go_points: [send handover]
18
+ outputs: ["handover.md", "run-log.md"]
19
+ verify: "every open item cites a file, commit or PR"
20
+ difficulty: beginner
21
+ est_time: 10-20 min
22
+ ---
23
+
24
+ # Handover note
25
+ What you get: a handover note for a colleague from the state of a project folder.
26
+
27
+ ## Inputs
28
+ - A project folder
29
+ - The colleague's name
30
+ - A save folder — asked once; default `./pb-handover-<date>/`
31
+
32
+ ## Steps
33
+ 1. Ask once — save folder, project folder, colleague name → `run-log.md` — the folder exists
34
+ 2. Read the folder and its git log (read-only); github — only if `gh (external)` is installed: your open pull requests for this repo → list of files, recent commits and open PRs in `run-log.md` — if gh is missing, skipped and logged
35
+ 3. quick-recap — folder state and recent commits → what is done, what is in progress — each point cites a file or commit
36
+ 4. memb-skill — search open commitments for this project → added tagged `[memB]` — skipped and logged if memB is not installed
37
+ 5. Write `handover.md`: done, open, risks, next 3 steps, where things live — every open item cites a file, commit or PR; nothing invented, unknown is `?`
38
+ 6. Show `handover.md` in full and apply your edits until you approve — approval logged
39
+ 7. [GO] Send the handover 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.
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`), 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,64 @@
1
+ ---
2
+ name: pb-harness-work
3
+ description: >-
4
+ Change the agent harness itself (AOS, AO or CBS hooks, gates, memory,
5
+ permissions, delegation, plugins, bootstrap) the safe way: look up the
6
+ matching harness pattern, design against its gotchas, build with
7
+ /startcycle and a live trail, check every harness, open a PR after GO.
8
+ Use for "change a hook", "fix the go-gate", "harness work", "plugin change".
9
+ category: bdb-core
10
+ kind: playbook
11
+ trigger: ["harness work", "change a hook", "fix the go-gate", "plugin change"]
12
+ inputs: [goal, repo, area]
13
+ requires:
14
+ skills: [agentic-harness-patterns, startcycle, agenttrail, verification-before-completion, git-pr-review, github, "gh (external)"]
15
+ agents: [architect, techlead, reviewer]
16
+ mcps: []
17
+ store: []
18
+ go_points: [git push + gh pr create]
19
+ outputs: ["production_artifacts/00_execution_plan.md", "production_artifacts/pb-harness-work-<date>.md"]
20
+ verify: "npm test exit 0 on the pushed SHA; gh pr view <branch> --json state -q .state == OPEN"
21
+ difficulty: advanced
22
+ est_time: 1-3 h
23
+ ---
24
+
25
+ # Change the harness safely
26
+ What you get: a harness change that was designed against the known gotchas, built and reviewed, tested on every harness, and opened as a PR after your GO.
27
+
28
+ ## Inputs
29
+ - goal — what should change, asked in step 1
30
+ - repo — the local checkout, asked in step 1
31
+ - area — memory, permissions, hooks, delegation, context, skills/plugins, tools or bootstrap, asked in step 1
32
+
33
+ ## Steps
34
+ 1. Ask + preflight (run everything from `<repo>`) — goal, repo, area → run log; default branch: `default=$(git -C <repo> symbolic-ref --short refs/remotes/origin/HEAD); default=${default#origin/}` (the command prints `origin/main`); if `git -C <repo> branch --show-current` equals it, `git -C <repo> switch -c feat/<slug>` — on a feature branch (gh missing or unauthenticated → log it, give the `gh auth login` hint, stop)
35
+ 2. agentic-harness-patterns — area → section and reference file, named in the run log; files live in `skills/global_config/agentic-harness-patterns/references/` (installed copy: the matching directory):
36
+ - memory → `memory-persistence-pattern.md`
37
+ - permissions → `permission-gate-pattern.md`
38
+ - hooks → `hook-lifecycle-pattern.md`
39
+ - delegation → `agent-orchestration-pattern.md` and `task-decomposition-pattern.md`
40
+ - context → `context-engineering-pattern.md`
41
+ - skills/plugins → `skill-runtime-pattern.md`
42
+ - tools → `tool-registry-pattern.md`
43
+ - bootstrap → `bootstrap-sequence-pattern.md`
44
+ - check: the gotcha titles that apply are listed as a checklist (titles only, no copied content)
45
+ 3. startcycle (Architect) — goal and gotcha checklist → `production_artifacts/00_execution_plan.md` with agenttrail components, each with a `files:` line — every listed gotcha is marked addressed or n/a with a reason; a component without `files:` → back to Architect
46
+ 4. agenttrail — `aos-trail . --plan production_artifacts/00_execution_plan.md --no-open` → URL in the run log, before the build nodes start — URL printed; a no-op if startcycle already started the trail (it is safe to run twice)
47
+ 5. startcycle (TechLead → build → Reviewer) — the dispatcher is the main session; the agents never call each other → code and review file — no open `blocking` finding
48
+ 6. Cross-harness check → table in the run log, one row per harness (affected yes/no, file, evidence):
49
+ - Claude: `.claude/hooks/*.mjs`, settings hooks
50
+ - agy: `hooks.json` via installer `mergeAntigravityHooks`
51
+ - OpenCode: `.opencode/plugins/bdb-aos.js`
52
+ - Codex: `.codex/agents/*.toml`, `~/.codex/hooks` and `[features] hooks` in `~/.codex/config.toml` (both written by `installer.js`)
53
+ - check: every "yes" row has a test in `npm test` or a named manual check
54
+ 7. verification-before-completion — `npm test` (and `node scripts/validate-skills.mjs` if skills changed) → fresh output pasted in the run log — exit 0
55
+ 8. git commit — compare `git -C <repo> status --porcelain` with the plan's `files:` lines; unlisted changes outside `production_artifacts/` → stop and ask; stage only the listed files (never the run log or `production_artifacts/`) → SHA in the run log — the commit hook passes
56
+ 9. git-pr-review — commits → PR body in `production_artifacts/pb-harness-work-<date>-pr.md` — body written, nothing posted
57
+ 10. [GO] github — `git -C <repo> push -u origin <branch>`, then `gh pr create -R <owner/repo> --base <default> --head <branch> --title "<title>" --body-file <body>` (`<owner/repo>` from `git -C <repo> remote get-url origin`) — the WAITING FOR GO line names branch, base and title. The run stops here until the human types GO. The hook guards the push only; the PR create is GO by contract.
58
+
59
+ Run log: `production_artifacts/pb-harness-work-<date>.md` in the repo's start directory, never committed
60
+
61
+ Rules
62
+ - Anything other than the literal GO (case-insensitive) is not a GO; a GO covers only that one step, one time.
63
+ - A failed check stops the run: write the failure into the run log and report. No silent retries.
64
+ - 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-health-weekly
3
+ description: >-
4
+ Weekly health report over the BDB repos: git and npm version drift and CI
5
+ status as an HTML report with auto-remediation off, red CI routed to
6
+ pb-ci-fix, non-release remediation steps run one at a time after GO. Use for "weekly
7
+ health check", "ecosystem health", "are all repos green and in sync".
8
+ category: saas-ops
9
+ kind: playbook
10
+ trigger: ["weekly health check", "ecosystem health", "are all repos green"]
11
+ inputs: [repo_list?]
12
+ requires:
13
+ skills: [pb-ci-fix, quick-recap, github, "bdb-ecosystem-health (external)", "gh (external)"]
14
+ agents: []
15
+ mcps: []
16
+ store: []
17
+ go_points: [remediation]
18
+ outputs: ["production_artifacts/pb-health-weekly-<date>.md", "<the skill's HTML report>"]
19
+ verify: "report lists every repo with CI conclusion and version drift; each red repo names a pb-ci-fix run or a deferral"
20
+ difficulty: intermediate
21
+ est_time: 15-30 min
22
+ ---
23
+
24
+ # Weekly ecosystem health
25
+ What you get: an HTML health report with git and npm drift and CI status for every repo, red repos handed to pb-ci-fix, and a one-line status.
26
+
27
+ ## Inputs
28
+ - repo_list (optional) — the repos to check; default is the list the bdb-ecosystem-health skill carries
29
+
30
+ ## Steps
31
+ 1. Preflight — `test -f ~/.claude/skills/bdb-ecosystem-health/SKILL.md`, `gh auth status` → run log header — skill absent → stop with "Missing skill: bdb-ecosystem-health (installed locally only, not shipped by AOS). Install it under `~/.claude/skills/` or run this playbook on the machine that has it." and write nothing except the run log; gh missing or unauthenticated → log it, give the `gh auth login` hint, stop
32
+ 2. bdb-ecosystem-health (external) — repo_list → HTML report with auto-remediation OFF (the report only proposes remediation) → report path in the run log — report exists; no remediation command was run
33
+ 3. github — report → table of every repo with version drift and CI conclusion in the run log (`gh run list -R <owner/repo> --limit 1 --json conclusion,headSha` per repo) — every repo listed; stops for approval (the human confirms which red repos to fix and which to defer)
34
+ 4. pb-ci-fix — per approved red repo → one pb-ci-fix run, with its own GO for the push — each red repo names its run log or "deferred: <reason>"
35
+ 5. [GO] remediation — per step the skill proposes in its report, except version bumps, tags, changelog edits and publishes, which are never run here: npm or git version drift is routed to pb-release-aos (or the repo's own release PR) and logged as a proposal; the exact command shown in the WAITING FOR GO line with the repo and what it changes. The run stops here until the human types GO. One GO = one remediation step. The playbook cannot know in advance whether a proposed command is hook-guarded: a `git push`, `npm publish` or `npm version` is guarded by the hook, any other command (an `npm install -g`, a `gh` write, an `rsync`) is not, and for those this GO is the only guard. No proposed steps → step skipped
36
+ 6. quick-recap — run log → final line `🟢|🟡|🔴` with green, red-fixed, red-deferred and drift counts — line written
37
+
38
+ Run log: `production_artifacts/pb-health-weekly-<date>.md` in the start directory, never committed; the HTML report stays where the skill writes it and is not staged
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,51 @@
1
+ ---
2
+ name: pb-idea-to-launch
3
+ description: >-
4
+ Turn an idea into a deployed prototype: a spec from brainstorming, a visual
5
+ plan of the ComfyUI workflow, a prototype built with startcycle, one hero
6
+ image, green CI, then push and deploy after separate GOs. Use for "idea to
7
+ launch", "from idea to a live prototype", "build and deploy this idea".
8
+ category: engineering-method
9
+ kind: playbook
10
+ trigger: ["idea to launch", "from idea to live prototype", "build and deploy this idea"]
11
+ inputs: [idea, repo_or_new_project, comfy_workflow, deploy_target]
12
+ requires:
13
+ skills: [bdbrainstorm, grill-me, visual-plan, prototype, startcycle, pb-ci-fix, bdb-deploy, github, "gh (external)"]
14
+ agents: [architect, techlead, reviewer]
15
+ mcps: [comfyui-mcp]
16
+ store: []
17
+ go_points: ["git push", "deploy"]
18
+ outputs: ["production_artifacts/pb-idea-to-launch-<date>.md", "production_artifacts/pb-idea-to-launch-<date>/spec.md", "production_artifacts/pb-idea-to-launch-<date>/plan.md", "production_artifacts/pb-idea-to-launch-<date>/hero.png"]
19
+ verify: "gh run list --commit <sha> conclusion == success; curl -sI <url> returns 200"
20
+ difficulty: advanced
21
+ est_time: 2-6 h
22
+ ---
23
+
24
+ # Idea to deployed prototype
25
+ What you get: an idea turned into a deployed prototype with green CI and one hero image, pushed and deployed only after your GO.
26
+
27
+ ## Inputs
28
+ - idea — a short description, asked once
29
+ - repo_or_new_project — an existing checkout, or a name for a new project
30
+ - comfy_workflow — path to a ComfyUI API-format workflow JSON, required, never invented
31
+ - deploy_target — the host and path or the target the human names, asked once
32
+
33
+ ## Steps
34
+ 1. Preflight — one probe `check_comfyui_health` on `comfyui-mcp` (MCP tools may be deferred in the harness: try to load the tool once via the harness tool search before declaring it missing) → run log header — tool not loaded, call errors, or `status` is not `"online"` → log "Missing MCP: `comfyui-mcp` (`check_comfyui_health` unavailable). Start ComfyUI and check `mcpServers.comfyui-mcp` in your harness config." and mark step 5 to stop; steps 2 to 4 still run
35
+ 2. bdbrainstorm or grill-me — idea → `production_artifacts/pb-idea-to-launch-<date>/spec.md` — spec written, open questions listed
36
+ 3. visual-plan — the workflow and the planned prototype screens → `plan.md` in the same folder — stops for approval
37
+ 4. prototype, then startcycle (architect, techlead, reviewer) — spec and plan → prototype in the repo (a new project: a new local directory, no remote yet) — reviewer reports no open `blocking` finding
38
+ - Commit: a new project gets `git init` first; the reviewed prototype files are staged by explicit path (never `git add -A`) and committed — SHA in the run log; the working tree has no uncommitted product files afterwards
39
+ 5. ComfyUI — the workflow file's text (prompt filled in) as the JSON string for `queue_prompt` → `get_history <prompt_id>` status success → `get_output_media_info` path copied to `hero.png` in the run folder — one image; `local_path` is only set when `COMFYUI_DIR` is set, so if `local_path` is empty or `exists_locally` is false, stop with a clear message and copy nothing; preflight failed in step 1 → stop with the "Missing MCP" message and write nothing except the run log
40
+ 6. pb-ci-fix (setup path) — run its steps up to and including the commit, but not its push step → workflow files committed, SHA in the run log — validator zero errors, commit hook passes; the push is covered by step 7, so pb-ci-fix's own push GO is skipped here
41
+ 7. [GO] git push — SHA → remote branch (name the branch in the WAITING FOR GO line). A new project without a remote: `gh repo create <owner>/<name> --private --source . --remote origin` runs in the same GO, never public, never any other visibility; the line names owner and name. The run stops here until the human types GO. The hook guards `git push`; `gh repo create` is not hook-guarded, so this GO is its only guard.
42
+ 8. github — SHA → `<id>` from `gh run list --commit <sha> --limit 1 --json databaseId` (wait until it exists), then `gh run watch <id> --exit-status` — `gh run list --commit <sha> --json conclusion -q '.[0].conclusion'` equals `success`; otherwise back to pb-ci-fix's debugging steps, at most 2 cycles, each push behind a fresh GO as in step 7, then stop and escalate
43
+ 9. [GO] bdb-deploy — build from the committed tree only (a clean checkout of the pushed SHA, e.g. `git worktree add <scratch> <sha>`, removed with `git worktree remove <scratch>` (no `--force`) when the deploy ends or the run stops) and rsync to `deploy_target`, the target, the file list and the command shown in full. The run stops here until the human types GO. The rsync deploy is not hook-guarded, so this GO is its only guard.
44
+ 10. Check — `curl -sI <url>` → status line in the run log — returns 200
45
+
46
+ Run log: `production_artifacts/pb-idea-to-launch-<date>.md` in the start directory, never committed
47
+
48
+ Rules
49
+ - Anything other than the literal GO (case-insensitive) is not a GO; a GO covers only that one step, one time.
50
+ - A failed check stops the run: write the failure into the run log and report. No silent retries beyond what a step names.
51
+ - 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-image-to-3d
3
+ description: >-
4
+ Turn one reference image into a cleaned, scaled 3D asset: your own
5
+ image-to-3D ComfyUI workflow makes the mesh, Blender decimates it to a poly
6
+ budget, fixes scale, origin and material, and exports a .glb. Use for
7
+ "image to 3D", "make a 3D model from this picture", "photo to glb".
8
+ category: media-eventtech
9
+ kind: playbook
10
+ trigger: ["image to 3D", "3D model from this picture", "photo to glb"]
11
+ inputs: [image, comfy_workflow, poly_budget, project]
12
+ requires:
13
+ skills: [bdb-blender-mcp, godmode-3d-creation]
14
+ agents: []
15
+ mcps: [comfyui-mcp, bdb_blender_mcp]
16
+ store: []
17
+ go_points: []
18
+ outputs: ["renders/<project>/asset.glb", "renders/<project>/preview.png", "production_artifacts/pb-image-to-3d-<date>.md"]
19
+ verify: "asset.glb exists; Blender reports face count <= budget and non-zero dimensions"
20
+ difficulty: advanced
21
+ est_time: 30-90 min
22
+ ---
23
+
24
+ # Image to 3D asset
25
+ What you get: a cleaned, scaled `.glb` from one reference image, with a preview you approved.
26
+
27
+ ## Inputs
28
+ - image — the reference image path
29
+ - comfy_workflow — path to a ComfyUI API-format workflow JSON that contains the image-to-3D nodes; required, never invented (no TripoSR or TRELLIS server ships with AOS)
30
+ - poly_budget — maximum face count
31
+ - project — a slug for `renders/<project>/`
32
+
33
+ ## Steps
34
+ 1. Preflight — one probe per server, before any file is written: `check_comfyui_health` on `comfyui-mcp`; `get_scene_info` on `bdb_blender_mcp`. 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 ComfyUI `status` is not `"online"` → stop with "Missing MCP: `<server>` (`<tool>` unavailable). Start <ComfyUI|Blender and click Connect to Claude in the BlenderMCP sidebar tab> and check `mcpServers.<server>` in your harness config." and write nothing except the run log — both probes answered
35
+ 2. Ask — image, comfy_workflow path, poly_budget, project slug, target size in metres → run log and `renders/<project>/` — all answered, image and workflow files exist
36
+ 3. ComfyUI — the workflow file's text with the image filled in as the JSON string for `queue_prompt` → `get_history <prompt_id>` status success → `get_output_media_info` path of the mesh file — a mesh file exists; `local_path` is only set when `COMFYUI_DIR` is set, so if `local_path` is empty or `exists_locally` is false, stop with a clear message and import nothing
37
+ 4. Blender (bdb-blender-mcp, godmode-3d-creation) — mesh file → via `execute_blender_code`: import, Decimate modifier down to poly_budget, scale to the target size, origin to base centre, one material, and report face count and dimensions; `get_scene_info` as the cross-check — face count <= poly_budget and non-zero dimensions; save the Blender project first, since scripted code can crash the session
38
+ 5. Preview — a viewport render saved to `renders/<project>/preview.png` via `execute_blender_code` — file exists — stops for approval (taste review); changes loop back to step 4
39
+ 6. Export — `execute_blender_code` runs the glTF binary export → `renders/<project>/asset.glb` — file exists and is larger than 0 bytes; re-import the file or read the exported object stats and log face count and dimensions again
40
+
41
+ Run log: `production_artifacts/pb-image-to-3d-<date>.md` in the start directory, never committed
42
+
43
+ Rules
44
+ - A failed check stops the run: write the failure into the run log and report. No silent retries.
45
+ - Write one run-log line per step as it completes (`N. done|skipped|failed — artifact — check result`) and `WAITING FOR APPROVAL: <step>` at each stop.
46
+ - This playbook has no GO step: it writes only under `renders/<project>/` and publishes nothing.
@@ -0,0 +1,39 @@
1
+ ---
2
+ name: pb-inbox-zero
3
+ description: >-
4
+ Sort an email backlog into reply, delegate, archive and ignore, and draft
5
+ the replies. Nothing is sent without your GO. Use for "inbox zero", "sort
6
+ my mail", "clear my email backlog", "draft replies to my mail".
7
+ category: bdb-core
8
+ kind: playbook
9
+ trigger: ["inbox zero", "sort my mail", "email backlog"]
10
+ inputs: [mail_export_folder, connector?]
11
+ requires:
12
+ skills: [memb-skill]
13
+ agents: []
14
+ mcps: []
15
+ store: [email-ops]
16
+ go_points: [send replies]
17
+ outputs: ["triage.md", "drafts.md", "run-log.md"]
18
+ verify: "every mail in the export appears exactly once in triage.md"
19
+ difficulty: beginner
20
+ est_time: 10-20 min
21
+ ---
22
+
23
+ # Inbox zero
24
+ What you get: your email backlog sorted into reply / delegate / archive / ignore, with reply drafts. Nothing is sent without your GO.
25
+
26
+ ## Inputs
27
+ - A mail export folder (.eml or .mbox) — exported from your mail app; there is no mail connector configured by default
28
+ - A connector for sending — optional, you name it
29
+ - A save folder — asked once; default `./pb-inbox-zero-<date>/`
30
+
31
+ ## Steps
32
+ 1. Ask once — save folder, mail export folder, optional sending connector (email-ops if `test -d ~/.claude/skills/email-ops` passes; absent → logged "Missing store item: email-ops, install via aos-store" and the run continues with the connector the human names, or none) → `run-log.md` — the export folder holds at least one .eml or .mbox; if you have neither an export nor a connector, stop with `Missing mail source: export your inbox to .eml/.mbox` and write nothing but the run log
33
+ 2. Read every mail → `triage.md`, one row per mail: sender, subject, date, class (reply / delegate / archive / ignore), one-line reason, source file — every mail in the export appears exactly once; the row count equals the mail count
34
+ 3. memb-skill — optional, ask first: search open commitments to the senders to inform the class — skipped and logged if memB is not installed
35
+ 4. For each reply row → `drafts.md`: recipient as name + address (`?` blocks sending until you fill it), subject, body — draft only, nothing is sent
36
+ 5. Show `triage.md` and `drafts.md` in full and apply your edits until you approve — approval logged
37
+ 6. [GO] Send the replies through the connector you named — show every recipient and the full text of every message first. The run stops here until the human types GO. The GO covers exactly the recipients and messages shown and nothing else; a different or added recipient needs a fresh GO. Never send to anyone not listed in `drafts.md`. The go-gate hook does not guard sending: this [GO] is the only guard. Without a connector you copy the drafts yourself and the hand-off is logged.
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,41 @@
1
+ ---
2
+ name: pb-invoice-check
3
+ description: >-
4
+ Check invoices and receipts line by line against your offers and list what
5
+ matches, what differs and what has no offer. Nothing is paid or sent. Use
6
+ for "check my invoices", "match invoices to offers", "does this invoice
7
+ match the quote".
8
+ category: bdb-core
9
+ kind: playbook
10
+ trigger: ["check my invoices", "match invoices to offers", "invoice check"]
11
+ inputs: [invoices_folder, offers_folder]
12
+ requires:
13
+ skills: [pb-offer]
14
+ agents: []
15
+ mcps: []
16
+ store: []
17
+ go_points: []
18
+ outputs: ["invoices.csv", "check.md", "run-log.md"]
19
+ verify: "every PDF in the folder has exactly one row; every total recomputed from its lines"
20
+ difficulty: beginner
21
+ est_time: 10-20 min
22
+ ---
23
+
24
+ # Invoice check
25
+ What you get: invoices and receipts sorted and checked line by line against the matching offers.
26
+
27
+ ## Inputs
28
+ - An invoices folder with PDFs
29
+ - An offers folder — the `offer.md` files from pb-offer
30
+ - A save folder — asked once; default `./pb-invoice-check-<date>/`
31
+
32
+ ## Steps
33
+ 1. Ask once — save folder, invoices folder, offers folder → `run-log.md`; list the PDFs. `pdftotext` is not installed, so you read each PDF with the harness PDF read; a PDF it cannot read becomes a row with status `unread` and the run continues — you may paste its text later
34
+ 2. Per readable PDF → `invoices.csv`, columns file, vendor, date, number, net, VAT, total, status — a field that is not on the invoice is `?`; every PDF in the folder has exactly one row
35
+ 3. Match each invoice to an offer by vendor, client and items → matched offer named in `invoices.csv`; no offer found → status `no offer`
36
+ 4. Write `check.md`: per invoice match / mismatch (which line, how much it differs) / no offer / unread — every total recomputed from its lines; the recomputed value and the printed value are both shown
37
+ 5. Show `invoices.csv` and `check.md` in full and apply your edits until you approve — approval logged
38
+
39
+ Nothing is paid or sent, so there is no GO step. The run only reads the two folders and writes into the save folder.
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.