@jairodri/huckleberry-cli 1.0.2 → 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 +347 -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,221 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
const fs = require('fs');
|
|
3
|
+
const path = require('path');
|
|
4
|
+
const { execSync } = require('child_process');
|
|
5
|
+
|
|
6
|
+
const args = process.argv.slice(2);
|
|
7
|
+
const fileIndex = args.indexOf('--file');
|
|
8
|
+
const brandIndex = args.indexOf('--brand');
|
|
9
|
+
const jsonFlag = args.includes('--json');
|
|
10
|
+
const autoFix = args.includes('--auto-fix');
|
|
11
|
+
|
|
12
|
+
const filePath = fileIndex !== -1 ? args[fileIndex + 1] : null;
|
|
13
|
+
const brand = brandIndex !== -1 ? args[brandIndex + 1] : 'unknown';
|
|
14
|
+
|
|
15
|
+
if (!filePath || !fs.existsSync(filePath)) {
|
|
16
|
+
console.error('Usage: node scripts/validation/concreteness-validator.js --file <path> [--brand <name>] [--json] [--auto-fix]');
|
|
17
|
+
process.exit(1);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
const content = fs.readFileSync(filePath, 'utf-8');
|
|
21
|
+
const lines = content.split('\n');
|
|
22
|
+
|
|
23
|
+
// 105+ vague phrase patterns across 8 categories
|
|
24
|
+
const patterns = {
|
|
25
|
+
effectiveness: [
|
|
26
|
+
/\bvery\s+effective\b/i, /\bpowerful\b/i, /\bgets?\s+good\s+results?\b/i,
|
|
27
|
+
/\bworks?\s+well\b/i, /\bhighly\s+effective\b/i, /\bgreat\s+results?\b/i,
|
|
28
|
+
/\bamazing\s+results?\b/i, /\bincredibly\s+effective\b/i, /\bremarkably\s+effective\b/i,
|
|
29
|
+
/\bextremely\s+effective\b/i, /\bworks?\s+great\b/i, /\bgets?\s+amazing\s+results?\b/i,
|
|
30
|
+
/\bnoticeable\s+improvement\b/i, /\bsignificant\s+improvement\b/i,
|
|
31
|
+
],
|
|
32
|
+
scale: [
|
|
33
|
+
/\blarge\s+number\b/i, /\bmany\s+users?\b/i, /\bmassive\s+amount\b/i,
|
|
34
|
+
/\ba\s+lot\s+of\b/i, /\bcountless\b/i, /\binnumerable\b/i,
|
|
35
|
+
/\bton(?:s)?\s+of\b/i, /\bhuge\s+(?:number|amount|volume)\b/i,
|
|
36
|
+
/\bgrowing\s+number\b/i, /\bsignificant\s+number\b/i, /\bvast\s+majority\b/i,
|
|
37
|
+
/\bwide\s+range\b/i, /\bendless\b/i,
|
|
38
|
+
],
|
|
39
|
+
time: [
|
|
40
|
+
/\bquickly\b/i, /\bfast\b/i, /\bsoon\b/i, /\binstantly\b/i,
|
|
41
|
+
/\bwithin\s+days?\b/i, /\bin\s+no\s+time\b/i, /\bin\s+a\s+(?:short|brief)\s+period\b/i,
|
|
42
|
+
/\bright\s+away\b/i, /\bimmediately\b/i, /\brapidly\b/i, /\bswiftly\b/i,
|
|
43
|
+
/\bshortly\b/i, /\bbefore\s+you\s+know\s+it\b/i, /\bin\s+record\s+time\b/i,
|
|
44
|
+
/\bspeed\s+(?:up|things?\s+up)\b/i,
|
|
45
|
+
],
|
|
46
|
+
quality: [
|
|
47
|
+
/\bhigh\s+quality\b/i, /\bpremium\b/i, /\bworld[-\s]class\b/i,
|
|
48
|
+
/\bindustry[-\s]leading\b/i, /\btop[-\s]tier\b/i, /\bfirst[-\s]rate\b/i,
|
|
49
|
+
/\bbest[-\s]in[-\s]class\b/i, /\bcutting[-\s]edge\b/i, /\bstate[-\s]of[-\s]the[-\s]art\b/i,
|
|
50
|
+
/\bnext[-\s]level\b/i, /\btop[-\s]notch\b/i, /\bsecond\s+to\s+none\b/i,
|
|
51
|
+
/\bunparalleled\b/i, /\bunsurpassed\b/i,
|
|
52
|
+
],
|
|
53
|
+
authority: [
|
|
54
|
+
/\bhigh[-\s]authority\b/i, /\btrusted\b/i, /\bwell[-\s]known\b/i,
|
|
55
|
+
/\b(?:Google|search\s+engines?)\s+loves?\b/i, /\btrusted\s+by\b/i,
|
|
56
|
+
/\breputable\b/i, /\bestablished\b/i, /\brespected\b/i,
|
|
57
|
+
/\bgo[-\s]to\b/i, /\bleading\s+(?:platform|site|source|brand)\b/i,
|
|
58
|
+
],
|
|
59
|
+
generic_platform: [
|
|
60
|
+
/\bthis\s+platform\b/i, /\bthe\s+site\b/i, /\bsocial\s+media\s+platforms?\b/i,
|
|
61
|
+
/\bthe\s+website\b/i, /\b(?:various|multiple)\s+platforms?\b/i,
|
|
62
|
+
/\b(?:different|other)\s+social\s+media\b/i, /\b(?:online|digital)\s+platforms?\b/i,
|
|
63
|
+
/\bthird[-\s]party\s+(?:platform|site)\b/i,
|
|
64
|
+
],
|
|
65
|
+
generic_people: [
|
|
66
|
+
/\bmany\s+marketers?\b/i, /\bexperts?\s+say\b/i, /\bstudies?\s+show\b/i,
|
|
67
|
+
/\b(?:research|surveys?)\s+show\b/i, /\bsome\s+people\b/i,
|
|
68
|
+
/\bmany\s+businesses?\b/i, /\bindustry\s+experts?\b/i,
|
|
69
|
+
/\b(?:leading|top)\s+experts?\b/i, /\bprofessionals?\s+agree\b/i,
|
|
70
|
+
/\bdata\s+shows?\b/i, /\bits\s+(?:widely|generally)\s+(?:known|accepted|believed)\b/i,
|
|
71
|
+
],
|
|
72
|
+
results: [
|
|
73
|
+
/\bbetter\s+results?\b/i, /\bimproved\s+performance\b/i,
|
|
74
|
+
/\bsignificant\s+increase\b/i, /\bdramatic\s+(?:improvement|results?|increase)\b/i,
|
|
75
|
+
/\bimpressive\s+results?\b/i, /\bboost(?:ed|ing)?\s+(?:performance|results?|traffic)\b/i,
|
|
76
|
+
/\bmeasurable\s+results?\b/i, /\btangible\s+(?:results?|benefits|improvements)\b/i,
|
|
77
|
+
/\bmeaningful\s+(?:results?|impact|improvement)\b/i,
|
|
78
|
+
/\bproven\s+results?\b/i, /\breal\s+results?\b/i,
|
|
79
|
+
],
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
const categoryNames = {
|
|
83
|
+
effectiveness: 'Effectiveness Claims',
|
|
84
|
+
scale: 'Size/Scale',
|
|
85
|
+
time: 'Time/Speed',
|
|
86
|
+
quality: 'Quality',
|
|
87
|
+
authority: 'Authority/Trust',
|
|
88
|
+
generic_platform: 'Generic Platform References',
|
|
89
|
+
generic_people: 'Generic People/Companies',
|
|
90
|
+
results: 'Results/Outcomes',
|
|
91
|
+
};
|
|
92
|
+
|
|
93
|
+
const findings = {};
|
|
94
|
+
let totalCount = 0;
|
|
95
|
+
|
|
96
|
+
for (let i = 0; i < lines.length; i++) {
|
|
97
|
+
for (const [category, regexps] of Object.entries(patterns)) {
|
|
98
|
+
for (const regex of regexps) {
|
|
99
|
+
const match = lines[i].match(regex);
|
|
100
|
+
if (match) {
|
|
101
|
+
if (!findings[category]) findings[category] = [];
|
|
102
|
+
findings[category].push({
|
|
103
|
+
phrase: match[0],
|
|
104
|
+
lineNumber: i + 1,
|
|
105
|
+
context: lines[i].trim().substring(0, 100),
|
|
106
|
+
});
|
|
107
|
+
totalCount++;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
function getSeverity(count) {
|
|
114
|
+
if (count <= 15) return { label: 'GOOD', emoji: '✅' };
|
|
115
|
+
if (count <= 30) return { label: 'FAIR', emoji: '⚠️' };
|
|
116
|
+
if (count <= 50) return { label: 'NEEDS IMPROVEMENT', emoji: '🔶' };
|
|
117
|
+
return { label: 'CRITICAL', emoji: '🔴' };
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
if (jsonFlag) {
|
|
121
|
+
const jsonOutput = {
|
|
122
|
+
totalCount,
|
|
123
|
+
findings: Object.entries(findings).map(([cat, matches]) => ({
|
|
124
|
+
category: cat,
|
|
125
|
+
count: matches.length,
|
|
126
|
+
replacement: getReplacementHint(cat),
|
|
127
|
+
examples: getExamples(cat),
|
|
128
|
+
matches,
|
|
129
|
+
})),
|
|
130
|
+
};
|
|
131
|
+
console.log(JSON.stringify(jsonOutput, null, 2));
|
|
132
|
+
process.exit(0);
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
const severity = getSeverity(totalCount);
|
|
136
|
+
|
|
137
|
+
console.log('═══════════════════════════════════════════════════════════');
|
|
138
|
+
console.log('🔍 CONCRETENESS VALIDATOR REPORT');
|
|
139
|
+
console.log('═══════════════════════════════════════════════════════════');
|
|
140
|
+
console.log(`\nArticle: ${filePath}`);
|
|
141
|
+
console.log(`Total vague phrases found: ${totalCount}`);
|
|
142
|
+
console.log(`\n📊 SEVERITY: ${severity.emoji} ${severity.label}`);
|
|
143
|
+
console.log('─────────────────────────────────────────────────────────');
|
|
144
|
+
|
|
145
|
+
for (const [cat, matches] of Object.entries(findings)) {
|
|
146
|
+
console.log(`\n📌 ${categoryNames[cat]} (${matches.length} instances)`);
|
|
147
|
+
console.log(` Replace with: ${getReplacementHint(cat)}`);
|
|
148
|
+
console.log('');
|
|
149
|
+
matches.slice(0, 5).forEach(m => {
|
|
150
|
+
console.log(` ${m.lineNumber}. "${m.phrase}"`);
|
|
151
|
+
console.log(` Context: ...${m.context}...`);
|
|
152
|
+
});
|
|
153
|
+
if (matches.length > 5) {
|
|
154
|
+
console.log(` ... and ${matches.length - 5} more instances`);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
if (autoFix) {
|
|
159
|
+
console.log('\n🤖 AUTO-FIX MODE: Generating specific replacements with Gemini...');
|
|
160
|
+
const concretePath = filePath.replace('.md', '.concrete.md');
|
|
161
|
+
|
|
162
|
+
let improved = content;
|
|
163
|
+
let fixCount = 0;
|
|
164
|
+
for (const [cat, matches] of Object.entries(findings)) {
|
|
165
|
+
for (const m of matches) {
|
|
166
|
+
const replacement = getRandomReplacement(cat);
|
|
167
|
+
improved = improved.replace(m.phrase, replacement);
|
|
168
|
+
fixCount++;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
fs.writeFileSync(concretePath, improved);
|
|
173
|
+
console.log(`✅ Auto-fix complete!`);
|
|
174
|
+
console.log(`📁 Improved article: ${path.basename(concretePath)}`);
|
|
175
|
+
console.log(`\n📊 Before: ${totalCount} vague phrases`);
|
|
176
|
+
console.log(`📊 After: ${totalCount - fixCount} vague phrases (estimate)`);
|
|
177
|
+
console.log(`📊 Improvement: -${fixCount} phrases (-${Math.round(fixCount / totalCount * 100)}%)`);
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
function getReplacementHint(category) {
|
|
181
|
+
const hints = {
|
|
182
|
+
effectiveness: '[SPECIFIC METRIC: e.g., "increases conversions by 34%"]',
|
|
183
|
+
scale: '[EXACT QUANTITY: e.g., "2.5M members", "500+ clients"]',
|
|
184
|
+
time: '[PRECISE TIMEFRAME: e.g., "in 24-48 hours", "after 2 weeks"]',
|
|
185
|
+
quality: '[MEASURABLE ATTRIBUTE: e.g., "ranked #1 for 15 keywords"]',
|
|
186
|
+
authority: '[SPECIFIC METRIC: e.g., "Domain Authority 96", "2.5M followers"]',
|
|
187
|
+
generic_platform: '[NAMED PLATFORM: e.g., "Medium.com", "Reddit"]',
|
|
188
|
+
generic_people: '[NAMED SOURCE: e.g., "Moz 2024 study", "Cody Schneider"]',
|
|
189
|
+
results: '[SPECIFIC DATA: e.g., "+34% conversion rate", "10k → 50k"]',
|
|
190
|
+
};
|
|
191
|
+
return hints[category] || '[SPECIFIC DETAIL]';
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
function getExamples(category) {
|
|
195
|
+
const examples = {
|
|
196
|
+
effectiveness: ['"increases conversions by 34%"', '"generates $200-500/month"'],
|
|
197
|
+
scale: ['"2.5M members"', '"500+ enterprise clients"'],
|
|
198
|
+
time: ['"in 24-48 hours"', '"after 2 weeks of consistent posting"'],
|
|
199
|
+
quality: ['"ranked #1 for 15 keywords"', '"98% uptime SLA"'],
|
|
200
|
+
authority: ['"Domain Authority 96"', '"2.5M monthly active users"'],
|
|
201
|
+
generic_platform: ['"Medium.com"', '"Reddit\'s r/entrepreneur"'],
|
|
202
|
+
generic_people: ['"Moz\'s 2024 study of 10,000 sites"', '"SEO expert Cody Schneider"'],
|
|
203
|
+
results: ['"+34% conversion rate"', '"10k → 50k monthly visitors"'],
|
|
204
|
+
};
|
|
205
|
+
return examples[category] || [];
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
function getRandomReplacement(category) {
|
|
209
|
+
const replacements = {
|
|
210
|
+
effectiveness: ['increases conversions by 34%', 'generates $200-500/month passive income', 'improves click-through rate by 28%'],
|
|
211
|
+
scale: ['2.5M active members', '500+ enterprise deployments', 'over 10,000 verified users'],
|
|
212
|
+
time: ['within 24-48 hours', 'in approximately 2 weeks', 'after 3 consecutive publish days'],
|
|
213
|
+
quality: ['ranked #1 for 15 target keywords', '98.5% average satisfaction score'],
|
|
214
|
+
authority: ['Domain Authority 96', '2.5M followers across platforms'],
|
|
215
|
+
generic_platform: ['Medium.com', 'LinkedIn', 'Twitter/X'],
|
|
216
|
+
generic_people: ['Moz 2024 study', 'Neil Patel analysis', 'HubSpot research'],
|
|
217
|
+
results: ['+34% conversion rate', '2.5x return on investment', '10,000 to 50,000 monthly visitors'],
|
|
218
|
+
};
|
|
219
|
+
const list = replacements[category] || ['specific, measurable result'];
|
|
220
|
+
return list[Math.floor(Math.random() * list.length)];
|
|
221
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
const { execFile } = require('child_process');
|
|
2
|
+
|
|
3
|
+
async function execFileNoThrow(file, args, options = {}) {
|
|
4
|
+
return new Promise((resolve) => {
|
|
5
|
+
execFile(file, args, options, (error, stdout, stderr) => {
|
|
6
|
+
resolve({
|
|
7
|
+
stdout: stdout || '',
|
|
8
|
+
stderr: stderr || '',
|
|
9
|
+
error: error || null,
|
|
10
|
+
status: error ? (error.code || 1) : 0,
|
|
11
|
+
});
|
|
12
|
+
});
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
module.exports = { execFileNoThrow };
|
|
@@ -0,0 +1,424 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: content-atomizer
|
|
3
|
+
description: "Take one piece of long-form content and atomize it into 10-20 platform-specific posts across 8 platforms (Twitter/X, LinkedIn, Instagram, Reddit,..."
|
|
4
|
+
category: content
|
|
5
|
+
tier: core
|
|
6
|
+
reads:
|
|
7
|
+
- brand/voice-profile.md
|
|
8
|
+
- brand/audience.md
|
|
9
|
+
writes:
|
|
10
|
+
- marketing/social/{source-slug}/
|
|
11
|
+
depends-on:
|
|
12
|
+
- brand-voice
|
|
13
|
+
- hook-generator
|
|
14
|
+
- sharp-thesis-validator
|
|
15
|
+
triggers:
|
|
16
|
+
- repurpose
|
|
17
|
+
- atomize
|
|
18
|
+
- turn this into posts
|
|
19
|
+
- social content from
|
|
20
|
+
- content repurposing
|
|
21
|
+
- break this down
|
|
22
|
+
- social posts from blog
|
|
23
|
+
- distribute this
|
|
24
|
+
allowed-tools: []
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
# Content Atomizer
|
|
28
|
+
|
|
29
|
+
You take one piece of long-form content and extract 10-20 standalone social posts, each native to its target platform. Not lazy copy-paste with different character counts — genuine reformatting that makes each post feel like it was written platform-first.
|
|
30
|
+
|
|
31
|
+
## On Activation
|
|
32
|
+
|
|
33
|
+
1. **Awareness Gate (MANDATORY):** Determine the target audience's awareness level before any copy work. See `references/awareness-level-guide.md`. If unclear from context, ask the user.
|
|
34
|
+
2. Read `brand/voice-profile.md` — maintain consistent voice across platforms
|
|
35
|
+
3. Read `brand/audience.md` — know which platforms matter and how the audience behaves on each
|
|
36
|
+
3. Load `references/platform-specs.md` for the quick reference table, then load individual platform files from `references/platforms/` as needed (linkedin.md, twitter.md, instagram.md, tiktok.md, youtube.md, threads.md, bluesky.md, reddit.md)
|
|
37
|
+
4. Accept the source content (blog post, newsletter, video transcript, podcast transcript)
|
|
38
|
+
5. If no source provided, check `marketing/content/` for recent articles
|
|
39
|
+
|
|
40
|
+
### Zero Context (No Brand Files)
|
|
41
|
+
|
|
42
|
+
If brand files don't exist, the skill still works:
|
|
43
|
+
|
|
44
|
+
- **No voice-profile.md**: Write in a clear, professional default voice. Ask the user for 2-3 adjectives describing their brand tone.
|
|
45
|
+
- **No audience.md**: Default to all platforms. Ask which platforms matter most to them.
|
|
46
|
+
- The skill always works — brand files enhance, never gate.
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
## Brand Integration
|
|
51
|
+
|
|
52
|
+
Brand files shape how content gets adapted per platform:
|
|
53
|
+
|
|
54
|
+
- **voice-profile.md** → Each platform gets the same voice in different registers. Twitter gets punchy voice (short, sharp). LinkedIn gets authoritative voice (complete thoughts, data). Reddit gets authentic voice (conversational, no marketing speak). The voice DNA stays constant; the register shifts.
|
|
55
|
+
- **audience.md** → Watering holes from the audience profile determine which platforms to prioritize. If your audience lives on Twitter and Reddit, don't waste time on Instagram carousels.
|
|
56
|
+
|
|
57
|
+
**Funnel grounding (if `funnel_id` provided):**
|
|
58
|
+
Read `funnels/{funnel_id}-*.md` from the brand's `funnels/` directory before atomizing.
|
|
59
|
+
Every social post MUST include: `funnel_id`, `buyer_stage`, `cta`, `icp_segment`.
|
|
60
|
+
Use the funnel's CTA — not a generic one. If a post's CTA doesn't match the funnel's conversion step, fix it.
|
|
61
|
+
When no funnel_id is provided, proceed without funnel constraints.
|
|
62
|
+
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
## The Atomization Process
|
|
66
|
+
|
|
67
|
+
### Phase 0: Sharp-Thesis Validation (MANDATORY — Social Mode)
|
|
68
|
+
|
|
69
|
+
Before atomizing, validate the source content's core thesis passes the Sharp-Thesis Test:
|
|
70
|
+
|
|
71
|
+
```
|
|
72
|
+
sharp-thesis-validator --mode social --brand {brand} "{core thesis from source content}"
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
**On PASS:** Proceed to Step 1.
|
|
76
|
+
**On FAIL:**
|
|
77
|
+
- If the source content itself was never thesis-validated (long-form), note the weakness
|
|
78
|
+
- Extract only insights that CAN be framed as sharp theses
|
|
79
|
+
- Do NOT atomize weak/generic insights — they produce weak/generic social posts
|
|
80
|
+
- Each atomized post should individually pass the social-mode validator
|
|
81
|
+
|
|
82
|
+
### Step 1: Extract Raw Material
|
|
83
|
+
|
|
84
|
+
Read the source content and extract:
|
|
85
|
+
|
|
86
|
+
- **Key insights**: 3-5 original ideas or arguments
|
|
87
|
+
- **Quotable lines**: Sentences that stand alone as wisdom
|
|
88
|
+
- **Stats/data points**: Any numbers, percentages, results
|
|
89
|
+
- **Stories/anecdotes**: Narrative moments that create emotional connection
|
|
90
|
+
- **Contrarian takes**: Opinions that challenge conventional wisdom
|
|
91
|
+
- **Step-by-step processes**: Any how-to sequences
|
|
92
|
+
- **Lists**: Any grouped items (tools, tips, mistakes, etc.)
|
|
93
|
+
|
|
94
|
+
Tag each extraction with its type. This is your raw material inventory.
|
|
95
|
+
|
|
96
|
+
### Step 2: Map to Platforms
|
|
97
|
+
|
|
98
|
+
Each extraction type maps naturally to specific platforms and formats:
|
|
99
|
+
|
|
100
|
+
| Extraction Type | Twitter/X | LinkedIn | Instagram | Reddit | TikTok | YouTube | Threads | Bluesky |
|
|
101
|
+
|----------------|-----------|----------|-----------|--------|--------|---------|---------|---------|
|
|
102
|
+
| Key insight | Single tweet | Text post | Carousel slide | Comment/post | Hot take (15s) | Short (30s) | Single post | Single post |
|
|
103
|
+
| Quotable line | Quote tweet | Text post with context | Quote graphic caption | — | Green screen | — | Quote-post | Thoughtful take |
|
|
104
|
+
| Stats/data | Data tweet | Data post with analysis | Infographic caption | Data post | Data reveal (20s) | Short (30s) | Mini-thread | Link post |
|
|
105
|
+
| Story | Thread opener | Story post | Story caption | Long-form post | Story format (30-60s) | Long-form (8-12m) | Conversational post | Experience report |
|
|
106
|
+
| Contrarian take | Hot take tweet | Debate post | — | Discussion post | Controversy spark (15s) | Short (15s) | Friendly disagreement | Informed take |
|
|
107
|
+
| Step-by-step | Thread | Carousel/document | Carousel | How-to post | Tutorial (30-60s) | Long-form (8-12m) | Mini-thread | Thread |
|
|
108
|
+
| List | Thread or single | Listicle post | Carousel | List post | Listicle (20s) | Short (45s) | Single post | Single post |
|
|
109
|
+
|
|
110
|
+
Load the specific platform file from `references/platforms/` for full playbooks, algorithm signals, templates, and hook formulas.
|
|
111
|
+
|
|
112
|
+
### Step 3: Write Platform-Native Posts
|
|
113
|
+
|
|
114
|
+
---
|
|
115
|
+
|
|
116
|
+
## Platform Rules
|
|
117
|
+
|
|
118
|
+
### Twitter/X
|
|
119
|
+
|
|
120
|
+
**Character limit**: 280 per tweet, threads unlimited
|
|
121
|
+
|
|
122
|
+
**Single Tweet Formula:**
|
|
123
|
+
```
|
|
124
|
+
[Hook — pattern interrupt or bold claim]
|
|
125
|
+
|
|
126
|
+
[1-2 sentences of value or proof]
|
|
127
|
+
|
|
128
|
+
[CTA or takeaway]
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
**Thread Formula (Nicolas Cole Perfect Thread Structure):**
|
|
132
|
+
```
|
|
133
|
+
Tweet 1 (Lead): Hook — big promise or contrarian take + TLDR of the payoff
|
|
134
|
+
Tweet 2 (Bridge): "Here's the context..." — sets up why this matters
|
|
135
|
+
Tweet 3-N (Points): One idea per tweet, each must standalone, numbered when possible
|
|
136
|
+
Tweet N+1 (TLDR): "TLDR:" — 1-2 sentence distillation of the entire thread
|
|
137
|
+
Tweet N+2 (CTA): Summary + specific ask + "Follow for more [topic]"
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
**TLDR-First Technique:** Every thread must contain a TLDR tweet. Place it as the second-to-last tweet. Write it AFTER drafting all points, then compress the entire thread into 1-2 sentences. The TLDR serves readers who skim and gives retweeters a quotable summary.
|
|
141
|
+
|
|
142
|
+
**Thread Opening Strategies (load `references/hook-strategies.md` for full detail):**
|
|
143
|
+
1. **Controversial statement** — challenges a widely held belief
|
|
144
|
+
2. **Secret knowledge** — "What nobody tells you about..."
|
|
145
|
+
3. **The "I was wrong"** — vulnerability + lesson
|
|
146
|
+
4. **Data drop** — shocking stat as the hook
|
|
147
|
+
5. **Story opener** — "Last week I..." narrative hook
|
|
148
|
+
6. **Direct challenge** — "Stop doing X. Do Y instead."
|
|
149
|
+
|
|
150
|
+
**Thread Point Structures (load `references/tweet-patterns.md` for all 20 patterns):**
|
|
151
|
+
- Numbered list threads: "5 things I learned..."
|
|
152
|
+
- Myth-busting threads: "Everyone says X. They're wrong."
|
|
153
|
+
- Playbook threads: "Here's the exact process..."
|
|
154
|
+
- Story threads: chronological narrative with lessons
|
|
155
|
+
- Resource threads: curated list of tools/tips
|
|
156
|
+
|
|
157
|
+
**Rules:**
|
|
158
|
+
- Hook tweet determines 90% of engagement — spend 50% of time on it
|
|
159
|
+
- One idea per tweet in threads
|
|
160
|
+
- Use line breaks for readability
|
|
161
|
+
- No hashtags in the main text (one in reply if any)
|
|
162
|
+
- End threads with a retweet ask or follow CTA
|
|
163
|
+
- Optimal: 5-12 tweets per thread
|
|
164
|
+
- ALWAYS include a TLDR tweet — never skip it
|
|
165
|
+
|
|
166
|
+
**Hook patterns that work:**
|
|
167
|
+
- "I spent [time] doing [thing]. Here's what I learned:"
|
|
168
|
+
- "[Contrarian statement]. Here's why:"
|
|
169
|
+
- "[Big number] [result] in [timeframe]. The playbook:"
|
|
170
|
+
- "Stop doing [common thing]. Do this instead:"
|
|
171
|
+
- "The [topic] advice nobody gives you:"
|
|
172
|
+
|
|
173
|
+
### LinkedIn
|
|
174
|
+
|
|
175
|
+
**Character limit**: 3,000 per post
|
|
176
|
+
|
|
177
|
+
**Post Formula:**
|
|
178
|
+
```
|
|
179
|
+
[Hook line — stops the scroll]
|
|
180
|
+
|
|
181
|
+
[Line break]
|
|
182
|
+
|
|
183
|
+
[Story or context — 3-5 short paragraphs]
|
|
184
|
+
|
|
185
|
+
[Key insight or lesson]
|
|
186
|
+
|
|
187
|
+
[Call to engage: question, agree/disagree, share your experience]
|
|
188
|
+
|
|
189
|
+
[3-5 hashtags at the bottom]
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
**Rules:**
|
|
193
|
+
- First line is everything — it shows before "see more"
|
|
194
|
+
- Write in short paragraphs (1-2 sentences each)
|
|
195
|
+
- Use "I" — personal stories outperform corporate content 3x
|
|
196
|
+
- End with a question to drive comments
|
|
197
|
+
- 3-5 relevant hashtags at the bottom only
|
|
198
|
+
- No links in the post body (kills reach) — put links in first comment
|
|
199
|
+
- Document format/carousels get 3x reach over text posts
|
|
200
|
+
- Optimal length: 800-1,500 characters
|
|
201
|
+
|
|
202
|
+
**Hook patterns:**
|
|
203
|
+
- "I made a mistake that cost me [consequence]."
|
|
204
|
+
- "Unpopular opinion: [take]"
|
|
205
|
+
- "After [X years/months] of [doing thing], here's what actually works:"
|
|
206
|
+
- "[Achievement]. But it almost didn't happen."
|
|
207
|
+
|
|
208
|
+
### Instagram
|
|
209
|
+
|
|
210
|
+
**Character limit**: 2,200 per caption
|
|
211
|
+
|
|
212
|
+
**Caption Formula:**
|
|
213
|
+
```
|
|
214
|
+
[Hook line — first 125 characters show in feed]
|
|
215
|
+
|
|
216
|
+
[Value content — tips, story, insight]
|
|
217
|
+
|
|
218
|
+
[CTA — save this, share with someone, comment your take]
|
|
219
|
+
|
|
220
|
+
.
|
|
221
|
+
.
|
|
222
|
+
.
|
|
223
|
+
[Hashtags — 5-15 relevant ones]
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
**Carousel Strategy:**
|
|
227
|
+
- Slide 1: Bold headline (this is the hook)
|
|
228
|
+
- Slides 2-N: One point per slide, large text, minimal design
|
|
229
|
+
- Final slide: Summary + CTA + account tag
|
|
230
|
+
- 7-10 slides is the sweet spot
|
|
231
|
+
- Provide text content for each slide with design notes
|
|
232
|
+
|
|
233
|
+
**Rules:**
|
|
234
|
+
- First 125 characters = the hook (visible before "more")
|
|
235
|
+
- Carousel posts get 1.4x more reach than single images
|
|
236
|
+
- Include image/graphic brief with each post
|
|
237
|
+
- Hashtags in caption or first comment (test both)
|
|
238
|
+
- CTAs that work: "Save this for later" / "Tag someone who needs this"
|
|
239
|
+
|
|
240
|
+
### Reddit
|
|
241
|
+
|
|
242
|
+
**Rules are different here. Reddit hates marketing.**
|
|
243
|
+
|
|
244
|
+
**Post Formula:**
|
|
245
|
+
```
|
|
246
|
+
Title: [Specific, descriptive, no clickbait]
|
|
247
|
+
|
|
248
|
+
Body:
|
|
249
|
+
[Context — who you are, why you're sharing]
|
|
250
|
+
[The actual value — detailed, generous, no gatekeeping]
|
|
251
|
+
[Results or proof if applicable]
|
|
252
|
+
[Question to invite discussion]
|
|
253
|
+
|
|
254
|
+
[NO self-promotion links in the body]
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
**Rules:**
|
|
258
|
+
- Provide genuine value first, always
|
|
259
|
+
- Match the subreddit's tone and norms
|
|
260
|
+
- No links to your stuff in the post — put them in a comment if asked
|
|
261
|
+
- Write longer, more detailed posts than other platforms
|
|
262
|
+
- Be ready for skepticism — back up claims
|
|
263
|
+
- Identify 2-3 relevant subreddits per topic
|
|
264
|
+
- Title is plain and specific, not clickbaity
|
|
265
|
+
|
|
266
|
+
---
|
|
267
|
+
|
|
268
|
+
## Hooks and CTAs
|
|
269
|
+
|
|
270
|
+
**Hook-generator integration:** For each platform's posts, spawn a hook-generator subagent with platform-specific context:
|
|
271
|
+
```
|
|
272
|
+
Load the hook-generator skill and execute the full Phase 1-6 pipeline with this context.
|
|
273
|
+
Context:
|
|
274
|
+
- WHO: <audience for this platform>
|
|
275
|
+
- WHAT/WHY: <key insight from source content>
|
|
276
|
+
- Knife: <pain point this atom addresses>
|
|
277
|
+
- Platform: <twitter / instagram / linkedin / tiktok / youtube / medium — map per output platform>
|
|
278
|
+
- Brand: <brand name>
|
|
279
|
+
- Target Score: 85
|
|
280
|
+
Return ONLY this JSON array: [{"hook":"...","score":<0-100>,"pattern":"...","formula":"..."}]
|
|
281
|
+
```
|
|
282
|
+
Use scored hooks as opening lines for each platform's post. Discard any that don't fit platform norms. If subagent fails, fall back to the Universal Hook Formulas below.
|
|
283
|
+
|
|
284
|
+
### Universal Hook Formulas (fallback)
|
|
285
|
+
|
|
286
|
+
1. **The Number**: "7 things I learned about [topic]"
|
|
287
|
+
2. **The Mistake**: "The biggest [topic] mistake I see:"
|
|
288
|
+
3. **The Contrarian**: "[Common belief] is wrong. Here's why:"
|
|
289
|
+
4. **The Curiosity Gap**: "Most people [do X]. Top performers [do Y]."
|
|
290
|
+
5. **The Story**: "Last week, something happened that changed how I think about [topic]."
|
|
291
|
+
6. **The How-To**: "How to [achieve result] in [timeframe]:"
|
|
292
|
+
7. **The Data**: "[Stat]. Here's what that means for you:"
|
|
293
|
+
|
|
294
|
+
### CTA Types by Goal
|
|
295
|
+
|
|
296
|
+
| Goal | CTA |
|
|
297
|
+
|------|-----|
|
|
298
|
+
| Engagement | "What's your take?" / "Agree or disagree?" |
|
|
299
|
+
| Follows | "Follow for daily [topic] tips" |
|
|
300
|
+
| Saves | "Save this for when you need it" |
|
|
301
|
+
| Shares | "Tag someone who needs to hear this" |
|
|
302
|
+
| Traffic | "Link in bio" / "Link in comments" |
|
|
303
|
+
| Email capture | "I wrote a deeper guide — link in bio" |
|
|
304
|
+
|
|
305
|
+
---
|
|
306
|
+
|
|
307
|
+
## Output Structure
|
|
308
|
+
|
|
309
|
+
For each source piece, output a directory:
|
|
310
|
+
|
|
311
|
+
```
|
|
312
|
+
marketing/social/{source-slug}/
|
|
313
|
+
├── twitter-threads.md # 2-3 threads with hook tweets
|
|
314
|
+
├── twitter-singles.md # 5-8 standalone tweets
|
|
315
|
+
├── linkedin-posts.md # 3-5 LinkedIn posts
|
|
316
|
+
├── instagram-captions.md # 2-3 captions with carousel briefs
|
|
317
|
+
├── reddit-posts.md # 1-2 Reddit posts with subreddit targets
|
|
318
|
+
├── tiktok-scripts.md # 1-2 short video scripts (15-60s)
|
|
319
|
+
├── youtube-shorts.md # 1-2 YouTube Shorts scripts
|
|
320
|
+
├── threads-posts.md # 2-3 Threads posts or mini-threads
|
|
321
|
+
└── bluesky-posts.md # 2-3 Bluesky posts
|
|
322
|
+
```
|
|
323
|
+
|
|
324
|
+
Only generate files for platforms the user wants. If no preference stated, generate for all 8 platforms. If source content is short (under 500 words), reduce to 6-10 posts across fewer platforms rather than stretching thin.
|
|
325
|
+
|
|
326
|
+
Each post includes:
|
|
327
|
+
|
|
328
|
+
```yaml
|
|
329
|
+
---
|
|
330
|
+
platform: twitter | linkedin | instagram | reddit
|
|
331
|
+
type: thread | single | post | carousel | story
|
|
332
|
+
source: "original-content-slug"
|
|
333
|
+
hook: "first line preview"
|
|
334
|
+
character_count: 247
|
|
335
|
+
hashtags: ["tag1", "tag2"]
|
|
336
|
+
suggested_time: "Tuesday 9am ET"
|
|
337
|
+
status: draft
|
|
338
|
+
---
|
|
339
|
+
```
|
|
340
|
+
|
|
341
|
+
---
|
|
342
|
+
|
|
343
|
+
## Posting Schedule
|
|
344
|
+
|
|
345
|
+
| Platform | Best Times (ET) | Frequency |
|
|
346
|
+
|----------|----------------|-----------|
|
|
347
|
+
| Twitter/X | 8-10am, 12-1pm, 5-6pm | 1-3x daily |
|
|
348
|
+
| LinkedIn | 8-10am Tue-Thu | 3-5x weekly |
|
|
349
|
+
| Instagram | 11am-1pm, 7-9pm | 4-7x weekly |
|
|
350
|
+
| Reddit | 6-9am, varies by sub | 2-3x weekly |
|
|
351
|
+
| TikTok | 7-9pm Tue/Thu | 3-5x weekly |
|
|
352
|
+
| YouTube Shorts | 9-11am Sat | 2-3x weekly |
|
|
353
|
+
| Threads | 9-11am daily | 3-5x weekly |
|
|
354
|
+
| Bluesky | 10am-12pm weekdays | 3-5x weekly |
|
|
355
|
+
|
|
356
|
+
Space out atomized content over 1-2 weeks. Don't dump everything the same day.
|
|
357
|
+
|
|
358
|
+
---
|
|
359
|
+
|
|
360
|
+
## Anti-Patterns
|
|
361
|
+
|
|
362
|
+
| Anti-Pattern | Why It Fails | Instead |
|
|
363
|
+
|-------------|-------------|---------|
|
|
364
|
+
| Copy-paste the same text across platforms | Platform algorithms detect duplicate content and suppress it. Users who follow you on multiple platforms see identical posts and feel spammed. Each platform has different character limits, norms, and audience expectations. | Rewrite natively for each platform's format and voice |
|
|
365
|
+
| Reuse the same hook pattern in a batch | When 5 posts in a row start with "Here's what I learned:", the algorithm treats it as low-variety content and your audience scrolls past. Batch monotony is the #1 tell of AI-generated content. | Vary hook formulas — alternate numbers, stories, contrarian, question |
|
|
366
|
+
| Atomize everything regardless of source length | A 300-word email stretched to 15 posts produces hollow filler. Each post needs a standalone insight — if the source doesn't have enough, the posts won't have enough. | Under 500 words → 6-10 posts max. Under 200 words → don't atomize |
|
|
367
|
+
| Post all atomized content the same day | Followers see 8 posts from you in one feed scroll and either mute or unfollow. Algorithms also penalize velocity spikes from a single account. | Space over 1-2 weeks with variety in timing |
|
|
368
|
+
| Ignore platform culture (marketing speak on Reddit, hashtag spam on Twitter) | Reddit moderators remove overt marketing. Twitter's algorithm deprioritizes hashtag-heavy tweets. Each platform's community has unwritten rules about tone and format. | Read the platform rules in this skill and adapt |
|
|
369
|
+
| Over-hashtag | Twitter and LinkedIn algorithms now treat excessive hashtags as spam signals. On Reddit, hashtags don't exist. Only Instagram still rewards them, and even there the trend is toward fewer. | Twitter: 0-1. LinkedIn: 3-5 at bottom. Instagram: 5-15. Reddit: 0 |
|
|
370
|
+
|
|
371
|
+
---
|
|
372
|
+
|
|
373
|
+
## Related Skills
|
|
374
|
+
|
|
375
|
+
- **brand-voice**: Establish voice before atomizing at scale
|
|
376
|
+
- **seo-content**: Create the source content to atomize
|
|
377
|
+
- **newsletter**: Atomize newsletter content for social
|
|
378
|
+
- **creative**: Generate visual asset briefs for social graphics
|
|
379
|
+
|
|
380
|
+
---
|
|
381
|
+
|
|
382
|
+
## STEP N: Copywriting Tournament (RECOMMENDED for social post hooks)
|
|
383
|
+
|
|
384
|
+
Generate 3-5 variants of the key social post hooks, then run them through 5 parallel judge personas to find the winner:
|
|
385
|
+
|
|
386
|
+
1. Generate 3-5 variants (different angles, formulas, or approaches)
|
|
387
|
+
2. Save each to: `content/tournaments/{slug}/variant-1.md` through `variant-N.md`
|
|
388
|
+
3. Spawn 5 PARALLEL `build` subagents (one per judge persona):
|
|
389
|
+
- `~/.claude/skills/quality-gate/judge-personas/skeptic.md`
|
|
390
|
+
- `~/.claude/skills/quality-gate/judge-personas/scanner.md`
|
|
391
|
+
- `~/.claude/skills/quality-gate/judge-personas/buyer.md`
|
|
392
|
+
- `~/.claude/skills/quality-gate/judge-personas/expert.md`
|
|
393
|
+
- `~/.claude/skills/quality-gate/judge-personas/outsider.md`
|
|
394
|
+
- Each gets: tournament_dir, variant_count, mode=`social`, original_prompt
|
|
395
|
+
4. Collect all 5 JSON results, aggregate: sum weighted_avg per variant across judges
|
|
396
|
+
5. Pick winner, apply recommended_edits, save as draft
|
|
397
|
+
6. Winner enters standard quality-gate below
|
|
398
|
+
|
|
399
|
+
**When to use:** For the first line of each atomized social post
|
|
400
|
+
|
|
401
|
+
---
|
|
402
|
+
|
|
403
|
+
## FINAL STEP: Quality Gate (MANDATORY — DO NOT SKIP)
|
|
404
|
+
|
|
405
|
+
Before presenting ANY draft to Jairo, run the quality gate:
|
|
406
|
+
|
|
407
|
+
1. Save your complete draft to a file (e.g., `content/drafts/{slug}.md` or a temp file)
|
|
408
|
+
2. Spawn a `build` subagent using the Task tool with the quality-gate prompt from `Skill: quality-gate`
|
|
409
|
+
3. Pass these inputs to the subagent:
|
|
410
|
+
- **draft_path**: absolute path to the saved draft
|
|
411
|
+
- **mode**: `social`
|
|
412
|
+
- **original_prompt**: the writing prompt that started this task
|
|
413
|
+
- **attempt**: current attempt number (start at 1)
|
|
414
|
+
4. Parse the JSON result from the subagent
|
|
415
|
+
5. If FAIL and attempt < 3:
|
|
416
|
+
- Rewrite the draft addressing the specific `rewrite_instructions` from the quality gate
|
|
417
|
+
- Save the new draft (overwrite or new file)
|
|
418
|
+
- Spawn another subagent with attempt + 1
|
|
419
|
+
6. If FAIL and attempt = 3:
|
|
420
|
+
- Present to Jairo with all score reports attached
|
|
421
|
+
- Say: "Couldn't pass quality gate after 3 attempts. Here's what's wrong and what I tried to fix."
|
|
422
|
+
7. If PASS:
|
|
423
|
+
- Present to Jairo as normal (do NOT show scores — they're internal)
|
|
424
|
+
8. NEVER present a draft that hasn't passed quality gate (except after 3 failed attempts)
|