@heytherevibin/skillforge 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +16 -0
- package/CODE_OF_CONDUCT.md +34 -0
- package/CONTRIBUTING.md +38 -0
- package/LICENSE +21 -0
- package/README.md +337 -0
- package/RELEASING.md +93 -0
- package/SECURITY.md +31 -0
- package/STRATEGY.md +26 -0
- package/bin/cli.js +547 -0
- package/lib/packs.js +184 -0
- package/package.json +38 -0
- package/python/app/__init__.py +0 -0
- package/python/app/__pycache__/__init__.cpython-312.pyc +0 -0
- package/python/app/__pycache__/auth.cpython-312.pyc +0 -0
- package/python/app/__pycache__/main.cpython-312.pyc +0 -0
- package/python/app/auth.py +63 -0
- package/python/app/cli.py +78 -0
- package/python/app/db_paths.py +26 -0
- package/python/app/events_cli.py +175 -0
- package/python/app/main.py +647 -0
- package/python/app/materialize.py +138 -0
- package/python/app/mcp_server.py +610 -0
- package/python/app/route_cli.py +117 -0
- package/python/requirements-dev.txt +1 -0
- package/python/requirements.txt +7 -0
- package/python/tests/test_db_paths.py +41 -0
- package/skills/accessibility/SKILL.md +145 -0
- package/skills/agent-architecture-audit/SKILL.md +256 -0
- package/skills/agent-eval/SKILL.md +144 -0
- package/skills/agent-harness-construction/SKILL.md +72 -0
- package/skills/agent-introspection-debugging/SKILL.md +152 -0
- package/skills/agent-payment-x402/SKILL.md +224 -0
- package/skills/agent-sort/SKILL.md +214 -0
- package/skills/agentic-engineering/SKILL.md +62 -0
- package/skills/agentic-os/SKILL.md +386 -0
- package/skills/ai-first-engineering/SKILL.md +50 -0
- package/skills/ai-regression-testing/SKILL.md +384 -0
- package/skills/android-clean-architecture/SKILL.md +338 -0
- package/skills/angular-developer/SKILL.md +153 -0
- package/skills/angular-developer/references/angular-animations.md +160 -0
- package/skills/angular-developer/references/angular-aria.md +410 -0
- package/skills/angular-developer/references/cli.md +86 -0
- package/skills/angular-developer/references/component-harnesses.md +59 -0
- package/skills/angular-developer/references/component-styling.md +91 -0
- package/skills/angular-developer/references/components.md +117 -0
- package/skills/angular-developer/references/creating-services.md +97 -0
- package/skills/angular-developer/references/data-resolvers.md +69 -0
- package/skills/angular-developer/references/define-routes.md +67 -0
- package/skills/angular-developer/references/defining-providers.md +72 -0
- package/skills/angular-developer/references/di-fundamentals.md +120 -0
- package/skills/angular-developer/references/e2e-testing.md +56 -0
- package/skills/angular-developer/references/effects.md +83 -0
- package/skills/angular-developer/references/hierarchical-injectors.md +43 -0
- package/skills/angular-developer/references/host-elements.md +80 -0
- package/skills/angular-developer/references/injection-context.md +63 -0
- package/skills/angular-developer/references/inputs.md +101 -0
- package/skills/angular-developer/references/linked-signal.md +59 -0
- package/skills/angular-developer/references/loading-strategies.md +61 -0
- package/skills/angular-developer/references/mcp.md +108 -0
- package/skills/angular-developer/references/navigate-to-routes.md +69 -0
- package/skills/angular-developer/references/outputs.md +86 -0
- package/skills/angular-developer/references/reactive-forms.md +122 -0
- package/skills/angular-developer/references/rendering-strategies.md +44 -0
- package/skills/angular-developer/references/resource.md +77 -0
- package/skills/angular-developer/references/route-animations.md +56 -0
- package/skills/angular-developer/references/route-guards.md +52 -0
- package/skills/angular-developer/references/router-lifecycle.md +45 -0
- package/skills/angular-developer/references/router-testing.md +87 -0
- package/skills/angular-developer/references/show-routes-with-outlets.md +68 -0
- package/skills/angular-developer/references/signal-forms.md +795 -0
- package/skills/angular-developer/references/signals-overview.md +94 -0
- package/skills/angular-developer/references/tailwind-css.md +69 -0
- package/skills/angular-developer/references/template-driven-forms.md +114 -0
- package/skills/angular-developer/references/testing-fundamentals.md +65 -0
- package/skills/api-connector-builder/SKILL.md +120 -0
- package/skills/api-design/SKILL.md +522 -0
- package/skills/architecture-decision-records/SKILL.md +178 -0
- package/skills/article-writing/SKILL.md +78 -0
- package/skills/automation-audit-ops/SKILL.md +141 -0
- package/skills/autonomous-agent-harness/SKILL.md +272 -0
- package/skills/autonomous-loops/SKILL.md +609 -0
- package/skills/backend-patterns/SKILL.md +560 -0
- package/skills/benchmark/SKILL.md +92 -0
- package/skills/blueprint/SKILL.md +104 -0
- package/skills/browser-qa/SKILL.md +86 -0
- package/skills/bun-runtime/SKILL.md +83 -0
- package/skills/canary-watch/SKILL.md +98 -0
- package/skills/carrier-relationship-management/SKILL.md +211 -0
- package/skills/cisco-ios-patterns/SKILL.md +163 -0
- package/skills/ck/SKILL.md +147 -0
- package/skills/ck/commands/forget.mjs +44 -0
- package/skills/ck/commands/info.mjs +24 -0
- package/skills/ck/commands/init.mjs +143 -0
- package/skills/ck/commands/list.mjs +40 -0
- package/skills/ck/commands/migrate.mjs +202 -0
- package/skills/ck/commands/resume.mjs +36 -0
- package/skills/ck/commands/save.mjs +210 -0
- package/skills/ck/commands/shared.mjs +387 -0
- package/skills/ck/hooks/session-start.mjs +224 -0
- package/skills/claude-devfleet/SKILL.md +103 -0
- package/skills/click-path-audit/SKILL.md +244 -0
- package/skills/clickhouse-io/SKILL.md +438 -0
- package/skills/code-tour/SKILL.md +235 -0
- package/skills/codebase-onboarding/SKILL.md +232 -0
- package/skills/coding-standards/SKILL.md +548 -0
- package/skills/compose-multiplatform-patterns/SKILL.md +298 -0
- package/skills/connections-optimizer/SKILL.md +188 -0
- package/skills/content-engine/SKILL.md +126 -0
- package/skills/content-hash-cache-pattern/SKILL.md +160 -0
- package/skills/context-budget/SKILL.md +134 -0
- package/skills/continuous-agent-loop/SKILL.md +44 -0
- package/skills/continuous-learning/SKILL.md +129 -0
- package/skills/continuous-learning/config.json +18 -0
- package/skills/continuous-learning/evaluate-session.sh +69 -0
- package/skills/continuous-learning-v2/SKILL.md +358 -0
- package/skills/continuous-learning-v2/agents/observer-loop.sh +322 -0
- package/skills/continuous-learning-v2/agents/observer.md +198 -0
- package/skills/continuous-learning-v2/agents/session-guardian.sh +150 -0
- package/skills/continuous-learning-v2/agents/start-observer.sh +248 -0
- package/skills/continuous-learning-v2/config.json +8 -0
- package/skills/continuous-learning-v2/hooks/observe.sh +476 -0
- package/skills/continuous-learning-v2/scripts/detect-project.sh +288 -0
- package/skills/continuous-learning-v2/scripts/instinct-cli.py +1519 -0
- package/skills/continuous-learning-v2/scripts/lib/homunculus-dir.sh +31 -0
- package/skills/continuous-learning-v2/scripts/migrate-homunculus.sh +62 -0
- package/skills/continuous-learning-v2/scripts/test_parse_instinct.py +1018 -0
- package/skills/cost-aware-llm-pipeline/SKILL.md +182 -0
- package/skills/cost-tracking/SKILL.md +147 -0
- package/skills/council/SKILL.md +202 -0
- package/skills/cpp-coding-standards/SKILL.md +722 -0
- package/skills/cpp-testing/SKILL.md +323 -0
- package/skills/crosspost/SKILL.md +110 -0
- package/skills/csharp-testing/SKILL.md +320 -0
- package/skills/customer-billing-ops/SKILL.md +139 -0
- package/skills/customs-trade-compliance/SKILL.md +262 -0
- package/skills/dart-flutter-patterns/SKILL.md +562 -0
- package/skills/dashboard-builder/SKILL.md +108 -0
- package/skills/data-scraper-agent/SKILL.md +764 -0
- package/skills/database-migrations/SKILL.md +428 -0
- package/skills/deep-research/SKILL.md +158 -0
- package/skills/defi-amm-security/SKILL.md +166 -0
- package/skills/deployment-patterns/SKILL.md +426 -0
- package/skills/design-system/SKILL.md +81 -0
- package/skills/django-celery/SKILL.md +456 -0
- package/skills/django-patterns/SKILL.md +733 -0
- package/skills/django-security/SKILL.md +592 -0
- package/skills/django-tdd/SKILL.md +728 -0
- package/skills/django-verification/SKILL.md +468 -0
- package/skills/dmux-workflows/SKILL.md +190 -0
- package/skills/docker-patterns/SKILL.md +363 -0
- package/skills/documentation-lookup/SKILL.md +89 -0
- package/skills/dotnet-patterns/SKILL.md +320 -0
- package/skills/e2e-testing/SKILL.md +325 -0
- package/skills/email-ops/SKILL.md +120 -0
- package/skills/energy-procurement/SKILL.md +227 -0
- package/skills/enterprise-agent-ops/SKILL.md +49 -0
- package/skills/error-handling/SKILL.md +375 -0
- package/skills/eval-harness/SKILL.md +269 -0
- package/skills/evm-token-decimals/SKILL.md +130 -0
- package/skills/exa-search/SKILL.md +106 -0
- package/skills/fal-ai-media/SKILL.md +287 -0
- package/skills/fastapi-patterns/SKILL.md +327 -0
- package/skills/finance-billing-ops/SKILL.md +126 -0
- package/skills/flox-environments/SKILL.md +496 -0
- package/skills/flutter-dart-code-review/SKILL.md +434 -0
- package/skills/foundation-models-on-device/SKILL.md +243 -0
- package/skills/frontend-design-direction/SKILL.md +92 -0
- package/skills/frontend-patterns/SKILL.md +641 -0
- package/skills/frontend-slides/SKILL.md +183 -0
- package/skills/frontend-slides/STYLE_PRESETS.md +330 -0
- package/skills/frontend-slides/animation-patterns.md +122 -0
- package/skills/frontend-slides/html-template.md +419 -0
- package/skills/frontend-slides/scripts/export-pdf.sh +418 -0
- package/skills/frontend-slides/scripts/extract-pptx.py +96 -0
- package/skills/frontend-slides/viewport-base.css +153 -0
- package/skills/fsharp-testing/SKILL.md +279 -0
- package/skills/gan-style-harness/SKILL.md +278 -0
- package/skills/gateguard/SKILL.md +125 -0
- package/skills/git-workflow/SKILL.md +714 -0
- package/skills/github-ops/SKILL.md +143 -0
- package/skills/golang-patterns/SKILL.md +673 -0
- package/skills/golang-testing/SKILL.md +719 -0
- package/skills/google-workspace-ops/SKILL.md +94 -0
- package/skills/healthcare-cdss-patterns/SKILL.md +245 -0
- package/skills/healthcare-emr-patterns/SKILL.md +159 -0
- package/skills/healthcare-eval-harness/SKILL.md +207 -0
- package/skills/healthcare-phi-compliance/SKILL.md +145 -0
- package/skills/hermes-imports/SKILL.md +87 -0
- package/skills/hexagonal-architecture/SKILL.md +275 -0
- package/skills/hipaa-compliance/SKILL.md +78 -0
- package/skills/homelab-network-readiness/SKILL.md +169 -0
- package/skills/homelab-network-setup/SKILL.md +129 -0
- package/skills/homelab-pihole-dns/SKILL.md +274 -0
- package/skills/homelab-vlan-segmentation/SKILL.md +311 -0
- package/skills/homelab-wireguard-vpn/SKILL.md +305 -0
- package/skills/hookify-rules/SKILL.md +128 -0
- package/skills/inventory-demand-planning/SKILL.md +246 -0
- package/skills/investor-materials/SKILL.md +95 -0
- package/skills/investor-outreach/SKILL.md +90 -0
- package/skills/ios-icon-gen/SKILL.md +157 -0
- package/skills/ios-icon-gen/scripts/generate_icons.swift +258 -0
- package/skills/ios-icon-gen/scripts/iconify_gen.sh +235 -0
- package/skills/iterative-retrieval/SKILL.md +209 -0
- package/skills/java-coding-standards/SKILL.md +382 -0
- package/skills/jira-integration/SKILL.md +292 -0
- package/skills/jpa-patterns/SKILL.md +150 -0
- package/skills/knowledge-ops/SKILL.md +153 -0
- package/skills/kotlin-coroutines-flows/SKILL.md +283 -0
- package/skills/kotlin-exposed-patterns/SKILL.md +718 -0
- package/skills/kotlin-ktor-patterns/SKILL.md +688 -0
- package/skills/kotlin-patterns/SKILL.md +710 -0
- package/skills/kotlin-testing/SKILL.md +823 -0
- package/skills/laravel-patterns/SKILL.md +414 -0
- package/skills/laravel-plugin-discovery/SKILL.md +228 -0
- package/skills/laravel-security/SKILL.md +284 -0
- package/skills/laravel-tdd/SKILL.md +282 -0
- package/skills/laravel-verification/SKILL.md +178 -0
- package/skills/lead-intelligence/SKILL.md +320 -0
- package/skills/lead-intelligence/agents/enrichment-agent.md +85 -0
- package/skills/lead-intelligence/agents/mutual-mapper.md +75 -0
- package/skills/lead-intelligence/agents/outreach-drafter.md +98 -0
- package/skills/lead-intelligence/agents/signal-scorer.md +60 -0
- package/skills/liquid-glass-design/SKILL.md +279 -0
- package/skills/llm-trading-agent-security/SKILL.md +146 -0
- package/skills/logistics-exception-management/SKILL.md +221 -0
- package/skills/make-interfaces-feel-better/SKILL.md +151 -0
- package/skills/manim-video/SKILL.md +88 -0
- package/skills/manim-video/assets/network_graph_scene.py +52 -0
- package/skills/market-research/SKILL.md +74 -0
- package/skills/mcp-server-patterns/SKILL.md +68 -0
- package/skills/messages-ops/SKILL.md +103 -0
- package/skills/mle-workflow/SKILL.md +345 -0
- package/skills/motion-advanced/SKILL.md +596 -0
- package/skills/motion-foundations/SKILL.md +299 -0
- package/skills/motion-patterns/SKILL.md +435 -0
- package/skills/motion-ui/SKILL.md +574 -0
- package/skills/mysql-patterns/SKILL.md +411 -0
- package/skills/nanoclaw-repl/SKILL.md +32 -0
- package/skills/nestjs-patterns/SKILL.md +229 -0
- package/skills/netmiko-ssh-automation/SKILL.md +173 -0
- package/skills/network-bgp-diagnostics/SKILL.md +167 -0
- package/skills/network-config-validation/SKILL.md +210 -0
- package/skills/network-interface-health/SKILL.md +152 -0
- package/skills/nextjs-turbopack/SKILL.md +43 -0
- package/skills/nodejs-keccak256/SKILL.md +102 -0
- package/skills/nutrient-document-processing/SKILL.md +166 -0
- package/skills/nuxt4-patterns/SKILL.md +99 -0
- package/skills/openclaw-persona-forge/SKILL.md +288 -0
- package/skills/openclaw-persona-forge/gacha.py +224 -0
- package/skills/openclaw-persona-forge/gacha.sh +5 -0
- package/skills/openclaw-persona-forge/references/avatar-style.md +124 -0
- package/skills/openclaw-persona-forge/references/boundary-rules.md +53 -0
- package/skills/openclaw-persona-forge/references/error-handling.md +53 -0
- package/skills/openclaw-persona-forge/references/identity-tension.md +48 -0
- package/skills/openclaw-persona-forge/references/naming-system.md +39 -0
- package/skills/openclaw-persona-forge/references/output-template.md +166 -0
- package/skills/opensource-pipeline/SKILL.md +254 -0
- package/skills/perl-patterns/SKILL.md +503 -0
- package/skills/perl-security/SKILL.md +502 -0
- package/skills/perl-testing/SKILL.md +474 -0
- package/skills/plan-orchestrate/SKILL.md +253 -0
- package/skills/plankton-code-quality/SKILL.md +236 -0
- package/skills/postgres-patterns/SKILL.md +146 -0
- package/skills/product-capability/SKILL.md +140 -0
- package/skills/product-lens/SKILL.md +91 -0
- package/skills/production-audit/SKILL.md +206 -0
- package/skills/production-scheduling/SKILL.md +237 -0
- package/skills/project-flow-ops/SKILL.md +110 -0
- package/skills/prompt-optimizer/SKILL.md +398 -0
- package/skills/python-patterns/SKILL.md +749 -0
- package/skills/python-testing/SKILL.md +815 -0
- package/skills/pytorch-patterns/SKILL.md +395 -0
- package/skills/quality-nonconformance/SKILL.md +259 -0
- package/skills/quarkus-patterns/SKILL.md +721 -0
- package/skills/quarkus-security/SKILL.md +466 -0
- package/skills/quarkus-tdd/SKILL.md +810 -0
- package/skills/quarkus-verification/SKILL.md +478 -0
- package/skills/ralphinho-rfc-pipeline/SKILL.md +66 -0
- package/skills/redis-patterns/SKILL.md +402 -0
- package/skills/regex-vs-llm-structured-text/SKILL.md +219 -0
- package/skills/remotion-video-creation/SKILL.md +43 -0
- package/skills/remotion-video-creation/rules/3d.md +86 -0
- package/skills/remotion-video-creation/rules/animations.md +29 -0
- package/skills/remotion-video-creation/rules/assets/charts-bar-chart.tsx +173 -0
- package/skills/remotion-video-creation/rules/assets/text-animations-typewriter.tsx +100 -0
- package/skills/remotion-video-creation/rules/assets/text-animations-word-highlight.tsx +108 -0
- package/skills/remotion-video-creation/rules/assets.md +78 -0
- package/skills/remotion-video-creation/rules/audio.md +172 -0
- package/skills/remotion-video-creation/rules/calculate-metadata.md +104 -0
- package/skills/remotion-video-creation/rules/can-decode.md +75 -0
- package/skills/remotion-video-creation/rules/charts.md +58 -0
- package/skills/remotion-video-creation/rules/compositions.md +146 -0
- package/skills/remotion-video-creation/rules/display-captions.md +126 -0
- package/skills/remotion-video-creation/rules/extract-frames.md +229 -0
- package/skills/remotion-video-creation/rules/fonts.md +152 -0
- package/skills/remotion-video-creation/rules/get-audio-duration.md +58 -0
- package/skills/remotion-video-creation/rules/get-video-dimensions.md +68 -0
- package/skills/remotion-video-creation/rules/get-video-duration.md +58 -0
- package/skills/remotion-video-creation/rules/gifs.md +138 -0
- package/skills/remotion-video-creation/rules/images.md +130 -0
- package/skills/remotion-video-creation/rules/import-srt-captions.md +67 -0
- package/skills/remotion-video-creation/rules/lottie.md +67 -0
- package/skills/remotion-video-creation/rules/measuring-dom-nodes.md +34 -0
- package/skills/remotion-video-creation/rules/measuring-text.md +143 -0
- package/skills/remotion-video-creation/rules/sequencing.md +106 -0
- package/skills/remotion-video-creation/rules/tailwind.md +11 -0
- package/skills/remotion-video-creation/rules/text-animations.md +20 -0
- package/skills/remotion-video-creation/rules/timing.md +179 -0
- package/skills/remotion-video-creation/rules/transcribe-captions.md +19 -0
- package/skills/remotion-video-creation/rules/transitions.md +122 -0
- package/skills/remotion-video-creation/rules/trimming.md +52 -0
- package/skills/remotion-video-creation/rules/videos.md +171 -0
- package/skills/repo-scan/SKILL.md +78 -0
- package/skills/research-ops/SKILL.md +111 -0
- package/skills/returns-reverse-logistics/SKILL.md +239 -0
- package/skills/rules-distill/SKILL.md +263 -0
- package/skills/rules-distill/scripts/scan-rules.sh +58 -0
- package/skills/rules-distill/scripts/scan-skills.sh +129 -0
- package/skills/rust-patterns/SKILL.md +498 -0
- package/skills/rust-testing/SKILL.md +499 -0
- package/skills/safety-guard/SKILL.md +74 -0
- package/skills/santa-method/SKILL.md +306 -0
- package/skills/scientific-db-pubmed-database/SKILL.md +175 -0
- package/skills/scientific-db-uspto-database/SKILL.md +177 -0
- package/skills/scientific-pkg-gget/SKILL.md +166 -0
- package/skills/scientific-thinking-literature-review/SKILL.md +192 -0
- package/skills/scientific-thinking-scholar-evaluation/SKILL.md +160 -0
- package/skills/search-first/SKILL.md +181 -0
- package/skills/security-bounty-hunter/SKILL.md +99 -0
- package/skills/security-review/SKILL.md +502 -0
- package/skills/security-review/cloud-infrastructure-security.md +361 -0
- package/skills/seo/SKILL.md +153 -0
- package/skills/skill-comply/SKILL.md +57 -0
- package/skills/skill-comply/fixtures/compliant_trace.jsonl +5 -0
- package/skills/skill-comply/fixtures/noncompliant_trace.jsonl +3 -0
- package/skills/skill-comply/fixtures/tdd_spec.yaml +44 -0
- package/skills/skill-comply/prompts/classifier.md +24 -0
- package/skills/skill-comply/prompts/scenario_generator.md +62 -0
- package/skills/skill-comply/prompts/spec_generator.md +42 -0
- package/skills/skill-comply/pyproject.toml +15 -0
- package/skills/skill-comply/scripts/__init__.py +0 -0
- package/skills/skill-comply/scripts/classifier.py +85 -0
- package/skills/skill-comply/scripts/grader.py +124 -0
- package/skills/skill-comply/scripts/parser.py +107 -0
- package/skills/skill-comply/scripts/report.py +170 -0
- package/skills/skill-comply/scripts/run.py +127 -0
- package/skills/skill-comply/scripts/runner.py +186 -0
- package/skills/skill-comply/scripts/scenario_generator.py +70 -0
- package/skills/skill-comply/scripts/spec_generator.py +72 -0
- package/skills/skill-comply/scripts/utils.py +13 -0
- package/skills/skill-comply/tests/test_grader.py +197 -0
- package/skills/skill-comply/tests/test_parser.py +90 -0
- package/skills/skill-comply/tests/test_runner.py +172 -0
- package/skills/skill-scout/SKILL.md +139 -0
- package/skills/skill-stocktake/SKILL.md +193 -0
- package/skills/skill-stocktake/scripts/quick-diff.sh +87 -0
- package/skills/skill-stocktake/scripts/save-results.sh +56 -0
- package/skills/skill-stocktake/scripts/scan.sh +170 -0
- package/skills/social-graph-ranker/SKILL.md +153 -0
- package/skills/springboot-patterns/SKILL.md +313 -0
- package/skills/springboot-security/SKILL.md +271 -0
- package/skills/springboot-tdd/SKILL.md +157 -0
- package/skills/springboot-verification/SKILL.md +230 -0
- package/skills/strategic-compact/SKILL.md +129 -0
- package/skills/strategic-compact/suggest-compact.sh +54 -0
- package/skills/swift-actor-persistence/SKILL.md +142 -0
- package/skills/swift-concurrency-6-2/SKILL.md +216 -0
- package/skills/swift-protocol-di-testing/SKILL.md +189 -0
- package/skills/swiftui-patterns/SKILL.md +259 -0
- package/skills/tdd-workflow/SKILL.md +462 -0
- package/skills/team-builder/SKILL.md +166 -0
- package/skills/terminal-ops/SKILL.md +108 -0
- package/skills/tinystruct-patterns/SKILL.md +130 -0
- package/skills/tinystruct-patterns/references/architecture.md +77 -0
- package/skills/tinystruct-patterns/references/data-handling.md +35 -0
- package/skills/tinystruct-patterns/references/routing.md +57 -0
- package/skills/tinystruct-patterns/references/system-usage.md +74 -0
- package/skills/tinystruct-patterns/references/testing.md +59 -0
- package/skills/token-budget-advisor/SKILL.md +133 -0
- package/skills/ui-demo/SKILL.md +464 -0
- package/skills/ui-to-vue/SKILL.md +134 -0
- package/skills/unified-notifications-ops/SKILL.md +186 -0
- package/skills/verification-loop/SKILL.md +125 -0
- package/skills/video-editing/SKILL.md +309 -0
- package/skills/videodb/SKILL.md +373 -0
- package/skills/videodb/reference/api-reference.md +550 -0
- package/skills/videodb/reference/capture-reference.md +407 -0
- package/skills/videodb/reference/capture.md +101 -0
- package/skills/videodb/reference/editor.md +443 -0
- package/skills/videodb/reference/generative.md +331 -0
- package/skills/videodb/reference/rtstream-reference.md +564 -0
- package/skills/videodb/reference/rtstream.md +65 -0
- package/skills/videodb/reference/search.md +230 -0
- package/skills/videodb/reference/streaming.md +406 -0
- package/skills/videodb/reference/use-cases.md +118 -0
- package/skills/videodb/scripts/ws_listener.py +282 -0
- package/skills/visa-doc-translate/README.md +86 -0
- package/skills/visa-doc-translate/SKILL.md +117 -0
- package/skills/vite-patterns/SKILL.md +448 -0
- package/skills/windows-desktop-e2e/SKILL.md +787 -0
- package/skills/workspace-surface-audit/SKILL.md +124 -0
- package/skills/x-api/SKILL.md +233 -0
|
@@ -0,0 +1,298 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: compose-multiplatform-patterns
|
|
3
|
+
description: Compose Multiplatform and Jetpack Compose patterns for KMP projects — state management, navigation, theming, performance, and platform-specific UI.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Compose Multiplatform Patterns
|
|
7
|
+
|
|
8
|
+
Patterns for building shared UI across Android, iOS, Desktop, and Web using Compose Multiplatform and Jetpack Compose. Covers state management, navigation, theming, and performance.
|
|
9
|
+
|
|
10
|
+
## When to Activate
|
|
11
|
+
|
|
12
|
+
- Building Compose UI (Jetpack Compose or Compose Multiplatform)
|
|
13
|
+
- Managing UI state with ViewModels and Compose state
|
|
14
|
+
- Implementing navigation in KMP or Android projects
|
|
15
|
+
- Designing reusable composables and design systems
|
|
16
|
+
- Optimizing recomposition and rendering performance
|
|
17
|
+
|
|
18
|
+
## State Management
|
|
19
|
+
|
|
20
|
+
### ViewModel + Single State Object
|
|
21
|
+
|
|
22
|
+
Use a single data class for screen state. Expose it as `StateFlow` and collect in Compose:
|
|
23
|
+
|
|
24
|
+
```kotlin
|
|
25
|
+
data class ItemListState(
|
|
26
|
+
val items: List<Item> = emptyList(),
|
|
27
|
+
val isLoading: Boolean = false,
|
|
28
|
+
val error: String? = null,
|
|
29
|
+
val searchQuery: String = ""
|
|
30
|
+
)
|
|
31
|
+
|
|
32
|
+
class ItemListViewModel(
|
|
33
|
+
private val getItems: GetItemsUseCase
|
|
34
|
+
) : ViewModel() {
|
|
35
|
+
private val _state = MutableStateFlow(ItemListState())
|
|
36
|
+
val state: StateFlow<ItemListState> = _state.asStateFlow()
|
|
37
|
+
|
|
38
|
+
fun onSearch(query: String) {
|
|
39
|
+
_state.update { it.copy(searchQuery = query) }
|
|
40
|
+
loadItems(query)
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
private fun loadItems(query: String) {
|
|
44
|
+
viewModelScope.launch {
|
|
45
|
+
_state.update { it.copy(isLoading = true) }
|
|
46
|
+
getItems(query).fold(
|
|
47
|
+
onSuccess = { items -> _state.update { it.copy(items = items, isLoading = false) } },
|
|
48
|
+
onFailure = { e -> _state.update { it.copy(error = e.message, isLoading = false) } }
|
|
49
|
+
)
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
### Collecting State in Compose
|
|
56
|
+
|
|
57
|
+
```kotlin
|
|
58
|
+
@Composable
|
|
59
|
+
fun ItemListScreen(viewModel: ItemListViewModel = koinViewModel()) {
|
|
60
|
+
val state by viewModel.state.collectAsStateWithLifecycle()
|
|
61
|
+
|
|
62
|
+
ItemListContent(
|
|
63
|
+
state = state,
|
|
64
|
+
onSearch = viewModel::onSearch
|
|
65
|
+
)
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
@Composable
|
|
69
|
+
private fun ItemListContent(
|
|
70
|
+
state: ItemListState,
|
|
71
|
+
onSearch: (String) -> Unit
|
|
72
|
+
) {
|
|
73
|
+
// Stateless composable — easy to preview and test
|
|
74
|
+
}
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
### Event Sink Pattern
|
|
78
|
+
|
|
79
|
+
For complex screens, use a sealed interface for events instead of multiple callback lambdas:
|
|
80
|
+
|
|
81
|
+
```kotlin
|
|
82
|
+
sealed interface ItemListEvent {
|
|
83
|
+
data class Search(val query: String) : ItemListEvent
|
|
84
|
+
data class Delete(val itemId: String) : ItemListEvent
|
|
85
|
+
data object Refresh : ItemListEvent
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
// In ViewModel
|
|
89
|
+
fun onEvent(event: ItemListEvent) {
|
|
90
|
+
when (event) {
|
|
91
|
+
is ItemListEvent.Search -> onSearch(event.query)
|
|
92
|
+
is ItemListEvent.Delete -> deleteItem(event.itemId)
|
|
93
|
+
is ItemListEvent.Refresh -> loadItems(_state.value.searchQuery)
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
// In Composable — single lambda instead of many
|
|
98
|
+
ItemListContent(
|
|
99
|
+
state = state,
|
|
100
|
+
onEvent = viewModel::onEvent
|
|
101
|
+
)
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
## Navigation
|
|
105
|
+
|
|
106
|
+
### Type-Safe Navigation (Compose Navigation 2.8+)
|
|
107
|
+
|
|
108
|
+
Define routes as `@Serializable` objects:
|
|
109
|
+
|
|
110
|
+
```kotlin
|
|
111
|
+
@Serializable data object HomeRoute
|
|
112
|
+
@Serializable data class DetailRoute(val id: String)
|
|
113
|
+
@Serializable data object SettingsRoute
|
|
114
|
+
|
|
115
|
+
@Composable
|
|
116
|
+
fun AppNavHost(navController: NavHostController = rememberNavController()) {
|
|
117
|
+
NavHost(navController, startDestination = HomeRoute) {
|
|
118
|
+
composable<HomeRoute> {
|
|
119
|
+
HomeScreen(onNavigateToDetail = { id -> navController.navigate(DetailRoute(id)) })
|
|
120
|
+
}
|
|
121
|
+
composable<DetailRoute> { backStackEntry ->
|
|
122
|
+
val route = backStackEntry.toRoute<DetailRoute>()
|
|
123
|
+
DetailScreen(id = route.id)
|
|
124
|
+
}
|
|
125
|
+
composable<SettingsRoute> { SettingsScreen() }
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
### Dialog and Bottom Sheet Navigation
|
|
131
|
+
|
|
132
|
+
Use `dialog()` and overlay patterns instead of imperative show/hide:
|
|
133
|
+
|
|
134
|
+
```kotlin
|
|
135
|
+
NavHost(navController, startDestination = HomeRoute) {
|
|
136
|
+
composable<HomeRoute> { /* ... */ }
|
|
137
|
+
dialog<ConfirmDeleteRoute> { backStackEntry ->
|
|
138
|
+
val route = backStackEntry.toRoute<ConfirmDeleteRoute>()
|
|
139
|
+
ConfirmDeleteDialog(
|
|
140
|
+
itemId = route.itemId,
|
|
141
|
+
onConfirm = { navController.popBackStack() },
|
|
142
|
+
onDismiss = { navController.popBackStack() }
|
|
143
|
+
)
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
## Composable Design
|
|
149
|
+
|
|
150
|
+
### Slot-Based APIs
|
|
151
|
+
|
|
152
|
+
Design composables with slot parameters for flexibility:
|
|
153
|
+
|
|
154
|
+
```kotlin
|
|
155
|
+
@Composable
|
|
156
|
+
fun AppCard(
|
|
157
|
+
modifier: Modifier = Modifier,
|
|
158
|
+
header: @Composable () -> Unit = {},
|
|
159
|
+
content: @Composable ColumnScope.() -> Unit,
|
|
160
|
+
actions: @Composable RowScope.() -> Unit = {}
|
|
161
|
+
) {
|
|
162
|
+
Card(modifier = modifier) {
|
|
163
|
+
Column {
|
|
164
|
+
header()
|
|
165
|
+
Column(content = content)
|
|
166
|
+
Row(horizontalArrangement = Arrangement.End, content = actions)
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
### Modifier Ordering
|
|
173
|
+
|
|
174
|
+
Modifier order matters — apply in this sequence:
|
|
175
|
+
|
|
176
|
+
```kotlin
|
|
177
|
+
Text(
|
|
178
|
+
text = "Hello",
|
|
179
|
+
modifier = Modifier
|
|
180
|
+
.padding(16.dp) // 1. Layout (padding, size)
|
|
181
|
+
.clip(RoundedCornerShape(8.dp)) // 2. Shape
|
|
182
|
+
.background(Color.White) // 3. Drawing (background, border)
|
|
183
|
+
.clickable { } // 4. Interaction
|
|
184
|
+
)
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
## KMP Platform-Specific UI
|
|
188
|
+
|
|
189
|
+
### expect/actual for Platform Composables
|
|
190
|
+
|
|
191
|
+
```kotlin
|
|
192
|
+
// commonMain
|
|
193
|
+
@Composable
|
|
194
|
+
expect fun PlatformStatusBar(darkIcons: Boolean)
|
|
195
|
+
|
|
196
|
+
// androidMain
|
|
197
|
+
@Composable
|
|
198
|
+
actual fun PlatformStatusBar(darkIcons: Boolean) {
|
|
199
|
+
val systemUiController = rememberSystemUiController()
|
|
200
|
+
SideEffect { systemUiController.setStatusBarColor(Color.Transparent, darkIcons) }
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
// iosMain
|
|
204
|
+
@Composable
|
|
205
|
+
actual fun PlatformStatusBar(darkIcons: Boolean) {
|
|
206
|
+
// iOS handles this via UIKit interop or Info.plist
|
|
207
|
+
}
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
## Performance
|
|
211
|
+
|
|
212
|
+
### Stable Types for Skippable Recomposition
|
|
213
|
+
|
|
214
|
+
Mark classes as `@Stable` or `@Immutable` when all properties are stable:
|
|
215
|
+
|
|
216
|
+
```kotlin
|
|
217
|
+
@Immutable
|
|
218
|
+
data class ItemUiModel(
|
|
219
|
+
val id: String,
|
|
220
|
+
val title: String,
|
|
221
|
+
val description: String,
|
|
222
|
+
val progress: Float
|
|
223
|
+
)
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
### Use `key()` and Lazy Lists Correctly
|
|
227
|
+
|
|
228
|
+
```kotlin
|
|
229
|
+
LazyColumn {
|
|
230
|
+
items(
|
|
231
|
+
items = items,
|
|
232
|
+
key = { it.id } // Stable keys enable item reuse and animations
|
|
233
|
+
) { item ->
|
|
234
|
+
ItemRow(item = item)
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
### Defer Reads with `derivedStateOf`
|
|
240
|
+
|
|
241
|
+
```kotlin
|
|
242
|
+
val listState = rememberLazyListState()
|
|
243
|
+
val showScrollToTop by remember {
|
|
244
|
+
derivedStateOf { listState.firstVisibleItemIndex > 5 }
|
|
245
|
+
}
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
### Avoid Allocations in Recomposition
|
|
249
|
+
|
|
250
|
+
```kotlin
|
|
251
|
+
// BAD — new lambda and list every recomposition
|
|
252
|
+
items.filter { it.isActive }.forEach { ActiveItem(it, onClick = { handle(it) }) }
|
|
253
|
+
|
|
254
|
+
// GOOD — key each item so callbacks stay attached to the right row
|
|
255
|
+
val activeItems = remember(items) { items.filter { it.isActive } }
|
|
256
|
+
activeItems.forEach { item ->
|
|
257
|
+
key(item.id) {
|
|
258
|
+
ActiveItem(item, onClick = { handle(item) })
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
```
|
|
262
|
+
|
|
263
|
+
## Theming
|
|
264
|
+
|
|
265
|
+
### Material 3 Dynamic Theming
|
|
266
|
+
|
|
267
|
+
```kotlin
|
|
268
|
+
@Composable
|
|
269
|
+
fun AppTheme(
|
|
270
|
+
darkTheme: Boolean = isSystemInDarkTheme(),
|
|
271
|
+
dynamicColor: Boolean = true,
|
|
272
|
+
content: @Composable () -> Unit
|
|
273
|
+
) {
|
|
274
|
+
val colorScheme = when {
|
|
275
|
+
dynamicColor && Build.VERSION.SDK_INT >= Build.VERSION_CODES.S -> {
|
|
276
|
+
if (darkTheme) dynamicDarkColorScheme(LocalContext.current)
|
|
277
|
+
else dynamicLightColorScheme(LocalContext.current)
|
|
278
|
+
}
|
|
279
|
+
darkTheme -> darkColorScheme()
|
|
280
|
+
else -> lightColorScheme()
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
MaterialTheme(colorScheme = colorScheme, content = content)
|
|
284
|
+
}
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
## Anti-Patterns to Avoid
|
|
288
|
+
|
|
289
|
+
- Using `mutableStateOf` in ViewModels when `MutableStateFlow` with `collectAsStateWithLifecycle` is safer for lifecycle
|
|
290
|
+
- Passing `NavController` deep into composables — pass lambda callbacks instead
|
|
291
|
+
- Heavy computation inside `@Composable` functions — move to ViewModel or `remember {}`
|
|
292
|
+
- Using `LaunchedEffect(Unit)` as a substitute for ViewModel init — it re-runs on configuration change in some setups
|
|
293
|
+
- Creating new object instances in composable parameters — causes unnecessary recomposition
|
|
294
|
+
|
|
295
|
+
## References
|
|
296
|
+
|
|
297
|
+
See skill: `android-clean-architecture` for module structure and layering.
|
|
298
|
+
See skill: `kotlin-coroutines-flows` for coroutine and Flow patterns.
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: connections-optimizer
|
|
3
|
+
description: Reorganize the user's X and LinkedIn network with review-first pruning, add/follow recommendations, and channel-specific warm outreach drafted in the user's real voice. Use when the user wants to clean up following lists, grow toward current priorities, or rebalance a social graph around higher-signal relationships.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Connections Optimizer
|
|
7
|
+
|
|
8
|
+
Reorganize the user's network instead of treating outbound as a one-way prospecting list.
|
|
9
|
+
|
|
10
|
+
This skill handles:
|
|
11
|
+
|
|
12
|
+
- X following cleanup and expansion
|
|
13
|
+
- LinkedIn follow and connection analysis
|
|
14
|
+
- review-first prune queues
|
|
15
|
+
- add and follow recommendations
|
|
16
|
+
- warm-path identification
|
|
17
|
+
- Apple Mail, X DM, and LinkedIn draft generation in the user's real voice
|
|
18
|
+
|
|
19
|
+
## When to Activate
|
|
20
|
+
|
|
21
|
+
- the user wants to prune their X following
|
|
22
|
+
- the user wants to rebalance who they follow or stay connected to
|
|
23
|
+
- the user says "clean up my network", "who should I unfollow", "who should I follow", "who should I reconnect with"
|
|
24
|
+
- outreach quality depends on network structure, not just cold list generation
|
|
25
|
+
|
|
26
|
+
## Required Inputs
|
|
27
|
+
|
|
28
|
+
Collect or infer:
|
|
29
|
+
|
|
30
|
+
- current priorities and active work
|
|
31
|
+
- target roles, industries, geos, or ecosystems
|
|
32
|
+
- platform selection: X, LinkedIn, or both
|
|
33
|
+
- do-not-touch list
|
|
34
|
+
- mode: `light-pass`, `default`, or `aggressive`
|
|
35
|
+
|
|
36
|
+
If the user does not specify a mode, use `default`.
|
|
37
|
+
|
|
38
|
+
## Tool Requirements
|
|
39
|
+
|
|
40
|
+
### Preferred
|
|
41
|
+
|
|
42
|
+
- `x-api` for X graph inspection and recent activity
|
|
43
|
+
- `lead-intelligence` for target discovery and warm-path ranking
|
|
44
|
+
- `social-graph-ranker` when the user wants bridge value scored independently of the broader lead workflow
|
|
45
|
+
- Exa / deep research for person and company enrichment
|
|
46
|
+
- `brand-voice` before drafting outbound
|
|
47
|
+
|
|
48
|
+
### Fallbacks
|
|
49
|
+
|
|
50
|
+
- browser control for LinkedIn analysis and drafting
|
|
51
|
+
- browser control for X if API coverage is constrained
|
|
52
|
+
- Apple Mail or Mail.app drafting via desktop automation when email is the right channel
|
|
53
|
+
|
|
54
|
+
## Safety Defaults
|
|
55
|
+
|
|
56
|
+
- default is review-first, never blind auto-pruning
|
|
57
|
+
- X: prune only accounts the user follows, never followers
|
|
58
|
+
- LinkedIn: treat 1st-degree connection removal as manual-review-first
|
|
59
|
+
- do not auto-send DMs, invites, or emails
|
|
60
|
+
- emit a ranked action plan and drafts before any apply step
|
|
61
|
+
|
|
62
|
+
## Platform Rules
|
|
63
|
+
|
|
64
|
+
### X
|
|
65
|
+
|
|
66
|
+
- mutuals are stickier than one-way follows
|
|
67
|
+
- non-follow-backs can be pruned more aggressively
|
|
68
|
+
- heavily inactive or disappeared accounts should surface quickly
|
|
69
|
+
- engagement, signal quality, and bridge value matter more than raw follower count
|
|
70
|
+
|
|
71
|
+
### LinkedIn
|
|
72
|
+
|
|
73
|
+
- API-first if the user actually has LinkedIn API access
|
|
74
|
+
- browser workflow must work when API access is missing
|
|
75
|
+
- distinguish outbound follows from accepted 1st-degree connections
|
|
76
|
+
- outbound follows can be pruned more freely
|
|
77
|
+
- accepted 1st-degree connections should default to review, not auto-remove
|
|
78
|
+
|
|
79
|
+
## Modes
|
|
80
|
+
|
|
81
|
+
### `light-pass`
|
|
82
|
+
|
|
83
|
+
- prune only high-confidence low-value one-way follows
|
|
84
|
+
- surface the rest for review
|
|
85
|
+
- generate a small add/follow list
|
|
86
|
+
|
|
87
|
+
### `default`
|
|
88
|
+
|
|
89
|
+
- balanced prune queue
|
|
90
|
+
- balanced keep list
|
|
91
|
+
- ranked add/follow queue
|
|
92
|
+
- draft warm intros or direct outreach where useful
|
|
93
|
+
|
|
94
|
+
### `aggressive`
|
|
95
|
+
|
|
96
|
+
- larger prune queue
|
|
97
|
+
- lower tolerance for stale non-follow-backs
|
|
98
|
+
- still review-gated before apply
|
|
99
|
+
|
|
100
|
+
## Scoring Model
|
|
101
|
+
|
|
102
|
+
Use these positive signals:
|
|
103
|
+
|
|
104
|
+
- reciprocity
|
|
105
|
+
- recent activity
|
|
106
|
+
- alignment to current priorities
|
|
107
|
+
- network bridge value
|
|
108
|
+
- role relevance
|
|
109
|
+
- real engagement history
|
|
110
|
+
- recent presence and responsiveness
|
|
111
|
+
|
|
112
|
+
Use these negative signals:
|
|
113
|
+
|
|
114
|
+
- disappeared or abandoned account
|
|
115
|
+
- stale one-way follow
|
|
116
|
+
- off-priority topic cluster
|
|
117
|
+
- low-value noise
|
|
118
|
+
- repeated non-response
|
|
119
|
+
- no follow-back when many better replacements exist
|
|
120
|
+
|
|
121
|
+
Mutuals and real warm-path bridges should be penalized less aggressively than one-way follows.
|
|
122
|
+
|
|
123
|
+
## Workflow
|
|
124
|
+
|
|
125
|
+
1. Capture priorities, do-not-touch constraints, and selected platforms.
|
|
126
|
+
2. Pull the current following / connection inventory.
|
|
127
|
+
3. Score prune candidates with explicit reasons.
|
|
128
|
+
4. Score keep candidates with explicit reasons.
|
|
129
|
+
5. Use `lead-intelligence` plus research surfaces to rank expansion candidates.
|
|
130
|
+
6. Match the right channel:
|
|
131
|
+
- X DM for warm, fast social touch points
|
|
132
|
+
- LinkedIn message for professional graph adjacency
|
|
133
|
+
- Apple Mail draft for higher-context intros or outreach
|
|
134
|
+
7. Run `brand-voice` before drafting messages.
|
|
135
|
+
8. Return a review pack before any apply step.
|
|
136
|
+
|
|
137
|
+
## Review Pack Format
|
|
138
|
+
|
|
139
|
+
```text
|
|
140
|
+
CONNECTIONS OPTIMIZER REPORT
|
|
141
|
+
============================
|
|
142
|
+
|
|
143
|
+
Mode:
|
|
144
|
+
Platforms:
|
|
145
|
+
Priority Set:
|
|
146
|
+
|
|
147
|
+
Prune Queue
|
|
148
|
+
- handle / profile
|
|
149
|
+
reason:
|
|
150
|
+
confidence:
|
|
151
|
+
action:
|
|
152
|
+
|
|
153
|
+
Review Queue
|
|
154
|
+
- handle / profile
|
|
155
|
+
reason:
|
|
156
|
+
risk:
|
|
157
|
+
|
|
158
|
+
Keep / Protect
|
|
159
|
+
- handle / profile
|
|
160
|
+
bridge value:
|
|
161
|
+
|
|
162
|
+
Add / Follow Targets
|
|
163
|
+
- person
|
|
164
|
+
why now:
|
|
165
|
+
warm path:
|
|
166
|
+
preferred channel:
|
|
167
|
+
|
|
168
|
+
Drafts
|
|
169
|
+
- X DM:
|
|
170
|
+
- LinkedIn:
|
|
171
|
+
- Apple Mail:
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
## Outbound Rules
|
|
175
|
+
|
|
176
|
+
- Default email path is Apple Mail / Mail.app draft creation.
|
|
177
|
+
- Do not send automatically.
|
|
178
|
+
- Choose the channel based on warmth, relevance, and context depth.
|
|
179
|
+
- Do not force a DM when an email or no outreach is the right move.
|
|
180
|
+
- Drafts should sound like the user, not like automated sales copy.
|
|
181
|
+
|
|
182
|
+
## Related Skills
|
|
183
|
+
|
|
184
|
+
- `brand-voice` for the reusable voice profile
|
|
185
|
+
- `social-graph-ranker` for the standalone bridge-scoring and warm-path math
|
|
186
|
+
- `lead-intelligence` for weighted target and warm-path discovery
|
|
187
|
+
- `x-api` for X graph access, drafting, and optional apply flows
|
|
188
|
+
- `content-engine` when the user also wants public launch content around network moves
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: content-engine
|
|
3
|
+
description: Create platform-native content systems for X, LinkedIn, TikTok, YouTube, newsletters, and repurposed multi-platform campaigns. Use when the user wants social posts, threads, scripts, content calendars, or one source asset adapted cleanly across platforms.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Content Engine
|
|
7
|
+
|
|
8
|
+
Build platform-native content without flattening the author's real voice into platform slop.
|
|
9
|
+
|
|
10
|
+
## When to Activate
|
|
11
|
+
|
|
12
|
+
- writing X posts or threads
|
|
13
|
+
- drafting LinkedIn posts or launch updates
|
|
14
|
+
- scripting short-form video or YouTube explainers
|
|
15
|
+
- repurposing articles, podcasts, demos, docs, or internal notes into public content
|
|
16
|
+
- building a launch sequence or ongoing content system around a product, insight, or narrative
|
|
17
|
+
|
|
18
|
+
## Non-Negotiables
|
|
19
|
+
|
|
20
|
+
1. Start from source material, not generic post formulas.
|
|
21
|
+
2. Adapt the format for the platform, not the persona.
|
|
22
|
+
3. One post should carry one actual claim.
|
|
23
|
+
4. Specificity beats adjectives.
|
|
24
|
+
5. No engagement bait unless the user explicitly asks for it.
|
|
25
|
+
|
|
26
|
+
## Source-First Workflow
|
|
27
|
+
|
|
28
|
+
Before drafting, identify the source set:
|
|
29
|
+
- published articles
|
|
30
|
+
- notes or internal memos
|
|
31
|
+
- product demos
|
|
32
|
+
- docs or changelogs
|
|
33
|
+
- transcripts
|
|
34
|
+
- screenshots
|
|
35
|
+
- prior posts from the same author
|
|
36
|
+
|
|
37
|
+
If the user wants a specific voice, build a voice profile from real examples before writing.
|
|
38
|
+
|
|
39
|
+
## Voice Handling
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
Run it first when:
|
|
43
|
+
|
|
44
|
+
- there are multiple downstream outputs
|
|
45
|
+
- the user explicitly cares about writing style
|
|
46
|
+
- the content is launch, outreach, or reputation-sensitive
|
|
47
|
+
|
|
48
|
+
Reuse the resulting `VOICE PROFILE` here instead of rebuilding a second voice model.
|
|
49
|
+
|
|
50
|
+
## Hard Bans
|
|
51
|
+
|
|
52
|
+
Delete and rewrite any of these:
|
|
53
|
+
- "In today's rapidly evolving landscape"
|
|
54
|
+
- "game-changer", "revolutionary", "cutting-edge"
|
|
55
|
+
- "here's why this matters" unless it is followed immediately by something concrete
|
|
56
|
+
- ending with a LinkedIn-style question just to farm replies
|
|
57
|
+
- forced casualness on LinkedIn
|
|
58
|
+
- fake engagement padding that was not present in the source material
|
|
59
|
+
|
|
60
|
+
## Platform Adaptation Rules
|
|
61
|
+
|
|
62
|
+
### X
|
|
63
|
+
|
|
64
|
+
- open with the strongest claim, artifact, or tension
|
|
65
|
+
- keep the compression if the source voice is compressed
|
|
66
|
+
- if writing a thread, each post must advance the argument
|
|
67
|
+
- do not pad with context the audience does not need
|
|
68
|
+
|
|
69
|
+
### LinkedIn
|
|
70
|
+
|
|
71
|
+
- expand only enough for people outside the immediate niche to follow
|
|
72
|
+
- do not turn it into a fake lesson post unless the source material actually is reflective
|
|
73
|
+
- no corporate inspiration cadence
|
|
74
|
+
- no praise-stacking, no "journey" filler
|
|
75
|
+
|
|
76
|
+
### Short Video
|
|
77
|
+
|
|
78
|
+
- script around the visual sequence and proof points
|
|
79
|
+
- first seconds should show the result, problem, or punch
|
|
80
|
+
- do not write narration that sounds better on paper than on screen
|
|
81
|
+
|
|
82
|
+
### YouTube
|
|
83
|
+
|
|
84
|
+
- show the result or tension early
|
|
85
|
+
- organize by argument or progression, not filler sections
|
|
86
|
+
- use chaptering only when it helps clarity
|
|
87
|
+
|
|
88
|
+
### Newsletter
|
|
89
|
+
|
|
90
|
+
- open with the point, conflict, or artifact
|
|
91
|
+
- do not spend the first paragraph warming up
|
|
92
|
+
- every section needs to add something new
|
|
93
|
+
|
|
94
|
+
## Repurposing Flow
|
|
95
|
+
|
|
96
|
+
1. Pick the anchor asset.
|
|
97
|
+
2. Extract 3 to 7 atomic claims or scenes.
|
|
98
|
+
3. Rank them by sharpness, novelty, and proof.
|
|
99
|
+
4. Assign one strong idea per output.
|
|
100
|
+
5. Adapt structure for each platform.
|
|
101
|
+
6. Strip platform-shaped filler.
|
|
102
|
+
7. Run the quality gate.
|
|
103
|
+
|
|
104
|
+
## Deliverables
|
|
105
|
+
|
|
106
|
+
When asked for a campaign, return:
|
|
107
|
+
- a short voice profile if voice matching matters
|
|
108
|
+
- the core angle
|
|
109
|
+
- platform-native drafts
|
|
110
|
+
- posting order only if it helps execution
|
|
111
|
+
- gaps that must be filled before publishing
|
|
112
|
+
|
|
113
|
+
## Quality Gate
|
|
114
|
+
|
|
115
|
+
Before delivering:
|
|
116
|
+
- every draft sounds like the intended author, not the platform stereotype
|
|
117
|
+
- every draft contains a real claim, proof point, or concrete observation
|
|
118
|
+
- no generic hype language remains
|
|
119
|
+
- no fake engagement bait remains
|
|
120
|
+
- no duplicated copy across platforms unless requested
|
|
121
|
+
- any CTA is earned and user-approved
|
|
122
|
+
|
|
123
|
+
## Related Skills
|
|
124
|
+
|
|
125
|
+
- `crosspost` for platform-specific distribution
|
|
126
|
+
- `x-api` for sourcing recent posts and publishing approved X output
|