@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.
- package/.agents/skills/firecrawl/SKILL.md +149 -0
- package/.agents/skills/firecrawl/rules/install.md +82 -0
- package/.agents/skills/firecrawl/rules/security.md +26 -0
- package/.agents/skills/firecrawl-agent/SKILL.md +58 -0
- package/.agents/skills/firecrawl-build/SKILL.md +39 -0
- package/.agents/skills/firecrawl-build-interact/SKILL.md +68 -0
- package/.agents/skills/firecrawl-build-onboarding/SKILL.md +103 -0
- package/.agents/skills/firecrawl-build-onboarding/references/auth-flow.md +39 -0
- package/.agents/skills/firecrawl-build-onboarding/references/project-setup.md +20 -0
- package/.agents/skills/firecrawl-build-onboarding/references/sdk-installation.md +17 -0
- package/.agents/skills/firecrawl-build-scrape/SKILL.md +69 -0
- package/.agents/skills/firecrawl-build-search/SKILL.md +69 -0
- package/.agents/skills/firecrawl-crawl/SKILL.md +59 -0
- package/.agents/skills/firecrawl-download/SKILL.md +70 -0
- package/.agents/skills/firecrawl-interact/SKILL.md +84 -0
- package/.agents/skills/firecrawl-map/SKILL.md +51 -0
- package/.agents/skills/firecrawl-scrape/SKILL.md +69 -0
- package/.agents/skills/firecrawl-search/SKILL.md +60 -0
- package/CLAUDE.md +573 -0
- package/README.de.md +0 -8
- package/README.md +0 -8
- package/README.pt.md +0 -8
- package/assets/brand/ao-ant-mark.svg +91 -0
- package/assets/brand/bdb-core-mark.svg +34 -0
- package/assets/brand/heimdall-guardian-mark.svg +16 -0
- package/assets/brand/memb-crystal-mark.svg +18 -0
- package/bin/aos-config.mjs +89 -0
- package/bin/aos-dashboard.mjs +608 -0
- package/bin/aos-uninstall.mjs +227 -0
- package/docs/sessions/audit-2026-09-14-silent-failures.md +114 -0
- package/docs/skills_table.md +0 -3
- package/installer.js +387 -237
- package/mcps/RhinoMCP/cc-plugin/.claude/settings.json +10 -0
- package/mcps/after-effects-mcp/build/index.js +840 -0
- package/mcps/after-effects-mcp/build/scripts/applyEffect.jsx +153 -0
- package/mcps/after-effects-mcp/build/scripts/applyEffectTemplate.jsx +218 -0
- package/mcps/after-effects-mcp/build/scripts/createComposition.jsx +71 -0
- package/mcps/after-effects-mcp/build/scripts/createShapeLayer.jsx +147 -0
- package/mcps/after-effects-mcp/build/scripts/createSolidLayer.jsx +114 -0
- package/mcps/after-effects-mcp/build/scripts/createTextLayer.jsx +115 -0
- package/mcps/after-effects-mcp/build/scripts/getLayerInfo.jsx +192 -0
- package/mcps/after-effects-mcp/build/scripts/getProjectInfo.jsx +90 -0
- package/mcps/after-effects-mcp/build/scripts/listCompositions.jsx +50 -0
- package/mcps/after-effects-mcp/build/scripts/mcp-bridge-auto.jsx +1773 -0
- package/mcps/after-effects-mcp/build/scripts/setLayerProperties.jsx +160 -0
- package/mcps/computer-use-mcp/dist/client.d.ts +150 -0
- package/mcps/computer-use-mcp/dist/client.js +136 -0
- package/mcps/computer-use-mcp/dist/entrypoint.d.ts +16 -0
- package/mcps/computer-use-mcp/dist/entrypoint.js +26 -0
- package/mcps/computer-use-mcp/dist/native.d.ts +212 -0
- package/mcps/computer-use-mcp/dist/native.js +50 -0
- package/mcps/computer-use-mcp/dist/server.d.ts +32 -0
- package/mcps/computer-use-mcp/dist/server.js +342 -0
- package/mcps/computer-use-mcp/dist/session.d.ts +101 -0
- package/mcps/computer-use-mcp/dist/session.js +2372 -0
- package/package.json +13 -4
- package/skills/global_config/aos-project-init/SKILL.md +97 -130
- package/skills/global_config/aos-project-init/assets/openwikiignore.template +62 -0
- package/skills/global_config/aos-project-init/scripts/aos-project-doctor.mjs +38 -1
- package/skills/global_config/aos-setup/SKILL.md +98 -8
- package/skills/global_config/aos-setup/scripts/aos-doctor.mjs +21 -2
- package/skills/global_config/ask-tim/SKILL.md +2 -7
- package/skills/global_config/openwiki-skill/scripts/openwiki_daemon.py +65 -12
- package/bin/setup-saas.mjs +0 -792
- package/mcps/blender-mcp-server/.dockerignore +0 -19
- package/mcps/blender-mcp-server/.github/workflows/ci.yml +0 -67
- package/mcps/blender-mcp-server/.github/workflows/publish-pypi.yml +0 -54
- package/mcps/blender-mcp-server/CHANGELOG.md +0 -64
- package/mcps/blender-mcp-server/CONTRIBUTING.md +0 -107
- package/mcps/blender-mcp-server/Dockerfile +0 -19
- package/mcps/blender-mcp-server/LICENSE +0 -21
- package/mcps/blender-mcp-server/README.md +0 -409
- package/mcps/blender-mcp-server/addon/__init__.py +0 -1440
- package/mcps/blender-mcp-server/addon/models.py +0 -223
- package/mcps/blender-mcp-server/pyproject.toml +0 -120
- package/mcps/blender-mcp-server/scripts/blender_bridge_request.py +0 -71
- package/mcps/blender-mcp-server/scripts/blender_create_test_cube.py +0 -49
- package/mcps/blender-mcp-server/scripts/blender_scene_info.py +0 -38
- package/mcps/blender-mcp-server/scripts/build_addon_zip.sh +0 -29
- package/mcps/blender-mcp-server/scripts/demos/README.md +0 -186
- package/mcps/blender-mcp-server/scripts/demos/dam_break_scene.py +0 -276
- package/mcps/blender-mcp-server/scripts/demos/open_dam_break_gui.py +0 -33
- package/mcps/blender-mcp-server/scripts/demos/pipe_movement_study.py +0 -518
- package/mcps/blender-mcp-server/scripts/demos/pipe_pressure_failure_scene.py +0 -806
- package/mcps/blender-mcp-server/scripts/demos/procedural_dam_break_scene.py +0 -600
- package/mcps/blender-mcp-server/scripts/demos/run_dam_break.py +0 -510
- package/mcps/blender-mcp-server/scripts/launch_blender_gui.py +0 -41
- package/mcps/blender-mcp-server/scripts/library/README.md +0 -64
- package/mcps/blender-mcp-server/scripts/library/apply_transforms.py +0 -46
- package/mcps/blender-mcp-server/scripts/library/camera.py +0 -51
- package/mcps/blender-mcp-server/scripts/library/collections.py +0 -65
- package/mcps/blender-mcp-server/scripts/library/create_mesh.py +0 -41
- package/mcps/blender-mcp-server/scripts/library/effector.py +0 -48
- package/mcps/blender-mcp-server/scripts/library/fluid_domain.py +0 -80
- package/mcps/blender-mcp-server/scripts/library/fluid_inflow.py +0 -98
- package/mcps/blender-mcp-server/scripts/library/frame_range.py +0 -35
- package/mcps/blender-mcp-server/scripts/library/keyframes.py +0 -59
- package/mcps/blender-mcp-server/scripts/library/rigid_body.py +0 -52
- package/mcps/blender-mcp-server/scripts/library/save_blend.py +0 -40
- package/mcps/blender-mcp-server/scripts/server_start.sh +0 -26
- package/mcps/blender-mcp-server/src/blender_mcp_server/__init__.py +0 -3
- package/mcps/blender-mcp-server/src/blender_mcp_server/headless.py +0 -330
- package/mcps/blender-mcp-server/src/blender_mcp_server/server.py +0 -606
- package/mcps/davinci-mcp-professional/.bandit +0 -35
- package/mcps/davinci-mcp-professional/.claude/commands/security-review.md +0 -191
- package/mcps/davinci-mcp-professional/.claude/settings.json +0 -1
- package/mcps/davinci-mcp-professional/.editorconfig +0 -27
- package/mcps/davinci-mcp-professional/.gitattributes +0 -207
- package/mcps/davinci-mcp-professional/.github/CODEOWNERS +0 -2
- package/mcps/davinci-mcp-professional/.github/ISSUE_TEMPLATE/bug_report.md +0 -33
- package/mcps/davinci-mcp-professional/.github/ISSUE_TEMPLATE/feature_request.md +0 -19
- package/mcps/davinci-mcp-professional/.github/PULL_REQUEST_TEMPLATE.md +0 -20
- package/mcps/davinci-mcp-professional/.github/SECURITY.md +0 -97
- package/mcps/davinci-mcp-professional/.github/dependabot.yml +0 -27
- package/mcps/davinci-mcp-professional/.github/workflows/ci.yml +0 -39
- package/mcps/davinci-mcp-professional/ATTRIBUTION.md +0 -4
- package/mcps/davinci-mcp-professional/AUTHORS.md +0 -9
- package/mcps/davinci-mcp-professional/BUGS.md +0 -55
- package/mcps/davinci-mcp-professional/CLAUDE.md +0 -229
- package/mcps/davinci-mcp-professional/CONTRIBUTING.md +0 -51
- package/mcps/davinci-mcp-professional/COPYING.md +0 -228
- package/mcps/davinci-mcp-professional/Doxyfile +0 -379
- package/mcps/davinci-mcp-professional/README.md +0 -143
- package/mcps/davinci-mcp-professional/SECURITY.md +0 -40
- package/mcps/davinci-mcp-professional/USING.md +0 -301
- package/mcps/davinci-mcp-professional/VERSION.md +0 -13
- package/mcps/davinci-mcp-professional/build.py +0 -169
- package/mcps/davinci-mcp-professional/claude_desktop_config_template.json +0 -11
- package/mcps/davinci-mcp-professional/hooks/ci-check.sh +0 -29
- package/mcps/davinci-mcp-professional/hooks/pre-push +0 -46
- package/mcps/davinci-mcp-professional/main.py +0 -40
- package/mcps/davinci-mcp-professional/mcp_server.py +0 -30
- package/mcps/davinci-mcp-professional/pyproject.toml +0 -115
- package/mcps/davinci-mcp-professional/security_audit.py +0 -379
- package/mcps/davinci-mcp-professional/src/davinci_mcp/__init__.py +0 -19
- package/mcps/davinci-mcp-professional/src/davinci_mcp/cli.py +0 -138
- package/mcps/davinci-mcp-professional/src/davinci_mcp/resolve_client.py +0 -342
- package/mcps/davinci-mcp-professional/src/davinci_mcp/resources/__init__.py +0 -60
- package/mcps/davinci-mcp-professional/src/davinci_mcp/server.py +0 -185
- package/mcps/davinci-mcp-professional/src/davinci_mcp/tools/__init__.py +0 -146
- package/mcps/davinci-mcp-professional/src/davinci_mcp/types.py +0 -125
- package/mcps/davinci-mcp-professional/src/davinci_mcp/utils/__init__.py +0 -19
- package/mcps/davinci-mcp-professional/src/davinci_mcp/utils/platform.py +0 -239
- package/mcps/davinci-mcp-professional/test.py +0 -186
- package/mcps/davinci-mcp-professional/uv.lock +0 -2073
- package/mcps/davinci-resolve-mcp/.claude/skills/media-analysis.md +0 -44
- package/mcps/davinci-resolve-mcp/.clinerules +0 -17
- package/mcps/davinci-resolve-mcp/.cursorrules +0 -17
- package/mcps/davinci-resolve-mcp/.github/copilot-instructions.md +0 -17
- package/mcps/davinci-resolve-mcp/.github/workflows/npm-publish.yml +0 -109
- package/mcps/davinci-resolve-mcp/.windsurfrules +0 -17
- package/mcps/davinci-resolve-mcp/AGENTS.md +0 -114
- package/mcps/davinci-resolve-mcp/CHANGELOG.md +0 -2648
- package/mcps/davinci-resolve-mcp/CLAUDE.md +0 -15
- package/mcps/davinci-resolve-mcp/LICENSE +0 -21
- package/mcps/davinci-resolve-mcp/README.md +0 -173
- package/mcps/davinci-resolve-mcp/SECURITY.md +0 -53
- package/mcps/davinci-resolve-mcp/bin/davinci-resolve-mcp.mjs +0 -450
- package/mcps/davinci-resolve-mcp/examples/README.md +0 -53
- package/mcps/davinci-resolve-mcp/examples/markers/README.md +0 -81
- package/mcps/davinci-resolve-mcp/examples/media/README.md +0 -94
- package/mcps/davinci-resolve-mcp/examples/timeline/README.md +0 -98
- package/mcps/davinci-resolve-mcp/install.py +0 -1687
- package/mcps/davinci-resolve-mcp/package.json +0 -52
- package/mcps/davinci-resolve-mcp/release-notes/v2.22.0.md +0 -51
- package/mcps/davinci-resolve-mcp/release-notes/v2.23.0.md +0 -51
- package/mcps/davinci-resolve-mcp/release-notes/v2.23.1.md +0 -35
- package/mcps/davinci-resolve-mcp/release-notes/v2.24.1.md +0 -32
- package/mcps/davinci-resolve-mcp/scripts/audit_api_parity.py +0 -275
- package/mcps/davinci-resolve-mcp/scripts/audit_readwrite_symmetry.py +0 -80
- package/mcps/davinci-resolve-mcp/scripts/doctor.py +0 -227
- package/mcps/davinci-resolve-mcp/scripts/gen_api_limitations.py +0 -144
- package/mcps/davinci-resolve-mcp/scripts/live_media_analysis_polish_probe.py +0 -65
- package/mcps/davinci-resolve-mcp/scripts/measure_bridge_cost.py +0 -65
- package/mcps/davinci-resolve-mcp/scripts/regen_panel_screenshots.py +0 -76
- package/mcps/davinci-resolve-mcp/src/__init__.py +0 -3
- package/mcps/davinci-resolve-mcp/src/analysis_dashboard.py +0 -15505
- package/mcps/davinci-resolve-mcp/src/batch_cli.py +0 -540
- package/mcps/davinci-resolve-mcp/src/control_panel.py +0 -13
- package/mcps/davinci-resolve-mcp/src/granular/__init__.py +0 -17
- package/mcps/davinci-resolve-mcp/src/granular/common.py +0 -741
- package/mcps/davinci-resolve-mcp/src/granular/folder.py +0 -420
- package/mcps/davinci-resolve-mcp/src/granular/gallery.py +0 -306
- package/mcps/davinci-resolve-mcp/src/granular/graph.py +0 -309
- package/mcps/davinci-resolve-mcp/src/granular/media_pool.py +0 -679
- package/mcps/davinci-resolve-mcp/src/granular/media_pool_item.py +0 -1020
- package/mcps/davinci-resolve-mcp/src/granular/media_storage.py +0 -179
- package/mcps/davinci-resolve-mcp/src/granular/project.py +0 -1654
- package/mcps/davinci-resolve-mcp/src/granular/resolve_control.py +0 -538
- package/mcps/davinci-resolve-mcp/src/granular/timeline.py +0 -1075
- package/mcps/davinci-resolve-mcp/src/granular/timeline_item.py +0 -2251
- package/mcps/davinci-resolve-mcp/src/resolve_mcp_server.py +0 -43
- package/mcps/davinci-resolve-mcp/src/server.py +0 -24116
- package/mcps/davinci-resolve-mcp/src/utils/__init__.py +0 -3
- package/mcps/davinci-resolve-mcp/src/utils/actor_identity.py +0 -46
- package/mcps/davinci-resolve-mcp/src/utils/analysis_caps.py +0 -678
- package/mcps/davinci-resolve-mcp/src/utils/analysis_memory.py +0 -755
- package/mcps/davinci-resolve-mcp/src/utils/analysis_runs.py +0 -307
- package/mcps/davinci-resolve-mcp/src/utils/analysis_store.py +0 -945
- package/mcps/davinci-resolve-mcp/src/utils/api_truth.py +0 -525
- package/mcps/davinci-resolve-mcp/src/utils/app_control.py +0 -319
- package/mcps/davinci-resolve-mcp/src/utils/audio_fairlight_live_probe.py +0 -263
- package/mcps/davinci-resolve-mcp/src/utils/brain_edits.py +0 -387
- package/mcps/davinci-resolve-mcp/src/utils/bridge_metrics.py +0 -76
- package/mcps/davinci-resolve-mcp/src/utils/cdl.py +0 -20
- package/mcps/davinci-resolve-mcp/src/utils/clip_query.py +0 -85
- package/mcps/davinci-resolve-mcp/src/utils/cloud_operations.py +0 -192
- package/mcps/davinci-resolve-mcp/src/utils/color_grade_live_probe.py +0 -444
- package/mcps/davinci-resolve-mcp/src/utils/contracts.py +0 -102
- package/mcps/davinci-resolve-mcp/src/utils/cut_ir.py +0 -115
- package/mcps/davinci-resolve-mcp/src/utils/dctl_templates.py +0 -368
- package/mcps/davinci-resolve-mcp/src/utils/deep_vision.py +0 -643
- package/mcps/davinci-resolve-mcp/src/utils/destructive_hook.py +0 -606
- package/mcps/davinci-resolve-mcp/src/utils/edit_engine.py +0 -737
- package/mcps/davinci-resolve-mcp/src/utils/embeddings.py +0 -922
- package/mcps/davinci-resolve-mcp/src/utils/entities.py +0 -579
- package/mcps/davinci-resolve-mcp/src/utils/extension_authoring_live_probe.py +0 -292
- package/mcps/davinci-resolve-mcp/src/utils/failure_tracker.py +0 -119
- package/mcps/davinci-resolve-mcp/src/utils/fuse_templates.py +0 -1968
- package/mcps/davinci-resolve-mcp/src/utils/fusion_composition_live_probe.py +0 -284
- package/mcps/davinci-resolve-mcp/src/utils/fusion_group_settings.py +0 -334
- package/mcps/davinci-resolve-mcp/src/utils/layout_presets.py +0 -333
- package/mcps/davinci-resolve-mcp/src/utils/mcp_stdio.py +0 -32
- package/mcps/davinci-resolve-mcp/src/utils/mcp_transport.py +0 -128
- package/mcps/davinci-resolve-mcp/src/utils/media_analysis.py +0 -7690
- package/mcps/davinci-resolve-mcp/src/utils/media_analysis_jobs.py +0 -805
- package/mcps/davinci-resolve-mcp/src/utils/media_pool_changes.py +0 -121
- package/mcps/davinci-resolve-mcp/src/utils/media_pool_ingest_live_probe.py +0 -592
- package/mcps/davinci-resolve-mcp/src/utils/multicam.py +0 -393
- package/mcps/davinci-resolve-mcp/src/utils/object_inspection.py +0 -301
- package/mcps/davinci-resolve-mcp/src/utils/page_lock.py +0 -75
- package/mcps/davinci-resolve-mcp/src/utils/platform.py +0 -157
- package/mcps/davinci-resolve-mcp/src/utils/proc.py +0 -26
- package/mcps/davinci-resolve-mcp/src/utils/project_cleanup.py +0 -73
- package/mcps/davinci-resolve-mcp/src/utils/project_lifecycle_live_probe.py +0 -376
- package/mcps/davinci-resolve-mcp/src/utils/project_lint.py +0 -131
- package/mcps/davinci-resolve-mcp/src/utils/project_properties.py +0 -601
- package/mcps/davinci-resolve-mcp/src/utils/project_spec.py +0 -459
- package/mcps/davinci-resolve-mcp/src/utils/readback.py +0 -91
- package/mcps/davinci-resolve-mcp/src/utils/render_deliver_live_probe.py +0 -384
- package/mcps/davinci-resolve-mcp/src/utils/resolve_ai_governance.py +0 -214
- package/mcps/davinci-resolve-mcp/src/utils/resolve_ai_ledger.py +0 -244
- package/mcps/davinci-resolve-mcp/src/utils/resolve_busy.py +0 -171
- package/mcps/davinci-resolve-mcp/src/utils/resolve_connection.py +0 -77
- package/mcps/davinci-resolve-mcp/src/utils/review_annotation_live_probe.py +0 -352
- package/mcps/davinci-resolve-mcp/src/utils/script_templates.py +0 -1193
- package/mcps/davinci-resolve-mcp/src/utils/shot_relationships.py +0 -544
- package/mcps/davinci-resolve-mcp/src/utils/structural_diff.py +0 -175
- package/mcps/davinci-resolve-mcp/src/utils/sync_detection.py +0 -889
- package/mcps/davinci-resolve-mcp/src/utils/timeline_brain_db.py +0 -826
- package/mcps/davinci-resolve-mcp/src/utils/timeline_conform_live_probe.py +0 -280
- package/mcps/davinci-resolve-mcp/src/utils/timeline_kernel_live_probe.py +0 -1092
- package/mcps/davinci-resolve-mcp/src/utils/timeline_kernel_probe.py +0 -185
- package/mcps/davinci-resolve-mcp/src/utils/timeline_title_text.py +0 -87
- package/mcps/davinci-resolve-mcp/src/utils/timeline_versioning.py +0 -730
- package/mcps/davinci-resolve-mcp/src/utils/update_check.py +0 -685
- package/mcps/vectorworks-mcp/.dockerignore +0 -8
- package/mcps/vectorworks-mcp/Dockerfile +0 -28
- package/mcps/vectorworks-mcp/README.md +0 -156
- package/mcps/vectorworks-mcp/app/__init__.py +0 -2
- package/mcps/vectorworks-mcp/app/api.py +0 -52
- package/mcps/vectorworks-mcp/app/chunking.py +0 -56
- package/mcps/vectorworks-mcp/app/config.py +0 -29
- package/mcps/vectorworks-mcp/app/embeddings.py +0 -28
- package/mcps/vectorworks-mcp/app/indexer.py +0 -106
- package/mcps/vectorworks-mcp/app/main.py +0 -33
- package/mcps/vectorworks-mcp/app/mcp_server.py +0 -71
- package/mcps/vectorworks-mcp/app/search.py +0 -54
- package/mcps/vectorworks-mcp/app/utils.py +0 -14
- package/mcps/vectorworks-mcp/data/.gitkeep +0 -1
- package/mcps/vectorworks-mcp/data/vw-app-help/VW2022_PluginScript.htm +0 -95
- package/mcps/vectorworks-mcp/data/vw-app-help/VW2022_ScriptEditor.htm +0 -266
- package/mcps/vectorworks-mcp/data/vw-app-help/VW2022_Scripting.htm +0 -106
- package/mcps/vectorworks-mcp/data/vw-app-help/VW2023_CreatingScriptedPlugins.htm +0 -327
- package/mcps/vectorworks-mcp/data/vw-app-help/VW2024_RunningScripts.htm +0 -116
- package/mcps/vectorworks-mcp/data/vw-devwiki/VS_Function_Reference_category.html +0 -2129
- package/mcps/vectorworks-mcp/data/vw-jp-ref/ObjectsSymbols.html +0 -2035
- package/mcps/vectorworks-mcp/data/vw-jp-ref/ScriptFunctionReference.html +0 -29
- package/mcps/vectorworks-mcp/design.md +0 -57
- package/mcps/vectorworks-mcp/docker-compose.yml +0 -18
- package/mcps/vectorworks-mcp/index/.gitkeep +0 -1
- package/mcps/vectorworks-mcp/index/meta.jsonl +0 -3956
- package/mcps/vectorworks-mcp/index/vw.faiss +0 -0
- package/mcps/vectorworks-mcp/requirements.txt +0 -10
- package/mcps/vectorworks-mcp/scripts/fetch_docs_minimal.sh +0 -84
- package/mcps/vectorworks-mcp/scripts/fetch_github_vectorworks.sh +0 -85
- package/mcps/vectorworks-mcp/templates/index.html +0 -40
- package/scripts/ecosystem-health-audit.js +0 -257
- package/skills/bdb-dev-os-skill/SKILL.md +0 -49
- package/skills/bdb-dev-os-skill/package.json +0 -11
- package/skills/bdbsaastraining/SKILL.md +0 -316
- package/skills/bdbsaastraining/references/exam-pool.md +0 -313
- package/skills/bdbsaastraining/references/interaction-modes.md +0 -94
- package/skills/bdbsaastraining/references/track-a-ai-agent.md +0 -111
- package/skills/bdbsaastraining/references/track-b-wordpress.md +0 -111
- package/skills/bdbsaastraining/references/track-c-mailserver.md +0 -107
- package/skills/bdbsaastraining/references/track-d-debian.md +0 -109
- package/skills/bdbsaastraining/references/track-e-custom.md +0 -83
- package/skills/bdbsaastraining/scripts/build_profile.py +0 -529
- package/skills/bdbsaastraining/scripts/generate_certificate.py +0 -161
- package/skills/bdbsaastraining/scripts/preflight_check.sh +0 -150
- package/skills/bdbsaastraining/templates/certificate_template.html +0 -508
- package/skills/global_config/bdb-ecosystem-health/SKILL.md +0 -68
- package/skills/global_config/bdbsaas-ops/SKILL.md +0 -16
- 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.
|
|
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
|
-
"
|
|
12
|
-
"aos-
|
|
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
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
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
|
-
|
|
17
|
-
|
|
18
|
-
|
|
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
|
-
|
|
21
|
-
|
|
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.
|
|
25
|
+
## 1. Preconditions
|
|
29
26
|
|
|
30
27
|
```bash
|
|
31
|
-
|
|
28
|
+
aos-config show # is this machine's vocabulary present?
|
|
32
29
|
```
|
|
33
30
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
61
|
-
|
|
62
|
-
|
|
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
|
-
##
|
|
48
|
+
## 2. The interview
|
|
67
49
|
|
|
68
|
-
One
|
|
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
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
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
|
-
|
|
78
|
-
|
|
79
|
-
|
|
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
|
-
|
|
84
|
-
|
|
85
|
-
|
|
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
|
-
|
|
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
|
-
|
|
92
|
-
|
|
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
|
-
|
|
95
|
-
|
|
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
|
-
|
|
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
|
-
-
|
|
101
|
-
-
|
|
102
|
-
-
|
|
103
|
-
|
|
104
|
-
|
|
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
|
-
|
|
108
|
-
|
|
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
|
-
##
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
"
|
|
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
|
-
|
|
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
|
-
|
|
151
|
-
openwiki --
|
|
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
|
-
|
|
155
|
-
|
|
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
|
-
|
|
127
|
+
For memB, write decisions through the MCP with the slug as `project_id` and the
|
|
128
|
+
domain as `category`:
|
|
162
129
|
|
|
163
|
-
```
|
|
164
|
-
|
|
130
|
+
```
|
|
131
|
+
add_memory({ text: "…", category: "<domain>", project_id: "<slug>" })
|
|
165
132
|
```
|
|
166
133
|
|
|
167
|
-
|
|
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
|
-
##
|
|
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
|
|
180
|
-
|
|
181
|
-
for `
|
|
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
|
-
-
|
|
188
|
-
-
|
|
189
|
-
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
-
|
|
194
|
-
|
|
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
|
-
|
|
25
|
-
|
|
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.
|
|
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
|
-
##
|
|
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
|
-
##
|
|
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
|
-
##
|
|
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
|
-
##
|
|
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
|
-
##
|
|
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:
|