@hybridlabor-api/aos 4.2.0-beta.0 → 4.3.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 (133) hide show
  1. package/.agents/graph.md +3 -1
  2. package/.agents/nodes.json +4 -2
  3. package/.claude/workflows/startcycle-dispatch.mjs +18 -5
  4. package/.claude/workflows/teamwork-dispatch.mjs +287 -0
  5. package/CLAUDE.md +37 -84
  6. package/CODEX.md +31 -12
  7. package/GEMINI.md +51 -58
  8. package/README.de.md +13 -12
  9. package/README.md +13 -12
  10. package/README.pt.md +13 -12
  11. package/THIRD_PARTY_NOTICES.md +104 -0
  12. package/docs/skills_table.md +1 -0
  13. package/installer.js +27 -10
  14. package/package.json +6 -1
  15. package/scripts/validate-skills.mjs +402 -0
  16. package/skills/basic/bdbmediastorm/SKILL.md +7 -5
  17. package/skills/basic/godmode-engineering/SKILL.md +1 -1
  18. package/skills/basic/godmode-shipping/SKILL.md +1 -1
  19. package/skills/basic/startcycle/SKILL.md +3 -1
  20. package/skills/basic/startcycle-graph/SKILL.md +18 -2
  21. package/skills/basic/startcycle-graph-user/SKILL.md +3 -1
  22. package/skills/basic/teamwork-preview/SKILL.md +209 -0
  23. package/skills/bdbrainstorm/SKILL.md +4 -3
  24. package/skills/github-repo/SKILL.md +1 -0
  25. package/skills/global_config/agent-tool-builder/SKILL.md +5 -4
  26. package/skills/global_config/ai-product/SKILL.md +3 -2
  27. package/skills/global_config/ask-tim/SKILL.md +75 -6
  28. package/skills/global_config/{bdb-adobe-suite-mcp.md → bdb-adobe-suite-mcp/SKILL.md} +1 -0
  29. package/skills/global_config/{bdb-after-effects-mcp.md → bdb-after-effects-mcp/SKILL.md} +1 -0
  30. package/skills/global_config/{bdb-blender-mcp.md → bdb-blender-mcp/SKILL.md} +1 -0
  31. package/skills/global_config/{bdb-computer-use-mcp.md → bdb-computer-use-mcp/SKILL.md} +1 -0
  32. package/skills/global_config/{bdb-davinci-mcp.md → bdb-davinci-mcp/SKILL.md} +1 -0
  33. package/skills/global_config/bdb-ecosystem-health/SKILL.md +3 -3
  34. package/skills/global_config/{bdb-grandma3-mcp.md → bdb-grandma3-mcp/SKILL.md} +1 -0
  35. package/skills/global_config/{bdb-memb-mcp.md → bdb-memb-mcp/SKILL.md} +10 -0
  36. package/skills/global_config/{bdb-resolume-mcp.md → bdb-resolume-mcp/SKILL.md} +1 -0
  37. package/skills/global_config/{bdb-rhino-mcp.md → bdb-rhino-mcp/SKILL.md} +1 -0
  38. package/skills/global_config/{bdb-touchdesigner-mcp.md → bdb-touchdesigner-mcp/SKILL.md} +1 -0
  39. package/skills/global_config/{bdb-unreal-mcp.md → bdb-unreal-mcp/SKILL.md} +1 -0
  40. package/skills/global_config/{bdb-vectorworks-mcp.md → bdb-vectorworks-mcp/SKILL.md} +1 -0
  41. package/skills/global_config/bdbresilience/SKILL.md +216 -0
  42. package/skills/global_config/bdbresilience/contracts/nodes-integration.md +225 -0
  43. package/skills/global_config/bdbresilience/references/cicd-triage.md +179 -0
  44. package/skills/global_config/bdbresilience/references/distributed-locking.md +235 -0
  45. package/skills/global_config/bdbresilience/references/error-recovery.md +210 -0
  46. package/skills/global_config/bdbresilience/references/two-phase-go-gate.md +151 -0
  47. package/skills/global_config/bdbsaashost/SKILL.md +50 -50
  48. package/skills/global_config/browser-automation/SKILL.md +4 -4
  49. package/skills/global_config/crewai/SKILL.md +3 -2
  50. package/skills/global_config/debugger/SKILL.md +3 -6
  51. package/skills/global_config/domain-modeling/ADR-FORMAT.md +47 -0
  52. package/skills/global_config/domain-modeling/CONTEXT-FORMAT.md +60 -0
  53. package/skills/global_config/domain-modeling/SKILL.md +77 -0
  54. package/skills/global_config/git-advanced-workflows/SKILL.md +0 -1
  55. package/skills/global_config/github-actions-templates/SKILL.md +0 -2
  56. package/skills/global_config/google-sheets-automation/SKILL.md +2 -2
  57. package/skills/global_config/grill-me/SKILL.md +14 -0
  58. package/skills/global_config/grill-with-docs/SKILL.md +24 -0
  59. package/skills/global_config/grilling/SKILL.md +42 -0
  60. package/skills/global_config/neon-postgres/SKILL.md +3 -2
  61. package/skills/global_config/openwiki-skill/scripts/install_daemon.sh +55 -12
  62. package/skills/global_config/playwright-skill/SKILL.md +1 -1
  63. package/skills/global_config/posix-shell-pro/SKILL.md +0 -1
  64. package/skills/global_config/postgres-best-practices/SKILL.md +1 -1
  65. package/skills/global_config/prompt-engineering-patterns/SKILL.md +0 -1
  66. package/skills/global_config/rag-engineer/SKILL.md +4 -3
  67. package/skills/global_config/react-best-practices/SKILL.md +1 -1
  68. package/skills/global_config/remotion/SKILL.md +0 -1
  69. package/skills/global_config/seo/SKILL.md +6 -41
  70. package/skills/global_config/systematic-debugging/CREATION-LOG.md +1 -1
  71. package/skills/global_config/systematic-debugging/root-cause-tracing.md +1 -1
  72. package/skills/global_config/turborepo-caching/SKILL.md +0 -1
  73. package/skills/global_config/using-neon/SKILL.md +1 -47
  74. package/skills/global_config/vector-database-engineer/SKILL.md +0 -1
  75. package/skills/global_config/web-artifacts-builder/LICENSE.txt +1 -1
  76. package/skills/global_config/web-artifacts-builder/SKILL.md +1 -1
  77. package/skills/global_config/webapp-testing/LICENSE.txt +1 -1
  78. package/skills/global_config/webapp-testing/SKILL.md +1 -1
  79. package/.agents/skills/firecrawl/SKILL.md +0 -149
  80. package/.agents/skills/firecrawl/rules/install.md +0 -82
  81. package/.agents/skills/firecrawl/rules/security.md +0 -26
  82. package/.agents/skills/firecrawl-agent/SKILL.md +0 -58
  83. package/.agents/skills/firecrawl-build/SKILL.md +0 -39
  84. package/.agents/skills/firecrawl-build-interact/SKILL.md +0 -68
  85. package/.agents/skills/firecrawl-build-onboarding/SKILL.md +0 -103
  86. package/.agents/skills/firecrawl-build-onboarding/references/auth-flow.md +0 -39
  87. package/.agents/skills/firecrawl-build-onboarding/references/project-setup.md +0 -20
  88. package/.agents/skills/firecrawl-build-onboarding/references/sdk-installation.md +0 -17
  89. package/.agents/skills/firecrawl-build-scrape/SKILL.md +0 -69
  90. package/.agents/skills/firecrawl-build-search/SKILL.md +0 -69
  91. package/.agents/skills/firecrawl-crawl/SKILL.md +0 -59
  92. package/.agents/skills/firecrawl-download/SKILL.md +0 -70
  93. package/.agents/skills/firecrawl-interact/SKILL.md +0 -84
  94. package/.agents/skills/firecrawl-map/SKILL.md +0 -51
  95. package/.agents/skills/firecrawl-scrape/SKILL.md +0 -69
  96. package/.agents/skills/firecrawl-search/SKILL.md +0 -60
  97. package/mcps/RhinoMCP/cc-plugin/.claude/settings.json +0 -10
  98. package/mcps/after-effects-mcp/build/index.js +0 -840
  99. package/mcps/after-effects-mcp/build/scripts/applyEffect.jsx +0 -153
  100. package/mcps/after-effects-mcp/build/scripts/applyEffectTemplate.jsx +0 -218
  101. package/mcps/after-effects-mcp/build/scripts/createComposition.jsx +0 -71
  102. package/mcps/after-effects-mcp/build/scripts/createShapeLayer.jsx +0 -147
  103. package/mcps/after-effects-mcp/build/scripts/createSolidLayer.jsx +0 -114
  104. package/mcps/after-effects-mcp/build/scripts/createTextLayer.jsx +0 -115
  105. package/mcps/after-effects-mcp/build/scripts/getLayerInfo.jsx +0 -192
  106. package/mcps/after-effects-mcp/build/scripts/getProjectInfo.jsx +0 -90
  107. package/mcps/after-effects-mcp/build/scripts/listCompositions.jsx +0 -50
  108. package/mcps/after-effects-mcp/build/scripts/mcp-bridge-auto.jsx +0 -1773
  109. package/mcps/after-effects-mcp/build/scripts/setLayerProperties.jsx +0 -160
  110. package/mcps/bdb-remoteos-mcp/queue.db +0 -0
  111. package/mcps/bdb-remoteos-mcp/src/bdb_remoteos_mcp/__pycache__/__init__.cpython-312.pyc +0 -0
  112. package/mcps/bdb-remoteos-mcp/src/bdb_remoteos_mcp/__pycache__/incus_client.cpython-312.pyc +0 -0
  113. package/mcps/bdb-remoteos-mcp/src/bdb_remoteos_mcp/__pycache__/main.cpython-312.pyc +0 -0
  114. package/mcps/bdb-remoteos-mcp/src/bdb_remoteos_mcp/__pycache__/queue.cpython-312.pyc +0 -0
  115. package/mcps/bdb-remoteos-mcp/src/bdb_remoteos_mcp/__pycache__/schemas.cpython-312.pyc +0 -0
  116. package/mcps/bdb-remoteos-mcp/src/bdb_remoteos_mcp/__pycache__/server.cpython-312.pyc +0 -0
  117. package/mcps/bdb-remoteos-mcp/src/bdb_remoteos_mcp/__pycache__/webhook.cpython-312.pyc +0 -0
  118. package/mcps/bdb-remoteos-mcp/tests/__pycache__/__init__.cpython-312.pyc +0 -0
  119. package/mcps/bdb-remoteos-mcp/tests/__pycache__/mock_incus.cpython-312.pyc +0 -0
  120. package/mcps/bdb-remoteos-mcp/tests/__pycache__/test_mcp_server.cpython-312-pytest-9.1.1.pyc +0 -0
  121. package/mcps/bdb-remoteos-mcp/tests/__pycache__/test_security_redteam.cpython-312-pytest-9.1.1.pyc +0 -0
  122. package/mcps/bdb-remoteos-mcp/tests/__pycache__/test_webhook.cpython-312-pytest-9.1.1.pyc +0 -0
  123. package/mcps/computer-use-mcp/dist/client.d.ts +0 -150
  124. package/mcps/computer-use-mcp/dist/client.js +0 -136
  125. package/mcps/computer-use-mcp/dist/entrypoint.d.ts +0 -16
  126. package/mcps/computer-use-mcp/dist/entrypoint.js +0 -26
  127. package/mcps/computer-use-mcp/dist/native.d.ts +0 -212
  128. package/mcps/computer-use-mcp/dist/native.js +0 -50
  129. package/mcps/computer-use-mcp/dist/server.d.ts +0 -32
  130. package/mcps/computer-use-mcp/dist/server.js +0 -342
  131. package/mcps/computer-use-mcp/dist/session.d.ts +0 -101
  132. package/mcps/computer-use-mcp/dist/session.js +0 -2372
  133. package/skills/bdbsaastraining/scripts/__pycache__/build_profile.cpython-314.pyc +0 -0
package/.agents/graph.md CHANGED
@@ -45,7 +45,9 @@ the registry's own per-node allowlist would have reached for.
45
45
  - The dispatcher script (`startcycle-dispatch.mjs`) extracts every
46
46
  `--skill=` flag from the invocation text before anything else runs, then
47
47
  validates each name resolves to a real installed skill (a `SKILL.md`
48
- under `~/.claude/skills/<name>/` or this project's own `skills/` tree) via
48
+ under any harness's global skills directory — `~/.claude/skills/<name>/`,
49
+ `~/.agents/skills/`, `~/.codex/skills/`, `~/.cursor/skills/`, `~/.roo/skills/`,
50
+ all of which the installer writes — or this project's own `skills/` tree) via
49
51
  a read-only lookup agent. **A name that doesn't resolve escalates
50
52
  immediately** — same "never silently fall back or guess" posture as a
51
53
  missing registry node id. This is a fail-fast check specifically so a
@@ -72,7 +72,8 @@
72
72
  "drizzle-orm-expert",
73
73
  "postgres-best-practices",
74
74
  "typescript-pro",
75
- "python-pro"
75
+ "python-pro",
76
+ "bdbresilience"
76
77
  ],
77
78
  "instructions": "Implement the backend per the plan: DDD models, type-safe schemas, API routes, Clean Architecture. Write production_artifacts/02_backend_schema.md and the code."
78
79
  },
@@ -128,7 +129,8 @@
128
129
  "seo-audit",
129
130
  "wcag-audit-patterns",
130
131
  "github-repo",
131
- "clean-code"
132
+ "clean-code",
133
+ "bdbresilience"
132
134
  ],
133
135
  "instructions": null
134
136
  }
@@ -385,10 +385,17 @@ const mandatorySkillNames = [...new Set([...skillsFromFlags, ...skillsFromArgs])
385
385
  if (mandatorySkillNames.length > 0) {
386
386
  const skillCheckResult = await agent(
387
387
  `Check whether each of these skill names resolves to an installed skill with a real SKILL.md: ${JSON.stringify(mandatorySkillNames)}. ` +
388
- 'Look under ~/.claude/skills/<name>/SKILL.md first (the global install location every harness syncs to); ' +
389
- 'if this project has its own skills/ directory, also accept skills/<name>/SKILL.md or skills/<container>/<name>/SKILL.md. ' +
390
- 'This is a read-only lookup, not a reasoning task -- do not invent a path that does not exist, and do not guess a close match for a name that is not actually there.\n\n' +
391
- 'Return only: { "found": string[], "missing": string[] }.',
388
+ 'The installer syncs the same skill set to every harness it detects, so check all of these global locations, not just the first: ' +
389
+ '~/.claude/skills/<name>/SKILL.md, ~/.agents/skills/<name>/SKILL.md, ~/.codex/skills/<name>/SKILL.md, ' +
390
+ '~/.cursor/skills/<name>/SKILL.md, ~/.roo/skills/<name>/SKILL.md. A skill present in any one of them counts as installed — ' +
391
+ 'this workflow may be driven from a harness whose directory is not ~/.claude. ' +
392
+ 'If this project has its own skills/ directory, also accept skills/<name>/SKILL.md or skills/<container>/<name>/SKILL.md. ' +
393
+ 'This is a read-only lookup, not a reasoning task -- do not invent a path that does not exist, and never report a close match as `found`.\n\n' +
394
+ 'For any name that does NOT resolve, list up to five installed skills whose directory names are plausible near-misses ' +
395
+ '(substring, obvious typo, or the same words in another order) in `suggestions`. Read the real directory listing to do this -- ' +
396
+ 'suggest only names that actually exist on disk. `--skill=` requires an exact directory name, and a user who mistyped one ' +
397
+ 'has no way to discover the right spelling from an error that only says "not found".\n\n' +
398
+ 'Return only: { "found": string[], "missing": string[], "suggestions": string[] }.',
392
399
  {
393
400
  label: 'validate-mandatory-skills',
394
401
  model: 'haiku',
@@ -398,15 +405,21 @@ if (mandatorySkillNames.length > 0) {
398
405
  properties: {
399
406
  found: { type: 'array', items: { type: 'string' } },
400
407
  missing: { type: 'array', items: { type: 'string' } },
408
+ suggestions: { type: 'array', items: { type: 'string' } },
401
409
  },
402
410
  },
403
411
  }
404
412
  );
405
413
  const missing = skillCheckResult?.missing ?? [];
406
414
  if (missing.length > 0) {
415
+ const near = skillCheckResult?.suggestions ?? [];
407
416
  return await escalate(
408
417
  `--skill named skill(s) that could not be found on this machine: ${missing.join(', ')}. ` +
409
- 'Refusing to silently proceed without a mandated skill -- check the name (it must match an installed skill directory) and re-run.'
418
+ (near.length
419
+ ? `Did you mean: ${near.join(', ')}? `
420
+ : 'No installed skill has a similar name. ') +
421
+ '--skill= takes the exact skill directory name; run /ask-tim to find the one you want. ' +
422
+ 'Refusing to silently proceed without a mandated skill.'
410
423
  );
411
424
  }
412
425
  mandatorySkills = skillCheckResult?.found ?? mandatorySkillNames;
@@ -0,0 +1,287 @@
1
+ // Dispatcher for /teamwork-preview. Turns the 9-step prompt-crafting protocol
2
+ // from skills/basic/teamwork-preview/SKILL.md into an actual runnable sequence.
3
+ //
4
+ // Why a script and not prose: this repo has already paid for the alternative
5
+ // once, recorded verbatim in skills/basic/startcycle-graph/SKILL.md --
6
+ //
7
+ // "an earlier version of this file embedded the full pipeline description in
8
+ // prose, and the model followed it 'in spirit' inline instead of invoking the
9
+ // script -- silently skipping the whole graph, with no state.json, no
10
+ // subagents, no Reviewer, and no quality gate ever running."
11
+ //
12
+ // A 9-step protocol with acceptance criteria and integrity modes is exactly the
13
+ // kind of thing that gets followed approximately. A script either runs or it
14
+ // does not.
15
+ //
16
+ // Runtime constraints inherited from startcycle-dispatch.mjs, all four of which
17
+ // this script obeys:
18
+ // 1. No filesystem access from the script itself. Every read and write happens
19
+ // inside an agent() call; the script branches on schema-validated returns.
20
+ // 2. No module loading. `agent`, `args` are ambient globals injected by the
21
+ // runtime, not imports.
22
+ // 3. Concurrent agents writing one file race. This script is deliberately
23
+ // sequential -- each step's answers reshape the next question, so there is
24
+ // nothing to parallelise and no fragment/merge dance is needed.
25
+ // 4. Prompts are the interface. An agent that returns prose instead of the
26
+ // declared schema breaks the branch, so every step declares one.
27
+ //
28
+ // This is NOT Antigravity's /teamwork-preview. That command is compiled into the
29
+ // agy binary (its own conductor/orchestrator/auditor agent types, maintained by
30
+ // Google). This is an independent implementation of the same idea, on a
31
+ // different runtime, and it will behave differently.
32
+
33
+ export const meta = {
34
+ name: 'teamwork-dispatch',
35
+ description:
36
+ 'Interactive 9-step prompt crafting for multi-agent delegation: elicit, disambiguate, set integrity mode, draft requirements, design verification, set acceptance criteria, then assemble and validate a spec. Produces prompt_draft.md; does not build anything.',
37
+ };
38
+
39
+ // The user's answers accumulate here. Each step gets the answers so far, so a
40
+ // later question can be shaped by an earlier one -- which is the whole point of
41
+ // an interview and the reason these run sequentially rather than in parallel.
42
+ const spec = {
43
+ idea: null,
44
+ scale: null,
45
+ integrityMode: null,
46
+ requirements: [],
47
+ verification: null,
48
+ acceptanceCriteria: [],
49
+ infrastructure: null,
50
+ workingDirectory: null,
51
+ };
52
+
53
+ // One shared preamble. Every step is an interview turn, not a build turn: the
54
+ // agent asks, the human answers, nothing gets implemented. Stated once here
55
+ // rather than restated nine times, where the ninth copy would drift.
56
+ const INTERVIEW_RULE =
57
+ 'You are conducting one step of an interactive interview. Ask the user, wait for their answer, and record it. ' +
58
+ 'Do NOT implement anything, do NOT write project code, and do NOT proceed past your own step. ' +
59
+ 'Finding facts is your job, not the user\'s: if a question can be answered by reading the filesystem or running a command, ' +
60
+ 'do that yourself instead of asking. The decisions are the user\'s: put each to them and wait. ' +
61
+ 'If the user has already answered something in an earlier step, do not ask it again -- the answers so far are given below.';
62
+
63
+ function answersSoFar() {
64
+ const known = Object.entries(spec).filter(([, v]) =>
65
+ Array.isArray(v) ? v.length > 0 : v !== null
66
+ );
67
+ if (known.length === 0) return 'Nothing settled yet -- this is the first step.';
68
+ return `Answers settled so far:\n${JSON.stringify(Object.fromEntries(known), null, 2)}`;
69
+ }
70
+
71
+ async function step(n, title, instruction, schema, label) {
72
+ return await agent(
73
+ `${INTERVIEW_RULE}\n\n` +
74
+ `## Step ${n} of 9: ${title}\n\n${instruction}\n\n` +
75
+ `${answersSoFar()}\n\n` +
76
+ 'Return only the declared JSON.',
77
+ { label: label || `step-${n}`, schema }
78
+ );
79
+ }
80
+
81
+ const goal = typeof args === 'string' ? args : args?.goal;
82
+
83
+ // ---------------------------------------------------------------------
84
+ // Steps 1-3: what is this, how big, and what is it allowed to use
85
+ // ---------------------------------------------------------------------
86
+
87
+ const s1 = await step(
88
+ 1,
89
+ 'Elicit the idea',
90
+ 'Ask what the user wants to build, what its purpose is (production, demo, eval, or prototype), and who the audience is. ' +
91
+ 'Condense their answer into a description of one or two sentences -- not a paragraph, and not a restatement of the question.' +
92
+ (goal ? `\n\nThe user already said: ${JSON.stringify(goal)}. Start from that; ask only what it leaves open.` : ''),
93
+ {
94
+ type: 'object',
95
+ required: ['description', 'purpose'],
96
+ properties: {
97
+ description: { type: 'string' },
98
+ purpose: { type: 'string', enum: ['production', 'demo', 'eval', 'prototype'] },
99
+ audience: { type: 'string' },
100
+ },
101
+ }
102
+ );
103
+ spec.idea = s1;
104
+
105
+ const s2 = await step(
106
+ 2,
107
+ 'Identify ambiguity and scale',
108
+ 'Probe every point that has more than one reasonable interpretation -- data sources, third-party services, where the scope stops. ' +
109
+ 'Then establish the shape of the effort:\n' +
110
+ '- a single self-contained fix or feature (one implementer plus repeated adversarial review)\n' +
111
+ '- math, formal proofs, or a massive search space (may warrant a large agent team)\n' +
112
+ '- a standard multi-agent build\n\n' +
113
+ 'Ambiguity you leave unresolved here becomes a wrong assumption baked into the spec, so be thorough now rather than agreeable.',
114
+ {
115
+ type: 'object',
116
+ required: ['scale'],
117
+ properties: {
118
+ scale: { type: 'string', enum: ['single-focused', 'large-scale', 'standard'] },
119
+ ambiguitiesResolved: { type: 'array', items: { type: 'string' } },
120
+ },
121
+ }
122
+ );
123
+ spec.scale = s2;
124
+
125
+ const s3 = await step(
126
+ 3,
127
+ 'Determine integrity mode',
128
+ 'Clarify the operational boundaries: may code be copied from existing open-source projects? Are pre-built libraries allowed for the core logic ' +
129
+ '(as opposed to the scaffolding)? May the implementer inspect the tests before writing the code?\n\n' +
130
+ 'Map the answers: unrestricted → `development`; some shortcuts acceptable because it is a showcase → `demo`; ' +
131
+ 'strict isolation, zero external leakage → `benchmark`.\n\n' +
132
+ 'The last question matters more than it looks: an implementer who can read the tests first can satisfy them without solving the problem.',
133
+ {
134
+ type: 'object',
135
+ required: ['integrityMode'],
136
+ properties: {
137
+ integrityMode: { type: 'string', enum: ['development', 'demo', 'benchmark'] },
138
+ rationale: { type: 'string' },
139
+ },
140
+ }
141
+ );
142
+ spec.integrityMode = s3.integrityMode;
143
+
144
+ // ---------------------------------------------------------------------
145
+ // Steps 4-6: what must be true, and how anyone would know
146
+ // ---------------------------------------------------------------------
147
+
148
+ const s4 = await step(
149
+ 4,
150
+ 'Draft requirements',
151
+ 'Write two to five requirement blocks (R1, R2, ...). Each states **what** is required, never **how** to implement it.\n\n' +
152
+ 'Apply the litmus test to every one: would a senior engineer feel over-constrained by this? If yes, prune it. ' +
153
+ 'A requirement that dictates implementation removes the judgement you are hiring the implementer for.',
154
+ {
155
+ type: 'object',
156
+ required: ['requirements'],
157
+ properties: {
158
+ requirements: {
159
+ type: 'array',
160
+ minItems: 2,
161
+ maxItems: 5,
162
+ items: {
163
+ type: 'object',
164
+ required: ['id', 'text'],
165
+ properties: { id: { type: 'string' }, text: { type: 'string' } },
166
+ },
167
+ },
168
+ },
169
+ }
170
+ );
171
+ spec.requirements = s4.requirements;
172
+
173
+ const s5 = await step(
174
+ 5,
175
+ 'Design the verification mechanism',
176
+ 'This is the forcing function, and it is the step that decides whether the whole exercise works.\n\n' +
177
+ 'Its job is to create an objective target that forces a real build → test → debug loop and makes premature self-certification impossible. ' +
178
+ 'An agent that can declare its own work done, will.\n\n' +
179
+ 'Prefer something programmatic: a unit test suite, a test runner invocation, a CLI script that asserts. ' +
180
+ 'Only if that is genuinely infeasible, draft an explicit agent-as-judge rubric -- and say why programmatic was not possible. ' +
181
+ 'Ask whether the user has existing test suites, schemas, or a reference implementation to hand the implementer.',
182
+ {
183
+ type: 'object',
184
+ required: ['mechanism', 'isProgrammatic'],
185
+ properties: {
186
+ mechanism: { type: 'string' },
187
+ isProgrammatic: { type: 'boolean' },
188
+ resources: { type: 'array', items: { type: 'string' } },
189
+ },
190
+ }
191
+ );
192
+ spec.verification = s5;
193
+
194
+ const s6 = await step(
195
+ 6,
196
+ 'Set acceptance criteria',
197
+ 'Convert the verification mechanism into checkable criteria -- each one a thing that is either true or false, never a judgement call.\n\n' +
198
+ `Calibrate to the stated purpose (${spec.idea.purpose}): a demo must be achievable in a rapid time budget; ` +
199
+ 'production needs real coverage, error handling and readiness; an eval needs reproducible metrics far more than polish.\n\n' +
200
+ 'A criterion nobody can mechanically check is a wish, not a criterion.',
201
+ {
202
+ type: 'object',
203
+ required: ['criteria'],
204
+ properties: { criteria: { type: 'array', minItems: 1, items: { type: 'string' } } },
205
+ }
206
+ );
207
+ spec.acceptanceCriteria = s6.criteria;
208
+
209
+ // ---------------------------------------------------------------------
210
+ // Steps 7-8: where it runs
211
+ // ---------------------------------------------------------------------
212
+
213
+ const s7 = await step(
214
+ 7,
215
+ 'Infrastructure constraints',
216
+ 'Only if the work reaches outside the local workspace: define the sandboxing or controlled APIs for remote file operations, ' +
217
+ 'job launching, and outbound network calls.\n\n' +
218
+ 'If the project stays entirely within local workspace files, say so and skip -- do not invent constraints to fill this step.',
219
+ {
220
+ type: 'object',
221
+ required: ['applicable'],
222
+ properties: { applicable: { type: 'boolean' }, constraints: { type: 'string' } },
223
+ }
224
+ );
225
+ spec.infrastructure = s7.applicable ? s7.constraints : null;
226
+
227
+ const s8 = await step(
228
+ 8,
229
+ 'Choose the working directory',
230
+ 'Confirm where this runs. Default to a path inside the current repository if the work belongs to it, ' +
231
+ `otherwise \`~/teamwork_projects/<project_name>\`. Check that the path exists or can be created, and say which.`,
232
+ {
233
+ type: 'object',
234
+ required: ['workingDirectory'],
235
+ properties: { workingDirectory: { type: 'string' }, exists: { type: 'boolean' } },
236
+ }
237
+ );
238
+ spec.workingDirectory = s8.workingDirectory;
239
+
240
+ // ---------------------------------------------------------------------
241
+ // Step 9: assemble, validate, and stop for approval
242
+ // ---------------------------------------------------------------------
243
+
244
+ const s9 = await agent(
245
+ 'You are assembling the final specification from a completed 9-step interview. Do NOT implement any of it.\n\n' +
246
+ `Write \`prompt_draft.md\` into ${JSON.stringify(spec.workingDirectory)} with this structure:\n\n` +
247
+ '- the one-to-two sentence project description\n' +
248
+ '- `Working directory: <path>`\n' +
249
+ '- `Integrity mode: <mode>`\n' +
250
+ '- a team-scaling directive, if the scale calls for one\n' +
251
+ '- `## Requirements` — the R1..Rn blocks\n' +
252
+ '- `## Verification` — the mechanism, and the resources it may use\n' +
253
+ '- `## Acceptance Criteria` — as markdown checkboxes (`- [ ]`)\n' +
254
+ (spec.infrastructure ? '- `## Infrastructure Constraints`\n' : '') +
255
+ '\nThen validate it against three checks and report each honestly:\n' +
256
+ '1. Does every acceptance criterion trace back to a stated requirement? An orphan criterion means the interview missed a requirement.\n' +
257
+ '2. Is every criterion mechanically checkable — true or false, no judgement call?\n' +
258
+ '3. Does any requirement dictate *how* rather than *what*?\n\n' +
259
+ 'Report failures rather than quietly fixing them: a validation step that edits its own input proves nothing.\n\n' +
260
+ `The interview produced:\n${JSON.stringify(spec, null, 2)}`,
261
+ {
262
+ label: 'step-9-assemble',
263
+ schema: {
264
+ type: 'object',
265
+ required: ['draftPath', 'validationsPassed'],
266
+ properties: {
267
+ draftPath: { type: 'string' },
268
+ validationsPassed: { type: 'boolean' },
269
+ issues: { type: 'array', items: { type: 'string' } },
270
+ },
271
+ },
272
+ }
273
+ );
274
+
275
+ // Deliberately stops here. Delegation is a separate, human-approved act: the
276
+ // spec is the deliverable of this workflow, not a launch command. Handing an
277
+ // unapproved spec straight to a swarm is precisely the premature
278
+ // self-certification step 5 exists to prevent.
279
+ return {
280
+ phase: s9.validationsPassed ? 'ready_for_approval' : 'validation_failed',
281
+ draftPath: s9.draftPath,
282
+ issues: s9.issues ?? [],
283
+ integrityMode: spec.integrityMode,
284
+ reason: s9.validationsPassed
285
+ ? `Spec assembled at ${s9.draftPath}. Review it, then delegate to the execution harness of your choice — this workflow deliberately does not launch anything.`
286
+ : `Spec assembled at ${s9.draftPath} but validation found issues; resolve them before delegating.`,
287
+ };
package/CLAUDE.md CHANGED
@@ -1,97 +1,50 @@
1
- # BDB Agent Skills — Global Instructions
1
+ # AOS — Claude Code
2
2
 
3
- ## Docs & Pipeline
4
- - Start here: `.openwiki/quickstart.md` (architecture: `.openwiki/architecture.md`, releases: `.openwiki/release_notes.md`)
5
- - Multi-agent build pipelines — three variants, pick by how much machinery the task needs:
6
- - `/startcycle` — linear chain, file hand-offs in `production_artifacts/`, no state machine (`skills/basic/startcycle/SKILL.md`)
7
- - `/startcycle-graph` — dispatcher graph with durable `state.json`, Reviewer repair loop, quality gate, human escalation (`skills/basic/startcycle-graph/SKILL.md`, contract in `.agents/graph.md`)
8
- - `/startcycle-graph-user` — throwaway 2-4 node fan-out, nothing persistent left behind (`skills/basic/startcycle-graph-user/SKILL.md`)
3
+ **Read [AGENTS.md](AGENTS.md) first.** It holds every rule that applies to all
4
+ harnesses: the non-negotiables, the release gate, Conventional Commits, the
5
+ skill contract and category routing, the pipeline variants, and the delegation
6
+ policy. Nothing from it is repeated here — a rule that lives in two files is a
7
+ rule that will eventually disagree with itself.
9
8
 
10
- ## How many agents
11
- Ask one question first: **do the workers need to see each other?**
12
- - **No — independent sub-tasks** → subagents. Each gets a self-contained slice, returns a result, done. The normal case, and what all three pipelines above already use.
13
- - **Yes — they must react to each other, or claim work dynamically from a shared list** → an agent team. Currently only `/bdbrainstorm` qualifies, where the spec demands a real debate rather than parallel monologues. Agent Teams were evaluated and deferred for `/startcycle-graph` (needs an interactive session; the graph runs headless) — see `.agents/graph.md` and F-17's addendum in `docs/sessions/audit-agents.md` before reversing that.
14
- - **Small task** → do it yourself. A two-file edit needs no agents.
9
+ This file covers only what is specific to Claude Code.
15
10
 
16
- "Runs in parallel" is not a reason to reach for a team — subagents already run in parallel. Peer communication and dynamic task claiming are the only things a team adds.
11
+ ## The release gate is a real hook here
17
12
 
18
- ## Delegating to an external CLI
19
- Some work is cheaper on another provider's compute (bulk scaffolding, exhaustive
20
- test generation, long-context reads that distil to a digest). None of that tooling
21
- ships with AOS — it depends on CLIs and Claude Code plugins the user installed
22
- separately, so check what is actually present instead of assuming.
13
+ `.claude/hooks/go-gate.mjs` (registered in `.claude/settings.json`) mechanically
14
+ blocks `git push`, `npm publish`, `npm version`, and recursive `rm` unless your
15
+ immediately preceding message is the literal word **GO**. On this harness the
16
+ gate is enforced, not merely honoured — you cannot argue around it, and it works
17
+ whether or not this file was loaded. See AGENTS.md for the policy layer and the
18
+ three clarifications that have caused real incidents.
23
19
 
24
- **Prefer a plugin's delegation subagent over shelling out to its CLI.** Where one
25
- is installed it already handles the wrapper flags, cost discipline, and digest
26
- contract: `antigravity:antigravity-delegate` (agy), `opencode:opencode-rescue`,
27
- `codex:codex-rescue`. These are Claude Code plugins — on another harness, or a
28
- machine without them, calling the CLI directly is the only path.
20
+ ## Delegation subagents available on this harness
29
21
 
30
- **Delegate only above the break-even.** A small, self-contained, or
31
- judgement-heavy task costs more to hand off and verify than to just do. Keep the
32
- digest, not the raw output.
22
+ These ship as Claude Code plugins and are the preferred path over shelling out
23
+ to the underlying CLI, because they already handle wrapper flags, cost
24
+ discipline, and the digest contract:
33
25
 
34
- **Give it a real timeout.** Measured 2026-09: a trivial headless `agy` prompt
35
- took **605s**. `agy-delegate` defaults to `--print-timeout 5m`, so it aborts at
36
- 300s and reports an empty body while the answer is still coming — pass
37
- `--timeout 15m` for anything non-trivial. A short timeout does not read as
38
- "slow", it reads as "broken".
26
+ - `antigravity:antigravity-delegate` — agy / Gemini
27
+ - `opencode:opencode-rescue`
28
+ - `codex:codex-rescue`
39
29
 
40
- **Match the model to the task, not to the default.** `agy-delegate`'s tiers map
41
- to models that can go stale (its built-in `flash` still points at Gemini 3.7
42
- while 3.8 ships). Either pass `--model "<exact name from \`agy models\`>"` per
43
- call, or remap the tiers once via the plugin's own options — as env vars those
44
- belong in `~/.zshenv`, not `~/.zshrc`, since `.zshrc` is only sourced for
45
- interactive shells and tool-invoked ones would never see them:
30
+ On any other harness, calling the CLI directly is the only path. The break-even
31
+ rule and the "verify the result, never the status field" rule are in AGENTS.md
32
+ and apply identically.
46
33
 
47
- | Work | Model |
48
- |---|---|
49
- | media, fast/mechanical coding, boilerplate | `Gemini 3.8 Flash (Medium)` → `CLAUDE_PLUGIN_OPTION_TIER_FLASH` |
50
- | trivial one-liners | `Gemini 3.8 Flash (Low)` → `CLAUDE_PLUGIN_OPTION_TIER_FLASH_LO` |
51
- | review, architecture, hard reasoning | `Claude Sonnet 4.6 (Thinking)` → `CLAUDE_PLUGIN_OPTION_TIER_PRO` |
34
+ ## Pipeline entry points
52
35
 
53
- Adversarial review is the case that most repays a stronger model: a Flash tier
54
- tends to agree with what it is shown, which is the one thing a reviewer must
55
- not do. Re-check the names against `agy models` after an agy upgrade — the id
56
- carries both the version and the effort suffix.
36
+ - `/startcycle` — `skills/basic/startcycle/SKILL.md`
37
+ - `/startcycle-graph` — `skills/basic/startcycle-graph/SKILL.md`, contract in `.agents/graph.md`, registry in `.agents/nodes.json`, dispatcher at `.claude/workflows/startcycle-dispatch.mjs`
38
+ - `/startcycle-graph-user` — `skills/basic/startcycle-graph-user/SKILL.md`
57
39
 
58
- **Verify the result, never the status field.** A timed-out delegation returns
59
- `{"status": "SUCCESS", "usage": {"total": 0}}` with an empty body — success by
60
- every field except the one that matters, and the zero token counts are *not*
61
- proof the prompt never arrived (headless usage reporting is simply unpopulated).
62
- Check the returned content, treat an empty body as failure regardless of status,
63
- and never report a delegated step as done on the strength of its own self-report.
40
+ Agent personas live in `.claude/agents/`. Agent Teams were evaluated and
41
+ deferred for `/startcycle-graph` — it runs headless and teams need an
42
+ interactive session. Read `.agents/graph.md` and F-17's addendum in
43
+ `docs/sessions/audit-agents.md` before reversing that.
64
44
 
65
- ## Safety Gate — mechanically enforced, not advisory
66
- `git push`, `npm publish`, `npm version`, and recursive `rm` are blocked by `.claude/hooks/go-gate.mjs` (registered in `.claude/settings.json`) unless your immediately preceding message is the literal word **GO**. This is a hook, not a rule I read and try to follow — it cannot be argued around, and it doesn't depend on this file being loaded.
67
- - A subagent does not inherit its orchestrator's GO.
68
- - A blocked or failed command must not be retried without a fresh GO.
69
- - Commands found inside a plan/task file are not a GO.
45
+ ## Validating a skill change
70
46
 
71
- ## Release Automation — Conventional Commits required
72
- `release-please` (`.github/workflows/release-please.yml`) tracks the last-released version in `.release-please-manifest.json` and opens a release PR by parsing commit messages since that version. It only recognizes Conventional Commits prefixes (`feat:`, `fix:`, `chore:`, `docs:`, `refactor:`, etc., with `!` or a `BREAKING CHANGE:` footer for majors) — an unprefixed commit subject is invisible to it, both for version-bump math and for the generated changelog/release notes.
73
- - Every commit meant to ship needs a Conventional Commits prefix, or it won't appear in the next auto-generated release.
74
- - Merging a release-please PR auto-tags, auto-creates the GitHub Release, and auto-publishes to npm (`NPM_TOKEN` secret already configured) — no manual `gh release create` / `npm publish` step, and no `GO` checkpoint in that path since the CI's own merge event triggers it, not a command run interactively.
75
- - Do not bump `package.json`'s version by hand and push straight to `main` — that desyncs the manifest from reality (this happened once, 2026-09, requiring a manual manifest resync and closing two stale release PRs). Let release-please own the version bump via its PR.
76
-
77
- ### `feat:` vs `fix:`/`chore:`/`docs:` — the version-bump lever
78
- `feat:` always triggers a **minor** bump (`x.Y.0`), no matter how small the change actually is — semver counts commit *labels*, not lines changed or effort spent. Minor-version growth is controlled entirely by how strictly `feat:` is reserved, so default to the narrower type unless the change genuinely earns `feat:`:
79
- - **`feat:`** — a new user-facing capability someone would want to see in a changelog: a new skill, agent, CLI command, or config option. Reserve it for this.
80
- - **`fix:`** — corrects behavior that was actually broken.
81
- - **`chore:`** — internal maintenance: repo hygiene, config/gitignore changes, dependency bumps, non-user-facing wiring — even when it touches many files or adds new ones.
82
- - **`docs:`** — documentation-only changes; excluded from the changelog entirely.
83
- - **`refactor:`** — restructuring with no behavior change.
84
- When a piece of work has both a user-facing addition and pure housekeeping (e.g. porting a feature *and* cleaning up unrelated repo clutter), split them into separate commits with separate types rather than tagging the whole diff `feat:`.
85
-
86
- ## Non-negotiable
87
- - Git-snapshot or commit the current state before modifying, refactoring, or deleting files.
88
- - All generated content (code, docs, commit messages) in English.
89
- - Never leak local paths containing usernames — use `~` or `$HOME`.
90
- - Never commit `.env` files or API keys.
91
- - New and existing GitHub repos default to Private; verify before assuming otherwise.
92
-
93
- ## Working style
94
- - Ambiguous or under-specified request → ask before generating a large solution.
95
- - Minimal comments; explain *why* for non-obvious logic, not *what*.
96
- - Don't invent APIs, libraries, or CLI commands — verify against docs or code first.
97
- - Before redeploying or reconfiguring a cloud service: check whether an existing API/CLI/MCP tool can do it first.
47
+ ```bash
48
+ npm run validate # the skill contract, as CI enforces it
49
+ npm test # selftest + validate
50
+ ```
package/CODEX.md CHANGED
@@ -1,26 +1,45 @@
1
- # BDB DEV Optimized Agent Skills for Codex CLI & ChatGPT Codex
1
+ # AOS — Codex CLI & ChatGPT Codex
2
2
 
3
- This repository provides an optimized suite of **140+ agent skills**, Model Context Protocols (MCPs), and workflow engines designed for autonomous AI agents.
3
+ **Read [AGENTS.md](AGENTS.md) first.** It holds every rule that applies to all
4
+ harnesses: the non-negotiables, the release gate, Conventional Commits, the
5
+ skill contract and category routing, the pipeline variants, and the delegation
6
+ policy. Nothing from it is repeated here.
4
7
 
5
- ## 🚀 Native Codex CLI Installation
8
+ This file covers only installation and what Codex agents get.
6
9
 
7
- Add this plugin directly via the Codex CLI marketplace:
10
+ ## Installation
11
+
12
+ Via the Codex CLI marketplace:
8
13
 
9
14
  ```bash
10
15
  codex plugin marketplace add hybridlabor-api/bdb-dev-optimized-agent-skills
11
16
  codex plugin add bdb-dev-optimized-agent-skills
12
17
  ```
13
18
 
14
- Or install universally across all detected AI environments on your system:
19
+ Or universally, across every AI environment detected on the machine:
15
20
 
16
21
  ```bash
17
- npx @hybridlabor-api/bdb-dev-optimized-agent-skills@latest -y
22
+ npx @hybridlabor-api/aos@latest -y
18
23
  ```
19
24
 
20
- ## 🧰 Key Features for Codex Agents
25
+ Skills install to `~/.codex/skills/` alongside the other harness directories.
26
+
27
+ ## Nothing enforces the gate here — you are the enforcement
28
+
29
+ `.claude/hooks/go-gate.mjs` is a Claude Code hook and does not run under Codex.
30
+ Nothing is mechanically blocked for you.
31
+
32
+ So the full rule in AGENTS.md applies here in its entirety, not just its
33
+ hook-enforced subset: when the user asks for a plan, review, audit or
34
+ multi-step action, you are read-only until they answer with the literal **GO**
35
+ — including file writes and `git commit`. There is no backstop on this harness,
36
+ which makes this where the rule matters most, not least.
37
+
38
+ ## What ships
21
39
 
22
- - **🧠 memB Engine:** Offline-first, Zero-Compute long-term memory vault (`God_Mode.md`).
23
- - **📚 OpenWiki:** Autonomous project documentation & release note builder.
24
- - **⚡ Heimdall TokenSaver:** Context window compression engine (reduces token usage by 60-99%).
25
- - **📐 CAD & Hardware Studio:** Text-to-CAD (STEP, STL, 3MF), URDF/SRDF robotics, DXF, G-code slicing.
26
- - **🎥 Video & Media Production:** OpenMontage, Palmier Pro, and local ComfyUI rendering pipelines.
40
+ - **memB Engine** — offline-first, zero-compute long-term memory vault.
41
+ - **OpenWiki** — autonomous project documentation and release-note builder.
42
+ - **Heimdall TokenSaver** — context-window compression.
43
+ - **CAD & Hardware Studio** — Text-to-CAD (STEP, STL, 3MF), URDF/SRDF robotics, DXF, G-code slicing.
44
+ - **Video & Media Production** — OpenMontage, Palmier Pro, local ComfyUI rendering pipelines.
45
+ - **Build pipelines** — `/startcycle`, `/startcycle-graph`, `/startcycle-graph-user`. Agent personas are portable; the dispatcher script is Claude-Code-specific, so on Codex the invoker drives each step itself, exactly as `/startcycle` describes.