@hybridlabor-api/aos 4.6.6 → 4.7.1
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/agents.md +9 -3
- package/.agents/nodes.json +7 -2
- package/.agents/state.schema.json +26 -1
- package/.agents/vendor-manifest.json +56 -0
- package/.agents/workflows/startcycle-graph.md +2 -2
- package/.claude/agents/architect.md +7 -2
- package/.claude/agents/security-reviewer.md +1 -1
- package/.claude/agents/techlead.md +2 -0
- package/.claude/hooks/memb-inject.mjs +257 -135
- package/.claude/hooks/trail-relay.mjs +18 -0
- package/.claude/settings.json +70 -0
- package/.claude/workflows/startcycle-dispatch.mjs +203 -17
- package/.opencode/agents/architect.md +7 -2
- package/.opencode/agents/techlead.md +2 -0
- package/.opencode/plugins/bdb-aos.js +75 -0
- package/THIRD_PARTY_NOTICES.md +57 -1
- package/bin/aos-doctor.mjs +366 -0
- package/bin/aos-store.mjs +167 -0
- package/bin/aos-uninstall.mjs +55 -1
- package/docs/AUDIT_BRIEF_ECC_STORE.md +122 -0
- package/docs/PLAN_AOS_STORE_PHASE1.md +190 -0
- package/docs/handover/agenttrail-for-ao.md +58 -0
- package/docs/handover/deja-for-ao.md +51 -0
- package/installer.js +182 -38
- package/lib/aos-archify-contract.mjs +277 -0
- package/lib/ecc-store-index.json +1 -0
- package/mcp_config.json +8 -0
- package/mcps/mcsc/README.md +24 -0
- package/mcps/mcsc/package-lock.json +1234 -0
- package/mcps/mcsc/package.json +14 -0
- package/mcps/mcsc/packages/core/bin/mcsc.js +162 -0
- package/mcps/mcsc/packages/core/rulebook.default.yaml +49 -0
- package/mcps/mcsc/packages/core/schema/rulebook.schema.json +56 -0
- package/mcps/mcsc/packages/core/src/adapters/agy.js +107 -0
- package/mcps/mcsc/packages/core/src/adapters/codex.js +179 -0
- package/mcps/mcsc/packages/core/src/adapters/native.js +14 -0
- package/mcps/mcsc/packages/core/src/adapters/opencode.js +183 -0
- package/mcps/mcsc/packages/core/src/adapters/types.js +21 -0
- package/mcps/mcsc/packages/core/src/capabilities/buildOfferTable.js +34 -0
- package/mcps/mcsc/packages/core/src/capabilities/registry.js +99 -0
- package/mcps/mcsc/packages/core/src/capabilities/types.js +24 -0
- package/mcps/mcsc/packages/core/src/detect/cache.js +47 -0
- package/mcps/mcsc/packages/core/src/detect/inventory.js +73 -0
- package/mcps/mcsc/packages/core/src/detect/probes.js +158 -0
- package/mcps/mcsc/packages/core/src/detect/types.js +26 -0
- package/mcps/mcsc/packages/core/src/rulebook/load.js +53 -0
- package/mcps/mcsc/packages/core/src/rulebook/resolve.js +227 -0
- package/mcps/mcsc/packages/core/src/rulebook/rulebook.types.js +89 -0
- package/mcps/mcsc/packages/core/src/trail.js +17 -0
- package/mcps/mcsc/packages/mcp/server.js +302 -0
- package/mcps/mcsc/server.js +2 -0
- package/package.json +8 -2
- package/scripts/build-ecc-store-index.mjs +147 -0
- package/skills/basic/bdbmediastorm/SKILL.md +1 -1
- package/skills/basic/godmode-ui-ux/SKILL.md +2 -2
- package/skills/basic/godmode-ui-ux/references/anti-slop-rules.md +44 -40
- package/skills/basic/godmode-ui-ux/references/taste-archetypes.md +49 -0
- package/skills/basic/startcycle/SKILL.md +7 -0
- package/skills/basic/startcycle-graph/SKILL.md +25 -0
- package/skills/basic/startcycle-graph-user/SKILL.md +3 -0
- package/skills/basic/teamwork-preview/SKILL.md +2 -0
- package/skills/bdbrainstorm/SKILL.md +1 -0
- package/skills/global_config/agenttrail/LICENSE +21 -0
- package/skills/global_config/agenttrail/SKILL.md +48 -0
- package/skills/global_config/agenttrail/bin/agenttrail.mjs +1113 -0
- package/skills/global_config/agenttrail/public/index.html +662 -0
- package/skills/global_config/aos-project-init/SKILL.md +25 -5
- package/skills/global_config/aos-setup/SKILL.md +34 -1
- package/skills/global_config/aos-setup/scripts/aos-doctor.mjs +115 -1
- package/skills/global_config/archify/LICENSE +22 -0
- package/skills/global_config/archify/SKILL.md +140 -0
- package/skills/global_config/archify/THIRD_PARTY_NOTICES.md +69 -0
- package/skills/global_config/archify/assets/JetBrainsMono-OFL.txt +93 -0
- package/skills/global_config/archify/assets/template.html +14937 -0
- package/skills/global_config/archify/bin/archify.mjs +2139 -0
- package/skills/global_config/archify/bin/open-artifact.mjs +86 -0
- package/skills/global_config/archify/bin/preview.mjs +653 -0
- package/skills/global_config/archify/bin/visual-check.mjs +829 -0
- package/skills/global_config/archify/brand-marks/README.md +31 -0
- package/skills/global_config/archify/brand-marks/catalog.json +131 -0
- package/skills/global_config/archify/delta/architecture-delta.mjs +1232 -0
- package/skills/global_config/archify/examples/agent-run.lifecycle.json +60 -0
- package/skills/global_config/archify/examples/agent-tool-call.workflow.json +94 -0
- package/skills/global_config/archify/examples/async-job-roundtrip.sequence.json +61 -0
- package/skills/global_config/archify/examples/brand-aware-delivery.architecture.json +47 -0
- package/skills/global_config/archify/examples/cache-miss-request.sequence.json +82 -0
- package/skills/global_config/archify/examples/checkout-platform.base.architecture.json +31 -0
- package/skills/global_config/archify/examples/checkout-platform.head.architecture.json +31 -0
- package/skills/global_config/archify/examples/dataflow-product-analytics.html +15048 -0
- package/skills/global_config/archify/examples/deployment-release.lifecycle.json +49 -0
- package/skills/global_config/archify/examples/event-stream.dataflow.json +57 -0
- package/skills/global_config/archify/examples/incident-response.workflow.json +64 -0
- package/skills/global_config/archify/examples/lifecycle-agent-run.html +14983 -0
- package/skills/global_config/archify/examples/product-analytics.dataflow.json +76 -0
- package/skills/global_config/archify/examples/production-deployment.architecture.json +71 -0
- package/skills/global_config/archify/examples/release-delivery.workflow.json +62 -0
- package/skills/global_config/archify/examples/sequence-cache-miss-request.html +15063 -0
- package/skills/global_config/archify/examples/web-app-rendered.html +15012 -0
- package/skills/global_config/archify/examples/web-app.architecture.json +46 -0
- package/skills/global_config/archify/examples/workflow-agent-tool-call-rendered.html +15054 -0
- package/skills/global_config/archify/migrations/workflow-v2.mjs +279 -0
- package/skills/global_config/archify/package.json +39 -0
- package/skills/global_config/archify/recipes/scenarios.mjs +391 -0
- package/skills/global_config/archify/references/authoring-contract.md +247 -0
- package/skills/global_config/archify/references/brand-marks.md +65 -0
- package/skills/global_config/archify/references/delivery-contract.md +138 -0
- package/skills/global_config/archify/references/viewer-runtime.md +45 -0
- package/skills/global_config/archify/renderers/architecture/grid.mjs +62 -0
- package/skills/global_config/archify/renderers/architecture/render-architecture.mjs +1078 -0
- package/skills/global_config/archify/renderers/dataflow/README.md +104 -0
- package/skills/global_config/archify/renderers/dataflow/render-dataflow.mjs +483 -0
- package/skills/global_config/archify/renderers/lifecycle/README.md +115 -0
- package/skills/global_config/archify/renderers/lifecycle/render-lifecycle.mjs +561 -0
- package/skills/global_config/archify/renderers/sequence/README.md +114 -0
- package/skills/global_config/archify/renderers/sequence/render-sequence.mjs +464 -0
- package/skills/global_config/archify/renderers/shared/brand-marks.mjs +563 -0
- package/skills/global_config/archify/renderers/shared/cli.mjs +218 -0
- package/skills/global_config/archify/renderers/shared/desktop-readability.mjs +26 -0
- package/skills/global_config/archify/renderers/shared/diagnostics.mjs +160 -0
- package/skills/global_config/archify/renderers/shared/engineering-profiles.mjs +157 -0
- package/skills/global_config/archify/renderers/shared/generated-brand-marks.mjs +2003 -0
- package/skills/global_config/archify/renderers/shared/generated-validators.mjs +13 -0
- package/skills/global_config/archify/renderers/shared/geometry.mjs +1423 -0
- package/skills/global_config/archify/renderers/shared/i18n.mjs +595 -0
- package/skills/global_config/archify/renderers/shared/layout-report.mjs +40 -0
- package/skills/global_config/archify/renderers/shared/legend.mjs +217 -0
- package/skills/global_config/archify/renderers/shared/output-path.mjs +340 -0
- package/skills/global_config/archify/renderers/shared/repository-evidence.mjs +239 -0
- package/skills/global_config/archify/renderers/shared/repository-location.mjs +58 -0
- package/skills/global_config/archify/renderers/shared/text-fit.mjs +49 -0
- package/skills/global_config/archify/renderers/shared/utils.mjs +232 -0
- package/skills/global_config/archify/renderers/shared/validator.mjs +86 -0
- package/skills/global_config/archify/renderers/workflow/README.md +223 -0
- package/skills/global_config/archify/renderers/workflow/render-workflow.mjs +35 -0
- package/skills/global_config/archify/renderers/workflow/workflow-compiler.mjs +4400 -0
- package/skills/global_config/archify/renderers/workflow/workflow-migration-geometry.mjs +144 -0
- package/skills/global_config/archify/schemas/README.md +211 -0
- package/skills/global_config/archify/schemas/architecture.schema.json +178 -0
- package/skills/global_config/archify/schemas/common.schema.json +115 -0
- package/skills/global_config/archify/schemas/dataflow.schema.json +243 -0
- package/skills/global_config/archify/schemas/lifecycle.schema.json +266 -0
- package/skills/global_config/archify/schemas/sequence.schema.json +223 -0
- package/skills/global_config/archify/schemas/workflow.schema.json +428 -0
- package/skills/global_config/archify/scripts/check-render-output.mjs +916 -0
- package/skills/global_config/archify/scripts/generate-brand-marks.mjs +141 -0
- package/skills/global_config/archify/scripts/generate-validators.mjs +66 -0
- package/skills/global_config/archify/scripts/render-examples.mjs +26 -0
- package/skills/global_config/archify/skill-release.json +10 -0
- package/skills/global_config/ask-tim/SKILL.md +10 -0
- package/skills/global_config/bdb-security-audit/SKILL.md +109 -0
- package/skills/global_config/bdb-security-audit/references/audit-checklists.md +172 -0
- package/skills/global_config/bdb-security-audit/references/skylos-guide.md +139 -0
- package/skills/global_config/bdb-security-audit/references/xalgorix-bridge.md +110 -0
- package/skills/global_config/bdbdesignpro/SKILL.md +4 -4
- package/skills/global_config/bdbdesignpro/references/bdb-motion-tokens.md +52 -31
- package/skills/global_config/bdbresilience/SKILL.md +10 -0
- package/skills/global_config/brag/SKILL.md +179 -0
- package/skills/global_config/brag/assets/music/README.md +20 -0
- package/skills/global_config/brag/assets/music/cues/happy-beats-business-moves-vol-1-by-ende-dot-app.music-cues.json +3846 -0
- package/skills/global_config/brag/assets/music/cues/happy-beats-business-moves-vol-1-by-ende-dot-app.music-cues.md +35 -0
- package/skills/global_config/brag/assets/music/cues/happy-beats-business-moves-vol-10-by-ende-dot-app.music-cues.json +1826 -0
- package/skills/global_config/brag/assets/music/cues/happy-beats-business-moves-vol-10-by-ende-dot-app.music-cues.md +35 -0
- package/skills/global_config/brag/assets/music/cues/happy-beats-business-moves-vol-11-by-ende-dot-app.music-cues.json +2266 -0
- package/skills/global_config/brag/assets/music/cues/happy-beats-business-moves-vol-11-by-ende-dot-app.music-cues.md +35 -0
- package/skills/global_config/brag/assets/music/cues/happy-beats-business-moves-vol-12-by-ende-dot-app.music-cues.json +2806 -0
- package/skills/global_config/brag/assets/music/cues/happy-beats-business-moves-vol-12-by-ende-dot-app.music-cues.md +35 -0
- package/skills/global_config/brag/assets/music/cues/happy-beats-business-moves-vol-9-by-ende-dot-app.music-cues.json +2796 -0
- package/skills/global_config/brag/assets/music/cues/happy-beats-business-moves-vol-9-by-ende-dot-app.music-cues.md +35 -0
- package/skills/global_config/brag/assets/music/happy-beats-business-moves-vol-1-by-ende-dot-app.mp3 +0 -0
- package/skills/global_config/brag/assets/music/happy-beats-business-moves-vol-10-by-ende-dot-app.mp3 +0 -0
- package/skills/global_config/brag/assets/music/happy-beats-business-moves-vol-11-by-ende-dot-app.mp3 +0 -0
- package/skills/global_config/brag/assets/music/happy-beats-business-moves-vol-12-by-ende-dot-app.mp3 +0 -0
- package/skills/global_config/brag/assets/music/happy-beats-business-moves-vol-9-by-ende-dot-app.mp3 +0 -0
- package/skills/global_config/brag/assets/sfx/casino/card-fan-1.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/casino/card-fan-2.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/casino/card-place-1.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/casino/card-place-2.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/casino/card-place-3.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/casino/card-place-4.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/casino/card-shove-1.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/casino/card-shove-2.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/casino/card-shove-3.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/casino/card-shove-4.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/casino/card-shuffle.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/casino/card-slide-1.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/casino/card-slide-2.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/casino/card-slide-3.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/casino/card-slide-4.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/casino/card-slide-5.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/casino/card-slide-6.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/casino/card-slide-7.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/casino/card-slide-8.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/casino/cards-pack-open-1.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/casino/cards-pack-open-2.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/casino/chip-lay-1.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/casino/chip-lay-2.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/casino/chip-lay-3.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/casino/chips-collide-1.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/casino/chips-collide-2.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/casino/chips-collide-3.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/casino/chips-collide-4.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/casino/chips-handle-1.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/casino/chips-handle-2.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/casino/chips-handle-3.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/casino/chips-handle-4.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/casino/chips-handle-6.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/casino/chips-stack-1.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/casino/chips-stack-2.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/casino/chips-stack-3.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/casino/chips-stack-4.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/casino/chips-stack-5.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/casino/chips-stack-6.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/casino/dice-grab-1.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/casino/dice-grab-2.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/casino/dice-shake-1.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/casino/dice-shake-2.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/casino/dice-shake-3.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/casino/dice-throw-1.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/casino/dice-throw-2.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/casino/dice-throw-3.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/casino/die-throw-1.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/casino/die-throw-2.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/casino/die-throw-3.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/casino/die-throw-4.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/footstep_carpet_000.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/footstep_carpet_003.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/footstep_carpet_004.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/footstep_concrete_000.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/footstep_concrete_001.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/footstep_concrete_002.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/footstep_concrete_003.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/footstep_concrete_004.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/footstep_grass_000.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/footstep_grass_001.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/footstep_grass_002.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/footstep_grass_003.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/footstep_grass_004.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/footstep_snow_000.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/footstep_snow_001.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/footstep_snow_002.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/footstep_snow_003.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/footstep_snow_004.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/footstep_wood_000.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/footstep_wood_001.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/footstep_wood_002.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/footstep_wood_003.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/footstep_wood_004.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactBell_heavy_000.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactBell_heavy_003.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactBell_heavy_004.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactGeneric_light_000.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactGeneric_light_001.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactGeneric_light_002.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactGeneric_light_003.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactGeneric_light_004.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactGlass_heavy_002.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactGlass_light_001.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactGlass_light_002.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactGlass_light_003.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactGlass_medium_000.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactGlass_medium_002.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactGlass_medium_004.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactMetal_heavy_000.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactMetal_heavy_002.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactMetal_heavy_004.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactMetal_light_002.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactMetal_light_003.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactMetal_medium_000.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactMetal_medium_001.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactMetal_medium_002.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactMetal_medium_003.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactMetal_medium_004.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactMining_001.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactPlank_medium_000.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactPlank_medium_001.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactPlank_medium_002.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactPlank_medium_003.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactPlank_medium_004.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactPlate_heavy_000.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactPlate_heavy_001.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactPlate_heavy_002.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactPlate_heavy_003.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactPlate_heavy_004.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactPlate_light_000.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactPlate_light_001.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactPlate_light_002.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactPlate_light_003.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactPlate_light_004.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactPlate_medium_000.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactPlate_medium_001.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactPlate_medium_002.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactPlate_medium_003.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactPlate_medium_004.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactPunch_heavy_000.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactPunch_heavy_001.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactPunch_heavy_002.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactPunch_heavy_003.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactPunch_heavy_004.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactPunch_medium_000.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactPunch_medium_001.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactPunch_medium_002.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactPunch_medium_003.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactPunch_medium_004.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactSoft_heavy_000.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactSoft_heavy_001.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactSoft_heavy_002.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactSoft_heavy_003.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactSoft_heavy_004.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactSoft_medium_000.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactSoft_medium_001.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactSoft_medium_002.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactSoft_medium_003.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactSoft_medium_004.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactTin_medium_000.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactTin_medium_001.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactTin_medium_002.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactTin_medium_003.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactTin_medium_004.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactWood_heavy_000.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactWood_heavy_001.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactWood_heavy_002.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactWood_heavy_003.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactWood_heavy_004.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactWood_light_000.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactWood_light_001.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactWood_light_002.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactWood_light_003.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactWood_light_004.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactWood_medium_000.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactWood_medium_001.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactWood_medium_002.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactWood_medium_003.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/impact/impactWood_medium_004.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/interface/bong_001.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/interface/click_001.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/interface/click_002.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/interface/click_003.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/interface/click_004.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/interface/click_005.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/interface/drop_001.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/interface/drop_002.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/interface/drop_003.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/interface/error_005.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/interface/error_006.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/interface/glitch_002.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/interface/glitch_004.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/interface/select_008.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/interface/switch_001.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/interface/switch_002.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/interface/switch_004.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/interface/switch_005.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/interface/switch_006.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/interface/switch_007.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/keyboard/keypress-001.wav +0 -0
- package/skills/global_config/brag/assets/sfx/keyboard/keypress-002.wav +0 -0
- package/skills/global_config/brag/assets/sfx/keyboard/keypress-003.wav +0 -0
- package/skills/global_config/brag/assets/sfx/keyboard/keypress-004.wav +0 -0
- package/skills/global_config/brag/assets/sfx/keyboard/keypress-005.wav +0 -0
- package/skills/global_config/brag/assets/sfx/keyboard/keypress-006.wav +0 -0
- package/skills/global_config/brag/assets/sfx/keyboard/keypress-007.wav +0 -0
- package/skills/global_config/brag/assets/sfx/keyboard/keypress-008.wav +0 -0
- package/skills/global_config/brag/assets/sfx/keyboard/keypress-009.wav +0 -0
- package/skills/global_config/brag/assets/sfx/keyboard/keypress-010.wav +0 -0
- package/skills/global_config/brag/assets/sfx/keyboard/keypress-011.wav +0 -0
- package/skills/global_config/brag/assets/sfx/keyboard/keypress-012.wav +0 -0
- package/skills/global_config/brag/assets/sfx/keyboard/keypress-013.wav +0 -0
- package/skills/global_config/brag/assets/sfx/keyboard/keypress-014.wav +0 -0
- package/skills/global_config/brag/assets/sfx/keyboard/keypress-015.wav +0 -0
- package/skills/global_config/brag/assets/sfx/keyboard/keypress-016.wav +0 -0
- package/skills/global_config/brag/assets/sfx/keyboard/keypress-017.wav +0 -0
- package/skills/global_config/brag/assets/sfx/keyboard/keypress-018.wav +0 -0
- package/skills/global_config/brag/assets/sfx/keyboard/keypress-019.wav +0 -0
- package/skills/global_config/brag/assets/sfx/keyboard/keypress-020.wav +0 -0
- package/skills/global_config/brag/assets/sfx/keyboard/keypress-021.wav +0 -0
- package/skills/global_config/brag/assets/sfx/keyboard/keypress-022.wav +0 -0
- package/skills/global_config/brag/assets/sfx/keyboard/keypress-023.wav +0 -0
- package/skills/global_config/brag/assets/sfx/keyboard/keypress-024.wav +0 -0
- package/skills/global_config/brag/assets/sfx/keyboard/keypress-025.wav +0 -0
- package/skills/global_config/brag/assets/sfx/keyboard/keypress-026.wav +0 -0
- package/skills/global_config/brag/assets/sfx/keyboard/keypress-027.wav +0 -0
- package/skills/global_config/brag/assets/sfx/keyboard/keypress-028.wav +0 -0
- package/skills/global_config/brag/assets/sfx/keyboard/keypress-029.wav +0 -0
- package/skills/global_config/brag/assets/sfx/keyboard/keypress-030.wav +0 -0
- package/skills/global_config/brag/assets/sfx/keyboard/keypress-031.wav +0 -0
- package/skills/global_config/brag/assets/sfx/keyboard/keypress-032.wav +0 -0
- package/skills/global_config/brag/assets/sfx/sfx-analysis.json +15584 -0
- package/skills/global_config/brag/assets/sfx/sfx-analysis.md +75 -0
- package/skills/global_config/brag/assets/sfx/ui/click1.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/ui/click2.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/ui/click3.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/ui/click4.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/ui/click5.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/ui/mouseclick1.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/ui/rollover1.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/ui/rollover2.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/ui/rollover4.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/ui/rollover5.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/ui/switch1.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/ui/switch10.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/ui/switch11.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/ui/switch12.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/ui/switch13.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/ui/switch14.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/ui/switch15.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/ui/switch16.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/ui/switch17.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/ui/switch18.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/ui/switch19.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/ui/switch2.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/ui/switch20.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/ui/switch21.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/ui/switch22.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/ui/switch23.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/ui/switch24.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/ui/switch25.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/ui/switch26.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/ui/switch27.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/ui/switch28.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/ui/switch29.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/ui/switch3.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/ui/switch30.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/ui/switch31.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/ui/switch32.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/ui/switch33.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/ui/switch34.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/ui/switch35.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/ui/switch36.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/ui/switch37.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/ui/switch38.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/ui/switch4.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/ui/switch5.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/ui/switch6.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/ui/switch7.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/ui/switch8.ogg +0 -0
- package/skills/global_config/brag/assets/sfx/ui/switch9.ogg +0 -0
- package/skills/global_config/brag/references/audio.md +307 -0
- package/skills/global_config/brag/references/step-1-inspect.md +133 -0
- package/skills/global_config/brag/references/step-2-plan.md +234 -0
- package/skills/global_config/brag/references/step-3-compose.md +210 -0
- package/skills/global_config/brag/references/step-4-deliver.md +168 -0
- package/skills/global_config/brag/references/tones.md +231 -0
- package/skills/global_config/brag/scripts/analyze_music_cues.py +309 -0
- package/skills/global_config/brag/scripts/pyproject.toml +14 -0
- package/skills/global_config/brag/scripts/uv.lock +819 -0
- package/skills/global_config/deja-memory/SKILL.md +42 -0
- package/skills/global_config/editable-design/LICENSE +202 -0
- package/skills/global_config/editable-design/README.md +34 -0
- package/skills/global_config/editable-design/SKILL.md +630 -0
- package/skills/global_config/editable-design/THIRD_PARTY_NOTICES.md +10 -0
- package/skills/global_config/editable-design/agents/openai.yaml +4 -0
- package/skills/global_config/editable-design/assets/editor/layer-editor.css +262 -0
- package/skills/global_config/editable-design/assets/editor/layer-editor.js +1929 -0
- package/skills/global_config/editable-design/assets/poster-starter/README.md +92 -0
- package/skills/global_config/editable-design/assets/poster-starter/assets/.gitkeep +0 -0
- package/skills/global_config/editable-design/assets/poster-starter/index.html +91 -0
- package/skills/global_config/editable-design/assets/poster-starter/poster.json +6 -0
- package/skills/global_config/editable-design/assets/poster-starter/reference/.gitkeep +1 -0
- package/skills/global_config/editable-design/assets/replay/icons/assets.png +0 -0
- package/skills/global_config/editable-design/assets/replay/icons/html.png +0 -0
- package/skills/global_config/editable-design/assets/replay/icons/input.png +0 -0
- package/skills/global_config/editable-design/assets/replay/icons/layers.png +0 -0
- package/skills/global_config/editable-design/assets/replay/icons/plan.png +0 -0
- package/skills/global_config/editable-design/assets/replay/icons/reference.png +0 -0
- package/skills/global_config/editable-design/assets/replay/icons/review.png +0 -0
- package/skills/global_config/editable-design/assets/replay/index.html +59 -0
- package/skills/global_config/editable-design/assets/replay/replay-motion.js +410 -0
- package/skills/global_config/editable-design/assets/replay/replay.css +380 -0
- package/skills/global_config/editable-design/assets/replay/replay.js +374 -0
- package/skills/global_config/editable-design/font-kit/package-lock.json +115 -0
- package/skills/global_config/editable-design/font-kit/package.json +19 -0
- package/skills/global_config/editable-design/pack.sh +20 -0
- package/skills/global_config/editable-design/references/asset-architecture.md +72 -0
- package/skills/global_config/editable-design/references/editor-pitfalls.md +70 -0
- package/skills/global_config/editable-design/references/editor-runtime.md +131 -0
- package/skills/global_config/editable-design/references/font-system.md +89 -0
- package/skills/global_config/editable-design/references/imagery.md +145 -0
- package/skills/global_config/editable-design/references/layout-typography.md +116 -0
- package/skills/global_config/editable-design/references/replay-contract.md +169 -0
- package/skills/global_config/editable-design/scripts/_browser.mjs +247 -0
- package/skills/global_config/editable-design/scripts/bake.mjs +87 -0
- package/skills/global_config/editable-design/scripts/build-replay.mjs +316 -0
- package/skills/global_config/editable-design/scripts/check-contract.mjs +293 -0
- package/skills/global_config/editable-design/scripts/check-fonts.sh +252 -0
- package/skills/global_config/editable-design/scripts/check-poster.sh +70 -0
- package/skills/global_config/editable-design/scripts/doctor.sh +78 -0
- package/skills/global_config/editable-design/scripts/explode.mjs +115 -0
- package/skills/global_config/editable-design/scripts/font-kit.mjs +187 -0
- package/skills/global_config/editable-design/scripts/import-asset.sh +23 -0
- package/skills/global_config/editable-design/scripts/init-poster.sh +64 -0
- package/skills/global_config/editable-design/scripts/install-font-kit.sh +13 -0
- package/skills/global_config/editable-design/scripts/package-lock.json +334 -0
- package/skills/global_config/editable-design/scripts/package.json +14 -0
- package/skills/global_config/editable-design/scripts/remove-chroma-key.py +201 -0
- package/skills/global_config/editable-design/scripts/render-poster.sh +202 -0
- package/skills/global_config/editable-design/scripts/trace.sh +159 -0
- package/skills/global_config/editable-design/scripts/verify-replay.mjs +97 -0
- package/skills/global_config/editable-design/scripts/verify.mjs +782 -0
- package/skills/global_config/editable-design/scripts/wire-editor.mjs +104 -0
- package/skills/global_config/editable-design/tests/fixtures/small-explode/index.html +86 -0
- package/skills/global_config/mcsc/SKILL.md +60 -0
- package/skills/global_config/plan-canvas/SKILL.md +8 -0
- package/skills/global_config/plan-canvas/scripts/lib/plan-canvas/server.js +31 -6
- package/skills/global_config/plan-canvas/scripts/plan-canvas.js +4 -2
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
# Skylos Guide — Diff & AST Security Scanning
|
|
2
|
+
|
|
3
|
+
Skylos is pillar 1 of the BDB Security Audit skill: a static security analyzer that
|
|
4
|
+
works at the **AST level** (it parses code structure, not text) and supports
|
|
5
|
+
**diff mode**, so it can gate exactly the lines a PR or staging area touches.
|
|
6
|
+
Its role is a pre-commit and Shipping quality-gate check — the automated half of
|
|
7
|
+
`bdb-security-audit`, before the human-driven checklists run.
|
|
8
|
+
|
|
9
|
+
This guide covers installation, running, gate integration, and interpretation.
|
|
10
|
+
Command surface below reflects the two core entrypoints (`skylos scan`,
|
|
11
|
+
`skylos diff`); **always confirm flags against `skylos --help` for the installed
|
|
12
|
+
version** — do not assume flags from this document alone.
|
|
13
|
+
|
|
14
|
+
## 1. Installation
|
|
15
|
+
|
|
16
|
+
Skylos ships as a Python CLI package. Install it as an isolated tool so it does
|
|
17
|
+
not pollute project environments:
|
|
18
|
+
|
|
19
|
+
```sh
|
|
20
|
+
# Preferred: isolated tool install
|
|
21
|
+
pipx install skylos
|
|
22
|
+
# or
|
|
23
|
+
uv tool install skylos
|
|
24
|
+
|
|
25
|
+
# Verify
|
|
26
|
+
command -v skylos
|
|
27
|
+
skylos --help
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
If `command -v skylos` finds nothing, the pillar is **absent**: report
|
|
31
|
+
"could not check" for the scan step. Never fake a pass, and never hardcode an
|
|
32
|
+
install location into scripts or skills — install via the standard tool manager
|
|
33
|
+
so it lands on `$PATH`.
|
|
34
|
+
|
|
35
|
+
## 2. Running
|
|
36
|
+
|
|
37
|
+
### Diff mode — PRs and staged changes (primary use)
|
|
38
|
+
|
|
39
|
+
Diff mode scans only what changed, which keeps the signal high and the runtime low:
|
|
40
|
+
|
|
41
|
+
```sh
|
|
42
|
+
skylos diff # staged / uncommitted changes vs the baseline
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
Typical review flow:
|
|
46
|
+
|
|
47
|
+
```sh
|
|
48
|
+
git checkout feature-branch
|
|
49
|
+
skylos diff # security view of the branch's changes
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
Run it before every push and as the first step of any PR security review.
|
|
53
|
+
Findings on diff mode are gate-relevant by default — the change introduced them.
|
|
54
|
+
|
|
55
|
+
### Full-tree mode — audits and baselines
|
|
56
|
+
|
|
57
|
+
```sh
|
|
58
|
+
skylos scan . # whole project, from the repo root
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
Use full scans for: first-time audits, release preparation, and re-scanning after
|
|
62
|
+
a dependency or architecture change. Full scans surface legacy findings the diff
|
|
63
|
+
never touched; triage those into tickets rather than blocking the current PR on them.
|
|
64
|
+
|
|
65
|
+
### Version pinning in CI
|
|
66
|
+
|
|
67
|
+
Pin the version in CI/workflows so a scanner upgrade cannot silently change gate
|
|
68
|
+
behavior mid-release. Update the pin deliberately, review the new findings, then
|
|
69
|
+
bump.
|
|
70
|
+
|
|
71
|
+
## 3. Integration into the Shipping Quality Gate
|
|
72
|
+
|
|
73
|
+
Position Skylos as a **blocking** gate step, after lint/typecheck and before the
|
|
74
|
+
release decision:
|
|
75
|
+
|
|
76
|
+
```text
|
|
77
|
+
Build → Lint → Typecheck → [Skylos security scan] → Tests → Reviewer → Shipping
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
Gate rules:
|
|
81
|
+
|
|
82
|
+
1. **Non-zero exit = gate failure.** A scanner that exits with findings must stop
|
|
83
|
+
the gate. Do not wrap the command in a way that swallows the exit code, and do
|
|
84
|
+
not `|| true` it. A discarded exit code is a swallowed failure.
|
|
85
|
+
2. **Empty output on a run that claims to have run is a failure**, not a pass —
|
|
86
|
+
the same rule as delegated CLIs: verify the finding list exists and names real
|
|
87
|
+
files, never trust a bare success status.
|
|
88
|
+
3. **Disposition every finding.** Each finding ends as `fixed`, `ticketed (link)`,
|
|
89
|
+
or `accepted risk (who accepted, why)`. An untriaged finding blocks the gate.
|
|
90
|
+
4. **"Could not check" is reported, not skipped.** If skylos is unavailable in the
|
|
91
|
+
gate environment, the gate report lists the step as `could not check` and the
|
|
92
|
+
release decision accounts for it — it must not read as green.
|
|
93
|
+
5. **Fixes re-scan.** After remediation, re-run the same scan command; the fix is
|
|
94
|
+
proven by the new scan output, not by the edit having been made.
|
|
95
|
+
|
|
96
|
+
## 4. Interpreting Findings: AST Security vs Style Lints
|
|
97
|
+
|
|
98
|
+
Skylos reads the AST, so its findings differ in kind from style-linter output.
|
|
99
|
+
Keep the two categories separate — they have different severities and different
|
|
100
|
+
dispositions:
|
|
101
|
+
|
|
102
|
+
| | Style lint | AST security finding |
|
|
103
|
+
|---|---|---|
|
|
104
|
+
| Source | Textual/format conventions | Code structure: data flow, call patterns, definitions |
|
|
105
|
+
| Examples | Naming, formatting, unused imports as a tidiness matter | Credential material in source, dangerous call patterns, dead code paths that retain secrets |
|
|
106
|
+
| Default severity | Advisory | Gate-blocking until dispositioned |
|
|
107
|
+
| Suppression | Fine, with a reason | Only via the scanner's explicit ignore mechanism **with an inline justification comment**; never by weakening lint config or filtering output |
|
|
108
|
+
|
|
109
|
+
Interpretation rules:
|
|
110
|
+
|
|
111
|
+
- **Hardcoded credential findings are always blocking.** Even test fixtures:
|
|
112
|
+
real-looking keys in tests train the habit and leak via public fixtures. Replace
|
|
113
|
+
with placeholders and rotate anything that was ever committed.
|
|
114
|
+
- **Dead-code findings are security-relevant, not cosmetic.** An unused function
|
|
115
|
+
that contains a connection string or an obsolete auth path is attack surface and
|
|
116
|
+
residue; removal is the fix, suppression is not.
|
|
117
|
+
- **Dangerous-call findings** (execution/serialization primitives reachable with
|
|
118
|
+
untrusted input) are validated against the checklist item that matches them —
|
|
119
|
+
see `references/audit-checklists.md` §3 and §4. The scanner says *where*;
|
|
120
|
+
the checklist decides *how bad, given the data flow*.
|
|
121
|
+
- **False positives:** suppress in the code at the finding site with a reason
|
|
122
|
+
(`# skylos: ignore — <why this input is trusted>`), never globally, never by
|
|
123
|
+
post-processing the report. A global filter hides tomorrow's real finding.
|
|
124
|
+
- **Findings vs the diff:** in diff mode, a finding means *this change* introduced
|
|
125
|
+
or reactivated the issue — treat it as belonging to the PR author's gate. A
|
|
126
|
+
finding that predates the branch is triaged out of the PR and ticketed.
|
|
127
|
+
|
|
128
|
+
## 5. Reporting to Reviewer/Shipping
|
|
129
|
+
|
|
130
|
+
The scan result enters the gate report as:
|
|
131
|
+
|
|
132
|
+
```text
|
|
133
|
+
Skylos: <pass | fail | could not check> (command: skylos diff, exit: N)
|
|
134
|
+
Findings:
|
|
135
|
+
- <file>:<line> — <rule/summary> — severity — disposition
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
One line per finding, every finding dispositioned, secrets redacted (name the
|
|
139
|
+
file and line, never the value).
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
# Xalgorix Bridge — Decoupled Automated Security Suite
|
|
2
|
+
|
|
3
|
+
Xalgorix is pillar 3 of the BDB Security Audit skill: an **external, decoupled**
|
|
4
|
+
automated security suite. The bridge is deliberately thin — this skill contains no
|
|
5
|
+
xalgorix installation logic, no baked-in endpoints, and no machine-specific
|
|
6
|
+
configuration. The suite is *discovered at runtime*; if it is not there, the audit
|
|
7
|
+
proceeds without it and reports the gap honestly.
|
|
8
|
+
|
|
9
|
+
## 1. Runtime Discovery
|
|
10
|
+
|
|
11
|
+
The bridge resolves the suite in exactly two ways, checked in this order:
|
|
12
|
+
|
|
13
|
+
```sh
|
|
14
|
+
# 1) Local CLI on PATH?
|
|
15
|
+
command -v xalgorix
|
|
16
|
+
|
|
17
|
+
# 2) Remote endpoint configured?
|
|
18
|
+
echo "${XALGORIX_URL:-}"
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
- If `command -v xalgorix` resolves, invoke the local CLI.
|
|
22
|
+
- Else, if `XALGORIX_URL` is set and non-empty, talk to the suite over HTTP at
|
|
23
|
+
that endpoint (authentication via whatever credential variable the operator
|
|
24
|
+
has already exported — the bridge reads it, never writes it).
|
|
25
|
+
- Else: **the suite is absent.** Report `xalgorix: could not check` in the gate
|
|
26
|
+
report and stop. Absence is a distinct reported state — never a silent pass,
|
|
27
|
+
never an error that aborts the whole audit.
|
|
28
|
+
|
|
29
|
+
Discovery happens **per invocation**, not at skill-load time and not in config
|
|
30
|
+
files. A machine that gains or loses the suite is picked up on the next run.
|
|
31
|
+
|
|
32
|
+
## 2. Decoupled Configuration Rules
|
|
33
|
+
|
|
34
|
+
These are hard rules; they are what keeps the bridge portable across machines:
|
|
35
|
+
|
|
36
|
+
1. **Never hardcode paths.** No absolute paths anywhere in skills, agents, CI
|
|
37
|
+
files, or docs — no home-directory-specific paths, no install prefixes.
|
|
38
|
+
Discovery is `$PATH` + environment variables, always.
|
|
39
|
+
2. **Environment over files.** Endpoint and credentials come from the process
|
|
40
|
+
environment (`XALGORIX_URL`, auth variables), supplied by the operator's shell
|
|
41
|
+
profile or the CI secret store. The bridge never reads credentials from files
|
|
42
|
+
in the repo and never writes them anywhere.
|
|
43
|
+
3. **No credential echo.** Logs and reports show that the bridge authenticated,
|
|
44
|
+
never the credential itself. Redact everything matching secret shapes in scan
|
|
45
|
+
output before it enters a report.
|
|
46
|
+
4. **Graceful absence.** Every code path that uses the bridge must handle all
|
|
47
|
+
three states: local CLI present, remote endpoint present, absent. Same rule as
|
|
48
|
+
the rest of AOS tooling: a check that could not run is `could not check`,
|
|
49
|
+
distinguishable from `pass`.
|
|
50
|
+
5. **Flag discipline.** CLI surface may change between suite versions. Verify
|
|
51
|
+
available commands and flags with `xalgorix --help` before scripting against
|
|
52
|
+
it; do not encode flags this document does not guarantee.
|
|
53
|
+
|
|
54
|
+
## 3. Running Automated Scans
|
|
55
|
+
|
|
56
|
+
Typical sweep, once discovery succeeded:
|
|
57
|
+
|
|
58
|
+
```sh
|
|
59
|
+
if command -v xalgorix >/dev/null 2>&1; then
|
|
60
|
+
xalgorix --help # confirm subcommands/flags of this version
|
|
61
|
+
xalgorix scan ./path-to-target # target = repo root or the module under audit
|
|
62
|
+
else
|
|
63
|
+
echo "xalgorix: could not check (not on PATH, XALGORIX_URL=${XALGORIX_URL:+set}${XALGORIX_URL:-unset})"
|
|
64
|
+
fi
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
Scope the scan to what the audit covers — the repo root for a release sweep, the
|
|
68
|
+
touched module for a change-driven sweep. Scan targets are passed as **relative
|
|
69
|
+
paths from the working directory** (or `$HOME`-anchored variables if a home-level
|
|
70
|
+
target is genuinely required), never absolute machine paths.
|
|
71
|
+
|
|
72
|
+
For the remote variant, the equivalent request goes to `XALGORIX_URL` with the
|
|
73
|
+
same scoping rule; verify the response contains an actual findings payload —
|
|
74
|
+
a 2xx status with an empty body is a failed check, not a clean one (the same
|
|
75
|
+
"verify the body, not the status" discipline as delegated CLIs).
|
|
76
|
+
|
|
77
|
+
Exit-code and evidence rules:
|
|
78
|
+
|
|
79
|
+
- Non-zero exit = scan found issues or failed to run; either way the report
|
|
80
|
+
records it, and findings-vs-error is distinguished before dispositioning.
|
|
81
|
+
- An unexplained empty result is treated as a failure of the check.
|
|
82
|
+
- Every finding must name `file:line` and a class; findings without locatable
|
|
83
|
+
evidence go back to the suite's own logs, not into the gate report as fact.
|
|
84
|
+
|
|
85
|
+
## 4. Reporting Findings to Reviewer/Shipping
|
|
86
|
+
|
|
87
|
+
Xalgorix findings enter the same consolidated report as Skylos and the
|
|
88
|
+
checklists, with the origin labeled so Reviewer/Shipping can weigh them:
|
|
89
|
+
|
|
90
|
+
```text
|
|
91
|
+
Xalgorix: <pass | fail | could not check> (source: PATH | XALGORIX_URL, exit: N)
|
|
92
|
+
Findings:
|
|
93
|
+
- <file>:<line> — <class/summary> — severity — disposition
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
Disposition flow:
|
|
97
|
+
|
|
98
|
+
1. **Deduplicate against Skylos and checklist results** — one defect found by two
|
|
99
|
+
pillars is one finding with two origins, not two findings.
|
|
100
|
+
2. **Map each class to its checklist section** in
|
|
101
|
+
`references/audit-checklists.md` so the fix follows the defensive guidance,
|
|
102
|
+
not just the scanner's hint.
|
|
103
|
+
3. **Disposition every finding**: `fixed`, `ticketed (link)`, or
|
|
104
|
+
`accepted risk (who, why)`. Blocking/high dispositions gate the release.
|
|
105
|
+
4. **Re-scan after fixes** and attach the second scan as evidence. The fix is
|
|
106
|
+
proven by the new output, never by the edit having been made.
|
|
107
|
+
|
|
108
|
+
The bridge reports; it does not decide. The gate verdict belongs to Reviewer and
|
|
109
|
+
Shipping, on evidence from all pillars — including the honest `could not check`
|
|
110
|
+
rows.
|
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: bdbdesignpro
|
|
3
|
-
description: "Use when choosing an animation engine, defining motion tokens, adding scroll effects or micro-interactions, or auditing motion for accessibility and performance
|
|
3
|
+
description: "Use when choosing an animation engine, defining motion tokens, adding scroll effects or micro-interactions, or auditing motion for accessibility and performance. Covers engine selection (GSAP, Motion.dev, Anime.js, React-Spring, Three.js, CSS Native), DTCG motion tokens, and the anti-slop/a11y quality gate."
|
|
4
4
|
category: design-ui-ux
|
|
5
5
|
user-invocable: true
|
|
6
6
|
risk: safe
|
|
7
7
|
date_added: "2026-09-05"
|
|
8
8
|
---
|
|
9
9
|
|
|
10
|
-
# `/bdbdesignpro` — Motion Engine Router &
|
|
10
|
+
# `/bdbdesignpro` — Motion Engine Router & Anti-Slop Gate
|
|
11
11
|
|
|
12
|
-
Routes creative-motion decisions to the right engine and enforces
|
|
12
|
+
Routes creative-motion decisions to the right engine and enforces motion quality policy (timing tokens, spring physics, accessibility, anti-slop). It does not teach any third-party library's API — that's the vendor's job, or an installed upstream skill's (see [engine-routing.md](./references/engine-routing.md)).
|
|
13
13
|
|
|
14
14
|
---
|
|
15
15
|
|
|
16
16
|
## 🎯 When to Use
|
|
17
17
|
- Choosing between GSAP, Motion.dev, Anime.js, React-Spring, Three.js, or CSS Native for a specific interaction.
|
|
18
|
-
- Defining or applying
|
|
18
|
+
- Defining or applying DTCG motion tokens (durations, easing, spring curves).
|
|
19
19
|
- Auditing existing motion for `prefers-reduced-motion`, layout thrashing, or cleanup leaks.
|
|
20
20
|
- Scaffolding the **Interaction & Motion Strategy** section of a `01_frontend_spec.md` during `/startcycle`.
|
|
21
21
|
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Motion & Design Tokens
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Standard timing, easing, and token architecture for animations built under `/bdbdesignpro`.
|
|
4
|
+
Tokens are brand-agnostic by default and bind dynamically to project-level design tokens (`DESIGN.md`).
|
|
4
5
|
|
|
5
6
|
---
|
|
6
7
|
|
|
@@ -10,48 +11,68 @@ Brand-locked timing, easing, and color tokens for any animation built under `/bd
|
|
|
10
11
|
|---|---|---|
|
|
11
12
|
| `--duration-fast` | `150ms` | Micro-interactions: hover, click, toggle |
|
|
12
13
|
| `--duration-normal` | `300ms` | State transitions: dialogs, drawers, tabs |
|
|
13
|
-
| `--duration-slow` | `400ms` | Upper bound for
|
|
14
|
-
| Scroll-driven narrative | scrubbed to viewport delta
|
|
14
|
+
| `--duration-slow` | `400ms` | Upper bound for standard UI transitions |
|
|
15
|
+
| Scroll-driven narrative | scrubbed to viewport delta | Bind directly to scroll progress, no fixed timer |
|
|
15
16
|
|
|
16
|
-
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## 🌊 Easing Curves
|
|
17
20
|
|
|
18
21
|
```css
|
|
19
|
-
|
|
20
|
-
--ease-
|
|
21
|
-
|
|
22
|
-
|
|
22
|
+
:root {
|
|
23
|
+
--ease-standard: cubic-bezier(0.16, 1, 0.3, 1);
|
|
24
|
+
--ease-in-out: cubic-bezier(0.65, 0, 0.35, 1);
|
|
25
|
+
--ease-spring: linear(0, 0.006, 0.025, 0.057, 0.1, 0.155, 0.22, 0.294, 0.375, 0.461,
|
|
26
|
+
0.549, 0.637, 0.723, 0.803, 0.875, 0.936, 0.984, 1.018, 1.037, 1.042,
|
|
27
|
+
1.035, 1.019, 0.999, 0.982, 0.971, 0.967, 0.97, 0.978, 0.989, 1);
|
|
28
|
+
}
|
|
23
29
|
```
|
|
24
30
|
|
|
25
|
-
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## 🎨 Neutral Token Architecture (DTCG Compatible)
|
|
26
34
|
|
|
27
35
|
```css
|
|
28
36
|
:root {
|
|
29
|
-
--
|
|
30
|
-
--
|
|
31
|
-
--
|
|
32
|
-
--
|
|
33
|
-
|
|
34
|
-
--
|
|
35
|
-
--
|
|
36
|
-
--
|
|
37
|
+
--surface-base: #09090b;
|
|
38
|
+
--surface-elevated: #18181b;
|
|
39
|
+
--surface-panel: #27272a;
|
|
40
|
+
--surface-border: #3f3f46;
|
|
41
|
+
|
|
42
|
+
--text-primary: #fafafa;
|
|
43
|
+
--text-secondary: #a1a1aa;
|
|
44
|
+
--text-muted: #71717a;
|
|
45
|
+
|
|
46
|
+
/* Accent tokens are populated by Phase 0 Brand Discovery (DESIGN.md) */
|
|
47
|
+
--accent-primary: var(--brand-accent, oklch(0.65 0.22 260));
|
|
48
|
+
--accent-muted: var(--brand-accent-muted, oklch(0.45 0.15 260));
|
|
49
|
+
--accent-contrast: #ffffff;
|
|
37
50
|
}
|
|
38
51
|
```
|
|
39
52
|
|
|
40
|
-
|
|
41
|
-
- **No mint/cyan** highlight color, anywhere
|
|
42
|
-
- **No neon rainbow gradients** or per-module rainbow theming
|
|
43
|
-
- **No heartbeat lines**, no ambient glow/aura halos
|
|
44
|
-
- **No heavy blur / glassmorphism**
|
|
45
|
-
- Accent (`#9b30c4` / `#51116F`) may appear on rings, pills, borders, or a single highlight stroke — **never as the largest shape's fill.** The largest shapes render in black or white.
|
|
53
|
+
---
|
|
46
54
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
55
|
+
## 🚫 Hard Prohibitions (Anti-Slop Motion Gate)
|
|
56
|
+
- **No arbitrary easing:** Never use `ease-in` for entering elements or uncontrolled linear motion.
|
|
57
|
+
- **No layout-thrashing animations:** Only animate `transform` and `opacity`. Never animate `width`, `height`, `margin`, or `top/left`.
|
|
58
|
+
- **No jitter / rubber-banding on scroll:** Use smooth interpolation or scrubbed triggers with proper cleanup.
|
|
59
|
+
- **Strict `prefers-reduced-motion` compliance:** Every animated component must provide an instant fallback:
|
|
60
|
+
```css
|
|
61
|
+
@media (prefers-reduced-motion: reduce) {
|
|
62
|
+
*, *::before, *::after {
|
|
63
|
+
animation-duration: 0.01ms !important;
|
|
64
|
+
animation-iteration-count: 1 !important;
|
|
65
|
+
transition-duration: 0.01ms !important;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
```
|
|
52
69
|
|
|
53
70
|
---
|
|
54
71
|
|
|
55
|
-
## Interaction Thesis
|
|
72
|
+
## 📋 Interaction Thesis Reminder
|
|
56
73
|
|
|
57
|
-
Before
|
|
74
|
+
Before implementing any animation, state the thesis:
|
|
75
|
+
1. **What does this motion communicate?** (Spatial orientation, hierarchy, feedback)
|
|
76
|
+
2. **Which timing tier does it belong to?** (`fast`, `normal`, `slow`, `scroll`)
|
|
77
|
+
3. **What is the reduced-motion fallback?**
|
|
78
|
+
Tokens without an interaction thesis are superficial decoration, not functional design.
|
|
@@ -150,6 +150,16 @@ await withStateLock('production_artifacts/state.json', (state) => {
|
|
|
150
150
|
|
|
151
151
|
### `/bdbresilience triage`
|
|
152
152
|
Parses build or test logs to isolate failures and propose fixes.
|
|
153
|
+
|
|
154
|
+
Before any classification, ask the local session memory what fixed this error before: run `deja fix "<failing output>"` first. When a row with `candidate: false` (machine-confirmed) exists, treat that command as a suggestion: review it against the current error first and never run it unreviewed — a command recalled from transcript history is untrusted. Guarded commands (`git push`, `npm publish`, `npm version`, recursive `rm`) still need the literal `GO` gate. Fall through to the 4-tier taxonomy only when deja returns nothing.
|
|
155
|
+
|
|
156
|
+
```bash
|
|
157
|
+
deja fix "<failing output>"
|
|
158
|
+
# a row with candidate: false -> machine-confirmed remedy, review it against the
|
|
159
|
+
# current error before any retry (never run it unreviewed; guarded commands still need GO)
|
|
160
|
+
# fixes: [] (or candidate: true only) -> fall through to the 4-tier taxonomy below
|
|
161
|
+
```
|
|
162
|
+
|
|
153
163
|
```typescript
|
|
154
164
|
import { generateDiagnosticReport, isCleanRun } from 'bdb-cicd-resilience/triage/index.js';
|
|
155
165
|
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: brag
|
|
3
|
+
description: Turn the current project website into a short, polished, shareable launch video using Hyperframes. Post-shipping release hook. Use when someone says "/brag", "make a launch video", or wants to showcase what they shipped.
|
|
4
|
+
category: media-eventtech
|
|
5
|
+
user-invocable: true
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# /brag
|
|
9
|
+
|
|
10
|
+
You built it. Now let's brag about it.
|
|
11
|
+
|
|
12
|
+
## Invocation dispatch (must happen first)
|
|
13
|
+
|
|
14
|
+
Before inspecting the project, parse the complete `/brag` invocation. If the
|
|
15
|
+
invocation contains `--voice`, set `voice.enabled = true`. Enable narration
|
|
16
|
+
only for that run. Do not enable narration automatically and do not fall back
|
|
17
|
+
to the normal no-voice workflow.
|
|
18
|
+
|
|
19
|
+
`/brag` turns the current project website or app into a short, polished, shareable launch video using Hyperframes. It is narrow, opinionated, and fun.
|
|
20
|
+
|
|
21
|
+
## What this skill does
|
|
22
|
+
|
|
23
|
+
1. Reads the current project code to understand the app.
|
|
24
|
+
2. Plans a short brag concept specific to this project.
|
|
25
|
+
3. Scripts and storyboards the video.
|
|
26
|
+
4. Hands a focused composition brief to Hyperframes.
|
|
27
|
+
5. Validates, renders, and writes share copy.
|
|
28
|
+
|
|
29
|
+
## Parsing the invocation
|
|
30
|
+
|
|
31
|
+
The user may invoke with natural language or flags:
|
|
32
|
+
|
|
33
|
+
```
|
|
34
|
+
/brag
|
|
35
|
+
/brag --tone chaotic
|
|
36
|
+
/brag --tone polished --format vertical
|
|
37
|
+
/brag this. Make it feel like a ridiculous startup launch.
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
Parse these options:
|
|
41
|
+
|
|
42
|
+
| Option | Values | Default |
|
|
43
|
+
|---|---|---|
|
|
44
|
+
| `--tone` | preset or freeform description | inferred |
|
|
45
|
+
| `--format` | `landscape`, `vertical`, `square` | `landscape` |
|
|
46
|
+
| `--duration` | seconds | auto (15-25s) |
|
|
47
|
+
| `--no-music` | flag | music on |
|
|
48
|
+
| `--no-sfx` | flag | sfx on |
|
|
49
|
+
| `--title` | string | inferred from project |
|
|
50
|
+
| `--voice` | flag | narration off |
|
|
51
|
+
|
|
52
|
+
Voice is opt-in. If `--voice` is present, use Kokoro via Hyperframes and do
|
|
53
|
+
not add any provider-selection logic. The voice workflow is intentionally
|
|
54
|
+
single-provider.
|
|
55
|
+
|
|
56
|
+
Tone can be a preset (`default`, `polished`, `yc-parody`, `chaotic`, `deadpan`, `cinematic`, `app-store`) or a creative direction such as "fake Series A launch from 2016", "museum exhibit", or "overproduced mobile game ad".
|
|
57
|
+
|
|
58
|
+
When the user gives freeform tone direction, map it to the nearest preset for pacing and structure, but preserve the user's direction in the plan and composition brief.
|
|
59
|
+
|
|
60
|
+
## Narration guidance
|
|
61
|
+
|
|
62
|
+
When `--voice` is enabled, write narration that complements the visuals, does
|
|
63
|
+
not simply read visible text, matches scene pacing, sounds natural and
|
|
64
|
+
conversational, and moves smoothly between scenes. Keep the script concise and
|
|
65
|
+
specific to the product so the voice feels like part of the edit rather than a
|
|
66
|
+
separate narration track.
|
|
67
|
+
|
|
68
|
+
---
|
|
69
|
+
|
|
70
|
+
## Output directory
|
|
71
|
+
|
|
72
|
+
By default, output goes to `brag-output/`. To avoid overwriting previous runs, use a timestamped directory:
|
|
73
|
+
|
|
74
|
+
```
|
|
75
|
+
brag-output-2026-05-04-143022/
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
Use a timestamp when:
|
|
79
|
+
- The user explicitly asks for a new run without overriding previous results
|
|
80
|
+
- A `brag-output/` directory already exists in the project
|
|
81
|
+
|
|
82
|
+
Generate the timestamp at the start of the run (`YYYY-MM-DD-HHmmss`) and use it consistently for all output paths in that run: plan, brief, composition, render, and share copy.
|
|
83
|
+
|
|
84
|
+
## Skill directory
|
|
85
|
+
|
|
86
|
+
`<skill-dir>` is the directory containing this `SKILL.md`. Claude Code prints it as "Base directory for this skill" when the skill loads; for other agents it's wherever the skill was installed. Bundled assets are under `<skill-dir>/assets/` and scripts under `<skill-dir>/scripts/`. Don't guess an install path: a plugin install, a `~/.claude/skills/` copy, and this repo all put it somewhere different.
|
|
87
|
+
|
|
88
|
+
---
|
|
89
|
+
|
|
90
|
+
## Step 1: Inspect the project
|
|
91
|
+
|
|
92
|
+
**Read:** [references/step-1-inspect.md](references/step-1-inspect.md)
|
|
93
|
+
|
|
94
|
+
Scan the project directory and extract the information needed to plan the brag video.
|
|
95
|
+
|
|
96
|
+
**Gate:** You can answer all 9 questions in the brag planning rubric.
|
|
97
|
+
|
|
98
|
+
---
|
|
99
|
+
|
|
100
|
+
## Step 2: Plan and storyboard
|
|
101
|
+
|
|
102
|
+
**Read:** [references/step-2-plan.md](references/step-2-plan.md)
|
|
103
|
+
|
|
104
|
+
Write `<output-dir>/brag-plan.md` (where `<output-dir>` is `brag-output/` or the timestamped variant chosen above). Answer the planning rubric. Commit to a creative angle. Write the beat-by-beat storyboard including scenes, text, timing, transitions, and SFX cues.
|
|
105
|
+
|
|
106
|
+
When music is selected, include a compact `Music cue guidance` section: read the bundled track's cue preset from `<skill-dir>/assets/music/cues/` if present, otherwise note cues will be detected at composition time (any track now supports beat sync — see `references/audio.md`). Cue metadata is optional timing guidance only: story, readability, pacing, and product clarity stay primary.
|
|
107
|
+
|
|
108
|
+
**Gate:** `<output-dir>/brag-plan.md` exists with a full storyboard. Scene durations sum to 15–25 seconds.
|
|
109
|
+
|
|
110
|
+
---
|
|
111
|
+
|
|
112
|
+
## Step 3: Hand off to Hyperframes
|
|
113
|
+
|
|
114
|
+
**Read:** The Hyperframes domain skills — `hyperframes-core`, `hyperframes-animation`, `hyperframes-creative`, `hyperframes-keyframes`, `hyperframes-cli`. /brag is its own workflow: do not enter the `hyperframes` entry-point intent interview or route into its generic promo / launch-video workflow.
|
|
115
|
+
**Read:** [references/step-3-compose.md](references/step-3-compose.md)
|
|
116
|
+
**Read:** [references/audio.md](references/audio.md)
|
|
117
|
+
|
|
118
|
+
Write the composition brief and use Hyperframes to create the video implementation in `<output-dir>/composition/`.
|
|
119
|
+
|
|
120
|
+
`/brag` owns the product angle, source material, storyboard, tone, format, audio selection, music cue guidance, and delivery expectations. Hyperframes owns the concrete composition structure, exact animation timing, animation mechanics, runtime choices, linting rules, and render workflow.
|
|
121
|
+
|
|
122
|
+
**Gate:** `npx hyperframes check` passes with zero errors inside `<output-dir>/composition/` (the single browser gate before render — see hyperframes-cli for what it audits).
|
|
123
|
+
|
|
124
|
+
---
|
|
125
|
+
|
|
126
|
+
## Step 4: Validate, render, and deliver
|
|
127
|
+
|
|
128
|
+
**Read:** [references/step-4-deliver.md](references/step-4-deliver.md)
|
|
129
|
+
|
|
130
|
+
Validate, preview, render to `<output-dir>/brag.mp4`, pick the best poster frame into `<output-dir>/brag.jpg`, bake that poster as the video's frame 0 so it's the idle thumbnail everywhere, and write `<output-dir>/share-copy.txt`.
|
|
131
|
+
|
|
132
|
+
**Gate:** `<output-dir>/brag.mp4` exists. A best-frame poster `<output-dir>/brag.jpg` is picked (not an arbitrary frame) and baked as frame 0 of `brag.mp4`. Share copy is written.
|
|
133
|
+
|
|
134
|
+
---
|
|
135
|
+
|
|
136
|
+
## Tone system
|
|
137
|
+
|
|
138
|
+
Seven tone presets ship with `/brag`. Each changes scripting energy, pacing, typography personality, and transition style. Presets are defaults, not limits.
|
|
139
|
+
|
|
140
|
+
Full definitions: [references/tones.md](references/tones.md)
|
|
141
|
+
|
|
142
|
+
| Tone | Energy | One-liner |
|
|
143
|
+
|---|---|---|
|
|
144
|
+
| `default` | Playful, clean, postable | The good-vibes default |
|
|
145
|
+
| `polished` | Serious, elegant | For projects that are not jokes |
|
|
146
|
+
| `yc-parody` | Deadpan startup energy | Fake seriousness applied to absurd projects |
|
|
147
|
+
| `chaotic` | Fast, loud, aggressive | Over-the-top and unhinged |
|
|
148
|
+
| `deadpan` | Calm, dry, understated | The joke is that nothing is a joke |
|
|
149
|
+
| `cinematic` | Dramatic, trailer-scale | Big motion, bigger claims |
|
|
150
|
+
| `app-store` | Smooth, feature-card clean | Corporate but not boring |
|
|
151
|
+
|
|
152
|
+
Always allow a freeform creative direction to refine or override the preset.
|
|
153
|
+
|
|
154
|
+
---
|
|
155
|
+
|
|
156
|
+
## Creative laws
|
|
157
|
+
|
|
158
|
+
These apply to every brag video regardless of tone.
|
|
159
|
+
|
|
160
|
+
**Short.** 15–25 seconds. Not one second more without a reason.
|
|
161
|
+
|
|
162
|
+
**Readable.** Keep the pace high through motion and cuts, never by flashing text. Every line a viewer must read holds long enough to read it (short label ~0.8s settled; a sentence ~0.3s per word). Fast-in, then hold — never fast-in, then gone.
|
|
163
|
+
|
|
164
|
+
**Specific.** The video must feel like it was made for this exact project, not any project.
|
|
165
|
+
|
|
166
|
+
**Show the thing.** At least one scene must display actual UI, copy, or a key visual from the product. No abstract filler.
|
|
167
|
+
|
|
168
|
+
**No generic SaaS language.** "Streamline your workflow" is banned. Use the project's actual copy and claims.
|
|
169
|
+
|
|
170
|
+
**The hook is everything.** The first 2 seconds determine whether someone keeps watching. Plan the hook before anything else.
|
|
171
|
+
|
|
172
|
+
**Funny earns its place.** Humor should come from the project's absurdity, not from trying to be funny.
|
|
173
|
+
|
|
174
|
+
**Pattern:**
|
|
175
|
+
```
|
|
176
|
+
Hook (2-3s) → Reveal (2-4s) → 2-3 sharp highlights (5-12s) → Punchline/outro (2-4s)
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
Adapt this. Not every project needs exactly 3 highlights. The pattern is a starting shape, not a template.
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# Music
|
|
2
|
+
|
|
3
|
+
Bundled tracks:
|
|
4
|
+
|
|
5
|
+
- `happy-beats-business-moves-vol-1-by-ende-dot-app.mp3` (2:44)
|
|
6
|
+
- `happy-beats-business-moves-vol-9-by-ende-dot-app.mp3` (1:54)
|
|
7
|
+
- `happy-beats-business-moves-vol-10-by-ende-dot-app.mp3` (1:00)
|
|
8
|
+
- `happy-beats-business-moves-vol-11-by-ende-dot-app.mp3` (1:28)
|
|
9
|
+
- `happy-beats-business-moves-vol-12-by-ende-dot-app.mp3` (1:58)
|
|
10
|
+
|
|
11
|
+
Source: [ende.app](https://ende.app/en) "Happy Beats / Business Moves" series.
|
|
12
|
+
|
|
13
|
+
Cue presets live in `cues/`:
|
|
14
|
+
|
|
15
|
+
- `<track-stem>.music-cues.json` contains full-track beat and strong-cue metadata.
|
|
16
|
+
- `<track-stem>.music-cues.md` contains compact planning guidance for the first 20-25 seconds.
|
|
17
|
+
|
|
18
|
+
These files are generated by `skills/brag/scripts/analyze_music_cues.py` and are intended for `/brag` planning. Normal skill runs should read the presets when present and continue without beat/cue sync when they are missing.
|
|
19
|
+
|
|
20
|
+
Before publishing or redistributing the skill, verify and document the exact music license terms alongside these files.
|