@hybridlabor-api/aos 4.4.1 → 4.4.2-beta.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 (305) hide show
  1. package/.agents/skills/firecrawl/SKILL.md +149 -0
  2. package/.agents/skills/firecrawl/rules/install.md +82 -0
  3. package/.agents/skills/firecrawl/rules/security.md +26 -0
  4. package/.agents/skills/firecrawl-agent/SKILL.md +58 -0
  5. package/.agents/skills/firecrawl-build/SKILL.md +39 -0
  6. package/.agents/skills/firecrawl-build-interact/SKILL.md +68 -0
  7. package/.agents/skills/firecrawl-build-onboarding/SKILL.md +103 -0
  8. package/.agents/skills/firecrawl-build-onboarding/references/auth-flow.md +39 -0
  9. package/.agents/skills/firecrawl-build-onboarding/references/project-setup.md +20 -0
  10. package/.agents/skills/firecrawl-build-onboarding/references/sdk-installation.md +17 -0
  11. package/.agents/skills/firecrawl-build-scrape/SKILL.md +69 -0
  12. package/.agents/skills/firecrawl-build-search/SKILL.md +69 -0
  13. package/.agents/skills/firecrawl-crawl/SKILL.md +59 -0
  14. package/.agents/skills/firecrawl-download/SKILL.md +70 -0
  15. package/.agents/skills/firecrawl-interact/SKILL.md +84 -0
  16. package/.agents/skills/firecrawl-map/SKILL.md +51 -0
  17. package/.agents/skills/firecrawl-scrape/SKILL.md +69 -0
  18. package/.agents/skills/firecrawl-search/SKILL.md +60 -0
  19. package/CLAUDE.md +573 -0
  20. package/README.de.md +0 -8
  21. package/README.md +0 -8
  22. package/README.pt.md +0 -8
  23. package/assets/brand/ao-ant-mark.svg +91 -0
  24. package/assets/brand/bdb-core-mark.svg +34 -0
  25. package/assets/brand/heimdall-guardian-mark.svg +16 -0
  26. package/assets/brand/memb-crystal-mark.svg +18 -0
  27. package/bin/aos-config.mjs +89 -0
  28. package/bin/aos-dashboard.mjs +608 -0
  29. package/bin/aos-uninstall.mjs +227 -0
  30. package/docs/sessions/audit-2026-09-14-silent-failures.md +114 -0
  31. package/docs/skills_table.md +0 -3
  32. package/installer.js +387 -237
  33. package/mcps/RhinoMCP/cc-plugin/.claude/settings.json +10 -0
  34. package/mcps/after-effects-mcp/build/index.js +840 -0
  35. package/mcps/after-effects-mcp/build/scripts/applyEffect.jsx +153 -0
  36. package/mcps/after-effects-mcp/build/scripts/applyEffectTemplate.jsx +218 -0
  37. package/mcps/after-effects-mcp/build/scripts/createComposition.jsx +71 -0
  38. package/mcps/after-effects-mcp/build/scripts/createShapeLayer.jsx +147 -0
  39. package/mcps/after-effects-mcp/build/scripts/createSolidLayer.jsx +114 -0
  40. package/mcps/after-effects-mcp/build/scripts/createTextLayer.jsx +115 -0
  41. package/mcps/after-effects-mcp/build/scripts/getLayerInfo.jsx +192 -0
  42. package/mcps/after-effects-mcp/build/scripts/getProjectInfo.jsx +90 -0
  43. package/mcps/after-effects-mcp/build/scripts/listCompositions.jsx +50 -0
  44. package/mcps/after-effects-mcp/build/scripts/mcp-bridge-auto.jsx +1773 -0
  45. package/mcps/after-effects-mcp/build/scripts/setLayerProperties.jsx +160 -0
  46. package/mcps/computer-use-mcp/dist/client.d.ts +150 -0
  47. package/mcps/computer-use-mcp/dist/client.js +136 -0
  48. package/mcps/computer-use-mcp/dist/entrypoint.d.ts +16 -0
  49. package/mcps/computer-use-mcp/dist/entrypoint.js +26 -0
  50. package/mcps/computer-use-mcp/dist/native.d.ts +212 -0
  51. package/mcps/computer-use-mcp/dist/native.js +50 -0
  52. package/mcps/computer-use-mcp/dist/server.d.ts +32 -0
  53. package/mcps/computer-use-mcp/dist/server.js +342 -0
  54. package/mcps/computer-use-mcp/dist/session.d.ts +101 -0
  55. package/mcps/computer-use-mcp/dist/session.js +2372 -0
  56. package/package.json +13 -4
  57. package/skills/global_config/aos-project-init/SKILL.md +97 -130
  58. package/skills/global_config/aos-project-init/assets/openwikiignore.template +62 -0
  59. package/skills/global_config/aos-project-init/scripts/aos-project-doctor.mjs +38 -1
  60. package/skills/global_config/aos-setup/SKILL.md +98 -8
  61. package/skills/global_config/aos-setup/scripts/aos-doctor.mjs +21 -2
  62. package/skills/global_config/ask-tim/SKILL.md +2 -7
  63. package/skills/global_config/openwiki-skill/scripts/openwiki_daemon.py +65 -12
  64. package/bin/setup-saas.mjs +0 -792
  65. package/mcps/blender-mcp-server/.dockerignore +0 -19
  66. package/mcps/blender-mcp-server/.github/workflows/ci.yml +0 -67
  67. package/mcps/blender-mcp-server/.github/workflows/publish-pypi.yml +0 -54
  68. package/mcps/blender-mcp-server/CHANGELOG.md +0 -64
  69. package/mcps/blender-mcp-server/CONTRIBUTING.md +0 -107
  70. package/mcps/blender-mcp-server/Dockerfile +0 -19
  71. package/mcps/blender-mcp-server/LICENSE +0 -21
  72. package/mcps/blender-mcp-server/README.md +0 -409
  73. package/mcps/blender-mcp-server/addon/__init__.py +0 -1440
  74. package/mcps/blender-mcp-server/addon/models.py +0 -223
  75. package/mcps/blender-mcp-server/pyproject.toml +0 -120
  76. package/mcps/blender-mcp-server/scripts/blender_bridge_request.py +0 -71
  77. package/mcps/blender-mcp-server/scripts/blender_create_test_cube.py +0 -49
  78. package/mcps/blender-mcp-server/scripts/blender_scene_info.py +0 -38
  79. package/mcps/blender-mcp-server/scripts/build_addon_zip.sh +0 -29
  80. package/mcps/blender-mcp-server/scripts/demos/README.md +0 -186
  81. package/mcps/blender-mcp-server/scripts/demos/dam_break_scene.py +0 -276
  82. package/mcps/blender-mcp-server/scripts/demos/open_dam_break_gui.py +0 -33
  83. package/mcps/blender-mcp-server/scripts/demos/pipe_movement_study.py +0 -518
  84. package/mcps/blender-mcp-server/scripts/demos/pipe_pressure_failure_scene.py +0 -806
  85. package/mcps/blender-mcp-server/scripts/demos/procedural_dam_break_scene.py +0 -600
  86. package/mcps/blender-mcp-server/scripts/demos/run_dam_break.py +0 -510
  87. package/mcps/blender-mcp-server/scripts/launch_blender_gui.py +0 -41
  88. package/mcps/blender-mcp-server/scripts/library/README.md +0 -64
  89. package/mcps/blender-mcp-server/scripts/library/apply_transforms.py +0 -46
  90. package/mcps/blender-mcp-server/scripts/library/camera.py +0 -51
  91. package/mcps/blender-mcp-server/scripts/library/collections.py +0 -65
  92. package/mcps/blender-mcp-server/scripts/library/create_mesh.py +0 -41
  93. package/mcps/blender-mcp-server/scripts/library/effector.py +0 -48
  94. package/mcps/blender-mcp-server/scripts/library/fluid_domain.py +0 -80
  95. package/mcps/blender-mcp-server/scripts/library/fluid_inflow.py +0 -98
  96. package/mcps/blender-mcp-server/scripts/library/frame_range.py +0 -35
  97. package/mcps/blender-mcp-server/scripts/library/keyframes.py +0 -59
  98. package/mcps/blender-mcp-server/scripts/library/rigid_body.py +0 -52
  99. package/mcps/blender-mcp-server/scripts/library/save_blend.py +0 -40
  100. package/mcps/blender-mcp-server/scripts/server_start.sh +0 -26
  101. package/mcps/blender-mcp-server/src/blender_mcp_server/__init__.py +0 -3
  102. package/mcps/blender-mcp-server/src/blender_mcp_server/headless.py +0 -330
  103. package/mcps/blender-mcp-server/src/blender_mcp_server/server.py +0 -606
  104. package/mcps/davinci-mcp-professional/.bandit +0 -35
  105. package/mcps/davinci-mcp-professional/.claude/commands/security-review.md +0 -191
  106. package/mcps/davinci-mcp-professional/.claude/settings.json +0 -1
  107. package/mcps/davinci-mcp-professional/.editorconfig +0 -27
  108. package/mcps/davinci-mcp-professional/.gitattributes +0 -207
  109. package/mcps/davinci-mcp-professional/.github/CODEOWNERS +0 -2
  110. package/mcps/davinci-mcp-professional/.github/ISSUE_TEMPLATE/bug_report.md +0 -33
  111. package/mcps/davinci-mcp-professional/.github/ISSUE_TEMPLATE/feature_request.md +0 -19
  112. package/mcps/davinci-mcp-professional/.github/PULL_REQUEST_TEMPLATE.md +0 -20
  113. package/mcps/davinci-mcp-professional/.github/SECURITY.md +0 -97
  114. package/mcps/davinci-mcp-professional/.github/dependabot.yml +0 -27
  115. package/mcps/davinci-mcp-professional/.github/workflows/ci.yml +0 -39
  116. package/mcps/davinci-mcp-professional/ATTRIBUTION.md +0 -4
  117. package/mcps/davinci-mcp-professional/AUTHORS.md +0 -9
  118. package/mcps/davinci-mcp-professional/BUGS.md +0 -55
  119. package/mcps/davinci-mcp-professional/CLAUDE.md +0 -229
  120. package/mcps/davinci-mcp-professional/CONTRIBUTING.md +0 -51
  121. package/mcps/davinci-mcp-professional/COPYING.md +0 -228
  122. package/mcps/davinci-mcp-professional/Doxyfile +0 -379
  123. package/mcps/davinci-mcp-professional/README.md +0 -143
  124. package/mcps/davinci-mcp-professional/SECURITY.md +0 -40
  125. package/mcps/davinci-mcp-professional/USING.md +0 -301
  126. package/mcps/davinci-mcp-professional/VERSION.md +0 -13
  127. package/mcps/davinci-mcp-professional/build.py +0 -169
  128. package/mcps/davinci-mcp-professional/claude_desktop_config_template.json +0 -11
  129. package/mcps/davinci-mcp-professional/hooks/ci-check.sh +0 -29
  130. package/mcps/davinci-mcp-professional/hooks/pre-push +0 -46
  131. package/mcps/davinci-mcp-professional/main.py +0 -40
  132. package/mcps/davinci-mcp-professional/mcp_server.py +0 -30
  133. package/mcps/davinci-mcp-professional/pyproject.toml +0 -115
  134. package/mcps/davinci-mcp-professional/security_audit.py +0 -379
  135. package/mcps/davinci-mcp-professional/src/davinci_mcp/__init__.py +0 -19
  136. package/mcps/davinci-mcp-professional/src/davinci_mcp/cli.py +0 -138
  137. package/mcps/davinci-mcp-professional/src/davinci_mcp/resolve_client.py +0 -342
  138. package/mcps/davinci-mcp-professional/src/davinci_mcp/resources/__init__.py +0 -60
  139. package/mcps/davinci-mcp-professional/src/davinci_mcp/server.py +0 -185
  140. package/mcps/davinci-mcp-professional/src/davinci_mcp/tools/__init__.py +0 -146
  141. package/mcps/davinci-mcp-professional/src/davinci_mcp/types.py +0 -125
  142. package/mcps/davinci-mcp-professional/src/davinci_mcp/utils/__init__.py +0 -19
  143. package/mcps/davinci-mcp-professional/src/davinci_mcp/utils/platform.py +0 -239
  144. package/mcps/davinci-mcp-professional/test.py +0 -186
  145. package/mcps/davinci-mcp-professional/uv.lock +0 -2073
  146. package/mcps/davinci-resolve-mcp/.claude/skills/media-analysis.md +0 -44
  147. package/mcps/davinci-resolve-mcp/.clinerules +0 -17
  148. package/mcps/davinci-resolve-mcp/.cursorrules +0 -17
  149. package/mcps/davinci-resolve-mcp/.github/copilot-instructions.md +0 -17
  150. package/mcps/davinci-resolve-mcp/.github/workflows/npm-publish.yml +0 -109
  151. package/mcps/davinci-resolve-mcp/.windsurfrules +0 -17
  152. package/mcps/davinci-resolve-mcp/AGENTS.md +0 -114
  153. package/mcps/davinci-resolve-mcp/CHANGELOG.md +0 -2648
  154. package/mcps/davinci-resolve-mcp/CLAUDE.md +0 -15
  155. package/mcps/davinci-resolve-mcp/LICENSE +0 -21
  156. package/mcps/davinci-resolve-mcp/README.md +0 -173
  157. package/mcps/davinci-resolve-mcp/SECURITY.md +0 -53
  158. package/mcps/davinci-resolve-mcp/bin/davinci-resolve-mcp.mjs +0 -450
  159. package/mcps/davinci-resolve-mcp/examples/README.md +0 -53
  160. package/mcps/davinci-resolve-mcp/examples/markers/README.md +0 -81
  161. package/mcps/davinci-resolve-mcp/examples/media/README.md +0 -94
  162. package/mcps/davinci-resolve-mcp/examples/timeline/README.md +0 -98
  163. package/mcps/davinci-resolve-mcp/install.py +0 -1687
  164. package/mcps/davinci-resolve-mcp/package.json +0 -52
  165. package/mcps/davinci-resolve-mcp/release-notes/v2.22.0.md +0 -51
  166. package/mcps/davinci-resolve-mcp/release-notes/v2.23.0.md +0 -51
  167. package/mcps/davinci-resolve-mcp/release-notes/v2.23.1.md +0 -35
  168. package/mcps/davinci-resolve-mcp/release-notes/v2.24.1.md +0 -32
  169. package/mcps/davinci-resolve-mcp/scripts/audit_api_parity.py +0 -275
  170. package/mcps/davinci-resolve-mcp/scripts/audit_readwrite_symmetry.py +0 -80
  171. package/mcps/davinci-resolve-mcp/scripts/doctor.py +0 -227
  172. package/mcps/davinci-resolve-mcp/scripts/gen_api_limitations.py +0 -144
  173. package/mcps/davinci-resolve-mcp/scripts/live_media_analysis_polish_probe.py +0 -65
  174. package/mcps/davinci-resolve-mcp/scripts/measure_bridge_cost.py +0 -65
  175. package/mcps/davinci-resolve-mcp/scripts/regen_panel_screenshots.py +0 -76
  176. package/mcps/davinci-resolve-mcp/src/__init__.py +0 -3
  177. package/mcps/davinci-resolve-mcp/src/analysis_dashboard.py +0 -15505
  178. package/mcps/davinci-resolve-mcp/src/batch_cli.py +0 -540
  179. package/mcps/davinci-resolve-mcp/src/control_panel.py +0 -13
  180. package/mcps/davinci-resolve-mcp/src/granular/__init__.py +0 -17
  181. package/mcps/davinci-resolve-mcp/src/granular/common.py +0 -741
  182. package/mcps/davinci-resolve-mcp/src/granular/folder.py +0 -420
  183. package/mcps/davinci-resolve-mcp/src/granular/gallery.py +0 -306
  184. package/mcps/davinci-resolve-mcp/src/granular/graph.py +0 -309
  185. package/mcps/davinci-resolve-mcp/src/granular/media_pool.py +0 -679
  186. package/mcps/davinci-resolve-mcp/src/granular/media_pool_item.py +0 -1020
  187. package/mcps/davinci-resolve-mcp/src/granular/media_storage.py +0 -179
  188. package/mcps/davinci-resolve-mcp/src/granular/project.py +0 -1654
  189. package/mcps/davinci-resolve-mcp/src/granular/resolve_control.py +0 -538
  190. package/mcps/davinci-resolve-mcp/src/granular/timeline.py +0 -1075
  191. package/mcps/davinci-resolve-mcp/src/granular/timeline_item.py +0 -2251
  192. package/mcps/davinci-resolve-mcp/src/resolve_mcp_server.py +0 -43
  193. package/mcps/davinci-resolve-mcp/src/server.py +0 -24116
  194. package/mcps/davinci-resolve-mcp/src/utils/__init__.py +0 -3
  195. package/mcps/davinci-resolve-mcp/src/utils/actor_identity.py +0 -46
  196. package/mcps/davinci-resolve-mcp/src/utils/analysis_caps.py +0 -678
  197. package/mcps/davinci-resolve-mcp/src/utils/analysis_memory.py +0 -755
  198. package/mcps/davinci-resolve-mcp/src/utils/analysis_runs.py +0 -307
  199. package/mcps/davinci-resolve-mcp/src/utils/analysis_store.py +0 -945
  200. package/mcps/davinci-resolve-mcp/src/utils/api_truth.py +0 -525
  201. package/mcps/davinci-resolve-mcp/src/utils/app_control.py +0 -319
  202. package/mcps/davinci-resolve-mcp/src/utils/audio_fairlight_live_probe.py +0 -263
  203. package/mcps/davinci-resolve-mcp/src/utils/brain_edits.py +0 -387
  204. package/mcps/davinci-resolve-mcp/src/utils/bridge_metrics.py +0 -76
  205. package/mcps/davinci-resolve-mcp/src/utils/cdl.py +0 -20
  206. package/mcps/davinci-resolve-mcp/src/utils/clip_query.py +0 -85
  207. package/mcps/davinci-resolve-mcp/src/utils/cloud_operations.py +0 -192
  208. package/mcps/davinci-resolve-mcp/src/utils/color_grade_live_probe.py +0 -444
  209. package/mcps/davinci-resolve-mcp/src/utils/contracts.py +0 -102
  210. package/mcps/davinci-resolve-mcp/src/utils/cut_ir.py +0 -115
  211. package/mcps/davinci-resolve-mcp/src/utils/dctl_templates.py +0 -368
  212. package/mcps/davinci-resolve-mcp/src/utils/deep_vision.py +0 -643
  213. package/mcps/davinci-resolve-mcp/src/utils/destructive_hook.py +0 -606
  214. package/mcps/davinci-resolve-mcp/src/utils/edit_engine.py +0 -737
  215. package/mcps/davinci-resolve-mcp/src/utils/embeddings.py +0 -922
  216. package/mcps/davinci-resolve-mcp/src/utils/entities.py +0 -579
  217. package/mcps/davinci-resolve-mcp/src/utils/extension_authoring_live_probe.py +0 -292
  218. package/mcps/davinci-resolve-mcp/src/utils/failure_tracker.py +0 -119
  219. package/mcps/davinci-resolve-mcp/src/utils/fuse_templates.py +0 -1968
  220. package/mcps/davinci-resolve-mcp/src/utils/fusion_composition_live_probe.py +0 -284
  221. package/mcps/davinci-resolve-mcp/src/utils/fusion_group_settings.py +0 -334
  222. package/mcps/davinci-resolve-mcp/src/utils/layout_presets.py +0 -333
  223. package/mcps/davinci-resolve-mcp/src/utils/mcp_stdio.py +0 -32
  224. package/mcps/davinci-resolve-mcp/src/utils/mcp_transport.py +0 -128
  225. package/mcps/davinci-resolve-mcp/src/utils/media_analysis.py +0 -7690
  226. package/mcps/davinci-resolve-mcp/src/utils/media_analysis_jobs.py +0 -805
  227. package/mcps/davinci-resolve-mcp/src/utils/media_pool_changes.py +0 -121
  228. package/mcps/davinci-resolve-mcp/src/utils/media_pool_ingest_live_probe.py +0 -592
  229. package/mcps/davinci-resolve-mcp/src/utils/multicam.py +0 -393
  230. package/mcps/davinci-resolve-mcp/src/utils/object_inspection.py +0 -301
  231. package/mcps/davinci-resolve-mcp/src/utils/page_lock.py +0 -75
  232. package/mcps/davinci-resolve-mcp/src/utils/platform.py +0 -157
  233. package/mcps/davinci-resolve-mcp/src/utils/proc.py +0 -26
  234. package/mcps/davinci-resolve-mcp/src/utils/project_cleanup.py +0 -73
  235. package/mcps/davinci-resolve-mcp/src/utils/project_lifecycle_live_probe.py +0 -376
  236. package/mcps/davinci-resolve-mcp/src/utils/project_lint.py +0 -131
  237. package/mcps/davinci-resolve-mcp/src/utils/project_properties.py +0 -601
  238. package/mcps/davinci-resolve-mcp/src/utils/project_spec.py +0 -459
  239. package/mcps/davinci-resolve-mcp/src/utils/readback.py +0 -91
  240. package/mcps/davinci-resolve-mcp/src/utils/render_deliver_live_probe.py +0 -384
  241. package/mcps/davinci-resolve-mcp/src/utils/resolve_ai_governance.py +0 -214
  242. package/mcps/davinci-resolve-mcp/src/utils/resolve_ai_ledger.py +0 -244
  243. package/mcps/davinci-resolve-mcp/src/utils/resolve_busy.py +0 -171
  244. package/mcps/davinci-resolve-mcp/src/utils/resolve_connection.py +0 -77
  245. package/mcps/davinci-resolve-mcp/src/utils/review_annotation_live_probe.py +0 -352
  246. package/mcps/davinci-resolve-mcp/src/utils/script_templates.py +0 -1193
  247. package/mcps/davinci-resolve-mcp/src/utils/shot_relationships.py +0 -544
  248. package/mcps/davinci-resolve-mcp/src/utils/structural_diff.py +0 -175
  249. package/mcps/davinci-resolve-mcp/src/utils/sync_detection.py +0 -889
  250. package/mcps/davinci-resolve-mcp/src/utils/timeline_brain_db.py +0 -826
  251. package/mcps/davinci-resolve-mcp/src/utils/timeline_conform_live_probe.py +0 -280
  252. package/mcps/davinci-resolve-mcp/src/utils/timeline_kernel_live_probe.py +0 -1092
  253. package/mcps/davinci-resolve-mcp/src/utils/timeline_kernel_probe.py +0 -185
  254. package/mcps/davinci-resolve-mcp/src/utils/timeline_title_text.py +0 -87
  255. package/mcps/davinci-resolve-mcp/src/utils/timeline_versioning.py +0 -730
  256. package/mcps/davinci-resolve-mcp/src/utils/update_check.py +0 -685
  257. package/mcps/vectorworks-mcp/.dockerignore +0 -8
  258. package/mcps/vectorworks-mcp/Dockerfile +0 -28
  259. package/mcps/vectorworks-mcp/README.md +0 -156
  260. package/mcps/vectorworks-mcp/app/__init__.py +0 -2
  261. package/mcps/vectorworks-mcp/app/api.py +0 -52
  262. package/mcps/vectorworks-mcp/app/chunking.py +0 -56
  263. package/mcps/vectorworks-mcp/app/config.py +0 -29
  264. package/mcps/vectorworks-mcp/app/embeddings.py +0 -28
  265. package/mcps/vectorworks-mcp/app/indexer.py +0 -106
  266. package/mcps/vectorworks-mcp/app/main.py +0 -33
  267. package/mcps/vectorworks-mcp/app/mcp_server.py +0 -71
  268. package/mcps/vectorworks-mcp/app/search.py +0 -54
  269. package/mcps/vectorworks-mcp/app/utils.py +0 -14
  270. package/mcps/vectorworks-mcp/data/.gitkeep +0 -1
  271. package/mcps/vectorworks-mcp/data/vw-app-help/VW2022_PluginScript.htm +0 -95
  272. package/mcps/vectorworks-mcp/data/vw-app-help/VW2022_ScriptEditor.htm +0 -266
  273. package/mcps/vectorworks-mcp/data/vw-app-help/VW2022_Scripting.htm +0 -106
  274. package/mcps/vectorworks-mcp/data/vw-app-help/VW2023_CreatingScriptedPlugins.htm +0 -327
  275. package/mcps/vectorworks-mcp/data/vw-app-help/VW2024_RunningScripts.htm +0 -116
  276. package/mcps/vectorworks-mcp/data/vw-devwiki/VS_Function_Reference_category.html +0 -2129
  277. package/mcps/vectorworks-mcp/data/vw-jp-ref/ObjectsSymbols.html +0 -2035
  278. package/mcps/vectorworks-mcp/data/vw-jp-ref/ScriptFunctionReference.html +0 -29
  279. package/mcps/vectorworks-mcp/design.md +0 -57
  280. package/mcps/vectorworks-mcp/docker-compose.yml +0 -18
  281. package/mcps/vectorworks-mcp/index/.gitkeep +0 -1
  282. package/mcps/vectorworks-mcp/index/meta.jsonl +0 -3956
  283. package/mcps/vectorworks-mcp/index/vw.faiss +0 -0
  284. package/mcps/vectorworks-mcp/requirements.txt +0 -10
  285. package/mcps/vectorworks-mcp/scripts/fetch_docs_minimal.sh +0 -84
  286. package/mcps/vectorworks-mcp/scripts/fetch_github_vectorworks.sh +0 -85
  287. package/mcps/vectorworks-mcp/templates/index.html +0 -40
  288. package/scripts/ecosystem-health-audit.js +0 -257
  289. package/skills/bdb-dev-os-skill/SKILL.md +0 -49
  290. package/skills/bdb-dev-os-skill/package.json +0 -11
  291. package/skills/bdbsaastraining/SKILL.md +0 -316
  292. package/skills/bdbsaastraining/references/exam-pool.md +0 -313
  293. package/skills/bdbsaastraining/references/interaction-modes.md +0 -94
  294. package/skills/bdbsaastraining/references/track-a-ai-agent.md +0 -111
  295. package/skills/bdbsaastraining/references/track-b-wordpress.md +0 -111
  296. package/skills/bdbsaastraining/references/track-c-mailserver.md +0 -107
  297. package/skills/bdbsaastraining/references/track-d-debian.md +0 -109
  298. package/skills/bdbsaastraining/references/track-e-custom.md +0 -83
  299. package/skills/bdbsaastraining/scripts/build_profile.py +0 -529
  300. package/skills/bdbsaastraining/scripts/generate_certificate.py +0 -161
  301. package/skills/bdbsaastraining/scripts/preflight_check.sh +0 -150
  302. package/skills/bdbsaastraining/templates/certificate_template.html +0 -508
  303. package/skills/global_config/bdb-ecosystem-health/SKILL.md +0 -68
  304. package/skills/global_config/bdbsaas-ops/SKILL.md +0 -16
  305. package/skills/global_config/bdbsaashost/SKILL.md +0 -125
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hybridlabor-api/aos",
3
- "version": "4.4.1",
3
+ "version": "4.4.2-beta.0",
4
4
  "description": "AOS — A Curated AI AGENT OS. Optimized agent skills and add-ons like memB, OpenWiki, Heimdall Token Saver, and Godmode architectures.",
5
5
  "main": "installer.js",
6
6
  "bin": {
@@ -8,8 +8,10 @@
8
8
  "bdb-dev-optimized-agent-skills": "installer.js",
9
9
  "bdb-agent-skills-pro": "installer.js",
10
10
  "bdb-agent-skills": "installer.js",
11
- "setup-saas": "bin/setup-saas.mjs",
12
- "aos-plan-canvas": "skills/global_config/plan-canvas/scripts/plan-canvas.js"
11
+ "aos-plan-canvas": "skills/global_config/plan-canvas/scripts/plan-canvas.js",
12
+ "aos-dashboard": "bin/aos-dashboard.mjs",
13
+ "aos-config": "bin/aos-config.mjs",
14
+ "aos-uninstall": "bin/aos-uninstall.mjs"
13
15
  },
14
16
  "scripts": {
15
17
  "validate": "node scripts/validate-skills.mjs",
@@ -59,7 +61,14 @@
59
61
  "mcps/touchdesigner-mcp/tests/**",
60
62
  "!mcps/tdmcp/training/**/data/**",
61
63
  "!assets/**/*.mp4",
62
- "!assets/**/*.mov"
64
+ "!assets/**/*.mov",
65
+ "!mcps/**/queue.db*",
66
+ "!**/__pycache__/**",
67
+ "!**/*.pyc",
68
+ "!mcps/vectorworks-mcp/**",
69
+ "!mcps/davinci-resolve-mcp/**",
70
+ "!mcps/davinci-mcp-professional/**",
71
+ "!mcps/blender-mcp-server/**"
63
72
  ],
64
73
  "keywords": [
65
74
  "codex-plugin",
@@ -1,10 +1,10 @@
1
1
  ---
2
2
  name: aos-project-init
3
3
  description: >-
4
- Wire one project folder into AOS — git and private remote, AGENTS.md with its
5
- harness symlinks, the dispatcher harness, an OpenWiki wiki, memB project
6
- memory, and a Synapse map. Use when starting a new project, or when an
7
- existing repo has drifted and its agents behave like they know nothing about it.
4
+ Interview a project folder into AOS and write the result: a stable slug and
5
+ domain in .aos/project.json, an OpenWiki wiki that is actually watched and
6
+ does not index junk, memB memory bound to the slug, a Synapse map, AGENTS.md
7
+ with its harness symlinks, and optionally CI and issue triage.
8
8
  category: bdb-core
9
9
  risk: low
10
10
  source: bdb
@@ -13,182 +13,149 @@ date_added: "2026-09-13"
13
13
 
14
14
  # AOS Project Init — Per Workspace
15
15
 
16
- A machine-level AOS install gives an agent the skills. It gives it nothing
17
- about *this* project: no repo rules, no memory bound to it, no wiki, no
18
- dispatcher contract. That per-project layer is what this skill installs.
16
+ `/aos-setup` prepares the machine. This prepares one folder in it — and unlike
17
+ the machine skill, **this one writes**. It asks what it cannot know, shows what
18
+ it intends to write, and writes it once you agree.
19
19
 
20
- Machine-level setup is `/aos-setup` and comes first — this skill assumes memB,
21
- OpenWiki and Synapse already exist on the machine.
22
-
23
- **This is prompt-driven, not a script that runs blind.** Explore, report,
24
- confirm, then write.
20
+ Everything it decides lands in `.aos/project.json`, so a second run knows what
21
+ was already settled and changes only what you ask it to.
25
22
 
26
23
  ---
27
24
 
28
- ## 1. Measure
25
+ ## 1. Preconditions
29
26
 
30
27
  ```bash
31
- node ~/.claude/skills/aos-project-init/scripts/aos-project-doctor.mjs [dir]
28
+ aos-config show # is this machine's vocabulary present?
32
29
  ```
33
30
 
34
- `[dir]` defaults to the current directory. `--json` for machine-readable
35
- output. Up to 16 checks across five areas — a folder that is not a git repo
36
- yet reports that one row and skips the rest of the `git` block, and the
37
- visibility row appears only for a GitHub remote:
38
-
39
- | Area | What is verified |
40
- |---|---|
41
- | `git` | repo, `origin`, **private** visibility, `.gitignore` covers `.env` |
42
- | `docs` | `AGENTS.md`, and `CLAUDE.md` / `GEMINI.md` / `CODEX.md` as symlinks to it |
43
- | `harness` | `.agents/graph.md`, `.agents/nodes.json`, `.claude/{workflows,hooks,agents,settings.json}` |
44
- | `openwiki` | `.openwiki/` holds pages |
45
- | `memB` | memories bound to `project_id = <folder name>` |
31
+ If it reports *unvollständig*, stop and run `/aos-setup` first. The domain list
32
+ is per-machine and nothing ships with one — guessing here would invent a
33
+ vocabulary the user never chose.
46
34
 
47
- Report the failing rows before touching anything. On an existing repo, some
48
- failures are deliberate — a public repo that is meant to be public, a scratch
49
- folder with no remote. Ask rather than "fixing" those.
50
-
51
- ---
52
-
53
- ## 2. Git and the remote
35
+ Then measure this folder:
54
36
 
55
37
  ```bash
56
- git init && git add -A && git commit -m "chore: initial commit"
57
- gh repo create <name> --private --source=. --remote=origin
38
+ node ~/.claude/skills/aos-project-init/scripts/aos-project-doctor.mjs
58
39
  ```
59
40
 
60
- Repositories are **private by default**. Verify rather than assume — the
61
- doctor reads actual visibility through `gh`, not intent. Live secrets never
62
- enter the repo: keep `.env` files outside it and commit a placeholder.
41
+ Report the failing rows before touching anything. On an existing repo some
42
+ failures are deliberate: a repo public on purpose, a scratch folder with no
43
+ remote, a project nobody wants the wiki daemon to visit. Ask rather than
44
+ "fixing" those.
63
45
 
64
46
  ---
65
47
 
66
- ## 3. AGENTS.md and its symlinks
48
+ ## 2. The interview
67
49
 
68
- One file holds the repo's agent rules; every harness reads the same bytes:
50
+ One question at a time, each with a proposal the user can accept in a word.
51
+ Skip anything already settled in `.aos/project.json` unless asked to change it.
69
52
 
70
- ```bash
71
- cp ~/.claude/skills/aos-project-init/assets/AGENTS.template.md AGENTS.md
72
- ln -sf AGENTS.md CLAUDE.md
73
- ln -sf AGENTS.md GEMINI.md
74
- ln -sf AGENTS.md CODEX.md
75
- ```
53
+ **Name and slug.** Propose the folder name for both. The slug becomes the memB
54
+ `project_id`, and it is written down precisely so it survives a rename: a
55
+ binding derived from the basename orphans every memory the day the folder
56
+ moves, and two folders sharing a basename share one memory scope.
76
57
 
77
- Then fill the template in — see [AGENTS.template.md](./assets/AGENTS.template.md).
78
- Do not leave the placeholders: an `AGENTS.md` full of `<PROJECT NAME>` is worse
79
- than none, because agents will trust it. Interview the user for the stack, the
80
- commands, and above all the **domain notes** — the constraints that are not
81
- derivable from the code.
58
+ **Domain.** Offer the list from `aos-config`, preselected by what the path
59
+ implies — the first segment under the workspace root. If the project sits
60
+ outside that root, ask instead of guessing.
82
61
 
83
- If a real `CLAUDE.md` already exists with content of its own, merge it into
84
- `AGENTS.md` first and only then replace it with the symlink. Never silently
85
- overwrite it.
62
+ **Wiki.** Three separate questions, because they are three separate things:
63
+ initialise a wiki here at all · **watch it**, so the daemon refreshes it every
64
+ 2h · write `.openwikiignore`.
86
65
 
87
- ---
66
+ Watching is not free. Every watched project with changes costs an LLM call per
67
+ cycle, and a free-tier key hits quota on a handful. Recommend watching repos
68
+ under active work and leaving archives out.
88
69
 
89
- ## 4. The dispatcher harness
70
+ **memB.** Bind the slug; offer a one-time ingest of the folder. Ingest reads a
71
+ lot — offer it, never assume it.
90
72
 
91
- Only for projects that will actually run `/startcycle-graph` — it is not
92
- required for a small repo.
73
+ **Synapse.** A spatial map earns its keep on a codebase too large to hold in
74
+ your head. Ask; do not default it on.
93
75
 
94
- ```bash
95
- npx -y @hybridlabor-api/aos --project-harness
96
- ```
76
+ **AGENTS.md.** If missing, offer the template. If a real `CLAUDE.md` already
77
+ holds content, merge it into `AGENTS.md` first and only then replace it with a
78
+ symlink. Never silently overwrite it.
97
79
 
98
- Copies into the project, writing nothing to `$HOME`:
80
+ **With a GitHub remote, two more.** Skip both entirely without a remote — a
81
+ local-only repo has nowhere to put them, and a skipped question is clearer than
82
+ one answered "no".
99
83
 
100
- - `.agents/` — the graph contract, node registry, state schema
101
- - `.claude/workflows/` — the dispatcher
102
- - `.claude/hooks/` — `go-gate.mjs`, `graph-gate.mjs` and `memb-inject.mjs`
103
- (the memory hook stays `$HOME`-anchored; only the gates become project-local)
104
- - `.claude/agents/` — the agent definitions the dispatcher's prompts reference
105
- - `.claude/settings.json` — wired to the project-local hooks
84
+ - **CI:** none · a gate (lint, typecheck, test — matched to the project type) ·
85
+ gate plus `release-please`.
86
+ - **Triage:** none · GitHub labels (`needs-triage`, `needs-info`,
87
+ `ready-for-agent`, `ready-for-human`, `wontfix`) · local markdown in
88
+ `.scratch/`.
106
89
 
107
- Take all of it or none: a bare `.agents/` copy leaves the graph contract
108
- half-installed, and the dispatcher's pointers resolve to nothing.
90
+ `release-please` computes the version from Conventional Commits and nothing
91
+ else: an unprefixed subject is invisible to it, and one `feat:` forces a minor
92
+ bump however small the change. Offering it imposes that rule on the project, so
93
+ write the rule into `AGENTS.md` in the same breath — and ask what the version
94
+ policy is. Some repos here move in patch steps only, where `feat:` needs
95
+ explicit permission.
109
96
 
110
97
  ---
111
98
 
112
- ## 5. memB — bind memory to this project
113
-
114
- memB scopes memories by `project_id`, and `project_id` is **the folder's
115
- basename**. Two consequences worth stating out loud:
116
-
117
- - Renaming the folder orphans every memory bound to the old name.
118
- - Two folders with the same basename share one memory scope.
119
-
120
- Seed the project by ingesting it:
121
-
122
- ```bash
123
- MCP=~/.gemini/config/mcps/memb-mcp # Gemini / Antigravity install
124
- "$MCP/.venv/bin/python" "$MCP/memb_ingest.py" <project dir>
99
+ ## 3. Write
100
+
101
+ Show every intended write as one list, then write on agreement.
102
+
103
+ ```json
104
+ {
105
+ "name": "<Project Name>",
106
+ "slug": "<stable-slug>",
107
+ "domain": "<from aos-config>",
108
+ "openwiki": { "enabled": true, "watch": true },
109
+ "memb": { "projectId": "<stable-slug>" },
110
+ "synapse": false,
111
+ "ci": "gate",
112
+ "triage": "github"
113
+ }
125
114
  ```
126
115
 
127
- The MCP payload does not always land there — the installer picks the directory
128
- per harness, so on a Claude-only machine it sits under
129
- `~/Library/Application Support/Claude/mcps/` (`%APPDATA%\Claude\mcps\` on
130
- Windows), and under `.cursor` / `.codex` / `.windsurf` for those. Take the path
131
- `/aos-setup`'s doctor prints in its `memb-mcp server` row rather than assuming
132
- this one.
133
-
134
- Add `--transcripts` only when past conversation logs should be pulled in too —
135
- that is off by default for a reason.
136
-
137
- Afterwards, write the decisions that matter through the memB MCP with an
138
- explicit `project_id`: `add_memory({ text: "…", category: "project_node",
139
- project_id: "<folder name>" })`. Never write credentials or high-entropy
140
- strings into memory.
141
-
142
- Re-run the doctor to confirm the count went above zero. An ingest script that
143
- exits `0` is not evidence that anything was stored.
144
-
145
- ---
146
-
147
- ## 6. OpenWiki — the project wiki
116
+ Then, only for what the interview enabled:
148
117
 
149
118
  ```bash
150
- openwiki --init # first time, inside the project
151
- openwiki --update # after significant changes
119
+ cp ~/.claude/skills/aos-project-init/assets/openwikiignore.template .openwikiignore
120
+ openwiki --init # needs `openwiki auth <provider>` from /aos-setup
152
121
  ```
153
122
 
154
- Pages land in `.openwiki/`. The machine-level daemon refreshes wikis every two
155
- hours once the repo has one; without `--init` this repo is simply skipped.
156
-
157
- Requires provider credentials from `/aos-setup` (`openwiki auth <provider>`).
158
-
159
- ---
123
+ When the user chose to watch it, add the absolute path to `projects` in
124
+ `~/.openwiki/projects.json` — that file is the daemon's watch list. Merge into
125
+ it; never rewrite it.
160
126
 
161
- ## 7. Synapse — spatial map
127
+ For memB, write decisions through the MCP with the slug as `project_id` and the
128
+ domain as `category`:
162
129
 
163
- ```bash
164
- synapse map .
130
+ ```
131
+ add_memory({ text: "…", category: "<domain>", project_id: "<slug>" })
165
132
  ```
166
133
 
167
- Optional, and useful mainly on a codebase large enough that structure is hard
168
- to hold in your head. Needs the daemon on `:7781` (`/aos-setup` covers it).
134
+ Never write credentials or high-entropy strings into memory.
169
135
 
170
136
  ---
171
137
 
172
- ## 8. Confirm
138
+ ## 4. Confirm
173
139
 
174
140
  ```bash
175
141
  node ~/.claude/skills/aos-project-init/scripts/aos-project-doctor.mjs
176
- # 16/16 checks pass. Project is fully wired.
177
142
  ```
178
143
 
179
- Report the doctor's own count, and name explicitly anything left failing on
180
- purpose. Then commit the new files — `chore:` for the harness wiring, `docs:`
181
- for `AGENTS.md`.
144
+ Report the doctor's own count, and name anything left failing on purpose. Then
145
+ commit: `chore:` for wiring, `docs:` for `AGENTS.md`. Check the project's
146
+ version policy before reaching for `feat:`.
182
147
 
183
148
  ---
184
149
 
185
150
  ## Red flags
186
151
 
187
- - Committing an `AGENTS.md` still holding template placeholders.
188
- - Replacing an existing `CLAUDE.md` with a symlink without merging its content.
189
- - Reporting the memB ingest as done from the script's exit code instead of the
190
- memory count.
191
- - Installing the dispatcher harness into a repo that will never run the graph —
192
- five directories of machinery nobody uses.
193
- - Renaming a project folder later without moving its memories to the new
194
- `project_id`.
152
+ - Inventing a domain because `aos-config` has none. Send the user to
153
+ `/aos-setup` instead.
154
+ - Deriving the memB binding from the folder name once a slug exists.
155
+ - Treating "has a wiki" as "is watched". They are different, and that gap is
156
+ why wikis sit stale for months.
157
+ - Turning watching on for every repo. Quota is real.
158
+ - Committing an `AGENTS.md` still full of template placeholders.
159
+ - Asking about CI or GitHub triage in a repo with no remote.
160
+ - Offering `release-please` without writing the Conventional Commits rule into
161
+ `AGENTS.md` — it is a trap otherwise.
@@ -0,0 +1,62 @@
1
+ # .openwikiignore — what the wiki agent must not read or write.
2
+ #
3
+ # OpenWiki ships with NO defaults: with no such file it loads zero rules and
4
+ # indexes everything, including dependency trees and its own output. Measured
5
+ # on one small repo: 33 of 145 graph nodes were junk — .venv internals and
6
+ # .openwiki's own pages fed back into itself.
7
+ #
8
+ # gitignore syntax: `!` re-includes, a leading `/` anchors to the repo root,
9
+ # a trailing `/` matches directories, and matching is case-insensitive.
10
+
11
+ # Its own output — otherwise the wiki documents itself, recursively.
12
+ .openwiki/
13
+
14
+ # Dependencies. Someone else's code is not this project's documentation.
15
+ node_modules/
16
+ .venv/
17
+ venv/
18
+ vendor/
19
+ Pods/
20
+ .bundle/
21
+
22
+ # Build output and caches — generated, never a source of truth.
23
+ dist/
24
+ build/
25
+ out/
26
+ target/
27
+ coverage/
28
+ .next/
29
+ .turbo/
30
+ .cache/
31
+ __pycache__/
32
+ *.pyc
33
+
34
+ # Lockfiles: thousands of lines, no meaning for a reader.
35
+ *.lock
36
+ package-lock.json
37
+ pnpm-lock.yaml
38
+ uv.lock
39
+
40
+ # Secrets. Nothing here may reach a model or a generated page.
41
+ .env
42
+ .env.*
43
+ *.pem
44
+ *.key
45
+ id_rsa*
46
+ secrets/
47
+
48
+ # Version control internals.
49
+ .git/
50
+
51
+ # Binaries and media: no text to summarise, and expensive to read.
52
+ *.png
53
+ *.jpg
54
+ *.jpeg
55
+ *.gif
56
+ *.webp
57
+ *.svg
58
+ *.pdf
59
+ *.zip
60
+ *.tgz
61
+ *.mp4
62
+ *.mov
@@ -11,9 +11,18 @@ import path from 'node:path';
11
11
  const args = process.argv.slice(2).filter((a) => a !== '--json');
12
12
  const JSON_OUT = process.argv.includes('--json');
13
13
  const ROOT = path.resolve(args[0] || process.cwd());
14
- const PROJECT = path.basename(ROOT);
15
14
  const HOME = os.homedir();
16
15
 
16
+ // .aos/project.json is what /aos-project-init writes. Its slug is the stable
17
+ // memB project_id: deriving it from the folder name means a rename orphans
18
+ // every memory bound to the old one, and two folders with the same basename
19
+ // share a memory scope.
20
+ const aosConfig = (() => {
21
+ try { return JSON.parse(readFileSync(path.join(ROOT, '.aos', 'project.json'), 'utf8')); }
22
+ catch { return null; }
23
+ })();
24
+ const PROJECT = aosConfig?.slug || path.basename(ROOT);
25
+
17
26
  const results = [];
18
27
  const add = (area, name, ok, detail, fix) => results.push({ area, name, ok, detail, fix });
19
28
  const p = (...rel) => path.join(ROOT, ...rel);
@@ -44,6 +53,19 @@ function checkGit() {
44
53
  'Add `.env` and `*.env` to .gitignore; keep live secrets outside the repo.');
45
54
  }
46
55
 
56
+ // ---------------------------------------------------------------- aos config
57
+ function checkAosConfig() {
58
+ add('aos', '.aos/project.json', !!aosConfig,
59
+ aosConfig
60
+ ? `slug "${aosConfig.slug}"${aosConfig.domain ? ` · domain ${aosConfig.domain}` : ''}${aosConfig.watch ? ' · überwacht' : ''}`
61
+ : 'missing — memB binding falls back to the folder name, which breaks on rename',
62
+ 'Run /aos-project-init in this folder.');
63
+
64
+ if (aosConfig && aosConfig.slug !== path.basename(ROOT)) {
65
+ add('aos', 'slug vs folder', true, `slug "${aosConfig.slug}" ≠ folder "${path.basename(ROOT)}" — intentional, the slug wins`, '');
66
+ }
67
+ }
68
+
47
69
  // ---------------------------------------------------------------- agent docs
48
70
  function checkAgentDocs() {
49
71
  const agents = p('AGENTS.md');
@@ -84,6 +106,20 @@ function checkWiki() {
84
106
  const pages = existsSync(dir) ? readdirSync(dir).filter((f) => f.endsWith('.md')) : [];
85
107
  add('openwiki', 'wiki initialised', pages.length > 0, pages.length ? `${pages.length} pages: ${pages.slice(0, 4).join(', ')}${pages.length > 4 ? ' …' : ''}` : 'no .openwiki pages',
86
108
  'openwiki --init (run inside the project; needs `openwiki auth <provider>` first)');
109
+
110
+ // Without this file OpenWiki loads zero rules and indexes .venv, node_modules
111
+ // and its own output — measured at 23% junk on one small repo.
112
+ add('openwiki', '.openwikiignore', existsSync(p('.openwikiignore')),
113
+ existsSync(p('.openwikiignore')) ? 'exclusions in place' : 'missing — the wiki will index dependencies and its own pages',
114
+ 'cp ~/.claude/skills/aos-project-init/assets/openwikiignore.template .openwikiignore');
115
+
116
+ // A wiki that exists is not a wiki that is refreshed.
117
+ let watched = false;
118
+ try { watched = (JSON.parse(readFileSync(path.join(HOME, '.openwiki', 'projects.json'), 'utf8')).projects || []).includes(ROOT); }
119
+ catch { /* the daemon has not written it yet */ }
120
+ add('openwiki', 'watched by the daemon', watched || pages.length === 0,
121
+ watched ? 'in projects.json' : pages.length ? 'has a wiki but the daemon never refreshes it' : 'no wiki, nothing to watch',
122
+ 'Add this path to ~/.openwiki/projects.json, or let /aos-project-init do it.');
87
123
  }
88
124
 
89
125
  // ---------------------------------------------------------------- memB
@@ -129,6 +165,7 @@ function report() {
129
165
  }
130
166
 
131
167
  checkGit();
168
+ checkAosConfig();
132
169
  checkAgentDocs();
133
170
  checkHarness();
134
171
  checkWiki();
@@ -21,8 +21,30 @@ documentation and visualization layers silently do nothing.
21
21
 
22
22
  This skill closes that gap: **measure first, then fix only what is broken.**
23
23
 
24
- For per-project wiring — a new project folder, its `AGENTS.md`, its memB
25
- project binding, its wiki — use `/aos-project-init` after this one.
24
+ This is also where a **new agent harness** gets wired: adding Codex or
25
+ Antigravity to a machine that already runs Claude Code is this skill's job, not
26
+ a reinstall.
27
+
28
+ For per-project wiring — a folder's slug, its wiki, its memB binding — use
29
+ `/aos-project-init` after this one.
30
+
31
+ ### What each harness can actually do
32
+
33
+ Portability is not uniform, and pretending otherwise is how people end up
34
+ believing memory works everywhere:
35
+
36
+ | | Skills | MCP | Hooks |
37
+ |---|---|---|---|
38
+ | Claude Code | `~/.claude/skills` | `~/.claude.json` | **yes** |
39
+ | Antigravity | `~/.gemini/config/skills` | `mcp_config.json` | no |
40
+ | Codex | `~/.codex/skills` | `config.toml` | no |
41
+ | OpenCode | — | `opencode.jsonc` | no |
42
+ | Cursor / Roo | `bdb-skills` | `mcp.json` | no |
43
+
44
+ Only Claude Code has hooks, so only there can memB inject per prompt. Elsewhere
45
+ the same context arrives through the rule files that harness loads at start —
46
+ see section 5 — which means it is as fresh as the last write, not as fresh as
47
+ the prompt. Say so plainly rather than letting someone assume parity.
26
48
 
27
49
  ---
28
50
 
@@ -59,7 +81,35 @@ one covers a block the doctor can flag.
59
81
 
60
82
  ---
61
83
 
62
- ## 2. Install or update AOS itself
84
+ ## 2. Machine configuration
85
+
86
+ Two things are machine-specific and ship with **no** value, because AOS is a
87
+ public package: one person's `web, media, infra` means nothing on someone
88
+ else's disk.
89
+
90
+ ```bash
91
+ aos-config propose # read this machine's layout, suggest nothing more
92
+ aos-config show # what is configured now
93
+ ```
94
+
95
+ `propose` looks for a workspace root (`~/dev`, `~/Projects`, `~/src`, `~/code`)
96
+ and offers its immediate subdirectories as the domain vocabulary. **Present the
97
+ proposal, do not apply it** — the user decides which of those are real domains
98
+ and which are just folders. Then ask for the memB `user_id`, which must never
99
+ be invented either.
100
+
101
+ ```bash
102
+ aos-config set workspaceRoot ~/dev
103
+ aos-config set domains bdb-core,web,media,agents,infra
104
+ aos-config set userId <the user's memB id>
105
+ ```
106
+
107
+ The result lands in `~/.agents/aos-config.json`. `/aos-project-init` reads it
108
+ to offer a domain per project and refuses to guess when it is missing.
109
+
110
+ ---
111
+
112
+ ## 3. Install or update AOS itself
63
113
 
64
114
  ```bash
65
115
  npx -y @hybridlabor-api/aos@latest
@@ -88,7 +138,7 @@ a harness directory.
88
138
 
89
139
  ---
90
140
 
91
- ## 3. memB — memory that actually retains
141
+ ## 4. memB — memory that actually retains
92
142
 
93
143
  memB is three separate pieces, and a machine can have any subset:
94
144
 
@@ -115,7 +165,7 @@ machine — `/aos-project-init` seeds it per project.
115
165
 
116
166
  ---
117
167
 
118
- ## 4. The ambient memory hook
168
+ ## 5. The ambient memory hook
119
169
 
120
170
  The hook is what makes memB *ambient* rather than something an agent has to
121
171
  remember to query. On every prompt it reads the SQLite store directly and
@@ -149,6 +199,18 @@ harness — the memB store is machine-global, and pointing it at
149
199
  `$CLAUDE_PROJECT_DIR` would make it fail on every prompt in any project the
150
200
  harness was never installed into.
151
201
 
202
+ **On a harness without hooks** — everything except Claude Code — the same
203
+ context is written into the rule files that harness loads instead:
204
+
205
+ ```bash
206
+ python3 ~/.agents/memB/memb_auto_inject.py --global # GEMINI.md, CODEX.md, …
207
+ python3 ~/.agents/memB/memb_auto_inject.py --dir <repo> # a project's AGENTS.md
208
+ ```
209
+
210
+ It merges into a delimited block and leaves everything outside it alone. The
211
+ block carries the time it was written, because this path is only ever as fresh
212
+ as its last run.
213
+
152
214
  Standing facts that should reach every prompt — persona, brand rules, house
153
215
  style — go one per line into `~/.MemBDB/ambient-persona.txt`. Lines starting
154
216
  with `#` are ignored. This file is deliberately *not* shipped: ask the user
@@ -159,7 +221,7 @@ Verify by starting a session and checking that the first prompt carries a
159
221
 
160
222
  ---
161
223
 
162
- ## 5. OpenWiki
224
+ ## 6. OpenWiki
163
225
 
164
226
  ```bash
165
227
  npm install -g openwiki@latest # CLI, needs Node >= 22
@@ -184,7 +246,7 @@ Wikis themselves are per-repository (`.openwiki/` in each project) — that is
184
246
 
185
247
  ---
186
248
 
187
- ## 6. Synapse
249
+ ## 7. Synapse
188
250
 
189
251
  The installer downloads the module, symlinks the binary to
190
252
  `~/.local/bin/synapse` and registers a daemon on port `7781`. Two failure modes
@@ -200,7 +262,35 @@ If no pre-built binary exists for the platform, build it:
200
262
 
201
263
  ---
202
264
 
203
- ## 7. Confirm
265
+ ## 8. The dashboard
266
+
267
+ `aos-dashboard` serves one page on `http://127.0.0.1:7900` showing every BDB
268
+ service live — memB, Synapse, the OpenWiki daemon, AO Orchestrator and RemoteOS
269
+ — with its version, port, LaunchAgent state, start/stop/restart, and its log
270
+ files inline. It polls every five seconds.
271
+
272
+ ```bash
273
+ aos-dashboard # opens the browser
274
+ aos-dashboard --no-open # just serve
275
+ aos-dashboard --port 7901 # if 7900 is taken
276
+ ```
277
+
278
+ It binds to `127.0.0.1` only, and every control action is matched against a
279
+ fixed service table — an id or action the table does not contain is refused,
280
+ and no value from the request ever reaches a shell or a file path.
281
+
282
+ It also surfaces causes a port probe cannot see. The AO Orchestrator card
283
+ checks the code signature of `~/.local/bin/ao`: a binary rebuilt and copied
284
+ into place unsigned is SIGKILLed by AMFI at launch (exit 137), which otherwise
285
+ looks like a daemon that is simply down, with nothing in the log. The fix it
286
+ names is `codesign -s - -f ~/.local/bin/ao`.
287
+
288
+ Use it when the user asks what is running, or when a doctor row says a port is
289
+ closed and the question is why.
290
+
291
+ ---
292
+
293
+ ## 9. Confirm
204
294
 
205
295
  Re-run the doctor. Do not report success from the fact that commands ran —
206
296
  report the doctor's own count: