@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,123 @@
|
|
|
1
|
+
# Twitter/X
|
|
2
|
+
|
|
3
|
+
**Algorithm Signals (December 2025):**
|
|
4
|
+
- **Replies** — Highest weight, especially from accounts you engage with
|
|
5
|
+
- **Quote tweets** — 2x engagement value vs plain retweet
|
|
6
|
+
- **Time spent** — On tweet and clicked links
|
|
7
|
+
- **Profile clicks** — Curiosity driven by tweet
|
|
8
|
+
- **Media boost** — Images/videos/GIFs increase visibility scores
|
|
9
|
+
- **Early engagement** — First hours critical for amplification
|
|
10
|
+
|
|
11
|
+
**2025 Changes:** Following feed now uses **Grok AI** for ranking (based on past interactions and topics) — no longer purely chronological. Users default to For You feed.
|
|
12
|
+
|
|
13
|
+
**Optimal Specs:**
|
|
14
|
+
|
|
15
|
+
| Format | Specs | Performance |
|
|
16
|
+
|--------|-------|-------------|
|
|
17
|
+
| Single Tweet | <100 characters optimal | Highest engagement rate |
|
|
18
|
+
| Thread | 8-15 tweets | Best for depth + followers |
|
|
19
|
+
| Quote Tweet | Add value to original | 2x engagement vs retweet |
|
|
20
|
+
| Image Tweet | 1200x675px | 35% more engagement |
|
|
21
|
+
|
|
22
|
+
## Thread Template
|
|
23
|
+
|
|
24
|
+
**Tweet 1: Hook Tweet**
|
|
25
|
+
```
|
|
26
|
+
[BOLD CLAIM OR PROMISE]
|
|
27
|
+
|
|
28
|
+
[What they'll learn in one line]
|
|
29
|
+
|
|
30
|
+
Thread:
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
**Tweets 2-X: Content Tweets**
|
|
34
|
+
```
|
|
35
|
+
[NUMBER]. [POINT]
|
|
36
|
+
|
|
37
|
+
[2-3 sentences of explanation]
|
|
38
|
+
|
|
39
|
+
[Example or proof if fits]
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
**Final Tweet: Wrap + CTA**
|
|
43
|
+
```
|
|
44
|
+
TL;DR:
|
|
45
|
+
|
|
46
|
+
- [Point 1]
|
|
47
|
+
- [Point 2]
|
|
48
|
+
- [Point 3]
|
|
49
|
+
- [Point 4]
|
|
50
|
+
- [Point 5]
|
|
51
|
+
|
|
52
|
+
If this was useful:
|
|
53
|
+
1. Follow @[handle] for more
|
|
54
|
+
2. RT the first tweet
|
|
55
|
+
|
|
56
|
+
[Link if relevant]
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## Single Tweet Templates
|
|
60
|
+
|
|
61
|
+
**The Insight Tweet:**
|
|
62
|
+
```
|
|
63
|
+
[Counterintuitive observation about industry/topic]
|
|
64
|
+
|
|
65
|
+
Most people think [X].
|
|
66
|
+
|
|
67
|
+
But [Y] is actually true because [Z].
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
**The List Tweet:**
|
|
71
|
+
```
|
|
72
|
+
[Number] [things] that [outcome]:
|
|
73
|
+
|
|
74
|
+
- [Item 1]
|
|
75
|
+
- [Item 2]
|
|
76
|
+
- [Item 3]
|
|
77
|
+
- [Item 4]
|
|
78
|
+
- [Item 5]
|
|
79
|
+
|
|
80
|
+
Which one hits different?
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
**The Hot Take:**
|
|
84
|
+
```
|
|
85
|
+
Unpopular opinion:
|
|
86
|
+
|
|
87
|
+
[Contrarian statement]
|
|
88
|
+
|
|
89
|
+
Here's why: [One-line reasoning]
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
**The Question Tweet:**
|
|
93
|
+
```
|
|
94
|
+
[Provocative question about industry/topic]?
|
|
95
|
+
|
|
96
|
+
Genuine question. Reply with your take.
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
**The Proof Tweet:**
|
|
100
|
+
```
|
|
101
|
+
[Impressive result/stat]
|
|
102
|
+
|
|
103
|
+
Here's exactly how:
|
|
104
|
+
|
|
105
|
+
[3-5 bullet points of method]
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
## Hook Formulas
|
|
109
|
+
|
|
110
|
+
**Pattern 1: Bold Opener**
|
|
111
|
+
> "[Thing] is dead. Here's what's replacing it:"
|
|
112
|
+
|
|
113
|
+
**Pattern 2: Numbers + Outcome**
|
|
114
|
+
> "I [did X] for [time period]. Here's what happened:"
|
|
115
|
+
|
|
116
|
+
**Pattern 3: Controversial Take**
|
|
117
|
+
> "This will piss off [group], but [claim]."
|
|
118
|
+
|
|
119
|
+
**Pattern 4: Curiosity Gap**
|
|
120
|
+
> "The [industry] secret no one talks about:"
|
|
121
|
+
|
|
122
|
+
**Pattern 5: Specific Proof**
|
|
123
|
+
> "[Specific result] in [timeframe]. No [common excuse]. Here's the playbook:"
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# YouTube
|
|
2
|
+
|
|
3
|
+
**Algorithm Signals (December 2025):**
|
|
4
|
+
- **Click-through rate (CTR)** — How often people click when shown your video
|
|
5
|
+
- **Average view duration & % watched** — Raw watch time AND completion percentage
|
|
6
|
+
- **Session impact** — Does your video keep people on YouTube longer?
|
|
7
|
+
- **Viewer satisfaction** — YouTube now uses surveys + behavior to estimate quality
|
|
8
|
+
- **Negative feedback** — "Not interested," skips, very low retention hurt you
|
|
9
|
+
- **Topical authority** — Channels focused on clear topics get recommended more
|
|
10
|
+
|
|
11
|
+
**2025 Changes:** AI-driven hyper-personalization. Older evergreen videos get revived when topics trend again. Stronger emphasis on authority, depth, and "entity-rich" content.
|
|
12
|
+
|
|
13
|
+
**Optimal Specs:**
|
|
14
|
+
|
|
15
|
+
| Format | Specs | Performance |
|
|
16
|
+
|--------|-------|-------------|
|
|
17
|
+
| Shorts | 10-35 sec (discovery), up to 60 sec | Highest reach, lower depth |
|
|
18
|
+
| Long-form | 8-12 minutes (sweet spot) | Best for monetization + depth |
|
|
19
|
+
| Thumbnail | 1280x720px | CTR target: 4-10% (Home), 6-12% strong |
|
|
20
|
+
|
|
21
|
+
## Shorts Script Template
|
|
22
|
+
|
|
23
|
+
```
|
|
24
|
+
[HOOK - 0-2 seconds]
|
|
25
|
+
"[Immediate value promise or pattern interrupt]"
|
|
26
|
+
|
|
27
|
+
[BODY - 2-50 seconds]
|
|
28
|
+
[Deliver value fast, each point 5-10 seconds max, keep visual movement]
|
|
29
|
+
|
|
30
|
+
[CTA - 50-60 seconds]
|
|
31
|
+
"Subscribe for more [topic]" OR "Full video on my channel" OR end abruptly (drives rewatch)
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Long-Form Framework (HIVES)
|
|
35
|
+
|
|
36
|
+
**H - Hook (0-30 seconds)** — Pattern interrupt, credibility, preview. "By the end of this video, you'll know exactly how to [outcome]"
|
|
37
|
+
|
|
38
|
+
**I - Intro (30 seconds - 1 minute)** — Brief context, who this is for, what you'll cover.
|
|
39
|
+
|
|
40
|
+
**V - Value (Main content)** — Deliver on the promise. Clear sections with verbal signposting. Examples and proof.
|
|
41
|
+
|
|
42
|
+
**E - Engagement Prompts (Throughout)** — Every 2-3 minutes: "Let me know in the comments if [question]"
|
|
43
|
+
|
|
44
|
+
**S - Strong CTA (Final 30 seconds)** — Summarize, clear next action, end screen with subscribe + related video.
|
|
45
|
+
|
|
46
|
+
## Thumbnail + Title Patterns
|
|
47
|
+
|
|
48
|
+
**Thumbnail Principles:** 3 elements max (face, text, object). High contrast. Readable at small size. Emotion on face. Curiosity gap.
|
|
49
|
+
|
|
50
|
+
| Title Pattern | Example |
|
|
51
|
+
|---------------|---------|
|
|
52
|
+
| How I [result] | "How I Built a 6-Figure Newsletter in 8 Months" |
|
|
53
|
+
| [Number] [Things] That [Outcome] | "7 LinkedIn Mistakes Killing Your Reach" |
|
|
54
|
+
| Why [Thing] Doesn't Work | "Why Your Content Strategy Isn't Working" |
|
|
55
|
+
| The [Adjective] [Thing] | "The Boring Marketing Strategy That Actually Works" |
|
|
56
|
+
| I [Did X] For [Time]. Here's What Happened | "I Posted Daily for 90 Days. Here's What Happened" |
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# 20 Tweet Patterns
|
|
2
|
+
|
|
3
|
+
A comprehensive taxonomy of tweet types. Use when generating X/Twitter content to ensure structural variety. When generating tweets, randomly select from these patterns rather than defaulting to the same format.
|
|
4
|
+
|
|
5
|
+
## General Advice / Observation
|
|
6
|
+
1. **Pithy Statement** — Short, impactful advice or observation. "Your network is your net worth."
|
|
7
|
+
2. **Statement + Action** — Advice followed by a call to action. "The best time to start writing was yesterday. The second best time is now. What are you waiting for?"
|
|
8
|
+
3. **Open-Ended Question** — Thought-provoking question inviting reflection. "What's the biggest lesson you learned in your 20s?"
|
|
9
|
+
4. **Direct Quote** — Quote from a famous figure, lending credibility. "The only way to do great work is to love what you do.' - Steve Jobs"
|
|
10
|
+
5. **Quote + Commentary** — Quote followed by your personal interpretation or analysis.
|
|
11
|
+
|
|
12
|
+
## Tips / Lessons / Insights / Secrets
|
|
13
|
+
6. **Listicle (Bullets)** — Numbered tips in concise bullet points for easy consumption.
|
|
14
|
+
7. **Listicle (Numbered)** — Numbered list with detailed explanations for each point.
|
|
15
|
+
8. **Concept Breakdown** — Specific concept explained in detail with insights, examples, or applications. "The Pareto Principle: 80% of results come from 20% of efforts..."
|
|
16
|
+
9. **Concept + Action** — Concise explanation followed by a specific call to action. "Small, consistent actions create massive results. What habit can you start today?"
|
|
17
|
+
|
|
18
|
+
## Personal Experience / Story
|
|
19
|
+
10. **Anecdote + Lesson** — Personal experience illustrating a specific lesson, adding authenticity.
|
|
20
|
+
11. **Story Thread** — Longer personal story in multi-tweet thread, building suspense with detailed insights.
|
|
21
|
+
12. **Story + Action** — Personal anecdote followed by a relevant call to action.
|
|
22
|
+
|
|
23
|
+
## Questions / Polls
|
|
24
|
+
13. **Multiple Choice Poll** — Multiple-choice question with clearly defined options.
|
|
25
|
+
14. **Open-Ended Question** — Question allowing nuanced responses and deeper engagement.
|
|
26
|
+
15. **Question + Context** — Question followed by additional context to encourage thoughtful responses.
|
|
27
|
+
|
|
28
|
+
## Promotions / Announcements
|
|
29
|
+
16. **Direct Promotion** — Simple announcement with a direct link.
|
|
30
|
+
17. **Promotion + Action** — Announcement followed by a call to action for engagement or lead generation.
|
|
31
|
+
18. **Testimonial + Promotion** — Client testimonial followed by a relevant promotion.
|
|
32
|
+
|
|
33
|
+
## Humorous / Controversial
|
|
34
|
+
19. **Humorous Statement + Action** — Humorous or controversial statement designed to spark conversation, followed by a CTA.
|
|
35
|
+
20. **Statement + Media** — Humorous or controversial statement paired with a relevant image or video.
|
|
36
|
+
|
|
37
|
+
## Usage Guidelines
|
|
38
|
+
- When generating a batch of tweets, distribute across at least 4 different pattern categories
|
|
39
|
+
- Match pattern type to content goal (tips for value, stories for connection, humor for engagement)
|
|
40
|
+
- For thread generation, use patterns 6-9 for body tweets, patterns 1-5 for the hook tweet
|
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: content-repost-manager
|
|
3
|
+
repo: https://github.com/clawdbot/clawd
|
|
4
|
+
description: >
|
|
5
|
+
Identify top-performing evergreen content for reposting across platforms.
|
|
6
|
+
Brand-agnostic — reads analytics data and content taxonomy from any brand's
|
|
7
|
+
evergreen system folder. Classifies posts as trending (skip) vs evergreen
|
|
8
|
+
(repost eligible), applies platform-specific cooldowns, and outputs a
|
|
9
|
+
repost queue. Triggers on "repost", "banger", "top performer", "content
|
|
10
|
+
recycling", "repost queue", "evergreen content repost", or "which posts
|
|
11
|
+
should I repost".
|
|
12
|
+
depends-on:
|
|
13
|
+
- hook-generator
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
# Content Repost Manager
|
|
17
|
+
|
|
18
|
+
Brand-agnostic repost intelligence that reads from each brand's evergreen analytics system. Never duplicates existing platform-specific analytics — this is a **lens** on top of existing weekly reports and hook performance data.
|
|
19
|
+
|
|
20
|
+
## When to Use
|
|
21
|
+
|
|
22
|
+
- Agent or user asks "which posts should I repost"
|
|
23
|
+
- Weekly content review identifies bangers
|
|
24
|
+
- Cross-platform content recycling (X banger → LinkedIn adaptation)
|
|
25
|
+
- Building a repost queue from analytics data
|
|
26
|
+
|
|
27
|
+
## Core Principle: Trending vs Evergreen
|
|
28
|
+
|
|
29
|
+
**Trending posts are NEVER repost candidates.** They reference specific news, product launches, or time-bound events. Reposting stale news destroys credibility.
|
|
30
|
+
|
|
31
|
+
**Evergreen posts are repost candidates.** They address persistent pain points, share frameworks, or make contrarian observations that stay relevant.
|
|
32
|
+
|
|
33
|
+
### Classification Rules
|
|
34
|
+
|
|
35
|
+
| Tag | Category | Repost? |
|
|
36
|
+
|-----|----------|---------|
|
|
37
|
+
| `market_signal` | Trending (usually) | Only if content references a general pattern, not a specific news event |
|
|
38
|
+
| `market_news` | Trending | **Never repost** — news stales in hours |
|
|
39
|
+
| `tool_overload` | Evergreen | Repost eligible |
|
|
40
|
+
| `manual_loops` | Evergreen | Repost eligible |
|
|
41
|
+
| `founder_router` | Evergreen | Repost eligible |
|
|
42
|
+
| `unfinished_workflow` | Evergreen | Repost eligible |
|
|
43
|
+
| `proof_test` | Evergreen | Repost eligible |
|
|
44
|
+
| `context_bloat` | Evergreen | Repost eligible |
|
|
45
|
+
| `template_confusion` | Evergreen | Repost eligible |
|
|
46
|
+
| `expensive_mistake` | Evergreen | Repost eligible |
|
|
47
|
+
| `vertical_law` | Evergreen | Repost eligible |
|
|
48
|
+
| `vertical_real_estate` | Evergreen | Repost eligible |
|
|
49
|
+
| `agent_lifestyle` | Evergreen | Repost eligible |
|
|
50
|
+
| `contrarian` | Evergreen | Repost eligible |
|
|
51
|
+
| `first_person` | Context-dependent | Repost only if not referencing a specific dated event |
|
|
52
|
+
| `pain_pill` | Evergreen | Repost eligible |
|
|
53
|
+
|
|
54
|
+
When in doubt, read the post text. If it mentions a specific product name, date, or "this week/month" → trending. If it describes a universal pain or framework → evergreen.
|
|
55
|
+
|
|
56
|
+
## Brand-Agnostic Discovery
|
|
57
|
+
|
|
58
|
+
This skill works for ANY brand in the evergreen system. The agent must discover the brand's analytics structure by reading its evergreen.md first.
|
|
59
|
+
|
|
60
|
+
### Step 1: Identify the brand
|
|
61
|
+
|
|
62
|
+
Read the brand's evergreen.md from:
|
|
63
|
+
```
|
|
64
|
+
businesses/<brand-slug>/evergreen.md
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
Look for the **Connected Systems** or **File Locations** section to find:
|
|
68
|
+
- Analytics folder path
|
|
69
|
+
- Hook performance data path
|
|
70
|
+
- Content taxonomy definitions
|
|
71
|
+
- Weekly report paths
|
|
72
|
+
|
|
73
|
+
### Step 2: Read analytics data
|
|
74
|
+
|
|
75
|
+
Read the latest snapshot from the brand's analytics folder:
|
|
76
|
+
```
|
|
77
|
+
businesses/<brand-slug>/analytics/snapshots/latest-x-metrics.json
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
Or the latest weekly report:
|
|
81
|
+
```
|
|
82
|
+
businesses/<brand-slug>/analytics/reports/latest-weekly-report.md
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
If the brand has no analytics folder, check evergreen.md for alternative paths. Some brands store analytics under `content-systems/` or shared directories.
|
|
86
|
+
|
|
87
|
+
### Step 3: Read content taxonomy
|
|
88
|
+
|
|
89
|
+
Each brand defines its own pain angles and hook patterns. Read them from:
|
|
90
|
+
- The brand's `content-systems/` folder
|
|
91
|
+
- Or the `weekly-analytics-feedback-loop.md` if it exists for that brand
|
|
92
|
+
- Or the analytics script if it contains classification rules
|
|
93
|
+
|
|
94
|
+
If no taxonomy exists, extract it from the snapshot data itself (the `pain_angle` and `hook_pattern` fields in JSON snapshots).
|
|
95
|
+
|
|
96
|
+
## Repost Eligibility Criteria
|
|
97
|
+
|
|
98
|
+
A post qualifies for repost when ALL of the following are true:
|
|
99
|
+
|
|
100
|
+
1. **Performance**: Engagement ≥ 2x the brand's median weighted engagement
|
|
101
|
+
2. **Content type**: Classified as evergreen (see table above)
|
|
102
|
+
3. **Cooldown**: Not posted/reposted within the platform's cooldown window
|
|
103
|
+
4. **Not previously reposted**: Check repost history in the queue file
|
|
104
|
+
|
|
105
|
+
### Platform Cooldowns
|
|
106
|
+
|
|
107
|
+
| Platform | Cooldown | Rationale |
|
|
108
|
+
|----------|----------|-----------|
|
|
109
|
+
| X/Twitter | 30 days | Fast feed, audience overlap acceptable |
|
|
110
|
+
| LinkedIn | 60 days | Slower feed, different audience subset |
|
|
111
|
+
| Instagram | 45 days | Visual-first, needs fresh image |
|
|
112
|
+
| Medium | 90 days | Long-form, readers expect fresh takes |
|
|
113
|
+
| Threads/Bluesky | 30 days | Fast feed, similar to X |
|
|
114
|
+
|
|
115
|
+
### Engagement Thresholds
|
|
116
|
+
|
|
117
|
+
Use the brand's own data. Calculate median weighted engagement from the latest snapshot:
|
|
118
|
+
|
|
119
|
+
```
|
|
120
|
+
weighted_engagement = likes + (2 × replies) + (2 × reposts)
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
- **Tier 1 banger**: ≥ 3x median → prioritize for repost + cross-platform adaptation
|
|
124
|
+
- **Tier 2 solid**: ≥ 2x median → queue for repost on same platform
|
|
125
|
+
- **Tier 3 moderate**: ≥ 1.5x median → consider for cross-platform adaptation only
|
|
126
|
+
|
|
127
|
+
## Cross-Platform Adaptation
|
|
128
|
+
|
|
129
|
+
When a banger on one platform is adapted for another:
|
|
130
|
+
|
|
131
|
+
1. **Read the original post** — understand the hook, pain angle, proof, and CTA
|
|
132
|
+
2. **Adapt, never copy** — rephrase for the target platform's conventions:
|
|
133
|
+
- X → LinkedIn: expand to 2-3 paragraphs, add professional framing
|
|
134
|
+
- X → Instagram: condense to 1 punchy line + carousel slides
|
|
135
|
+
- LinkedIn → X: extract the sharpest single insight
|
|
136
|
+
3. **Hook Regeneration** — For Tier 1 bangers, spawn hook-generator subagent for platform-optimized adaptation hooks:
|
|
137
|
+
```markdown
|
|
138
|
+
Load the hook-generator skill and execute the full Phase 1-6 pipeline with this context:
|
|
139
|
+
- WHO: [Target platform audience from brand evergreen.md]
|
|
140
|
+
- WHAT/WHY: [Original post's core insight + pain angle]
|
|
141
|
+
- Knife: [Original post's pain point]
|
|
142
|
+
- Platform: [Target platform — LinkedIn/Instagram/Threads/etc.]
|
|
143
|
+
- Brand: [Brand voice from evergreen.md]
|
|
144
|
+
- Target Score: 80
|
|
145
|
+
Return ONLY this JSON array: [{"hook":"...","score":<0-100>,"pattern":"...","formula":"..."}]
|
|
146
|
+
```
|
|
147
|
+
Filter: Discard hooks that don't match target platform conventions (e.g., no thread hooks on LinkedIn, no hashtag-heavy hooks on Threads)
|
|
148
|
+
Fallback: If subagent fails, use manual platform adaptation rules from step 2
|
|
149
|
+
4. **Preserve the winning formula** — keep the same pain angle and hook pattern that performed
|
|
150
|
+
5. **Update the CTA** — match the platform's link conventions
|
|
151
|
+
6. **Tag as `adapted_from: <original_url>`** in the repost queue
|
|
152
|
+
|
|
153
|
+
## Repost Queue File
|
|
154
|
+
|
|
155
|
+
Output location (brand-specific):
|
|
156
|
+
```
|
|
157
|
+
businesses/<brand-slug>/analytics/repost-queue.md
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
### Format
|
|
161
|
+
|
|
162
|
+
```md
|
|
163
|
+
# Repost Queue — <Brand Name>
|
|
164
|
+
|
|
165
|
+
> Last updated: YYYY-MM-DD
|
|
166
|
+
> Median engagement: X (from latest weekly report)
|
|
167
|
+
|
|
168
|
+
## Tier 1 — Bangers (≥ 3x median)
|
|
169
|
+
| Original URL | Platform | Pain | Pattern | Engagement | Repost Eligible On | Adapted For | Status |
|
|
170
|
+
|---|---|---|---|---:|---|---|---|
|
|
171
|
+
| https://x.com/... | X | tool_overload | contrarian | 22 | 2026-06-15 | LinkedIn | queued |
|
|
172
|
+
|
|
173
|
+
## Tier 2 — Solid (≥ 2x median)
|
|
174
|
+
| Original URL | Platform | Pain | Pattern | Engagement | Repost Eligible On | Adapted For | Status |
|
|
175
|
+
|---|---|---|---|---:|---|---|---|
|
|
176
|
+
|
|
177
|
+
## Tier 3 — Cross-Platform Candidates (≥ 1.5x median)
|
|
178
|
+
| Original URL | Platform | Pain | Pattern | Engagement | Adapt For | Status |
|
|
179
|
+
|---|---|---|---|---:|---|---|
|
|
180
|
+
|
|
181
|
+
## Repost History
|
|
182
|
+
| Date | Original URL | Platform | Action | Result |
|
|
183
|
+
|---|---|---|---|---|
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
### Status Values
|
|
187
|
+
|
|
188
|
+
- `queued` — waiting for cooldown to expire
|
|
189
|
+
- `ready` — cooldown passed, ready to post
|
|
190
|
+
- `adapted` — rewritten for different platform
|
|
191
|
+
- `posted` — live, track results
|
|
192
|
+
- `killed` — decided not to repost after all
|
|
193
|
+
- `skip` — content staled or became irrelevant
|
|
194
|
+
|
|
195
|
+
## Integration with Existing Systems
|
|
196
|
+
|
|
197
|
+
This skill is a **consumer** of analytics data, not a producer. It reads from:
|
|
198
|
+
|
|
199
|
+
| Data Source | Owner | What We Read |
|
|
200
|
+
|-------------|-------|-------------|
|
|
201
|
+
| Weekly analytics script | Hermes / analytics cron | JSON snapshots, weekly reports |
|
|
202
|
+
| Hook performance registry | Hook intelligence skill | Winning hook patterns |
|
|
203
|
+
| Content taxonomy | Brand evergreen.md | Pain angles, hook patterns, CTA types |
|
|
204
|
+
| Posting history | Platform posting queues | What was already posted/reposted |
|
|
205
|
+
|
|
206
|
+
It writes to:
|
|
207
|
+
| Output | What |
|
|
208
|
+
|--------|------|
|
|
209
|
+
| `analytics/repost-queue.md` | Repost candidates + history |
|
|
210
|
+
| Evergreen.md systems table | Entry pointing to this skill + queue file |
|
|
211
|
+
|
|
212
|
+
## Workflow
|
|
213
|
+
|
|
214
|
+
### Manual (on demand)
|
|
215
|
+
|
|
216
|
+
When user asks "what should I repost" or "which posts are bangers":
|
|
217
|
+
|
|
218
|
+
1. Read the brand's evergreen.md → find analytics paths
|
|
219
|
+
2. Read latest snapshot or report
|
|
220
|
+
3. Calculate median engagement
|
|
221
|
+
4. Filter for evergreen content types only
|
|
222
|
+
5. Apply cooldown check (compare post date vs today)
|
|
223
|
+
6. Output the repost queue
|
|
224
|
+
|
|
225
|
+
### Automated (cron extension)
|
|
226
|
+
|
|
227
|
+
Add a repost scan step to the existing weekly analytics cron:
|
|
228
|
+
|
|
229
|
+
```bash
|
|
230
|
+
# After the existing analytics script runs, scan for repost candidates
|
|
231
|
+
python3 scripts/content-repost-scan.py --business <brand-slug>
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
This script reads the snapshot output by the analytics script and appends to the repost queue.
|
|
235
|
+
|
|
236
|
+
## Anti-Patterns
|
|
237
|
+
|
|
238
|
+
| Mistake | Why Wrong | Fix |
|
|
239
|
+
|---------|-----------|-----|
|
|
240
|
+
| Reposting market news | Stale in hours, destroys credibility | Classify first, never repost trending |
|
|
241
|
+
| Same text on same platform | Audience remembers, looks lazy | Always adapt or add new framing |
|
|
242
|
+
| 30-day cooldown on news | Irrelevant — news is dead by then | No cooldown needed, just don't repost |
|
|
243
|
+
| Ignoring cross-platform opportunity | X banger may kill it on LinkedIn | Always check Tier 1 for adaptation |
|
|
244
|
+
| Duplicating analytics logic | Hermes already runs weekly analytics | Read data, don't regenerate |
|
|
245
|
+
| Brand-specific hardcoded paths | Breaks for other brands | Always discover from evergreen.md |
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""Content Repost Scanner: Reads analytics snapshots and identifies repost candidates."""
|
|
3
|
+
import json
|
|
4
|
+
import sys
|
|
5
|
+
import os
|
|
6
|
+
from datetime import datetime, timedelta
|
|
7
|
+
|
|
8
|
+
def load_snapshot(path):
|
|
9
|
+
with open(path) as f:
|
|
10
|
+
return json.load(f)
|
|
11
|
+
|
|
12
|
+
def calc_weighted_engagement(post):
|
|
13
|
+
return post.get('likes', 0) + 2 * post.get('replies', 0) + 2 * post.get('reposts', 0)
|
|
14
|
+
|
|
15
|
+
def classify_evergreen(post):
|
|
16
|
+
tag = post.get('pain_angle', post.get('tag', '')).lower()
|
|
17
|
+
trending_tags = {'market_signal', 'market_news'}
|
|
18
|
+
evergreen_tags = {
|
|
19
|
+
'tool_overload', 'manual_loops', 'founder_router', 'unfinished_workflow',
|
|
20
|
+
'proof_test', 'context_bloat', 'template_confusion', 'expensive_mistake',
|
|
21
|
+
'vertical_law', 'vertical_real_estate', 'agent_lifestyle', 'contrarian',
|
|
22
|
+
'pain_pill', 'first_person',
|
|
23
|
+
}
|
|
24
|
+
if tag in trending_tags:
|
|
25
|
+
return False
|
|
26
|
+
if tag in evergreen_tags:
|
|
27
|
+
return True
|
|
28
|
+
return 'evergreen' in tag
|
|
29
|
+
|
|
30
|
+
def main():
|
|
31
|
+
import argparse
|
|
32
|
+
parser = argparse.ArgumentParser()
|
|
33
|
+
parser.add_argument('--business', required=True, help='Brand slug')
|
|
34
|
+
parser.add_argument('--snapshot', help='Path to analytics snapshot JSON')
|
|
35
|
+
parser.add_argument('--output', help='Output queue file path')
|
|
36
|
+
args = parser.parse_args()
|
|
37
|
+
|
|
38
|
+
business = args.business
|
|
39
|
+
base = f'businesses/{business}'
|
|
40
|
+
|
|
41
|
+
snapshot_path = args.snapshot or f'{base}/analytics/snapshots/latest-x-metrics.json'
|
|
42
|
+
if not os.path.exists(snapshot_path):
|
|
43
|
+
print(f'No snapshot found at {snapshot_path}')
|
|
44
|
+
sys.exit(0)
|
|
45
|
+
|
|
46
|
+
snapshot = load_snapshot(snapshot_path)
|
|
47
|
+
posts = snapshot if isinstance(snapshot, list) else snapshot.get('posts', [])
|
|
48
|
+
|
|
49
|
+
if not posts:
|
|
50
|
+
print('No posts in snapshot')
|
|
51
|
+
return
|
|
52
|
+
|
|
53
|
+
engagements = [calc_weighted_engagement(p) for p in posts]
|
|
54
|
+
median = sorted(engagements)[len(engagements) // 2] if engagements else 0
|
|
55
|
+
|
|
56
|
+
candidates = []
|
|
57
|
+
for post in posts:
|
|
58
|
+
ew = calc_weighted_engagement(post)
|
|
59
|
+
ratio = ew / median if median > 0 else 0
|
|
60
|
+
if not classify_evergreen(post):
|
|
61
|
+
continue
|
|
62
|
+
post_date = post.get('date', post.get('created_at', ''))
|
|
63
|
+
if post_date:
|
|
64
|
+
try:
|
|
65
|
+
pd = datetime.fromisoformat(post_date.replace('Z', '+00:00'))
|
|
66
|
+
days_ago = (datetime.now().astimezone() - pd).days
|
|
67
|
+
except:
|
|
68
|
+
days_ago = 999
|
|
69
|
+
else:
|
|
70
|
+
days_ago = 999
|
|
71
|
+
|
|
72
|
+
candidates.append({
|
|
73
|
+
'url': post.get('url', ''),
|
|
74
|
+
'platform': post.get('platform', 'X'),
|
|
75
|
+
'pain': post.get('pain_angle', post.get('tag', 'unknown')),
|
|
76
|
+
'pattern': post.get('hook_pattern', 'unknown'),
|
|
77
|
+
'engagement': ew,
|
|
78
|
+
'ratio': round(ratio, 1),
|
|
79
|
+
'age_days': days_ago,
|
|
80
|
+
'eligible_after': days_ago,
|
|
81
|
+
})
|
|
82
|
+
|
|
83
|
+
candidates.sort(key=lambda c: c['engagement'], reverse=True)
|
|
84
|
+
|
|
85
|
+
tier1 = [c for c in candidates if c['ratio'] >= 3]
|
|
86
|
+
tier2 = [c for c in candidates if c['ratio'] >= 2 and c not in tier1]
|
|
87
|
+
tier3 = [c for c in candidates if c['ratio'] >= 1.5 and c not in tier1 and c not in tier2]
|
|
88
|
+
|
|
89
|
+
output_lines = [f'# Repost Queue — {business}', '']
|
|
90
|
+
output_lines.append(f'> Last updated: {datetime.now().strftime("%Y-%m-%d")}')
|
|
91
|
+
output_lines.append(f'> Median engagement: {median}')
|
|
92
|
+
output_lines.append('')
|
|
93
|
+
|
|
94
|
+
if tier1:
|
|
95
|
+
output_lines.append('## Tier 1 — Bangers (≥ 3x median)')
|
|
96
|
+
output_lines.append('| URL | Platform | Pain | Pattern | Engagement | Ratio | Age (days) | Eligible | Status |')
|
|
97
|
+
output_lines.append('|---|---|---|---:|---:|---:|---|---|')
|
|
98
|
+
for c in tier1:
|
|
99
|
+
eligible_on = (datetime.now() + timedelta(days=max(0, 30 - c['age_days']))).strftime('%Y-%m-%d')
|
|
100
|
+
output_lines.append(f"| {c['url']} | {c['platform']} | {c['pain']} | {c['pattern']} | {c['engagement']} | {c['ratio']}x | {c['age_days']} | {eligible_on} | queued |")
|
|
101
|
+
output_lines.append('')
|
|
102
|
+
|
|
103
|
+
if tier2:
|
|
104
|
+
output_lines.append('## Tier 2 — Solid (≥ 2x median)')
|
|
105
|
+
output_lines.append('| URL | Platform | Pain | Pattern | Engagement | Ratio | Age (days) | Eligible | Status |')
|
|
106
|
+
output_lines.append('|---|---|---|---:|---:|---:|---|---|')
|
|
107
|
+
for c in tier2:
|
|
108
|
+
output_lines.append(f"| {c['url']} | {c['platform']} | {c['pain']} | {c['pattern']} | {c['engagement']} | {c['ratio']}x | {c['age_days']} | — | queued |")
|
|
109
|
+
output_lines.append('')
|
|
110
|
+
|
|
111
|
+
if tier3:
|
|
112
|
+
output_lines.append('## Tier 3 — Cross-Platform Candidates (≥ 1.5x median)')
|
|
113
|
+
output_lines.append('| URL | Platform | Pain | Pattern | Engagement | Ratio | Adapt For | Status |')
|
|
114
|
+
output_lines.append('|---|---|---|---:|---:|---|---|')
|
|
115
|
+
for c in tier3:
|
|
116
|
+
alt_platform = 'LinkedIn' if c['platform'] == 'X' else 'X'
|
|
117
|
+
output_lines.append(f"| {c['url']} | {c['platform']} | {c['pain']} | {c['pattern']} | {c['engagement']} | {c['ratio']}x | {alt_platform} | candidate |")
|
|
118
|
+
output_lines.append('')
|
|
119
|
+
|
|
120
|
+
output = '\n'.join(output_lines)
|
|
121
|
+
|
|
122
|
+
output_path = args.output or f'{base}/analytics/repost-queue.md'
|
|
123
|
+
os.makedirs(os.path.dirname(output_path), exist_ok=True)
|
|
124
|
+
with open(output_path, 'w') as f:
|
|
125
|
+
f.write(output)
|
|
126
|
+
|
|
127
|
+
print(f'Repost queue written to {output_path}')
|
|
128
|
+
print(f'Tier 1 (bangers): {len(tier1)}')
|
|
129
|
+
print(f'Tier 2 (solid): {len(tier2)}')
|
|
130
|
+
print(f'Tier 3 (cross-platform): {len(tier3)}')
|
|
131
|
+
|
|
132
|
+
if __name__ == '__main__':
|
|
133
|
+
main()
|