@soleur/opencode 0.0.0-stage → 3.354.2

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 (832) hide show
  1. package/.claude-plugin/agents.manifest.json +476 -0
  2. package/.claude-plugin/plugin.json +42 -0
  3. package/README.md +44 -2
  4. package/agents/community/.gitkeep +0 -0
  5. package/agents/engineering/cto.md +87 -0
  6. package/agents/engineering/design/ddd-architect.md +95 -0
  7. package/agents/engineering/discovery/agent-finder.md +214 -0
  8. package/agents/engineering/discovery/functional-discovery.md +182 -0
  9. package/agents/engineering/infra/infra-security.md +151 -0
  10. package/agents/engineering/infra/platform-strategist.md +109 -0
  11. package/agents/engineering/infra/terraform-architect.md +171 -0
  12. package/agents/engineering/prompt-engineer.md +37 -0
  13. package/agents/engineering/research/best-practices-researcher.md +115 -0
  14. package/agents/engineering/research/framework-docs-researcher.md +93 -0
  15. package/agents/engineering/research/git-history-analyzer.md +53 -0
  16. package/agents/engineering/research/learnings-researcher.md +285 -0
  17. package/agents/engineering/research/repo-research-analyst.md +118 -0
  18. package/agents/engineering/review/agent-native-reviewer.md +279 -0
  19. package/agents/engineering/review/architecture-strategist.md +61 -0
  20. package/agents/engineering/review/code-quality-analyst.md +92 -0
  21. package/agents/engineering/review/code-simplicity-reviewer.md +109 -0
  22. package/agents/engineering/review/data-integrity-guardian.md +82 -0
  23. package/agents/engineering/review/data-migration-expert.md +98 -0
  24. package/agents/engineering/review/deployment-verification-agent.md +183 -0
  25. package/agents/engineering/review/dhh-rails-reviewer.md +46 -0
  26. package/agents/engineering/review/kieran-rails-reviewer.md +87 -0
  27. package/agents/engineering/review/legacy-code-expert.md +55 -0
  28. package/agents/engineering/review/observability-coverage-reviewer.md +147 -0
  29. package/agents/engineering/review/pattern-recognition-specialist.md +59 -0
  30. package/agents/engineering/review/performance-oracle.md +130 -0
  31. package/agents/engineering/review/security-sentinel.md +167 -0
  32. package/agents/engineering/review/semgrep-sast.md +36 -0
  33. package/agents/engineering/review/test-design-reviewer.md +150 -0
  34. package/agents/engineering/review/user-impact-reviewer.md +70 -0
  35. package/agents/engineering/workflow/pr-comment-resolver.md +69 -0
  36. package/agents/finance/budget-analyst.md +29 -0
  37. package/agents/finance/cfo.md +44 -0
  38. package/agents/finance/financial-reporter.md +30 -0
  39. package/agents/finance/revenue-analyst.md +30 -0
  40. package/agents/legal/clo.md +115 -0
  41. package/agents/legal/legal-compliance-auditor.md +110 -0
  42. package/agents/legal/legal-document-generator.md +134 -0
  43. package/agents/marketing/analytics-analyst.md +25 -0
  44. package/agents/marketing/brand-architect.md +181 -0
  45. package/agents/marketing/cmo.md +76 -0
  46. package/agents/marketing/conversion-optimizer.md +19 -0
  47. package/agents/marketing/copywriter.md +20 -0
  48. package/agents/marketing/fact-checker.md +70 -0
  49. package/agents/marketing/growth-strategist.md +145 -0
  50. package/agents/marketing/paid-media-strategist.md +28 -0
  51. package/agents/marketing/pricing-strategist.md +17 -0
  52. package/agents/marketing/programmatic-seo-specialist.md +25 -0
  53. package/agents/marketing/retention-strategist.md +23 -0
  54. package/agents/marketing/seo-aeo-analyst.md +164 -0
  55. package/agents/operations/coo.md +50 -0
  56. package/agents/operations/ops-advisor.md +78 -0
  57. package/agents/operations/ops-provisioner.md +101 -0
  58. package/agents/operations/ops-research.md +52 -0
  59. package/agents/operations/service-automator.md +278 -0
  60. package/agents/product/business-validator.md +206 -0
  61. package/agents/product/competitive-intelligence.md +89 -0
  62. package/agents/product/cpo.md +63 -0
  63. package/agents/product/design/ux-design-lead.md +209 -0
  64. package/agents/product/spec-flow-analyzer.md +122 -0
  65. package/agents/sales/cro.md +44 -0
  66. package/agents/sales/deal-architect.md +29 -0
  67. package/agents/sales/outbound-strategist.md +29 -0
  68. package/agents/sales/pipeline-analyst.md +29 -0
  69. package/agents/support/cco.md +48 -0
  70. package/agents/support/community-manager.md +570 -0
  71. package/agents/support/ticket-triage.md +70 -0
  72. package/bin/soleur-opencode.js +29 -0
  73. package/commands/go.md +660 -0
  74. package/commands/help.md +273 -0
  75. package/commands/sync.md +977 -0
  76. package/commands/version.md +103 -0
  77. package/hooks/antigravity-hooks.json +84 -0
  78. package/hooks/antigravity-session-start.sh +15 -0
  79. package/hooks/bare-root-cwd-guard.sh +131 -0
  80. package/hooks/browser-snapshot-credential-guard.sh +200 -0
  81. package/hooks/codex-session-start.sh +9 -0
  82. package/hooks/compaction-state.sh +525 -0
  83. package/hooks/destructive-command-guard.sh +1387 -0
  84. package/hooks/devin-session-start.sh +90 -0
  85. package/hooks/ext-filter-detect.sh +171 -0
  86. package/hooks/hooks.json +133 -0
  87. package/hooks/lib/hook-tool-kind.sh +24 -0
  88. package/hooks/lib/log-rotation.sh +176 -0
  89. package/hooks/lib/shell-argv.pl +576 -0
  90. package/hooks/memory-backstop.sh +1114 -0
  91. package/hooks/operator-stage-approval.sh +391 -0
  92. package/hooks/stop-hook.sh +367 -0
  93. package/hooks/unkept-promise-hook.sh +383 -0
  94. package/hooks/version-banner.sh +127 -0
  95. package/hooks/welcome-hook.sh +50 -0
  96. package/install.js +29 -0
  97. package/lib/agent-registry.ts +154 -0
  98. package/lib/c4-canonical-cli.mjs +34 -0
  99. package/lib/c4-canonical.mjs +46 -0
  100. package/lib/c4-from-components.ts +554 -0
  101. package/lib/go-routing.ts +81 -0
  102. package/lib/grok-inspect-contract.ts +311 -0
  103. package/lib/harness-model-map.ts +101 -0
  104. package/lib/harness-parity.ts +726 -0
  105. package/lib/harness-tool-map.ts +180 -0
  106. package/lib/harness.ts +716 -0
  107. package/lib/heartbeat-live-reconcile.ts +1153 -0
  108. package/lib/heartbeat-manifest.ts +361 -0
  109. package/lib/kb-coverage.ts +252 -0
  110. package/lib/pr-merge-poll.ts +103 -0
  111. package/lib/workflow-fidelity.ts +388 -0
  112. package/opencode/INSTRUCTIONS.md +171 -0
  113. package/opencode/agents/engineering/cto.md +10 -0
  114. package/opencode/agents/engineering/design/ddd-architect.md +10 -0
  115. package/opencode/agents/engineering/discovery/agent-finder.md +10 -0
  116. package/opencode/agents/engineering/discovery/functional-discovery.md +10 -0
  117. package/opencode/agents/engineering/infra/infra-security.md +10 -0
  118. package/opencode/agents/engineering/infra/platform-strategist.md +10 -0
  119. package/opencode/agents/engineering/infra/terraform-architect.md +10 -0
  120. package/opencode/agents/engineering/prompt-engineer.md +10 -0
  121. package/opencode/agents/engineering/research/best-practices-researcher.md +10 -0
  122. package/opencode/agents/engineering/research/framework-docs-researcher.md +10 -0
  123. package/opencode/agents/engineering/research/git-history-analyzer.md +10 -0
  124. package/opencode/agents/engineering/research/learnings-researcher.md +10 -0
  125. package/opencode/agents/engineering/research/repo-research-analyst.md +10 -0
  126. package/opencode/agents/engineering/review/agent-native-reviewer.md +10 -0
  127. package/opencode/agents/engineering/review/architecture-strategist.md +10 -0
  128. package/opencode/agents/engineering/review/code-quality-analyst.md +10 -0
  129. package/opencode/agents/engineering/review/code-simplicity-reviewer.md +10 -0
  130. package/opencode/agents/engineering/review/data-integrity-guardian.md +10 -0
  131. package/opencode/agents/engineering/review/data-migration-expert.md +10 -0
  132. package/opencode/agents/engineering/review/deployment-verification-agent.md +10 -0
  133. package/opencode/agents/engineering/review/dhh-rails-reviewer.md +10 -0
  134. package/opencode/agents/engineering/review/kieran-rails-reviewer.md +10 -0
  135. package/opencode/agents/engineering/review/legacy-code-expert.md +10 -0
  136. package/opencode/agents/engineering/review/observability-coverage-reviewer.md +10 -0
  137. package/opencode/agents/engineering/review/pattern-recognition-specialist.md +10 -0
  138. package/opencode/agents/engineering/review/performance-oracle.md +10 -0
  139. package/opencode/agents/engineering/review/security-sentinel.md +10 -0
  140. package/opencode/agents/engineering/review/semgrep-sast.md +10 -0
  141. package/opencode/agents/engineering/review/test-design-reviewer.md +10 -0
  142. package/opencode/agents/engineering/review/user-impact-reviewer.md +10 -0
  143. package/opencode/agents/engineering/workflow/pr-comment-resolver.md +10 -0
  144. package/opencode/agents/finance/budget-analyst.md +10 -0
  145. package/opencode/agents/finance/cfo.md +10 -0
  146. package/opencode/agents/finance/financial-reporter.md +10 -0
  147. package/opencode/agents/finance/revenue-analyst.md +10 -0
  148. package/opencode/agents/legal/clo.md +10 -0
  149. package/opencode/agents/legal/legal-compliance-auditor.md +10 -0
  150. package/opencode/agents/legal/legal-document-generator.md +10 -0
  151. package/opencode/agents/marketing/analytics-analyst.md +10 -0
  152. package/opencode/agents/marketing/brand-architect.md +10 -0
  153. package/opencode/agents/marketing/cmo.md +10 -0
  154. package/opencode/agents/marketing/conversion-optimizer.md +10 -0
  155. package/opencode/agents/marketing/copywriter.md +10 -0
  156. package/opencode/agents/marketing/fact-checker.md +10 -0
  157. package/opencode/agents/marketing/growth-strategist.md +10 -0
  158. package/opencode/agents/marketing/paid-media-strategist.md +10 -0
  159. package/opencode/agents/marketing/pricing-strategist.md +10 -0
  160. package/opencode/agents/marketing/programmatic-seo-specialist.md +10 -0
  161. package/opencode/agents/marketing/retention-strategist.md +10 -0
  162. package/opencode/agents/marketing/seo-aeo-analyst.md +10 -0
  163. package/opencode/agents/operations/coo.md +10 -0
  164. package/opencode/agents/operations/ops-advisor.md +10 -0
  165. package/opencode/agents/operations/ops-provisioner.md +10 -0
  166. package/opencode/agents/operations/ops-research.md +10 -0
  167. package/opencode/agents/operations/service-automator.md +10 -0
  168. package/opencode/agents/product/business-validator.md +10 -0
  169. package/opencode/agents/product/competitive-intelligence.md +10 -0
  170. package/opencode/agents/product/cpo.md +10 -0
  171. package/opencode/agents/product/design/ux-design-lead.md +10 -0
  172. package/opencode/agents/product/spec-flow-analyzer.md +10 -0
  173. package/opencode/agents/sales/cro.md +10 -0
  174. package/opencode/agents/sales/deal-architect.md +10 -0
  175. package/opencode/agents/sales/outbound-strategist.md +10 -0
  176. package/opencode/agents/sales/pipeline-analyst.md +10 -0
  177. package/opencode/agents/support/cco.md +10 -0
  178. package/opencode/agents/support/community-manager.md +10 -0
  179. package/opencode/agents/support/ticket-triage.md +10 -0
  180. package/opencode/commands/go.md +10 -0
  181. package/opencode/commands/help.md +10 -0
  182. package/opencode/commands/sync.md +10 -0
  183. package/opencode/commands/version.md +11 -0
  184. package/opencode/opencode.json +8 -0
  185. package/opencode/plugin.ts +818 -0
  186. package/package.json +36 -4
  187. package/scripts/admin-merge-ready.sh +545 -0
  188. package/scripts/admin-merge-ready.test.sh +753 -0
  189. package/scripts/affected-tests.sh +908 -0
  190. package/scripts/affected-tests.test.sh +1797 -0
  191. package/scripts/alpha-metrics.sh +78 -0
  192. package/scripts/alpha-metrics.test.sh +115 -0
  193. package/scripts/ancestor-signal-helpers.baseline.txt +16 -0
  194. package/scripts/audit-flag-flip.sh +107 -0
  195. package/scripts/check-red-on-main.sh +316 -0
  196. package/scripts/ci-head-verdict.sh +411 -0
  197. package/scripts/cloud-detect.sh +193 -0
  198. package/scripts/delegation-verify.sh +657 -0
  199. package/scripts/delegation-verify.test.sh +1424 -0
  200. package/scripts/deploy-arm.sh +475 -0
  201. package/scripts/domain-model-drift.sh +419 -0
  202. package/scripts/emit-decision.sh +144 -0
  203. package/scripts/emit-decision.test.sh +144 -0
  204. package/scripts/ext-filter-divergence-corpus.txt +15 -0
  205. package/scripts/ext-filter-divergence.sh +189 -0
  206. package/scripts/generate-c4-from-components.ts +442 -0
  207. package/scripts/grok-fidelity-gate.sh +68 -0
  208. package/scripts/grok-pre-push-gate.sh +232 -0
  209. package/scripts/harness-discovery-smoke.ts +906 -0
  210. package/scripts/harness-parity-census.ts +92 -0
  211. package/scripts/inngest-luks-alert-armed-probe.ts +29 -0
  212. package/scripts/install-opencode-adapter.ts +509 -0
  213. package/scripts/lib/affected-tests/common.sh +365 -0
  214. package/scripts/lib/affected-tests/go.sh +157 -0
  215. package/scripts/lib/affected-tests/js.sh +188 -0
  216. package/scripts/lib/affected-tests/nx-turbo.sh +98 -0
  217. package/scripts/lib/affected-tests/python.sh +185 -0
  218. package/scripts/lib/context-sanitize.sh +49 -0
  219. package/scripts/lib/domain-model-lib.sh +180 -0
  220. package/scripts/lib/ext-filter-grammar.tsv +34 -0
  221. package/scripts/lib/operator-script.sh +1236 -0
  222. package/scripts/lib/proc.sh +580 -0
  223. package/scripts/lib/session-state.sh +748 -0
  224. package/scripts/lib/tmp-classify.sh +843 -0
  225. package/scripts/lib/wrapper-boundary.sh +47 -0
  226. package/scripts/lint-ratchet.py +1547 -0
  227. package/scripts/monitor-pr-checks.sh +441 -0
  228. package/scripts/pipeline-tally.sh +756 -0
  229. package/scripts/pipeline-tally.test.sh +740 -0
  230. package/scripts/plugin-version.sh +528 -0
  231. package/scripts/precommit-guard.sh +115 -0
  232. package/scripts/precommit-guard.test.sh +254 -0
  233. package/scripts/reconcile-live-heartbeats.ts +705 -0
  234. package/scripts/render-c4-model.sh +217 -0
  235. package/scripts/resolve-git-root.sh +55 -0
  236. package/scripts/resolve-regenerable-conflicts.sh +363 -0
  237. package/scripts/resolve-regenerable-conflicts.test.sh +780 -0
  238. package/scripts/ruff-requirements.txt +22 -0
  239. package/scripts/run-in-pid-namespace.sh +98 -0
  240. package/scripts/run-in-pid-namespace.test.sh +290 -0
  241. package/scripts/scan-ancestor-signal-helpers.py +556 -0
  242. package/scripts/scan-ancestor-signal-helpers.test.sh +670 -0
  243. package/scripts/setup-ralph-loop.sh +238 -0
  244. package/scripts/sync-cursor-name-map.ts +316 -0
  245. package/scripts/sync-grok-agent-compat.ts +188 -0
  246. package/scripts/sync-npm-package.ts +165 -0
  247. package/scripts/sync-opencode-adapter.ts +498 -0
  248. package/scripts/sync-pr-behind.sh +647 -0
  249. package/scripts/sync-pr-behind.test.sh +252 -0
  250. package/scripts/taste-profile-update.sh +180 -0
  251. package/scripts/taste-profile-update.test.sh +167 -0
  252. package/scripts/write-budget-marker.sh +23 -0
  253. package/scripts/write-kb-coverage.ts +113 -0
  254. package/skills/admin-ip-refresh/SKILL.md +81 -0
  255. package/skills/admin-ip-refresh/references/admin-ip-refresh-procedure.md +201 -0
  256. package/skills/agent-browser/SKILL.md +698 -0
  257. package/skills/agent-browser/scripts/playwright-mcp-profile-slot.sh +304 -0
  258. package/skills/agent-browser/scripts/playwright-mcp-redact-proxy.py +964 -0
  259. package/skills/agent-browser/scripts/redact-a11y-snapshot.py +443 -0
  260. package/skills/agent-browser/test/fixtures/capture-playwright-mcp-fixtures.py +217 -0
  261. package/skills/agent-browser/test/fixtures/fake-passthrough-proxy.py +24 -0
  262. package/skills/agent-browser/test/fixtures/fake-playwright-mcp.py +131 -0
  263. package/skills/agent-browser/test/fixtures/make-proxy-mutant.py +48 -0
  264. package/skills/agent-browser/test/fixtures/odd-shapes/dialog-link-injection.json +10 -0
  265. package/skills/agent-browser/test/fixtures/odd-shapes/empty-content.json +5 -0
  266. package/skills/agent-browser/test/fixtures/odd-shapes/error-and-result.json +4 -0
  267. package/skills/agent-browser/test/fixtures/odd-shapes/error-code-bool.json +6 -0
  268. package/skills/agent-browser/test/fixtures/odd-shapes/error-code-string.json +6 -0
  269. package/skills/agent-browser/test/fixtures/odd-shapes/error-message-tree.json +6 -0
  270. package/skills/agent-browser/test/fixtures/odd-shapes/error-no-data.json +6 -0
  271. package/skills/agent-browser/test/fixtures/odd-shapes/error-string.json +4 -0
  272. package/skills/agent-browser/test/fixtures/odd-shapes/error-with-data.json +9 -0
  273. package/skills/agent-browser/test/fixtures/odd-shapes/evaluate-escaped-object.json +10 -0
  274. package/skills/agent-browser/test/fixtures/odd-shapes/invalid-utf8.json +4 -0
  275. package/skills/agent-browser/test/fixtures/odd-shapes/link-result.json +10 -0
  276. package/skills/agent-browser/test/fixtures/odd-shapes/list-two-results.json +6 -0
  277. package/skills/agent-browser/test/fixtures/odd-shapes/meta-in-result.json +13 -0
  278. package/skills/agent-browser/test/fixtures/odd-shapes/no-content.json +5 -0
  279. package/skills/agent-browser/test/fixtures/odd-shapes/quoted-key.json +10 -0
  280. package/skills/agent-browser/test/fixtures/odd-shapes/resource-block.json +18 -0
  281. package/skills/agent-browser/test/fixtures/odd-shapes/result-and-method.json +11 -0
  282. package/skills/agent-browser/test/fixtures/odd-shapes/result-string.json +3 -0
  283. package/skills/agent-browser/test/fixtures/odd-shapes/run-code-escaped-one-row.json +10 -0
  284. package/skills/agent-browser/test/fixtures/odd-shapes/run-code-escaped.json +10 -0
  285. package/skills/agent-browser/test/fixtures/odd-shapes/structured-content.json +13 -0
  286. package/skills/agent-browser/test/fixtures/odd-shapes/tools-list-no-tools.json +5 -0
  287. package/skills/agent-browser/test/fixtures/odd-shapes/tree-no-credential.json +10 -0
  288. package/skills/agent-browser/test/fixtures/odd-shapes/two-text-blocks.json +14 -0
  289. package/skills/agent-browser/test/fixtures/odd-shapes/unparsable-line.json +3 -0
  290. package/skills/agent-browser/test/fixtures/odd-shapes/value-contains-brace.json +10 -0
  291. package/skills/agent-browser/test/fixtures/odd-shapes/value-contains-link-substring.json +10 -0
  292. package/skills/agent-browser/test/fixtures/playwright-mcp-0.0.78/close.json +12 -0
  293. package/skills/agent-browser/test/fixtures/playwright-mcp-0.0.78/evaluate.json +12 -0
  294. package/skills/agent-browser/test/fixtures/playwright-mcp-0.0.78/find.json +12 -0
  295. package/skills/agent-browser/test/fixtures/playwright-mcp-0.0.78/framing.json +6 -0
  296. package/skills/agent-browser/test/fixtures/playwright-mcp-0.0.78/initialize.json +14 -0
  297. package/skills/agent-browser/test/fixtures/playwright-mcp-0.0.78/navigate-link.json +12 -0
  298. package/skills/agent-browser/test/fixtures/playwright-mcp-0.0.78/navigate.json +12 -0
  299. package/skills/agent-browser/test/fixtures/playwright-mcp-0.0.78/roots-list-request.json +5 -0
  300. package/skills/agent-browser/test/fixtures/playwright-mcp-0.0.78/screenshot.json +17 -0
  301. package/skills/agent-browser/test/fixtures/playwright-mcp-0.0.78/snapshot-filename.json +12 -0
  302. package/skills/agent-browser/test/fixtures/playwright-mcp-0.0.78/snapshot-meta-json.json +12 -0
  303. package/skills/agent-browser/test/fixtures/playwright-mcp-0.0.78/snapshot-meta-raw.json +12 -0
  304. package/skills/agent-browser/test/fixtures/playwright-mcp-0.0.78/snapshot.json +12 -0
  305. package/skills/agent-browser/test/fixtures/playwright-mcp-0.0.78/tools-list.json +827 -0
  306. package/skills/agent-browser/test/fixtures/proxy-session-driver.py +138 -0
  307. package/skills/agent-browser/test/fixtures/session-facts.py +102 -0
  308. package/skills/agent-browser/test/playwright-mcp-lifetime.test.sh +1620 -0
  309. package/skills/agent-browser/test/playwright-mcp-redact-proxy.test.sh +1599 -0
  310. package/skills/agent-browser/test/redact-a11y-snapshot.test.sh +527 -0
  311. package/skills/agent-native-architecture/SKILL.md +479 -0
  312. package/skills/agent-native-architecture/references/action-parity-discipline.md +430 -0
  313. package/skills/agent-native-architecture/references/agent-execution-patterns.md +483 -0
  314. package/skills/agent-native-architecture/references/agent-native-testing.md +605 -0
  315. package/skills/agent-native-architecture/references/architecture-patterns.md +493 -0
  316. package/skills/agent-native-architecture/references/dynamic-context-injection.md +358 -0
  317. package/skills/agent-native-architecture/references/files-universal-interface.md +314 -0
  318. package/skills/agent-native-architecture/references/from-primitives-to-domain-tools.md +381 -0
  319. package/skills/agent-native-architecture/references/mcp-tool-design.md +524 -0
  320. package/skills/agent-native-architecture/references/mobile-patterns.md +897 -0
  321. package/skills/agent-native-architecture/references/product-implications.md +478 -0
  322. package/skills/agent-native-architecture/references/refactoring-to-prompt-native.md +342 -0
  323. package/skills/agent-native-architecture/references/self-modification.md +294 -0
  324. package/skills/agent-native-architecture/references/shared-workspace-architecture.md +700 -0
  325. package/skills/agent-native-architecture/references/system-prompt-design.md +263 -0
  326. package/skills/agent-native-audit/SKILL.md +300 -0
  327. package/skills/agent-native-audit/workflows/agent-native-audit.workflow.js +423 -0
  328. package/skills/andrew-kane-gem-writer/SKILL.md +189 -0
  329. package/skills/andrew-kane-gem-writer/references/database-adapters.md +231 -0
  330. package/skills/andrew-kane-gem-writer/references/module-organization.md +121 -0
  331. package/skills/andrew-kane-gem-writer/references/rails-integration.md +183 -0
  332. package/skills/andrew-kane-gem-writer/references/resources.md +126 -0
  333. package/skills/andrew-kane-gem-writer/references/testing-patterns.md +261 -0
  334. package/skills/architecture/SKILL.md +436 -0
  335. package/skills/architecture/references/adr-template.md +154 -0
  336. package/skills/architecture/references/likec4-reference.md +136 -0
  337. package/skills/architecture/references/nfr-reference.md +126 -0
  338. package/skills/archive-kb/SKILL.md +86 -0
  339. package/skills/archive-kb/scripts/archive-kb.sh +300 -0
  340. package/skills/archive-kb/test/archive-kb-partial-run.test.sh +276 -0
  341. package/skills/atdd-developer/SKILL.md +65 -0
  342. package/skills/brainstorm/SKILL.md +701 -0
  343. package/skills/brainstorm/references/brainstorm-brand-workshop.md +153 -0
  344. package/skills/brainstorm/references/brainstorm-domain-config.md +63 -0
  345. package/skills/brainstorm/references/brainstorm-validation-workshop.md +65 -0
  346. package/skills/brainstorm/references/ui-surface-terms.md +42 -0
  347. package/skills/brainstorm-techniques/SKILL.md +231 -0
  348. package/skills/brainstorm-techniques/references/decision-principles.md +150 -0
  349. package/skills/brainstorm-techniques/references/phase-boundaries.md +103 -0
  350. package/skills/brainstorm-techniques/references/standing-delegation.md +407 -0
  351. package/skills/brainstorm-techniques/references/technical-ruling-delegation.md +174 -0
  352. package/skills/campaign-calendar/SKILL.md +145 -0
  353. package/skills/cf-token-scope/SKILL.md +164 -0
  354. package/skills/cf-token-scope/references/widen-playbook.md +114 -0
  355. package/skills/cf-token-scope/scripts/cf-token-scope.sh +253 -0
  356. package/skills/changelog/SKILL.md +142 -0
  357. package/skills/code-to-prd/SKILL.md +66 -0
  358. package/skills/code-to-prd/references/banner-template.md +12 -0
  359. package/skills/code-to-prd/references/prd-template.md +41 -0
  360. package/skills/code-to-prd/scripts/code-to-prd.sh +634 -0
  361. package/skills/code-to-prd/test/code-to-prd.test.sh +447 -0
  362. package/skills/code-to-prd/test/fixture/.env.example +7 -0
  363. package/skills/code-to-prd/test/fixture/app/about/page.tsx +11 -0
  364. package/skills/code-to-prd/test/fixture/app/api/health/route.ts +10 -0
  365. package/skills/code-to-prd/test/fixture/app/page.tsx +14 -0
  366. package/skills/code-to-prd/test/fixture/next.config.mjs +3 -0
  367. package/skills/code-to-prd/test/fixture/package.json +6 -0
  368. package/skills/cohort-status/SKILL.md +62 -0
  369. package/skills/community/SKILL.md +210 -0
  370. package/skills/community/scripts/bsky-community.sh +644 -0
  371. package/skills/community/scripts/bsky-setup.sh +631 -0
  372. package/skills/community/scripts/community-router.sh +93 -0
  373. package/skills/community/scripts/discord-community.sh +487 -0
  374. package/skills/community/scripts/discord-setup.sh +784 -0
  375. package/skills/community/scripts/github-community.sh +706 -0
  376. package/skills/community/scripts/hn-community.sh +233 -0
  377. package/skills/community/scripts/lib/hmac-sha1-b64.sh +126 -0
  378. package/skills/community/scripts/linkedin-community.sh +750 -0
  379. package/skills/community/scripts/linkedin-setup.sh +758 -0
  380. package/skills/community/scripts/x-community.sh +890 -0
  381. package/skills/community/scripts/x-setup.sh +713 -0
  382. package/skills/community/test/community-argv.test.sh +2922 -0
  383. package/skills/community/test/github-community.test.sh +981 -0
  384. package/skills/competitive-analysis/SKILL.md +69 -0
  385. package/skills/competitive-analysis/references/peer-plugin-audit.md +218 -0
  386. package/skills/compound/SKILL.md +673 -0
  387. package/skills/compound/scripts/token-efficiency-report.sh +334 -0
  388. package/skills/compound/test/phase-16.test.sh +379 -0
  389. package/skills/compound-capture/SKILL.md +791 -0
  390. package/skills/compound-capture/assets/critical-pattern-template.md +37 -0
  391. package/skills/compound-capture/assets/resolution-template.md +116 -0
  392. package/skills/compound-capture/references/yaml-schema.md +67 -0
  393. package/skills/compound-capture/schema.yaml +181 -0
  394. package/skills/constraint-scaffold/SKILL.md +175 -0
  395. package/skills/constraint-scaffold/references/boundary-readme.template +35 -0
  396. package/skills/constraint-scaffold/references/constraint-gates-workflow.template +69 -0
  397. package/skills/constraint-scaffold/references/depcruise-config.template +230 -0
  398. package/skills/constraint-scaffold/references/fix-constraints-stage-a.template +240 -0
  399. package/skills/constraint-scaffold/references/fix-constraints-stage-b.template +313 -0
  400. package/skills/constraint-scaffold/references/shared-runner.template +135 -0
  401. package/skills/constraint-scaffold/scripts/constraint-scaffold.sh +589 -0
  402. package/skills/constraint-scaffold/test/bite-proof.test.sh +1338 -0
  403. package/skills/constraint-scaffold/test/boundary.test.sh +734 -0
  404. package/skills/constraint-scaffold/test/emit-fix-constraints.test.sh +193 -0
  405. package/skills/constraint-scaffold/test/generator.test.sh +93 -0
  406. package/skills/constraint-scaffold/test/parity.test.sh +285 -0
  407. package/skills/content-writer/SKILL.md +242 -0
  408. package/skills/content-writer/scripts/blog-jargon-scan.sh +42 -0
  409. package/skills/cron-delete/SKILL.md +56 -0
  410. package/skills/cron-list/SKILL.md +54 -0
  411. package/skills/deepen-plan/SKILL.md +937 -0
  412. package/skills/deepen-plan/workflows/deepen-plan.workflow.js +488 -0
  413. package/skills/deploy/SKILL.md +115 -0
  414. package/skills/deploy/references/hetzner-setup.md +67 -0
  415. package/skills/deploy/scripts/deploy.sh +37 -0
  416. package/skills/deploy-docs/SKILL.md +95 -0
  417. package/skills/dhh-rails-style/SKILL.md +203 -0
  418. package/skills/dhh-rails-style/references/architecture.md +717 -0
  419. package/skills/dhh-rails-style/references/controllers.md +323 -0
  420. package/skills/dhh-rails-style/references/frontend.md +556 -0
  421. package/skills/dhh-rails-style/references/gems.md +316 -0
  422. package/skills/dhh-rails-style/references/models.md +388 -0
  423. package/skills/dhh-rails-style/references/testing.md +354 -0
  424. package/skills/discord-content/SKILL.md +126 -0
  425. package/skills/docs-site/SKILL.md +214 -0
  426. package/skills/drain-labeled-backlog/SKILL.md +203 -0
  427. package/skills/drain-labeled-backlog/scripts/group-by-area.sh +208 -0
  428. package/skills/drain-labeled-backlog/workflows/drain-labeled-backlog.workflow.js +433 -0
  429. package/skills/drain-prs/SKILL.md +143 -0
  430. package/skills/drain-prs/scripts/triage-prs.sh +192 -0
  431. package/skills/drain-prs/test/argv-ceiling.test.sh +183 -0
  432. package/skills/dspy-ruby/SKILL.md +634 -0
  433. package/skills/dspy-ruby/assets/config-template.rb +359 -0
  434. package/skills/dspy-ruby/assets/module-template.rb +326 -0
  435. package/skills/dspy-ruby/assets/signature-template.rb +143 -0
  436. package/skills/dspy-ruby/references/core-concepts.md +268 -0
  437. package/skills/dspy-ruby/references/optimization.md +623 -0
  438. package/skills/dspy-ruby/references/providers.md +335 -0
  439. package/skills/eval-harness/README.md +194 -0
  440. package/skills/eval-harness/SKILL.md +157 -0
  441. package/skills/eval-harness/enums/go-routes.json +13 -0
  442. package/skills/eval-harness/enums/incident-threshold.json +5 -0
  443. package/skills/eval-harness/enums/lane.json +5 -0
  444. package/skills/eval-harness/enums/tool-selection.json +20 -0
  445. package/skills/eval-harness/enums/triage-levels.json +5 -0
  446. package/skills/eval-harness/gated-skills.json +34 -0
  447. package/skills/eval-harness/models.generated.json +5 -0
  448. package/skills/eval-harness/promptfooconfig-go-routing.yaml +35 -0
  449. package/skills/eval-harness/promptfooconfig-incident-threshold.yaml +32 -0
  450. package/skills/eval-harness/promptfooconfig-lane-inference.yaml +33 -0
  451. package/skills/eval-harness/promptfooconfig-ticket-triage.yaml +34 -0
  452. package/skills/eval-harness/promptfooconfig-tool-selection.yaml +33 -0
  453. package/skills/eval-harness/prompts/go-baseline.txt +6 -0
  454. package/skills/eval-harness/prompts/go-skill.txt +21 -0
  455. package/skills/eval-harness/prompts/incident-threshold-baseline.txt +6 -0
  456. package/skills/eval-harness/prompts/incident-threshold-skill.txt +12 -0
  457. package/skills/eval-harness/prompts/lane-inference-baseline.txt +6 -0
  458. package/skills/eval-harness/prompts/lane-inference-skill.txt +15 -0
  459. package/skills/eval-harness/prompts/tool-selection-baseline.txt +19 -0
  460. package/skills/eval-harness/prompts/tool-selection-skill.txt +22 -0
  461. package/skills/eval-harness/prompts/triage-baseline.txt +7 -0
  462. package/skills/eval-harness/prompts/triage-skill.txt +10 -0
  463. package/skills/eval-harness/scripts/eval-gate.cjs +318 -0
  464. package/skills/eval-harness/scripts/extract-block.cjs +87 -0
  465. package/skills/eval-harness/scripts/gate-classification.cjs +28 -0
  466. package/skills/eval-harness/scripts/gen-models.sh +41 -0
  467. package/skills/eval-harness/scripts/gen-skill-prompt.cjs +177 -0
  468. package/skills/eval-harness/scripts/measure-classification.cjs +30 -0
  469. package/skills/eval-harness/scripts/parse-label.cjs +93 -0
  470. package/skills/eval-harness/scripts/verdict.cjs +132 -0
  471. package/skills/eval-harness/tasks/go-routing.jsonl +8 -0
  472. package/skills/eval-harness/tasks/incident-threshold.jsonl +7 -0
  473. package/skills/eval-harness/tasks/lane-inference.jsonl +7 -0
  474. package/skills/eval-harness/tasks/ticket-triage.jsonl +6 -0
  475. package/skills/eval-harness/tasks/tool-selection.jsonl +15 -0
  476. package/skills/eval-harness/test/eval-gate.test.sh +132 -0
  477. package/skills/eval-harness/test/extract-block.test.sh +87 -0
  478. package/skills/eval-harness/test/gate-classification.test.sh +77 -0
  479. package/skills/eval-harness/test/gen-models.test.sh +75 -0
  480. package/skills/eval-harness/test/measure-classification.test.sh +74 -0
  481. package/skills/eval-harness/test/parse-label.test.sh +129 -0
  482. package/skills/eval-harness/test/registry-completeness.test.sh +109 -0
  483. package/skills/eval-harness/test/verdict.test.sh +123 -0
  484. package/skills/every-style-editor/SKILL.md +142 -0
  485. package/skills/every-style-editor/references/EVERY_WRITE_STYLE.md +529 -0
  486. package/skills/feature-tweet/SKILL.md +199 -0
  487. package/skills/feature-video/SKILL.md +412 -0
  488. package/skills/feature-video/scripts/check_deps.sh +281 -0
  489. package/skills/file-todos/SKILL.md +267 -0
  490. package/skills/file-todos/assets/todo-template.md +166 -0
  491. package/skills/fix-issue/SKILL.md +278 -0
  492. package/skills/fix-issue/references/agent-authored-exclusion.md +120 -0
  493. package/skills/fix-issue/references/exclude-label-jq-snippet.md +97 -0
  494. package/skills/flag-bootstrap/SETUP.md +142 -0
  495. package/skills/flag-create/SKILL.md +145 -0
  496. package/skills/flag-create/scripts/create.sh +273 -0
  497. package/skills/flag-delete/SKILL.md +167 -0
  498. package/skills/flag-delete/scripts/delete.sh +288 -0
  499. package/skills/flag-list/SKILL.md +99 -0
  500. package/skills/flag-list/scripts/list.sh +275 -0
  501. package/skills/flag-set-role/SKILL.md +229 -0
  502. package/skills/flag-set-role/scripts/flip.sh +774 -0
  503. package/skills/frontend-anti-slop/SKILL.md +106 -0
  504. package/skills/frontend-anti-slop/references/anti-patterns.md +199 -0
  505. package/skills/frontend-anti-slop/references/slop-rules.md +65 -0
  506. package/skills/frontend-anti-slop/scripts/tier1-scan.ts +525 -0
  507. package/skills/frontend-design/SKILL.md +77 -0
  508. package/skills/gdpr-gate/NOTICE +136 -0
  509. package/skills/gdpr-gate/SKILL.md +341 -0
  510. package/skills/gdpr-gate/references/fields.md +160 -0
  511. package/skills/gdpr-gate/references/layers/api-layer.md +355 -0
  512. package/skills/gdpr-gate/references/layers/auth-sessions.md +290 -0
  513. package/skills/gdpr-gate/references/layers/data-in-transit.md +331 -0
  514. package/skills/gdpr-gate/references/layers/data-lifecycle.md +341 -0
  515. package/skills/gdpr-gate/references/layers/frontend.md +249 -0
  516. package/skills/gdpr-gate/references/layers/testing-seeding.md +256 -0
  517. package/skills/gdpr-gate/references/leakage-vectors.md +248 -0
  518. package/skills/gdpr-gate/references/legacy/legal-consent-v1-prose.md +48 -0
  519. package/skills/gdpr-gate/references/legal-consent.md +140 -0
  520. package/skills/gdpr-gate/references/non-negotiables.md +60 -0
  521. package/skills/gdpr-gate/scripts/gdpr-gate.sh +271 -0
  522. package/skills/gdpr-gate/scripts/notice-frontmatter.sh +337 -0
  523. package/skills/gdpr-gate/scripts/path-denylist.txt +39 -0
  524. package/skills/gdpr-gate/scripts/repo-scan.sh +158 -0
  525. package/skills/gdpr-gate/scripts/vendor-drift-classify.sh +120 -0
  526. package/skills/gdpr-gate/scripts/vendor-pin-integrity.sh +237 -0
  527. package/skills/gemini-imagegen/SKILL.md +283 -0
  528. package/skills/gemini-imagegen/requirements.txt +5 -0
  529. package/skills/gemini-imagegen/scripts/_error_handling.py +146 -0
  530. package/skills/gemini-imagegen/scripts/compose_images.py +150 -0
  531. package/skills/gemini-imagegen/scripts/edit_image.py +137 -0
  532. package/skills/gemini-imagegen/scripts/gemini_images.py +256 -0
  533. package/skills/gemini-imagegen/scripts/generate_image.py +147 -0
  534. package/skills/gemini-imagegen/scripts/multi_turn_chat.py +223 -0
  535. package/skills/gemini-imagegen/scripts/test_error_handling.py +179 -0
  536. package/skills/git-worktree/SKILL.md +534 -0
  537. package/skills/git-worktree/scripts/git-repo-readiness-diag.sh +98 -0
  538. package/skills/git-worktree/scripts/worktree-manager.sh +4773 -0
  539. package/skills/git-worktree/test/create-from-origin-main.test.sh +116 -0
  540. package/skills/git-worktree/test/lease-protects-active.test.sh +1056 -0
  541. package/skills/git-worktree/test/no-repo-fail-loud.test.sh +88 -0
  542. package/skills/git-worktree/test/orphan-reaper-honest-count.test.sh +379 -0
  543. package/skills/git-worktree/test/reap-archive-persistence.test.sh +725 -0
  544. package/skills/git-worktree/test/stale-lock-sweep.test.sh +176 -0
  545. package/skills/go/SKILL.md +54 -0
  546. package/skills/growth/SKILL.md +164 -0
  547. package/skills/harvest-debt/SKILL.md +78 -0
  548. package/skills/harvest-debt/scripts/harvest-debt.sh +114 -0
  549. package/skills/heal-skill/SKILL.md +173 -0
  550. package/skills/help/SKILL.md +46 -0
  551. package/skills/incident/NOTICE +39 -0
  552. package/skills/incident/SKILL.md +395 -0
  553. package/skills/incident/scripts/dry-run.sh +448 -0
  554. package/skills/incident/scripts/redact-engine.py +412 -0
  555. package/skills/incident/scripts/redact-sentinel.sh +44 -0
  556. package/skills/incident/templates/pir.md +139 -0
  557. package/skills/incident/test/fixtures/dry-run-incident.json +26 -0
  558. package/skills/incident/test/fixtures/dry-run-secret-leak.json +26 -0
  559. package/skills/incident/test/fixtures/legacy-bash-scanner.sh +82 -0
  560. package/skills/incident/test/fixtures/positive-corpus.md +87 -0
  561. package/skills/incident/test/redact-sentinel.test.sh +1420 -0
  562. package/skills/invoice/SKILL.md +206 -0
  563. package/skills/kb-glossary/SKILL.md +71 -0
  564. package/skills/kb-glossary/references/glossary-format.md +111 -0
  565. package/skills/kb-glossary/references/rejected-request-register.md +115 -0
  566. package/skills/kb-search/SKILL.md +276 -0
  567. package/skills/kb-search/scripts/kb-search-cache.sh +123 -0
  568. package/skills/legal-audit/SKILL.md +161 -0
  569. package/skills/legal-generate/NOTICE +242 -0
  570. package/skills/legal-generate/SKILL.md +244 -0
  571. package/skills/legal-generate/references/templates/advisor-agreement/template.md +12 -0
  572. package/skills/legal-generate/references/templates/business-associate-agreement/template.md +112 -0
  573. package/skills/legal-generate/references/templates/cookie-notice/template.md +82 -0
  574. package/skills/legal-generate/references/templates/dpa-global/template.md +439 -0
  575. package/skills/legal-generate/references/templates/dpa-us/template.md +222 -0
  576. package/skills/legal-generate/references/templates/employee-offer-letter/template.md +75 -0
  577. package/skills/legal-generate/references/templates/master-services-agreement/template.md +252 -0
  578. package/skills/legal-generate/references/templates/mutual-nda/template.md +66 -0
  579. package/skills/legal-generate/references/templates/one-way-nda/template.md +38 -0
  580. package/skills/legal-generate/references/templates/privacy-policy-gdpr/template.md +427 -0
  581. package/skills/legal-generate/references/templates/privacy-policy-us/template.md +313 -0
  582. package/skills/legal-generate/references/templates/terms-of-use/template.md +75 -0
  583. package/skills/legal-generate/scripts/strip-vendor-credit.sh +96 -0
  584. package/skills/linear-fetch/SKILL.md +247 -0
  585. package/skills/linear-fetch/scripts/assert-no-linear-telemetry.sh +66 -0
  586. package/skills/linear-fetch/scripts/redact-linear-urls.sh +51 -0
  587. package/skills/linear-fetch/scripts/render-caller-template.sh +36 -0
  588. package/skills/linear-fetch/test/assert-no-linear-telemetry.test.sh +113 -0
  589. package/skills/linear-fetch/test/parity.test.sh +112 -0
  590. package/skills/linear-fetch/test/persist-safe-integration.test.sh +191 -0
  591. package/skills/linear-fetch/test/redact-linear-urls.test.sh +226 -0
  592. package/skills/merge-pr/SKILL.md +670 -0
  593. package/skills/model-launch-review/SKILL.md +255 -0
  594. package/skills/model-launch-review/scripts/audit-models.sh +501 -0
  595. package/skills/one-shot/SKILL.md +316 -0
  596. package/skills/one-shot/references/token-discipline.md +74 -0
  597. package/skills/operator-bootstrap/SKILL.md +412 -0
  598. package/skills/operator-bootstrap/template.sh +439 -0
  599. package/skills/operator-digest/SKILL.md +287 -0
  600. package/skills/operator-digest/assets/operator-digest.workflow.yml +175 -0
  601. package/skills/operator-digest/scripts/digest-scrub.sh +119 -0
  602. package/skills/operator-digest/scripts/provision-operator-digest-repo.sh +147 -0
  603. package/skills/operator-rephrase/SKILL.md +98 -0
  604. package/skills/pencil-setup/SKILL.md +201 -0
  605. package/skills/pencil-setup/scripts/check_deps.sh +556 -0
  606. package/skills/pencil-setup/scripts/copy_adapter.sh +80 -0
  607. package/skills/pencil-setup/scripts/package-lock.json +1172 -0
  608. package/skills/pencil-setup/scripts/package.json +14 -0
  609. package/skills/pencil-setup/scripts/pencil-error-enrichment.mjs +21 -0
  610. package/skills/pencil-setup/scripts/pencil-mcp-adapter.mjs +733 -0
  611. package/skills/pencil-setup/scripts/pencil-response-classify.mjs +38 -0
  612. package/skills/pencil-setup/scripts/pencil-save-gate.mjs +26 -0
  613. package/skills/pencil-setup/scripts/sanitize-filename.mjs +25 -0
  614. package/skills/plan/SKILL.md +1140 -0
  615. package/skills/plan/references/differential-migration-testing.md +185 -0
  616. package/skills/plan/references/plan-community-discovery.md +42 -0
  617. package/skills/plan/references/plan-founder-check.md +137 -0
  618. package/skills/plan/references/plan-functional-overlap.md +25 -0
  619. package/skills/plan/references/plan-host-fanout.md +51 -0
  620. package/skills/plan/references/plan-issue-templates.md +779 -0
  621. package/skills/plan/references/plan-network-outage-checklist.md +131 -0
  622. package/skills/plan/references/plan-scope-check.md +126 -0
  623. package/skills/plan/references/plan-sharp-edges.md +331 -0
  624. package/skills/plan/references/plan-signoff-lifecycle.md +12 -0
  625. package/skills/plan/references/webapp-cwv-observability.md +143 -0
  626. package/skills/plan-review/SKILL.md +91 -0
  627. package/skills/plan-review/lib/named-panel.mjs +58 -0
  628. package/skills/plan-review/workflows/plan-review.workflow.js +477 -0
  629. package/skills/postmerge/SKILL.md +642 -0
  630. package/skills/postmerge/references/deploy-status-debugging.md +141 -0
  631. package/skills/postmerge/references/graceful-degradation.md +20 -0
  632. package/skills/postmerge/references/sentry-error-count-delta.md +137 -0
  633. package/skills/preflight/SKILL.md +1553 -0
  634. package/skills/preflight/references/check-13-founder-check.md +286 -0
  635. package/skills/preflight/scripts/founder-check.py +1640 -0
  636. package/skills/preflight/scripts/parse-form-a.awk +107 -0
  637. package/skills/preflight/scripts/probe-verb-gate.sh +108 -0
  638. package/skills/product-roadmap/SKILL.md +357 -0
  639. package/skills/product-roadmap/scripts/roadmap-reconcile.sh +327 -0
  640. package/skills/provision-cloudflare/SKILL.md +67 -0
  641. package/skills/provision-cloudflare/scripts/provision-cloudflare.sh +271 -0
  642. package/skills/provision-doppler/SKILL.md +58 -0
  643. package/skills/provision-doppler/scripts/provision-doppler.sh +358 -0
  644. package/skills/provision-github/SKILL.md +59 -0
  645. package/skills/provision-github/scripts/provision-github.sh +300 -0
  646. package/skills/provision-hetzner/SKILL.md +76 -0
  647. package/skills/provision-hetzner/scripts/provision-hetzner.sh +262 -0
  648. package/skills/provision-hetzner/test/fixture/knowledge-base/legal/tenant-dpa-register.md +26 -0
  649. package/skills/provision-hetzner/test/fixture/provision-hetzner-dry-run.golden +34 -0
  650. package/skills/provision-hetzner/test/provision-hetzner-characterization.test.sh +227 -0
  651. package/skills/qa/SKILL.md +263 -0
  652. package/skills/qa/references/browser-preflight.md +22 -0
  653. package/skills/questionnaire-generate/SKILL.md +328 -0
  654. package/skills/questionnaire-generate/references/questionnaire.template +60 -0
  655. package/skills/rclone/SKILL.md +162 -0
  656. package/skills/rclone/scripts/check_setup.sh +63 -0
  657. package/skills/release-announce/SKILL.md +65 -0
  658. package/skills/release-docs/SKILL.md +92 -0
  659. package/skills/reproduce-bug/SKILL.md +358 -0
  660. package/skills/resolve-debt/SKILL.md +85 -0
  661. package/skills/resolve-debt/scripts/resolve-debt.py +584 -0
  662. package/skills/resolve-parallel/SKILL.md +45 -0
  663. package/skills/resolve-parallel/workflows/resolve-parallel.workflow.js +415 -0
  664. package/skills/resolve-pr-parallel/SKILL.md +68 -0
  665. package/skills/resolve-pr-parallel/workflows/resolve-pr-parallel.workflow.js +419 -0
  666. package/skills/resolve-todo-parallel/SKILL.md +57 -0
  667. package/skills/resolve-todo-parallel/workflows/resolve-todo-parallel.workflow.js +398 -0
  668. package/skills/review/SKILL.md +1620 -0
  669. package/skills/review/references/anti-slop-scanner-hook.md +40 -0
  670. package/skills/review/references/defect-classes-migrations.md +9 -0
  671. package/skills/review/references/generated-input-oracle-surfaces.md +15 -0
  672. package/skills/review/references/review-e2e-testing.md +116 -0
  673. package/skills/review/references/review-evidence-comment.md +36 -0
  674. package/skills/review/references/review-todo-structure.md +165 -0
  675. package/skills/review/references/risk-tier-and-fix-rounds.md +97 -0
  676. package/skills/review/references/semgrep-custom-rules.yaml +174 -0
  677. package/skills/review/references/ultrathink-phases.md +98 -0
  678. package/skills/review/references/wfs.md +6 -0
  679. package/skills/review/scripts/emit-review-trailer.sh +499 -0
  680. package/skills/review/scripts/ensure-semgrep.sh +99 -0
  681. package/skills/review/scripts/fix-round-seats.sh +197 -0
  682. package/skills/review/test/emit-review-trailer.test.sh +387 -0
  683. package/skills/review/test/ensure-semgrep.test.sh +111 -0
  684. package/skills/review/test/fix-round-seats.test.sh +237 -0
  685. package/skills/review/workflows/README.md +147 -0
  686. package/skills/review/workflows/review.workflow.js +667 -0
  687. package/skills/schedule/SKILL.md +796 -0
  688. package/skills/seo-aeo/SKILL.md +139 -0
  689. package/skills/seo-aeo/scripts/validate-csp.sh +233 -0
  690. package/skills/seo-aeo/scripts/validate-seo.sh +262 -0
  691. package/skills/ship/SKILL.md +3023 -0
  692. package/skills/ship/references/adr-ordinal-collision.md +47 -0
  693. package/skills/ship/references/affected-gate-contract.md +115 -0
  694. package/skills/ship/references/ci-run-diagnosis.md +29 -0
  695. package/skills/ship/references/ci-workflow-authoring.md +68 -0
  696. package/skills/ship/references/cleanup-merged-archival.md +39 -0
  697. package/skills/ship/references/counsel-review-clo-attestation.md +38 -0
  698. package/skills/ship/references/cto-ruling-armed-push.md +5 -0
  699. package/skills/ship/references/decision-challenges-render.md +71 -0
  700. package/skills/ship/references/delegated-act-authoring-form.md +7 -0
  701. package/skills/ship/references/detached-battery-verdict.md +13 -0
  702. package/skills/ship/references/epic-close-sweep.md +62 -0
  703. package/skills/ship/references/feature-tweet-draft.md +42 -0
  704. package/skills/ship/references/followthrough-issue-body-template.md +47 -0
  705. package/skills/ship/references/followthrough-stub-template.sh +92 -0
  706. package/skills/ship/references/merge-queue-dequeue.md +39 -0
  707. package/skills/ship/references/operator-holds.md +179 -0
  708. package/skills/ship/references/pipeline-tally-render.md +43 -0
  709. package/skills/ship/references/pr-overlap.md +153 -0
  710. package/skills/ship/references/queue-mode.md +7 -0
  711. package/skills/ship/references/ready-run-wait.md +36 -0
  712. package/skills/ship/references/red-on-main-quarantine.md +110 -0
  713. package/skills/ship/references/register-update-pr-pattern.md +88 -0
  714. package/skills/ship/references/settle-then-admin-merge.md +130 -0
  715. package/skills/ship/references/supabase-column-probe.md +13 -0
  716. package/skills/ship/scripts/auto-close-scan.sh +76 -0
  717. package/skills/ship/scripts/battery-owed.sh +403 -0
  718. package/skills/ship/scripts/hold-gate-eval.sh +410 -0
  719. package/skills/ship/scripts/net-issue-flow.sh +665 -0
  720. package/skills/ship/scripts/pr-overlap-preflight.sh +483 -0
  721. package/skills/ship/scripts/ship-pir-action-items-gate.sh +246 -0
  722. package/skills/ship/scripts/technical-ruling-gate.sh +444 -0
  723. package/skills/skill-creator/SKILL.md +299 -0
  724. package/skills/skill-creator/references/api-security.md +248 -0
  725. package/skills/skill-creator/references/authoring-levers.md +110 -0
  726. package/skills/skill-creator/references/be-clear-and-direct.md +587 -0
  727. package/skills/skill-creator/references/best-practices.md +431 -0
  728. package/skills/skill-creator/references/common-patterns.md +639 -0
  729. package/skills/skill-creator/references/core-principles.md +193 -0
  730. package/skills/skill-creator/references/executable-code.md +188 -0
  731. package/skills/skill-creator/references/iteration-and-testing.md +509 -0
  732. package/skills/skill-creator/references/official-spec.md +193 -0
  733. package/skills/skill-creator/references/recommended-structure.md +180 -0
  734. package/skills/skill-creator/references/skill-structure.md +396 -0
  735. package/skills/skill-creator/references/using-scripts.md +122 -0
  736. package/skills/skill-creator/references/using-templates.md +120 -0
  737. package/skills/skill-creator/references/workflows-and-validation.md +541 -0
  738. package/skills/skill-creator/scripts/init_skill.py +322 -0
  739. package/skills/skill-creator/scripts/package_skill.py +110 -0
  740. package/skills/skill-creator/scripts/quick_validate.py +64 -0
  741. package/skills/skill-creator/templates/router-skill.md +73 -0
  742. package/skills/skill-creator/templates/simple-skill.md +34 -0
  743. package/skills/skill-creator/workflows/add-reference.md +96 -0
  744. package/skills/skill-creator/workflows/add-script.md +104 -0
  745. package/skills/skill-creator/workflows/add-template.md +83 -0
  746. package/skills/skill-creator/workflows/add-workflow.md +128 -0
  747. package/skills/skill-creator/workflows/audit-skill.md +159 -0
  748. package/skills/skill-creator/workflows/create-domain-expertise-skill.md +623 -0
  749. package/skills/skill-creator/workflows/create-new-skill.md +207 -0
  750. package/skills/skill-creator/workflows/get-guidance.md +134 -0
  751. package/skills/skill-creator/workflows/upgrade-to-router.md +170 -0
  752. package/skills/skill-creator/workflows/verify-skill.md +226 -0
  753. package/skills/skill-security-scan/SKILL.md +145 -0
  754. package/skills/skill-security-scan/references/disclaimer.md +21 -0
  755. package/skills/skill-security-scan/references/first-party-allowlist.yaml +38 -0
  756. package/skills/skill-security-scan/references/override-artifact-schema.json +68 -0
  757. package/skills/skill-security-scan/references/override-mechanism.md +171 -0
  758. package/skills/skill-security-scan/references/redirect-domains.yaml +27 -0
  759. package/skills/skill-security-scan/references/regex-patterns.md +136 -0
  760. package/skills/skill-security-scan/references/rules/code-exec.yaml +70 -0
  761. package/skills/skill-security-scan/references/rules/filesystem-boundary.yaml +29 -0
  762. package/skills/skill-security-scan/references/rules/manifest.yaml +44 -0
  763. package/skills/skill-security-scan/references/rules/supply-chain.yaml +36 -0
  764. package/skills/skill-security-scan/references/scan-meta-schema.json +63 -0
  765. package/skills/skill-security-scan/references/test-fixtures/clean-soleur-style.skill.md +23 -0
  766. package/skills/skill-security-scan/references/test-fixtures/clean-third-party.skill.md +26 -0
  767. package/skills/skill-security-scan/references/test-fixtures/malicious-codeexec.skill.md +23 -0
  768. package/skills/skill-security-scan/references/test-fixtures/malicious-curl-pipe-bash.skill.md +69 -0
  769. package/skills/skill-security-scan/references/test-fixtures/malicious-prompt-injection.skill.md +17 -0
  770. package/skills/skill-security-scan/references/test-fixtures/malicious-telemetry-beacon.skill.md +23 -0
  771. package/skills/skill-security-scan/references/typosquat-targets.yaml +65 -0
  772. package/skills/skill-security-scan/scripts/check-codeexec.sh +41 -0
  773. package/skills/skill-security-scan/scripts/check-filesystem-boundary.sh +19 -0
  774. package/skills/skill-security-scan/scripts/check-prompt-injection.sh +95 -0
  775. package/skills/skill-security-scan/scripts/check-supply-chain.sh +219 -0
  776. package/skills/skill-security-scan/scripts/check-telemetry-surface.sh +126 -0
  777. package/skills/skill-security-scan/scripts/lib.sh +197 -0
  778. package/skills/skill-security-scan/scripts/parse-override.sh +231 -0
  779. package/skills/skill-security-scan/scripts/run-scan.sh +342 -0
  780. package/skills/skill-security-scan/scripts/run-self-test.sh +95 -0
  781. package/skills/skill-security-scan/test/argv-ceiling.test.sh +180 -0
  782. package/skills/skill-security-scan/test/meta-dir-reap.test.sh +411 -0
  783. package/skills/skill-security-scan/test/parse-override.test.sh +607 -0
  784. package/skills/skill-security-scan/test/redact-pii-ghs-shape.test.sh +251 -0
  785. package/skills/social-distribute/SKILL.md +485 -0
  786. package/skills/spec-templates/SKILL.md +274 -0
  787. package/skills/sync/SKILL.md +49 -0
  788. package/skills/test-browser/SKILL.md +464 -0
  789. package/skills/test-browser/references/feature-map.md +161 -0
  790. package/skills/test-fix-loop/SKILL.md +159 -0
  791. package/skills/test-fix-loop/references/determinism-checklist.md +154 -0
  792. package/skills/triage/SKILL.md +402 -0
  793. package/skills/trigger-cron/SKILL.md +136 -0
  794. package/skills/trigger-cron/scripts/trigger.sh +198 -0
  795. package/skills/user-set-role/SKILL.md +147 -0
  796. package/skills/user-set-role/scripts/set-role.sh +218 -0
  797. package/skills/user-story-writer/SKILL.md +77 -0
  798. package/skills/ux-audit/SKILL.md +251 -0
  799. package/skills/ux-audit/references/finding.schema.json +62 -0
  800. package/skills/ux-audit/references/route-list.yaml +95 -0
  801. package/skills/ux-audit/scripts/bot-fixture.ts +270 -0
  802. package/skills/ux-audit/scripts/bot-signin.ts +135 -0
  803. package/skills/ux-audit/scripts/dedup-hash.ts +46 -0
  804. package/skills/verification-scaffold/SKILL.md +73 -0
  805. package/skills/verification-scaffold/references/gitleaks.toml.template +13 -0
  806. package/skills/verification-scaffold/references/guardrail-audit.md +156 -0
  807. package/skills/verification-scaffold/references/guards/block-stash-hook.sh.template +72 -0
  808. package/skills/verification-scaffold/references/guards/commit-on-main-hook.sh.template +82 -0
  809. package/skills/verification-scaffold/references/guards/orphan-test-check.sh.template +102 -0
  810. package/skills/verification-scaffold/references/guards/precommit-guard.sh.template +115 -0
  811. package/skills/verification-scaffold/references/guards/secret-scan-hook.sh.template +176 -0
  812. package/skills/verification-scaffold/references/guards/verification-gates.yml.template +49 -0
  813. package/skills/verification-scaffold/references/guards/wrapper-boundary.sh.template +47 -0
  814. package/skills/verification-scaffold/references/guards.tsv +21 -0
  815. package/skills/verification-scaffold/references/verification-readme.template +55 -0
  816. package/skills/verification-scaffold/scripts/verification-scaffold.sh +785 -0
  817. package/skills/verification-scaffold/test/bite-proof.test.sh +159 -0
  818. package/skills/verification-scaffold/test/generator.test.sh +319 -0
  819. package/skills/verification-scaffold/test/manifest.test.sh +144 -0
  820. package/skills/work/SKILL.md +1480 -0
  821. package/skills/work/references/end-of-work-resume.md +7 -0
  822. package/skills/work/references/hook-test-main-cwd.md +24 -0
  823. package/skills/work/references/key-principles.md +83 -0
  824. package/skills/work/references/property-testing.md +122 -0
  825. package/skills/work/references/sql-security-definer-rpc-scaffold.sql +78 -0
  826. package/skills/work/references/work-agent-teams.md +97 -0
  827. package/skills/work/references/work-lifecycle-parallel.md +147 -0
  828. package/skills/work/references/work-lockfile-bumps.md +97 -0
  829. package/skills/work/references/work-scratch-sandboxes.md +212 -0
  830. package/skills/work/references/work-subagent-fanout.md +61 -0
  831. package/skills/work/references/work-test-harness-sharp-edges.md +73 -0
  832. package/skills/xcode-test/SKILL.md +360 -0
@@ -0,0 +1,897 @@
1
+ <overview>
2
+ Mobile is a first-class platform for agent-native apps. It has unique constraints and opportunities. This guide covers why mobile matters, iOS storage architecture, checkpoint/resume patterns, and cost-aware design.
3
+ </overview>
4
+
5
+ <why_mobile>
6
+
7
+ ## Why Mobile Matters
8
+
9
+ Mobile devices offer unique advantages for agent-native apps:
10
+
11
+ ### A File System
12
+
13
+ Agents can work with files naturally, using the same primitives that work everywhere else. The filesystem is the universal interface.
14
+
15
+ ### Rich Context
16
+
17
+ A walled garden you get access to. Health data, location, photos, calendars—context that doesn't exist on desktop or web. This enables deeply personalized agent experiences.
18
+
19
+ ### Local Apps
20
+
21
+ Everyone has their own copy of the app. This opens opportunities that aren't fully realized yet: apps that modify themselves, fork themselves, evolve per-user. App Store policies constrain some of this today, but the foundation is there.
22
+
23
+ ### Cross-Device Sync
24
+
25
+ If you use the file system with iCloud, all devices share the same file system. The agent's work on one device appears on all devices—without you having to build a server.
26
+
27
+ ### The Challenge
28
+
29
+ **Agents are long-running. Mobile apps are not.**
30
+
31
+ An agent might need 30 seconds, 5 minutes, or an hour to complete a task. But iOS will background your app after seconds of inactivity, and may kill it entirely to reclaim memory. The user might switch apps, take a call, or lock their phone mid-task.
32
+
33
+ This means mobile agent apps need:
34
+
35
+ - **Checkpointing** — Saving state so work isn't lost
36
+ - **Resuming** — Picking up where you left off after interruption
37
+ - **Background execution** — Using the limited time iOS gives you wisely
38
+ - **On-device vs. cloud decisions** — What runs locally vs. what needs a server
39
+ </why_mobile>
40
+
41
+ <ios_storage>
42
+
43
+ ## iOS Storage Architecture
44
+
45
+ > **Needs validation:** This is an approach that works well, but better solutions may exist.
46
+
47
+ For agent-native iOS apps, use iCloud Drive's Documents folder for your shared workspace. This gives you **free, automatic multi-device sync** without building a sync layer or running a server.
48
+
49
+ ### Why iCloud Documents?
50
+
51
+ | Approach | Cost | Complexity | Offline | Multi-Device |
52
+ |----------|------|------------|---------|--------------|
53
+ | Custom backend + sync | $$$ | High | Manual | Yes |
54
+ | CloudKit database | Free tier limits | Medium | Manual | Yes |
55
+ | **iCloud Documents** | Free (user's storage) | Low | Automatic | Automatic |
56
+
57
+ iCloud Documents:
58
+
59
+ - Uses user's existing iCloud storage (free 5GB, most users have more)
60
+ - Automatic sync across all user's devices
61
+ - Works offline, syncs when online
62
+ - Files visible in Files.app for transparency
63
+ - No server costs, no sync code to maintain
64
+
65
+ ### Implementation: iCloud-First with Local Fallback
66
+
67
+ ```swift
68
+ // Get the iCloud Documents container
69
+ func iCloudDocumentsURL() -> URL? {
70
+ FileManager.default.url(forUbiquityContainerIdentifier: nil)?
71
+ .appendingPathComponent("Documents")
72
+ }
73
+
74
+ // Your shared workspace lives in iCloud
75
+ class SharedWorkspace {
76
+ let rootURL: URL
77
+
78
+ init() {
79
+ // Use iCloud if available, fall back to local
80
+ if let iCloudURL = iCloudDocumentsURL() {
81
+ self.rootURL = iCloudURL
82
+ } else {
83
+ // Fallback to local Documents (user not signed into iCloud)
84
+ self.rootURL = FileManager.default.urls(
85
+ for: .documentDirectory,
86
+ in: .userDomainMask
87
+ ).first!
88
+ }
89
+ }
90
+
91
+ // All file operations go through this root
92
+ func researchPath(for bookId: String) -> URL {
93
+ rootURL.appendingPathComponent("Research/\(bookId)")
94
+ }
95
+
96
+ func journalPath() -> URL {
97
+ rootURL.appendingPathComponent("Journal")
98
+ }
99
+ }
100
+ ```
101
+
102
+ ### Directory Structure in iCloud
103
+
104
+ ```
105
+ iCloud Drive/
106
+ └── YourApp/ # Your app's container
107
+ └── Documents/ # Visible in Files.app
108
+ ├── Journal/
109
+ │ ├── user/
110
+ │ │ └── 2025-01-15.md # Syncs across devices
111
+ │ └── agent/
112
+ │ └── 2025-01-15.md # Agent observations sync too
113
+ ├── Research/
114
+ │ └── {bookId}/
115
+ │ ├── full_text.txt
116
+ │ └── sources/
117
+ ├── Chats/
118
+ │ └── {conversationId}.json
119
+ └── context.md # Agent's accumulated knowledge
120
+ ```
121
+
122
+ ### Handling iCloud File States
123
+
124
+ iCloud files may not be downloaded locally. Handle this:
125
+
126
+ ```swift
127
+ func readFile(at url: URL) throws -> String {
128
+ // iCloud may create .icloud placeholder files
129
+ if url.pathExtension == "icloud" {
130
+ // Trigger download
131
+ try FileManager.default.startDownloadingUbiquitousItem(at: url)
132
+ throw FileNotYetAvailableError()
133
+ }
134
+
135
+ return try String(contentsOf: url, encoding: .utf8)
136
+ }
137
+
138
+ // For writes, use coordinated file access
139
+ func writeFile(_ content: String, to url: URL) throws {
140
+ let coordinator = NSFileCoordinator()
141
+ var error: NSError?
142
+
143
+ coordinator.coordinate(
144
+ writingItemAt: url,
145
+ options: .forReplacing,
146
+ error: &error
147
+ ) { newURL in
148
+ try? content.write(to: newURL, atomically: true, encoding: .utf8)
149
+ }
150
+
151
+ if let error = error { throw error }
152
+ }
153
+ ```
154
+
155
+ ### What iCloud Enables
156
+
157
+ 1. **User starts experiment on iPhone** → Agent creates config file
158
+ 2. **User opens app on iPad** → Same experiment visible, no sync code needed
159
+ 3. **Agent logs observation on iPhone** → Syncs to iPad automatically
160
+ 4. **User edits journal on iPad** → iPhone sees the edit
161
+
162
+ ### Entitlements Required
163
+
164
+ Add to your app's entitlements:
165
+
166
+ ```xml
167
+ <key>com.apple.developer.icloud-container-identifiers</key>
168
+ <array>
169
+ <string>iCloud.com.yourcompany.yourapp</string>
170
+ </array>
171
+ <key>com.apple.developer.icloud-services</key>
172
+ <array>
173
+ <string>CloudDocuments</string>
174
+ </array>
175
+ <key>com.apple.developer.ubiquity-container-identifiers</key>
176
+ <array>
177
+ <string>iCloud.com.yourcompany.yourapp</string>
178
+ </array>
179
+ ```
180
+
181
+ ### When NOT to Use iCloud Documents
182
+
183
+ - **Sensitive data** - Use Keychain or encrypted local storage instead
184
+ - **High-frequency writes** - iCloud sync has latency; use local + periodic sync
185
+ - **Large media files** - Consider CloudKit Assets or on-demand resources
186
+ - **Shared between users** - iCloud Documents is single-user; use CloudKit for sharing
187
+ </ios_storage>
188
+
189
+ <background_execution>
190
+
191
+ ## Background Execution & Resumption
192
+
193
+ > **Needs validation:** These patterns work but better solutions may exist.
194
+
195
+ Mobile apps can be suspended or terminated at any time. Agents must handle this gracefully.
196
+
197
+ ### The Challenge
198
+
199
+ ```
200
+ User starts research agent
201
+ ↓
202
+ Agent begins web search
203
+ ↓
204
+ User switches to another app
205
+ ↓
206
+ iOS suspends your app
207
+ ↓
208
+ Agent is mid-execution... what happens?
209
+ ```
210
+
211
+ ### Checkpoint/Resume Pattern
212
+
213
+ Save agent state before backgrounding, restore on foreground:
214
+
215
+ ```swift
216
+ class AgentOrchestrator: ObservableObject {
217
+ @Published var activeSessions: [AgentSession] = []
218
+
219
+ // Called when app is about to background
220
+ func handleAppWillBackground() {
221
+ for session in activeSessions {
222
+ saveCheckpoint(session)
223
+ session.transition(to: .backgrounded)
224
+ }
225
+ }
226
+
227
+ // Called when app returns to foreground
228
+ func handleAppDidForeground() {
229
+ for session in activeSessions where session.state == .backgrounded {
230
+ if let checkpoint = loadCheckpoint(session.id) {
231
+ resumeFromCheckpoint(session, checkpoint)
232
+ }
233
+ }
234
+ }
235
+
236
+ private func saveCheckpoint(_ session: AgentSession) {
237
+ let checkpoint = AgentCheckpoint(
238
+ sessionId: session.id,
239
+ conversationHistory: session.messages,
240
+ pendingToolCalls: session.pendingToolCalls,
241
+ partialResults: session.partialResults,
242
+ timestamp: Date()
243
+ )
244
+ storage.save(checkpoint, for: session.id)
245
+ }
246
+
247
+ private func resumeFromCheckpoint(_ session: AgentSession, _ checkpoint: AgentCheckpoint) {
248
+ session.messages = checkpoint.conversationHistory
249
+ session.pendingToolCalls = checkpoint.pendingToolCalls
250
+
251
+ // Resume execution if there were pending tool calls
252
+ if !checkpoint.pendingToolCalls.isEmpty {
253
+ session.transition(to: .running)
254
+ Task { await executeNextTool(session) }
255
+ }
256
+ }
257
+ }
258
+ ```
259
+
260
+ ### State Machine for Agent Lifecycle
261
+
262
+ ```swift
263
+ enum AgentState {
264
+ case idle // Not running
265
+ case running // Actively executing
266
+ case waitingForUser // Paused, waiting for user input
267
+ case backgrounded // App backgrounded, state saved
268
+ case completed // Finished successfully
269
+ case failed(Error) // Finished with error
270
+ }
271
+
272
+ class AgentSession: ObservableObject {
273
+ @Published var state: AgentState = .idle
274
+
275
+ func transition(to newState: AgentState) {
276
+ let validTransitions: [AgentState: Set<AgentState>] = [
277
+ .idle: [.running],
278
+ .running: [.waitingForUser, .backgrounded, .completed, .failed],
279
+ .waitingForUser: [.running, .backgrounded],
280
+ .backgrounded: [.running, .completed],
281
+ ]
282
+
283
+ guard validTransitions[state]?.contains(newState) == true else {
284
+ logger.warning("Invalid transition: \(state) → \(newState)")
285
+ return
286
+ }
287
+
288
+ state = newState
289
+ }
290
+ }
291
+ ```
292
+
293
+ ### Background Task Extension (iOS)
294
+
295
+ Request extra time when backgrounded during critical operations:
296
+
297
+ ```swift
298
+ class AgentOrchestrator {
299
+ private var backgroundTask: UIBackgroundTaskIdentifier = .invalid
300
+
301
+ func handleAppWillBackground() {
302
+ // Request extra time for saving state
303
+ backgroundTask = UIApplication.shared.beginBackgroundTask { [weak self] in
304
+ self?.endBackgroundTask()
305
+ }
306
+
307
+ // Save all checkpoints
308
+ Task {
309
+ for session in activeSessions {
310
+ await saveCheckpoint(session)
311
+ }
312
+ endBackgroundTask()
313
+ }
314
+ }
315
+
316
+ private func endBackgroundTask() {
317
+ if backgroundTask != .invalid {
318
+ UIApplication.shared.endBackgroundTask(backgroundTask)
319
+ backgroundTask = .invalid
320
+ }
321
+ }
322
+ }
323
+ ```
324
+
325
+ ### User Communication
326
+
327
+ Let users know what's happening:
328
+
329
+ ```swift
330
+ struct AgentStatusView: View {
331
+ @ObservedObject var session: AgentSession
332
+
333
+ var body: some View {
334
+ switch session.state {
335
+ case .backgrounded:
336
+ Label("Paused (app in background)", systemImage: "pause.circle")
337
+ .foregroundColor(.orange)
338
+ case .running:
339
+ Label("Working...", systemImage: "ellipsis.circle")
340
+ .foregroundColor(.blue)
341
+ case .waitingForUser:
342
+ Label("Waiting for your input", systemImage: "person.circle")
343
+ .foregroundColor(.green)
344
+ // ...
345
+ }
346
+ }
347
+ }
348
+ ```
349
+
350
+ </background_execution>
351
+
352
+ <permissions>
353
+ ## Permission Handling
354
+
355
+ Mobile agents may need access to system resources. Handle permission requests gracefully.
356
+
357
+ ### Common Permissions
358
+
359
+ | Resource | iOS Permission | Use Case |
360
+ |----------|---------------|----------|
361
+ | Photo Library | PHPhotoLibrary | Profile generation from photos |
362
+ | Files | Document picker | Reading user documents |
363
+ | Camera | AVCaptureDevice | Scanning book covers |
364
+ | Location | CLLocationManager | Location-aware recommendations |
365
+ | Network | (automatic) | Web search, API calls |
366
+
367
+ ### Permission-Aware Tools
368
+
369
+ Check permissions before executing:
370
+
371
+ ```swift
372
+ struct PhotoTools {
373
+ static func readPhotos() -> AgentTool {
374
+ tool(
375
+ name: "read_photos",
376
+ description: "Read photos from the user's photo library",
377
+ parameters: [
378
+ "limit": .number("Maximum photos to read"),
379
+ "dateRange": .string("Date range filter").optional()
380
+ ],
381
+ execute: { params, context in
382
+ // Check permission first
383
+ let status = await PHPhotoLibrary.requestAuthorization(for: .readWrite)
384
+
385
+ switch status {
386
+ case .authorized, .limited:
387
+ // Proceed with reading photos
388
+ let photos = await fetchPhotos(params)
389
+ return ToolResult(text: "Found \(photos.count) photos", images: photos)
390
+
391
+ case .denied, .restricted:
392
+ return ToolResult(
393
+ text: "Photo access needed. Please grant permission in Settings → Privacy → Photos.",
394
+ isError: true
395
+ )
396
+
397
+ case .notDetermined:
398
+ return ToolResult(
399
+ text: "Photo permission required. Please try again.",
400
+ isError: true
401
+ )
402
+
403
+ @unknown default:
404
+ return ToolResult(text: "Unknown permission status", isError: true)
405
+ }
406
+ }
407
+ )
408
+ }
409
+ }
410
+ ```
411
+
412
+ ### Graceful Degradation
413
+
414
+ When permissions aren't granted, offer alternatives:
415
+
416
+ ```swift
417
+ func readPhotos() async -> ToolResult {
418
+ let status = PHPhotoLibrary.authorizationStatus(for: .readWrite)
419
+
420
+ switch status {
421
+ case .denied, .restricted:
422
+ // Suggest alternative
423
+ return ToolResult(
424
+ text: """
425
+ I don't have access to your photos. You can either:
426
+ 1. Grant access in Settings → Privacy → Photos
427
+ 2. Share specific photos directly in our chat
428
+
429
+ Would you like me to help with something else instead?
430
+ """,
431
+ isError: false // Not a hard error, just a limitation
432
+ )
433
+ // ...
434
+ }
435
+ }
436
+ ```
437
+
438
+ ### Permission Request Timing
439
+
440
+ Don't request permissions until needed:
441
+
442
+ ```swift
443
+ // BAD: Request all permissions at launch
444
+ func applicationDidFinishLaunching() {
445
+ requestPhotoAccess()
446
+ requestCameraAccess()
447
+ requestLocationAccess()
448
+ // User is overwhelmed with permission dialogs
449
+ }
450
+
451
+ // GOOD: Request when the feature is used
452
+ tool("analyze_book_cover", async ({ image }) => {
453
+ // Only request camera access when user tries to scan a cover
454
+ let status = await AVCaptureDevice.requestAccess(for: .video)
455
+ if status {
456
+ return await scanCover(image)
457
+ } else {
458
+ return ToolResult(text: "Camera access needed for book scanning")
459
+ }
460
+ })
461
+ ```
462
+
463
+ </permissions>
464
+
465
+ <cost_awareness>
466
+
467
+ ## Cost-Aware Design
468
+
469
+ Mobile users may be on cellular data or concerned about API costs. Design agents to be efficient.
470
+
471
+ ### Model Tier Selection
472
+
473
+ Use the cheapest model that achieves the outcome:
474
+
475
+ ```swift
476
+ enum ModelTier {
477
+ case fast // claude-haiku-5-5: ~$0.10/1M input, $0.50/1M output
478
+ case balanced // claude-sonnet-5-5: ~$2/1M input, $10/1M output
479
+ case powerful // claude-opus-5-5: ~$4/1M input, $20/1M output
480
+
481
+ var modelId: String {
482
+ switch self {
483
+ case .fast: return "claude-haiku-5-5"
484
+ case .balanced: return "claude-sonnet-5-5"
485
+ case .powerful: return "claude-opus-5-5"
486
+ }
487
+ }
488
+ }
489
+
490
+ // Match model to task complexity
491
+ let agentConfigs: [AgentType: ModelTier] = [
492
+ .quickLookup: .fast, // "What's in my library?"
493
+ .chatAssistant: .balanced, // General conversation
494
+ .researchAgent: .balanced, // Web search + synthesis
495
+ .profileGenerator: .powerful, // Complex photo analysis
496
+ .introductionWriter: .balanced,
497
+ ]
498
+ ```
499
+
500
+ ### Token Budgets
501
+
502
+ Limit tokens per agent session:
503
+
504
+ ```swift
505
+ struct AgentConfig {
506
+ let modelTier: ModelTier
507
+ let maxInputTokens: Int
508
+ let maxOutputTokens: Int
509
+ let maxTurns: Int
510
+
511
+ static let research = AgentConfig(
512
+ modelTier: .balanced,
513
+ maxInputTokens: 50_000,
514
+ maxOutputTokens: 4_000,
515
+ maxTurns: 20
516
+ )
517
+
518
+ static let quickChat = AgentConfig(
519
+ modelTier: .fast,
520
+ maxInputTokens: 10_000,
521
+ maxOutputTokens: 1_000,
522
+ maxTurns: 5
523
+ )
524
+ }
525
+
526
+ class AgentSession {
527
+ var totalTokensUsed: Int = 0
528
+
529
+ func checkBudget() -> Bool {
530
+ if totalTokensUsed > config.maxInputTokens {
531
+ transition(to: .failed(AgentError.budgetExceeded))
532
+ return false
533
+ }
534
+ return true
535
+ }
536
+ }
537
+ ```
538
+
539
+ ### Network-Aware Execution
540
+
541
+ Defer heavy operations to WiFi:
542
+
543
+ ```swift
544
+ class NetworkMonitor: ObservableObject {
545
+ @Published var isOnWiFi: Bool = false
546
+ @Published var isExpensive: Bool = false // Cellular or hotspot
547
+
548
+ private let monitor = NWPathMonitor()
549
+
550
+ func startMonitoring() {
551
+ monitor.pathUpdateHandler = { [weak self] path in
552
+ DispatchQueue.main.async {
553
+ self?.isOnWiFi = path.usesInterfaceType(.wifi)
554
+ self?.isExpensive = path.isExpensive
555
+ }
556
+ }
557
+ monitor.start(queue: .global())
558
+ }
559
+ }
560
+
561
+ class AgentOrchestrator {
562
+ @ObservedObject var network = NetworkMonitor()
563
+
564
+ func startResearchAgent(for book: Book) async {
565
+ if network.isExpensive {
566
+ // Warn user or defer
567
+ let proceed = await showAlert(
568
+ "Research uses data",
569
+ message: "This will use approximately 1-2 MB of cellular data. Continue?"
570
+ )
571
+ if !proceed { return }
572
+ }
573
+
574
+ // Proceed with research
575
+ await runAgent(ResearchAgent.create(book: book))
576
+ }
577
+ }
578
+ ```
579
+
580
+ ### Batch API Calls
581
+
582
+ Combine multiple small requests:
583
+
584
+ ```swift
585
+ // BAD: Many small API calls
586
+ for book in books {
587
+ await agent.chat("Summarize \(book.title)")
588
+ }
589
+
590
+ // GOOD: Batch into one request
591
+ let bookList = books.map { $0.title }.joined(separator: ", ")
592
+ await agent.chat("Summarize each of these books briefly: \(bookList)")
593
+ ```
594
+
595
+ ### Caching
596
+
597
+ Cache expensive operations:
598
+
599
+ ```swift
600
+ class ResearchCache {
601
+ private var cache: [String: CachedResearch] = [:]
602
+
603
+ func getCachedResearch(for bookId: String) -> CachedResearch? {
604
+ guard let cached = cache[bookId] else { return nil }
605
+
606
+ // Expire after 24 hours
607
+ if Date().timeIntervalSince(cached.timestamp) > 86400 {
608
+ cache.removeValue(forKey: bookId)
609
+ return nil
610
+ }
611
+
612
+ return cached
613
+ }
614
+
615
+ func cacheResearch(_ research: Research, for bookId: String) {
616
+ cache[bookId] = CachedResearch(
617
+ research: research,
618
+ timestamp: Date()
619
+ )
620
+ }
621
+ }
622
+
623
+ // In research tool
624
+ tool("web_search", async ({ query, bookId }) => {
625
+ // Check cache first
626
+ if let cached = cache.getCachedResearch(for: bookId) {
627
+ return ToolResult(text: cached.research.summary, cached: true)
628
+ }
629
+
630
+ // Otherwise, perform search
631
+ let results = await webSearch(query)
632
+ cache.cacheResearch(results, for: bookId)
633
+ return ToolResult(text: results.summary)
634
+ })
635
+ ```
636
+
637
+ ### Cost Visibility
638
+
639
+ Show users what they're spending:
640
+
641
+ ```swift
642
+ struct AgentCostView: View {
643
+ @ObservedObject var session: AgentSession
644
+
645
+ var body: some View {
646
+ VStack(alignment: .leading) {
647
+ Text("Session Stats")
648
+ .font(.headline)
649
+
650
+ HStack {
651
+ Label("\(session.turnCount) turns", systemImage: "arrow.2.squarepath")
652
+ Spacer()
653
+ Label(formatTokens(session.totalTokensUsed), systemImage: "text.word.spacing")
654
+ }
655
+
656
+ if let estimatedCost = session.estimatedCost {
657
+ Text("Est. cost: \(estimatedCost, format: .currency(code: "USD"))")
658
+ .font(.caption)
659
+ .foregroundColor(.secondary)
660
+ }
661
+ }
662
+ }
663
+ }
664
+ ```
665
+
666
+ </cost_awareness>
667
+
668
+ <offline_handling>
669
+
670
+ ## Offline Graceful Degradation
671
+
672
+ Handle offline scenarios gracefully:
673
+
674
+ ```swift
675
+ class ConnectivityAwareAgent {
676
+ @ObservedObject var network = NetworkMonitor()
677
+
678
+ func executeToolCall(_ toolCall: ToolCall) async -> ToolResult {
679
+ // Check if tool requires network
680
+ let requiresNetwork = ["web_search", "web_fetch", "call_api"]
681
+ .contains(toolCall.name)
682
+
683
+ if requiresNetwork && !network.isConnected {
684
+ return ToolResult(
685
+ text: """
686
+ I can't access the internet right now. Here's what I can do offline:
687
+ - Read your library and existing research
688
+ - Answer questions from cached data
689
+ - Write notes and drafts for later
690
+
691
+ Would you like me to try something that works offline?
692
+ """,
693
+ isError: false
694
+ )
695
+ }
696
+
697
+ return await executeOnline(toolCall)
698
+ }
699
+ }
700
+ ```
701
+
702
+ ### Offline-First Tools
703
+
704
+ Some tools should work entirely offline:
705
+
706
+ ```swift
707
+ let offlineTools: Set<String> = [
708
+ "read_file",
709
+ "write_file",
710
+ "list_files",
711
+ "read_library", // Local database
712
+ "search_local", // Local search
713
+ ]
714
+
715
+ let onlineTools: Set<String> = [
716
+ "web_search",
717
+ "web_fetch",
718
+ "publish_to_cloud",
719
+ ]
720
+
721
+ let hybridTools: Set<String> = [
722
+ "publish_to_feed", // Works offline, syncs later
723
+ ]
724
+ ```
725
+
726
+ ### Queued Actions
727
+
728
+ Queue actions that require connectivity:
729
+
730
+ ```swift
731
+ class OfflineQueue: ObservableObject {
732
+ @Published var pendingActions: [QueuedAction] = []
733
+
734
+ func queue(_ action: QueuedAction) {
735
+ pendingActions.append(action)
736
+ persist()
737
+ }
738
+
739
+ func processWhenOnline() {
740
+ network.$isConnected
741
+ .filter { $0 }
742
+ .sink { [weak self] _ in
743
+ self?.processPendingActions()
744
+ }
745
+ }
746
+
747
+ private func processPendingActions() {
748
+ for action in pendingActions {
749
+ Task {
750
+ try await execute(action)
751
+ remove(action)
752
+ }
753
+ }
754
+ }
755
+ }
756
+ ```
757
+
758
+ </offline_handling>
759
+
760
+ <battery_awareness>
761
+
762
+ ## Battery-Aware Execution
763
+
764
+ Respect device battery state:
765
+
766
+ ```swift
767
+ class BatteryMonitor: ObservableObject {
768
+ @Published var batteryLevel: Float = 1.0
769
+ @Published var isCharging: Bool = false
770
+ @Published var isLowPowerMode: Bool = false
771
+
772
+ var shouldDeferHeavyWork: Bool {
773
+ return batteryLevel < 0.2 && !isCharging
774
+ }
775
+
776
+ func startMonitoring() {
777
+ UIDevice.current.isBatteryMonitoringEnabled = true
778
+
779
+ NotificationCenter.default.addObserver(
780
+ forName: UIDevice.batteryLevelDidChangeNotification,
781
+ object: nil,
782
+ queue: .main
783
+ ) { [weak self] _ in
784
+ self?.batteryLevel = UIDevice.current.batteryLevel
785
+ }
786
+
787
+ NotificationCenter.default.addObserver(
788
+ forName: NSNotification.Name.NSProcessInfoPowerStateDidChange,
789
+ object: nil,
790
+ queue: .main
791
+ ) { [weak self] _ in
792
+ self?.isLowPowerMode = ProcessInfo.processInfo.isLowPowerModeEnabled
793
+ }
794
+ }
795
+ }
796
+
797
+ class AgentOrchestrator {
798
+ @ObservedObject var battery = BatteryMonitor()
799
+
800
+ func startAgent(_ config: AgentConfig) async {
801
+ if battery.shouldDeferHeavyWork && config.isHeavy {
802
+ let proceed = await showAlert(
803
+ "Low Battery",
804
+ message: "This task uses significant battery. Continue or defer until charging?"
805
+ )
806
+ if !proceed { return }
807
+ }
808
+
809
+ // Adjust model tier based on battery
810
+ let adjustedConfig = battery.isLowPowerMode
811
+ ? config.withModelTier(.fast)
812
+ : config
813
+
814
+ await runAgent(adjustedConfig)
815
+ }
816
+ }
817
+ ```
818
+
819
+ </battery_awareness>
820
+
821
+ <on_device_vs_cloud>
822
+
823
+ ## On-Device vs. Cloud
824
+
825
+ Understanding what runs where in a mobile agent-native app:
826
+
827
+ | Component | On-Device | Cloud |
828
+ |-----------|-----------|-------|
829
+ | Orchestration | ✅ | |
830
+ | Tool execution | ✅ (file ops, photo access, HealthKit) | |
831
+ | LLM calls | | ✅ (Anthropic API) |
832
+ | Checkpoints | ✅ (local files) | Optional via iCloud |
833
+ | Long-running agents | Limited by iOS | Possible with server |
834
+
835
+ ### Implications
836
+
837
+ **Network required for reasoning:**
838
+
839
+ - The app needs network connectivity for LLM calls
840
+ - Design tools to degrade gracefully when network is unavailable
841
+ - Consider offline caching for common queries
842
+
843
+ **Data stays local:**
844
+
845
+ - File operations happen on device
846
+ - Sensitive data never leaves the device unless explicitly synced
847
+ - Privacy is preserved by default
848
+
849
+ **Long-running agents:**
850
+ For truly long-running agents (hours), consider a server-side orchestrator that can run indefinitely, with the mobile app as a viewer and input mechanism.
851
+ </on_device_vs_cloud>
852
+
853
+ <checklist>
854
+ ## Mobile Agent-Native Checklist
855
+
856
+ **iOS Storage:**
857
+
858
+ - [ ] iCloud Documents as primary storage (or conscious alternative)
859
+ - [ ] Local Documents fallback when iCloud unavailable
860
+ - [ ] Handle `.icloud` placeholder files (trigger download)
861
+ - [ ] Use NSFileCoordinator for conflict-safe writes
862
+
863
+ **Background Execution:**
864
+
865
+ - [ ] Checkpoint/resume implemented for all agent sessions
866
+ - [ ] State machine for agent lifecycle (idle, running, backgrounded, etc.)
867
+ - [ ] Background task extension for critical saves (30 second window)
868
+ - [ ] User-visible status for backgrounded agents
869
+
870
+ **Permissions:**
871
+
872
+ - [ ] Permissions requested only when needed, not at launch
873
+ - [ ] Graceful degradation when permissions denied
874
+ - [ ] Clear error messages with Settings deep links
875
+ - [ ] Alternative paths when permissions unavailable
876
+
877
+ **Cost Awareness:**
878
+
879
+ - [ ] Model tier matched to task complexity
880
+ - [ ] Token budgets per session
881
+ - [ ] Network-aware (defer heavy work to WiFi)
882
+ - [ ] Caching for expensive operations
883
+ - [ ] Cost visibility to users
884
+
885
+ **Offline Handling:**
886
+
887
+ - [ ] Offline-capable tools identified
888
+ - [ ] Graceful degradation for online-only features
889
+ - [ ] Action queue for sync when online
890
+ - [ ] Clear user communication about offline state
891
+
892
+ **Battery Awareness:**
893
+
894
+ - [ ] Battery monitoring for heavy operations
895
+ - [ ] Low power mode detection
896
+ - [ ] Defer or downgrade based on battery state
897
+ </checklist>