codymaster 7.0.1 → 7.0.3
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/CHANGELOG.md +64 -0
- package/README.md +117 -2
- package/dist/agent/codex.js +73 -21
- package/dist/agent-dispatch.js +63 -48
- package/dist/cli/commands/brain.js +18 -0
- package/dist/cli/commands/design-studio.js +1 -1
- package/dist/cm-suggest.js +3 -3
- package/dist/dashboard-project-summary.js +9 -0
- package/dist/dashboard.js +11 -5
- package/dist/execution-analyzer.js +9 -1
- package/dist/judge.js +16 -15
- package/dist/mcp-context-server.js +45 -23
- package/dist/mcp-skills-tools.js +2 -2
- package/dist/skill-chain.js +26 -3
- package/dist/skill-token-report.js +105 -0
- package/dist/sprint-pipeline.js +3 -3
- package/dist/ui/onboarding.js +3 -4
- package/dist/utils/design-taste.js +1 -1
- package/dist/utils/output-compress.js +8 -0
- package/package.json +3 -2
- package/public/dashboard/app.js +40 -13
- package/public/dashboard/index.html +190 -5
- package/public/dashboard/style.css +1 -1
- package/scripts/build-skills.mjs +36 -2
- package/scripts/mcp-bridge.js +41 -24
- package/scripts/pack-plugin.mjs +206 -0
- package/skills/cm-ads-tracker/SKILL.md +401 -0
- package/skills/cm-ads-tracker/evals/evals.json +55 -0
- package/skills/cm-ads-tracker/references/gtm-architecture.md +321 -0
- package/skills/cm-ads-tracker/references/industry-events.md +294 -0
- package/skills/cm-ads-tracker/references/platforms-api.md +238 -0
- package/skills/cm-ads-tracker/templates/capi-payload.md +79 -0
- package/skills/cm-ads-tracker/templates/datalayer-push.js +104 -0
- package/skills/cm-ads-tracker/templates/gtm-variables.js +56 -0
- package/skills/cm-auto-publisher/SKILL.md +81 -0
- package/skills/cm-booking-calendar/SKILL.md +521 -0
- package/skills/cm-booking-calendar/references/industry-patterns.md +527 -0
- package/skills/cm-booking-calendar/templates/booking-form.css +626 -0
- package/skills/cm-booking-calendar/templates/booking-form.html +477 -0
- package/skills/cm-booking-calendar/templates/calendar-engine.js +419 -0
- package/skills/cm-booking-calendar/templates/calendar-export.js +395 -0
- package/skills/cm-booking-calendar/templates/reminder-config.js +629 -0
- package/skills/cm-brainstorm-idea/SKILL.md +5 -5
- package/skills/cm-code-review/SKILL.md +2 -2
- package/skills/cm-codeintell/SKILL.md +47 -580
- package/skills/cm-codeintell/references/integration-workflows.md +23 -0
- package/skills/cm-codeintell/references/layer-0-skeleton.md +54 -0
- package/skills/cm-codeintell/references/layer-1-codegraph.md +58 -0
- package/skills/cm-codeintell/references/layer-2-architecture.md +31 -0
- package/skills/cm-codeintell/references/layer-3-context-builder.md +32 -0
- package/skills/cm-content-factory/.content-factory-state.json +132 -0
- package/skills/cm-content-factory/.git 2/logs/refs/heads/main +1 -0
- package/skills/cm-content-factory/.git 2/logs/refs/remotes/origin/main +1 -0
- package/skills/cm-content-factory/.git 2/objects/02/fb0956734b5f8ba3f918b7defd04a89cfe0076 +0 -0
- package/skills/cm-content-factory/.git 2/objects/08/1e129d75dc6feac6c02037272e6bd1a04e3324 +0 -0
- package/skills/cm-content-factory/.git 2/objects/0c/5393416f3c5e01c9a655a802bff0dd52f76f0a +0 -0
- package/skills/cm-content-factory/.git 2/objects/10/0b9be46978a946a77188f68be725098a122001 +0 -0
- package/skills/cm-content-factory/.git 2/objects/10/cf041167fc9843610eb3d90259ef3396315fdc +0 -0
- package/skills/cm-content-factory/.git 2/objects/12/5e19538dd6e1338ffe74f6c4c165b00435bf48 +0 -0
- package/skills/cm-content-factory/.git 2/objects/16/a9b9d0088d5c1347628b45a2620b479d8ad57c +0 -0
- package/skills/cm-content-factory/.git 2/objects/17/8c2a9ef93c33ae4eec9d58e82321f9229843a1 +0 -0
- package/skills/cm-content-factory/.git 2/objects/25/397ae41d09104d763bdcac2695209d85cdea89 +0 -0
- package/skills/cm-content-factory/.git 2/objects/2f/a836b7947f2d458e1f639788bf4bb0983a3305 +0 -0
- package/skills/cm-content-factory/.git 2/objects/3a/baaaf0a1c0909c0828335791557125fba911e0 +0 -0
- package/skills/cm-content-factory/.git 2/objects/42/2924221b81f5ce3c4e4daac9a64a24f9b01f9a +0 -0
- package/skills/cm-content-factory/.git 2/objects/42/ec0ce707447dc11446a34c9995fb8533801731 +0 -0
- package/skills/cm-content-factory/.git 2/objects/46/e43ce92866d56ce74b1d750db307cfe6154a15 +0 -0
- package/skills/cm-content-factory/.git 2/objects/48/5e41b633c63f55b8277bcc59f44f67681f671a +0 -0
- package/skills/cm-content-factory/.git 2/objects/49/49c596a3a89fa240642acd95dd3258e261eb09 +0 -0
- package/skills/cm-content-factory/.git 2/objects/50/9d42d8412ef8eaf7f7e138476bac2e4d10ce60 +0 -0
- package/skills/cm-content-factory/.git 2/objects/55/0c8c389d981b463ef849aeb792d8be3ccb6ec8 +0 -0
- package/skills/cm-content-factory/.git 2/objects/5d/82d3b18410cdda3ace3677436f0cb599dbe2d2 +0 -0
- package/skills/cm-content-factory/.git 2/objects/60/0617c58e871a38b33bf29e282d132bb3c381ad +0 -0
- package/skills/cm-content-factory/.git 2/objects/6a/8369a99c687b7245c92ffaf0e0f0dab9014504 +0 -0
- package/skills/cm-content-factory/.git 2/objects/79/bea435d40ab531c1aaf6be0432c6a5b7aaed21 +0 -0
- package/skills/cm-content-factory/.git 2/objects/7e/5ebd79251c2f14e4aceb86c74b6b6daae6b500 +0 -0
- package/skills/cm-content-factory/.git 2/objects/81/98a822a60178d6d5023ddb3e222cddf048742e +0 -0
- package/skills/cm-content-factory/.git 2/objects/86/0a0e1943dfe53411d2e499a1f16f46a96ef758 +0 -0
- package/skills/cm-content-factory/.git 2/objects/86/971fb55fdc081fdbae52376f0f13e57a4e9b04 +0 -0
- package/skills/cm-content-factory/.git 2/objects/88/b89dd609a0a03f8d4fe8bfde20d5b8fc1d326d +0 -0
- package/skills/cm-content-factory/.git 2/objects/90/8737edb6b7809e32cc01590b4e08ba42a9d40d +0 -0
- package/skills/cm-content-factory/.git 2/objects/93/d5a8a9a7d4fb7f11491cb596a6880528725118 +0 -0
- package/skills/cm-content-factory/.git 2/objects/98/46a2ab81d0c3b3eb00ef88fc56989aa7e9f316 +0 -0
- package/skills/cm-content-factory/.git 2/objects/9b/d8dd1e49cf274eaf9c555f3ab39dce7af5715e +0 -0
- package/skills/cm-content-factory/.git 2/objects/a1/13329fb0cec96ae78b222d33a24c3b5bc7fa1f +0 -0
- package/skills/cm-content-factory/.git 2/objects/a9/e6effe626e8a3aea3a8fc3364b492191c6e7d0 +0 -0
- package/skills/cm-content-factory/.git 2/objects/ad/6de7e48d9782cca9353d1ff0aa1aab7fe1df85 +0 -0
- package/skills/cm-content-factory/.git 2/objects/af/54ae316f771ff692e299ffcd8bf2f06b413b59 +0 -0
- package/skills/cm-content-factory/.git 2/objects/b0/4cb8b0b00dad633e731c1472161419e738d674 +0 -0
- package/skills/cm-content-factory/.git 2/objects/b3/094abb0b9ed46419b269e4a4e36a459690e3b0 +0 -0
- package/skills/cm-content-factory/.git 2/objects/b9/435c5d4baac2cfc5c83009ddd27b46b60db5f1 +0 -0
- package/skills/cm-content-factory/.git 2/objects/ba/5da17dbaec5ec2dcfdfd126aead518d1171d5c +0 -0
- package/skills/cm-content-factory/.git 2/objects/c0/bf58703aa258ba5dd63083bebaec8f223d844c +0 -0
- package/skills/cm-content-factory/.git 2/objects/c4/701a34edf1fc1bad58ccc57bd03f9426acb59a +0 -0
- package/skills/cm-content-factory/.git 2/objects/c7/5ccce9a4e5cc74d9b3174550cf6d993ca43638 +0 -0
- package/skills/cm-content-factory/.git 2/objects/c7/710d59b5a35b0f1f0a0399386643a0bd94c929 +0 -0
- package/skills/cm-content-factory/.git 2/objects/d1/fe58237112e953e5fec52da22cf38e08be3df9 +5 -0
- package/skills/cm-content-factory/.git 2/objects/d2/2bbe9fd2f74c95bc5583e803f5e435f1e2cd86 +0 -0
- package/skills/cm-content-factory/.git 2/objects/d7/e72852ea2bff74581dbf247d400120086229f4 +0 -0
- package/skills/cm-content-factory/.git 2/objects/d8/d4c3b5553e4fd72807e1d4b49ef07d9ef3ac35 +0 -0
- package/skills/cm-content-factory/.git 2/objects/dc/75050c2876f6a02ae2a53a3c886f395b622977 +0 -0
- package/skills/cm-content-factory/.git 2/objects/ee/e8546f95acec500187c08a28a8b9ee02db0dec +0 -0
- package/skills/cm-content-factory/.git 2/objects/ef/263c059208b416c2146434f10cb2b9fabcba16 +0 -0
- package/skills/cm-content-factory/.git 2/objects/f3/ae597e84d9a59b88acd21c99bde2eaf686d785 +0 -0
- package/skills/cm-content-factory/.git 2/objects/f3/f6f5673c821d3d8e76fa267a9e882e7a5387ea +0 -0
- package/skills/cm-content-factory/.git 2/objects/f9/6e6d0ad02624dd11d5848594d056caef7a5e8b +0 -0
- package/skills/cm-content-factory/.git 2/objects/ff/278988fc1edf0db3abcf18de795f4cc0b4f3e1 +0 -0
- package/skills/cm-content-factory/.git 2/refs/heads/main +1 -0
- package/skills/cm-content-factory/.git 2/refs/remotes/origin/main +1 -0
- package/skills/cm-content-factory/.pytest_cache 2/v/cache/nodeids +76 -0
- package/skills/cm-content-factory/.pytest_cache 2/v/cache/stepwise +1 -0
- package/skills/cm-content-factory/AGENTS.md +61 -0
- package/skills/cm-content-factory/CLAUDE.md +63 -0
- package/skills/cm-content-factory/CURSOR.md +43 -0
- package/skills/cm-content-factory/Content Factory.zip +0 -0
- package/skills/cm-content-factory/SKILL.md +416 -0
- package/skills/cm-content-factory/cf +313 -0
- package/skills/cm-content-factory/config.schema.json +397 -0
- package/skills/cm-content-factory/dashboard/app.js +556 -0
- package/skills/cm-content-factory/dashboard/index.html +397 -0
- package/skills/cm-content-factory/dashboard/style.css +1211 -0
- package/skills/cm-content-factory/examples/01-real-estate.config.json +146 -0
- package/skills/cm-content-factory/examples/02-personal-finance.config.json +146 -0
- package/skills/cm-content-factory/examples/03-health-wellness.config.json +147 -0
- package/skills/cm-content-factory/examples/04-saas-software.config.json +147 -0
- package/skills/cm-content-factory/examples/05-legal-services.config.json +147 -0
- package/skills/cm-content-factory/examples/06-insurance.config.json +146 -0
- package/skills/cm-content-factory/examples/07-ecommerce-dropship.config.json +146 -0
- package/skills/cm-content-factory/examples/08-online-education.config.json +147 -0
- package/skills/cm-content-factory/examples/09-crypto-defi.config.json +147 -0
- package/skills/cm-content-factory/examples/10-beauty-skincare.config.json +147 -0
- package/skills/cm-content-factory/examples/11-home-services.config.json +146 -0
- package/skills/cm-content-factory/examples/12-dental-clinic.config.json +147 -0
- package/skills/cm-content-factory/examples/13-pet-care.config.json +147 -0
- package/skills/cm-content-factory/examples/14-travel-hospitality.config.json +147 -0
- package/skills/cm-content-factory/examples/15-ai-automation.config.json +147 -0
- package/skills/cm-content-factory/examples/16-wedding-events.config.json +147 -0
- package/skills/cm-content-factory/examples/17-fitness-coaching.config.json +148 -0
- package/skills/cm-content-factory/examples/18-cybersecurity.config.json +147 -0
- package/skills/cm-content-factory/examples/19-food-restaurant.config.json +148 -0
- package/skills/cm-content-factory/examples/20-solar-energy.config.json +147 -0
- package/skills/cm-content-factory/examples/fitness-blog.config.json +116 -0
- package/skills/cm-content-factory/examples/tech-blog.config.json +107 -0
- package/skills/cm-content-factory/extensions/EXTENSION_GUIDE.md +72 -0
- package/skills/cm-content-factory/extensions/hooks.py +126 -0
- package/skills/cm-content-factory/extensions/openclaw_adapter.py +132 -0
- package/skills/cm-content-factory/landing/docs/content/changelog.md +36 -0
- package/skills/cm-content-factory/landing/docs/content/deployment.md +46 -0
- package/skills/cm-content-factory/landing/docs/content/execution-flow.md +67 -0
- package/skills/cm-content-factory/landing/docs/content/openspace.md +27 -0
- package/skills/cm-content-factory/landing/docs/content/openviking.md +33 -0
- package/skills/cm-content-factory/landing/docs/content/use-cases.md +26 -0
- package/skills/cm-content-factory/landing/docs/content/v5-intro.md +28 -0
- package/skills/cm-content-factory/landing/docs/index.html +240 -0
- package/skills/cm-content-factory/landing/index.html +680 -0
- package/skills/cm-content-factory/landing/script.js +143 -0
- package/skills/cm-content-factory/landing/style.css +1216 -0
- package/skills/cm-content-factory/landing/translations.js +508 -0
- package/skills/cm-content-factory/logs/events.jsonl +11 -0
- package/skills/cm-content-factory/profiles/_template.profile.json +231 -0
- package/skills/cm-content-factory/profiles/finance.profile.json +278 -0
- package/skills/cm-content-factory/profiles/legal.profile.json +263 -0
- package/skills/cm-content-factory/profiles/medical-research.profile.json +321 -0
- package/skills/cm-content-factory/profiles/technology.profile.json +275 -0
- package/skills/cm-content-factory/scripts/agent_dispatcher.py +266 -0
- package/skills/cm-content-factory/scripts/audit.py +106 -0
- package/skills/cm-content-factory/scripts/dashboard_server.py +225 -0
- package/skills/cm-content-factory/scripts/deploy.py +146 -0
- package/skills/cm-content-factory/scripts/extract.py +132 -0
- package/skills/cm-content-factory/scripts/landing_generator.py +459 -0
- package/skills/cm-content-factory/scripts/memory.py +521 -0
- package/skills/cm-content-factory/scripts/monetize.py +239 -0
- package/skills/cm-content-factory/scripts/pipeline.py +357 -0
- package/skills/cm-content-factory/scripts/plan.py +163 -0
- package/skills/cm-content-factory/scripts/publish.py +145 -0
- package/skills/cm-content-factory/scripts/research.py +337 -0
- package/skills/cm-content-factory/scripts/scaffold.py +464 -0
- package/skills/cm-content-factory/scripts/scoreboard.py +336 -0
- package/skills/cm-content-factory/scripts/seo.py +90 -0
- package/skills/cm-content-factory/scripts/state_manager.py +320 -0
- package/skills/cm-content-factory/scripts/token_manager.py +268 -0
- package/skills/cm-content-factory/scripts/validate.py +221 -0
- package/skills/cm-content-factory/scripts/wizard.py +329 -0
- package/skills/cm-content-factory/scripts/write.py +93 -0
- package/skills/cm-content-factory/sites/docs-site/src/assets/houston.webp +0 -0
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/architecture.md +90 -0
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/data-flow.md +54 -0
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/deployment.md +38 -0
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/flows/index.md +65 -0
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/flows/lc-content-lifecycle.md +48 -0
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/flows/seq-write-mode.md +39 -0
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/flows/uj-first-batch.md +42 -0
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/flows/wf-content-pipeline.md +51 -0
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/flows/wf-learning-cycle.md +52 -0
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/getting-started/configuration.md +86 -0
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/getting-started/installation.md +80 -0
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/getting-started/intro.md +58 -0
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/index.md +102 -0
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/jtbd/index.md +45 -0
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/jtbd/optimize-seo.md +29 -0
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/jtbd/scale-content-production.md +55 -0
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/jtbd/standardize-quality.md +29 -0
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/personas/buyer-cmo-huong.md +41 -0
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/personas/buyer-content-lead-khoa.md +40 -0
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/personas/index.md +56 -0
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/personas/user-content-manager-lan.md +46 -0
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/personas/user-seo-minh.md +45 -0
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/personas/user-writer-tu.md +45 -0
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/sop/content-pipeline.md +108 -0
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/sop/index.md +22 -0
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/sop/memory-system.md +52 -0
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/sop/seo-optimization.md +58 -0
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/sop/troubleshooting-guide.md +92 -0
- package/skills/cm-content-factory/sites/docs-site/src/styles/custom.css +575 -0
- package/skills/cm-content-factory/tests/conftest.py +66 -0
- package/skills/cm-content-factory/tests/test_agent_dispatcher.py +125 -0
- package/skills/cm-content-factory/tests/test_memory.py +128 -0
- package/skills/cm-content-factory/tests/test_pipeline.py +107 -0
- package/skills/cm-content-factory/tests/test_research.py +56 -0
- package/skills/cm-content-factory/tests/test_state_manager.py +131 -0
- package/skills/cm-content-factory/tests/test_token_manager.py +110 -0
- package/skills/cm-content-factory/tests/test_wizard.py +121 -0
- package/skills/cm-continuity/SKILL.md +49 -480
- package/skills/cm-continuity/references/cm-uri-scheme.md +23 -0
- package/skills/cm-continuity/references/continuity-template.md +48 -0
- package/skills/cm-continuity/references/mcp-context-server.md +27 -0
- package/skills/cm-continuity/references/memory-architecture.md +26 -0
- package/skills/cm-continuity/references/memory-audit.md +18 -0
- package/skills/cm-continuity/references/session-protocol.md +31 -0
- package/skills/cm-continuity/references/storage-formats.md +20 -0
- package/skills/cm-cro-methodology/SKILL.md +290 -0
- package/skills/cm-cro-methodology/references/COPYWRITING.md +178 -0
- package/skills/cm-cro-methodology/references/OBJECTIONS.md +135 -0
- package/skills/cm-cro-methodology/references/PERSUASION.md +158 -0
- package/skills/cm-cro-methodology/references/RESEARCH.md +220 -0
- package/skills/cm-cro-methodology/references/funnel-analysis.md +365 -0
- package/skills/cm-cro-methodology/references/testing-methodology.md +330 -0
- package/skills/cm-design-system/SKILL.md +5 -6
- package/skills/cm-execution/SKILL.md +61 -379
- package/skills/cm-execution/references/mode-a-batch.md +28 -0
- package/skills/cm-execution/references/mode-b-subagent.md +46 -0
- package/skills/cm-execution/references/mode-c-parallel.md +39 -0
- package/skills/cm-execution/references/mode-d-rarv.md +62 -0
- package/skills/cm-execution/references/mode-e-triz-parallel.md +53 -0
- package/skills/cm-execution/references/mode-f-party.md +61 -0
- package/skills/cm-execution/references/persona-dispatch.md +22 -0
- package/skills/cm-execution/references/security-rules.md +47 -0
- package/skills/cm-google-form/SKILL.md +266 -0
- package/skills/cm-google-form/templates/apps-script.js +55 -0
- package/skills/cm-google-form/templates/form-markup.html +110 -0
- package/skills/cm-google-form/templates/form-submit.js +201 -0
- package/skills/cm-google-form/templates/toast.css +152 -0
- package/skills/cm-growth-hacking/SKILL.md +282 -0
- package/skills/cm-growth-hacking/bottom-sheet-engine.md +261 -0
- package/skills/cm-growth-hacking/calendar-integration.md +264 -0
- package/skills/cm-growth-hacking/references/engagement-patterns.md +346 -0
- package/skills/cm-growth-hacking/templates/bottom-sheet.css +528 -0
- package/skills/cm-growth-hacking/templates/bottom-sheet.js +269 -0
- package/skills/cm-growth-hacking/templates/calendar-cta.js +213 -0
- package/skills/cm-growth-hacking/templates/tracking-events.js +211 -0
- package/skills/cm-growth-hacking/templates/trigger-manager.js +254 -0
- package/skills/cm-growth-hacking/tracking-events.md +246 -0
- package/skills/cm-growth-hacking/trigger-system.md +342 -0
- package/skills/cm-how-it-work/SKILL.md +8 -9
- package/skills/cm-identity-guard/SKILL.md +4 -4
- package/skills/cm-jtbd/SKILL.md +98 -0
- package/skills/cm-notebooklm/SKILL.md +156 -0
- package/skills/cm-notebooklm/references/command_reference.md +94 -0
- package/skills/cm-notebooklm/references/workflows.md +60 -0
- package/skills/cm-notebooklm/resources/knowledge_sources.md +106 -0
- package/skills/cm-notebooklm/scripts/brain-sync.sh +453 -0
- package/skills/cm-notebooklm/scripts/graduate_wisdom.py +101 -0
- package/skills/cm-planning/SKILL.md +3 -3
- package/skills/cm-project-bootstrap/SKILL.md +2 -2
- package/skills/cm-quality-gate/SKILL.md +1 -1
- package/skills/cm-readit/SKILL.md +289 -0
- package/skills/cm-readit/audio-player.md +206 -0
- package/skills/cm-readit/examples/blog-reader.js +352 -0
- package/skills/cm-readit/examples/voice-cro.js +390 -0
- package/skills/cm-readit/tts-engine.md +262 -0
- package/skills/cm-readit/ui-patterns.md +362 -0
- package/skills/cm-readit/voice-cro.md +223 -0
- package/skills/cm-safe-deploy/SKILL.md +80 -510
- package/skills/cm-safe-deploy/references/gate-0-5-security-scan.md +31 -0
- package/skills/cm-safe-deploy/references/gate-0-secret-hygiene.md +68 -0
- package/skills/cm-safe-deploy/references/gate-1-syntax.md +23 -0
- package/skills/cm-safe-deploy/references/gate-2-test-suite.md +28 -0
- package/skills/cm-safe-deploy/references/gate-3-i18n.md +19 -0
- package/skills/cm-safe-deploy/references/gate-4-5-build-dist.md +16 -0
- package/skills/cm-safe-deploy/references/gate-6-deploy-smoke.md +18 -0
- package/skills/cm-safe-deploy/references/rollback.md +17 -0
- package/skills/cm-safe-deploy/references/setup-new-project.md +20 -0
- package/skills/cm-skill-index/SKILL.md +15 -15
- package/skills/cm-start/SKILL.md +1 -1
- package/skills/cm-tdd/SKILL.md +51 -356
- package/skills/cm-tdd/references/bugfix-example.md +15 -0
- package/skills/cm-tdd/references/rationalizations.md +20 -0
- package/skills/cm-tdd/references/red-green-refactor.md +33 -0
- package/skills/cm-tdd/references/stuck-debugging.md +18 -0
- package/skills/cm-tdd/references/test-quality.md +19 -0
- package/skills/cm-ux-master/SKILL.md +368 -115
- package/skills/profiles/core.txt +1 -4
- package/skills/profiles/design.txt +1 -2
- package/skills/profiles/full.txt +10 -16
- package/skills/profiles/growth.txt +9 -9
- package/skills/profiles/top35.json +13 -13
- package/skills/cm-conductor-worktrees/SKILL.archive.md +0 -28
- package/skills/cm-conductor-worktrees/SKILL.md +0 -26
- package/skills/cm-dashboard/SKILL.archive.md +0 -15
- package/skills/cm-dashboard/SKILL.md +0 -26
- package/skills/cm-dashboard/ui/app.js +0 -1278
- package/skills/cm-dashboard/ui/index.html +0 -206
- package/skills/cm-dashboard/ui/style.css +0 -440
- package/skills/cm-design-studio/SKILL.archive.md +0 -34
- package/skills/cm-design-studio/SKILL.md +0 -26
- package/skills/cm-engineering-meta/SKILL.archive.md +0 -73
- package/skills/cm-engineering-meta/SKILL.md +0 -26
- package/skills/cm-git-worktrees/SKILL.archive.md +0 -157
- package/skills/cm-git-worktrees/SKILL.md +0 -26
- package/skills/cm-post-deploy-canary/SKILL.archive.md +0 -22
- package/skills/cm-post-deploy-canary/SKILL.md +0 -26
- package/skills/cm-qa-visual-cli/SKILL.archive.md +0 -22
- package/skills/cm-qa-visual-cli/SKILL.md +0 -26
- package/skills/cm-second-opinion-cli/SKILL.archive.md +0 -23
- package/skills/cm-second-opinion-cli/SKILL.md +0 -26
- package/skills/cm-secret-shield/SKILL.archive.md +0 -580
- package/skills/cm-secret-shield/SKILL.md +0 -26
- package/skills/cm-security-gate/SKILL.archive.md +0 -239
- package/skills/cm-security-gate/SKILL.md +0 -26
- package/skills/cm-skill-health/SKILL.archive.md +0 -83
- package/skills/cm-skill-health/SKILL.md +0 -26
- package/skills/cm-skill-mastery/SKILL.archive.md +0 -156
- package/skills/cm-skill-mastery/SKILL.md +0 -26
- package/skills/cm-skill-search/SKILL.archive.md +0 -49
- package/skills/cm-skill-search/SKILL.md +0 -26
- package/skills/cm-skill-share/SKILL.archive.md +0 -58
- package/skills/cm-skill-share/SKILL.md +0 -26
- package/skills/cm-test-gate/SKILL.archive.md +0 -245
- package/skills/cm-test-gate/SKILL.md +0 -26
- package/skills/cm-ui-preview/SKILL.archive.md +0 -153
- package/skills/cm-ui-preview/SKILL.md +0 -26
|
@@ -0,0 +1,342 @@
|
|
|
1
|
+
# Trigger System
|
|
2
|
+
|
|
3
|
+
> Khi nào hiện bottom sheet? Trigger system quyết định.
|
|
4
|
+
> Hỗ trợ: scroll, time, exit-intent, click, return-visitor, interaction.
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## 🎯 Trigger Types
|
|
9
|
+
|
|
10
|
+
| Type | Description | Best For |
|
|
11
|
+
|------|-------------|----------|
|
|
12
|
+
| `scroll` | User scrolls past X% of page | Service pages, blog content |
|
|
13
|
+
| `time` | X seconds after page load | Homepage, landing pages |
|
|
14
|
+
| `exit` | Mouse moves toward browser chrome (desktop) | Lead capture, promo |
|
|
15
|
+
| `click` | User clicks specific element | Manual CTA buttons |
|
|
16
|
+
| `return` | Returning visitor (cookie-based) | Re-engagement, loyalty |
|
|
17
|
+
| `interaction` | User completes N interactions | Surveys after using tool |
|
|
18
|
+
| `dual` | Time + Scroll combined (both must fire) | Audio CRO, booking nudge |
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## ⚙️ TriggerManager Architecture
|
|
23
|
+
|
|
24
|
+
```javascript
|
|
25
|
+
class TriggerManager {
|
|
26
|
+
constructor(config) {
|
|
27
|
+
this.config = config;
|
|
28
|
+
this.triggered = false;
|
|
29
|
+
this.listeners = [];
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
init() {
|
|
33
|
+
if (this.isDismissed()) return;
|
|
34
|
+
if (this.respectsReducedMotion()) return;
|
|
35
|
+
|
|
36
|
+
const type = this.config.trigger.type;
|
|
37
|
+
|
|
38
|
+
switch (type) {
|
|
39
|
+
case 'scroll': this.initScroll(); break;
|
|
40
|
+
case 'time': this.initTime(); break;
|
|
41
|
+
case 'exit': this.initExitIntent(); break;
|
|
42
|
+
case 'click': this.initClick(); break;
|
|
43
|
+
case 'return': this.initReturnVisitor(); break;
|
|
44
|
+
case 'interaction': this.initInteraction(); break;
|
|
45
|
+
case 'dual': this.initDual(); break;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
fire() {
|
|
50
|
+
if (this.triggered) return;
|
|
51
|
+
this.triggered = true;
|
|
52
|
+
this.cleanup();
|
|
53
|
+
if (typeof this.config.onTrigger === 'function') {
|
|
54
|
+
this.config.onTrigger();
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
cleanup() {
|
|
59
|
+
this.listeners.forEach(({ el, event, fn }) => el.removeEventListener(event, fn));
|
|
60
|
+
this.listeners = [];
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
destroy() {
|
|
64
|
+
this.cleanup();
|
|
65
|
+
this.triggered = true;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
---
|
|
71
|
+
|
|
72
|
+
## 📜 Scroll Trigger
|
|
73
|
+
|
|
74
|
+
```javascript
|
|
75
|
+
initScroll() {
|
|
76
|
+
const threshold = this.config.trigger.value || 0.3; // 30% default
|
|
77
|
+
const delay = this.config.trigger.delay || 0;
|
|
78
|
+
|
|
79
|
+
const onScroll = () => {
|
|
80
|
+
const scrollPct = window.scrollY /
|
|
81
|
+
(document.documentElement.scrollHeight - window.innerHeight);
|
|
82
|
+
|
|
83
|
+
if (scrollPct >= threshold) {
|
|
84
|
+
if (delay > 0) {
|
|
85
|
+
setTimeout(() => this.fire(), delay);
|
|
86
|
+
} else {
|
|
87
|
+
this.fire();
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
};
|
|
91
|
+
|
|
92
|
+
window.addEventListener('scroll', onScroll, { passive: true });
|
|
93
|
+
this.listeners.push({ el: window, event: 'scroll', fn: onScroll });
|
|
94
|
+
|
|
95
|
+
// Check immediately (user may already be scrolled)
|
|
96
|
+
onScroll();
|
|
97
|
+
}
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
**Recommended thresholds:**
|
|
101
|
+
|
|
102
|
+
| Page Type | Scroll % | Rationale |
|
|
103
|
+
|-----------|----------|-----------|
|
|
104
|
+
| Homepage | 30% | After hero + intro |
|
|
105
|
+
| Service page | 25% | After service description |
|
|
106
|
+
| Blog/article | 40% | After first section |
|
|
107
|
+
| Product page | 20% | After product image |
|
|
108
|
+
|
|
109
|
+
---
|
|
110
|
+
|
|
111
|
+
## ⏱️ Time Trigger
|
|
112
|
+
|
|
113
|
+
```javascript
|
|
114
|
+
initTime() {
|
|
115
|
+
const delay = this.config.trigger.value || 15000; // 15s default
|
|
116
|
+
|
|
117
|
+
const timer = setTimeout(() => this.fire(), delay);
|
|
118
|
+
|
|
119
|
+
// Store for cleanup
|
|
120
|
+
this._timer = timer;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
// Override cleanup to clear timer
|
|
124
|
+
cleanup() {
|
|
125
|
+
super.cleanup();
|
|
126
|
+
if (this._timer) clearTimeout(this._timer);
|
|
127
|
+
}
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
**Recommended delays:**
|
|
131
|
+
|
|
132
|
+
| Page Type | Delay | Rationale |
|
|
133
|
+
|-----------|-------|-----------|
|
|
134
|
+
| Homepage | 20-25s | Let user explore first |
|
|
135
|
+
| Landing page | 10-15s | Faster engagement needed |
|
|
136
|
+
| Service page | 15-20s | After reading key info |
|
|
137
|
+
| Blog | 25-30s | Don't interrupt reading |
|
|
138
|
+
|
|
139
|
+
---
|
|
140
|
+
|
|
141
|
+
## 🚪 Exit Intent Trigger (Desktop Only)
|
|
142
|
+
|
|
143
|
+
```javascript
|
|
144
|
+
initExitIntent() {
|
|
145
|
+
// Only works on desktop (mouse-based)
|
|
146
|
+
if ('ontouchstart' in window) return;
|
|
147
|
+
|
|
148
|
+
const onMouseLeave = (e) => {
|
|
149
|
+
// Mouse moved above viewport (toward browser chrome)
|
|
150
|
+
if (e.clientY <= 0) {
|
|
151
|
+
this.fire();
|
|
152
|
+
}
|
|
153
|
+
};
|
|
154
|
+
|
|
155
|
+
document.addEventListener('mouseleave', onMouseLeave);
|
|
156
|
+
this.listeners.push({ el: document, event: 'mouseleave', fn: onMouseLeave });
|
|
157
|
+
}
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
**Mobile alternative:** Use `time` or `scroll` trigger instead. Exit intent doesn't exist on touch devices.
|
|
161
|
+
|
|
162
|
+
**Enhancement — debounce:**
|
|
163
|
+
|
|
164
|
+
```javascript
|
|
165
|
+
// Prevent rapid-fire on mouse-near-top
|
|
166
|
+
let exitTimeout;
|
|
167
|
+
const onMouseLeave = (e) => {
|
|
168
|
+
if (e.clientY <= 0) {
|
|
169
|
+
clearTimeout(exitTimeout);
|
|
170
|
+
exitTimeout = setTimeout(() => this.fire(), 300);
|
|
171
|
+
}
|
|
172
|
+
};
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
---
|
|
176
|
+
|
|
177
|
+
## 🖱️ Click Trigger
|
|
178
|
+
|
|
179
|
+
```javascript
|
|
180
|
+
initClick() {
|
|
181
|
+
const selector = this.config.trigger.value; // CSS selector
|
|
182
|
+
|
|
183
|
+
const elements = document.querySelectorAll(selector);
|
|
184
|
+
elements.forEach(el => {
|
|
185
|
+
const onClick = (e) => {
|
|
186
|
+
e.preventDefault();
|
|
187
|
+
this.fire();
|
|
188
|
+
};
|
|
189
|
+
el.addEventListener('click', onClick);
|
|
190
|
+
this.listeners.push({ el, event: 'click', fn: onClick });
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
**Use case:** Manual CTA buttons that open bottom sheets.
|
|
196
|
+
|
|
197
|
+
```html
|
|
198
|
+
<button data-trigger="booking-sheet">📅 Đặt Lịch</button>
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
```javascript
|
|
202
|
+
new TriggerManager({
|
|
203
|
+
trigger: { type: 'click', value: '[data-trigger="booking-sheet"]' },
|
|
204
|
+
onTrigger: () => bookingSheet.show()
|
|
205
|
+
});
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
---
|
|
209
|
+
|
|
210
|
+
## 🔄 Return Visitor Trigger
|
|
211
|
+
|
|
212
|
+
```javascript
|
|
213
|
+
initReturnVisitor() {
|
|
214
|
+
const VISIT_KEY = 'eng_visit_count';
|
|
215
|
+
const minVisits = this.config.trigger.value || 2; // minimum visits to trigger
|
|
216
|
+
|
|
217
|
+
try {
|
|
218
|
+
let visits = parseInt(localStorage.getItem(VISIT_KEY) || '0');
|
|
219
|
+
visits++;
|
|
220
|
+
localStorage.setItem(VISIT_KEY, visits.toString());
|
|
221
|
+
|
|
222
|
+
if (visits >= minVisits) {
|
|
223
|
+
// Add time delay so page loads first
|
|
224
|
+
setTimeout(() => this.fire(), this.config.trigger.delay || 3000);
|
|
225
|
+
}
|
|
226
|
+
} catch { /* localStorage blocked */ }
|
|
227
|
+
}
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
---
|
|
231
|
+
|
|
232
|
+
## 🎮 Interaction Trigger
|
|
233
|
+
|
|
234
|
+
```javascript
|
|
235
|
+
initInteraction() {
|
|
236
|
+
const { selector, minCount } = this.config.trigger.value;
|
|
237
|
+
// e.g., { selector: '.checklist input[type=checkbox]', minCount: 3 }
|
|
238
|
+
|
|
239
|
+
const elements = document.querySelectorAll(selector);
|
|
240
|
+
|
|
241
|
+
const checkCount = () => {
|
|
242
|
+
const interacted = document.querySelectorAll(selector + ':checked').length;
|
|
243
|
+
if (interacted >= minCount) {
|
|
244
|
+
this.fire();
|
|
245
|
+
}
|
|
246
|
+
};
|
|
247
|
+
|
|
248
|
+
elements.forEach(el => {
|
|
249
|
+
el.addEventListener('change', checkCount);
|
|
250
|
+
this.listeners.push({ el, event: 'change', fn: checkCount });
|
|
251
|
+
});
|
|
252
|
+
}
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
**Use case:** After user checks 3+ symptoms → show "Đặt lịch khám" sheet.
|
|
256
|
+
|
|
257
|
+
---
|
|
258
|
+
|
|
259
|
+
## 🔀 Dual Trigger (Time + Scroll)
|
|
260
|
+
|
|
261
|
+
Both conditions must be met before firing:
|
|
262
|
+
|
|
263
|
+
```javascript
|
|
264
|
+
initDual() {
|
|
265
|
+
let timeReady = false;
|
|
266
|
+
let scrollReady = false;
|
|
267
|
+
|
|
268
|
+
const tryFire = () => {
|
|
269
|
+
if (timeReady && scrollReady) this.fire();
|
|
270
|
+
};
|
|
271
|
+
|
|
272
|
+
// Time leg
|
|
273
|
+
const delay = this.config.trigger.value?.time || 15000;
|
|
274
|
+
setTimeout(() => { timeReady = true; tryFire(); }, delay);
|
|
275
|
+
|
|
276
|
+
// Scroll leg
|
|
277
|
+
const threshold = this.config.trigger.value?.scroll || 0.25;
|
|
278
|
+
const onScroll = () => {
|
|
279
|
+
const pct = window.scrollY /
|
|
280
|
+
(document.documentElement.scrollHeight - window.innerHeight);
|
|
281
|
+
if (pct >= threshold) {
|
|
282
|
+
scrollReady = true;
|
|
283
|
+
window.removeEventListener('scroll', onScroll);
|
|
284
|
+
tryFire();
|
|
285
|
+
}
|
|
286
|
+
};
|
|
287
|
+
window.addEventListener('scroll', onScroll, { passive: true });
|
|
288
|
+
this.listeners.push({ el: window, event: 'scroll', fn: onScroll });
|
|
289
|
+
onScroll();
|
|
290
|
+
}
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
---
|
|
294
|
+
|
|
295
|
+
## 💾 Session Management
|
|
296
|
+
|
|
297
|
+
```javascript
|
|
298
|
+
// Check if user dismissed this engagement
|
|
299
|
+
isDismissed() {
|
|
300
|
+
const key = this.config.session?.dismissKey || 'eng_dismissed';
|
|
301
|
+
const storage = this.config.session?.storage === 'localStorage'
|
|
302
|
+
? localStorage : sessionStorage;
|
|
303
|
+
try { return storage.getItem(key) === '1'; }
|
|
304
|
+
catch { return false; }
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
// Mark as dismissed
|
|
308
|
+
setDismissed() {
|
|
309
|
+
const key = this.config.session?.dismissKey || 'eng_dismissed';
|
|
310
|
+
const storage = this.config.session?.storage === 'localStorage'
|
|
311
|
+
? localStorage : sessionStorage;
|
|
312
|
+
try { storage.setItem(key, '1'); }
|
|
313
|
+
catch { /* noop */ }
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
// Respect prefers-reduced-motion
|
|
317
|
+
respectsReducedMotion() {
|
|
318
|
+
return window.matchMedia('(prefers-reduced-motion: reduce)').matches;
|
|
319
|
+
}
|
|
320
|
+
```
|
|
321
|
+
|
|
322
|
+
### Storage Strategy
|
|
323
|
+
|
|
324
|
+
| Behavior | Storage | Result |
|
|
325
|
+
|----------|---------|--------|
|
|
326
|
+
| Show once per tab session | `sessionStorage` | Resets on browser close |
|
|
327
|
+
| Show once per device forever | `localStorage` | Persistent |
|
|
328
|
+
| Show once per day | `localStorage` + timestamp check | Custom expiry |
|
|
329
|
+
|
|
330
|
+
---
|
|
331
|
+
|
|
332
|
+
## ❌ Anti-Patterns
|
|
333
|
+
|
|
334
|
+
| ❌ Don't | ✅ Do |
|
|
335
|
+
|----------|------|
|
|
336
|
+
| Trigger popup on page load without delay | Minimum 10s or 20% scroll |
|
|
337
|
+
| Use exit-intent on mobile | Fallback to scroll/time trigger |
|
|
338
|
+
| Trigger on checkout/payment pages | Exclude conversion-critical pages |
|
|
339
|
+
| Trigger multiple sheets at once | Queue or prioritize |
|
|
340
|
+
| Ignore `prefers-reduced-motion` | Skip trigger for such users |
|
|
341
|
+
| Trigger every page visit | Respect session dismiss state |
|
|
342
|
+
| Use `setInterval` for scroll check | Use passive scroll event listener |
|
|
@@ -72,7 +72,7 @@ The **CodyMaster (CM)** kit transforms ideas into production code through 13 spe
|
|
|
72
72
|
- `cm-tdd`: Red-Green-Refactor cycle. No production code without a failing test first.
|
|
73
73
|
- `cm-execution`: Execute plans intelligently (Manual, Parallel, or Subagent mode).
|
|
74
74
|
- `cm-project-bootstrap`: For new projects — setup repo, i18n, SEO, and deploy pipeline from Day 0.
|
|
75
|
-
- `cm-
|
|
75
|
+
- `cm-execution`: Isolate different work items to avoid state mixing.
|
|
76
76
|
|
|
77
77
|
---
|
|
78
78
|
|
|
@@ -104,7 +104,7 @@ The **CodyMaster (CM)** kit transforms ideas into production code through 13 spe
|
|
|
104
104
|
| `cm-tdd` | Strict Red-Green-Refactor TDD — no code without failing test first. |
|
|
105
105
|
| `cm-debugging` | Systematic 5-phase error investigation (root cause first). |
|
|
106
106
|
| `cm-quality-gate` | 6-gate verification: static analysis → blind review → ship. |
|
|
107
|
-
| `cm-
|
|
107
|
+
| `cm-quality-gate` | Setup and enforce the verification gate before claiming "done". |
|
|
108
108
|
| `cm-code-review` | Manage PR lifecycle: request → receive feedback → complete branch. |
|
|
109
109
|
| `cm-codeintell` | AST knowledge graph + architecture diagrams + smart context (30% fewer tokens). |
|
|
110
110
|
|
|
@@ -113,9 +113,9 @@ The **CodyMaster (CM)** kit transforms ideas into production code through 13 spe
|
|
|
113
113
|
|-------|-----------------|
|
|
114
114
|
| `cm-safe-deploy` | Multi-gate deploy pipeline with rollback strategy. |
|
|
115
115
|
| `cm-identity-guard` | Verify account before push/deploy to prevent wrong-project incidents. |
|
|
116
|
-
| `cm-
|
|
116
|
+
| `cm-execution` | Isolate feature work in separate workspaces/batches — no state mixing. |
|
|
117
117
|
| `cm-terminal` | Safe terminal execution with progress logging and error capture. |
|
|
118
|
-
| `cm-
|
|
118
|
+
| `cm-safe-deploy` | Defense-in-depth: pre-commit hooks, repo scanning, token lifecycle. |
|
|
119
119
|
| `cm-safe-i18n` | Safe multi-language management with multi-pass batching and 8-gate audit. |
|
|
120
120
|
|
|
121
121
|
### 🎨 Product
|
|
@@ -125,7 +125,7 @@ The **CodyMaster (CM)** kit transforms ideas into production code through 13 spe
|
|
|
125
125
|
| `cm-brainstorm-idea` | Strategic analysis gate: 9 Windows + Double Diamond → 2-3 qualified options. |
|
|
126
126
|
| `cm-planning` | Brainstorm intent → write implementation plan → coordinate execution. |
|
|
127
127
|
| `cm-ux-master` | 48 UX Laws + 37 Design Tests + Figma/Stitch + BM25 semantic design search. |
|
|
128
|
-
| `cm-
|
|
128
|
+
| `cm-design-system` | Live UI concept generation via design-token and Stitch/Open Design workflows. |
|
|
129
129
|
| `cm-dockit` | Generate complete knowledge bases, SOPs, and API docs from codebase. |
|
|
130
130
|
| `cm-readit` | Web audio engine: TTS reader, MP3 audio player, Voice CRO trigger system. |
|
|
131
131
|
| `cm-jtbd` | JTBD customer discovery: Switch Interview → Canvas → Opportunity Scoring. |
|
|
@@ -142,7 +142,7 @@ The **CodyMaster (CM)** kit transforms ideas into production code through 13 spe
|
|
|
142
142
|
|-------|-----------------|
|
|
143
143
|
| `cm-execution` | Execute plans: Manual / Parallel / Subagent / RARV batch modes. |
|
|
144
144
|
| `cm-continuity` | Working memory protocol: read at session start, update at session end. |
|
|
145
|
-
| `cm-skill-
|
|
145
|
+
| `cm-skill-index` | Meta-skill: when to invoke which skill and how to discover the right one. |
|
|
146
146
|
| `cm-skill-chain` | Compose skills into automated multi-step pipelines (5 built-in chains). |
|
|
147
147
|
| `cm-skill-index` | Progressive disclosure index — 90% token savings on skill discovery. |
|
|
148
148
|
| `cm-deep-search` | Semantic search via qmd for large codebases (>200 src / >50 docs files). |
|
|
@@ -153,8 +153,7 @@ The **CodyMaster (CM)** kit transforms ideas into production code through 13 spe
|
|
|
153
153
|
| Skill | Primary Function |
|
|
154
154
|
|-------|-----------------|
|
|
155
155
|
| `cm-start` | Orchestrate full workflow from objective to production code. |
|
|
156
|
-
| `cm-
|
|
157
|
-
| `cm-status` | Ultra-concise 1-2 sentence progress summary (what's done, what's next). |
|
|
156
|
+
| `cm-status` | Ultra-concise 1-2 sentence progress summary; pair with `cm dashboard` for visuals. |
|
|
158
157
|
|
|
159
158
|
## 🚀 Autonomous Workflow System
|
|
160
159
|
|
|
@@ -200,6 +199,6 @@ There are 2 ways to use CodyMaster: **Fully autonomous (Via Workflows)** or **Ma
|
|
|
200
199
|
4. **Test Before Code:** RED → GREEN → REFACTOR. No exceptions (`cm-tdd`).
|
|
201
200
|
5. **Evidence Over Claims:** Only trust terminal/test results output, not AI "saying" it's done.
|
|
202
201
|
6. **Deploy via Gates:** 8 gates must pass sequentially. Any gate fails = STOP (`cm-safe-deploy`).
|
|
203
|
-
7. **Safe Secrets:** Never commit secrets. Pre-commit hooks protect every push (`cm-
|
|
202
|
+
7. **Safe Secrets:** Never commit secrets. Pre-commit hooks protect every push (`cm-safe-deploy`).
|
|
204
203
|
8. **Parallel Power:** Use parallel execution for i18n or multi-bug fixes (`cm-execution`).
|
|
205
204
|
9. **Working Memory:** Read CONTINUITY.md at session start, update at session end (`cm-continuity`).
|
|
@@ -295,7 +295,7 @@ git config user.email "dev@workdomain.com"
|
|
|
295
295
|
## Phase 5: Token Lifecycle Management 🔄
|
|
296
296
|
|
|
297
297
|
> **NEW — Secrets don't just need to be hidden. They need to be ROTATED.**
|
|
298
|
-
> **Full rotation playbooks in `cm-
|
|
298
|
+
> **Full rotation playbooks now live in `cm-safe-deploy`.**
|
|
299
299
|
|
|
300
300
|
### Rotation Schedule
|
|
301
301
|
|
|
@@ -321,7 +321,7 @@ npm run deploy:staging
|
|
|
321
321
|
# 4. Verify: test staging URL
|
|
322
322
|
```
|
|
323
323
|
|
|
324
|
-
> For emergency rotation (leaked secret), see `cm-
|
|
324
|
+
> For emergency rotation (leaked secret), see the emergency rotation guidance in `cm-safe-deploy`.
|
|
325
325
|
|
|
326
326
|
---
|
|
327
327
|
|
|
@@ -397,8 +397,8 @@ npm run deploy
|
|
|
397
397
|
|-------|------|
|
|
398
398
|
| `cm-project-bootstrap` | Identity lock is Phase 0 of every new project |
|
|
399
399
|
| `cm-safe-deploy` | Gate 0 secret hygiene checks wrangler.jsonc |
|
|
400
|
-
| `cm-
|
|
401
|
-
| `cm-
|
|
400
|
+
| `cm-quality-gate` | Phase 4 verification and secret hygiene checks |
|
|
401
|
+
| `cm-safe-deploy` | Token lifecycle and release safety extend identity management |
|
|
402
402
|
|
|
403
403
|
## The Bottom Line
|
|
404
404
|
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: cm-jtbd
|
|
3
|
+
description: "Customer discovery framework using Jobs-To-Be-Done theory — uncover the functional, social, and emotional jobs customers hire products to do. Produces JTBD canvases with job statements, outcome metrics, and competing solutions. Use alongside cm-brainstorm-idea for evidence-based product decisions."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Jobs-To-Be-Done — Customer Discovery Framework
|
|
7
|
+
|
|
8
|
+
> **Understand the job, not the customer.**
|
|
9
|
+
> People don't buy products — they hire them to get a job done.
|
|
10
|
+
|
|
11
|
+
## When to Use
|
|
12
|
+
|
|
13
|
+
- Before designing a new feature or product
|
|
14
|
+
- When existing features aren't converting or being used
|
|
15
|
+
- Alongside `cm-brainstorm-idea` for deep customer context
|
|
16
|
+
- User mentions: "customer discovery", "JTBD", "what do customers want", "product-market fit", "why are users churning"
|
|
17
|
+
|
|
18
|
+
## The JTBD Framework
|
|
19
|
+
|
|
20
|
+
### Job Statement Formula
|
|
21
|
+
|
|
22
|
+
```
|
|
23
|
+
When [SITUATION], I want to [MOTIVATION], so I can [EXPECTED OUTCOME]
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
### Three Job Dimensions
|
|
27
|
+
|
|
28
|
+
| Dimension | Definition | Example |
|
|
29
|
+
|-----------|-----------|---------|
|
|
30
|
+
| **Functional** | The core task to accomplish | "Get from A to B quickly" |
|
|
31
|
+
| **Social** | How the person wants to be perceived | "Be seen as a reliable professional" |
|
|
32
|
+
| **Emotional** | How the person wants to feel | "Feel confident in my decision" |
|
|
33
|
+
|
|
34
|
+
## Process
|
|
35
|
+
|
|
36
|
+
### Phase 1: Job Discovery (Interviews)
|
|
37
|
+
|
|
38
|
+
1. Recruit 5-8 recent customers (ideally within 90 days of purchase)
|
|
39
|
+
2. Use the Switch Interview technique — ask about the moment they decided to switch/buy
|
|
40
|
+
3. Key questions:
|
|
41
|
+
- "Walk me through the day you decided to [buy/switch/start using X]"
|
|
42
|
+
- "What were you doing before that solution existed?"
|
|
43
|
+
- "What was the first thing you tried? Why didn't that work?"
|
|
44
|
+
- "What almost stopped you from switching?"
|
|
45
|
+
4. Record patterns: triggers → anxiety → progress → outcomes
|
|
46
|
+
|
|
47
|
+
### Phase 2: JTBD Canvas
|
|
48
|
+
|
|
49
|
+
For each major job discovered, complete the canvas:
|
|
50
|
+
|
|
51
|
+
```
|
|
52
|
+
JOB STATEMENT:
|
|
53
|
+
When [situation], I want to [motivation], so I can [outcome]
|
|
54
|
+
|
|
55
|
+
FUNCTIONAL DIMENSION: [core task]
|
|
56
|
+
SOCIAL DIMENSION: [perception goal]
|
|
57
|
+
EMOTIONAL DIMENSION: [feeling goal]
|
|
58
|
+
|
|
59
|
+
FORCES PUSHING TO HIRE:
|
|
60
|
+
(+) Push: [what makes them switch from current solution]
|
|
61
|
+
(+) Pull: [what attracts them to new solution]
|
|
62
|
+
|
|
63
|
+
FORCES RESISTING HIRE:
|
|
64
|
+
(-) Anxiety: [fears about new solution]
|
|
65
|
+
(-) Habit: [attachment to old solution]
|
|
66
|
+
|
|
67
|
+
COMPETING SOLUTIONS CURRENTLY HIRED:
|
|
68
|
+
1. [direct competitor or workaround]
|
|
69
|
+
2. [indirect solution]
|
|
70
|
+
3. [do-nothing option]
|
|
71
|
+
|
|
72
|
+
OUTCOME METRICS (how customer measures success):
|
|
73
|
+
- Speed: [e.g., "get answer in <5 minutes"]
|
|
74
|
+
- Accuracy: [e.g., "zero errors in the output"]
|
|
75
|
+
- Effort: [e.g., "no manual steps required"]
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
### Phase 3: Opportunity Scoring
|
|
79
|
+
|
|
80
|
+
Rate each outcome metric:
|
|
81
|
+
- **Importance** (1-10): How important is this outcome to the customer?
|
|
82
|
+
- **Satisfaction** (1-10): How satisfied are they with current solutions?
|
|
83
|
+
- **Opportunity score** = Importance + max(Importance − Satisfaction, 0)
|
|
84
|
+
|
|
85
|
+
Scores ≥ 15 = underserved outcomes → highest priority to address.
|
|
86
|
+
|
|
87
|
+
## Output
|
|
88
|
+
|
|
89
|
+
Save JTBD canvas to `docs/jtbd/jtbd-canvas-[date].md`.
|
|
90
|
+
|
|
91
|
+
## Integration
|
|
92
|
+
|
|
93
|
+
| Skill | Relationship |
|
|
94
|
+
|-------|-------------|
|
|
95
|
+
| `cm-brainstorm-idea` | UPSTREAM: JTBD feeds into strategic analysis |
|
|
96
|
+
| `cm-planning` | DOWNSTREAM: Validated jobs inform feature plans |
|
|
97
|
+
| `cm-cro-methodology` | COMPLEMENT: JTBD objections → CRO objection handling |
|
|
98
|
+
| `cm-dockit` | OUTPUT: JTBD canvases are a document type in DocKit |
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: cm-notebooklm
|
|
3
|
+
description: "Sync high-value dev knowledge (skills, decisions, lessons) into Google NotebookLM for cloud recall, podcasts, and flashcards. Pairs with Dockit/deep-search. Use for NotebookLM, nlm, knowledge base, skill sync, or cross-machine AI memory."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Goal
|
|
7
|
+
|
|
8
|
+
Cloud brain / soul cho AI — lưu trữ kiến thức **giá trị nhất**, đồng bộ qua
|
|
9
|
+
nhiều máy tính. `brain.md` = compiled source of truth, upload 1 lần thay vì 50.
|
|
10
|
+
|
|
11
|
+
# How It Works
|
|
12
|
+
|
|
13
|
+
```
|
|
14
|
+
Skills + Lessons + Experiences
|
|
15
|
+
↓ compile
|
|
16
|
+
~/.codymaster/brain.md (local file = backup)
|
|
17
|
+
↓ upload (1 API call)
|
|
18
|
+
NotebookLM (cloud = cross-machine sync)
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
All automation via `scripts/brain-sync.sh` — AI chỉ cần gọi script.
|
|
22
|
+
|
|
23
|
+
# Instructions
|
|
24
|
+
|
|
25
|
+
## The Dual-Brain Architecture
|
|
26
|
+
|
|
27
|
+
CodyMaster uses a **Dual-Brain** approach to scale memory across multiple projects without context collapse:
|
|
28
|
+
|
|
29
|
+
1. **Master Brain (`codymaster`)**: Global brain storing Meta-Learnings, proven Architecture Decisions, and universal patterns. Evolved via the "Rule of 3" (knowledge graduation).
|
|
30
|
+
2. **Project Brain (Isolated)**: Optional local brain created per project to hold internal PRDs, APIs, and local code context from `./docs`.
|
|
31
|
+
|
|
32
|
+
| Level | Goal | Query Command |
|
|
33
|
+
|-------|------|---------------|
|
|
34
|
+
| **Master** | Tìm pattern chung | `nlm notebook query codymaster "..."` |
|
|
35
|
+
| **Project** | Tìm context domain | `nlm notebook query $(cat .cm/notebook_id) "..."` |
|
|
36
|
+
|
|
37
|
+
> 🤖 **AI Rule:** Tự đưa quyết định khi hỏi: Hỏi `codymaster` cho các giải pháp mang tính hệ thống chung. Hỏi qua `.cm/notebook_id` cho các business logic đặc thù dự án đang làm.
|
|
38
|
+
|
|
39
|
+
## Master Brain Setup (Global)
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
# 1. Install CLI
|
|
43
|
+
uv tool install notebooklm-mcp-cli
|
|
44
|
+
|
|
45
|
+
# 2. Setup Master Brain
|
|
46
|
+
bash ~/.gemini/antigravity/skills/cm-notebooklm/scripts/brain-sync.sh init
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
## Project Brain Setup (Local - Optional)
|
|
50
|
+
|
|
51
|
+
Nếu dự án đủ lớn và nhiều doc:
|
|
52
|
+
```bash
|
|
53
|
+
# Tạo Project Brain riêng cho thư mục hiện tại
|
|
54
|
+
bash ~/.gemini/antigravity/skills/cm-notebooklm/scripts/brain-sync.sh init-project
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
## Daily Usage
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
SCRIPT=~/.gemini/antigravity/skills/cm-notebooklm/scripts/brain-sync.sh
|
|
61
|
+
|
|
62
|
+
# Add a lesson learned
|
|
63
|
+
bash $SCRIPT lesson "Tên bài học"
|
|
64
|
+
# → Edit ~/.codymaster/lessons.md → fill in details
|
|
65
|
+
|
|
66
|
+
# Add coding experience
|
|
67
|
+
bash $SCRIPT experience "Tên pattern"
|
|
68
|
+
# → Edit ~/.codymaster/experiences.md → fill in details
|
|
69
|
+
|
|
70
|
+
# Sync to Master Brain (Thêm rule of 3)
|
|
71
|
+
bash $SCRIPT sync
|
|
72
|
+
|
|
73
|
+
# Sync to Project Brain (Up tài liệu local docs/)
|
|
74
|
+
bash $SCRIPT sync-project
|
|
75
|
+
|
|
76
|
+
# Check status
|
|
77
|
+
bash $SCRIPT status
|
|
78
|
+
|
|
79
|
+
# Query
|
|
80
|
+
nlm notebook query codymaster "your question"
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
## Auto-Sync Triggers
|
|
84
|
+
|
|
85
|
+
AI detect và **hỏi user** (không tự động):
|
|
86
|
+
|
|
87
|
+
| Trigger | Prompt |
|
|
88
|
+
|---------|--------|
|
|
89
|
+
| Skill mới tạo | "Sync skill mới vào brain?" → `bash $SCRIPT sync` |
|
|
90
|
+
| Bug fixed / post-mortem | "Lưu bài học?" → `bash $SCRIPT lesson "..."` |
|
|
91
|
+
| Architecture changed | "Update brain?" → `bash $SCRIPT sync` |
|
|
92
|
+
| User nói "sync/update" | → `bash $SCRIPT sync` |
|
|
93
|
+
|
|
94
|
+
## Cross-Machine (Máy Mới)
|
|
95
|
+
|
|
96
|
+
```bash
|
|
97
|
+
uv tool install notebooklm-mcp-cli
|
|
98
|
+
nlm login
|
|
99
|
+
nlm notebook list # CodyMaster Brain already there
|
|
100
|
+
nlm alias set codymaster <id>
|
|
101
|
+
# Done! Query ngay: nlm notebook query codymaster "..."
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
## Content Generation
|
|
105
|
+
|
|
106
|
+
```bash
|
|
107
|
+
nlm audio create codymaster --format deep_dive --confirm # Podcast
|
|
108
|
+
nlm report create codymaster --format "Study Guide" --confirm
|
|
109
|
+
nlm flashcards create codymaster --difficulty medium --confirm
|
|
110
|
+
nlm studio status codymaster
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
# What Gets Indexed
|
|
114
|
+
|
|
115
|
+
```
|
|
116
|
+
✅ HIGH-VALUE (auto-compiled into brain.md):
|
|
117
|
+
├── Skill Index (names + descriptions — NOT full SKILL.md)
|
|
118
|
+
├── Lessons Learned (~/.codymaster/lessons.md)
|
|
119
|
+
├── Coding Experiences (~/.codymaster/experiences.md)
|
|
120
|
+
└── AGENTS.md (project identity)
|
|
121
|
+
|
|
122
|
+
❌ NOT INDEXED (use qmd/cm-deep-search instead):
|
|
123
|
+
├── Full SKILL.md files (too many, hard to maintain)
|
|
124
|
+
├── Source code, tests, configs
|
|
125
|
+
└── Duplicated content
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
# Memory Architecture
|
|
129
|
+
|
|
130
|
+
```
|
|
131
|
+
Session → variables → temporary
|
|
132
|
+
Working → CONTINUITY.md → ~500 words/turn
|
|
133
|
+
Local → qmd → BM25+vector, offline, stable
|
|
134
|
+
Cloud → NotebookLM → AI brain, cross-machine, podcast
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
# Integration
|
|
138
|
+
|
|
139
|
+
| Skill | Role |
|
|
140
|
+
|-------|------|
|
|
141
|
+
| `cm-deep-search` | Local search complement (code) |
|
|
142
|
+
| `cm-dockit` | Generate docs → select high-value → feed to brain |
|
|
143
|
+
| `cm-continuity` | Session memory, brain = long-term |
|
|
144
|
+
| `skill-creator-ultra` | TRIGGER: new skill → prompt sync |
|
|
145
|
+
| `cm-debugging` | TRIGGER: bug fixed → prompt lesson |
|
|
146
|
+
|
|
147
|
+
# Constraints
|
|
148
|
+
|
|
149
|
+
- 🔌 `nlm` CLI = **third-party** (jacob-bd). May break. Fallback: cm-deep-search.
|
|
150
|
+
- 🧠 **Selective only** — quality > quantity. Don't dump everything.
|
|
151
|
+
- 🔐 NO secrets in NotebookLM — cloud service.
|
|
152
|
+
- ❌ NO delete without user confirmation.
|
|
153
|
+
- 🤖 NO `nlm chat start` — use `nlm notebook query` only.
|
|
154
|
+
- 🔄 Auto-sync = **ask first**, never silent upload.
|
|
155
|
+
|
|
156
|
+
<!-- Generated by Skill Creator Ultra v1.0 -->
|