@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.
Files changed (402) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/CODE_OF_CONDUCT.md +34 -0
  3. package/CONTRIBUTING.md +38 -0
  4. package/LICENSE +21 -0
  5. package/README.md +337 -0
  6. package/RELEASING.md +93 -0
  7. package/SECURITY.md +31 -0
  8. package/STRATEGY.md +26 -0
  9. package/bin/cli.js +547 -0
  10. package/lib/packs.js +184 -0
  11. package/package.json +38 -0
  12. package/python/app/__init__.py +0 -0
  13. package/python/app/__pycache__/__init__.cpython-312.pyc +0 -0
  14. package/python/app/__pycache__/auth.cpython-312.pyc +0 -0
  15. package/python/app/__pycache__/main.cpython-312.pyc +0 -0
  16. package/python/app/auth.py +63 -0
  17. package/python/app/cli.py +78 -0
  18. package/python/app/db_paths.py +26 -0
  19. package/python/app/events_cli.py +175 -0
  20. package/python/app/main.py +647 -0
  21. package/python/app/materialize.py +138 -0
  22. package/python/app/mcp_server.py +610 -0
  23. package/python/app/route_cli.py +117 -0
  24. package/python/requirements-dev.txt +1 -0
  25. package/python/requirements.txt +7 -0
  26. package/python/tests/test_db_paths.py +41 -0
  27. package/skills/accessibility/SKILL.md +145 -0
  28. package/skills/agent-architecture-audit/SKILL.md +256 -0
  29. package/skills/agent-eval/SKILL.md +144 -0
  30. package/skills/agent-harness-construction/SKILL.md +72 -0
  31. package/skills/agent-introspection-debugging/SKILL.md +152 -0
  32. package/skills/agent-payment-x402/SKILL.md +224 -0
  33. package/skills/agent-sort/SKILL.md +214 -0
  34. package/skills/agentic-engineering/SKILL.md +62 -0
  35. package/skills/agentic-os/SKILL.md +386 -0
  36. package/skills/ai-first-engineering/SKILL.md +50 -0
  37. package/skills/ai-regression-testing/SKILL.md +384 -0
  38. package/skills/android-clean-architecture/SKILL.md +338 -0
  39. package/skills/angular-developer/SKILL.md +153 -0
  40. package/skills/angular-developer/references/angular-animations.md +160 -0
  41. package/skills/angular-developer/references/angular-aria.md +410 -0
  42. package/skills/angular-developer/references/cli.md +86 -0
  43. package/skills/angular-developer/references/component-harnesses.md +59 -0
  44. package/skills/angular-developer/references/component-styling.md +91 -0
  45. package/skills/angular-developer/references/components.md +117 -0
  46. package/skills/angular-developer/references/creating-services.md +97 -0
  47. package/skills/angular-developer/references/data-resolvers.md +69 -0
  48. package/skills/angular-developer/references/define-routes.md +67 -0
  49. package/skills/angular-developer/references/defining-providers.md +72 -0
  50. package/skills/angular-developer/references/di-fundamentals.md +120 -0
  51. package/skills/angular-developer/references/e2e-testing.md +56 -0
  52. package/skills/angular-developer/references/effects.md +83 -0
  53. package/skills/angular-developer/references/hierarchical-injectors.md +43 -0
  54. package/skills/angular-developer/references/host-elements.md +80 -0
  55. package/skills/angular-developer/references/injection-context.md +63 -0
  56. package/skills/angular-developer/references/inputs.md +101 -0
  57. package/skills/angular-developer/references/linked-signal.md +59 -0
  58. package/skills/angular-developer/references/loading-strategies.md +61 -0
  59. package/skills/angular-developer/references/mcp.md +108 -0
  60. package/skills/angular-developer/references/navigate-to-routes.md +69 -0
  61. package/skills/angular-developer/references/outputs.md +86 -0
  62. package/skills/angular-developer/references/reactive-forms.md +122 -0
  63. package/skills/angular-developer/references/rendering-strategies.md +44 -0
  64. package/skills/angular-developer/references/resource.md +77 -0
  65. package/skills/angular-developer/references/route-animations.md +56 -0
  66. package/skills/angular-developer/references/route-guards.md +52 -0
  67. package/skills/angular-developer/references/router-lifecycle.md +45 -0
  68. package/skills/angular-developer/references/router-testing.md +87 -0
  69. package/skills/angular-developer/references/show-routes-with-outlets.md +68 -0
  70. package/skills/angular-developer/references/signal-forms.md +795 -0
  71. package/skills/angular-developer/references/signals-overview.md +94 -0
  72. package/skills/angular-developer/references/tailwind-css.md +69 -0
  73. package/skills/angular-developer/references/template-driven-forms.md +114 -0
  74. package/skills/angular-developer/references/testing-fundamentals.md +65 -0
  75. package/skills/api-connector-builder/SKILL.md +120 -0
  76. package/skills/api-design/SKILL.md +522 -0
  77. package/skills/architecture-decision-records/SKILL.md +178 -0
  78. package/skills/article-writing/SKILL.md +78 -0
  79. package/skills/automation-audit-ops/SKILL.md +141 -0
  80. package/skills/autonomous-agent-harness/SKILL.md +272 -0
  81. package/skills/autonomous-loops/SKILL.md +609 -0
  82. package/skills/backend-patterns/SKILL.md +560 -0
  83. package/skills/benchmark/SKILL.md +92 -0
  84. package/skills/blueprint/SKILL.md +104 -0
  85. package/skills/browser-qa/SKILL.md +86 -0
  86. package/skills/bun-runtime/SKILL.md +83 -0
  87. package/skills/canary-watch/SKILL.md +98 -0
  88. package/skills/carrier-relationship-management/SKILL.md +211 -0
  89. package/skills/cisco-ios-patterns/SKILL.md +163 -0
  90. package/skills/ck/SKILL.md +147 -0
  91. package/skills/ck/commands/forget.mjs +44 -0
  92. package/skills/ck/commands/info.mjs +24 -0
  93. package/skills/ck/commands/init.mjs +143 -0
  94. package/skills/ck/commands/list.mjs +40 -0
  95. package/skills/ck/commands/migrate.mjs +202 -0
  96. package/skills/ck/commands/resume.mjs +36 -0
  97. package/skills/ck/commands/save.mjs +210 -0
  98. package/skills/ck/commands/shared.mjs +387 -0
  99. package/skills/ck/hooks/session-start.mjs +224 -0
  100. package/skills/claude-devfleet/SKILL.md +103 -0
  101. package/skills/click-path-audit/SKILL.md +244 -0
  102. package/skills/clickhouse-io/SKILL.md +438 -0
  103. package/skills/code-tour/SKILL.md +235 -0
  104. package/skills/codebase-onboarding/SKILL.md +232 -0
  105. package/skills/coding-standards/SKILL.md +548 -0
  106. package/skills/compose-multiplatform-patterns/SKILL.md +298 -0
  107. package/skills/connections-optimizer/SKILL.md +188 -0
  108. package/skills/content-engine/SKILL.md +126 -0
  109. package/skills/content-hash-cache-pattern/SKILL.md +160 -0
  110. package/skills/context-budget/SKILL.md +134 -0
  111. package/skills/continuous-agent-loop/SKILL.md +44 -0
  112. package/skills/continuous-learning/SKILL.md +129 -0
  113. package/skills/continuous-learning/config.json +18 -0
  114. package/skills/continuous-learning/evaluate-session.sh +69 -0
  115. package/skills/continuous-learning-v2/SKILL.md +358 -0
  116. package/skills/continuous-learning-v2/agents/observer-loop.sh +322 -0
  117. package/skills/continuous-learning-v2/agents/observer.md +198 -0
  118. package/skills/continuous-learning-v2/agents/session-guardian.sh +150 -0
  119. package/skills/continuous-learning-v2/agents/start-observer.sh +248 -0
  120. package/skills/continuous-learning-v2/config.json +8 -0
  121. package/skills/continuous-learning-v2/hooks/observe.sh +476 -0
  122. package/skills/continuous-learning-v2/scripts/detect-project.sh +288 -0
  123. package/skills/continuous-learning-v2/scripts/instinct-cli.py +1519 -0
  124. package/skills/continuous-learning-v2/scripts/lib/homunculus-dir.sh +31 -0
  125. package/skills/continuous-learning-v2/scripts/migrate-homunculus.sh +62 -0
  126. package/skills/continuous-learning-v2/scripts/test_parse_instinct.py +1018 -0
  127. package/skills/cost-aware-llm-pipeline/SKILL.md +182 -0
  128. package/skills/cost-tracking/SKILL.md +147 -0
  129. package/skills/council/SKILL.md +202 -0
  130. package/skills/cpp-coding-standards/SKILL.md +722 -0
  131. package/skills/cpp-testing/SKILL.md +323 -0
  132. package/skills/crosspost/SKILL.md +110 -0
  133. package/skills/csharp-testing/SKILL.md +320 -0
  134. package/skills/customer-billing-ops/SKILL.md +139 -0
  135. package/skills/customs-trade-compliance/SKILL.md +262 -0
  136. package/skills/dart-flutter-patterns/SKILL.md +562 -0
  137. package/skills/dashboard-builder/SKILL.md +108 -0
  138. package/skills/data-scraper-agent/SKILL.md +764 -0
  139. package/skills/database-migrations/SKILL.md +428 -0
  140. package/skills/deep-research/SKILL.md +158 -0
  141. package/skills/defi-amm-security/SKILL.md +166 -0
  142. package/skills/deployment-patterns/SKILL.md +426 -0
  143. package/skills/design-system/SKILL.md +81 -0
  144. package/skills/django-celery/SKILL.md +456 -0
  145. package/skills/django-patterns/SKILL.md +733 -0
  146. package/skills/django-security/SKILL.md +592 -0
  147. package/skills/django-tdd/SKILL.md +728 -0
  148. package/skills/django-verification/SKILL.md +468 -0
  149. package/skills/dmux-workflows/SKILL.md +190 -0
  150. package/skills/docker-patterns/SKILL.md +363 -0
  151. package/skills/documentation-lookup/SKILL.md +89 -0
  152. package/skills/dotnet-patterns/SKILL.md +320 -0
  153. package/skills/e2e-testing/SKILL.md +325 -0
  154. package/skills/email-ops/SKILL.md +120 -0
  155. package/skills/energy-procurement/SKILL.md +227 -0
  156. package/skills/enterprise-agent-ops/SKILL.md +49 -0
  157. package/skills/error-handling/SKILL.md +375 -0
  158. package/skills/eval-harness/SKILL.md +269 -0
  159. package/skills/evm-token-decimals/SKILL.md +130 -0
  160. package/skills/exa-search/SKILL.md +106 -0
  161. package/skills/fal-ai-media/SKILL.md +287 -0
  162. package/skills/fastapi-patterns/SKILL.md +327 -0
  163. package/skills/finance-billing-ops/SKILL.md +126 -0
  164. package/skills/flox-environments/SKILL.md +496 -0
  165. package/skills/flutter-dart-code-review/SKILL.md +434 -0
  166. package/skills/foundation-models-on-device/SKILL.md +243 -0
  167. package/skills/frontend-design-direction/SKILL.md +92 -0
  168. package/skills/frontend-patterns/SKILL.md +641 -0
  169. package/skills/frontend-slides/SKILL.md +183 -0
  170. package/skills/frontend-slides/STYLE_PRESETS.md +330 -0
  171. package/skills/frontend-slides/animation-patterns.md +122 -0
  172. package/skills/frontend-slides/html-template.md +419 -0
  173. package/skills/frontend-slides/scripts/export-pdf.sh +418 -0
  174. package/skills/frontend-slides/scripts/extract-pptx.py +96 -0
  175. package/skills/frontend-slides/viewport-base.css +153 -0
  176. package/skills/fsharp-testing/SKILL.md +279 -0
  177. package/skills/gan-style-harness/SKILL.md +278 -0
  178. package/skills/gateguard/SKILL.md +125 -0
  179. package/skills/git-workflow/SKILL.md +714 -0
  180. package/skills/github-ops/SKILL.md +143 -0
  181. package/skills/golang-patterns/SKILL.md +673 -0
  182. package/skills/golang-testing/SKILL.md +719 -0
  183. package/skills/google-workspace-ops/SKILL.md +94 -0
  184. package/skills/healthcare-cdss-patterns/SKILL.md +245 -0
  185. package/skills/healthcare-emr-patterns/SKILL.md +159 -0
  186. package/skills/healthcare-eval-harness/SKILL.md +207 -0
  187. package/skills/healthcare-phi-compliance/SKILL.md +145 -0
  188. package/skills/hermes-imports/SKILL.md +87 -0
  189. package/skills/hexagonal-architecture/SKILL.md +275 -0
  190. package/skills/hipaa-compliance/SKILL.md +78 -0
  191. package/skills/homelab-network-readiness/SKILL.md +169 -0
  192. package/skills/homelab-network-setup/SKILL.md +129 -0
  193. package/skills/homelab-pihole-dns/SKILL.md +274 -0
  194. package/skills/homelab-vlan-segmentation/SKILL.md +311 -0
  195. package/skills/homelab-wireguard-vpn/SKILL.md +305 -0
  196. package/skills/hookify-rules/SKILL.md +128 -0
  197. package/skills/inventory-demand-planning/SKILL.md +246 -0
  198. package/skills/investor-materials/SKILL.md +95 -0
  199. package/skills/investor-outreach/SKILL.md +90 -0
  200. package/skills/ios-icon-gen/SKILL.md +157 -0
  201. package/skills/ios-icon-gen/scripts/generate_icons.swift +258 -0
  202. package/skills/ios-icon-gen/scripts/iconify_gen.sh +235 -0
  203. package/skills/iterative-retrieval/SKILL.md +209 -0
  204. package/skills/java-coding-standards/SKILL.md +382 -0
  205. package/skills/jira-integration/SKILL.md +292 -0
  206. package/skills/jpa-patterns/SKILL.md +150 -0
  207. package/skills/knowledge-ops/SKILL.md +153 -0
  208. package/skills/kotlin-coroutines-flows/SKILL.md +283 -0
  209. package/skills/kotlin-exposed-patterns/SKILL.md +718 -0
  210. package/skills/kotlin-ktor-patterns/SKILL.md +688 -0
  211. package/skills/kotlin-patterns/SKILL.md +710 -0
  212. package/skills/kotlin-testing/SKILL.md +823 -0
  213. package/skills/laravel-patterns/SKILL.md +414 -0
  214. package/skills/laravel-plugin-discovery/SKILL.md +228 -0
  215. package/skills/laravel-security/SKILL.md +284 -0
  216. package/skills/laravel-tdd/SKILL.md +282 -0
  217. package/skills/laravel-verification/SKILL.md +178 -0
  218. package/skills/lead-intelligence/SKILL.md +320 -0
  219. package/skills/lead-intelligence/agents/enrichment-agent.md +85 -0
  220. package/skills/lead-intelligence/agents/mutual-mapper.md +75 -0
  221. package/skills/lead-intelligence/agents/outreach-drafter.md +98 -0
  222. package/skills/lead-intelligence/agents/signal-scorer.md +60 -0
  223. package/skills/liquid-glass-design/SKILL.md +279 -0
  224. package/skills/llm-trading-agent-security/SKILL.md +146 -0
  225. package/skills/logistics-exception-management/SKILL.md +221 -0
  226. package/skills/make-interfaces-feel-better/SKILL.md +151 -0
  227. package/skills/manim-video/SKILL.md +88 -0
  228. package/skills/manim-video/assets/network_graph_scene.py +52 -0
  229. package/skills/market-research/SKILL.md +74 -0
  230. package/skills/mcp-server-patterns/SKILL.md +68 -0
  231. package/skills/messages-ops/SKILL.md +103 -0
  232. package/skills/mle-workflow/SKILL.md +345 -0
  233. package/skills/motion-advanced/SKILL.md +596 -0
  234. package/skills/motion-foundations/SKILL.md +299 -0
  235. package/skills/motion-patterns/SKILL.md +435 -0
  236. package/skills/motion-ui/SKILL.md +574 -0
  237. package/skills/mysql-patterns/SKILL.md +411 -0
  238. package/skills/nanoclaw-repl/SKILL.md +32 -0
  239. package/skills/nestjs-patterns/SKILL.md +229 -0
  240. package/skills/netmiko-ssh-automation/SKILL.md +173 -0
  241. package/skills/network-bgp-diagnostics/SKILL.md +167 -0
  242. package/skills/network-config-validation/SKILL.md +210 -0
  243. package/skills/network-interface-health/SKILL.md +152 -0
  244. package/skills/nextjs-turbopack/SKILL.md +43 -0
  245. package/skills/nodejs-keccak256/SKILL.md +102 -0
  246. package/skills/nutrient-document-processing/SKILL.md +166 -0
  247. package/skills/nuxt4-patterns/SKILL.md +99 -0
  248. package/skills/openclaw-persona-forge/SKILL.md +288 -0
  249. package/skills/openclaw-persona-forge/gacha.py +224 -0
  250. package/skills/openclaw-persona-forge/gacha.sh +5 -0
  251. package/skills/openclaw-persona-forge/references/avatar-style.md +124 -0
  252. package/skills/openclaw-persona-forge/references/boundary-rules.md +53 -0
  253. package/skills/openclaw-persona-forge/references/error-handling.md +53 -0
  254. package/skills/openclaw-persona-forge/references/identity-tension.md +48 -0
  255. package/skills/openclaw-persona-forge/references/naming-system.md +39 -0
  256. package/skills/openclaw-persona-forge/references/output-template.md +166 -0
  257. package/skills/opensource-pipeline/SKILL.md +254 -0
  258. package/skills/perl-patterns/SKILL.md +503 -0
  259. package/skills/perl-security/SKILL.md +502 -0
  260. package/skills/perl-testing/SKILL.md +474 -0
  261. package/skills/plan-orchestrate/SKILL.md +253 -0
  262. package/skills/plankton-code-quality/SKILL.md +236 -0
  263. package/skills/postgres-patterns/SKILL.md +146 -0
  264. package/skills/product-capability/SKILL.md +140 -0
  265. package/skills/product-lens/SKILL.md +91 -0
  266. package/skills/production-audit/SKILL.md +206 -0
  267. package/skills/production-scheduling/SKILL.md +237 -0
  268. package/skills/project-flow-ops/SKILL.md +110 -0
  269. package/skills/prompt-optimizer/SKILL.md +398 -0
  270. package/skills/python-patterns/SKILL.md +749 -0
  271. package/skills/python-testing/SKILL.md +815 -0
  272. package/skills/pytorch-patterns/SKILL.md +395 -0
  273. package/skills/quality-nonconformance/SKILL.md +259 -0
  274. package/skills/quarkus-patterns/SKILL.md +721 -0
  275. package/skills/quarkus-security/SKILL.md +466 -0
  276. package/skills/quarkus-tdd/SKILL.md +810 -0
  277. package/skills/quarkus-verification/SKILL.md +478 -0
  278. package/skills/ralphinho-rfc-pipeline/SKILL.md +66 -0
  279. package/skills/redis-patterns/SKILL.md +402 -0
  280. package/skills/regex-vs-llm-structured-text/SKILL.md +219 -0
  281. package/skills/remotion-video-creation/SKILL.md +43 -0
  282. package/skills/remotion-video-creation/rules/3d.md +86 -0
  283. package/skills/remotion-video-creation/rules/animations.md +29 -0
  284. package/skills/remotion-video-creation/rules/assets/charts-bar-chart.tsx +173 -0
  285. package/skills/remotion-video-creation/rules/assets/text-animations-typewriter.tsx +100 -0
  286. package/skills/remotion-video-creation/rules/assets/text-animations-word-highlight.tsx +108 -0
  287. package/skills/remotion-video-creation/rules/assets.md +78 -0
  288. package/skills/remotion-video-creation/rules/audio.md +172 -0
  289. package/skills/remotion-video-creation/rules/calculate-metadata.md +104 -0
  290. package/skills/remotion-video-creation/rules/can-decode.md +75 -0
  291. package/skills/remotion-video-creation/rules/charts.md +58 -0
  292. package/skills/remotion-video-creation/rules/compositions.md +146 -0
  293. package/skills/remotion-video-creation/rules/display-captions.md +126 -0
  294. package/skills/remotion-video-creation/rules/extract-frames.md +229 -0
  295. package/skills/remotion-video-creation/rules/fonts.md +152 -0
  296. package/skills/remotion-video-creation/rules/get-audio-duration.md +58 -0
  297. package/skills/remotion-video-creation/rules/get-video-dimensions.md +68 -0
  298. package/skills/remotion-video-creation/rules/get-video-duration.md +58 -0
  299. package/skills/remotion-video-creation/rules/gifs.md +138 -0
  300. package/skills/remotion-video-creation/rules/images.md +130 -0
  301. package/skills/remotion-video-creation/rules/import-srt-captions.md +67 -0
  302. package/skills/remotion-video-creation/rules/lottie.md +67 -0
  303. package/skills/remotion-video-creation/rules/measuring-dom-nodes.md +34 -0
  304. package/skills/remotion-video-creation/rules/measuring-text.md +143 -0
  305. package/skills/remotion-video-creation/rules/sequencing.md +106 -0
  306. package/skills/remotion-video-creation/rules/tailwind.md +11 -0
  307. package/skills/remotion-video-creation/rules/text-animations.md +20 -0
  308. package/skills/remotion-video-creation/rules/timing.md +179 -0
  309. package/skills/remotion-video-creation/rules/transcribe-captions.md +19 -0
  310. package/skills/remotion-video-creation/rules/transitions.md +122 -0
  311. package/skills/remotion-video-creation/rules/trimming.md +52 -0
  312. package/skills/remotion-video-creation/rules/videos.md +171 -0
  313. package/skills/repo-scan/SKILL.md +78 -0
  314. package/skills/research-ops/SKILL.md +111 -0
  315. package/skills/returns-reverse-logistics/SKILL.md +239 -0
  316. package/skills/rules-distill/SKILL.md +263 -0
  317. package/skills/rules-distill/scripts/scan-rules.sh +58 -0
  318. package/skills/rules-distill/scripts/scan-skills.sh +129 -0
  319. package/skills/rust-patterns/SKILL.md +498 -0
  320. package/skills/rust-testing/SKILL.md +499 -0
  321. package/skills/safety-guard/SKILL.md +74 -0
  322. package/skills/santa-method/SKILL.md +306 -0
  323. package/skills/scientific-db-pubmed-database/SKILL.md +175 -0
  324. package/skills/scientific-db-uspto-database/SKILL.md +177 -0
  325. package/skills/scientific-pkg-gget/SKILL.md +166 -0
  326. package/skills/scientific-thinking-literature-review/SKILL.md +192 -0
  327. package/skills/scientific-thinking-scholar-evaluation/SKILL.md +160 -0
  328. package/skills/search-first/SKILL.md +181 -0
  329. package/skills/security-bounty-hunter/SKILL.md +99 -0
  330. package/skills/security-review/SKILL.md +502 -0
  331. package/skills/security-review/cloud-infrastructure-security.md +361 -0
  332. package/skills/seo/SKILL.md +153 -0
  333. package/skills/skill-comply/SKILL.md +57 -0
  334. package/skills/skill-comply/fixtures/compliant_trace.jsonl +5 -0
  335. package/skills/skill-comply/fixtures/noncompliant_trace.jsonl +3 -0
  336. package/skills/skill-comply/fixtures/tdd_spec.yaml +44 -0
  337. package/skills/skill-comply/prompts/classifier.md +24 -0
  338. package/skills/skill-comply/prompts/scenario_generator.md +62 -0
  339. package/skills/skill-comply/prompts/spec_generator.md +42 -0
  340. package/skills/skill-comply/pyproject.toml +15 -0
  341. package/skills/skill-comply/scripts/__init__.py +0 -0
  342. package/skills/skill-comply/scripts/classifier.py +85 -0
  343. package/skills/skill-comply/scripts/grader.py +124 -0
  344. package/skills/skill-comply/scripts/parser.py +107 -0
  345. package/skills/skill-comply/scripts/report.py +170 -0
  346. package/skills/skill-comply/scripts/run.py +127 -0
  347. package/skills/skill-comply/scripts/runner.py +186 -0
  348. package/skills/skill-comply/scripts/scenario_generator.py +70 -0
  349. package/skills/skill-comply/scripts/spec_generator.py +72 -0
  350. package/skills/skill-comply/scripts/utils.py +13 -0
  351. package/skills/skill-comply/tests/test_grader.py +197 -0
  352. package/skills/skill-comply/tests/test_parser.py +90 -0
  353. package/skills/skill-comply/tests/test_runner.py +172 -0
  354. package/skills/skill-scout/SKILL.md +139 -0
  355. package/skills/skill-stocktake/SKILL.md +193 -0
  356. package/skills/skill-stocktake/scripts/quick-diff.sh +87 -0
  357. package/skills/skill-stocktake/scripts/save-results.sh +56 -0
  358. package/skills/skill-stocktake/scripts/scan.sh +170 -0
  359. package/skills/social-graph-ranker/SKILL.md +153 -0
  360. package/skills/springboot-patterns/SKILL.md +313 -0
  361. package/skills/springboot-security/SKILL.md +271 -0
  362. package/skills/springboot-tdd/SKILL.md +157 -0
  363. package/skills/springboot-verification/SKILL.md +230 -0
  364. package/skills/strategic-compact/SKILL.md +129 -0
  365. package/skills/strategic-compact/suggest-compact.sh +54 -0
  366. package/skills/swift-actor-persistence/SKILL.md +142 -0
  367. package/skills/swift-concurrency-6-2/SKILL.md +216 -0
  368. package/skills/swift-protocol-di-testing/SKILL.md +189 -0
  369. package/skills/swiftui-patterns/SKILL.md +259 -0
  370. package/skills/tdd-workflow/SKILL.md +462 -0
  371. package/skills/team-builder/SKILL.md +166 -0
  372. package/skills/terminal-ops/SKILL.md +108 -0
  373. package/skills/tinystruct-patterns/SKILL.md +130 -0
  374. package/skills/tinystruct-patterns/references/architecture.md +77 -0
  375. package/skills/tinystruct-patterns/references/data-handling.md +35 -0
  376. package/skills/tinystruct-patterns/references/routing.md +57 -0
  377. package/skills/tinystruct-patterns/references/system-usage.md +74 -0
  378. package/skills/tinystruct-patterns/references/testing.md +59 -0
  379. package/skills/token-budget-advisor/SKILL.md +133 -0
  380. package/skills/ui-demo/SKILL.md +464 -0
  381. package/skills/ui-to-vue/SKILL.md +134 -0
  382. package/skills/unified-notifications-ops/SKILL.md +186 -0
  383. package/skills/verification-loop/SKILL.md +125 -0
  384. package/skills/video-editing/SKILL.md +309 -0
  385. package/skills/videodb/SKILL.md +373 -0
  386. package/skills/videodb/reference/api-reference.md +550 -0
  387. package/skills/videodb/reference/capture-reference.md +407 -0
  388. package/skills/videodb/reference/capture.md +101 -0
  389. package/skills/videodb/reference/editor.md +443 -0
  390. package/skills/videodb/reference/generative.md +331 -0
  391. package/skills/videodb/reference/rtstream-reference.md +564 -0
  392. package/skills/videodb/reference/rtstream.md +65 -0
  393. package/skills/videodb/reference/search.md +230 -0
  394. package/skills/videodb/reference/streaming.md +406 -0
  395. package/skills/videodb/reference/use-cases.md +118 -0
  396. package/skills/videodb/scripts/ws_listener.py +282 -0
  397. package/skills/visa-doc-translate/README.md +86 -0
  398. package/skills/visa-doc-translate/SKILL.md +117 -0
  399. package/skills/vite-patterns/SKILL.md +448 -0
  400. package/skills/windows-desktop-e2e/SKILL.md +787 -0
  401. package/skills/workspace-surface-audit/SKILL.md +124 -0
  402. 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