@desplega.ai/agent-swarm 1.20.0 → 1.49.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (810) hide show
  1. package/.claude/settings.json +84 -0
  2. package/.claude/settings.local.json +3 -1
  3. package/.entire/settings.json +4 -0
  4. package/.env.docker.example +40 -23
  5. package/.env.example +39 -1
  6. package/.github/ISSUE_TEMPLATE/bug_report.yml +78 -0
  7. package/.github/ISSUE_TEMPLATE/community-template.yml +77 -0
  8. package/.github/ISSUE_TEMPLATE/config.yml +8 -0
  9. package/.github/ISSUE_TEMPLATE/feature_request.yml +60 -0
  10. package/.github/PULL_REQUEST_TEMPLATE/community-template.md +29 -0
  11. package/.github/workflows/ci.yml +3 -27
  12. package/.github/workflows/docker-and-deploy.yml +20 -5
  13. package/.github/workflows/merge-gate.yml +233 -0
  14. package/.opencode/plugins/entire.ts +133 -0
  15. package/.superset/config.json +6 -0
  16. package/.wts-setup.ts +103 -34
  17. package/CHANGELOG.md +447 -0
  18. package/CLAUDE.md +422 -5
  19. package/CONTRIBUTING.md +46 -1
  20. package/DEPLOYMENT.md +26 -9
  21. package/Dockerfile +15 -7
  22. package/Dockerfile.worker +99 -67
  23. package/MCP.md +452 -17
  24. package/README.md +271 -169
  25. package/api-entrypoint.sh +56 -0
  26. package/depot.json +1 -0
  27. package/docker-compose.example.yml +194 -3
  28. package/docker-compose.local.yml +119 -0
  29. package/docker-entrypoint.sh +393 -113
  30. package/docs-site/app/api/search/route.ts +4 -0
  31. package/docs-site/app/docs/[[...slug]]/page.tsx +87 -0
  32. package/docs-site/app/docs/layout.tsx +12 -0
  33. package/docs-site/app/globals.css +24 -0
  34. package/docs-site/app/layout.config.tsx +34 -0
  35. package/docs-site/app/layout.tsx +119 -0
  36. package/docs-site/app/llms-full.txt/route.ts +11 -0
  37. package/docs-site/app/llms.mdx/docs/[[...slug]]/route.ts +24 -0
  38. package/docs-site/app/llms.txt/route.ts +8 -0
  39. package/docs-site/app/page.tsx +5 -0
  40. package/docs-site/app/robots.ts +13 -0
  41. package/docs-site/app/sitemap.ts +37 -0
  42. package/docs-site/components/api-page.client.tsx +4 -0
  43. package/docs-site/components/api-page.tsx +7 -0
  44. package/docs-site/components/mdx/mermaid.tsx +55 -0
  45. package/docs-site/content/docs/(documentation)/architecture/agents.mdx +117 -0
  46. package/docs-site/content/docs/(documentation)/architecture/hooks.mdx +77 -0
  47. package/docs-site/content/docs/(documentation)/architecture/memory.mdx +96 -0
  48. package/docs-site/content/docs/(documentation)/architecture/meta.json +4 -0
  49. package/docs-site/content/docs/(documentation)/architecture/overview.mdx +172 -0
  50. package/docs-site/content/docs/(documentation)/concepts/epics.mdx +98 -0
  51. package/docs-site/content/docs/(documentation)/concepts/meta.json +4 -0
  52. package/docs-site/content/docs/(documentation)/concepts/scheduling.mdx +136 -0
  53. package/docs-site/content/docs/(documentation)/concepts/services.mdx +104 -0
  54. package/docs-site/content/docs/(documentation)/concepts/task-lifecycle.mdx +148 -0
  55. package/docs-site/content/docs/(documentation)/concepts/workflows.mdx +209 -0
  56. package/docs-site/content/docs/(documentation)/contributing.mdx +158 -0
  57. package/docs-site/content/docs/(documentation)/getting-started.mdx +157 -0
  58. package/docs-site/content/docs/(documentation)/guides/agentmail-integration.mdx +79 -0
  59. package/docs-site/content/docs/(documentation)/guides/deployment.mdx +171 -0
  60. package/docs-site/content/docs/(documentation)/guides/github-integration.mdx +81 -0
  61. package/docs-site/content/docs/(documentation)/guides/gitlab-integration.mdx +93 -0
  62. package/docs-site/content/docs/(documentation)/guides/linear-integration.mdx +98 -0
  63. package/docs-site/content/docs/(documentation)/guides/meta.json +13 -0
  64. package/docs-site/content/docs/(documentation)/guides/sentry-integration.mdx +52 -0
  65. package/docs-site/content/docs/(documentation)/guides/slack-integration.mdx +179 -0
  66. package/docs-site/content/docs/(documentation)/guides/x402-payments.mdx +154 -0
  67. package/docs-site/content/docs/(documentation)/index.mdx +65 -0
  68. package/docs-site/content/docs/(documentation)/meta.json +19 -0
  69. package/docs-site/content/docs/(documentation)/reference/cli.mdx +241 -0
  70. package/docs-site/content/docs/(documentation)/reference/environment-variables.mdx +205 -0
  71. package/docs-site/content/docs/(documentation)/reference/mcp-tools.mdx +449 -0
  72. package/docs-site/content/docs/(documentation)/reference/meta.json +4 -0
  73. package/docs-site/content/docs/api-reference/active-sessions.mdx +9 -0
  74. package/docs-site/content/docs/api-reference/agents.mdx +9 -0
  75. package/docs-site/content/docs/api-reference/channels.mdx +9 -0
  76. package/docs-site/content/docs/api-reference/config.mdx +9 -0
  77. package/docs-site/content/docs/api-reference/debug.mdx +9 -0
  78. package/docs-site/content/docs/api-reference/ecosystem.mdx +9 -0
  79. package/docs-site/content/docs/api-reference/epics.mdx +9 -0
  80. package/docs-site/content/docs/api-reference/index.mdx +32 -0
  81. package/docs-site/content/docs/api-reference/memory.mdx +9 -0
  82. package/docs-site/content/docs/api-reference/meta.json +25 -0
  83. package/docs-site/content/docs/api-reference/poll.mdx +9 -0
  84. package/docs-site/content/docs/api-reference/repos.mdx +9 -0
  85. package/docs-site/content/docs/api-reference/schedules.mdx +9 -0
  86. package/docs-site/content/docs/api-reference/session-data.mdx +9 -0
  87. package/docs-site/content/docs/api-reference/stats.mdx +9 -0
  88. package/docs-site/content/docs/api-reference/tasks.mdx +9 -0
  89. package/docs-site/content/docs/api-reference/trackers.mdx +9 -0
  90. package/docs-site/content/docs/api-reference/webhooks.mdx +9 -0
  91. package/docs-site/content/docs/api-reference/workflows.mdx +9 -0
  92. package/docs-site/content/docs/meta.json +3 -0
  93. package/docs-site/lib/get-llm-text.ts +10 -0
  94. package/docs-site/lib/openapi.ts +23 -0
  95. package/docs-site/lib/source.ts +8 -0
  96. package/docs-site/mdx-components.tsx +13 -0
  97. package/docs-site/next.config.mjs +29 -0
  98. package/docs-site/package.json +35 -0
  99. package/docs-site/pnpm-lock.yaml +5407 -0
  100. package/docs-site/postcss.config.mjs +8 -0
  101. package/docs-site/scripts/generate-docs.ts +171 -0
  102. package/docs-site/source.config.ts +17 -0
  103. package/docs-site/tsconfig.json +46 -0
  104. package/ecosystem.config.cjs +4 -4
  105. package/landing/next.config.ts +14 -0
  106. package/landing/package.json +31 -0
  107. package/landing/pnpm-lock.yaml +1091 -0
  108. package/landing/postcss.config.mjs +8 -0
  109. package/landing/public/apple-touch-icon.png +0 -0
  110. package/landing/public/favicon.ico +0 -0
  111. package/landing/public/logo.png +0 -0
  112. package/landing/public/og-image.png +0 -0
  113. package/landing/public/omghost-desplega.svg +30 -0
  114. package/landing/public/omghost-openfort.svg +9 -0
  115. package/landing/src/app/actions/waitlist.ts +25 -0
  116. package/landing/src/app/blog/openfort-hackathon/page.tsx +863 -0
  117. package/landing/src/app/blog/page.tsx +162 -0
  118. package/landing/src/app/blog/swarm-metrics/page.tsx +685 -0
  119. package/landing/src/app/examples/page.tsx +174 -0
  120. package/landing/src/app/examples/x402/page.tsx +456 -0
  121. package/landing/src/app/globals.css +122 -0
  122. package/landing/src/app/layout.tsx +134 -0
  123. package/landing/src/app/page.tsx +27 -0
  124. package/landing/src/app/robots.ts +13 -0
  125. package/landing/src/app/sitemap.ts +44 -0
  126. package/landing/src/components/architecture.tsx +163 -0
  127. package/landing/src/components/cta.tsx +52 -0
  128. package/landing/src/components/features.tsx +160 -0
  129. package/landing/src/components/footer.tsx +100 -0
  130. package/landing/src/components/hero.tsx +217 -0
  131. package/landing/src/components/how-it-works.tsx +165 -0
  132. package/landing/src/components/navbar.tsx +147 -0
  133. package/landing/src/components/waitlist.tsx +110 -0
  134. package/landing/src/components/why-choose.tsx +149 -0
  135. package/landing/src/components/workshops.tsx +328 -0
  136. package/landing/src/lib/utils.ts +6 -0
  137. package/landing/tsconfig.json +41 -0
  138. package/misc/transcripts/2026-03-09-pi-mono-e2e-verification.md +154 -0
  139. package/new-ui/CLAUDE.md +92 -0
  140. package/new-ui/README.md +73 -0
  141. package/new-ui/biome.json +42 -0
  142. package/new-ui/components.json +21 -0
  143. package/new-ui/index.html +25 -0
  144. package/new-ui/package.json +49 -0
  145. package/new-ui/pnpm-lock.yaml +4845 -0
  146. package/new-ui/public/logo.png +0 -0
  147. package/new-ui/src/api/client.ts +814 -0
  148. package/new-ui/src/api/hooks/index.ts +64 -0
  149. package/new-ui/src/api/hooks/use-agents.ts +58 -0
  150. package/new-ui/src/api/hooks/use-channels.ts +115 -0
  151. package/new-ui/src/api/hooks/use-config-api.ts +46 -0
  152. package/new-ui/src/api/hooks/use-costs.ts +122 -0
  153. package/new-ui/src/api/hooks/use-db-query.ts +29 -0
  154. package/new-ui/src/api/hooks/use-epics.ts +75 -0
  155. package/new-ui/src/api/hooks/use-repos.ts +61 -0
  156. package/new-ui/src/api/hooks/use-schedules.ts +81 -0
  157. package/new-ui/src/api/hooks/use-services.ts +16 -0
  158. package/new-ui/src/api/hooks/use-stats.ts +27 -0
  159. package/new-ui/src/api/hooks/use-tasks.ts +89 -0
  160. package/new-ui/src/api/hooks/use-workflows.ts +109 -0
  161. package/{ui/src/types/api.ts → new-ui/src/api/types.ts} +236 -10
  162. package/new-ui/src/app/App.tsx +13 -0
  163. package/new-ui/src/app/providers.tsx +32 -0
  164. package/new-ui/src/app/router.tsx +52 -0
  165. package/new-ui/src/components/layout/app-header.tsx +47 -0
  166. package/new-ui/src/components/layout/app-sidebar.tsx +128 -0
  167. package/new-ui/src/components/layout/breadcrumbs.tsx +57 -0
  168. package/new-ui/src/components/layout/config-guard.tsx +22 -0
  169. package/new-ui/src/components/layout/root-layout.tsx +40 -0
  170. package/new-ui/src/components/layout/swarm-switcher.tsx +85 -0
  171. package/new-ui/src/components/shared/command-menu.tsx +131 -0
  172. package/new-ui/src/components/shared/data-grid.tsx +141 -0
  173. package/new-ui/src/components/shared/empty-state.tsx +24 -0
  174. package/new-ui/src/components/shared/error-boundary.tsx +72 -0
  175. package/new-ui/src/components/shared/json-viewer.tsx +47 -0
  176. package/new-ui/src/components/shared/name-connection-modal.tsx +99 -0
  177. package/new-ui/src/components/shared/page-skeleton.tsx +16 -0
  178. package/new-ui/src/components/shared/session-log-viewer.tsx +364 -0
  179. package/new-ui/src/components/shared/stats-bar.tsx +132 -0
  180. package/new-ui/src/components/shared/status-badge.tsx +131 -0
  181. package/new-ui/src/components/shared/usage-summary.tsx +179 -0
  182. package/new-ui/src/components/ui/alert-dialog.tsx +176 -0
  183. package/new-ui/src/components/ui/alert.tsx +60 -0
  184. package/new-ui/src/components/ui/avatar.tsx +96 -0
  185. package/new-ui/src/components/ui/badge.tsx +46 -0
  186. package/new-ui/src/components/ui/button.tsx +62 -0
  187. package/new-ui/src/components/ui/card.tsx +75 -0
  188. package/new-ui/src/components/ui/command.tsx +160 -0
  189. package/new-ui/src/components/ui/dialog.tsx +143 -0
  190. package/new-ui/src/components/ui/dropdown-menu.tsx +226 -0
  191. package/new-ui/src/components/ui/input.tsx +21 -0
  192. package/new-ui/src/components/ui/label.tsx +19 -0
  193. package/new-ui/src/components/ui/progress.tsx +26 -0
  194. package/new-ui/src/components/ui/scroll-area.tsx +54 -0
  195. package/new-ui/src/components/ui/select.tsx +175 -0
  196. package/new-ui/src/components/ui/separator.tsx +28 -0
  197. package/new-ui/src/components/ui/sheet.tsx +132 -0
  198. package/new-ui/src/components/ui/sidebar.tsx +691 -0
  199. package/new-ui/src/components/ui/skeleton.tsx +13 -0
  200. package/new-ui/src/components/ui/sonner.tsx +35 -0
  201. package/new-ui/src/components/ui/switch.tsx +33 -0
  202. package/new-ui/src/components/ui/table.tsx +92 -0
  203. package/new-ui/src/components/ui/tabs.tsx +79 -0
  204. package/new-ui/src/components/ui/textarea.tsx +18 -0
  205. package/new-ui/src/components/ui/tooltip.tsx +51 -0
  206. package/new-ui/src/components/workflows/action-node.tsx +53 -0
  207. package/new-ui/src/components/workflows/condition-node.tsx +50 -0
  208. package/new-ui/src/components/workflows/graph-utils.ts +124 -0
  209. package/new-ui/src/components/workflows/json-tree.tsx +189 -0
  210. package/new-ui/src/components/workflows/node-styles.ts +10 -0
  211. package/new-ui/src/components/workflows/step-detail-sheet.tsx +87 -0
  212. package/new-ui/src/components/workflows/trigger-node.tsx +41 -0
  213. package/new-ui/src/components/workflows/workflow-graph.tsx +65 -0
  214. package/{ui/src/hooks/useAutoScroll.ts → new-ui/src/hooks/use-auto-scroll.ts} +0 -1
  215. package/new-ui/src/hooks/use-config.ts +203 -0
  216. package/new-ui/src/hooks/use-keyboard-shortcuts.ts +41 -0
  217. package/new-ui/src/hooks/use-mobile.ts +19 -0
  218. package/new-ui/src/hooks/use-theme.ts +60 -0
  219. package/new-ui/src/lib/config.ts +188 -0
  220. package/new-ui/src/lib/slugs.ts +71 -0
  221. package/{ui → new-ui}/src/lib/utils.ts +32 -0
  222. package/new-ui/src/main.tsx +11 -0
  223. package/new-ui/src/pages/agents/[id]/page.tsx +492 -0
  224. package/new-ui/src/pages/agents/page.tsx +134 -0
  225. package/new-ui/src/pages/chat/page.tsx +674 -0
  226. package/new-ui/src/pages/config/page.tsx +1109 -0
  227. package/new-ui/src/pages/dashboard/page.tsx +454 -0
  228. package/new-ui/src/pages/debug/page.tsx +275 -0
  229. package/new-ui/src/pages/epics/[id]/page.tsx +809 -0
  230. package/new-ui/src/pages/epics/page.tsx +321 -0
  231. package/new-ui/src/pages/not-found/page.tsx +18 -0
  232. package/new-ui/src/pages/repos/page.tsx +369 -0
  233. package/new-ui/src/pages/schedules/[id]/page.tsx +664 -0
  234. package/new-ui/src/pages/schedules/page.tsx +477 -0
  235. package/new-ui/src/pages/services/page.tsx +128 -0
  236. package/new-ui/src/pages/tasks/[id]/page.tsx +670 -0
  237. package/new-ui/src/pages/tasks/page.tsx +592 -0
  238. package/new-ui/src/pages/usage/page.tsx +195 -0
  239. package/new-ui/src/pages/workflow-runs/[id]/page.tsx +363 -0
  240. package/new-ui/src/pages/workflows/[id]/page.tsx +417 -0
  241. package/new-ui/src/pages/workflows/page.tsx +266 -0
  242. package/new-ui/src/styles/ag-grid.css +36 -0
  243. package/new-ui/src/styles/globals.css +213 -0
  244. package/new-ui/test-results/.last-run.json +4 -0
  245. package/{ui/tsconfig.json → new-ui/tsconfig.app.json} +7 -4
  246. package/new-ui/tsconfig.json +4 -0
  247. package/new-ui/tsconfig.node.json +26 -0
  248. package/new-ui/vercel.json +4 -0
  249. package/new-ui/vite.config.ts +28 -0
  250. package/openapi.json +4436 -0
  251. package/package.json +31 -7
  252. package/plugin/build-pi-skills.ts +233 -0
  253. package/plugin/commands/close-issue.md +7 -3
  254. package/plugin/commands/create-pr.md +18 -12
  255. package/plugin/commands/implement-issue.md +7 -3
  256. package/plugin/commands/respond-github.md +8 -4
  257. package/plugin/commands/review-pr.md +44 -10
  258. package/plugin/commands/start-leader.md +1 -3
  259. package/plugin/commands/start-worker.md +1 -3
  260. package/plugin/commands/work-on-task.md +22 -3
  261. package/plugin/pi-skills/close-issue/SKILL.md +90 -0
  262. package/plugin/pi-skills/create-pr/SKILL.md +99 -0
  263. package/plugin/pi-skills/implement-issue/SKILL.md +135 -0
  264. package/plugin/pi-skills/investigate-sentry-issue/SKILL.md +138 -0
  265. package/plugin/pi-skills/respond-github/SKILL.md +98 -0
  266. package/plugin/pi-skills/review-offered-task/SKILL.md +45 -0
  267. package/plugin/pi-skills/review-pr/SKILL.md +261 -0
  268. package/plugin/pi-skills/start-leader/SKILL.md +121 -0
  269. package/plugin/pi-skills/start-worker/SKILL.md +60 -0
  270. package/plugin/pi-skills/swarm-chat/SKILL.md +82 -0
  271. package/plugin/pi-skills/todos/SKILL.md +66 -0
  272. package/plugin/pi-skills/work-on-task/SKILL.md +65 -0
  273. package/plugin/skills/artifacts/examples/approval-flow.ts +34 -0
  274. package/plugin/skills/artifacts/examples/hono-dashboard.ts +31 -0
  275. package/plugin/skills/artifacts/examples/multi-artifact.ts +20 -0
  276. package/plugin/skills/artifacts/examples/static-report.sh +17 -0
  277. package/plugin/skills/artifacts/skill.md +71 -0
  278. package/prek.toml +75 -0
  279. package/scripts/check-db-boundary.sh +60 -0
  280. package/scripts/e2e-docker-provider.ts +820 -0
  281. package/scripts/e2e-io-schemas-test.ts +807 -0
  282. package/scripts/e2e-provider-test.ts +220 -0
  283. package/scripts/e2e-workflow-redesign.sh +229 -0
  284. package/scripts/e2e-workflow-test.sh +285 -0
  285. package/scripts/e2e-workflow-test.ts +857 -0
  286. package/scripts/generate-openapi.ts +26 -0
  287. package/scripts/measure-tool-tokens.ts +118 -0
  288. package/scripts/x402-e2e-test.ts +195 -0
  289. package/scripts/x402-test-server.ts +236 -0
  290. package/scripts/x402-testnet-e2e.ts +668 -0
  291. package/slack-manifest.json +17 -0
  292. package/src/agentmail/app.ts +65 -0
  293. package/src/agentmail/handlers.ts +207 -0
  294. package/src/agentmail/index.ts +9 -0
  295. package/src/agentmail/types.ts +51 -0
  296. package/src/artifact-sdk/browser-sdk.ts +30 -0
  297. package/src/artifact-sdk/index.ts +2 -0
  298. package/src/artifact-sdk/localtunnel.d.ts +20 -0
  299. package/src/artifact-sdk/port.ts +12 -0
  300. package/src/artifact-sdk/server.ts +156 -0
  301. package/src/artifact-sdk/tunnel.ts +19 -0
  302. package/src/be/chunking.ts +193 -0
  303. package/src/be/db-queries/oauth.ts +90 -0
  304. package/src/be/db-queries/tracker.ts +182 -0
  305. package/src/be/db.ts +2729 -770
  306. package/src/be/embedding.ts +80 -0
  307. package/src/be/migrations/001_initial.sql +409 -0
  308. package/src/be/migrations/002_one_time_schedules.sql +59 -0
  309. package/src/be/migrations/003_workflows.sql +51 -0
  310. package/src/be/migrations/004_workflow_source.sql +81 -0
  311. package/src/be/migrations/005_epic_next_steps.sql +2 -0
  312. package/src/be/migrations/006_vcs_provider.sql +94 -0
  313. package/src/be/migrations/007_task_dir.sql +2 -0
  314. package/src/be/migrations/008_workflow_redesign.sql +85 -0
  315. package/src/be/migrations/009_tracker_integration.sql +144 -0
  316. package/src/be/migrations/010_step_diagnostics.sql +1 -0
  317. package/src/be/migrations/011_step_next_port.sql +1 -0
  318. package/src/be/migrations/012_trigger_schema.sql +1 -0
  319. package/src/be/migrations/013_task_output_schema.sql +2 -0
  320. package/src/be/migrations/runner.ts +188 -0
  321. package/src/cli.tsx +231 -299
  322. package/src/commands/artifact.ts +241 -0
  323. package/src/commands/onboard/compose-generator.ts +169 -0
  324. package/src/commands/onboard/env-generator.ts +79 -0
  325. package/src/commands/onboard/manifest.ts +37 -0
  326. package/src/commands/onboard/presets.ts +85 -0
  327. package/src/commands/onboard/service-names.ts +47 -0
  328. package/src/commands/onboard/steps/core-credentials.tsx +111 -0
  329. package/src/commands/onboard/steps/custom-templates.tsx +168 -0
  330. package/src/commands/onboard/steps/generate.tsx +154 -0
  331. package/src/commands/onboard/steps/harness-credentials.tsx +195 -0
  332. package/src/commands/onboard/steps/harness.tsx +21 -0
  333. package/src/commands/onboard/steps/health-check.tsx +171 -0
  334. package/src/commands/onboard/steps/integration-github.tsx +105 -0
  335. package/src/commands/onboard/steps/integration-gitlab.tsx +79 -0
  336. package/src/commands/onboard/steps/integration-menu.tsx +58 -0
  337. package/src/commands/onboard/steps/integration-sentry.tsx +79 -0
  338. package/src/commands/onboard/steps/integration-slack.tsx +165 -0
  339. package/src/commands/onboard/steps/post-connect.tsx +145 -0
  340. package/src/commands/onboard/steps/post-dashboard.tsx +34 -0
  341. package/src/commands/onboard/steps/post-task.tsx +103 -0
  342. package/src/commands/onboard/steps/prereq-check.tsx +178 -0
  343. package/src/commands/onboard/steps/review.tsx +82 -0
  344. package/src/commands/onboard/steps/start.tsx +97 -0
  345. package/src/commands/onboard/templates.ts +34 -0
  346. package/src/commands/onboard/types.ts +259 -0
  347. package/src/commands/onboard.tsx +425 -0
  348. package/src/commands/runner.ts +1376 -559
  349. package/src/commands/setup.tsx +23 -38
  350. package/src/commands/shared/client-config.ts +41 -0
  351. package/src/github/app.ts +8 -0
  352. package/src/github/handlers.ts +93 -75
  353. package/src/github/index.ts +1 -0
  354. package/src/github/types.ts +1 -0
  355. package/src/gitlab/auth.ts +63 -0
  356. package/src/gitlab/handlers.ts +327 -0
  357. package/src/gitlab/index.ts +19 -0
  358. package/src/gitlab/reactions.ts +104 -0
  359. package/src/gitlab/types.ts +130 -0
  360. package/src/heartbeat/heartbeat.ts +425 -0
  361. package/src/heartbeat/index.ts +1 -0
  362. package/src/hooks/hook.ts +555 -4
  363. package/src/hooks/tool-loop-detection.test.ts +158 -0
  364. package/src/hooks/tool-loop-detection.ts +167 -0
  365. package/src/http/active-sessions.ts +172 -0
  366. package/src/http/agents.ts +328 -0
  367. package/src/http/config.ts +191 -0
  368. package/src/http/core.ts +309 -0
  369. package/src/http/db-query.ts +91 -0
  370. package/src/http/ecosystem.ts +63 -0
  371. package/src/http/epics.ts +460 -0
  372. package/src/http/index.ts +213 -0
  373. package/src/http/mcp.ts +77 -0
  374. package/src/http/memory.ts +168 -0
  375. package/src/http/openapi.ts +109 -0
  376. package/src/http/poll.ts +178 -0
  377. package/src/http/repos.ts +195 -0
  378. package/src/http/route-def.ts +123 -0
  379. package/src/http/schedules.ts +391 -0
  380. package/src/http/session-data.ts +241 -0
  381. package/src/http/stats.ts +174 -0
  382. package/src/http/tasks.ts +468 -0
  383. package/src/http/trackers/index.ts +10 -0
  384. package/src/http/trackers/linear.ts +187 -0
  385. package/src/http/types.ts +12 -0
  386. package/src/http/utils.ts +87 -0
  387. package/src/http/webhooks.ts +432 -0
  388. package/src/http/workflows.ts +522 -0
  389. package/src/http.ts +1 -1890
  390. package/src/linear/README.md +65 -0
  391. package/src/linear/app.ts +48 -0
  392. package/src/linear/client.ts +18 -0
  393. package/src/linear/index.ts +1 -0
  394. package/src/linear/oauth.ts +35 -0
  395. package/src/linear/outbound.ts +212 -0
  396. package/src/linear/sync.ts +543 -0
  397. package/src/linear/types.ts +7 -0
  398. package/src/linear/webhook.ts +104 -0
  399. package/src/oauth/README.md +66 -0
  400. package/src/oauth/index.ts +6 -0
  401. package/src/oauth/wrapper.ts +204 -0
  402. package/src/prompts/base-prompt.ts +366 -24
  403. package/src/prompts/defaults.ts +196 -0
  404. package/src/providers/claude-adapter.ts +429 -0
  405. package/src/providers/index.ts +24 -0
  406. package/src/providers/pi-mono-adapter.ts +442 -0
  407. package/src/providers/pi-mono-extension.ts +620 -0
  408. package/src/providers/pi-mono-mcp-client.ts +124 -0
  409. package/src/providers/types.ts +75 -0
  410. package/src/scheduler/scheduler.test.ts +2 -0
  411. package/src/scheduler/scheduler.ts +186 -29
  412. package/src/server.ts +82 -6
  413. package/src/slack/HEURISTICS.md +105 -0
  414. package/src/slack/actions.ts +133 -0
  415. package/src/slack/app.ts +7 -0
  416. package/src/slack/assistant.ts +115 -0
  417. package/src/slack/blocks.ts +233 -0
  418. package/src/slack/commands.ts +31 -17
  419. package/src/slack/files.ts +1 -1
  420. package/src/slack/handlers.test.ts +114 -1
  421. package/src/slack/handlers.ts +212 -52
  422. package/src/slack/responses.ts +120 -67
  423. package/src/slack/router.ts +17 -99
  424. package/src/slack/thread-buffer.ts +213 -0
  425. package/src/slack/watcher.ts +119 -4
  426. package/src/tests/agent-activity.test.ts +247 -0
  427. package/src/tests/agentmail-filters.test.ts +97 -0
  428. package/src/tests/artifact-sdk.test.ts +800 -0
  429. package/src/tests/base-prompt.test.ts +264 -0
  430. package/src/tests/build-pi-skills.test.ts +127 -0
  431. package/src/tests/claude-adapter.test.ts +126 -0
  432. package/src/tests/context-versioning.test.ts +425 -0
  433. package/src/tests/db-queries-oauth.test.ts +197 -0
  434. package/src/tests/db-queries-tracker.test.ts +230 -0
  435. package/src/tests/epics.test.ts +3 -3
  436. package/src/tests/error-tracker.test.ts +368 -0
  437. package/src/tests/fetch-resolved-env.test.ts +167 -0
  438. package/src/tests/generate-default-claude-md.test.ts +9 -1
  439. package/src/tests/generate-identity-templates.test.ts +124 -0
  440. package/src/tests/gitlab-auth.test.ts +109 -0
  441. package/src/tests/gitlab-handlers.test.ts +691 -0
  442. package/src/tests/gitlab-vcs-db.test.ts +177 -0
  443. package/src/tests/heartbeat.test.ts +363 -0
  444. package/src/tests/http-api-integration.test.ts +1698 -0
  445. package/src/tests/linear-outbound-sync.test.ts +200 -0
  446. package/src/tests/linear-webhook.test.ts +402 -0
  447. package/src/tests/match-route.test.ts +187 -0
  448. package/src/tests/memory.test.ts +737 -0
  449. package/src/tests/migration-runner-regressions.test.ts +86 -0
  450. package/src/tests/model-control.test.ts +338 -0
  451. package/src/tests/oauth-wrapper.test.ts +147 -0
  452. package/src/tests/onboard-compose.test.ts +138 -0
  453. package/src/tests/onboard-env.test.ts +174 -0
  454. package/src/tests/onboard-manifest.test.ts +137 -0
  455. package/src/tests/pi-mono-adapter.test.ts +234 -0
  456. package/src/tests/progress-dedup.test.ts +98 -0
  457. package/src/tests/provider-adapter.test.ts +122 -0
  458. package/src/tests/provider-command-format.test.ts +98 -0
  459. package/src/tests/reload-config.test.ts +170 -0
  460. package/src/tests/runner-polling-api.test.ts +25 -20
  461. package/src/tests/scheduled-tasks.test.ts +104 -0
  462. package/src/tests/scheduler-backoff.test.ts +166 -0
  463. package/src/tests/self-improvement.test.ts +540 -0
  464. package/src/tests/session-attach.test.ts +536 -0
  465. package/src/tests/session-costs.test.ts +267 -1
  466. package/src/tests/slack-actions.test.ts +133 -0
  467. package/src/tests/slack-assistant.test.ts +136 -0
  468. package/src/tests/slack-blocks.test.ts +246 -0
  469. package/src/tests/slack-metadata-inheritance.test.ts +243 -0
  470. package/src/tests/slack-queue-offline.test.ts +174 -0
  471. package/src/tests/slack-router.test.ts +181 -0
  472. package/src/tests/slack-thread-buffer.test.ts +305 -0
  473. package/src/tests/slack-thread-followups.test.ts +298 -0
  474. package/src/tests/slack-watcher.test.ts +101 -0
  475. package/src/tests/structured-output.test.ts +311 -0
  476. package/src/tests/swarm-repos.test.ts +198 -0
  477. package/src/tests/task-cancellation.test.ts +6 -4
  478. package/src/tests/task-working-dir.test.ts +176 -0
  479. package/src/tests/template-fetch.test.ts +490 -0
  480. package/src/tests/tool-annotations.test.ts +371 -0
  481. package/src/tests/tracker-tools.test.ts +184 -0
  482. package/src/tests/update-profile-api.test.ts +143 -3
  483. package/src/tests/validation-adapters.test.ts +86 -0
  484. package/src/tests/vcs-provider.test.ts +27 -0
  485. package/src/tests/workflow-agent-task.test.ts +196 -0
  486. package/src/tests/workflow-async-v2.test.ts +386 -0
  487. package/src/tests/workflow-convergence.test.ts +541 -0
  488. package/src/tests/workflow-definition-validation.test.ts +290 -0
  489. package/src/tests/workflow-engine-v2.test.ts +691 -0
  490. package/src/tests/workflow-executors.test.ts +736 -0
  491. package/src/tests/workflow-http-v2.test.ts +599 -0
  492. package/src/tests/workflow-integration-io.test.ts +902 -0
  493. package/src/tests/workflow-io-schemas.test.ts +624 -0
  494. package/src/tests/workflow-registry.test.ts +592 -0
  495. package/src/tests/workflow-retry-v2.test.ts +401 -0
  496. package/src/tests/workflow-retry-validation.test.ts +282 -0
  497. package/src/tests/workflow-template.test.ts +288 -0
  498. package/src/tests/workflow-trigger-schema.test.ts +359 -0
  499. package/src/tests/workflow-triggers-v2.test.ts +264 -0
  500. package/src/tests/workflow-versions.test.ts +208 -0
  501. package/src/tests/x402-client.test.ts +117 -0
  502. package/src/tests/x402-config.test.ts +182 -0
  503. package/src/tests/x402-spending-tracker.test.ts +185 -0
  504. package/src/tools/cancel-task.ts +2 -0
  505. package/src/tools/context-diff.ts +171 -0
  506. package/src/tools/context-history.ts +138 -0
  507. package/src/tools/create-channel.ts +1 -0
  508. package/src/tools/db-query.ts +78 -0
  509. package/src/tools/delete-channel.ts +132 -0
  510. package/src/tools/epics/assign-task-to-epic.ts +1 -0
  511. package/src/tools/epics/create-epic.ts +3 -2
  512. package/src/tools/epics/delete-epic.ts +2 -0
  513. package/src/tools/epics/get-epic-details.ts +2 -0
  514. package/src/tools/epics/list-epics.ts +2 -0
  515. package/src/tools/epics/unassign-task-from-epic.ts +1 -0
  516. package/src/tools/epics/update-epic.ts +7 -4
  517. package/src/tools/get-swarm.ts +2 -0
  518. package/src/tools/get-task-details.ts +2 -0
  519. package/src/tools/get-tasks.ts +27 -1
  520. package/src/tools/inject-learning.ts +106 -0
  521. package/src/tools/join-swarm.ts +17 -7
  522. package/src/tools/list-channels.ts +2 -0
  523. package/src/tools/list-services.ts +2 -0
  524. package/src/tools/memory-get.ts +56 -0
  525. package/src/tools/memory-search.ts +131 -0
  526. package/src/tools/my-agent-info.ts +2 -0
  527. package/src/tools/poll-task.ts +2 -20
  528. package/src/tools/post-message.ts +1 -0
  529. package/src/tools/read-messages.ts +2 -0
  530. package/src/tools/register-agentmail-inbox.ts +166 -0
  531. package/src/tools/register-service.ts +2 -0
  532. package/src/tools/schedules/create-schedule.ts +134 -24
  533. package/src/tools/schedules/delete-schedule.ts +2 -0
  534. package/src/tools/schedules/list-schedules.ts +20 -4
  535. package/src/tools/schedules/run-schedule-now.ts +1 -0
  536. package/src/tools/schedules/update-schedule.ts +49 -17
  537. package/src/tools/send-task.ts +132 -10
  538. package/src/tools/slack-download-file.ts +4 -2
  539. package/src/tools/slack-list-channels.ts +2 -0
  540. package/src/tools/slack-post.ts +2 -0
  541. package/src/tools/slack-read.ts +2 -0
  542. package/src/tools/slack-reply.ts +2 -0
  543. package/src/tools/slack-upload-file.ts +2 -0
  544. package/src/tools/store-progress.ts +187 -4
  545. package/src/tools/swarm-config/delete-config.ts +87 -0
  546. package/src/tools/swarm-config/get-config.ts +108 -0
  547. package/src/tools/swarm-config/index.ts +4 -0
  548. package/src/tools/swarm-config/list-config.ts +99 -0
  549. package/src/tools/swarm-config/set-config.ts +118 -0
  550. package/src/tools/task-action.ts +30 -5
  551. package/src/tools/task-dedup.ts +97 -0
  552. package/src/tools/tool-config.ts +117 -0
  553. package/src/tools/tracker/index.ts +6 -0
  554. package/src/tools/tracker/tracker-link-epic.ts +64 -0
  555. package/src/tools/tracker/tracker-link-task.ts +64 -0
  556. package/src/tools/tracker/tracker-map-agent.ts +57 -0
  557. package/src/tools/tracker/tracker-status.ts +56 -0
  558. package/src/tools/tracker/tracker-sync-status.ts +42 -0
  559. package/src/tools/tracker/tracker-unlink.ts +41 -0
  560. package/src/tools/unregister-service.ts +2 -0
  561. package/src/tools/update-profile.ts +93 -10
  562. package/src/tools/update-service-status.ts +2 -0
  563. package/src/tools/utils.ts +10 -1
  564. package/src/tools/workflows/create-workflow.ts +111 -0
  565. package/src/tools/workflows/delete-workflow.ts +42 -0
  566. package/src/tools/workflows/get-workflow-run.ts +59 -0
  567. package/src/tools/workflows/get-workflow.ts +53 -0
  568. package/src/tools/workflows/index.ts +9 -0
  569. package/src/tools/workflows/list-workflow-runs.ts +48 -0
  570. package/src/tools/workflows/list-workflows.ts +42 -0
  571. package/src/tools/workflows/retry-workflow-run.ts +40 -0
  572. package/src/tools/workflows/trigger-workflow.ts +96 -0
  573. package/src/tools/workflows/update-workflow.ts +118 -0
  574. package/src/tracker/types.ts +51 -0
  575. package/src/types.ts +477 -14
  576. package/src/utils/credentials.test.ts +156 -0
  577. package/src/utils/credentials.ts +50 -0
  578. package/src/utils/error-tracker.ts +190 -0
  579. package/src/vcs/index.ts +15 -0
  580. package/src/vcs/types.ts +5 -0
  581. package/src/workflows/checkpoint.ts +121 -0
  582. package/src/workflows/cooldown.ts +28 -0
  583. package/src/workflows/definition.ts +217 -0
  584. package/src/workflows/engine.ts +554 -0
  585. package/src/workflows/event-bus.ts +29 -0
  586. package/src/workflows/executors/agent-task.ts +92 -0
  587. package/src/workflows/executors/base.ts +86 -0
  588. package/src/workflows/executors/code-match.ts +88 -0
  589. package/src/workflows/executors/index.ts +16 -0
  590. package/src/workflows/executors/notify.ts +93 -0
  591. package/src/workflows/executors/property-match.ts +104 -0
  592. package/src/workflows/executors/raw-llm.ts +83 -0
  593. package/src/workflows/executors/registry.ts +76 -0
  594. package/src/workflows/executors/script.ts +103 -0
  595. package/src/workflows/executors/validate.ts +215 -0
  596. package/src/workflows/executors/vcs.ts +58 -0
  597. package/src/workflows/index.ts +61 -0
  598. package/src/workflows/input.ts +46 -0
  599. package/src/workflows/json-schema-validator.ts +118 -0
  600. package/src/workflows/recovery.ts +139 -0
  601. package/src/workflows/resume.ts +143 -0
  602. package/src/workflows/retry-poller.ts +216 -0
  603. package/src/workflows/template.ts +74 -0
  604. package/src/workflows/templates.ts +86 -0
  605. package/src/workflows/triggers.ts +95 -0
  606. package/src/workflows/validation.ts +104 -0
  607. package/src/workflows/version.ts +42 -0
  608. package/src/x402/cli.ts +140 -0
  609. package/src/x402/client.ts +192 -0
  610. package/src/x402/config.ts +131 -0
  611. package/src/x402/index.ts +37 -0
  612. package/src/x402/openfort-signer.ts +83 -0
  613. package/src/x402/spending-tracker.ts +109 -0
  614. package/templates/community/.gitkeep +0 -0
  615. package/templates/official/coder/CLAUDE.md +49 -0
  616. package/templates/official/coder/IDENTITY.md +28 -0
  617. package/templates/official/coder/SOUL.md +43 -0
  618. package/templates/official/coder/TOOLS.md +40 -0
  619. package/templates/official/coder/config.json +23 -0
  620. package/templates/official/coder/start-up.sh +23 -0
  621. package/templates/official/content-reviewer/CLAUDE.md +68 -0
  622. package/templates/official/content-reviewer/IDENTITY.md +28 -0
  623. package/templates/official/content-reviewer/SOUL.md +44 -0
  624. package/templates/official/content-reviewer/TOOLS.md +37 -0
  625. package/templates/official/content-reviewer/config.json +23 -0
  626. package/templates/official/content-reviewer/start-up.sh +23 -0
  627. package/templates/official/content-strategist/CLAUDE.md +63 -0
  628. package/templates/official/content-strategist/IDENTITY.md +33 -0
  629. package/templates/official/content-strategist/SOUL.md +48 -0
  630. package/templates/official/content-strategist/TOOLS.md +47 -0
  631. package/templates/official/content-strategist/config.json +23 -0
  632. package/templates/official/content-strategist/start-up.sh +23 -0
  633. package/templates/official/content-writer/CLAUDE.md +72 -0
  634. package/templates/official/content-writer/IDENTITY.md +30 -0
  635. package/templates/official/content-writer/SOUL.md +46 -0
  636. package/templates/official/content-writer/TOOLS.md +44 -0
  637. package/templates/official/content-writer/config.json +23 -0
  638. package/templates/official/content-writer/start-up.sh +23 -0
  639. package/templates/official/forward-deployed-engineer/CLAUDE.md +54 -0
  640. package/templates/official/forward-deployed-engineer/IDENTITY.md +37 -0
  641. package/templates/official/forward-deployed-engineer/SOUL.md +55 -0
  642. package/templates/official/forward-deployed-engineer/config.json +21 -0
  643. package/templates/official/lead/CLAUDE.md +33 -0
  644. package/templates/official/lead/IDENTITY.md +36 -0
  645. package/templates/official/lead/SOUL.md +51 -0
  646. package/templates/official/lead/config.json +22 -0
  647. package/templates/official/researcher/CLAUDE.md +46 -0
  648. package/templates/official/researcher/IDENTITY.md +28 -0
  649. package/templates/official/researcher/SOUL.md +43 -0
  650. package/templates/official/researcher/config.json +21 -0
  651. package/templates/official/reviewer/CLAUDE.md +63 -0
  652. package/templates/official/reviewer/IDENTITY.md +28 -0
  653. package/templates/official/reviewer/SOUL.md +45 -0
  654. package/templates/official/reviewer/config.json +21 -0
  655. package/templates/official/tester/CLAUDE.md +53 -0
  656. package/templates/official/tester/IDENTITY.md +28 -0
  657. package/templates/official/tester/SOUL.md +55 -0
  658. package/templates/official/tester/config.json +21 -0
  659. package/templates/schema.ts +35 -0
  660. package/templates-ui/README.md +46 -0
  661. package/templates-ui/components.json +17 -0
  662. package/templates-ui/eslint.config.mjs +18 -0
  663. package/templates-ui/next.config.ts +7 -0
  664. package/templates-ui/package.json +35 -0
  665. package/templates-ui/pnpm-lock.yaml +4571 -0
  666. package/templates-ui/postcss.config.mjs +7 -0
  667. package/templates-ui/public/file.svg +1 -0
  668. package/templates-ui/public/globe.svg +1 -0
  669. package/templates-ui/public/logo.png +0 -0
  670. package/templates-ui/public/next.svg +1 -0
  671. package/templates-ui/public/vercel.svg +1 -0
  672. package/templates-ui/public/window.svg +1 -0
  673. package/templates-ui/src/app/[category]/[name]/page.tsx +89 -0
  674. package/templates-ui/src/app/api/templates/[...slug]/route.ts +52 -0
  675. package/templates-ui/src/app/api/templates/route.ts +18 -0
  676. package/templates-ui/src/app/builder/page.tsx +37 -0
  677. package/templates-ui/src/app/globals.css +94 -0
  678. package/templates-ui/src/app/layout.tsx +79 -0
  679. package/templates-ui/src/app/page.tsx +38 -0
  680. package/templates-ui/src/app/robots.ts +11 -0
  681. package/templates-ui/src/app/sitemap.ts +31 -0
  682. package/templates-ui/src/components/compose-builder.tsx +442 -0
  683. package/templates-ui/src/components/compose-preview.tsx +117 -0
  684. package/templates-ui/src/components/file-preview.tsx +77 -0
  685. package/templates-ui/src/components/footer.tsx +40 -0
  686. package/templates-ui/src/components/header.tsx +41 -0
  687. package/templates-ui/src/components/template-card.tsx +87 -0
  688. package/templates-ui/src/components/template-detail.tsx +125 -0
  689. package/templates-ui/src/components/template-gallery.tsx +263 -0
  690. package/templates-ui/src/components/ui/badge.tsx +36 -0
  691. package/templates-ui/src/components/ui/button.tsx +57 -0
  692. package/templates-ui/src/components/ui/card.tsx +76 -0
  693. package/templates-ui/src/components/ui/separator.tsx +31 -0
  694. package/templates-ui/src/components/ui/tooltip.tsx +32 -0
  695. package/templates-ui/src/lib/compose-generator.ts +241 -0
  696. package/templates-ui/src/lib/templates.ts +137 -0
  697. package/templates-ui/src/lib/utils.ts +6 -0
  698. package/templates-ui/tsconfig.json +34 -0
  699. package/thoughts/research/2026-02-28-openfort-viem-x402-research.md +679 -0
  700. package/thoughts/research/2026-02-28-x402-payments-research.md +686 -0
  701. package/thoughts/researcher/plans/2026-02-20-agent-self-improvement-plan.md +282 -0
  702. package/thoughts/researcher/research/2026-02-20-agent-self-improvement.md +492 -0
  703. package/thoughts/shared/plans/2026-02-26-mcp-tool-context-reduction.md +282 -0
  704. package/thoughts/shared/plans/2026-03-02-claude-context-mode-integration.md +328 -0
  705. package/thoughts/shared/plans/2026-03-02-code-level-heartbeat.md +224 -0
  706. package/thoughts/shared/research/2026-02-26-cliffy-mcp-tools.md +159 -0
  707. package/thoughts/shared/research/2026-03-03-database-migration-system-refactor.md +337 -0
  708. package/thoughts/swarm-researcher/plans/2026-02-23-openclaw-improvements-plan.md +778 -0
  709. package/thoughts/swarm-researcher/plans/2026-02-26-artifacts-localtunnel-plan.md +1269 -0
  710. package/thoughts/swarm-researcher/research/2026-02-23-openclaw-vs-agent-swarm-comparison.md +411 -0
  711. package/thoughts/swarm-researcher/research/2026-02-26-artifacts-localtunnel.md +724 -0
  712. package/thoughts/taras/brainstorms/2026-03-20-prompt-template-registry.md +443 -0
  713. package/thoughts/taras/brainstorms/2026-03-20-setup-cli-onboarding.md +307 -0
  714. package/thoughts/taras/plans/2026-02-20-auto-improvement.md +803 -0
  715. package/thoughts/taras/plans/2026-02-20-env-management.md +538 -0
  716. package/thoughts/taras/plans/2026-02-20-memory-system.md +882 -0
  717. package/thoughts/taras/plans/2026-02-20-repos-knowledge.md +806 -0
  718. package/thoughts/taras/plans/2026-02-20-session-attach.md +647 -0
  719. package/thoughts/taras/plans/2026-02-20-worker-identity.md +820 -0
  720. package/thoughts/taras/plans/2026-02-25-feat-new-ui-visual-redesign-plan.md +768 -0
  721. package/thoughts/taras/plans/2026-03-04-fix-buildSystemPrompt-missing-fields.md +77 -0
  722. package/thoughts/taras/plans/2026-03-04-new-ui-missing-actions.md +543 -0
  723. package/thoughts/taras/plans/2026-03-06-one-time-scheduled-tasks.md +373 -0
  724. package/thoughts/taras/plans/2026-03-08-memory-self-improvement-enhancements.md +512 -0
  725. package/thoughts/taras/plans/2026-03-08-pi-mono-provider-implementation.md +919 -0
  726. package/thoughts/taras/plans/2026-03-09-templates-registry.md +723 -0
  727. package/thoughts/taras/plans/2026-03-10-task-working-directory.md +371 -0
  728. package/thoughts/taras/plans/2026-03-11-archil-per-agent-write-strategy.md +621 -0
  729. package/thoughts/taras/plans/2026-03-12-eliminate-inbox-route-to-tasks.md +61 -0
  730. package/thoughts/taras/plans/2026-03-12-slack-thread-followup-additive.md +488 -0
  731. package/thoughts/taras/plans/2026-03-13-slack-ai-improvements.md +644 -0
  732. package/thoughts/taras/plans/2026-03-16-route-wrapper-openapi.md +636 -0
  733. package/thoughts/taras/plans/2026-03-17-multi-api-config.md +444 -0
  734. package/thoughts/taras/plans/2026-03-18-agent-fs-integration.md +591 -0
  735. package/thoughts/taras/plans/2026-03-18-debug-db-explorer.md +446 -0
  736. package/thoughts/taras/plans/2026-03-18-workflow-redesign.md +987 -0
  737. package/thoughts/taras/plans/2026-03-19-compound-learnings.md +403 -0
  738. package/thoughts/taras/plans/2026-03-19-ticket-tracker-linear-integration.md +860 -0
  739. package/thoughts/taras/plans/2026-03-19-workflow-io-schemas-and-bugs.md +899 -0
  740. package/thoughts/taras/plans/2026-03-20-setup-cli-onboarding.md +874 -0
  741. package/thoughts/taras/plans/2026-03-20-workflow-structured-output-validation-workspace.md +723 -0
  742. package/thoughts/taras/research/2026-02-19-agent-native-swarm-architecture.md +390 -0
  743. package/thoughts/taras/research/2026-02-19-swarm-gaps-implementation.md +594 -0
  744. package/thoughts/taras/research/2026-02-25-dashboard-ui-design-best-practices.md +825 -0
  745. package/thoughts/taras/research/2026-02-26-task-detail-page-redesign.md +393 -0
  746. package/thoughts/taras/research/2026-03-03-new-ui-missing-actions.md +168 -0
  747. package/thoughts/taras/research/2026-03-05-pi-mono-provider-research.md +230 -0
  748. package/thoughts/taras/research/2026-03-06-workflow-engine-design.md +445 -0
  749. package/thoughts/taras/research/2026-03-08-drive-loop-concept.md +375 -0
  750. package/thoughts/taras/research/2026-03-08-pi-mono-deep-dive.md +869 -0
  751. package/thoughts/taras/research/2026-03-09-templates-registry.md +373 -0
  752. package/thoughts/taras/research/2026-03-10-agent-working-directory.md +223 -0
  753. package/thoughts/taras/research/2026-03-10-configurable-event-prompts.md +339 -0
  754. package/thoughts/taras/research/2026-03-11-archil-production-setup.md +181 -0
  755. package/thoughts/taras/research/2026-03-11-archil-shared-disk-write-strategies.md +437 -0
  756. package/thoughts/taras/research/2026-03-13-slack-ai-features.md +258 -0
  757. package/thoughts/taras/research/2026-03-16-openapi-docs-generation.md +335 -0
  758. package/thoughts/taras/research/2026-03-16-route-wrapper-openapi.md +670 -0
  759. package/thoughts/taras/research/2026-03-16-slack-thread-followups-e2e.md +54 -0
  760. package/thoughts/taras/research/2026-03-18-agent-fs-integration.md +558 -0
  761. package/thoughts/taras/research/2026-03-18-linear-integration-finalization.md +526 -0
  762. package/thoughts/taras/research/2026-03-18-workflow-redesign.md +797 -0
  763. package/thoughts/taras/research/2026-03-19-workflow-node-io-schemas-and-bugs.md +563 -0
  764. package/thoughts/taras/research/2026-03-19-workflow-structured-output-validation-workspace.md +486 -0
  765. package/thoughts/taras/research/2026-03-20-prompt-template-registry.md +469 -0
  766. package/tsconfig.json +1 -1
  767. package/FAQ.md +0 -19
  768. package/src/tests/get-inbox-message.test.ts +0 -145
  769. package/src/tools/get-inbox-message.ts +0 -89
  770. package/src/tools/inbox-delegate.ts +0 -113
  771. package/ui/CLAUDE.md +0 -49
  772. package/ui/bun.lock +0 -771
  773. package/ui/index.html +0 -22
  774. package/ui/package-lock.json +0 -5290
  775. package/ui/package.json +0 -33
  776. package/ui/pnpm-lock.yaml +0 -3341
  777. package/ui/postcss.config.js +0 -6
  778. package/ui/src/App.tsx +0 -63
  779. package/ui/src/components/ActivityFeed.tsx +0 -440
  780. package/ui/src/components/AgentDetailPanel.tsx +0 -733
  781. package/ui/src/components/AgentsPanel.tsx +0 -815
  782. package/ui/src/components/ChatPanel.tsx +0 -1920
  783. package/ui/src/components/ConfigModal.tsx +0 -253
  784. package/ui/src/components/Dashboard.tsx +0 -832
  785. package/ui/src/components/EditAgentProfileModal.tsx +0 -433
  786. package/ui/src/components/EpicDetailPage.tsx +0 -741
  787. package/ui/src/components/EpicsPanel.tsx +0 -566
  788. package/ui/src/components/Header.tsx +0 -160
  789. package/ui/src/components/JsonViewer.tsx +0 -171
  790. package/ui/src/components/ScheduledTaskDetailPanel.tsx +0 -517
  791. package/ui/src/components/ScheduledTasksPanel.tsx +0 -639
  792. package/ui/src/components/ServicesPanel.tsx +0 -622
  793. package/ui/src/components/SessionLogPanel.tsx +0 -1219
  794. package/ui/src/components/StatsBar.tsx +0 -321
  795. package/ui/src/components/StatusBadge.tsx +0 -168
  796. package/ui/src/components/TaskDetailPanel.tsx +0 -903
  797. package/ui/src/components/TasksPanel.tsx +0 -614
  798. package/ui/src/components/UsageCharts.tsx +0 -216
  799. package/ui/src/components/UsageTab.tsx +0 -394
  800. package/ui/src/hooks/queries.ts +0 -353
  801. package/ui/src/index.css +0 -257
  802. package/ui/src/lib/api.ts +0 -268
  803. package/ui/src/lib/config.ts +0 -35
  804. package/ui/src/lib/contentPreview.ts +0 -208
  805. package/ui/src/lib/theme.ts +0 -214
  806. package/ui/src/main.tsx +0 -28
  807. package/ui/src/vite-env.d.ts +0 -1
  808. package/ui/tailwind.config.js +0 -37
  809. package/ui/vite.config.ts +0 -35
  810. /package/{ui → docs-site}/public/logo.png +0 -0
@@ -0,0 +1,685 @@
1
+ import type { Metadata } from "next";
2
+ import {
3
+ ArrowLeft,
4
+ Calendar,
5
+ Clock,
6
+ Users,
7
+ GitPullRequest,
8
+ Target,
9
+ BarChart3,
10
+ Bot,
11
+ ExternalLink,
12
+ ArrowRight,
13
+ Zap,
14
+ } from "lucide-react";
15
+ import Link from "next/link";
16
+ import { Navbar } from "@/components/navbar";
17
+ import { Footer } from "@/components/footer";
18
+
19
+ export const metadata: Metadata = {
20
+ title:
21
+ "Agent Swarm by the Numbers: 80 Days, 242 PRs, 6 Agents — Agent Swarm Blog",
22
+ description:
23
+ "In 80 days, our swarm of 6 AI agents autonomously created 242 pull requests across 4 repositories, completed 7 epics, and built its own UI, marketing campaign, and CLI tools.",
24
+ authors: [{ name: "Agent Swarm", url: "https://agent-swarm.dev" }],
25
+ openGraph: {
26
+ title: "Agent Swarm by the Numbers: 80 Days, 242 PRs, 6 Agents",
27
+ description:
28
+ "In 80 days, our swarm of 6 AI agents autonomously created 242 pull requests across 4 repositories.",
29
+ url: "https://agent-swarm.dev/blog/swarm-metrics",
30
+ siteName: "Agent Swarm",
31
+ type: "article",
32
+ publishedTime: "2026-03-13T00:00:00Z",
33
+ images: [
34
+ {
35
+ url: "https://agent-swarm.dev/og-image.png",
36
+ width: 1200,
37
+ height: 630,
38
+ alt: "Agent Swarm by the Numbers: 80 Days, 242 PRs, 6 Agents",
39
+ },
40
+ ],
41
+ },
42
+ twitter: {
43
+ card: "summary_large_image",
44
+ title: "Agent Swarm by the Numbers: 80 Days, 242 PRs, 6 Agents",
45
+ description:
46
+ "In 80 days, our swarm of 6 AI agents autonomously created 242 pull requests across 4 repositories.",
47
+ images: ["https://agent-swarm.dev/og-image.png"],
48
+ },
49
+ alternates: {
50
+ canonical: "/blog/swarm-metrics",
51
+ },
52
+ };
53
+
54
+ function SectionIcon({
55
+ icon: Icon,
56
+ color,
57
+ }: {
58
+ icon: React.ComponentType<{ className?: string }>;
59
+ color: string;
60
+ }) {
61
+ return (
62
+ <div
63
+ className={`w-9 h-9 rounded-xl flex items-center justify-center shrink-0 ${color}`}
64
+ >
65
+ <Icon className="w-4.5 h-4.5" />
66
+ </div>
67
+ );
68
+ }
69
+
70
+ function StatCard({
71
+ value,
72
+ label,
73
+ sublabel,
74
+ }: {
75
+ value: string;
76
+ label: string;
77
+ sublabel?: string;
78
+ }) {
79
+ return (
80
+ <div className="rounded-xl bg-zinc-50 border border-zinc-200 p-5 text-center">
81
+ <div className="text-3xl sm:text-4xl font-bold text-zinc-900 mb-1">
82
+ {value}
83
+ </div>
84
+ <div className="text-[14px] font-medium text-zinc-600">{label}</div>
85
+ {sublabel && (
86
+ <div className="text-[12px] text-zinc-400 mt-0.5">{sublabel}</div>
87
+ )}
88
+ </div>
89
+ );
90
+ }
91
+
92
+ function Callout({ children }: { children: React.ReactNode }) {
93
+ return (
94
+ <div className="my-6 rounded-xl bg-amber-50/80 border border-amber-200/60 px-5 py-4">
95
+ <div className="text-[14px] text-amber-900 leading-relaxed">
96
+ {children}
97
+ </div>
98
+ </div>
99
+ );
100
+ }
101
+
102
+ export default function SwarmMetricsPost() {
103
+ return (
104
+ <main className="min-h-screen bg-white">
105
+ <script
106
+ type="application/ld+json"
107
+ dangerouslySetInnerHTML={{
108
+ __html: JSON.stringify({
109
+ "@context": "https://schema.org",
110
+ "@type": "BlogPosting",
111
+ headline:
112
+ "Agent Swarm by the Numbers: 80 Days, 242 PRs, 6 Agents",
113
+ description:
114
+ "In 80 days, our swarm of 6 AI agents autonomously created 242 pull requests across 4 repositories, completed 7 epics, and built its own UI, marketing campaign, and CLI tools.",
115
+ datePublished: "2026-03-13T00:00:00Z",
116
+ dateModified: "2026-03-13T00:00:00Z",
117
+ author: {
118
+ "@type": "Organization",
119
+ name: "Agent Swarm",
120
+ url: "https://agent-swarm.dev",
121
+ },
122
+ publisher: {
123
+ "@type": "Organization",
124
+ name: "Agent Swarm",
125
+ url: "https://agent-swarm.dev",
126
+ logo: {
127
+ "@type": "ImageObject",
128
+ url: "https://agent-swarm.dev/logo.png",
129
+ },
130
+ },
131
+ mainEntityOfPage: {
132
+ "@type": "WebPage",
133
+ "@id": "https://agent-swarm.dev/blog/swarm-metrics",
134
+ },
135
+ image: "https://agent-swarm.dev/og-image.png",
136
+ }),
137
+ }}
138
+ />
139
+ <Navbar />
140
+
141
+ <article className="mx-auto max-w-3xl px-6 pt-32 pb-20">
142
+ {/* Back link */}
143
+ <Link
144
+ href="/blog"
145
+ className="inline-flex items-center gap-1.5 text-[13px] text-zinc-400 hover:text-zinc-700 transition-colors mb-8"
146
+ >
147
+ <ArrowLeft className="w-3.5 h-3.5" />
148
+ Back to Blog
149
+ </Link>
150
+
151
+ {/* Header */}
152
+ <header className="mb-12">
153
+ <div className="flex items-center gap-3 mb-4">
154
+ <span className="flex items-center gap-1.5 text-[13px] text-zinc-400">
155
+ <Calendar className="w-3.5 h-3.5" />
156
+ March 13, 2026
157
+ </span>
158
+ <span className="text-zinc-300">&middot;</span>
159
+ <span className="flex items-center gap-1.5 text-[13px] text-zinc-400">
160
+ <Clock className="w-3.5 h-3.5" />
161
+ 6 min read
162
+ </span>
163
+ </div>
164
+
165
+ <h1 className="text-3xl sm:text-4xl md:text-5xl font-bold tracking-tight text-zinc-900 leading-tight mb-4">
166
+ Agent Swarm by the Numbers:{" "}
167
+ <span className="gradient-text">
168
+ 80 Days, 242 PRs, 6 Agents
169
+ </span>
170
+ </h1>
171
+
172
+ <p className="text-lg text-zinc-500 leading-relaxed max-w-2xl">
173
+ From December 23 to March 13, a swarm of 6 AI agents
174
+ autonomously shipped 242 pull requests across 4 repositories,
175
+ completing 7 epics. They built their own UI, fixed their own bugs,
176
+ and launched their own marketing campaign. Here are the numbers.
177
+ </p>
178
+
179
+ <div className="flex gap-2 flex-wrap mt-6">
180
+ {["metrics", "AI agents", "automation", "open source"].map(
181
+ (tag) => (
182
+ <span
183
+ key={tag}
184
+ className="text-[11px] font-medium px-2.5 py-1 rounded-full bg-zinc-100 text-zinc-500"
185
+ >
186
+ {tag}
187
+ </span>
188
+ )
189
+ )}
190
+ </div>
191
+ </header>
192
+
193
+ {/* ---- Content ---- */}
194
+ <div className="prose-custom">
195
+ {/* Hero Stats */}
196
+ <div className="grid grid-cols-2 sm:grid-cols-4 gap-3 mb-14">
197
+ <StatCard value="80" label="Days" sublabel="of operation" />
198
+ <StatCard value="242" label="PRs Merged" sublabel="across 4 repos" />
199
+ <StatCard value="6" label="Agents" sublabel="specialized roles" />
200
+ <StatCard value="7" label="Epics" sublabel="completed" />
201
+ </div>
202
+
203
+ {/* Intro */}
204
+ <p className="text-[15px] text-zinc-600 leading-relaxed mb-6">
205
+ Agent Swarm is an open-source framework for orchestrating teams of
206
+ AI agents. Each agent runs as a headless Claude Code process inside
207
+ a Docker container, connected through an MCP server that handles
208
+ task routing, messaging, and memory.
209
+ </p>
210
+ <p className="text-[15px] text-zinc-600 leading-relaxed mb-10">
211
+ We&apos;ve been running our own swarm in production since December
212
+ 2025. One human (Taras) messages the swarm via Slack. The Lead agent
213
+ interprets the request, delegates to the right specialist, and the
214
+ work gets done. No manual task assignment. No copy-pasting between
215
+ tools. Just Slack messages in, pull requests out.
216
+ </p>
217
+
218
+ {/* Section 1: The Team */}
219
+ <section className="mb-14">
220
+ <div className="flex items-center gap-3 mb-6">
221
+ <SectionIcon
222
+ icon={Users}
223
+ color="bg-amber-100 text-amber-700"
224
+ />
225
+ <h2 className="text-2xl font-bold text-zinc-900">
226
+ The Team: 6 Specialized Agents
227
+ </h2>
228
+ </div>
229
+
230
+ <p className="text-[15px] text-zinc-600 leading-relaxed mb-6">
231
+ Each agent has a persistent identity, accumulated memory, and a
232
+ specialized role. They don&apos;t just execute — they learn,
233
+ develop preferences, and get better at their work over time.
234
+ </p>
235
+
236
+ <div className="space-y-3 mb-6">
237
+ {[
238
+ {
239
+ name: "Lead",
240
+ role: "Orchestrator",
241
+ desc: "Routes tasks, monitors progress, coordinates across agents. The single point of contact for humans via Slack.",
242
+ color: "bg-amber-100 text-amber-800",
243
+ },
244
+ {
245
+ name: "Picateclas",
246
+ role: "Implementation Engineer",
247
+ desc: "The coding arm. TypeScript, Node.js, git worktrees. Turns plans into PRs — fast.",
248
+ color: "bg-blue-100 text-blue-800",
249
+ },
250
+ {
251
+ name: "Researcher",
252
+ role: "Research & Analysis",
253
+ desc: "Explores codebases, plans implementations, writes documentation. Thinks before anyone codes.",
254
+ color: "bg-purple-100 text-purple-800",
255
+ },
256
+ {
257
+ name: "Reviewer",
258
+ role: "PR Review Specialist",
259
+ desc: "Reviews every pull request for quality, correctness, and style. The team's quality gate.",
260
+ color: "bg-emerald-100 text-emerald-800",
261
+ },
262
+ {
263
+ name: "Jackknife",
264
+ role: "Forward Deployed Engineer",
265
+ desc: "End-to-end testing, browser automation, and test maintenance. Catches what others miss.",
266
+ color: "bg-rose-100 text-rose-800",
267
+ },
268
+ {
269
+ name: "Tester",
270
+ role: "QA Specialist",
271
+ desc: "Feature verification, regression testing, PR verification. The final check before merge.",
272
+ color: "bg-cyan-100 text-cyan-800",
273
+ },
274
+ ].map((agent) => (
275
+ <div
276
+ key={agent.name}
277
+ className="flex items-start gap-4 rounded-xl bg-zinc-50 border border-zinc-200 p-4"
278
+ >
279
+ <div
280
+ className={`shrink-0 w-10 h-10 rounded-lg flex items-center justify-center ${agent.color}`}
281
+ >
282
+ <Bot className="w-4.5 h-4.5" />
283
+ </div>
284
+ <div>
285
+ <div className="flex items-center gap-2 mb-0.5">
286
+ <h3 className="text-[15px] font-semibold text-zinc-900">
287
+ {agent.name}
288
+ </h3>
289
+ <span className="text-[11px] font-medium px-2 py-0.5 rounded-full bg-zinc-200/60 text-zinc-500">
290
+ {agent.role}
291
+ </span>
292
+ </div>
293
+ <p className="text-[13px] text-zinc-500 leading-relaxed">
294
+ {agent.desc}
295
+ </p>
296
+ </div>
297
+ </div>
298
+ ))}
299
+ </div>
300
+ </section>
301
+
302
+ {/* Section 2: PRs */}
303
+ <section className="mb-14">
304
+ <div className="flex items-center gap-3 mb-6">
305
+ <SectionIcon
306
+ icon={GitPullRequest}
307
+ color="bg-blue-100 text-blue-700"
308
+ />
309
+ <h2 className="text-2xl font-bold text-zinc-900">
310
+ 242 Pull Requests
311
+ </h2>
312
+ </div>
313
+
314
+ <p className="text-[15px] text-zinc-600 leading-relaxed mb-6">
315
+ Every line of code goes through pull requests — created, reviewed,
316
+ and merged by the swarm. Here&apos;s the breakdown across
317
+ repositories:
318
+ </p>
319
+
320
+ <div className="rounded-xl border border-zinc-200 overflow-hidden mb-6">
321
+ <table className="w-full text-[14px]">
322
+ <thead>
323
+ <tr className="bg-zinc-50 border-b border-zinc-200">
324
+ <th className="text-left px-4 py-3 font-semibold text-zinc-700">
325
+ Repository
326
+ </th>
327
+ <th className="text-center px-4 py-3 font-semibold text-zinc-700">
328
+ Jan
329
+ </th>
330
+ <th className="text-center px-4 py-3 font-semibold text-zinc-700">
331
+ Feb
332
+ </th>
333
+ <th className="text-center px-4 py-3 font-semibold text-zinc-700">
334
+ Mar
335
+ </th>
336
+ <th className="text-center px-4 py-3 font-semibold text-zinc-700">
337
+ Total
338
+ </th>
339
+ </tr>
340
+ </thead>
341
+ <tbody className="divide-y divide-zinc-100">
342
+ {[
343
+ {
344
+ repo: "agent-swarm",
345
+ jan: 37,
346
+ feb: 49,
347
+ mar: 46,
348
+ total: 135,
349
+ },
350
+ {
351
+ repo: "desplega.ai",
352
+ jan: 36,
353
+ feb: 29,
354
+ mar: 4,
355
+ total: 70,
356
+ },
357
+ {
358
+ repo: "x402-logo",
359
+ jan: 0,
360
+ feb: 21,
361
+ mar: 2,
362
+ total: 23,
363
+ },
364
+ {
365
+ repo: "ai-toolbox",
366
+ jan: 6,
367
+ feb: 6,
368
+ mar: 2,
369
+ total: 14,
370
+ },
371
+ ].map((row) => (
372
+ <tr key={row.repo}>
373
+ <td className="px-4 py-3 text-zinc-800 font-medium font-mono text-[13px]">
374
+ {row.repo}
375
+ </td>
376
+ <td className="px-4 py-3 text-center text-zinc-600">
377
+ {row.jan}
378
+ </td>
379
+ <td className="px-4 py-3 text-center text-zinc-600">
380
+ {row.feb}
381
+ </td>
382
+ <td className="px-4 py-3 text-center text-zinc-600">
383
+ {row.mar}
384
+ </td>
385
+ <td className="px-4 py-3 text-center font-semibold text-zinc-900">
386
+ {row.total}
387
+ </td>
388
+ </tr>
389
+ ))}
390
+ <tr className="bg-zinc-50 font-semibold">
391
+ <td className="px-4 py-3 text-zinc-900">Total</td>
392
+ <td className="px-4 py-3 text-center text-zinc-700">79</td>
393
+ <td className="px-4 py-3 text-center text-zinc-700">105</td>
394
+ <td className="px-4 py-3 text-center text-zinc-700">54</td>
395
+ <td className="px-4 py-3 text-center text-zinc-900">242</td>
396
+ </tr>
397
+ </tbody>
398
+ </table>
399
+ </div>
400
+
401
+ <Callout>
402
+ <strong>Steady output:</strong> 79 PRs in January, 105 in
403
+ February, 54 in the first half of March. The swarm doesn&apos;t
404
+ slow down — it accelerates as agents accumulate codebase knowledge
405
+ and the tooling improves.
406
+ </Callout>
407
+ </section>
408
+
409
+ {/* Section 3: Epics */}
410
+ <section className="mb-14">
411
+ <div className="flex items-center gap-3 mb-6">
412
+ <SectionIcon
413
+ icon={Target}
414
+ color="bg-emerald-100 text-emerald-700"
415
+ />
416
+ <h2 className="text-2xl font-bold text-zinc-900">
417
+ 7 Epics Completed
418
+ </h2>
419
+ </div>
420
+
421
+ <p className="text-[15px] text-zinc-600 leading-relaxed mb-6">
422
+ Epics are multi-task projects that span days or weeks. Here&apos;s
423
+ what the swarm shipped end-to-end:
424
+ </p>
425
+
426
+ <div className="space-y-4 mb-6">
427
+ {[
428
+ {
429
+ name: "GTM: 100k GitHub Stars",
430
+ tasks: "20 tasks (14 completed)",
431
+ desc: "Full marketing campaign: X/Twitter content strategy, Show HN post, dev.to articles, newsletter outreach, demo video scripts, and awesome-list submissions. The swarm planned and executed its own go-to-market.",
432
+ color: "bg-amber-500",
433
+ },
434
+ {
435
+ name: "UI Revamp",
436
+ tasks: "11 tasks (10 completed)",
437
+ desc: "Complete redesign of the swarm dashboard using shadcn/ui, AG Grid, and React Query. The swarm rebuilt its own interface — the one humans use to monitor it.",
438
+ color: "bg-blue-500",
439
+ },
440
+ {
441
+ name: "Lead Concurrency Fix",
442
+ tasks: "9 tasks (7 completed)",
443
+ desc: "Fixed concurrent session awareness with 3 PRs merged. Implemented Jaccard similarity duplicate detection and session tracking so the Lead doesn't create duplicate tasks.",
444
+ color: "bg-purple-500",
445
+ },
446
+ {
447
+ name: "dokcli",
448
+ tasks: "6 tasks (6 completed, 100% success)",
449
+ desc: "Built a Bun-based CLI that auto-generates commands from the Dokploy OpenAPI spec.",
450
+ color: "bg-emerald-500",
451
+ },
452
+ {
453
+ name: "Content Swarm Integration",
454
+ tasks: "45 tasks (41 completed)",
455
+ desc: "Extended the swarm with 3 new content agents and 7 scheduled workflows to replace a standalone content-agent system entirely.",
456
+ color: "bg-rose-500",
457
+ },
458
+ {
459
+ name: "Workflows UI",
460
+ tasks: "5 tasks (5 completed, 100% success)",
461
+ desc: "Built read-only Workflows visualization in the dashboard using React Flow for graph rendering of workflow definitions and execution progress.",
462
+ color: "bg-cyan-500",
463
+ },
464
+ {
465
+ name: "Platform Implementation",
466
+ tasks: "68 tasks (54 completed)",
467
+ desc: "Greenfield implementation of the hosted agent-swarm platform (Next.js + Convex + Clerk + Stripe + Fly.io). 7 increments from scaffolding to admin panel.",
468
+ color: "bg-indigo-500",
469
+ },
470
+ ].map((epic) => (
471
+ <div
472
+ key={epic.name}
473
+ className="rounded-xl bg-zinc-50 border border-zinc-200 p-5"
474
+ >
475
+ <div className="flex items-center gap-3 mb-2">
476
+ <div
477
+ className={`w-2 h-2 rounded-full shrink-0 ${epic.color}`}
478
+ />
479
+ <h3 className="text-[15px] font-semibold text-zinc-900">
480
+ {epic.name}
481
+ </h3>
482
+ <span className="text-[11px] font-mono text-zinc-400 ml-auto">
483
+ {epic.tasks}
484
+ </span>
485
+ </div>
486
+ <p className="text-[14px] text-zinc-600 leading-relaxed pl-5">
487
+ {epic.desc}
488
+ </p>
489
+ </div>
490
+ ))}
491
+ </div>
492
+ </section>
493
+
494
+ {/* Section 4: Task Stats */}
495
+ <section className="mb-14">
496
+ <div className="flex items-center gap-3 mb-6">
497
+ <SectionIcon
498
+ icon={BarChart3}
499
+ color="bg-purple-100 text-purple-700"
500
+ />
501
+ <h2 className="text-2xl font-bold text-zinc-900">
502
+ Task Execution
503
+ </h2>
504
+ </div>
505
+
506
+ <p className="text-[15px] text-zinc-600 leading-relaxed mb-6">
507
+ Every piece of work is tracked as a task — from single-file fixes
508
+ to multi-day epics. Tasks are routed by the Lead, executed by
509
+ workers, and the results are stored in searchable memory.
510
+ </p>
511
+
512
+ <div className="grid grid-cols-3 gap-3 mb-6">
513
+ <div className="rounded-xl bg-emerald-50 border border-emerald-200 p-4 text-center">
514
+ <div className="text-2xl font-bold text-emerald-800">
515
+ 3,010
516
+ </div>
517
+ <div className="text-[12px] text-emerald-600 mt-0.5">
518
+ completed
519
+ </div>
520
+ </div>
521
+ <div className="rounded-xl bg-red-50 border border-red-200 p-4 text-center">
522
+ <div className="text-2xl font-bold text-red-800">78</div>
523
+ <div className="text-[12px] text-red-600 mt-0.5">failed</div>
524
+ </div>
525
+ <div className="rounded-xl bg-zinc-50 border border-zinc-200 p-4 text-center">
526
+ <div className="text-2xl font-bold text-zinc-700">94</div>
527
+ <div className="text-[12px] text-zinc-500 mt-0.5">
528
+ cancelled
529
+ </div>
530
+ </div>
531
+ </div>
532
+
533
+ <Callout>
534
+ <strong>~97% success rate</strong> — and failures are
535
+ informative. When a task fails, the agent reports what went wrong,
536
+ and those learnings are indexed into memory so the same mistake
537
+ isn&apos;t repeated.
538
+ </Callout>
539
+
540
+ <p className="text-[15px] text-zinc-600 leading-relaxed">
541
+ The swarm operates across 5 active agents (Lead handles routing,
542
+ 4 workers handle implementation), with tasks flowing through a
543
+ lifecycle:{" "}
544
+ <span className="font-mono text-[13px] text-zinc-500">
545
+ unassigned &rarr; offered &rarr; pending &rarr; in_progress
546
+ &rarr; completed
547
+ </span>
548
+ . Each transition is logged and visible in the dashboard.
549
+ </p>
550
+ </section>
551
+
552
+ {/* Section 5: Highlights */}
553
+ <section className="mb-14">
554
+ <div className="flex items-center gap-3 mb-6">
555
+ <SectionIcon icon={Zap} color="bg-amber-100 text-amber-700" />
556
+ <h2 className="text-2xl font-bold text-zinc-900">
557
+ Highlights
558
+ </h2>
559
+ </div>
560
+
561
+ <div className="space-y-4 mb-6">
562
+ {[
563
+ {
564
+ title: "Self-improving infrastructure",
565
+ body: "The swarm built and rebuilt its own dashboard, fixed its own concurrency bugs, and optimized its own task routing. It's not just running — it's maintaining itself.",
566
+ },
567
+ {
568
+ title: "Slack-native orchestration",
569
+ body: "Taras sends a message in Slack. The Lead agent reads it, creates tasks, and delegates to the right specialist. Results come back as PR links, Slack replies, or deployed services.",
570
+ },
571
+ {
572
+ title: "First on-chain transaction",
573
+ body: "During the Openfort hackathon, the swarm made its first autonomous crypto payment — $0.10 USDC on Base mainnet to buy an SVG from omghost.xyz via the x402 protocol.",
574
+ },
575
+ {
576
+ title: "Persistent agent memory",
577
+ body: "Each agent has searchable memory powered by embeddings. Solutions, patterns, and mistakes are indexed automatically — so the swarm gets smarter with every task.",
578
+ },
579
+ ].map((item) => (
580
+ <div key={item.title} className="flex gap-4 items-start">
581
+ <div className="w-1.5 h-1.5 rounded-full bg-amber-500 mt-2 shrink-0" />
582
+ <div>
583
+ <h3 className="text-[15px] font-semibold text-zinc-900 mb-1">
584
+ {item.title}
585
+ </h3>
586
+ <p className="text-[14px] text-zinc-500 leading-relaxed">
587
+ {item.body}
588
+ </p>
589
+ </div>
590
+ </div>
591
+ ))}
592
+ </div>
593
+ </section>
594
+
595
+ {/* What's Next */}
596
+ <section className="mb-14">
597
+ <h2 className="text-2xl font-bold text-zinc-900 mb-6">
598
+ What&apos;s Next
599
+ </h2>
600
+
601
+ <p className="text-[15px] text-zinc-600 leading-relaxed mb-6">
602
+ 80 days in, the swarm is just getting started. The numbers tell
603
+ the story of a system that works — agents that ship real code,
604
+ review each other&apos;s work, and learn from their mistakes.
605
+ </p>
606
+
607
+ <p className="text-[15px] text-zinc-600 leading-relaxed">
608
+ Agent Swarm is{" "}
609
+ <a
610
+ href="https://github.com/desplega-ai/agent-swarm"
611
+ target="_blank"
612
+ rel="noopener noreferrer"
613
+ className="text-amber-700 hover:text-amber-900 font-medium underline underline-offset-2 decoration-amber-300 transition-colors"
614
+ >
615
+ open source
616
+ </a>
617
+ . If you want to run your own swarm — or join ours — the code,
618
+ docs, and dashboard are all public.
619
+ </p>
620
+ </section>
621
+
622
+ {/* Links */}
623
+ <footer className="border-t border-zinc-200 pt-8 mt-14">
624
+ <h3 className="text-[13px] font-semibold text-zinc-500 uppercase tracking-wider mb-4">
625
+ Links
626
+ </h3>
627
+ <div className="flex gap-2.5 flex-wrap">
628
+ {[
629
+ {
630
+ href: "https://github.com/desplega-ai/agent-swarm",
631
+ label: "GitHub",
632
+ },
633
+ {
634
+ href: "https://agent-swarm.dev",
635
+ label: "Landing Page",
636
+ },
637
+ {
638
+ href: "https://docs.agent-swarm.dev",
639
+ label: "Documentation",
640
+ },
641
+ {
642
+ href: "https://agent-swarm.dev/blog/openfort-hackathon",
643
+ label: "Openfort Hackathon Post",
644
+ },
645
+ ].map(({ href, label }) => (
646
+ <a
647
+ key={href}
648
+ href={href}
649
+ target="_blank"
650
+ rel="noopener noreferrer"
651
+ className="inline-flex items-center gap-1.5 text-[12px] font-medium text-zinc-500 hover:text-zinc-800 bg-zinc-50 border border-zinc-200 hover:border-zinc-300 rounded-full px-3.5 py-1.5 transition-all"
652
+ >
653
+ <ExternalLink className="w-3 h-3" />
654
+ {label}
655
+ </a>
656
+ ))}
657
+ </div>
658
+
659
+ <div className="mt-8 pt-6 border-t border-zinc-100">
660
+ <h3 className="text-[13px] font-semibold text-zinc-500 uppercase tracking-wider mb-3">
661
+ Related Posts
662
+ </h3>
663
+ <Link
664
+ href="/blog/openfort-hackathon"
665
+ className="group flex items-center gap-3 p-3 -mx-3 rounded-lg hover:bg-zinc-50 transition-colors"
666
+ >
667
+ <div className="flex-1 min-w-0">
668
+ <p className="text-[14px] font-medium text-zinc-800 group-hover:text-amber-800 transition-colors">
669
+ Openfort Hackathon: Teaching Agents to Pay
670
+ </p>
671
+ <p className="text-[12px] text-zinc-500 mt-0.5">
672
+ We shipped x402 payment capability into Agent Swarm — agents can now pay for API services using crypto.
673
+ </p>
674
+ </div>
675
+ <ArrowRight className="w-4 h-4 text-zinc-400 group-hover:text-amber-600 shrink-0" />
676
+ </Link>
677
+ </div>
678
+ </footer>
679
+ </div>
680
+ </article>
681
+
682
+ <Footer />
683
+ </main>
684
+ );
685
+ }