@jairodri/huckleberry-cli 1.0.1 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +85 -0
- package/agents/cos.json +2 -5
- package/agents/hermes/AGENTS.md +25 -49
- package/agents/hermes/fix-kimaki/SKILL.md +19 -92
- package/agents/hermes/hermes-fixer.md +44 -74
- package/agents/hermes.json +6 -18
- package/kanban/SKILL.md +18 -18
- package/kanban/package.json +1 -1
- package/kanban/src/dispatcher.mjs +1 -1
- package/kanban/templates/blog-social-campaign.yaml +6 -2
- package/kanban/templates/social-campaign.yaml +9 -4
- package/mcp/jev-calibration.mjs +335 -0
- package/mcp/jev-client.mjs +119 -0
- package/mcp/jev-thresholds.json +27 -0
- package/package.json +13 -9
- package/scripts/doctor-watchdog.sh +73 -0
- package/scripts/install-services.sh +34 -27
- package/scripts/self-improve-weekly.sh +34 -0
- package/scripts/sync-skills.mjs +121 -0
- package/skills/ab-test-setup/SKILL.md +266 -0
- package/skills/ab-test-setup/evals/evals.json +105 -0
- package/skills/ab-test-setup/references/sample-size-guide.md +263 -0
- package/skills/ab-test-setup/references/test-templates.md +277 -0
- package/skills/agent-reach/SKILL.md +132 -0
- package/skills/agent-reach/references/career.md +29 -0
- package/skills/agent-reach/references/dev.md +62 -0
- package/skills/agent-reach/references/search.md +33 -0
- package/skills/agent-reach/references/social.md +232 -0
- package/skills/agent-reach/references/video.md +130 -0
- package/skills/agent-reach/references/web.md +50 -0
- package/skills/ai-agent-seo/SKILL.md +450 -0
- package/skills/ai-cold-email-intelligence/SKILL.md +54 -0
- package/skills/ai-cold-email-intelligence/references/prompts.md +21 -0
- package/skills/ai-consensus-builder/SKILL.md +324 -0
- package/skills/ai-seo/SKILL.md +399 -0
- package/skills/ai-seo/evals/evals.json +90 -0
- package/skills/ai-seo/references/content-patterns.md +284 -0
- package/skills/ai-seo/references/platform-ranking-factors.md +152 -0
- package/skills/ai-visibility-audit/SKILL.md +322 -0
- package/skills/analytics-tracking/SKILL.md +309 -0
- package/skills/analytics-tracking/evals/evals.json +90 -0
- package/skills/analytics-tracking/references/event-library.md +260 -0
- package/skills/analytics-tracking/references/ga4-implementation.md +300 -0
- package/skills/analytics-tracking/references/gtm-implementation.md +390 -0
- package/skills/article-generator/SKILL.md +216 -0
- package/skills/auto-indexing/SKILL.md +179 -0
- package/skills/auto-indexing/scripts/auto-indexing.js +257 -0
- package/skills/auto-skill/SKILL.md +151 -0
- package/skills/auto-skill/correction-queue.js +102 -0
- package/skills/auto-skill/dedup.js +97 -0
- package/skills/auto-skill/skill-router.js +224 -0
- package/skills/autoresearch/SKILL.md +334 -0
- package/skills/autoresearch/autoresearch-autoresearch/SKILL.md.baseline +329 -0
- package/skills/autoresearch/autoresearch-autoresearch/changelog.md +34 -0
- package/skills/autoresearch/autoresearch-autoresearch/dashboard.html +116 -0
- package/skills/autoresearch/autoresearch-autoresearch/evals.md +39 -0
- package/skills/autoresearch/autoresearch-autoresearch/results.json +44 -0
- package/skills/autoresearch/autoresearch-autoresearch/results.tsv +3 -0
- package/skills/autoresearch/eval-guide.md +121 -0
- package/skills/b2b-cold-outreach/SKILL.md +322 -0
- package/skills/birdclaw/SKILL.md +82 -0
- package/skills/brainstorm/SKILL.md +168 -0
- package/skills/brand-kit-playground/SKILL.md +312 -0
- package/skills/brand-kit-playground/references/html-architecture.md +316 -0
- package/skills/brand-kit-playground/references/steal-patterns.md +88 -0
- package/skills/brand-voice/SKILL.md +223 -0
- package/skills/brand-voice/references/honesty-as-positioning.md +60 -0
- package/skills/brand-voice/references/voice-modes.md +1158 -0
- package/skills/business-advisory-council/README.md +136 -0
- package/skills/business-advisory-council/SKILL.md +94 -0
- package/skills/business-advisory-council/business-advisory-council.py +492 -0
- package/skills/business-advisory-council/discord-components-decision.json +8 -0
- package/skills/business-advisory-council/examples/steve-conley-partnership.json +6 -0
- package/skills/business-advisory-council/steve-conley-call-brief.json +6 -0
- package/skills/churn-prevention/SKILL.md +305 -0
- package/skills/churn-prevention/evals/evals.json +93 -0
- package/skills/churn-prevention/references/cancel-flow-patterns.md +316 -0
- package/skills/churn-prevention/references/dunning-playbook.md +408 -0
- package/skills/claw-compactor/LICENSE +21 -0
- package/skills/claw-compactor/README.md +459 -0
- package/skills/claw-compactor/SKILL.md +329 -0
- package/skills/claw-compactor/benchmark/RESULTS.md +104 -0
- package/skills/claw-compactor/benchmark/__init__.py +1 -0
- package/skills/claw-compactor/benchmark/compressors.py +520 -0
- package/skills/claw-compactor/benchmark/data/sample_01_devops.json +82 -0
- package/skills/claw-compactor/benchmark/data/sample_02_trading.json +54 -0
- package/skills/claw-compactor/benchmark/data/sample_03_ml_short.json +38 -0
- package/skills/claw-compactor/benchmark/data/sample_04_mixed_long.json +318 -0
- package/skills/claw-compactor/benchmark/data/sample_05_sysadmin.json +56 -0
- package/skills/claw-compactor/benchmark/evaluate.py +278 -0
- package/skills/claw-compactor/benchmark/report.py +241 -0
- package/skills/claw-compactor/benchmark/results/benchmark_results.json +405 -0
- package/skills/claw-compactor/benchmark/run_benchmark.py +238 -0
- package/skills/claw-compactor/engram.yaml +49 -0
- package/skills/claw-compactor/proxy/README.md +87 -0
- package/skills/claw-compactor/proxy/dashboard.html +804 -0
- package/skills/claw-compactor/proxy/event-log.mjs +213 -0
- package/skills/claw-compactor/proxy/fair-queue.mjs +288 -0
- package/skills/claw-compactor/proxy/metrics-store.mjs +425 -0
- package/skills/claw-compactor/proxy/package-lock.json +125 -0
- package/skills/claw-compactor/proxy/package.json +15 -0
- package/skills/claw-compactor/proxy/portal.html +360 -0
- package/skills/claw-compactor/proxy/process-registry.mjs +447 -0
- package/skills/claw-compactor/proxy/rate-limiter.mjs +117 -0
- package/skills/claw-compactor/proxy/redis-client.mjs +75 -0
- package/skills/claw-compactor/proxy/retry.mjs +182 -0
- package/skills/claw-compactor/proxy/server.mjs +2100 -0
- package/skills/claw-compactor/proxy/session-affinity.mjs +177 -0
- package/skills/claw-compactor/proxy/start.sh +23 -0
- package/skills/claw-compactor/proxy/test/event-log.test.mjs +237 -0
- package/skills/claw-compactor/proxy/test/helpers.mjs +103 -0
- package/skills/claw-compactor/proxy/test/integration.test.mjs +297 -0
- package/skills/claw-compactor/proxy/test/metrics-store.test.mjs +243 -0
- package/skills/claw-compactor/proxy/test/process-registry.test.mjs +390 -0
- package/skills/claw-compactor/proxy/test/rate-limiter.test.mjs +121 -0
- package/skills/claw-compactor/proxy/test/redis-client.test.mjs +62 -0
- package/skills/claw-compactor/proxy/test/token-tracker.test.mjs +200 -0
- package/skills/claw-compactor/proxy/token-tracker.mjs +482 -0
- package/skills/claw-compactor/pyproject.toml +26 -0
- package/skills/claw-compactor/references/README.md +44 -0
- package/skills/claw-compactor/references/architecture.md +197 -0
- package/skills/claw-compactor/references/benchmarks.md +94 -0
- package/skills/claw-compactor/references/compression-prompts.md +39 -0
- package/skills/claw-compactor/references/compression-techniques.md +219 -0
- package/skills/claw-compactor/references/testing.md +160 -0
- package/skills/claw-compactor/scripts/audit_memory.py +216 -0
- package/skills/claw-compactor/scripts/compress_memory.py +236 -0
- package/skills/claw-compactor/scripts/compressed_context.py +280 -0
- package/skills/claw-compactor/scripts/dedup_memory.py +147 -0
- package/skills/claw-compactor/scripts/dictionary_compress.py +170 -0
- package/skills/claw-compactor/scripts/engram-auto.sh +152 -0
- package/skills/claw-compactor/scripts/engram_auto.py +695 -0
- package/skills/claw-compactor/scripts/engram_cli.py +474 -0
- package/skills/claw-compactor/scripts/estimate_tokens.py +131 -0
- package/skills/claw-compactor/scripts/generate_summary_tiers.py +292 -0
- package/skills/claw-compactor/scripts/lib/__init__.py +34 -0
- package/skills/claw-compactor/scripts/lib/config.py +289 -0
- package/skills/claw-compactor/scripts/lib/dedup.py +119 -0
- package/skills/claw-compactor/scripts/lib/dictionary.py +281 -0
- package/skills/claw-compactor/scripts/lib/engram.py +793 -0
- package/skills/claw-compactor/scripts/lib/engram_prompts.py +175 -0
- package/skills/claw-compactor/scripts/lib/engram_storage.py +254 -0
- package/skills/claw-compactor/scripts/lib/exceptions.py +24 -0
- package/skills/claw-compactor/scripts/lib/markdown.py +312 -0
- package/skills/claw-compactor/scripts/lib/rle.py +165 -0
- package/skills/claw-compactor/scripts/lib/tokenizer_optimizer.py +188 -0
- package/skills/claw-compactor/scripts/lib/tokens.py +68 -0
- package/skills/claw-compactor/scripts/mem_compress.py +788 -0
- package/skills/claw-compactor/scripts/observation_compressor.py +346 -0
- package/skills/claw-compactor/tests/__init__.py +0 -0
- package/skills/claw-compactor/tests/conftest.py +94 -0
- package/skills/claw-compactor/tests/test_audit_comprehensive.py +123 -0
- package/skills/claw-compactor/tests/test_audit_memory.py +67 -0
- package/skills/claw-compactor/tests/test_benchmark.py +122 -0
- package/skills/claw-compactor/tests/test_cli_commands.py +228 -0
- package/skills/claw-compactor/tests/test_compress_memory.py +109 -0
- package/skills/claw-compactor/tests/test_compress_memory_comprehensive.py +191 -0
- package/skills/claw-compactor/tests/test_compressed_context.py +145 -0
- package/skills/claw-compactor/tests/test_config.py +54 -0
- package/skills/claw-compactor/tests/test_dedup_memory.py +124 -0
- package/skills/claw-compactor/tests/test_dictionary.py +327 -0
- package/skills/claw-compactor/tests/test_dictionary_comprehensive.py +241 -0
- package/skills/claw-compactor/tests/test_engram.py +1091 -0
- package/skills/claw-compactor/tests/test_engram_auto.py +529 -0
- package/skills/claw-compactor/tests/test_error_handling.py +194 -0
- package/skills/claw-compactor/tests/test_estimate_tokens.py +99 -0
- package/skills/claw-compactor/tests/test_generate_summary_tiers.py +105 -0
- package/skills/claw-compactor/tests/test_integration.py +249 -0
- package/skills/claw-compactor/tests/test_lib_dedup.py +135 -0
- package/skills/claw-compactor/tests/test_lib_markdown.py +388 -0
- package/skills/claw-compactor/tests/test_lib_tokens.py +82 -0
- package/skills/claw-compactor/tests/test_main_entry.py +176 -0
- package/skills/claw-compactor/tests/test_markdown_advanced.py +284 -0
- package/skills/claw-compactor/tests/test_new_features.py +77 -0
- package/skills/claw-compactor/tests/test_observation_comprehensive.py +261 -0
- package/skills/claw-compactor/tests/test_observation_compressor.py +128 -0
- package/skills/claw-compactor/tests/test_performance.py +172 -0
- package/skills/claw-compactor/tests/test_pipeline.py +109 -0
- package/skills/claw-compactor/tests/test_real_workspace.py +161 -0
- package/skills/claw-compactor/tests/test_rle.py +114 -0
- package/skills/claw-compactor/tests/test_rle_comprehensive.py +151 -0
- package/skills/claw-compactor/tests/test_roundtrip.py +253 -0
- package/skills/claw-compactor/tests/test_roundtrip_comprehensive.py +192 -0
- package/skills/claw-compactor/tests/test_tiers_comprehensive.py +171 -0
- package/skills/claw-compactor/tests/test_token_economics.py +237 -0
- package/skills/claw-compactor/tests/test_tokenizer_optimizer.py +175 -0
- package/skills/claw-compactor/tests/test_tokenizer_optimizer_comprehensive.py +241 -0
- package/skills/claw-compactor/tests/test_tokens.py +27 -0
- package/skills/cmo/CHANGELOG.md +61 -0
- package/skills/cmo/SKILL.md +500 -0
- package/skills/cmo/references/ai-slop-patterns.md +56 -0
- package/skills/cmo/references/analytics-guide.md +152 -0
- package/skills/cmo/references/ideas-library.md +197 -0
- package/skills/cmo/rules/brand-file-map.md +198 -0
- package/skills/cmo/rules/brand-memory.md +158 -0
- package/skills/cmo/rules/cli-runtime-index.md +95 -0
- package/skills/cmo/rules/command-reference.md +167 -0
- package/skills/cmo/rules/communication.md +15 -0
- package/skills/cmo/rules/context-switch.md +101 -0
- package/skills/cmo/rules/ecosystem.md +125 -0
- package/skills/cmo/rules/error-recovery.md +98 -0
- package/skills/cmo/rules/learning-loop.md +170 -0
- package/skills/cmo/rules/monorepo.md +78 -0
- package/skills/cmo/rules/output-format.md +124 -0
- package/skills/cmo/rules/persona.md +15 -0
- package/skills/cmo/rules/playbooks.md +327 -0
- package/skills/cmo/rules/progressive-enhancement.md +231 -0
- package/skills/cmo/rules/publish-index.md +106 -0
- package/skills/cmo/rules/quality-gate.md +90 -0
- package/skills/cmo/rules/recency-grounding.md +124 -0
- package/skills/cmo/rules/safety.md +80 -0
- package/skills/cmo/rules/studio-api-index.md +138 -0
- package/skills/cmo/rules/studio-integration.md +147 -0
- package/skills/cmo/rules/sub-agents.md +167 -0
- package/skills/cold-email/SKILL.md +240 -0
- package/skills/cold-email/evals/evals.json +94 -0
- package/skills/cold-email/references/benchmarks.md +83 -0
- package/skills/cold-email/references/follow-up-sequences.md +81 -0
- package/skills/cold-email/references/frameworks.md +90 -0
- package/skills/cold-email/references/personalization.md +79 -0
- package/skills/cold-email/references/subject-lines.md +53 -0
- package/skills/competitive-intel/SKILL.md +433 -0
- package/skills/competitive-intel/references/competitive-frameworks.md +145 -0
- package/skills/competitor-alternatives/SKILL.md +362 -0
- package/skills/competitor-alternatives/evals/evals.json +93 -0
- package/skills/competitor-alternatives/references/content-architecture.md +271 -0
- package/skills/competitor-alternatives/references/templates.md +223 -0
- package/skills/concreteness-fixer/SKILL.md +483 -0
- package/skills/concreteness-fixer/scripts/validation/concreteness-validator.js +221 -0
- package/skills/concreteness-fixer/utils/execFileNoThrow.js +16 -0
- package/skills/content-atomizer/SKILL.md +424 -0
- package/skills/content-atomizer/references/hook-strategies.md +56 -0
- package/skills/content-atomizer/references/platform-specs.md +118 -0
- package/skills/content-atomizer/references/platforms/bluesky.md +64 -0
- package/skills/content-atomizer/references/platforms/instagram.md +77 -0
- package/skills/content-atomizer/references/platforms/linkedin.md +120 -0
- package/skills/content-atomizer/references/platforms/reddit.md +73 -0
- package/skills/content-atomizer/references/platforms/threads.md +64 -0
- package/skills/content-atomizer/references/platforms/tiktok.md +55 -0
- package/skills/content-atomizer/references/platforms/twitter.md +123 -0
- package/skills/content-atomizer/references/platforms/youtube.md +56 -0
- package/skills/content-atomizer/references/tweet-patterns.md +40 -0
- package/skills/content-repost-manager/SKILL.md +245 -0
- package/skills/content-repost-manager/scripts/content-repost-scan.py +133 -0
- package/skills/context-recovery/.clawdhub/origin.json +7 -0
- package/skills/context-recovery/SKILL.md +198 -0
- package/skills/context-recovery/_meta.json +6 -0
- package/skills/conversion-flow-cro/SKILL.md +248 -0
- package/skills/conversion-flow-cro/references/flow-benchmarks.md +158 -0
- package/skills/copy-editing/SKILL.md +474 -0
- package/skills/copy-editing/evals/evals.json +89 -0
- package/skills/copy-editing/references/plain-english-alternatives.md +394 -0
- package/skills/copywriting/SKILL.md +349 -0
- package/skills/copywriting/evals/evals.json +111 -0
- package/skills/copywriting/references/awareness-level-guide.md +227 -0
- package/skills/copywriting/references/copy-frameworks.md +389 -0
- package/skills/copywriting/references/natural-transitions.md +272 -0
- package/skills/creative/SKILL.md +365 -0
- package/skills/creative/modes/ad-creative.md +1748 -0
- package/skills/creative/modes/product-photo.md +1520 -0
- package/skills/creative/modes/product-video.md +1657 -0
- package/skills/creative/modes/social-graphics.md +1511 -0
- package/skills/creative/modes/talking-head.md +2208 -0
- package/skills/creative/references/VISUAL_INTELLIGENCE.md +1233 -0
- package/skills/deep-serp-article/SKILL.md +677 -0
- package/skills/deep-serp-article/SKILL.md.bak +530 -0
- package/skills/earned-media/SKILL.md +260 -0
- package/skills/email-sequences/SKILL.md +446 -0
- package/skills/email-sequences/references/sequence-templates.md +1217 -0
- package/skills/firecrawl/.skill-meta.json +13 -0
- package/skills/firecrawl/SKILL.md +154 -0
- package/skills/firecrawl/rules/install.md +63 -0
- package/skills/firecrawl/rules/security.md +26 -0
- package/skills/form-cro/SKILL.md +429 -0
- package/skills/form-cro/evals/evals.json +90 -0
- package/skills/free-tool-strategy/SKILL.md +325 -0
- package/skills/free-tool-strategy/evals/evals.json +90 -0
- package/skills/free-tool-strategy/references/tool-types.md +253 -0
- package/skills/frontend-slides/SKILL.md +248 -0
- package/skills/frontend-slides/STYLE_PRESETS.md +347 -0
- package/skills/frontend-slides/animation-patterns.md +110 -0
- package/skills/frontend-slides/html-template.md +347 -0
- package/skills/frontend-slides/scripts/extract-pptx.py +96 -0
- package/skills/frontend-slides/viewport-base.css +153 -0
- package/skills/guardrail-framework/SKILL.md +319 -0
- package/skills/hook-generator/SKILL.md +438 -0
- package/skills/hook-generator/database/2026-PLATFORM-RESEARCH.md +211 -0
- package/skills/hook-generator/database/instagram-hooks.json +591 -0
- package/skills/hook-generator/database/linkedin-hooks.json +502 -0
- package/skills/hook-generator/database/medium-hooks.json +181 -0
- package/skills/hook-generator/database/tiktok-hooks.json +337 -0
- package/skills/hook-generator/database/twitter-hooks.json +567 -0
- package/skills/hook-generator/database/youtube-hooks.json +275 -0
- package/skills/hook-generator/package-lock.json +24 -0
- package/skills/hook-generator/package.json +5 -0
- package/skills/hook-generator/references/hook-generation-system.md +257 -0
- package/skills/hook-generator/references/hook-performance-analysis.json +153 -0
- package/skills/hook-generator/references/hooks-library.md +128 -0
- package/skills/hook-generator/references/platform-hook-frameworks.md +275 -0
- package/skills/hook-generator/scripts/generate-hooks-unified.js +722 -0
- package/skills/hook-generator/scripts/generate-hooks.js +225 -0
- package/skills/hook-generator/scripts/generate.sh +36 -0
- package/skills/hook-generator/scripts/ralph-hook-enhancer.js +864 -0
- package/skills/hook-generator/scripts/test-gemini-output.js +51 -0
- package/skills/humanizer/README.md +120 -0
- package/skills/humanizer/SKILL.md +699 -0
- package/skills/image-gen/SKILL.md +277 -0
- package/skills/image-gen/references/prompt-patterns.md +114 -0
- package/skills/image-gen/references/visual-metaphors.md +51 -0
- package/skills/impeccable/SKILL.md +86 -0
- package/skills/impeccable/reference/adapt.md +312 -0
- package/skills/impeccable/reference/adapt.native.md +58 -0
- package/skills/impeccable/reference/android.md +40 -0
- package/skills/impeccable/reference/animate.md +86 -0
- package/skills/impeccable/reference/audit.md +136 -0
- package/skills/impeccable/reference/audit.native.md +139 -0
- package/skills/impeccable/reference/bolder.md +31 -0
- package/skills/impeccable/reference/clarify.md +94 -0
- package/skills/impeccable/reference/colorize.md +86 -0
- package/skills/impeccable/reference/craft-floor.md +42 -0
- package/skills/impeccable/reference/craft.md +5 -0
- package/skills/impeccable/reference/critique.md +788 -0
- package/skills/impeccable/reference/degraded/asset-producer.md +90 -0
- package/skills/impeccable/reference/degraded/documenter.md +24 -0
- package/skills/impeccable/reference/degraded/finish-reviewer.md +37 -0
- package/skills/impeccable/reference/degraded/manual-edit-applier.md +92 -0
- package/skills/impeccable/reference/delight.md +70 -0
- package/skills/impeccable/reference/distill.md +111 -0
- package/skills/impeccable/reference/doctor.md +53 -0
- package/skills/impeccable/reference/document.md +416 -0
- package/skills/impeccable/reference/extract.md +69 -0
- package/skills/impeccable/reference/harden.md +336 -0
- package/skills/impeccable/reference/hooks.md +105 -0
- package/skills/impeccable/reference/init.md +125 -0
- package/skills/impeccable/reference/ios.md +45 -0
- package/skills/impeccable/reference/layout.md +84 -0
- package/skills/impeccable/reference/live-setup.md +102 -0
- package/skills/impeccable/reference/live.md +323 -0
- package/skills/impeccable/reference/new-work.md +110 -0
- package/skills/impeccable/reference/onboard.md +234 -0
- package/skills/impeccable/reference/operate.md +61 -0
- package/skills/impeccable/reference/optimize.md +258 -0
- package/skills/impeccable/reference/overdrive.md +127 -0
- package/skills/impeccable/reference/polish.md +97 -0
- package/skills/impeccable/reference/quieter.md +99 -0
- package/skills/impeccable/reference/routing.md +18 -0
- package/skills/impeccable/reference/shape.md +59 -0
- package/skills/impeccable/reference/typeset.md +80 -0
- package/skills/impeccable/reference/visualize.md +49 -0
- package/skills/impeccable/scripts/command-metadata.json +94 -0
- package/skills/impeccable/scripts/concept-seed.mjs +558 -0
- package/skills/impeccable/scripts/context-signals.mjs +334 -0
- package/skills/impeccable/scripts/context.mjs +1467 -0
- package/skills/impeccable/scripts/critique-storage.mjs +213 -0
- package/skills/impeccable/scripts/detect-csp.mjs +198 -0
- package/skills/impeccable/scripts/detect.mjs +21 -0
- package/skills/impeccable/scripts/detector/browser/injected/index.mjs +2023 -0
- package/skills/impeccable/scripts/detector/cli/main.mjs +438 -0
- package/skills/impeccable/scripts/detector/design-system.mjs +1046 -0
- package/skills/impeccable/scripts/detector/detect-antipatterns-browser.js +8283 -0
- package/skills/impeccable/scripts/detector/detect-antipatterns.mjs +50 -0
- package/skills/impeccable/scripts/detector/engines/browser/detect-url.mjs +372 -0
- package/skills/impeccable/scripts/detector/engines/regex/detect-text.mjs +1168 -0
- package/skills/impeccable/scripts/detector/engines/static-html/css-cascade.mjs +1186 -0
- package/skills/impeccable/scripts/detector/engines/static-html/detect-html.mjs +264 -0
- package/skills/impeccable/scripts/detector/engines/visual/screenshot-contrast.mjs +189 -0
- package/skills/impeccable/scripts/detector/findings.mjs +18 -0
- package/skills/impeccable/scripts/detector/node/file-system.mjs +203 -0
- package/skills/impeccable/scripts/detector/profile/profiler.mjs +166 -0
- package/skills/impeccable/scripts/detector/registry/antipatterns.mjs +617 -0
- package/skills/impeccable/scripts/detector/rules/checks.mjs +5580 -0
- package/skills/impeccable/scripts/detector/shared/color.mjs +124 -0
- package/skills/impeccable/scripts/detector/shared/constants.mjs +112 -0
- package/skills/impeccable/scripts/detector/shared/fonts.mjs +30 -0
- package/skills/impeccable/scripts/detector/shared/inline-ignores.mjs +148 -0
- package/skills/impeccable/scripts/detector/shared/page.mjs +7 -0
- package/skills/impeccable/scripts/doctor.mjs +336 -0
- package/skills/impeccable/scripts/embed-prompt.mjs +133 -0
- package/skills/impeccable/scripts/generate-image.mjs +240 -0
- package/skills/impeccable/scripts/hook-admin.mjs +801 -0
- package/skills/impeccable/scripts/hook-before-edit.mjs +508 -0
- package/skills/impeccable/scripts/hook-lib.mjs +2153 -0
- package/skills/impeccable/scripts/hook.mjs +78 -0
- package/skills/impeccable/scripts/lib/artifact-schema.mjs +93 -0
- package/skills/impeccable/scripts/lib/composition-catalog.mjs +200 -0
- package/skills/impeccable/scripts/lib/concept-catalog.mjs +384 -0
- package/skills/impeccable/scripts/lib/design-parser.mjs +925 -0
- package/skills/impeccable/scripts/lib/impeccable-config.mjs +658 -0
- package/skills/impeccable/scripts/lib/impeccable-paths.mjs +137 -0
- package/skills/impeccable/scripts/lib/is-generated.mjs +69 -0
- package/skills/impeccable/scripts/lib/provider.mjs +5 -0
- package/skills/impeccable/scripts/lib/roll-selection.mjs +362 -0
- package/skills/impeccable/scripts/lib/staleness-deep.mjs +478 -0
- package/skills/impeccable/scripts/lib/staleness-notice.mjs +169 -0
- package/skills/impeccable/scripts/lib/staleness.mjs +457 -0
- package/skills/impeccable/scripts/lib/surface-briefs.mjs +151 -0
- package/skills/impeccable/scripts/lib/target-args.mjs +42 -0
- package/skills/impeccable/scripts/lib/target-slug.mjs +33 -0
- package/skills/impeccable/scripts/lib/template-extensions.mjs +146 -0
- package/skills/impeccable/scripts/live/accept-css.mjs +617 -0
- package/skills/impeccable/scripts/live/accept-verify.mjs +60 -0
- package/skills/impeccable/scripts/live/browser-script-parts.mjs +55 -0
- package/skills/impeccable/scripts/live/completion.mjs +28 -0
- package/skills/impeccable/scripts/live/event-validation.mjs +199 -0
- package/skills/impeccable/scripts/live/frameworks/astro.mjs +47 -0
- package/skills/impeccable/scripts/live/frameworks/detect-utils.mjs +73 -0
- package/skills/impeccable/scripts/live/frameworks/index.mjs +143 -0
- package/skills/impeccable/scripts/live/frameworks/journal.mjs +197 -0
- package/skills/impeccable/scripts/live/frameworks/nextjs.mjs +49 -0
- package/skills/impeccable/scripts/live/frameworks/nuxt.mjs +161 -0
- package/skills/impeccable/scripts/live/frameworks/script-src.mjs +17 -0
- package/skills/impeccable/scripts/live/frameworks/static-html.mjs +26 -0
- package/skills/impeccable/scripts/live/frameworks/sveltekit.mjs +71 -0
- package/skills/impeccable/scripts/live/frameworks/tag-strategy.mjs +247 -0
- package/skills/impeccable/scripts/live/frameworks/tanstack-start.mjs +70 -0
- package/skills/impeccable/scripts/live/frameworks/vite-generic.mjs +42 -0
- package/skills/impeccable/scripts/live/generation-preflight.mjs +149 -0
- package/skills/impeccable/scripts/live/insert-ui.mjs +458 -0
- package/skills/impeccable/scripts/live/instructions.mjs +142 -0
- package/skills/impeccable/scripts/live/manual-apply.mjs +939 -0
- package/skills/impeccable/scripts/live/manual-edit-routes.mjs +357 -0
- package/skills/impeccable/scripts/live/manual-edits-buffer.mjs +152 -0
- package/skills/impeccable/scripts/live/poll-lanes.mjs +14 -0
- package/skills/impeccable/scripts/live/roots.mjs +508 -0
- package/skills/impeccable/scripts/live/session-store.mjs +563 -0
- package/skills/impeccable/scripts/live/source-lock.mjs +105 -0
- package/skills/impeccable/scripts/live/source-search.mjs +105 -0
- package/skills/impeccable/scripts/live/svelte-ast.mjs +961 -0
- package/skills/impeccable/scripts/live/svelte-component.mjs +1342 -0
- package/skills/impeccable/scripts/live/sveltekit-adapter.mjs +316 -0
- package/skills/impeccable/scripts/live/tanstack-adapter.mjs +280 -0
- package/skills/impeccable/scripts/live/ui-core.mjs +180 -0
- package/skills/impeccable/scripts/live/vocabulary.mjs +171 -0
- package/skills/impeccable/scripts/live-accept.mjs +954 -0
- package/skills/impeccable/scripts/live-browser-dom.js +146 -0
- package/skills/impeccable/scripts/live-browser-session.js +123 -0
- package/skills/impeccable/scripts/live-browser.js +12520 -0
- package/skills/impeccable/scripts/live-commit-manual-edits.mjs +1244 -0
- package/skills/impeccable/scripts/live-complete.mjs +107 -0
- package/skills/impeccable/scripts/live-copy-edit-agent.mjs +683 -0
- package/skills/impeccable/scripts/live-discard-manual-edits.mjs +51 -0
- package/skills/impeccable/scripts/live-inject.mjs +503 -0
- package/skills/impeccable/scripts/live-insert.mjs +292 -0
- package/skills/impeccable/scripts/live-manual-edit-evidence.mjs +368 -0
- package/skills/impeccable/scripts/live-poll.mjs +429 -0
- package/skills/impeccable/scripts/live-resume.mjs +123 -0
- package/skills/impeccable/scripts/live-server.mjs +1669 -0
- package/skills/impeccable/scripts/live-status.mjs +71 -0
- package/skills/impeccable/scripts/live-target.mjs +30 -0
- package/skills/impeccable/scripts/live-wrap.mjs +927 -0
- package/skills/impeccable/scripts/live.mjs +359 -0
- package/skills/impeccable/scripts/modern-screenshot.umd.js +14 -0
- package/skills/impeccable/scripts/palette.mjs +628 -0
- package/skills/impeccable/scripts/pin.mjs +221 -0
- package/skills/impeccable/scripts/serve-question.mjs +932 -0
- package/skills/impeccable/scripts/surface-brief.mjs +74 -0
- package/skills/inkstone-admin/SKILL.md +66 -0
- package/skills/jev-hook-gate/SKILL.md +111 -0
- package/skills/keyword-research/SKILL.md +503 -0
- package/skills/keyword-research/references/dr-cap-and-confidence.md +62 -0
- package/skills/keyword-research/references/keyword-examples.md +769 -0
- package/skills/landing-page-architect/SKILL.md +585 -0
- package/skills/landing-page-architect/references/architecture-reference.md +32 -0
- package/skills/launch-strategy/SKILL.md +384 -0
- package/skills/launch-strategy/evals/evals.json +91 -0
- package/skills/launch-strategy/references/launch-checklist.md +209 -0
- package/skills/launch-strategy/references/launch-timeline.md +159 -0
- package/skills/lead-email-craft/SKILL.md +522 -0
- package/skills/lead-magnets/SKILL.md +310 -0
- package/skills/lead-magnets/references/benchmarks.md +129 -0
- package/skills/lead-magnets/references/format-guide.md +196 -0
- package/skills/link-building-seo/SKILL.md +210 -0
- package/skills/lint-report.txt +1 -0
- package/skills/manifest.json +129 -0
- package/skills/marketing-demo/SKILL.md +249 -0
- package/skills/marketing-demo/references/remotion-examples.md +281 -0
- package/skills/marketing-ideas/SKILL.md +167 -0
- package/skills/marketing-ideas/evals/evals.json +90 -0
- package/skills/marketing-ideas/references/ideas-by-category.md +366 -0
- package/skills/marketing-psychology/SKILL.md +374 -0
- package/skills/marketing-psychology/evals/evals.json +88 -0
- package/skills/marketing-psychology/references/case-studies.md +148 -0
- package/skills/narrative-research-article/SKILL.md +469 -0
- package/skills/narrative-research-article/references/lanusse-patterns.md +166 -0
- package/skills/notebooklm/SKILL.md +674 -0
- package/skills/off-page-seo/SKILL.md +219 -0
- package/skills/onboarding-cro/SKILL.md +220 -0
- package/skills/onboarding-cro/evals/evals.json +92 -0
- package/skills/onboarding-cro/references/experiments.md +258 -0
- package/skills/original-research/SKILL.md +388 -0
- package/skills/page-cro/SKILL.md +269 -0
- package/skills/page-cro/references/cro-benchmarks.md +140 -0
- package/skills/paper-marketing/SKILL.md +448 -0
- package/skills/paper-marketing/references/agent-quality-rubric.md +68 -0
- package/skills/paper-marketing/references/brand-system-template.md +120 -0
- package/skills/paper-marketing/references/paper-mcp-rules.md +71 -0
- package/skills/paper-marketing/references/platform-conventions.md +43 -0
- package/skills/paywall-upgrade-cro/SKILL.md +227 -0
- package/skills/paywall-upgrade-cro/evals/evals.json +93 -0
- package/skills/paywall-upgrade-cro/references/experiments.md +164 -0
- package/skills/platform-formatting/SKILL.md +51 -0
- package/skills/popup-cro/SKILL.md +454 -0
- package/skills/popup-cro/evals/evals.json +94 -0
- package/skills/positioning-angles/SKILL.md +524 -0
- package/skills/positioning-angles/references/ad-matrix-and-examples.md +176 -0
- package/skills/positioning-angles/references/angle-frameworks.md +187 -0
- package/skills/positioning-angles/references/dunford-positioning.md +135 -0
- package/skills/positioning-angles/references/hormozi-offer.md +247 -0
- package/skills/positioning-angles/references/schwartz-sophistication.md +166 -0
- package/skills/positioning-angles/references/unique-mechanism.md +162 -0
- package/skills/pricing-strategy/SKILL.md +346 -0
- package/skills/pricing-strategy/evals/evals.json +90 -0
- package/skills/pricing-strategy/references/research-methods.md +152 -0
- package/skills/pricing-strategy/references/tier-structure.md +307 -0
- package/skills/programmatic-seo/SKILL.md +238 -0
- package/skills/programmatic-seo/evals/evals.json +94 -0
- package/skills/programmatic-seo/references/playbooks.md +308 -0
- package/skills/project-rag/SKILL.md +127 -0
- package/skills/quality-gate/SKILL.md +519 -0
- package/skills/quality-gate/judge-personas/buyer.md +47 -0
- package/skills/quality-gate/judge-personas/expert.md +47 -0
- package/skills/quality-gate/judge-personas/outsider.md +47 -0
- package/skills/quality-gate/judge-personas/scanner.md +41 -0
- package/skills/quality-gate/judge-personas/skeptic.md +40 -0
- package/skills/referral-program/SKILL.md +290 -0
- package/skills/referral-program/evals/evals.json +89 -0
- package/skills/referral-program/references/affiliate-programs.md +163 -0
- package/skills/referral-program/references/program-examples.md +143 -0
- package/skills/review-sites/SKILL.md +279 -0
- package/skills/revops/SKILL.md +343 -0
- package/skills/revops/evals/evals.json +91 -0
- package/skills/revops/references/automation-playbooks.md +290 -0
- package/skills/revops/references/lifecycle-definitions.md +278 -0
- package/skills/revops/references/routing-rules.md +203 -0
- package/skills/revops/references/scoring-models.md +247 -0
- package/skills/saas-product-seo/SKILL.md +324 -0
- package/skills/sales-enablement/SKILL.md +349 -0
- package/skills/sales-enablement/evals/evals.json +91 -0
- package/skills/sales-enablement/references/deck-frameworks.md +263 -0
- package/skills/sales-enablement/references/demo-scripts.md +355 -0
- package/skills/sales-enablement/references/objection-library.md +270 -0
- package/skills/sales-enablement/references/one-pager-templates.md +208 -0
- package/skills/schema-markup/SKILL.md +179 -0
- package/skills/schema-markup/evals/evals.json +87 -0
- package/skills/schema-markup/references/schema-examples.md +398 -0
- package/skills/self-improve/SKILL.md +166 -0
- package/skills/self-improving-agent/README.md +243 -0
- package/skills/self-improving-agent/SKILL.md +437 -0
- package/skills/self-improving-agent/scripts/__init__.py +16 -0
- package/skills/self-improving-agent/scripts/__pycache__/auto_detect.cpython-314.pyc +0 -0
- package/skills/self-improving-agent/scripts/__pycache__/nlm_curation.cpython-314.pyc +0 -0
- package/skills/self-improving-agent/scripts/__pycache__/self_improving_agent.cpython-314.pyc +0 -0
- package/skills/self-improving-agent/scripts/auto_detect.py +270 -0
- package/skills/self-improving-agent/scripts/init_expertise_registry.py +89 -0
- package/skills/self-improving-agent/scripts/nlm_curation.py +259 -0
- package/skills/self-improving-agent/scripts/self-improving-agent +113 -0
- package/skills/self-improving-agent/scripts/self_improving_agent.py +603 -0
- package/skills/self-improving-agent/scripts/test_curation_scorer.py +20 -0
- package/skills/self-improving-agent/scripts/test_self_improving.py +184 -0
- package/skills/send-email/SKILL.md +426 -0
- package/skills/send-email/references/batch-email-examples.md +807 -0
- package/skills/send-email/references/best-practices.md +453 -0
- package/skills/send-email/references/installation.md +123 -0
- package/skills/send-email/references/single-email-examples.md +470 -0
- package/skills/send-email/references/webhooks.md +221 -0
- package/skills/seo-audit/SKILL.md +362 -0
- package/skills/seo-audit/references/ai-writing-detection.md +200 -0
- package/skills/seo-audit/references/architecture-patterns.md +271 -0
- package/skills/seo-audit/references/schema-templates.md +427 -0
- package/skills/seo-content/SKILL.md +510 -0
- package/skills/seo-content/references/anti-ai-detection.md +184 -0
- package/skills/seo-content/references/content-structures.md +148 -0
- package/skills/seo-content/references/eeat-examples.md +235 -0
- package/skills/seo-content/references/on-page-seo.md +261 -0
- package/skills/seo-content/references/pseo-playbooks.md +226 -0
- package/skills/seo-content/references/schema-templates.md +104 -0
- package/skills/seo-content/references/serp-analysis-format.md +151 -0
- package/skills/seo-machine/SKILL.md +331 -0
- package/skills/seo-machine/assets/brand-template.md +73 -0
- package/skills/seo-machine/assets/link-inventory-template.md +74 -0
- package/skills/seo-machine/assets/roadmap-template.md +184 -0
- package/skills/seo-machine/references/api-stack-recipes.md +230 -0
- package/skills/seo-machine/references/exa-recipes.md +260 -0
- package/skills/seo-machine/references/manual-research.md +73 -0
- package/skills/seo-machine/references/methodology.md +87 -0
- package/skills/seo-machine/references/off-page.md +123 -0
- package/skills/seo-machine/references/patterns/alternatives.md +176 -0
- package/skills/seo-machine/references/patterns/compare.md +105 -0
- package/skills/seo-machine/references/patterns/playbooks.md +106 -0
- package/skills/seo-machine/references/patterns/use-case.md +109 -0
- package/skills/seo-machine/references/quality-bars.md +99 -0
- package/skills/seo-machine/references/stacks/astro.md +156 -0
- package/skills/seo-machine/references/stacks/detection.md +61 -0
- package/skills/seo-machine/references/stacks/markdown-fallback.md +181 -0
- package/skills/seo-machine/references/stacks/nextjs.md +108 -0
- package/skills/seo-machine/references/stacks/rails-inertia.md +99 -0
- package/skills/seo-machine/references/striking-distance.md +116 -0
- package/skills/seo-machine/references/technical-audit.md +153 -0
- package/skills/seo-machine/scripts/link_audit.py +265 -0
- package/skills/seo-machine/scripts/tech_audit.py +221 -0
- package/skills/seo-machine/scripts/word_count.py +154 -0
- package/skills/sharp-thesis-validator/SKILL.md +393 -0
- package/skills/sharp-thesis-validator/examples.md +186 -0
- package/skills/signup-flow-cro/SKILL.md +359 -0
- package/skills/signup-flow-cro/evals/evals.json +88 -0
- package/skills/site-architecture/SKILL.md +357 -0
- package/skills/site-architecture/evals/evals.json +88 -0
- package/skills/site-architecture/references/mermaid-templates.md +216 -0
- package/skills/site-architecture/references/navigation-patterns.md +305 -0
- package/skills/site-architecture/references/site-type-templates.md +293 -0
- package/skills/skill-self-improvement/SKILL.md +151 -0
- package/skills/slideshow-script/SKILL.md +274 -0
- package/skills/slideshow-script/references/content-spec-schema.md +77 -0
- package/skills/slideshow-script/references/frameworks.md +84 -0
- package/skills/slideshow-script/references/paips-framework.md +37 -0
- package/skills/social-campaign/SKILL.md +419 -0
- package/skills/social-campaign/references/paper-mcp-workflow.md +48 -0
- package/skills/social-content/SKILL.md +359 -0
- package/skills/social-content/evals/evals.json +92 -0
- package/skills/social-content/references/platforms.md +170 -0
- package/skills/social-content/references/post-templates.md +177 -0
- package/skills/social-content/references/reverse-engineering.md +195 -0
- package/skills/social-worker/SKILL.md +204 -0
- package/skills/startup-launcher/SKILL.md +252 -0
- package/skills/startup-launcher/references/file-router.md +64 -0
- package/skills/startup-launcher/references/platform-matrix.md +65 -0
- package/skills/startup-launcher/references/platforms/alternativeto.md +283 -0
- package/skills/startup-launcher/references/platforms/appsumo.md +495 -0
- package/skills/startup-launcher/references/platforms/auraplusplus.md +736 -0
- package/skills/startup-launcher/references/platforms/betalist.md +98 -0
- package/skills/startup-launcher/references/platforms/capterra.md +276 -0
- package/skills/startup-launcher/references/platforms/crunchbase.md +514 -0
- package/skills/startup-launcher/references/platforms/dealify.md +291 -0
- package/skills/startup-launcher/references/platforms/dealmirror.md +313 -0
- package/skills/startup-launcher/references/platforms/desifounder.md +490 -0
- package/skills/startup-launcher/references/platforms/devhunt.md +210 -0
- package/skills/startup-launcher/references/platforms/devpost.md +448 -0
- package/skills/startup-launcher/references/platforms/fazier.md +56 -0
- package/skills/startup-launcher/references/platforms/firsto.md +489 -0
- package/skills/startup-launcher/references/platforms/g2.md +226 -0
- package/skills/startup-launcher/references/platforms/hackernews.md +99 -0
- package/skills/startup-launcher/references/platforms/hackernoon.md +385 -0
- package/skills/startup-launcher/references/platforms/indiedeals.md +367 -0
- package/skills/startup-launcher/references/platforms/indiehackers.md +80 -0
- package/skills/startup-launcher/references/platforms/kenmoo.md +231 -0
- package/skills/startup-launcher/references/platforms/labstartups.md +618 -0
- package/skills/startup-launcher/references/platforms/launchboard.md +307 -0
- package/skills/startup-launcher/references/platforms/launchfast.md +560 -0
- package/skills/startup-launcher/references/platforms/launchigniter.md +56 -0
- package/skills/startup-launcher/references/platforms/launchingnext.md +674 -0
- package/skills/startup-launcher/references/platforms/launchit.md +574 -0
- package/skills/startup-launcher/references/platforms/launchyourapp.md +677 -0
- package/skills/startup-launcher/references/platforms/libhunt.md +220 -0
- package/skills/startup-launcher/references/platforms/ltdhunt.md +221 -0
- package/skills/startup-launcher/references/platforms/microlaunch.md +45 -0
- package/skills/startup-launcher/references/platforms/openalternative.md +195 -0
- package/skills/startup-launcher/references/platforms/peerlist.md +56 -0
- package/skills/startup-launcher/references/platforms/peerpush.md +64 -0
- package/skills/startup-launcher/references/platforms/primeclub.md +282 -0
- package/skills/startup-launcher/references/platforms/productcanyon.md +190 -0
- package/skills/startup-launcher/references/platforms/producthunt.md +98 -0
- package/skills/startup-launcher/references/platforms/rankinpublic.md +315 -0
- package/skills/startup-launcher/references/platforms/rockethub.md +374 -0
- package/skills/startup-launcher/references/platforms/saasgenius.md +175 -0
- package/skills/startup-launcher/references/platforms/saashub.md +205 -0
- package/skills/startup-launcher/references/platforms/saasmantra.md +221 -0
- package/skills/startup-launcher/references/platforms/saaspirate.md +287 -0
- package/skills/startup-launcher/references/platforms/saaswarrior.md +190 -0
- package/skills/startup-launcher/references/platforms/saaszilla.md +194 -0
- package/skills/startup-launcher/references/platforms/selected.md +925 -0
- package/skills/startup-launcher/references/platforms/sideprojectors.md +86 -0
- package/skills/startup-launcher/references/platforms/softonic.md +240 -0
- package/skills/startup-launcher/references/platforms/sourceforge.md +251 -0
- package/skills/startup-launcher/references/platforms/stacksocial.md +244 -0
- package/skills/startup-launcher/references/platforms/startupstash.md +326 -0
- package/skills/startup-launcher/references/platforms/theresanaiforthat.md +253 -0
- package/skills/startup-launcher/references/platforms/tinylaunch.md +70 -0
- package/skills/startup-launcher/references/platforms/tinystartups.md +72 -0
- package/skills/startup-launcher/references/platforms/toolfolio.md +291 -0
- package/skills/startup-launcher/references/platforms/trustmrr.md +194 -0
- package/skills/startup-launcher/references/platforms/trylaunch.md +531 -0
- package/skills/startup-launcher/references/platforms/uneed.md +57 -0
- package/skills/startup-launcher/references/templates/asset-checklist.md +218 -0
- package/skills/startup-launcher/references/templates/launch-tracker.md +195 -0
- package/skills/startup-launcher/references/templates/product-brief.md +98 -0
- package/skills/summarize/.skill-meta.json +13 -0
- package/skills/summarize/SKILL.md +170 -0
- package/skills/summarize/rules/install.md +157 -0
- package/skills/summarize/rules/usage.md +207 -0
- package/skills/topical-authority/SKILL.md +307 -0
- package/skills/topical-authority/references/jake-ward-framework.md +201 -0
- package/skills/topical-authority/references/serp-clustering-algorithm.md +325 -0
- package/skills/topical-authority/scripts/orchestrator.js +367 -0
- package/skills/topical-authority/scripts/seo/analyze-competitor-coverage.js +3 -0
- package/skills/topical-authority/scripts/seo/audit-internal-links.js +3 -0
- package/skills/topical-authority/scripts/seo/build-clusters-from-serp.js +3 -0
- package/skills/topical-authority/scripts/seo/extract-keywords-from-forums.js +3 -0
- package/skills/topical-authority/scripts/seo/extract-paa-questions.js +3 -0
- package/skills/topical-authority/scripts/seo/fetch-serp-urls.js +3 -0
- package/skills/topical-authority/scripts/seo/gemini-serp-clustering.js +3 -0
- package/skills/topical-authority/scripts/seo/identify-content-gaps.js +3 -0
- package/skills/topical-authority/scripts/seo/identify-research-gaps.js +3 -0
- package/skills/topical-authority/scripts/seo/scrape-quora-questions.js +3 -0
- package/skills/topical-authority/scripts/seo/scrape-reddit-pain-points.js +3 -0
- package/skills/topical-authority/scripts/seo/weave-internal-links.js +3 -0
- package/skills/visual-style/SKILL.md +199 -0
- package/skills/voice-brand-alignment/SKILL.md +70 -0
- package/skills/voice-brand-alignment/references/ai-slop-patterns.md +405 -0
- package/skills/voice-brand-alignment/scripts/validation/gemini-voice-validator.js +96 -0
- package/skills/voice-extraction/SKILL.md +234 -0
- package/skills/voice-extraction/references/extraction-prompt.md +155 -0
- package/skills/voice-extraction/references/voice-dna-template.md +168 -0
- package/skills/voice-extraction/references/voice-elements.md +259 -0
- package/skills/voice-extraction/scripts/build-corpus.js +120 -0
- package/skills/voice-extraction/scripts/collect-sources.sh +168 -0
- package/skills/warm-outbound/SKILL.md +299 -0
- package/skills/warm-outbound/templates/warm-message.md +39 -0
- package/skills/weekly-newsletter-digest/SKILL.md +78 -0
- package/skills/x-playwriter/SKILL.md +428 -0
- package/skills/x-playwriter/scripts/x-browser.js +185 -0
- package/skills/x-post-generator-openclaw/SKILL.md +138 -0
- package/skills/x-post-generator-openclaw/scripts/generate-x-post.js +537 -0
- package/skills/x-posting-playwriter/SKILL.md +203 -0
- package/skills/x-research/SKILL.md +129 -0
- package/skills/x-research/x-research.sh +85 -0
- package/skills/youtube-summarize/SKILL.md +90 -0
- package/skills/youtube-summarize/scripts/youtube-summarize.sh +143 -0
- package/src/cli.js +349 -172
- package/src/harness/deepseek-adapter.js +102 -0
- package/src/harness/deepseek.js +225 -0
- package/src/harness/opencode-adapter.js +174 -0
- package/src/harness/pi-adapter.js +172 -0
- package/src/harness/registry.js +121 -0
- package/src/harness/telemetry.js +102 -0
- package/src/harness/types.js +165 -0
- package/src/interview.js +36 -4
- package/src/postinstall.js +10 -12
- package/templates/AGENTS.md +17 -17
- package/templates/ORG.md +1 -1
- package/templates/TOOLS.md +7 -2
- package/templates/opencode.json +26 -29
- package/wiki/doctor.md +54 -0
- package/wiki/inkstone.md +4 -4
- package/wiki/opencode.md +3 -3
- package/skills/curated.txt +0 -68
|
@@ -0,0 +1,316 @@
|
|
|
1
|
+
# HTML Architecture Reference
|
|
2
|
+
|
|
3
|
+
This document defines the structure of the generated `brand-playground.html` file. The agent uses this as a blueprint — not a copy-paste template. Every playground is bespoke to the brand.
|
|
4
|
+
|
|
5
|
+
## Document Structure
|
|
6
|
+
|
|
7
|
+
```html
|
|
8
|
+
<!DOCTYPE html>
|
|
9
|
+
<html lang="en" data-theme="dark">
|
|
10
|
+
<head>
|
|
11
|
+
<meta charset="UTF-8">
|
|
12
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
13
|
+
<title>[Brand Name] Brand Playground</title>
|
|
14
|
+
<!-- Google Fonts — constructed from brand tokens -->
|
|
15
|
+
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=...">
|
|
16
|
+
<style>
|
|
17
|
+
/* 1. CSS Reset (minimal) */
|
|
18
|
+
/* 2. CSS Custom Properties on :root (brand tokens) */
|
|
19
|
+
/* 3. Dark/light theme variants via [data-theme] */
|
|
20
|
+
/* 4. Layout grid */
|
|
21
|
+
/* 5. Controls panel styles */
|
|
22
|
+
/* 6. Preview canvas styles */
|
|
23
|
+
/* 7. Social card renderer styles */
|
|
24
|
+
/* 8. Multi-preview strip styles */
|
|
25
|
+
/* 9. Token output styles */
|
|
26
|
+
/* 10. Governance strip styles */
|
|
27
|
+
</style>
|
|
28
|
+
</head>
|
|
29
|
+
<body>
|
|
30
|
+
<!-- Brand bar -->
|
|
31
|
+
<!-- Main grid: controls | preview -->
|
|
32
|
+
<!-- Token output -->
|
|
33
|
+
<script>
|
|
34
|
+
/* 1. State object */
|
|
35
|
+
/* 2. DOM references */
|
|
36
|
+
/* 3. updateAll() — master render function */
|
|
37
|
+
/* 4. renderBrandSystem() */
|
|
38
|
+
/* 5. renderSocialCard() */
|
|
39
|
+
/* 6. renderOGImage() */
|
|
40
|
+
/* 7. renderMultiPreview() */
|
|
41
|
+
/* 8. runGovernance() */
|
|
42
|
+
/* 9. updateTokenOutput() */
|
|
43
|
+
/* 10. Control event listeners */
|
|
44
|
+
/* 11. Tab switching */
|
|
45
|
+
/* 12. Preset loader */
|
|
46
|
+
/* 13. Copy to clipboard */
|
|
47
|
+
/* 14. Theme toggle */
|
|
48
|
+
/* 15. Init */
|
|
49
|
+
</script>
|
|
50
|
+
</body>
|
|
51
|
+
</html>
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## CSS Custom Properties
|
|
55
|
+
|
|
56
|
+
All brand tokens are CSS custom properties on `:root`. Controls modify these directly via `document.documentElement.style.setProperty()`.
|
|
57
|
+
|
|
58
|
+
```css
|
|
59
|
+
:root {
|
|
60
|
+
/* Brand colors */
|
|
61
|
+
--brand-primary: #6366F1;
|
|
62
|
+
--brand-primary-fg: #FFFFFF;
|
|
63
|
+
--brand-secondary: #7C3AED;
|
|
64
|
+
--brand-secondary-fg: #FFFFFF;
|
|
65
|
+
--brand-accent: #F59E0B;
|
|
66
|
+
--brand-accent-fg: #1C1917;
|
|
67
|
+
--brand-bg: #FFFFFF;
|
|
68
|
+
--brand-fg: #0F172A;
|
|
69
|
+
--brand-muted: #F1F5F9;
|
|
70
|
+
--brand-muted-fg: #64748B;
|
|
71
|
+
|
|
72
|
+
/* Typography */
|
|
73
|
+
--brand-font-display: 'Space Grotesk', system-ui, sans-serif;
|
|
74
|
+
--brand-font-body: 'Inter', system-ui, sans-serif;
|
|
75
|
+
--brand-font-mono: 'JetBrains Mono', ui-monospace, monospace;
|
|
76
|
+
--brand-type-base: 16px;
|
|
77
|
+
--brand-type-ratio: 1.25;
|
|
78
|
+
|
|
79
|
+
/* Visual */
|
|
80
|
+
--brand-radius: 8px;
|
|
81
|
+
--brand-shadow: 0 4px 6px -1px rgba(0,0,0,0.1);
|
|
82
|
+
|
|
83
|
+
/* Playground chrome (derived from brand) */
|
|
84
|
+
--chrome-bg: #0F172A;
|
|
85
|
+
--chrome-surface: #1E293B;
|
|
86
|
+
--chrome-border: #334155;
|
|
87
|
+
--chrome-text: #E2E8F0;
|
|
88
|
+
--chrome-text-muted: #94A3B8;
|
|
89
|
+
}
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
## State Management
|
|
93
|
+
|
|
94
|
+
Single state object. Every control writes to it. Every render reads from it.
|
|
95
|
+
|
|
96
|
+
```javascript
|
|
97
|
+
const state = {
|
|
98
|
+
tab: 'brand', // 'brand' | 'social' | 'og'
|
|
99
|
+
theme: 'dark', // 'dark' | 'light'
|
|
100
|
+
|
|
101
|
+
tokens: {
|
|
102
|
+
colors: {
|
|
103
|
+
primary: '#6366F1',
|
|
104
|
+
primaryForeground: '#FFFFFF',
|
|
105
|
+
secondary: '#7C3AED',
|
|
106
|
+
accent: '#F59E0B',
|
|
107
|
+
background: '#FFFFFF',
|
|
108
|
+
foreground: '#0F172A',
|
|
109
|
+
},
|
|
110
|
+
typography: {
|
|
111
|
+
display: { family: 'Space Grotesk', weights: [700, 800] },
|
|
112
|
+
body: { family: 'Inter', weights: [400, 500, 600] },
|
|
113
|
+
scale: { base: 16, ratio: 1.25 },
|
|
114
|
+
},
|
|
115
|
+
visual: {
|
|
116
|
+
borderRadius: 8,
|
|
117
|
+
shadowDepth: 'md',
|
|
118
|
+
texture: 'none',
|
|
119
|
+
},
|
|
120
|
+
},
|
|
121
|
+
|
|
122
|
+
social: {
|
|
123
|
+
headline: 'We just shipped dark mode',
|
|
124
|
+
subhead: 'Available for all users today',
|
|
125
|
+
badge: 'NEW',
|
|
126
|
+
layout: 'centered', // 'centered' | 'split' | 'overlay' | 'minimal'
|
|
127
|
+
background: 'gradient', // 'gradient' | 'solid' | 'dark' | 'light'
|
|
128
|
+
showLogo: true,
|
|
129
|
+
},
|
|
130
|
+
|
|
131
|
+
og: {
|
|
132
|
+
title: 'Building the future of developer tools',
|
|
133
|
+
description: 'A deep dive into our latest release.',
|
|
134
|
+
author: '',
|
|
135
|
+
tag: 'Engineering',
|
|
136
|
+
layout: 'editorial', // 'editorial' | 'minimal' | 'bold'
|
|
137
|
+
},
|
|
138
|
+
};
|
|
139
|
+
|
|
140
|
+
function updateAll() {
|
|
141
|
+
updateCSSVars();
|
|
142
|
+
renderActiveTab();
|
|
143
|
+
runGovernance();
|
|
144
|
+
updateTokenOutput();
|
|
145
|
+
}
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
## Social Card Renderer
|
|
149
|
+
|
|
150
|
+
The social card is rendered inside a fixed-aspect-ratio container using the `aspect-ratio` CSS property. The main preview shows the card at the selected platform size, scaled to fit the canvas via `transform: scale()`.
|
|
151
|
+
|
|
152
|
+
```javascript
|
|
153
|
+
function renderSocialCard() {
|
|
154
|
+
const card = document.getElementById('social-card-preview');
|
|
155
|
+
const { headline, subhead, badge, layout, background, showLogo } = state.social;
|
|
156
|
+
const { colors, typography, visual } = state.tokens;
|
|
157
|
+
|
|
158
|
+
// Set dimensions based on current target (default: Twitter 1200x675)
|
|
159
|
+
card.style.width = '1200px';
|
|
160
|
+
card.style.height = '675px';
|
|
161
|
+
|
|
162
|
+
// Background styles
|
|
163
|
+
switch (background) {
|
|
164
|
+
case 'gradient':
|
|
165
|
+
card.style.background = `linear-gradient(135deg, ${colors.primary}, ${colors.secondary})`;
|
|
166
|
+
card.style.color = colors.primaryForeground;
|
|
167
|
+
break;
|
|
168
|
+
case 'solid':
|
|
169
|
+
card.style.background = colors.primary;
|
|
170
|
+
card.style.color = colors.primaryForeground;
|
|
171
|
+
break;
|
|
172
|
+
case 'dark':
|
|
173
|
+
card.style.background = '#0F172A';
|
|
174
|
+
card.style.color = '#F8FAFC';
|
|
175
|
+
break;
|
|
176
|
+
case 'light':
|
|
177
|
+
card.style.background = colors.background;
|
|
178
|
+
card.style.color = colors.foreground;
|
|
179
|
+
break;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
// Layout variants
|
|
183
|
+
// ... (agent writes layout-specific positioning)
|
|
184
|
+
|
|
185
|
+
// Scale to fit canvas
|
|
186
|
+
const canvas = document.getElementById('canvas');
|
|
187
|
+
const scale = Math.min(
|
|
188
|
+
canvas.clientWidth / 1200,
|
|
189
|
+
canvas.clientHeight / 675
|
|
190
|
+
);
|
|
191
|
+
card.style.transform = `scale(${scale})`;
|
|
192
|
+
card.style.transformOrigin = 'top left';
|
|
193
|
+
}
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
## Multi-Preview Strip
|
|
197
|
+
|
|
198
|
+
Below the main canvas, render the same social card at all target sizes simultaneously, scaled down to thumbnails:
|
|
199
|
+
|
|
200
|
+
```javascript
|
|
201
|
+
const SOCIAL_TARGETS = [
|
|
202
|
+
{ name: 'Twitter/X', w: 1200, h: 675 },
|
|
203
|
+
{ name: 'LinkedIn', w: 1200, h: 627 },
|
|
204
|
+
{ name: 'Instagram', w: 1080, h: 1080 },
|
|
205
|
+
{ name: 'Story', w: 1080, h: 1920 },
|
|
206
|
+
];
|
|
207
|
+
|
|
208
|
+
function renderMultiPreview() {
|
|
209
|
+
const strip = document.getElementById('multi-preview');
|
|
210
|
+
strip.innerHTML = '';
|
|
211
|
+
for (const target of SOCIAL_TARGETS) {
|
|
212
|
+
const thumb = createSocialCardClone(target.w, target.h);
|
|
213
|
+
const scale = 80 / target.h; // 80px tall thumbnails
|
|
214
|
+
thumb.style.transform = `scale(${scale})`;
|
|
215
|
+
thumb.style.transformOrigin = 'top left';
|
|
216
|
+
// Wrap in container sized to scaled dimensions
|
|
217
|
+
const wrapper = document.createElement('div');
|
|
218
|
+
wrapper.style.width = `${target.w * scale}px`;
|
|
219
|
+
wrapper.style.height = '80px';
|
|
220
|
+
wrapper.style.overflow = 'hidden';
|
|
221
|
+
wrapper.appendChild(thumb);
|
|
222
|
+
strip.appendChild(wrapper);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
## Governance Implementation
|
|
228
|
+
|
|
229
|
+
Inline WCAG contrast ratio check — no library:
|
|
230
|
+
|
|
231
|
+
```javascript
|
|
232
|
+
function relativeLuminance(hex) {
|
|
233
|
+
const r = parseInt(hex.slice(1,3), 16) / 255;
|
|
234
|
+
const g = parseInt(hex.slice(3,5), 16) / 255;
|
|
235
|
+
const b = parseInt(hex.slice(5,7), 16) / 255;
|
|
236
|
+
const [R, G, B] = [r, g, b].map(c =>
|
|
237
|
+
c <= 0.03928 ? c / 12.92 : Math.pow((c + 0.055) / 1.055, 2.4)
|
|
238
|
+
);
|
|
239
|
+
return 0.2126 * R + 0.7152 * G + 0.0722 * B;
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
function contrastRatio(hex1, hex2) {
|
|
243
|
+
const l1 = relativeLuminance(hex1);
|
|
244
|
+
const l2 = relativeLuminance(hex2);
|
|
245
|
+
const lighter = Math.max(l1, l2);
|
|
246
|
+
const darker = Math.min(l1, l2);
|
|
247
|
+
return (lighter + 0.05) / (darker + 0.05);
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
function runGovernance() {
|
|
251
|
+
const checks = [];
|
|
252
|
+
const { colors } = state.tokens;
|
|
253
|
+
|
|
254
|
+
// Primary on background
|
|
255
|
+
const ratio = contrastRatio(colors.primary, colors.background);
|
|
256
|
+
checks.push({
|
|
257
|
+
label: 'Primary/BG',
|
|
258
|
+
ratio: ratio.toFixed(1),
|
|
259
|
+
pass: ratio >= 4.5,
|
|
260
|
+
level: ratio >= 7 ? 'AAA' : ratio >= 4.5 ? 'AA' : 'Fail',
|
|
261
|
+
});
|
|
262
|
+
|
|
263
|
+
// Foreground on background
|
|
264
|
+
const fgRatio = contrastRatio(colors.foreground, colors.background);
|
|
265
|
+
checks.push({
|
|
266
|
+
label: 'Text/BG',
|
|
267
|
+
ratio: fgRatio.toFixed(1),
|
|
268
|
+
pass: fgRatio >= 4.5,
|
|
269
|
+
level: fgRatio >= 7 ? 'AAA' : fgRatio >= 4.5 ? 'AA' : 'Fail',
|
|
270
|
+
});
|
|
271
|
+
|
|
272
|
+
// Render governance strip
|
|
273
|
+
const strip = document.getElementById('governance');
|
|
274
|
+
strip.innerHTML = checks.map(c =>
|
|
275
|
+
`<span class="gov-check ${c.pass ? 'pass' : 'fail'}">
|
|
276
|
+
${c.pass ? '\u2713' : '\u26a0'} ${c.label}: ${c.level} (${c.ratio}:1)
|
|
277
|
+
</span>`
|
|
278
|
+
).join('');
|
|
279
|
+
}
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
## Theme Toggle
|
|
283
|
+
|
|
284
|
+
The playground chrome defaults to dark. Toggle switches `data-theme` on `<html>`:
|
|
285
|
+
|
|
286
|
+
```javascript
|
|
287
|
+
function toggleTheme() {
|
|
288
|
+
const html = document.documentElement;
|
|
289
|
+
const next = html.dataset.theme === 'dark' ? 'light' : 'dark';
|
|
290
|
+
html.dataset.theme = next;
|
|
291
|
+
state.theme = next;
|
|
292
|
+
}
|
|
293
|
+
```
|
|
294
|
+
|
|
295
|
+
Dark theme uses the brand's dark palette for chrome. Light theme uses the brand's light palette. The preview canvas always shows the asset as it would appear — independent of the playground theme.
|
|
296
|
+
|
|
297
|
+
## Copy to Clipboard
|
|
298
|
+
|
|
299
|
+
```javascript
|
|
300
|
+
async function copyTokens() {
|
|
301
|
+
const json = JSON.stringify(state.tokens, null, 2);
|
|
302
|
+
await navigator.clipboard.writeText(json);
|
|
303
|
+
const btn = document.getElementById('copy-btn');
|
|
304
|
+
btn.textContent = 'Copied!';
|
|
305
|
+
setTimeout(() => btn.textContent = 'Copy Tokens', 1500);
|
|
306
|
+
}
|
|
307
|
+
```
|
|
308
|
+
|
|
309
|
+
## Responsive Behavior
|
|
310
|
+
|
|
311
|
+
The playground is designed for desktop screens (1200px+). On smaller screens:
|
|
312
|
+
- Controls panel collapses to a bottom drawer
|
|
313
|
+
- Preview takes full width
|
|
314
|
+
- Multi-preview strip scrolls horizontally
|
|
315
|
+
|
|
316
|
+
Do not over-engineer responsiveness. This is a local dev tool opened on the developer's workstation.
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
# Patterns to Steal for v3
|
|
2
|
+
|
|
3
|
+
## From a polished review workspace
|
|
4
|
+
|
|
5
|
+
### Global Color Transition (No Layout Jank)
|
|
6
|
+
```css
|
|
7
|
+
* {
|
|
8
|
+
transition-property: color, background-color, border-color, box-shadow;
|
|
9
|
+
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
|
|
10
|
+
transition-duration: 150ms;
|
|
11
|
+
}
|
|
12
|
+
```
|
|
13
|
+
Excludes `transform` and `opacity` to avoid scroll compositing issues.
|
|
14
|
+
|
|
15
|
+
### oklch Glow Effects
|
|
16
|
+
```css
|
|
17
|
+
.glow-primary {
|
|
18
|
+
box-shadow: 0 0 20px oklch(from var(--primary) l c h / 0.15),
|
|
19
|
+
0 0 40px oklch(from var(--primary) l c h / 0.05);
|
|
20
|
+
}
|
|
21
|
+
```
|
|
22
|
+
Derives opacity variants from the same brand hue automatically.
|
|
23
|
+
|
|
24
|
+
### Subtle Grid Background
|
|
25
|
+
```css
|
|
26
|
+
.bg-grid {
|
|
27
|
+
background-image:
|
|
28
|
+
linear-gradient(to right, oklch(0.32 0.02 260 / 0.5) 1px, transparent 1px),
|
|
29
|
+
linear-gradient(to bottom, oklch(0.32 0.02 260 / 0.5) 1px, transparent 1px);
|
|
30
|
+
background-size: 24px 24px;
|
|
31
|
+
}
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
### Double-Pulse Flash (Better Than Fade)
|
|
35
|
+
```css
|
|
36
|
+
@keyframes state-flash {
|
|
37
|
+
0% { background: transparent; }
|
|
38
|
+
10% { background: var(--muted); }
|
|
39
|
+
30% { background: transparent; }
|
|
40
|
+
45% { background: var(--muted); }
|
|
41
|
+
100% { background: transparent; }
|
|
42
|
+
}
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
### Custom Scrollbar
|
|
46
|
+
```css
|
|
47
|
+
::-webkit-scrollbar { width: 6px; height: 6px; }
|
|
48
|
+
::-webkit-scrollbar-track { background: transparent; }
|
|
49
|
+
::-webkit-scrollbar-thumb { background: var(--border); border-radius: 3px; }
|
|
50
|
+
::-webkit-scrollbar-thumb:hover { background: var(--muted-foreground); }
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### Color Swatch Grid Preset Picker
|
|
54
|
+
5 color dots (w-3 h-3 rounded-full) per preset row. Selected state: border-primary + bg-primary/5.
|
|
55
|
+
|
|
56
|
+
### Resizable Panel (~80 lines)
|
|
57
|
+
- `pointerdown/pointermove/pointerup` (unified mouse+touch)
|
|
58
|
+
- 3px drag threshold
|
|
59
|
+
- `getBoundingClientRect()` on start (works regardless of CSS transforms)
|
|
60
|
+
- Min/max clamp + localStorage persistence
|
|
61
|
+
|
|
62
|
+
## From App Store Screenshots Skill
|
|
63
|
+
|
|
64
|
+
### Resolution-Independent Typography
|
|
65
|
+
```
|
|
66
|
+
headline: W * 0.09-0.10, weight 700, lineHeight 0.92-1.0
|
|
67
|
+
category: W * 0.028, weight 600
|
|
68
|
+
```
|
|
69
|
+
All sizes derive from canvas width — adapts to any resolution.
|
|
70
|
+
|
|
71
|
+
### CSS-Only Device Frame
|
|
72
|
+
```css
|
|
73
|
+
background: linear-gradient(180deg, #2C2C2E 0%, #1C1C1E 100%);
|
|
74
|
+
box-shadow: inset 0 0 0 1px rgba(255,255,255,0.1), 0 8px 40px rgba(0,0,0,0.6);
|
|
75
|
+
border-radius: 18px;
|
|
76
|
+
```
|
|
77
|
+
Front camera dot, bezel highlight, screen area with overflow hidden.
|
|
78
|
+
|
|
79
|
+
### Floating Decorative Elements
|
|
80
|
+
- Slight 2-5deg rotation
|
|
81
|
+
- Drop shadows
|
|
82
|
+
- Position at card edges
|
|
83
|
+
- Never blocking main content
|
|
84
|
+
|
|
85
|
+
### Preview vs Export Architecture
|
|
86
|
+
- Preview: `transform: scale()` via ResizeObserver
|
|
87
|
+
- Export: offscreen at true resolution (`position: absolute; left: -9999px`)
|
|
88
|
+
- Double-call html-to-image trick (first warms fonts, second produces clean output)
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: brand-voice
|
|
3
|
+
description: "Define or extract a consistent brand voice that other skills can use. Three modes: Extract (analyze existing content), Build (interview-based),..."
|
|
4
|
+
category: foundation
|
|
5
|
+
tier: must-have
|
|
6
|
+
reads:
|
|
7
|
+
- brand/positioning.md
|
|
8
|
+
- brand/audience.md
|
|
9
|
+
writes:
|
|
10
|
+
- brand/voice-profile.md
|
|
11
|
+
triggers:
|
|
12
|
+
- what's my voice
|
|
13
|
+
- analyze my brand
|
|
14
|
+
- define my voice
|
|
15
|
+
- make this sound like me
|
|
16
|
+
- voice guide
|
|
17
|
+
- brand personality
|
|
18
|
+
- analyze my website
|
|
19
|
+
- brand voice
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
# /brand-voice -- Brand Voice Engine
|
|
23
|
+
|
|
24
|
+
Generic copy converts worse than copy with a distinct voice. Not because the
|
|
25
|
+
words are different -- because the reader feels like they're hearing from a
|
|
26
|
+
PERSON, not a marketing team.
|
|
27
|
+
|
|
28
|
+
This skill defines that voice. Either by extracting it from existing content,
|
|
29
|
+
building it strategically from scratch, or auto-scraping a URL to analyze a
|
|
30
|
+
brand's public presence.
|
|
31
|
+
|
|
32
|
+
For output formatting, see /cmo [rules/output-format.md](../cmo/rules/output-format.md).
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
## On Activation
|
|
37
|
+
|
|
38
|
+
1. Read `brand/` context:
|
|
39
|
+
- **positioning.md** — If available, use market angles to inform voice differentiation. A brand positioned as "the anti-course course" needs a different voice than one positioned as "enterprise-grade."
|
|
40
|
+
- **audience.md** — If available, tailor vocabulary and tone to the target reader. Technical builders get different language than busy executives.
|
|
41
|
+
- If neither exists, proceed with defaults. Ask the user about their market and audience during the question sequence.
|
|
42
|
+
2. Check if `./brand/voice-profile.md` already exists:
|
|
43
|
+
- **Exists** → Update mode: show current profile summary, ask what to change.
|
|
44
|
+
- **Does not exist** → Proceed to Mode Selection below.
|
|
45
|
+
3. Assess the user's request to determine which mode to use (Extract, Build, or Auto-Scrape).
|
|
46
|
+
|
|
47
|
+
## Three Modes
|
|
48
|
+
|
|
49
|
+
### Mode 1: Extract (analyze existing content)
|
|
50
|
+
|
|
51
|
+
User provides 3-5 pieces of existing content (blog posts, emails, social posts, about page, etc).
|
|
52
|
+
|
|
53
|
+
**The analysis process:**
|
|
54
|
+
|
|
55
|
+
1. **Read all provided content** -- look for patterns, not individual word choices
|
|
56
|
+
2. **Identify the voice DNA:**
|
|
57
|
+
- Sentence structure (short/punchy vs. flowing/complex)
|
|
58
|
+
- Vocabulary level (everyday vs. technical vs. academic)
|
|
59
|
+
- Emotional register (warm/friendly vs. authoritative vs. irreverent)
|
|
60
|
+
- Perspective (first-person storytelling vs. objective analysis)
|
|
61
|
+
- Rhythm (varies sentence length? staccato? musical?)
|
|
62
|
+
3. **Map the personality axes** (see Voice DNA Framework below)
|
|
63
|
+
4. **Generate the voice profile**
|
|
64
|
+
5. **Write to ./brand/voice-profile.md**
|
|
65
|
+
|
|
66
|
+
### Mode 2: Build (construct from scratch)
|
|
67
|
+
|
|
68
|
+
No existing content. Build voice strategically through guided questions.
|
|
69
|
+
|
|
70
|
+
**The question sequence:**
|
|
71
|
+
|
|
72
|
+
1. "If your brand were a person at a dinner party, how would they talk?"
|
|
73
|
+
2. "Who is your audience? Technical builders, creative professionals, busy executives, everyday consumers, or a mix?"
|
|
74
|
+
3. "Name 2-3 brands whose tone you admire (not their product -- their VOICE)."
|
|
75
|
+
4. "What words should NEVER appear in your marketing? What feels off-brand?"
|
|
76
|
+
5. "Show me something you've written that felt 'right' -- even a Slack message or email."
|
|
77
|
+
|
|
78
|
+
### Mode 3: Auto-Scrape (URL analysis)
|
|
79
|
+
|
|
80
|
+
User provides a URL. Skill uses Exa MCP to research the brand's public presence.
|
|
81
|
+
|
|
82
|
+
1. Use Exa MCP to search for the brand's website content, social profiles, and public-facing copy
|
|
83
|
+
2. Analyze homepage, about page, social bios, recent posts
|
|
84
|
+
3. Extract voice patterns using the same DNA framework as Mode 1
|
|
85
|
+
4. Present findings and ask user to confirm/adjust
|
|
86
|
+
5. Generate voice profile
|
|
87
|
+
|
|
88
|
+
## Mode Selection
|
|
89
|
+
|
|
90
|
+
Not sure which mode? Here's the decision tree:
|
|
91
|
+
- **Have 3+ pieces of existing content** (blog posts, emails, landing pages) → Mode 1: Extract
|
|
92
|
+
- **Starting fresh with no content** → Mode 2: Build via interview
|
|
93
|
+
- **Have a live website URL** → Mode 3: Auto-Scrape
|
|
94
|
+
|
|
95
|
+
If the brand has both a website AND existing content, prefer Mode 1 (Extract) — it captures the voice the brand already uses, which is more authentic than what a URL scan reveals.
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
## Voice DNA Framework
|
|
100
|
+
|
|
101
|
+
Every voice maps across these axes:
|
|
102
|
+
|
|
103
|
+
### Personality Spectrum
|
|
104
|
+
|
|
105
|
+
Rate each 1-10 with brief justification:
|
|
106
|
+
- Formal / Casual
|
|
107
|
+
- Reserved / Expressive
|
|
108
|
+
- Serious / Playful
|
|
109
|
+
- Traditional / Progressive
|
|
110
|
+
- Complex / Simple
|
|
111
|
+
- Cautious / Bold
|
|
112
|
+
|
|
113
|
+
### Voice Markers
|
|
114
|
+
|
|
115
|
+
**Sentence patterns:** Average length, variation, structure (simple/compound/fragmented)
|
|
116
|
+
|
|
117
|
+
**Vocabulary:** Jargon level (none/light/technical), power words, forbidden words
|
|
118
|
+
|
|
119
|
+
**Perspective:** Person (I/we/you), distance (intimate/conversational/professional), authority (peer/mentor/expert/challenger)
|
|
120
|
+
|
|
121
|
+
### The Do/Don't Table
|
|
122
|
+
|
|
123
|
+
Minimum 5 rows, maximum 10. Specific voice behaviors and example phrases.
|
|
124
|
+
|
|
125
|
+
### Platform Adaptation Table
|
|
126
|
+
|
|
127
|
+
| Platform | Tone Shift | Length | Special Notes |
|
|
128
|
+
|----------|-----------|--------|--------------|
|
|
129
|
+
| LinkedIn | More professional, authority-forward | Medium | Lead with insight |
|
|
130
|
+
| Twitter/X | Punchier, more direct | Short | Fragment sentences OK |
|
|
131
|
+
| Instagram | Warmer, more visual language | Short-Medium | Casual, aspirational |
|
|
132
|
+
| Email | Most personal, conversational | Medium-Long | First-person storytelling |
|
|
133
|
+
| Blog/SEO | Most detailed, structured | Long | Can be more technical |
|
|
134
|
+
| TikTok | Most casual, spoken-word feel | Very short | Conversational, raw |
|
|
135
|
+
| Threads | Thoughtful, conversational | Short-Medium | Opinion-led |
|
|
136
|
+
| Bluesky | Nuanced, substantive | Short | Informed, not aggressive |
|
|
137
|
+
|
|
138
|
+
---
|
|
139
|
+
|
|
140
|
+
## Output Format
|
|
141
|
+
|
|
142
|
+
### Header
|
|
143
|
+
|
|
144
|
+
```
|
|
145
|
+
BRAND VOICE PROFILE
|
|
146
|
+
[Brand/Person Name]
|
|
147
|
+
Generated [Month Day, Year]
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
### Content
|
|
151
|
+
|
|
152
|
+
1. **Voice Summary** (2-3 sentences capturing the essence)
|
|
153
|
+
2. **Personality Spectrum** (rated axes)
|
|
154
|
+
3. **Voice Markers** (sentence patterns, vocabulary, perspective)
|
|
155
|
+
4. **The Do/Don't Table**
|
|
156
|
+
5. **Platform Adaptation Table**
|
|
157
|
+
6. **Sample Copy** (3 examples: short social post, email opener, landing page headline)
|
|
158
|
+
|
|
159
|
+
### Files Saved
|
|
160
|
+
|
|
161
|
+
Write to `./brand/voice-profile.md`.
|
|
162
|
+
|
|
163
|
+
### What's Next
|
|
164
|
+
|
|
165
|
+
```
|
|
166
|
+
-> /positioning-angles Find your market angle
|
|
167
|
+
-> /direct-response-copy Write copy in your voice
|
|
168
|
+
-> /content-atomizer Create social content
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
---
|
|
172
|
+
|
|
173
|
+
## File Output Protocol
|
|
174
|
+
|
|
175
|
+
Write ./brand/voice-profile.md with: last updated, voice summary, personality spectrum, voice markers, do/don't table, platform adaptations, sample copy.
|
|
176
|
+
|
|
177
|
+
**If ./brand/voice-profile.md already exists:** Read existing file, show what will change, ask for confirmation before overwriting.
|
|
178
|
+
|
|
179
|
+
---
|
|
180
|
+
|
|
181
|
+
## Feedback
|
|
182
|
+
|
|
183
|
+
After the voice profile is saved and used in at least one downstream skill, collect feedback:
|
|
184
|
+
- "How did the voice feel in that [email/post/page]? (a) Nailed it, (b) Close but edited, (c) Off, (d) Haven't used yet"
|
|
185
|
+
- For (a) or (b): append what worked to `brand/learnings.md` with date and skill name.
|
|
186
|
+
- For (c): ask what felt wrong, adjust the voice profile, and log the change to `brand/learnings.md`.
|
|
187
|
+
|
|
188
|
+
|
|
189
|
+
## Voice Test Loop (Required)
|
|
190
|
+
|
|
191
|
+
After generating a voice profile from ANY mode, validate before saving. Full details in [references/voice-modes.md](references/voice-modes.md).
|
|
192
|
+
|
|
193
|
+
1. Generate 3 sample paragraphs in the brand's voice: email opening, social post, landing page hero.
|
|
194
|
+
2. Present with options: (1) Nails it → save, (2) Close but needs adjustment → ask what's off, revise, re-test, (3) Not quite right → ask for examples, rebuild relevant sections, re-test.
|
|
195
|
+
3. After 3 rounds without confirmation, offer: save current version, one more round, or restart with a different mode.
|
|
196
|
+
|
|
197
|
+
Never skip this step. Never save a profile without user confirmation.
|
|
198
|
+
|
|
199
|
+
## Anti-Patterns
|
|
200
|
+
|
|
201
|
+
| Anti-pattern | Instead | Why |
|
|
202
|
+
|-------------|---------|-----|
|
|
203
|
+
| Generating a generic "professional yet approachable" voice | Extract specific patterns from real content or deep questioning | Generic profiles are useless — every downstream skill produces the same bland output. The whole point is differentiation. |
|
|
204
|
+
| Skipping the Voice Test Loop | Always validate with 3 samples before saving | A profile that looks right on paper can sound wrong in practice. The test loop catches mismatches before they propagate to all other skills. |
|
|
205
|
+
| Copy-pasting platform adaptation template defaults | Each brand has different platform behaviors — think about each one | A casual brand might be MORE formal on LinkedIn. A formal brand might loosen up on Twitter. Defaults are wrong by definition. |
|
|
206
|
+
| Writing the profile without reading existing brand context | Check positioning.md and audience.md first | Voice should align with positioning and audience. Writing voice in isolation means rewriting it later when those files exist. |
|
|
207
|
+
| Overwriting an existing profile without showing diff | Read existing file, show what will change, get confirmation | The user may have manually tweaked the profile. Blindly overwriting loses their refinements. |
|
|
208
|
+
| Producing a profile with no example phrases | On-brand and off-brand examples are required | Examples are the fastest way for downstream skills to calibrate. Without them, other skills have to interpret abstract axes, which leads to drift. |
|
|
209
|
+
|
|
210
|
+
## Invocation
|
|
211
|
+
|
|
212
|
+
This skill activates when:
|
|
213
|
+
- User asks "what's my voice" or "analyze my brand"
|
|
214
|
+
- User says copy sounds "generic" or "off-brand"
|
|
215
|
+
- Another skill needs voice context but ./brand/voice-profile.md doesn't exist
|
|
216
|
+
- User provides a URL and asks to analyze the brand
|
|
217
|
+
|
|
218
|
+
## What This Skill Is NOT
|
|
219
|
+
|
|
220
|
+
- Does NOT write copy (that is /direct-response-copy)
|
|
221
|
+
- Does NOT define positioning (that is /positioning-angles)
|
|
222
|
+
- Does NOT research the audience (that is /audience-research)
|
|
223
|
+
- Does NOT create visual identity (that is /creative)
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# Honesty as a Positioning Lever
|
|
2
|
+
|
|
3
|
+
Most brand voice work treats honesty as a tone modifier — "be transparent," "no buzzwords." That undersells it. **Honesty is a positioning lever.** When a brand publishes a tradeoff where a competitor wins, three things happen:
|
|
4
|
+
|
|
5
|
+
1. The reader's skepticism filter drops. Vendor-published comparisons are presumed biased; conceding the obvious removes that assumption.
|
|
6
|
+
2. The wins land harder. "We're better at X, Y, Z" reads as marketing copy. "They're better at A, B, C; we're better at X, Y, Z" reads as honest analysis.
|
|
7
|
+
3. AI engines cite it. Perplexity, ChatGPT, Google AI Overviews preferentially cite sources that show "thinking" — pages that hedge every claim ("it depends") and pages that claim total superiority both get skipped. The honest middle gets cited.
|
|
8
|
+
|
|
9
|
+
This reference doc lives in `skills/brand-voice/references/` because **honesty is a voice rule, not an SEO rule**. It applies to alternatives pages, landing-page heroes, cold emails, lead magnets, founder bios, and About pages. Any surface where a buyer is evaluating whether to trust the brand benefits from this discipline.
|
|
10
|
+
|
|
11
|
+
## Where to apply
|
|
12
|
+
|
|
13
|
+
| Surface | Honesty move | What it earns |
|
|
14
|
+
|---|---|---|
|
|
15
|
+
| `/alternatives/[competitor]` | "Choose [competitor] if:" section with 3 concrete tradeoffs where they win | Trust + AI-citation eligibility + conversion (reader feels seen, not sold) |
|
|
16
|
+
| Landing-page hero | "Not for [persona X]. Built for [persona Y]." | Higher conversion among the right persona (lower among the wrong one — desirable filtering) |
|
|
17
|
+
| Cold email | "We probably aren't the right fit if [scenario]." | Reply rate 2-3× vs generic "we help everyone" framing |
|
|
18
|
+
| Pricing page | "Why we cost more than [competitor]" or "Why we're cheaper than [competitor]" | Pre-empts objection; shows the brand has thought about its own pricing |
|
|
19
|
+
| Founder bio / About | "We started this because [we got burned by X]" | Authenticity signal; reader believes the brand has skin in the game |
|
|
20
|
+
| Lead magnet pitch | "Don't download this if [scenario where it won't help]" | Higher download-to-conversion rate (only the right audience downloads) |
|
|
21
|
+
| Comparison emails to sales prospects | "Here's what we don't do well yet" | Prospect trusts the rep more; deal cycle shortens |
|
|
22
|
+
|
|
23
|
+
## The 3-tradeoff rule
|
|
24
|
+
|
|
25
|
+
When applied to comparison content (`/alternatives` pages, `/compare` pages, sales decks), the honesty section MUST contain **at least 3 concrete tradeoffs** where the competitor wins:
|
|
26
|
+
|
|
27
|
+
1. **Concrete** — names a specific feature, price point, integration, or scenario. Not "their UI is more polished" (vague). Yes "they support SSO on the $X/mo plan; we don't" (specific, verifiable).
|
|
28
|
+
2. **Real** — actually true. Don't manufacture weakness to look humble; readers and AI engines both detect performative honesty.
|
|
29
|
+
3. **Relevant to the buyer's decision** — the tradeoff has to matter to someone reading the page. "They have better office furniture" is honest but irrelevant.
|
|
30
|
+
|
|
31
|
+
Fewer than 3 tradeoffs feels token. More than 5 starts to make your product look bad. Three is the sweet spot.
|
|
32
|
+
|
|
33
|
+
## Anti-patterns
|
|
34
|
+
|
|
35
|
+
- **Performative honesty.** "Honestly, our brand voice could use work." Empty admission with no concrete cost. Reads as fishing for compliments.
|
|
36
|
+
- **Strawman tradeoffs.** "They have a flashier website but we focus on real value." That's a non-tradeoff dressed up as humility.
|
|
37
|
+
- **Backhanded compliments.** "[Competitor] is great if you have a huge budget." Snark masquerading as honesty.
|
|
38
|
+
- **Hedging-everything.** "Both products have strengths, it really depends on your use case, you should evaluate carefully…" — refusing to take a stance is the opposite of honesty.
|
|
39
|
+
- **Honesty without a path forward.** Naming a weakness without explaining what the brand does instead or why it's a fair tradeoff = self-sabotage. Always pair "we don't do X" with "because we focus on Y, which matters more if you're Z."
|
|
40
|
+
|
|
41
|
+
## Sourcing real tradeoffs
|
|
42
|
+
|
|
43
|
+
Where to find competitor wins worth conceding:
|
|
44
|
+
|
|
45
|
+
| Source | What you'll find |
|
|
46
|
+
|---|---|
|
|
47
|
+
| G2 / Capterra reviews of YOUR product | Look at the 3-star reviews — what do users say they miss? |
|
|
48
|
+
| G2 / Capterra reviews of COMPETITOR | What do competitor users praise? Those are real strengths. |
|
|
49
|
+
| Reddit threads comparing the two | Unfiltered opinions; ignore the noise but the recurring complaints are signal |
|
|
50
|
+
| Churn-reason interviews | Why customers left for the competitor — the most expensive data, the most accurate |
|
|
51
|
+
| Sales call recordings | Where your reps lose deals — the objection you can't overcome is the tradeoff worth conceding |
|
|
52
|
+
| Internal "what they do better" doc | Most product teams have one; ask product or eng |
|
|
53
|
+
|
|
54
|
+
If a tradeoff can't be sourced from one of the above, mark it `"unverified — needs evidence"` rather than ship a fabricated one.
|
|
55
|
+
|
|
56
|
+
## Cross-references
|
|
57
|
+
|
|
58
|
+
- `skills/competitor-alternatives/SKILL.md` — applies this rule to every `/alternatives` page as a required section
|
|
59
|
+
- `skills/seo-machine/references/patterns/alternatives.md` — Pattern A quality bar enforces the 3-tradeoff minimum
|
|
60
|
+
- `brand/SCHEMA.md` — `positioning.md > ## Anti-Positioning` is the upstream source: who the brand is NOT for. The anti-positioning slot feeds every honesty section downstream.
|