@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,179 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: auto-indexing
|
|
3
|
+
description: Automatically submit published articles to participating search engines (Bing, Yandex, Seznam via IndexNow) for faster indexing. Google is NOT an IndexNow participant — Google indexing requires sitemap submission in Search Console + manual URL inspection there.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Auto-Indexing Skill
|
|
7
|
+
|
|
8
|
+
Automatically submit published articles to search engines for faster indexing.
|
|
9
|
+
|
|
10
|
+
## Purpose
|
|
11
|
+
|
|
12
|
+
After validating your site with Bing Webmaster Tools, this skill automates the indexing-ping process for every new article you publish. No manual submission required for IndexNow-participant engines.
|
|
13
|
+
|
|
14
|
+
**CRITICAL — Google coverage gap:** Google never joined IndexNow and deprecated its sitemap ping endpoint (2023). IndexNow submissions do NOT reach Google in any way. For Google you must: (1) submit your sitemap in Google Search Console, and (2) optionally request indexing per-URL via Search Console URL Inspection ("Request indexing").
|
|
15
|
+
|
|
16
|
+
## When to Use
|
|
17
|
+
|
|
18
|
+
**Invoke this skill**:
|
|
19
|
+
- After publishing a new blog article
|
|
20
|
+
- After updating an existing article significantly
|
|
21
|
+
- When you want to force re-indexing of a page
|
|
22
|
+
|
|
23
|
+
**Trigger phrases**:
|
|
24
|
+
- "submit the article for indexing"
|
|
25
|
+
- "index this article"
|
|
26
|
+
- "notify search engines about the new article"
|
|
27
|
+
- "auto-index the published article"
|
|
28
|
+
|
|
29
|
+
## What It Does
|
|
30
|
+
|
|
31
|
+
1. **IndexNow Protocol** (Priority Method)
|
|
32
|
+
- Instantly notifies participating engines: Bing, Yandex, Seznam, Naver (+ all IndexNow participants) — **NOT Google**
|
|
33
|
+
- No API limits, completely free
|
|
34
|
+
- Typically crawled within 24-48 hours by participants
|
|
35
|
+
|
|
36
|
+
2. **Sitemap Submission** (Google path)
|
|
37
|
+
- Google ignores IndexNow and killed its ping endpoint (`google.com/ping?sitemap=` → 404, deprecated 2023; Bing's → 410)
|
|
38
|
+
- Submit the sitemap once in Google Search Console → Sitemaps; Google then discovers new URLs from it
|
|
39
|
+
- Per-URL acceleration: Search Console → URL Inspection → "Request indexing" (UI only — no API)
|
|
40
|
+
|
|
41
|
+
3. **Key Management**
|
|
42
|
+
- Auto-generates IndexNow key on first use
|
|
43
|
+
- Saves key to `.indexnow-key.txt`
|
|
44
|
+
- Provides instructions for uploading key file to site
|
|
45
|
+
|
|
46
|
+
## Prerequisites
|
|
47
|
+
|
|
48
|
+
**One-time setup** (after validating your site):
|
|
49
|
+
|
|
50
|
+
1. **Verify ownership** in Google Search Console and Bing Webmaster Tools
|
|
51
|
+
2. **Upload IndexNow key** to your site root (skill will generate and guide you)
|
|
52
|
+
|
|
53
|
+
That's it! After initial setup, indexing is fully automated.
|
|
54
|
+
|
|
55
|
+
## How to Use
|
|
56
|
+
|
|
57
|
+
### Basic Usage
|
|
58
|
+
|
|
59
|
+
```
|
|
60
|
+
Skill: auto-indexing
|
|
61
|
+
|
|
62
|
+
User provides:
|
|
63
|
+
- Article URL: https://www.thegptshop.online/blog/monetize-custom-gpts-2025
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
### Advanced Usage
|
|
67
|
+
|
|
68
|
+
```
|
|
69
|
+
Skill: auto-indexing
|
|
70
|
+
|
|
71
|
+
With options:
|
|
72
|
+
- Article URL: https://example.com/blog/article
|
|
73
|
+
- Sitemap URL: https://example.com/sitemap.xml (optional, auto-detected)
|
|
74
|
+
- Force re-index: true (for updated articles)
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
## Integration with Publishing Workflow
|
|
78
|
+
|
|
79
|
+
**Recommended workflow**:
|
|
80
|
+
1. Publish article with `github-blog-publisher` skill
|
|
81
|
+
2. Verify article is live
|
|
82
|
+
3. Invoke `auto-indexing` skill
|
|
83
|
+
4. Skill notifies all search engines automatically
|
|
84
|
+
|
|
85
|
+
**Optional automation**: Add to github-blog-publisher post-publish hook
|
|
86
|
+
|
|
87
|
+
## Technical Details
|
|
88
|
+
|
|
89
|
+
**Methods Used**:
|
|
90
|
+
- **IndexNow**: HTTP POST to api.indexnow.org (Bing, Yandex, Seznam + participants — NOT Google)
|
|
91
|
+
- **Sitemap Ping**: DEPRECATED — Google endpoint 404, Bing endpoint 410 (live-verified 2026-09). Do not rely on it.
|
|
92
|
+
- **Google Indexing API**: Limited to JobPosting/BroadcastEvent types only; not applicable to blog content
|
|
93
|
+
|
|
94
|
+
**Timeline**:
|
|
95
|
+
- Submission: Instant (< 5 seconds)
|
|
96
|
+
- Crawling by IndexNow participants: 24-48 hours
|
|
97
|
+
- Google: no fixed timeline — depends on sitemap submission in GSC, crawl budget, and internal links
|
|
98
|
+
|
|
99
|
+
**Cost**: Free (no API limits, no rate limits)
|
|
100
|
+
|
|
101
|
+
## Outputs
|
|
102
|
+
|
|
103
|
+
**Success**:
|
|
104
|
+
```
|
|
105
|
+
✅ IndexNow submission successful
|
|
106
|
+
Notified: Bing, Yandex, Seznam (+ all IndexNow participants)
|
|
107
|
+
✨ Article submitted for crawling!
|
|
108
|
+
Expected: Crawled by participants within 24-48 hours
|
|
109
|
+
ℹ️ Google NOT notified — submit sitemap in Search Console and/or use URL Inspection → Request indexing
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
**First-time setup**:
|
|
113
|
+
```
|
|
114
|
+
🔑 Generated new IndexNow key: abc123...
|
|
115
|
+
📝 Key saved to: .indexnow-key.txt
|
|
116
|
+
|
|
117
|
+
⚠️ IMPORTANT: Upload this key file to your site root:
|
|
118
|
+
https://thegptshop.online/abc123....txt
|
|
119
|
+
Content: abc123...
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
## Troubleshooting
|
|
123
|
+
|
|
124
|
+
**Key file not uploaded**:
|
|
125
|
+
- Skill generates key and provides upload instructions
|
|
126
|
+
- Upload to `public/[key].txt` in your Next.js site
|
|
127
|
+
- Redeploy site after uploading key
|
|
128
|
+
|
|
129
|
+
**Submission failed**:
|
|
130
|
+
- Check network connectivity
|
|
131
|
+
- Verify site URL is correct
|
|
132
|
+
- Check Search Console for manual submission as fallback
|
|
133
|
+
|
|
134
|
+
**Article not indexed after 72 hours**:
|
|
135
|
+
- Verify robots.txt allows crawling
|
|
136
|
+
- Check Google Search Console > Coverage report
|
|
137
|
+
- Add internal links to the article
|
|
138
|
+
- Request manual indexing in Search Console
|
|
139
|
+
|
|
140
|
+
## Examples
|
|
141
|
+
|
|
142
|
+
### Example 1: Index New Article
|
|
143
|
+
```
|
|
144
|
+
User: "I just published the Custom GPTs article, can you submit it for indexing?"
|
|
145
|
+
Assistant: "I'll submit your article to search engines for automatic indexing."
|
|
146
|
+
*Invokes auto-indexing skill*
|
|
147
|
+
Result: Article submitted to Bing, Yandex, Seznam via IndexNow (Google requires GSC sitemap submission / URL Inspection)
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
### Example 2: After Publishing Workflow
|
|
151
|
+
```
|
|
152
|
+
User: "Publish this article about AI automation"
|
|
153
|
+
Assistant: *Uses github-blog-publisher skill*
|
|
154
|
+
Assistant: "Article published successfully! Would you like me to submit it for search engine indexing?"
|
|
155
|
+
User: "Yes"
|
|
156
|
+
Assistant: *Invokes auto-indexing skill*
|
|
157
|
+
Result: Crawled by IndexNow participants within 24-48 hours (Google indexing depends on GSC sitemap + crawl)
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
### Example 3: Re-index Updated Article
|
|
161
|
+
```
|
|
162
|
+
User: "I updated the monetization guide, can you re-submit it for indexing?"
|
|
163
|
+
Assistant: *Invokes auto-indexing skill with force flag*
|
|
164
|
+
Result: Search engines notified of updated content
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
## Notes
|
|
168
|
+
|
|
169
|
+
- **No rate limits**: Unlike Google Indexing API, IndexNow has no submission limits
|
|
170
|
+
- **Multiple search engines**: One submission notifies all participating search engines
|
|
171
|
+
- **Instant notification**: Submission completes in seconds
|
|
172
|
+
- **Free forever**: No API costs or subscription fees
|
|
173
|
+
- **Works globally, EXCEPT Google**: IndexNow participants cover Bing/Yandex/Seznam/Naver traffic — Google (~90% of global search) is NOT covered and needs Search Console workflows
|
|
174
|
+
|
|
175
|
+
## Files
|
|
176
|
+
|
|
177
|
+
- `/scripts/auto-indexing.js` - Core indexing logic
|
|
178
|
+
- `.indexnow-key.txt` - Generated IndexNow key (gitignored)
|
|
179
|
+
- Integration with github-blog-publisher skill
|
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Automated Search Engine Indexing
|
|
5
|
+
*
|
|
6
|
+
* Automatically submits URLs to search engines after publishing
|
|
7
|
+
*
|
|
8
|
+
* Methods:
|
|
9
|
+
* 1. IndexNow Protocol - Instant notification (Google, Bing, Yandex, Seznam)
|
|
10
|
+
* 2. Google Indexing API - Priority indexing for critical pages
|
|
11
|
+
* 3. Sitemap ping - Standard notification method
|
|
12
|
+
*
|
|
13
|
+
* Usage:
|
|
14
|
+
* node auto-indexing.js --url "https://example.com/blog/article" --sitemap "https://example.com/sitemap.xml"
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
const https = require('https');
|
|
18
|
+
const http = require('http');
|
|
19
|
+
const crypto = require('crypto');
|
|
20
|
+
const fs = require('fs').promises;
|
|
21
|
+
const path = require('path');
|
|
22
|
+
|
|
23
|
+
class AutoIndexing {
|
|
24
|
+
constructor(siteUrl) {
|
|
25
|
+
this.siteUrl = siteUrl;
|
|
26
|
+
this.indexNowKey = null;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Generate or load IndexNow key
|
|
31
|
+
*/
|
|
32
|
+
async getIndexNowKey() {
|
|
33
|
+
if (this.indexNowKey) return this.indexNowKey;
|
|
34
|
+
|
|
35
|
+
const keyPath = path.join(process.cwd(), '.indexnow-key.txt');
|
|
36
|
+
|
|
37
|
+
try {
|
|
38
|
+
// Try to load existing key
|
|
39
|
+
this.indexNowKey = await fs.readFile(keyPath, 'utf-8');
|
|
40
|
+
console.log('✅ Loaded existing IndexNow key');
|
|
41
|
+
} catch (error) {
|
|
42
|
+
// Generate new key
|
|
43
|
+
this.indexNowKey = crypto.randomBytes(32).toString('hex');
|
|
44
|
+
await fs.writeFile(keyPath, this.indexNowKey);
|
|
45
|
+
console.log('🔑 Generated new IndexNow key:', this.indexNowKey);
|
|
46
|
+
console.log(`📝 Key saved to: ${keyPath}`);
|
|
47
|
+
console.log(`\n⚠️ IMPORTANT: Upload this key file to your site root:`);
|
|
48
|
+
console.log(` https://${new URL(this.siteUrl).hostname}/${this.indexNowKey}.txt`);
|
|
49
|
+
console.log(` Content: ${this.indexNowKey}\n`);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
return this.indexNowKey;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Submit URL via IndexNow protocol
|
|
57
|
+
* @param {string[]} urls - URLs to submit
|
|
58
|
+
* @returns {Promise<boolean>}
|
|
59
|
+
*/
|
|
60
|
+
async submitIndexNow(urls) {
|
|
61
|
+
const key = await this.getIndexNowKey();
|
|
62
|
+
const hostname = new URL(this.siteUrl).hostname;
|
|
63
|
+
|
|
64
|
+
const payload = {
|
|
65
|
+
host: hostname,
|
|
66
|
+
key: key,
|
|
67
|
+
keyLocation: `https://${hostname}/${key}.txt`,
|
|
68
|
+
urlList: urls
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
return new Promise((resolve, reject) => {
|
|
72
|
+
const data = JSON.stringify(payload);
|
|
73
|
+
const options = {
|
|
74
|
+
hostname: 'api.indexnow.org',
|
|
75
|
+
path: '/indexnow',
|
|
76
|
+
method: 'POST',
|
|
77
|
+
headers: {
|
|
78
|
+
'Content-Type': 'application/json',
|
|
79
|
+
'Content-Length': data.length
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
|
|
83
|
+
console.log('\n📡 Submitting to IndexNow...');
|
|
84
|
+
console.log(`URLs: ${urls.join(', ')}`);
|
|
85
|
+
|
|
86
|
+
const req = https.request(options, (res) => {
|
|
87
|
+
if (res.statusCode === 200 || res.statusCode === 202) {
|
|
88
|
+
console.log('✅ IndexNow submission successful');
|
|
89
|
+
console.log(' Status:', res.statusCode);
|
|
90
|
+
console.log(' Notified: Google, Bing, Yandex, Seznam');
|
|
91
|
+
resolve(true);
|
|
92
|
+
} else {
|
|
93
|
+
console.error('❌ IndexNow submission failed');
|
|
94
|
+
console.error(' Status:', res.statusCode);
|
|
95
|
+
resolve(false);
|
|
96
|
+
}
|
|
97
|
+
});
|
|
98
|
+
|
|
99
|
+
req.on('error', (error) => {
|
|
100
|
+
console.error('❌ IndexNow request error:', error.message);
|
|
101
|
+
resolve(false);
|
|
102
|
+
});
|
|
103
|
+
|
|
104
|
+
req.write(data);
|
|
105
|
+
req.end();
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* Ping sitemap to search engines
|
|
111
|
+
* @param {string} sitemapUrl - Full URL to sitemap
|
|
112
|
+
*/
|
|
113
|
+
async pingSitemap(sitemapUrl) {
|
|
114
|
+
console.log('\n📍 Pinging sitemap to search engines...');
|
|
115
|
+
|
|
116
|
+
const engines = [
|
|
117
|
+
{
|
|
118
|
+
name: 'Google',
|
|
119
|
+
url: `https://www.google.com/ping?sitemap=${encodeURIComponent(sitemapUrl)}`
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
name: 'Bing',
|
|
123
|
+
url: `https://www.bing.com/ping?sitemap=${encodeURIComponent(sitemapUrl)}`
|
|
124
|
+
}
|
|
125
|
+
];
|
|
126
|
+
|
|
127
|
+
const results = await Promise.allSettled(
|
|
128
|
+
engines.map(engine => this.pingUrl(engine.url, engine.name))
|
|
129
|
+
);
|
|
130
|
+
|
|
131
|
+
const successful = results.filter(r => r.status === 'fulfilled' && r.value).length;
|
|
132
|
+
console.log(`✅ Sitemap pinged successfully to ${successful}/${engines.length} search engines`);
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* Ping a URL
|
|
137
|
+
*/
|
|
138
|
+
async pingUrl(url, name) {
|
|
139
|
+
return new Promise((resolve) => {
|
|
140
|
+
const client = url.startsWith('https') ? https : http;
|
|
141
|
+
|
|
142
|
+
client.get(url, (res) => {
|
|
143
|
+
if (res.statusCode === 200) {
|
|
144
|
+
console.log(` ✓ ${name}`);
|
|
145
|
+
resolve(true);
|
|
146
|
+
} else {
|
|
147
|
+
console.log(` ✗ ${name} (${res.statusCode})`);
|
|
148
|
+
resolve(false);
|
|
149
|
+
}
|
|
150
|
+
}).on('error', (error) => {
|
|
151
|
+
console.log(` ✗ ${name} (${error.message})`);
|
|
152
|
+
resolve(false);
|
|
153
|
+
});
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
/**
|
|
158
|
+
* Submit URL to Google Indexing API
|
|
159
|
+
* Requires service account credentials
|
|
160
|
+
* @param {string} url - URL to index
|
|
161
|
+
*/
|
|
162
|
+
async submitGoogleIndexingAPI(url) {
|
|
163
|
+
// This requires Google Cloud service account setup
|
|
164
|
+
// For now, we'll use IndexNow which is simpler and free
|
|
165
|
+
console.log('\n💡 Google Indexing API requires service account setup');
|
|
166
|
+
console.log(' Using IndexNow instead (instant, free, no limits)');
|
|
167
|
+
return false;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
/**
|
|
171
|
+
* Complete indexing workflow
|
|
172
|
+
* @param {string} articleUrl - URL of published article
|
|
173
|
+
* @param {string} sitemapUrl - URL of sitemap
|
|
174
|
+
*/
|
|
175
|
+
async indexArticle(articleUrl, sitemapUrl) {
|
|
176
|
+
console.log('\n🚀 Starting automated indexing workflow...');
|
|
177
|
+
console.log(`Article: ${articleUrl}`);
|
|
178
|
+
console.log(`Sitemap: ${sitemapUrl}`);
|
|
179
|
+
|
|
180
|
+
const results = {
|
|
181
|
+
indexNow: false,
|
|
182
|
+
sitemapPing: false,
|
|
183
|
+
timestamp: new Date().toISOString()
|
|
184
|
+
};
|
|
185
|
+
|
|
186
|
+
// 1. IndexNow (priority method)
|
|
187
|
+
try {
|
|
188
|
+
results.indexNow = await this.submitIndexNow([articleUrl]);
|
|
189
|
+
} catch (error) {
|
|
190
|
+
console.error('IndexNow error:', error.message);
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
// 2. Sitemap ping (fallback)
|
|
194
|
+
try {
|
|
195
|
+
await this.pingSitemap(sitemapUrl);
|
|
196
|
+
results.sitemapPing = true;
|
|
197
|
+
} catch (error) {
|
|
198
|
+
console.error('Sitemap ping error:', error.message);
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
// Summary
|
|
202
|
+
console.log('\n📊 Indexing Summary:');
|
|
203
|
+
console.log(` IndexNow: ${results.indexNow ? '✅ Success' : '❌ Failed'}`);
|
|
204
|
+
console.log(` Sitemap Ping: ${results.sitemapPing ? '✅ Success' : '❌ Failed'}`);
|
|
205
|
+
|
|
206
|
+
if (results.indexNow || results.sitemapPing) {
|
|
207
|
+
console.log('\n✨ Article submitted for indexing!');
|
|
208
|
+
console.log(' Expected: Indexed within 24-48 hours');
|
|
209
|
+
} else {
|
|
210
|
+
console.log('\n⚠️ All methods failed - manual submission required');
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
return results;
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
// CLI usage
|
|
218
|
+
async function main() {
|
|
219
|
+
const args = process.argv.slice(2);
|
|
220
|
+
|
|
221
|
+
// Parse arguments
|
|
222
|
+
let articleUrl = null;
|
|
223
|
+
let sitemapUrl = null;
|
|
224
|
+
|
|
225
|
+
for (let i = 0; i < args.length; i++) {
|
|
226
|
+
if (args[i] === '--url' && args[i + 1]) {
|
|
227
|
+
articleUrl = args[i + 1];
|
|
228
|
+
}
|
|
229
|
+
if (args[i] === '--sitemap' && args[i + 1]) {
|
|
230
|
+
sitemapUrl = args[i + 1];
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
if (!articleUrl) {
|
|
235
|
+
console.error('❌ Missing --url parameter');
|
|
236
|
+
console.log('\nUsage:');
|
|
237
|
+
console.log(' node auto-indexing.js --url "https://example.com/article" --sitemap "https://example.com/sitemap.xml"');
|
|
238
|
+
process.exit(1);
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
// Extract site URL from article URL
|
|
242
|
+
const siteUrl = new URL(articleUrl).origin;
|
|
243
|
+
|
|
244
|
+
// Default sitemap if not provided
|
|
245
|
+
if (!sitemapUrl) {
|
|
246
|
+
sitemapUrl = `${siteUrl}/sitemap.xml`;
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
const indexer = new AutoIndexing(siteUrl);
|
|
250
|
+
await indexer.indexArticle(articleUrl, sitemapUrl);
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
if (require.main === module) {
|
|
254
|
+
main().catch(console.error);
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
module.exports = { AutoIndexing };
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: auto-skill
|
|
3
|
+
description: "Automatic skill development pipeline. Detects repetitive tasks and user corrections, then creates or improves skills accordingly."
|
|
4
|
+
allowed-tools: []
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# /auto-skill — Automatic Skill Development
|
|
8
|
+
|
|
9
|
+
Detects corrections and repetitive patterns, then creates or improves skills with dedup protection and git versioning.
|
|
10
|
+
|
|
11
|
+
## How It Works
|
|
12
|
+
|
|
13
|
+
Three detection mechanisms feed a queue, and this skill processes it:
|
|
14
|
+
|
|
15
|
+
1. **Correction detection** — User frustration/correction patterns auto-queue skill improvements
|
|
16
|
+
2. **Repetition detection** — Same task pattern 2+ times suggests skill extraction
|
|
17
|
+
3. **Excellence detection** — Exceptional output flagged by user ("this is fucking good," "save this pattern") triggers skill extraction to make it repeatable
|
|
18
|
+
4. **Skill routing** — High-confidence skill matches auto-load (0.8+), medium confidence suggests (0.6+)
|
|
19
|
+
|
|
20
|
+
## On Activation
|
|
21
|
+
|
|
22
|
+
1. Read `memory/skill-queue.md` for pending items
|
|
23
|
+
2. If queue is empty, report: "No pending skill improvements."
|
|
24
|
+
3. If queue has items, process each one
|
|
25
|
+
|
|
26
|
+
## Phase 1: Process Corrections
|
|
27
|
+
|
|
28
|
+
For each correction in the queue:
|
|
29
|
+
|
|
30
|
+
1. **Dedup check** — Run `findDuplicateSkill()` against all existing skills
|
|
31
|
+
2. **If match > 0.7** — IMPROVE existing skill:
|
|
32
|
+
- Read the matching SKILL.md
|
|
33
|
+
- Add the correction to Anti-Patterns table
|
|
34
|
+
- Git commit: `skill(<name>): add correction — <summary>`
|
|
35
|
+
3. **If no match** — Draft new skill:
|
|
36
|
+
- Create entry in queue with `status: pending-approval`
|
|
37
|
+
- Present to user for approval before creating
|
|
38
|
+
- NEVER auto-create without human approval
|
|
39
|
+
|
|
40
|
+
## Phase 2: Process Repetitions
|
|
41
|
+
|
|
42
|
+
For each repetition (2+ occurrences of same pattern):
|
|
43
|
+
|
|
44
|
+
1. **Check if existing skill covers it** — Fuzzy match against skill index
|
|
45
|
+
2. **If covered** — Add to that skill's Anti-Patterns: "Agent improvised instead of using this skill"
|
|
46
|
+
3. **If not covered** — Draft new skill with:
|
|
47
|
+
- Name derived from the repeated pattern
|
|
48
|
+
- Description capturing what was repeated
|
|
49
|
+
- Status: `pending-approval`
|
|
50
|
+
- Present to user for approval
|
|
51
|
+
|
|
52
|
+
## Phase 3: Process Excellence (Capture Repeatable Greatness)
|
|
53
|
+
|
|
54
|
+
For each excellence flag (user says "this is great," "save this," "make it repeatable"):
|
|
55
|
+
|
|
56
|
+
1. **Extract the pattern** — What made it work? (structure, voice, specific techniques, prompt chains)
|
|
57
|
+
2. **Check existing skill coverage** — Does a skill already produce this quality?
|
|
58
|
+
3. **If skill exists** — Add the winning pattern as "Golden Path" example in that skill
|
|
59
|
+
4. **If no skill covers it** — Draft new skill with:
|
|
60
|
+
- Name from the pattern (e.g., "landing-page-architect" from a great landing page session)
|
|
61
|
+
- Description capturing the repeatable method
|
|
62
|
+
- Include the actual working output as reference example
|
|
63
|
+
- Status: `pending-approval`
|
|
64
|
+
- Present to user: "You said [X] was excellent. Here's a skill draft to make it repeatable. Approve?"
|
|
65
|
+
|
|
66
|
+
## Phase 4: Git Versioning
|
|
67
|
+
|
|
68
|
+
Every skill mutation:
|
|
69
|
+
|
|
70
|
+
1. Backup current SKILL.md to `skill-history/<name>-<timestamp>.md`
|
|
71
|
+
2. Apply the improvement
|
|
72
|
+
3. Git commit with semantic message: `skill(<name>): <verb> — <reason>`
|
|
73
|
+
4. Append to CHANGELOG.md in skill directory
|
|
74
|
+
|
|
75
|
+
Verbs: `improve`, `fix-trigger`, `add-anti-pattern`, `merge-from(<source>)`, `create`, `add-golden-path`
|
|
76
|
+
|
|
77
|
+
## Phase 5: Update Skill Index
|
|
78
|
+
|
|
79
|
+
After processing, rebuild `memory/skill-index.json`:
|
|
80
|
+
|
|
81
|
+
```javascript
|
|
82
|
+
// Regenerate the cached index with updated skills
|
|
83
|
+
node -e "const { buildSkillIndex } = require('./.agents/skills/auto-skill/skill-router.js'); ..."
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
## Anti-Patterns
|
|
87
|
+
|
|
88
|
+
| Mistake | Why Wrong | Fix |
|
|
89
|
+
|---------|-----------|-----|
|
|
90
|
+
| Creating duplicate skill | 5 blog skills instead of 1 improved one | Always dedup check first |
|
|
91
|
+
| Auto-creating without approval | User loses trust, low quality | New skills need human approval |
|
|
92
|
+
| Skipping git commit | Can't revert bad improvements | Every mutation gets committed |
|
|
93
|
+
| Ignoring skill-router matches | Agent improvises instead of using skill | Auto-load at 0.8+ confidence |
|
|
94
|
+
| **Improvising instead of using skill** | "I can do this better manually" | **ALWAYS check skills first (1b Skill-First Protocol)** |
|
|
95
|
+
|
|
96
|
+
## Key Rules
|
|
97
|
+
|
|
98
|
+
- **Auto-USE at 0.8+ confidence** — Don't suggest, just load and execute the skill
|
|
99
|
+
- **Suggest at 0.6-0.8** — Present as option
|
|
100
|
+
- **2 repetitions** = suggest skill creation
|
|
101
|
+
- **Every correction = its own git commit**
|
|
102
|
+
- **New skills require human approval**
|
|
103
|
+
- **Always improve existing before creating new**
|
|
104
|
+
- **Excellence flag = extract pattern within same session** — don't let great work evaporate
|
|
105
|
+
|
|
106
|
+
## Integration Points
|
|
107
|
+
|
|
108
|
+
- **memory-system plugin** — Correction detection + skill routing hooks
|
|
109
|
+
- **correction-queue.js** — Queue management module
|
|
110
|
+
- **dedup.js** — Dedup + git versioning module
|
|
111
|
+
- **skill-router.js** — Fuzzy matching + auto-load module
|
|
112
|
+
|
|
113
|
+
## File Structure
|
|
114
|
+
|
|
115
|
+
```
|
|
116
|
+
.agents/skills/auto-skill/
|
|
117
|
+
├── SKILL.md ← this file
|
|
118
|
+
├── skill-router.js ← fuzzy matching + auto-load
|
|
119
|
+
├── correction-queue.js ← queue management
|
|
120
|
+
└── dedup.js ← dedup + git versioning
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
## Queue File Format
|
|
124
|
+
|
|
125
|
+
`memory/skill-queue.md` entries:
|
|
126
|
+
|
|
127
|
+
```markdown
|
|
128
|
+
## Correction — 2026-05-09T18:00:00Z
|
|
129
|
+
- **status:** pending
|
|
130
|
+
- **type:** correction
|
|
131
|
+
- **text:** Why aren't you using the hook generation skill for article titles?
|
|
132
|
+
- **context:** Blog publishing pipeline, Step 1
|
|
133
|
+
- **queued:** 2026-05-09T18:00:00Z
|
|
134
|
+
|
|
135
|
+
## Repetition — 2026-05-09T18:30:00Z
|
|
136
|
+
- **status:** pending-approval
|
|
137
|
+
- **type:** repetition
|
|
138
|
+
- **pattern:** Generating LinkedIn posts from blog content
|
|
139
|
+
- **count:** 2
|
|
140
|
+
- **context:** content-atomizer runs
|
|
141
|
+
- **queued:** 2026-05-09T18:30:00Z
|
|
142
|
+
|
|
143
|
+
## Excellence — 2026-06-15T14:00:00Z
|
|
144
|
+
- **status:** pending-approval
|
|
145
|
+
- **type:** excellence
|
|
146
|
+
- **text:** "This landing page is fucking good — make it repeatable"
|
|
147
|
+
- **pattern:** Landing page built section-by-section with 8-section architecture, psychology-aligned CTAs, verification gates
|
|
148
|
+
- **reference_output:** /tmp/landing-page-output.md
|
|
149
|
+
- **context:** landing-page-architect run
|
|
150
|
+
- **queued:** 2026-06-15T14:00:00Z
|
|
151
|
+
```
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import fs from 'node:fs';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
|
|
4
|
+
const QUEUE_FILE = 'memory/skill-queue.md';
|
|
5
|
+
const INDEX_FILE = 'memory/skill-index.json';
|
|
6
|
+
|
|
7
|
+
function ensureQueueFile(projectDir) {
|
|
8
|
+
const queuePath = path.join(projectDir, QUEUE_FILE);
|
|
9
|
+
if (!fs.existsSync(queuePath)) {
|
|
10
|
+
const header = `# Skill Queue
|
|
11
|
+
# Auto-managed by auto-skill system. Do not edit manually.
|
|
12
|
+
# Status values: pending, pending-approval, processing, done, rejected
|
|
13
|
+
|
|
14
|
+
`;
|
|
15
|
+
fs.mkdirSync(path.dirname(queuePath), { recursive: true });
|
|
16
|
+
fs.writeFileSync(queuePath, header, 'utf-8');
|
|
17
|
+
}
|
|
18
|
+
return queuePath;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export function queueCorrection(projectDir, correctionText, context = '') {
|
|
22
|
+
const queuePath = ensureQueueFile(projectDir);
|
|
23
|
+
const now = new Date().toISOString();
|
|
24
|
+
const entry = `
|
|
25
|
+
## Correction — ${now}
|
|
26
|
+
- **status:** pending
|
|
27
|
+
- **type:** correction
|
|
28
|
+
- **text:** ${correctionText.replace(/\n/g, ' ').slice(0, 500)}
|
|
29
|
+
- **context:** ${context.replace(/\n/g, ' ').slice(0, 300) || 'none'}
|
|
30
|
+
- **queued:** ${now}
|
|
31
|
+
|
|
32
|
+
`;
|
|
33
|
+
fs.appendFileSync(queuePath, entry, 'utf-8');
|
|
34
|
+
return true;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export function queueRepetition(projectDir, pattern, count, context = '') {
|
|
38
|
+
const queuePath = ensureQueueFile(projectDir);
|
|
39
|
+
const now = new Date().toISOString();
|
|
40
|
+
const entry = `
|
|
41
|
+
## Repetition — ${now}
|
|
42
|
+
- **status:** pending-approval
|
|
43
|
+
- **type:** repetition
|
|
44
|
+
- **pattern:** ${pattern.replace(/\n/g, ' ').slice(0, 500)}
|
|
45
|
+
- **count:** ${count}
|
|
46
|
+
- **context:** ${context.replace(/\n/g, ' ').slice(0, 300) || 'none'}
|
|
47
|
+
- **queued:** ${now}
|
|
48
|
+
|
|
49
|
+
`;
|
|
50
|
+
fs.appendFileSync(queuePath, entry, 'utf-8');
|
|
51
|
+
return true;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
export function readQueue(projectDir) {
|
|
55
|
+
const queuePath = path.join(projectDir, QUEUE_FILE);
|
|
56
|
+
if (!fs.existsSync(queuePath)) return [];
|
|
57
|
+
const content = fs.readFileSync(queuePath, 'utf-8');
|
|
58
|
+
const entries = [];
|
|
59
|
+
const sections = content.split(/^## /m).filter(Boolean);
|
|
60
|
+
for (const section of sections) {
|
|
61
|
+
if (section.startsWith('#') || section.startsWith('Skill Queue')) continue;
|
|
62
|
+
const lines = section.split('\n');
|
|
63
|
+
const header = lines[0];
|
|
64
|
+
const props = {};
|
|
65
|
+
for (const line of lines.slice(1)) {
|
|
66
|
+
const match = line.match(/^- \*\*(\w+):\*\*\s*(.+)/);
|
|
67
|
+
if (match) props[match[1]] = match[2].trim();
|
|
68
|
+
}
|
|
69
|
+
if (props.status && props.status !== 'done' && props.status !== 'rejected') {
|
|
70
|
+
entries.push({
|
|
71
|
+
header,
|
|
72
|
+
...props,
|
|
73
|
+
rawSection: section,
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
return entries;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
export function markQueueEntryDone(projectDir, header) {
|
|
81
|
+
const queuePath = path.join(projectDir, QUEUE_FILE);
|
|
82
|
+
if (!fs.existsSync(queuePath)) return false;
|
|
83
|
+
let content = fs.readFileSync(queuePath, 'utf-8');
|
|
84
|
+
const escapedHeader = header.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
85
|
+
const regex = new RegExp(`(- \\*\\*status:\\*\\*\\s*)(pending|pending-approval|processing)(\\n.*${escapedHeader.slice(0, 30)})`, 's');
|
|
86
|
+
content = content.replace(
|
|
87
|
+
new RegExp(`## ${escapedHeader.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}`, 'g'),
|
|
88
|
+
`## ${header}`
|
|
89
|
+
);
|
|
90
|
+
const entryRegex = new RegExp(
|
|
91
|
+
`## ${escapedHeader}[^#]*?- \\*\\*status:\\*\\*\\s*\\w+`,
|
|
92
|
+
's'
|
|
93
|
+
);
|
|
94
|
+
content = content.replace(
|
|
95
|
+
entryRegex,
|
|
96
|
+
(match) => match.replace(/- \*\*status:\*\*\s*\w+/, `- **status:** done`)
|
|
97
|
+
);
|
|
98
|
+
fs.writeFileSync(queuePath, content, 'utf-8');
|
|
99
|
+
return true;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
export { QUEUE_FILE, INDEX_FILE };
|