@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,258 @@
1
+ #!/usr/bin/env swift
2
+
3
+ import AppKit
4
+ import Foundation
5
+
6
+ // MARK: - Configuration
7
+
8
+ struct IconSpec {
9
+ let symbolName: String
10
+ let assetName: String
11
+ let baseSize: CGFloat
12
+ let color: NSColor
13
+ let weight: NSFont.Weight
14
+ }
15
+
16
+ func parseColor(_ hex: String) -> NSColor {
17
+ var hex = hex.trimmingCharacters(in: .whitespacesAndNewlines)
18
+ if hex.hasPrefix("#") { hex.removeFirst() }
19
+ guard hex.count == 6, let value = UInt64(hex, radix: 16) else {
20
+ return NSColor(red: 142/255, green: 142/255, blue: 147/255, alpha: 1.0)
21
+ }
22
+ return NSColor(
23
+ red: CGFloat((value >> 16) & 0xFF) / 255,
24
+ green: CGFloat((value >> 8) & 0xFF) / 255,
25
+ blue: CGFloat(value & 0xFF) / 255,
26
+ alpha: 1.0
27
+ )
28
+ }
29
+
30
+ func parseWeight(_ name: String) -> NSFont.Weight {
31
+ switch name.lowercased() {
32
+ case "ultralight": return .ultraLight
33
+ case "thin": return .thin
34
+ case "light": return .light
35
+ case "regular": return .regular
36
+ case "medium": return .medium
37
+ case "semibold": return .semibold
38
+ case "bold": return .bold
39
+ case "heavy": return .heavy
40
+ case "black": return .black
41
+ default: return .thin
42
+ }
43
+ }
44
+
45
+ // MARK: - Generation
46
+
47
+ enum IconError: Error, CustomStringConvertible {
48
+ case directoryCreation(String)
49
+ case symbolNotFound(String)
50
+ case configurationFailed(String)
51
+ case pngCreation(String)
52
+ case fileWrite(String)
53
+
54
+ var description: String {
55
+ switch self {
56
+ case .directoryCreation(let msg): return msg
57
+ case .symbolNotFound(let msg): return msg
58
+ case .configurationFailed(let msg): return msg
59
+ case .pngCreation(let msg): return msg
60
+ case .fileWrite(let msg): return msg
61
+ }
62
+ }
63
+ }
64
+
65
+ func generateIcon(_ spec: IconSpec, outputDir: String) throws {
66
+ let dir = "\(outputDir)/\(spec.assetName).imageset"
67
+ do {
68
+ try FileManager.default.createDirectory(atPath: dir, withIntermediateDirectories: true)
69
+ } catch {
70
+ throw IconError.directoryCreation("Could not create output directory '\(dir)': \(error.localizedDescription)")
71
+ }
72
+
73
+ let scales: [(suffix: String, multiplier: CGFloat)] = [("", 1), ("@2x", 2), ("@3x", 3)]
74
+
75
+ for scale in scales {
76
+ let pixelSize = spec.baseSize * scale.multiplier
77
+ let imageSize = NSSize(width: pixelSize, height: pixelSize)
78
+
79
+ let config = NSImage.SymbolConfiguration(
80
+ pointSize: pixelSize * 0.40,
81
+ weight: spec.weight,
82
+ scale: .large
83
+ )
84
+
85
+ guard let symbol = NSImage(systemSymbolName: spec.symbolName, accessibilityDescription: nil) else {
86
+ throw IconError.symbolNotFound("SF Symbol '\(spec.symbolName)' not found. Run 'SF Symbols' app to browse available names.")
87
+ }
88
+
89
+ guard let configured = symbol.withSymbolConfiguration(config) else {
90
+ throw IconError.configurationFailed("Could not apply symbol configuration to '\(spec.symbolName)'")
91
+ }
92
+
93
+ let image = NSImage(size: imageSize, flipped: false) { rect in
94
+ let symSize = configured.size
95
+ let x = (rect.width - symSize.width) / 2
96
+ let y = (rect.height - symSize.height) / 2
97
+ let drawRect = NSRect(x: x, y: y, width: symSize.width, height: symSize.height)
98
+
99
+ let tinted = NSImage(size: symSize, flipped: false) { tintRect in
100
+ configured.draw(in: tintRect)
101
+ spec.color.set()
102
+ tintRect.fill(using: .sourceAtop)
103
+ return true
104
+ }
105
+
106
+ tinted.draw(in: drawRect, from: .zero, operation: .sourceOver, fraction: 1.0)
107
+ return true
108
+ }
109
+
110
+ guard let tiffData = image.tiffRepresentation,
111
+ let bitmap = NSBitmapImageRep(data: tiffData),
112
+ let pngData = bitmap.representation(using: .png, properties: [:]) else {
113
+ throw IconError.pngCreation("Failed to create PNG for \(spec.assetName)\(scale.suffix)")
114
+ }
115
+
116
+ let fileName = "\(spec.assetName)\(scale.suffix).png"
117
+ do {
118
+ try pngData.write(to: URL(fileURLWithPath: "\(dir)/\(fileName)"))
119
+ } catch {
120
+ throw IconError.fileWrite("Failed to write \(fileName): \(error.localizedDescription)")
121
+ }
122
+ print(" \(fileName) (\(Int(pixelSize))x\(Int(pixelSize)))")
123
+ }
124
+
125
+ // Write Contents.json
126
+ let json = """
127
+ {
128
+ "images" : [
129
+ {
130
+ "filename" : "\(spec.assetName).png",
131
+ "idiom" : "universal",
132
+ "scale" : "1x"
133
+ },
134
+ {
135
+ "filename" : "\(spec.assetName)@2x.png",
136
+ "idiom" : "universal",
137
+ "scale" : "2x"
138
+ },
139
+ {
140
+ "filename" : "\(spec.assetName)@3x.png",
141
+ "idiom" : "universal",
142
+ "scale" : "3x"
143
+ }
144
+ ],
145
+ "info" : {
146
+ "author" : "xcode",
147
+ "version" : 1
148
+ }
149
+ }
150
+ """
151
+ do {
152
+ try json.write(toFile: "\(dir)/Contents.json", atomically: true, encoding: .utf8)
153
+ } catch {
154
+ throw IconError.fileWrite("Failed to write Contents.json: \(error.localizedDescription)")
155
+ }
156
+ }
157
+
158
+ func requireOptionValue(_ args: [String], at index: Int, flag: String) -> String {
159
+ guard index < args.count else {
160
+ fputs("ERROR: Missing value for \(flag)\n", stderr)
161
+ exit(1)
162
+ }
163
+ let value = args[index]
164
+ if value.hasPrefix("--") {
165
+ fputs("ERROR: Missing value for \(flag)\n", stderr)
166
+ exit(1)
167
+ }
168
+ return value
169
+ }
170
+
171
+ // MARK: - CLI
172
+
173
+ let args = CommandLine.arguments
174
+
175
+ if args.count < 3 || args.contains("--help") || args.contains("-h") {
176
+ print("""
177
+ Usage: generate_icons.swift <sf-symbol-name> <asset-name> [options]
178
+
179
+ Options:
180
+ --size <pt> Base size in points (default: 68)
181
+ --color <hex> Color hex code (default: 8E8E93)
182
+ --weight <name> Font weight: ultralight|thin|light|regular|medium|semibold|bold|heavy|black (default: thin)
183
+ --output <dir> Output directory (default: /tmp/icons)
184
+
185
+ Examples:
186
+ generate_icons.swift doc.text.below.ecg editTool_expenseReport
187
+ generate_icons.swift person.crop.rectangle editTool_businessCard --color 007AFF --weight regular
188
+ generate_icons.swift receipt myReceipt --size 48 --output ./Assets.xcassets/icons
189
+
190
+ Browse SF Symbol names: open the SF Symbols app (free from Apple) or https://developer.apple.com/sf-symbols/
191
+ """)
192
+ exit(0)
193
+ }
194
+
195
+ let symbolName = args[1]
196
+ let assetName = args[2]
197
+
198
+ var baseSize: CGFloat = 68
199
+ var colorHex = "8E8E93"
200
+ var weightName = "thin"
201
+ var outputDir = "/tmp/icons"
202
+
203
+ var i = 3
204
+ while i < args.count {
205
+ switch args[i] {
206
+ case "--size":
207
+ let raw = requireOptionValue(args, at: i + 1, flag: "--size")
208
+ guard let size = Double(raw), size > 0 else {
209
+ fputs("ERROR: --size must be a positive number\n", stderr)
210
+ exit(1)
211
+ }
212
+ baseSize = CGFloat(size)
213
+ i += 2
214
+ continue
215
+ case "--color":
216
+ colorHex = requireOptionValue(args, at: i + 1, flag: "--color")
217
+ let stripped = colorHex.hasPrefix("#") ? String(colorHex.dropFirst()) : colorHex
218
+ guard stripped.count == 6, UInt64(stripped, radix: 16) != nil else {
219
+ fputs("ERROR: --color must be a 6-digit hex code (e.g. 007AFF)\n", stderr)
220
+ exit(1)
221
+ }
222
+ i += 2
223
+ continue
224
+ case "--weight":
225
+ weightName = requireOptionValue(args, at: i + 1, flag: "--weight")
226
+ let validWeights = ["ultralight", "thin", "light", "regular", "medium", "semibold", "bold", "heavy", "black"]
227
+ guard validWeights.contains(weightName.lowercased()) else {
228
+ fputs("ERROR: --weight must be one of: \(validWeights.joined(separator: ", "))\n", stderr)
229
+ exit(1)
230
+ }
231
+ i += 2
232
+ continue
233
+ case "--output":
234
+ outputDir = requireOptionValue(args, at: i + 1, flag: "--output")
235
+ i += 2
236
+ continue
237
+ default:
238
+ fputs("WARNING: Unknown option \(args[i])\n", stderr)
239
+ }
240
+ i += 1
241
+ }
242
+
243
+ let spec = IconSpec(
244
+ symbolName: symbolName,
245
+ assetName: assetName,
246
+ baseSize: baseSize,
247
+ color: parseColor(colorHex),
248
+ weight: parseWeight(weightName)
249
+ )
250
+
251
+ print("Generating \(assetName) from SF Symbol '\(symbolName)':")
252
+ do {
253
+ try generateIcon(spec, outputDir: outputDir)
254
+ print("Output: \(outputDir)/\(assetName).imageset/")
255
+ } catch {
256
+ fputs("ERROR: \(error)\n", stderr)
257
+ exit(1)
258
+ }
@@ -0,0 +1,235 @@
1
+ #!/bin/bash
2
+ #
3
+ # Generate iOS icon imagesets from Iconify API (275k+ open source icons)
4
+ # Uses: curl (download SVG) + sips (SVG->PNG conversion, built into macOS)
5
+ #
6
+ # Usage:
7
+ # iconify_gen.sh <icon-id> <asset-name> [options]
8
+ # iconify_gen.sh search <query> [--prefix <collection>] [--limit <n>]
9
+ #
10
+ # Examples:
11
+ # iconify_gen.sh mdi:receipt-text-outline myExpenseIcon
12
+ # iconify_gen.sh search "business card"
13
+ # iconify_gen.sh search receipt --prefix mdi
14
+
15
+ set -euo pipefail
16
+
17
+ API_BASE="https://api.iconify.design"
18
+ readonly CURL_OPTS=(--fail --silent --show-error --connect-timeout 10 --max-time 30)
19
+
20
+ # Defaults
21
+ SIZE=68
22
+ COLOR="8E8E93"
23
+ OUTPUT="/tmp/icons"
24
+ LIMIT=20
25
+
26
+ require_value() {
27
+ local flag="$1"
28
+ local value="${2-}"
29
+ if [[ -z "$value" || "$value" == --* ]]; then
30
+ echo "ERROR: ${flag} requires a value" >&2
31
+ exit 1
32
+ fi
33
+ }
34
+
35
+ usage() {
36
+ cat <<'EOF'
37
+ Usage:
38
+ iconify_gen.sh <icon-id> <asset-name> [options] Generate an icon imageset
39
+ iconify_gen.sh search <query> [options] Search for icons
40
+ iconify_gen.sh preview <icon-id> Download preview SVG
41
+ iconify_gen.sh collections List popular icon collections
42
+
43
+ Generate Options:
44
+ --size <pt> Base size in points (default: 68)
45
+ --color <hex> Color hex without # (default: 8E8E93)
46
+ --output <dir> Output directory (default: /tmp/icons)
47
+
48
+ Search Options:
49
+ --prefix <name> Filter by collection (e.g., mdi, lucide, tabler, ph)
50
+ --limit <n> Max results (default: 20)
51
+
52
+ Icon ID Format: <collection>:<icon-name>
53
+ Examples: mdi:receipt-text-outline, lucide:credit-card, ph:address-book
54
+
55
+ Popular Collections:
56
+ mdi Material Design Icons (7400+ icons)
57
+ lucide Lucide (1700+ icons)
58
+ tabler Tabler Icons (6000+ icons)
59
+ ph Phosphor (9000+ icons)
60
+ ri Remix Icon (2800+ icons)
61
+ carbon Carbon (2100+ icons)
62
+ EOF
63
+ exit 0
64
+ }
65
+
66
+ search_icons() {
67
+ local query="$1"
68
+ shift
69
+ local prefix=""
70
+
71
+ while [[ $# -gt 0 ]]; do
72
+ case "$1" in
73
+ --prefix) require_value --prefix "${2-}"; prefix="$2"; shift 2 ;;
74
+ --limit) require_value --limit "${2-}"; LIMIT="$2"; shift 2 ;;
75
+ *) shift ;;
76
+ esac
77
+ done
78
+
79
+ local encoded_query
80
+ encoded_query="$(python3 -c "import urllib.parse, sys; print(urllib.parse.quote(sys.argv[1]))" "$query")"
81
+ local url="${API_BASE}/search?query=${encoded_query}&limit=${LIMIT}"
82
+ if [[ -n "$prefix" ]]; then
83
+ url="${url}&prefix=${prefix}"
84
+ fi
85
+
86
+ local response
87
+ response=$(curl "${CURL_OPTS[@]}" "$url") || { echo "ERROR: Search request failed"; exit 1; }
88
+
89
+ local total
90
+ total=$(echo "$response" | python3 -c "import sys,json; print(json.load(sys.stdin).get('total',0))")
91
+
92
+ echo "Found ${total} icons for '${query}':"
93
+ echo ""
94
+ echo "$response" | python3 -c "
95
+ import sys, json
96
+ data = json.load(sys.stdin)
97
+ for icon in data.get('icons', []):
98
+ print(f' {icon}')
99
+ "
100
+ echo ""
101
+ echo "Generate with: iconify_gen.sh <icon-id> <asset-name>"
102
+ echo "Preview with: iconify_gen.sh preview <icon-id>"
103
+ }
104
+
105
+ list_collections() {
106
+ echo "Popular Iconify collections:"
107
+ echo ""
108
+ local resp
109
+ resp=$(curl "${CURL_OPTS[@]}" "${API_BASE}/collections") || { echo "ERROR: Failed to fetch collections list"; exit 1; }
110
+ echo "$resp" | python3 -c "
111
+ import sys, json
112
+ data = json.load(sys.stdin)
113
+ popular = ['mdi','lucide','tabler','ph','ri','carbon','solar','heroicons','bi','octicon','ion','fe','charm','ci','iconoir','basil','uil','mingcute','flowbite','mynaui']
114
+ for k in popular:
115
+ if k in data:
116
+ v = data[k]
117
+ name = v.get('name','')
118
+ total = v.get('total',0)
119
+ print(f' {k:12s} {name} ({total} icons)')
120
+ "
121
+ echo ""
122
+ echo "Full list: https://icon-sets.iconify.design/"
123
+ }
124
+
125
+ preview_icon() {
126
+ local icon_id="$1"
127
+ local collection="${icon_id%%:*}"
128
+ local name="${icon_id#*:}"
129
+ local url="${API_BASE}/${collection}/${name}.svg?width=136&height=136&color=%23${COLOR}"
130
+ local outfile="/tmp/iconify_preview_${collection}_${name}.svg"
131
+
132
+ curl "${CURL_OPTS[@]}" "$url" -o "$outfile" || { echo "ERROR: Icon '${icon_id}' not found"; exit 1; }
133
+ echo "Preview SVG: ${outfile}"
134
+ echo "URL: ${url}"
135
+
136
+ # Also convert to PNG for visual check
137
+ local pngfile="/tmp/iconify_preview_${collection}_${name}.png"
138
+ sips -s format png "$outfile" --out "$pngfile" >/dev/null 2>&1 || echo "WARNING: sips conversion failed; PNG may be incorrect"
139
+ echo "Preview PNG: ${pngfile}"
140
+ }
141
+
142
+ generate_icon() {
143
+ local icon_id="$1"
144
+ local asset_name="$2"
145
+ shift 2
146
+
147
+ while [[ $# -gt 0 ]]; do
148
+ case "$1" in
149
+ --size) require_value --size "${2-}"; SIZE="$2"; shift 2 ;;
150
+ --color) require_value --color "${2-}"; COLOR="$2"; shift 2 ;;
151
+ --output) require_value --output "${2-}"; OUTPUT="$2"; shift 2 ;;
152
+ *) shift ;;
153
+ esac
154
+ done
155
+
156
+ local collection="${icon_id%%:*}"
157
+ local name="${icon_id#*:}"
158
+ local imageset_dir="${OUTPUT}/${asset_name}.imageset"
159
+
160
+ mkdir -p "$imageset_dir"
161
+
162
+ echo "Generating ${asset_name} from Iconify '${icon_id}':"
163
+
164
+ local scales=("1:${SIZE}" "2:$((SIZE * 2))" "3:$((SIZE * 3))")
165
+
166
+ for scale_info in "${scales[@]}"; do
167
+ local scale="${scale_info%%:*}"
168
+ local px="${scale_info#*:}"
169
+ local suffix=""
170
+ [[ "$scale" != "1" ]] && suffix="@${scale}x"
171
+
172
+ local svg_url="${API_BASE}/${collection}/${name}.svg?width=${px}&height=${px}&color=%23${COLOR}"
173
+ local svg_file="${imageset_dir}/${asset_name}${suffix}.svg"
174
+ local png_file="${imageset_dir}/${asset_name}${suffix}.png"
175
+
176
+ curl "${CURL_OPTS[@]}" "$svg_url" -o "$svg_file" || { echo "ERROR: Failed to download icon '${icon_id}'"; exit 1; }
177
+ sips -s format png "$svg_file" --out "$png_file" >/dev/null 2>&1 || echo "WARNING: sips conversion may have failed for ${svg_file}"
178
+ rm "$svg_file"
179
+
180
+ echo " ${asset_name}${suffix}.png (${px}x${px})"
181
+ done
182
+
183
+ # Write Contents.json
184
+ cat > "${imageset_dir}/Contents.json" <<JSONEOF
185
+ {
186
+ "images" : [
187
+ {
188
+ "filename" : "${asset_name}.png",
189
+ "idiom" : "universal",
190
+ "scale" : "1x"
191
+ },
192
+ {
193
+ "filename" : "${asset_name}@2x.png",
194
+ "idiom" : "universal",
195
+ "scale" : "2x"
196
+ },
197
+ {
198
+ "filename" : "${asset_name}@3x.png",
199
+ "idiom" : "universal",
200
+ "scale" : "3x"
201
+ }
202
+ ],
203
+ "info" : {
204
+ "author" : "xcode",
205
+ "version" : 1
206
+ }
207
+ }
208
+ JSONEOF
209
+
210
+ echo "Output: ${imageset_dir}/"
211
+ }
212
+
213
+ # Main
214
+ [[ $# -eq 0 ]] && usage
215
+ [[ "$1" == "--help" || "$1" == "-h" ]] && usage
216
+
217
+ case "$1" in
218
+ search)
219
+ shift
220
+ [[ $# -eq 0 ]] && { echo "Usage: iconify_gen.sh search <query>"; exit 1; }
221
+ search_icons "$@"
222
+ ;;
223
+ preview)
224
+ shift
225
+ [[ $# -eq 0 ]] && { echo "Usage: iconify_gen.sh preview <icon-id>"; exit 1; }
226
+ preview_icon "$1"
227
+ ;;
228
+ collections)
229
+ list_collections
230
+ ;;
231
+ *)
232
+ [[ $# -lt 2 ]] && { echo "Usage: iconify_gen.sh <icon-id> <asset-name> [options]"; exit 1; }
233
+ generate_icon "$@"
234
+ ;;
235
+ esac
@@ -0,0 +1,209 @@
1
+ ---
2
+ name: iterative-retrieval
3
+ description: Pattern for progressively refining context retrieval to solve the subagent context problem
4
+ ---
5
+
6
+ # Iterative Retrieval Pattern
7
+
8
+ Solves the "context problem" in multi-agent workflows where subagents don't know what context they need until they start working.
9
+
10
+ ## When to Activate
11
+
12
+ - Spawning subagents that need codebase context they cannot predict upfront
13
+ - Building multi-agent workflows where context is progressively refined
14
+ - Encountering "context too large" or "missing context" failures in agent tasks
15
+ - Designing RAG-like retrieval pipelines for code exploration
16
+ - Optimizing token usage in agent orchestration
17
+
18
+ ## The Problem
19
+
20
+ Subagents are spawned with limited context. They don't know:
21
+ - Which files contain relevant code
22
+ - What patterns exist in the codebase
23
+ - What terminology the project uses
24
+
25
+ Standard approaches fail:
26
+ - **Send everything**: Exceeds context limits
27
+ - **Send nothing**: Agent lacks critical information
28
+ - **Guess what's needed**: Often wrong
29
+
30
+ ## The Solution: Iterative Retrieval
31
+
32
+ A 4-phase loop that progressively refines context:
33
+
34
+ ```
35
+ ┌─────────────────────────────────────────────┐
36
+ │ │
37
+ │ ┌──────────┐ ┌──────────┐ │
38
+ │ │ DISPATCH │─────│ EVALUATE │ │
39
+ │ └──────────┘ └──────────┘ │
40
+ │ ▲ │ │
41
+ │ │ ▼ │
42
+ │ ┌──────────┐ ┌──────────┐ │
43
+ │ │ LOOP │─────│ REFINE │ │
44
+ │ └──────────┘ └──────────┘ │
45
+ │ │
46
+ │ Max 3 cycles, then proceed │
47
+ └─────────────────────────────────────────────┘
48
+ ```
49
+
50
+ ### Phase 1: DISPATCH
51
+
52
+ Initial broad query to gather candidate files:
53
+
54
+ ```javascript
55
+ // Start with high-level intent
56
+ const initialQuery = {
57
+ patterns: ['src/**/*.ts', 'lib/**/*.ts'],
58
+ keywords: ['authentication', 'user', 'session'],
59
+ excludes: ['*.test.ts', '*.spec.ts']
60
+ };
61
+
62
+ // Dispatch to retrieval agent
63
+ const candidates = await retrieveFiles(initialQuery);
64
+ ```
65
+
66
+ ### Phase 2: EVALUATE
67
+
68
+ Assess retrieved content for relevance:
69
+
70
+ ```javascript
71
+ function evaluateRelevance(files, task) {
72
+ return files.map(file => ({
73
+ path: file.path,
74
+ relevance: scoreRelevance(file.content, task),
75
+ reason: explainRelevance(file.content, task),
76
+ missingContext: identifyGaps(file.content, task)
77
+ }));
78
+ }
79
+ ```
80
+
81
+ Scoring criteria:
82
+ - **High (0.8-1.0)**: Directly implements target functionality
83
+ - **Medium (0.5-0.7)**: Contains related patterns or types
84
+ - **Low (0.2-0.4)**: Tangentially related
85
+ - **None (0-0.2)**: Not relevant, exclude
86
+
87
+ ### Phase 3: REFINE
88
+
89
+ Update search criteria based on evaluation:
90
+
91
+ ```javascript
92
+ function refineQuery(evaluation, previousQuery) {
93
+ return {
94
+ // Add new patterns discovered in high-relevance files
95
+ patterns: [...previousQuery.patterns, ...extractPatterns(evaluation)],
96
+
97
+ // Add terminology found in codebase
98
+ keywords: [...previousQuery.keywords, ...extractKeywords(evaluation)],
99
+
100
+ // Exclude confirmed irrelevant paths
101
+ excludes: [...previousQuery.excludes, ...evaluation
102
+ .filter(e => e.relevance < 0.2)
103
+ .map(e => e.path)
104
+ ],
105
+
106
+ // Target specific gaps
107
+ focusAreas: evaluation
108
+ .flatMap(e => e.missingContext)
109
+ .filter(unique)
110
+ };
111
+ }
112
+ ```
113
+
114
+ ### Phase 4: LOOP
115
+
116
+ Repeat with refined criteria (max 3 cycles):
117
+
118
+ ```javascript
119
+ async function iterativeRetrieve(task, maxCycles = 3) {
120
+ let query = createInitialQuery(task);
121
+ let bestContext = [];
122
+
123
+ for (let cycle = 0; cycle < maxCycles; cycle++) {
124
+ const candidates = await retrieveFiles(query);
125
+ const evaluation = evaluateRelevance(candidates, task);
126
+
127
+ // Check if we have sufficient context
128
+ const highRelevance = evaluation.filter(e => e.relevance >= 0.7);
129
+ if (highRelevance.length >= 3 && !hasCriticalGaps(evaluation)) {
130
+ return highRelevance;
131
+ }
132
+
133
+ // Refine and continue
134
+ query = refineQuery(evaluation, query);
135
+ bestContext = mergeContext(bestContext, highRelevance);
136
+ }
137
+
138
+ return bestContext;
139
+ }
140
+ ```
141
+
142
+ ## Practical Examples
143
+
144
+ ### Example 1: Bug Fix Context
145
+
146
+ ```
147
+ Task: "Fix the authentication token expiry bug"
148
+
149
+ Cycle 1:
150
+ DISPATCH: Search for "token", "auth", "expiry" in src/**
151
+ EVALUATE: Found auth.ts (0.9), tokens.ts (0.8), user.ts (0.3)
152
+ REFINE: Add "refresh", "jwt" keywords; exclude user.ts
153
+
154
+ Cycle 2:
155
+ DISPATCH: Search refined terms
156
+ EVALUATE: Found session-manager.ts (0.95), jwt-utils.ts (0.85)
157
+ REFINE: Sufficient context (2 high-relevance files)
158
+
159
+ Result: auth.ts, tokens.ts, session-manager.ts, jwt-utils.ts
160
+ ```
161
+
162
+ ### Example 2: Feature Implementation
163
+
164
+ ```
165
+ Task: "Add rate limiting to API endpoints"
166
+
167
+ Cycle 1:
168
+ DISPATCH: Search "rate", "limit", "api" in routes/**
169
+ EVALUATE: No matches - codebase uses "throttle" terminology
170
+ REFINE: Add "throttle", "middleware" keywords
171
+
172
+ Cycle 2:
173
+ DISPATCH: Search refined terms
174
+ EVALUATE: Found throttle.ts (0.9), middleware/index.ts (0.7)
175
+ REFINE: Need router patterns
176
+
177
+ Cycle 3:
178
+ DISPATCH: Search "router", "express" patterns
179
+ EVALUATE: Found router-setup.ts (0.8)
180
+ REFINE: Sufficient context
181
+
182
+ Result: throttle.ts, middleware/index.ts, router-setup.ts
183
+ ```
184
+
185
+ ## Integration with Agents
186
+
187
+ Use in agent prompts:
188
+
189
+ ```markdown
190
+ When retrieving context for this task:
191
+ 1. Start with broad keyword search
192
+ 2. Evaluate each file's relevance (0-1 scale)
193
+ 3. Identify what context is still missing
194
+ 4. Refine search criteria and repeat (max 3 cycles)
195
+ 5. Return files with relevance >= 0.7
196
+ ```
197
+
198
+ ## Best Practices
199
+
200
+ 1. **Start broad, narrow progressively** - Don't over-specify initial queries
201
+ 2. **Learn codebase terminology** - First cycle often reveals naming conventions
202
+ 3. **Track what's missing** - Explicit gap identification drives refinement
203
+ 4. **Stop at "good enough"** - 3 high-relevance files beats 10 mediocre ones
204
+ 5. **Exclude confidently** - Low-relevance files won't become relevant
205
+
206
+ ## Related
207
+
208
+ - `continuous-learning` skill - For patterns that improve over time
209
+ - Agent definitions bundled with the toolset (manual install path: `agents/`)