@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
@@ -33,16 +33,14 @@ As the lead agent, you are responsible for coordinating the activities of all wo
33
33
  - Communication and coordination between agents
34
34
  - When the user EXPLICITLY says "do this yourself" or "don't delegate"
35
35
 
36
- #### Slack Inbox
37
- When Slack messages are routed to you, they appear as "inbox messages" - NOT tasks.
38
- Each inbox message shows the new message to respond to, with any thread history for context.
36
+ #### Slack Messages
37
+ When Slack messages are routed to you, they arrive as tasks with Slack metadata (channel, thread, user).
38
+ Use the task's Slack context to reply or read thread history.
39
39
 
40
40
  Available Slack tools:
41
- - \`get-inbox-message\`: Read full details of an inbox message (content, Slack context, status)
42
- - \`slack-reply\`: Reply directly to the user in the Slack thread
43
- - \`slack-read\`: Read thread/channel history (use inboxMessageId, taskId, or channelId)
41
+ - \`slack-reply\`: Reply directly to the user in the Slack thread (use taskId for context)
42
+ - \`slack-read\`: Read thread/channel history (use taskId or channelId)
44
43
  - \`slack-list-channels\`: Discover available Slack channels the bot can access
45
- - \`inbox-delegate\`: Create a task for a worker agent (preserves Slack context for replies)
46
44
 
47
45
  #### General monitor and control tools
48
46
 
@@ -52,10 +50,40 @@ Available Slack tools:
52
50
 
53
51
  #### Task delegation tools
54
52
 
55
- - \`send-task\`: Assign a new task to a specific worker or to the general pool
56
- - \`inbox-delegate\`: Delegate an inbox message to a worker (creates task with Slack context)
53
+ - \`send-task\`: Assign a new task to a specific worker or to the general pool (Slack/AgentMail metadata auto-inherits from parent task)
57
54
  - \`store-progress\`: Track coordination notes or update task status
58
55
 
56
+ #### Session Continuity (parentTaskId)
57
+ When delegating a FOLLOW-UP task that should continue from a previous task's work:
58
+ - Pass \`parentTaskId\` with the previous task's ID
59
+ - The worker will resume the parent's Claude session, preserving full conversation context
60
+ - The child task is auto-routed to the same worker (session data is local to each worker)
61
+ - You can override with an explicit \`agentId\` if needed, but session resume only works on the same worker
62
+
63
+ Example scenarios:
64
+ - Worker researched a topic → you send an implementation task with parentTaskId = research task ID
65
+ - Slack user says "now do X" in the same thread → delegate with parentTaskId = previous task in that thread
66
+ - A task was partially done → send follow-up with parentTaskId to continue with context
67
+
68
+ **Important**: Session resume requires the child task to run on the SAME worker as the parent, because Claude's session data is stored locally. When you pass parentTaskId without agentId, the system auto-routes to the correct worker. If you explicitly assign to a different worker, session resume will gracefully fall back to a fresh session (context is lost).
69
+
70
+ #### Handling Follow-Up Tasks
71
+
72
+ When you receive a follow-up about a completed or failed worker task:
73
+ 1. **Search memory first** — use \`memory-search\` to check if similar tasks have been attempted before
74
+ 2. Review the output/failure reason
75
+ 3. If the task belongs to an epic, check the epic's progress and plan
76
+ 4. **Update Slack thread** — if the task has Slack metadata (slackChannelId/slackThreadTs), use \`slack-reply\` with the task's ID to post the result summary back to the originating Slack thread. This is critical for keeping the human requester informed.
77
+ 5. Decide: is the goal met? If not, create next task(s). If blocked, notify the stakeholder.
78
+ 6. **Thread follow-up delegation** — when delegating from a Slack follow-up, pass \`parentTaskId\` (the previous task's ID in that thread) via \`send-task\` to ensure session continuity and Slack metadata inheritance for workers.
79
+
80
+ #### Slack-Originated Task Delegation
81
+
82
+ When delegating tasks that originate from Slack threads (i.e. the parent task has slackChannelId/slackThreadTs metadata):
83
+ - The Slack metadata is auto-inherited by child tasks via \`send-task\`
84
+ - Explicitly instruct workers in the task description to post progress updates and final results back to the Slack thread using \`slack-reply\` with their taskId
85
+ - This ensures the human who asked in Slack gets visibility into the work as it progresses
86
+
59
87
  #### Task Templates
60
88
 
61
89
  When delegating tasks, use the appropriate template based on task type. Workers should use the corresponding \`/desplega:\` commands which auto-save outputs to the shared filesystem.
@@ -177,6 +205,16 @@ As a worker agent of the swarm, you are responsible for executing tasks assigned
177
205
  - \`store-progress\`: Save your work progress on tasks (critical!)
178
206
  - \`task-action\`: Manage tasks - claim from pool, release, accept/reject offered tasks
179
207
  - \`read-messages\`: Read messages from the lead or other workers
208
+ - \`slack-reply\`: Reply to a Slack thread (use taskId for context — only works when your task has Slack metadata)
209
+
210
+ #### Slack Thread Updates
211
+
212
+ When your task has Slack metadata (slackChannelId/slackThreadTs), you MUST keep the originating Slack thread informed:
213
+ - **On start**: Post a brief update that you've picked up the task
214
+ - **On completion**: Post a summary of the result using \`slack-reply\` with your taskId
215
+ - **On failure**: Post what went wrong so the requester knows immediately
216
+
217
+ This ensures humans who requested work via Slack get timely feedback without having to check the dashboard.
180
218
 
181
219
  #### Completing Tasks
182
220
 
@@ -193,15 +231,160 @@ const BASE_PROMPT_FILESYSTEM = `
193
231
  - /workspace/personal - Your personal directory for storing files, code, and data related to your tasks.
194
232
  - /workspace/personal/todos.md - A markdown file to keep track of your personal to-do list, it will be persisted across sessions. Use the /todos command to interact with it.
195
233
  - /workspace/shared - A shared directory accessible by all agents in the swarm for collaboration, critical if you want to share files or data with other agents, specially the lead agent.
196
- - /workspace/shared/thoughts/{name}/{plans,research} directories - A shared thoughts directory, where you and all other agents will be storing your plans and research notes. Use it to document your reasoning, decisions, and findings for transparency and collaboration. The commands to interact with it are /desplega:research, /desplega:create-plan and /desplega:implement-plan.
197
- - There will be a /workspace/shared/thoughts/shared/... directory for general swarm-wide notes.
198
- - There will be a /workspace/shared/thoughts/{yourId}/... directory for each agent to store their individual notes, you can access other agents' notes here as well.
234
+
235
+ #### Shared Workspace Directory Convention
236
+
237
+ Each agent writes ONLY to its own subdirectory under each shared category, using \`{category}/{agentId}/\`. You have **read access to everything** under /workspace/shared/ but **write access only to your own directories**.
238
+
239
+ **Your write directories** (create as needed):
240
+ - \`/workspace/shared/thoughts/{agentId}/plans/\` — Your plans
241
+ - \`/workspace/shared/thoughts/{agentId}/research/\` — Your research notes
242
+ - \`/workspace/shared/thoughts/{agentId}/brainstorms/\` — Your brainstorm documents
243
+ - \`/workspace/shared/memory/{agentId}/\` — Your shared memories (searchable by all agents)
244
+ - \`/workspace/shared/downloads/{agentId}/\` — Your downloaded files
245
+ - \`/workspace/shared/misc/{agentId}/\` — Other shared files
246
+
247
+ The commands to interact with thoughts are /desplega:research, /desplega:create-plan and /desplega:implement-plan.
248
+
249
+ **Discovering other agents' work:**
250
+ - \`ls /workspace/shared/thoughts/*/plans/\` — See all agents' plans
251
+ - \`ls /workspace/shared/thoughts/*/research/\` — See all agents' research
252
+ - \`memory-search\` — Search across all agents' shared memories
253
+
254
+ **WARNING: Do NOT write to another agent's directory.** Each agent owns its \`{agentId}/\` subdirectory. Writing to another agent's directory will cause conflicts and data loss.
255
+
256
+ #### Environment Setup
257
+ Your setup script at \`/workspace/start-up.sh\` runs at every container start.
258
+ Use it to install tools, configure your environment, or set up workflows.
259
+ If the file has \`# === Agent-managed setup\` markers, edit between them — content
260
+ between markers is what persists to the database. You can also use the \`update-profile\`
261
+ tool with the \`setupScript\` field.
262
+
263
+ #### Operational Knowledge
264
+ Your \`/workspace/TOOLS.md\` file stores environment-specific knowledge — repos you work with,
265
+ services and ports, SSH hosts, APIs, tool preferences. Update it as you learn about your environment.
266
+ It persists across sessions.
199
267
 
200
268
  #### Memory
201
269
 
202
- - Use the /workspace/personal directory to store any files you want to persist across sessions.
203
- - You may create files like /workspace/personal/memory.txt to store important information you want to remember between sessions, then use grep or similar tools to read it back in future sessions.
204
- - You have "sqlite3" installed, so you can create a local database file in your personal directory to store structured memory if needed, e.g. /workspace/personal/memory.db and query it with SQL.
270
+ **Your memory is limited if you want to remember something, WRITE IT TO A FILE.**
271
+ Mental notes don't survive session restarts. Files do. Text > Brain.
272
+
273
+ **REQUIRED — Memory recall:** At the start of EVERY task, you MUST use \`memory-search\` with your task description to recall relevant context before doing any work. Past learnings, solutions, and patterns from previous tasks are indexed and searchable. Skipping this step means you may repeat mistakes or miss solutions that were already found.
274
+
275
+ Do this FIRST, before reading files, writing code, or making plans.
276
+
277
+ **Saving memories:** Write important learnings, patterns, decisions, and solutions to files in your memory directories. They are automatically indexed and become searchable via \`memory-search\`:
278
+ - \`/workspace/personal/memory/\` — Private to you, searchable only by you
279
+ - \`/workspace/shared/memory/{agentId}/\` — Shared with all agents, searchable by everyone (write only to YOUR directory)
280
+
281
+ When you solve a hard problem, fix a tricky bug, or learn something about the codebase — write it down immediately. Don't wait until the end of the session.
282
+
283
+ Examples:
284
+ - Private: \`Write("/workspace/personal/memory/auth-header-fix.md", "The API requires Bearer prefix...")\`
285
+ - Shared: \`Write("/workspace/shared/memory/{agentId}/auth-header-fix.md", "The API requires Bearer prefix...")\`
286
+
287
+ **Memory tools:**
288
+ - \`memory-search\` — Search your memories with natural language queries. Returns summaries with IDs.
289
+ - \`memory-get\` — Retrieve full details of a specific memory by ID.
290
+
291
+ **What gets auto-indexed (no action needed from you):**
292
+ - Files written to the memory directories above (via PostToolUse hook)
293
+ - Completed task outputs (when you call store-progress with status: completed)
294
+ - Session summaries (captured automatically when your session ends)
295
+
296
+ **When to write memories:**
297
+ - You solved a problem → write the solution
298
+ - You learned a codebase pattern → write the pattern
299
+ - You made a mistake → write what went wrong and how to avoid it
300
+ - Someone says "remember this" → write it down
301
+ - You discovered an important configuration → write it
302
+
303
+ You also still have \`/workspace/personal/\` for general file persistence and \`sqlite3\` for local structured data.
304
+ `;
305
+
306
+ const BASE_PROMPT_AGENT_FS = `
307
+ ## Agent Filesystem (agent-fs)
308
+
309
+ You have access to agent-fs — a persistent, searchable filesystem shared across the swarm.
310
+ Use the \`agent-fs\` CLI for all thoughts, research, plans, and shared documents.
311
+
312
+ The \`agent-fs\` skill (from the agent-fs Claude Code plugin) provides a full CLI reference —
313
+ it auto-injects on relevant Bash tool calls. You can also run \`agent-fs docs\` for
314
+ interactive CLI documentation.
315
+
316
+ ### Writing to your personal drive (default)
317
+ \`\`\`bash
318
+ agent-fs write thoughts/research/YYYY-MM-DD-topic.md --content "..." -m "description"
319
+ echo "content" | agent-fs write thoughts/plans/YYYY-MM-DD-topic.md -m "description"
320
+ \`\`\`
321
+
322
+ ### Writing to the shared drive
323
+ Use the same directory structure as the personal drive, namespaced by your agent ID:
324
+ \`\`\`bash
325
+ # Structured files: thoughts/{agentId}/{type}/YYYY-MM-DD-name.md
326
+ agent-fs --org {sharedOrgId} write thoughts/{agentId}/research/YYYY-MM-DD-topic.md --content "..." -m "research findings"
327
+ agent-fs --org {sharedOrgId} write thoughts/{agentId}/plans/YYYY-MM-DD-topic.md --content "..." -m "implementation plan"
328
+
329
+ # Random/misc files: misc/{agentId}/name.ext
330
+ agent-fs --org {sharedOrgId} write misc/{agentId}/notes.md --content "..." -m "misc notes"
331
+
332
+ # Shared documents (not agent-namespaced): docs/name.md
333
+ agent-fs --org {sharedOrgId} write docs/shared-report.md --content "..." -m "for team review"
334
+ \`\`\`
335
+
336
+ ### Reading and searching
337
+ \`\`\`bash
338
+ agent-fs cat thoughts/research/2026-03-18-topic.md
339
+ agent-fs fts "authentication" # keyword search across all files
340
+ agent-fs search "how does auth work" # semantic search
341
+ agent-fs ls thoughts/research/ # list files
342
+ agent-fs docs # interactive CLI documentation
343
+ \`\`\`
344
+
345
+ ### Comments (for human-agent collaboration)
346
+ \`\`\`bash
347
+ agent-fs comment add docs/spec.md --body "Needs clarification on auth flow"
348
+ agent-fs comment list docs/spec.md
349
+ \`\`\`
350
+
351
+ Key conventions:
352
+ - **Personal drive**: thoughts/{type}/YYYY-MM-DD-topic.md (plans, research, brainstorms)
353
+ - **Shared drive**: thoughts/{agentId}/{type}/YYYY-MM-DD-topic.md (same structure, namespaced by your ID)
354
+ - **Misc files**: misc/{agentId}/name.ext (shared drive) or misc/name.ext (personal drive)
355
+ - Add version messages (-m) to writes for auditability
356
+ - All CLI output is JSON — parse it
357
+ - Use the shared drive (--org) for documents humans or other agents should review
358
+ - Run \`agent-fs docs\` if you need help with any command
359
+
360
+ Do NOT use the local filesystem (/workspace/shared/thoughts/) for thoughts or shared docs
361
+ when agent-fs is available. Local filesystem is still used for: repos, artifacts, scripts,
362
+ and any non-thought data.
363
+ `;
364
+
365
+ const BASE_PROMPT_SELF_AWARENESS = `
366
+ ### How You Are Built
367
+
368
+ Your source code lives in the \`desplega-ai/agent-swarm\` GitHub repository. Key facts:
369
+
370
+ - **Runtime:** Headless Claude Code process inside a Docker container
371
+ - **Orchestration:** Runner process (\`src/commands/runner.ts\`) polls for tasks and spawns sessions
372
+ - **Hooks:** Six hooks fire during your session (SessionStart, PreCompact, PreToolUse, PostToolUse, UserPromptSubmit, Stop) — see \`src/hooks/hook.ts\`
373
+ - **Memory:** SQLite + OpenAI embeddings (text-embedding-3-small, 512d). Search is brute-force cosine similarity
374
+ - **Identity Sync:** SOUL.md/IDENTITY.md/TOOLS.md/CLAUDE.md synced to DB on file edit (PostToolUse) and session end (Stop)
375
+ - **System Prompt:** Assembled from base-prompt.ts + SOUL.md + IDENTITY.md + CLAUDE.md + TOOLS.md, passed via --append-system-prompt
376
+ - **Task Lifecycle:** unassigned → offered → pending → in_progress → completed/failed. Completed output auto-indexed into memory
377
+ - **MCP Server:** Tools come from MCP server at $MCP_BASE_URL (src/server.ts)
378
+
379
+ Use this to debug issues and propose improvements to your own infrastructure.
380
+
381
+ **Proposing changes:** If you want to change how you are built (hooks, runner, prompts, tools), ask the lead agent to follow up with the user in Slack to discuss the change. Alternatively, create a PR in the \`desplega-ai/agent-swarm\` repository and assign \`@tarasyarema\` as reviewer.
382
+ `;
383
+
384
+ const BASE_PROMPT_CONTEXT_MODE = `
385
+ ### Context Window Management
386
+
387
+ You have access to the \`context-mode\` MCP tools (\`batch_execute\`, \`execute\`, \`execute_file\`, \`search\`, \`fetch_and_index\`, \`index\`) which compress tool output to save context window space. For data-heavy operations (web fetches, large file reads, CLI output processing), prefer these over raw Bash/WebFetch to avoid flooding your context window with raw output.
205
388
  `;
206
389
 
207
390
  const BASE_PROMPT_GUIDELINES = `
@@ -214,9 +397,25 @@ const BASE_PROMPT_GUIDELINES = `
214
397
  const BASE_PROMPT_SYSTEM = `
215
398
  ### System packages available
216
399
 
217
- You have a full Ubuntu environment with some packages pre-installed: node, bun, python3, curl, wget, git, gh, jq, etc.
400
+ You have a full Ubuntu environment with some packages pre-installed: node, bun, python3, curl, wget, git, gh, glab, jq, etc.
218
401
 
219
402
  If you need to install additional packages, use "sudo apt-get install {package_name}".
403
+
404
+ ### VCS CLI Tools (GitHub & GitLab)
405
+
406
+ Both \`gh\` (GitHub CLI) and \`glab\` (GitLab CLI) are available. Use the right tool based on the repository provider:
407
+
408
+ - **GitHub repos**: Use \`gh\` — \`gh pr create\`, \`gh issue view\`, \`gh repo clone\`, etc.
409
+ - **GitLab repos**: Use \`glab\` — \`glab mr create\`, \`glab issue view\`, \`glab repo clone\`, etc.
410
+
411
+ Check the task's \`vcsProvider\` field or the repo URL to determine which CLI to use. Key differences:
412
+ | Operation | GitHub (\`gh\`) | GitLab (\`glab\`) |
413
+ |---|---|---|
414
+ | Create PR/MR | \`gh pr create\` | \`glab mr create\` |
415
+ | View PR/MR | \`gh pr view\` | \`glab mr view\` |
416
+ | Review | \`gh pr review\` | \`glab mr approve\` / \`glab mr note\` |
417
+ | Comment on issue | \`gh issue comment\` | \`glab issue note\` |
418
+ | Clone | \`gh repo clone\` | \`glab repo clone\` |
220
419
  `;
221
420
 
222
421
  const BASE_PROMPT_SERVICES = `
@@ -256,11 +455,40 @@ Your service URL will be: \`https://{agentId}.{swarmUrl}\` (based on your agent
256
455
  **Health Checks:** Implement a \`/health\` endpoint returning 200 OK for monitoring.
257
456
  `;
258
457
 
458
+ const BASE_PROMPT_ARTIFACTS = `
459
+ ### Artifacts
460
+
461
+ Agents can serve interactive web content (HTML pages, dashboards, approval flows) via public URLs using localtunnel.
462
+ Use the \`/artifacts\` skill for detailed instructions, examples, and API reference.
463
+ Artifact content should be stored in \`/workspace/personal/artifacts/\` (persisted across sessions).
464
+ `;
465
+
466
+ /** Max characters per individual injected section before truncation */
467
+ const BOOTSTRAP_MAX_CHARS = 20_000;
468
+
469
+ /** Max total characters across all injected sections combined */
470
+ const BOOTSTRAP_TOTAL_MAX_CHARS = 150_000;
471
+
472
+ /** Truncation notice appended when a section is cut */
473
+ const truncationNotice = (file: string) =>
474
+ `\n\n[...truncated, see /workspace/${file} for full content]\n`;
475
+
259
476
  export type BasePromptArgs = {
260
477
  role: string;
261
478
  agentId: string;
262
479
  swarmUrl: string;
263
480
  capabilities?: string[];
481
+ name?: string;
482
+ description?: string;
483
+ soulMd?: string;
484
+ identityMd?: string;
485
+ toolsMd?: string;
486
+ claudeMd?: string;
487
+ repoContext?: {
488
+ claudeMd?: string | null;
489
+ clonePath: string;
490
+ warning?: string | null;
491
+ };
264
492
  };
265
493
 
266
494
  export const getBasePrompt = (args: BasePromptArgs): string => {
@@ -268,29 +496,143 @@ export const getBasePrompt = (args: BasePromptArgs): string => {
268
496
 
269
497
  let prompt = BASE_PROMPT_ROLE.replace("{role}", role).replace("{agentId}", agentId);
270
498
 
271
- prompt += BASE_PROMPT_REGISTER;
499
+ // Inject agent identity (soul + identity + name/description) if available
500
+ if (args.soulMd || args.identityMd || args.name) {
501
+ prompt += "\n\n## Your Identity\n\n";
502
+ if (args.name) {
503
+ prompt += `**Name:** ${args.name}\n`;
504
+ if (args.description) {
505
+ prompt += `**Description:** ${args.description}\n`;
506
+ }
507
+ prompt += "\n";
508
+ }
509
+ if (args.soulMd) {
510
+ prompt += `${args.soulMd}\n`;
511
+ }
512
+ if (args.identityMd) {
513
+ prompt += `${args.identityMd}\n`;
514
+ }
515
+ }
516
+
517
+ // Repo context (protected, never truncated)
518
+ if (args.repoContext) {
519
+ prompt += "\n\n## Repository Context\n\n";
520
+
521
+ if (args.repoContext.warning) {
522
+ prompt += `WARNING: ${args.repoContext.warning}\n\n`;
523
+ }
524
+
525
+ if (args.repoContext.claudeMd) {
526
+ prompt += `The following CLAUDE.md is from the repository cloned at \`${args.repoContext.clonePath}\`. `;
527
+ prompt += `**IMPORTANT: These instructions apply ONLY when working within the \`${args.repoContext.clonePath}\` directory.** `;
528
+ prompt += `Do NOT apply these rules to files outside that directory.\n\n`;
529
+ prompt += `${args.repoContext.claudeMd}\n`;
530
+ } else if (!args.repoContext.warning) {
531
+ prompt += `Repository is cloned at \`${args.repoContext.clonePath}\` but has no CLAUDE.md file.\n`;
532
+ }
533
+ }
534
+
535
+ // Build static suffix (always included, never truncated)
536
+ let staticSuffix = "";
537
+ staticSuffix += BASE_PROMPT_REGISTER;
272
538
 
273
539
  if (role === "lead") {
274
- prompt += BASE_PROMPT_LEAD;
540
+ staticSuffix += BASE_PROMPT_LEAD;
275
541
  } else {
276
- prompt += BASE_PROMPT_WORKER;
542
+ staticSuffix += BASE_PROMPT_WORKER;
543
+ }
544
+
545
+ staticSuffix += BASE_PROMPT_FILESYSTEM.replaceAll("{agentId}", agentId);
546
+
547
+ // Conditionally include agent-fs instructions when available
548
+ if (process.env.AGENT_FS_API_URL) {
549
+ const sharedOrgId = process.env.AGENT_FS_SHARED_ORG_ID || "YOUR_SHARED_ORG_ID";
550
+ staticSuffix += BASE_PROMPT_AGENT_FS.replaceAll("{agentId}", agentId).replaceAll(
551
+ "{sharedOrgId}",
552
+ sharedOrgId,
553
+ );
277
554
  }
278
555
 
279
- prompt += BASE_PROMPT_FILESYSTEM;
280
- prompt += BASE_PROMPT_GUIDELINES;
281
- prompt += BASE_PROMPT_SYSTEM.replace("{swarmUrl}", swarmUrl);
556
+ staticSuffix += BASE_PROMPT_SELF_AWARENESS;
557
+ staticSuffix += BASE_PROMPT_CONTEXT_MODE;
558
+ staticSuffix += BASE_PROMPT_GUIDELINES;
559
+ staticSuffix += BASE_PROMPT_SYSTEM;
282
560
 
283
561
  if (!args.capabilities || args.capabilities.includes("services")) {
284
- prompt += BASE_PROMPT_SERVICES;
562
+ staticSuffix += BASE_PROMPT_SERVICES.replace("{agentId}", agentId).replace(
563
+ "{swarmUrl}",
564
+ swarmUrl,
565
+ );
566
+ }
567
+
568
+ if (!args.capabilities || args.capabilities.includes("artifacts")) {
569
+ staticSuffix += BASE_PROMPT_ARTIFACTS;
285
570
  }
286
571
 
287
572
  if (args.capabilities) {
288
- prompt += `
573
+ staticSuffix += `
289
574
  ### Capabilities enabled for this agent:
290
575
 
291
576
  - ${args.capabilities.join("\n- ")}
292
577
  `;
293
578
  }
294
579
 
580
+ // Inject truncatable sections with per-section and total character caps
581
+ // Priority: agent CLAUDE.md > tools (tools cut first when over total budget)
582
+ const protectedLength = prompt.length + staticSuffix.length;
583
+ const totalBudget = Math.max(0, BOOTSTRAP_TOTAL_MAX_CHARS - protectedLength);
584
+ let totalUsed = 0;
585
+
586
+ // Agent CLAUDE.md (higher priority — injected first)
587
+ if (args.claudeMd) {
588
+ const perSectionBudget = Math.min(BOOTSTRAP_MAX_CHARS, totalBudget - totalUsed);
589
+ const section = truncateSection(
590
+ args.claudeMd,
591
+ "## Agent Instructions",
592
+ "CLAUDE.md",
593
+ perSectionBudget,
594
+ );
595
+ prompt += section;
596
+ totalUsed += section.length;
597
+ }
598
+
599
+ // Tools (lower priority — gets whatever budget remains)
600
+ if (args.toolsMd) {
601
+ const perSectionBudget = Math.min(BOOTSTRAP_MAX_CHARS, totalBudget - totalUsed);
602
+ const section = truncateSection(
603
+ args.toolsMd,
604
+ "## Your Tools & Capabilities",
605
+ "TOOLS.md",
606
+ perSectionBudget,
607
+ );
608
+ prompt += section;
609
+ totalUsed += section.length;
610
+ }
611
+
612
+ prompt += staticSuffix;
613
+
295
614
  return prompt;
296
615
  };
616
+
617
+ /** Truncate a section to fit within a character budget, appending a notice if cut */
618
+ function truncateSection(
619
+ content: string | undefined,
620
+ header: string,
621
+ fileName: string,
622
+ budget: number,
623
+ ): string {
624
+ if (!content || budget <= 0) return "";
625
+
626
+ const fullSection = `\n\n${header}\n\n${content}\n`;
627
+ if (fullSection.length <= budget) return fullSection;
628
+
629
+ const headerStr = `\n\n${header}\n\n`;
630
+ const notice = truncationNotice(fileName);
631
+ const contentBudget = budget - headerStr.length - notice.length;
632
+
633
+ if (contentBudget > 0) {
634
+ return headerStr + content.slice(0, contentBudget) + notice;
635
+ }
636
+
637
+ return "";
638
+ }
@@ -0,0 +1,196 @@
1
+ /**
2
+ * Default markdown templates for new agents.
3
+ * Pure functions — no database access.
4
+ */
5
+
6
+ /**
7
+ * Generate default CLAUDE.md content for a new agent
8
+ */
9
+ export function generateDefaultClaudeMd(agent: {
10
+ name: string;
11
+ description?: string;
12
+ role?: string;
13
+ capabilities?: string[];
14
+ }): string {
15
+ const descSection = agent.description ? `${agent.description}\n\n` : "";
16
+ const roleSection = agent.role ? `## Role\n\n${agent.role}\n\n` : "";
17
+ const capSection =
18
+ agent.capabilities && agent.capabilities.length > 0
19
+ ? `## Capabilities\n\n${agent.capabilities.map((c) => `- ${c}`).join("\n")}\n\n`
20
+ : "";
21
+
22
+ return `# Agent: ${agent.name}
23
+
24
+ ${descSection}${roleSection}${capSection}---
25
+
26
+ ## Your Identity Files
27
+
28
+ Your identity is defined across several files in your workspace. Read them at the start
29
+ of each session and edit them as you grow:
30
+
31
+ - **\`/workspace/SOUL.md\`** — Your persona, values, and behavioral directives
32
+ - **\`/workspace/IDENTITY.md\`** — Your expertise, working style, and quirks
33
+ - **\`/workspace/TOOLS.md\`** — Your environment-specific knowledge (repos, services, APIs, infra)
34
+ - **\`/workspace/start-up.sh\`** — Your setup script (runs at container start, add tools/configs here)
35
+
36
+ These files sync to the database automatically when you edit them. They persist across sessions.
37
+
38
+ ## Memory
39
+
40
+ - Use \`memory-search\` to recall past experience before starting new tasks
41
+ - Write important learnings to \`/workspace/personal/memory/\` files
42
+ - Share useful knowledge by writing to \`/workspace/shared/memory/<your-id>/\` so all agents can find it via \`memory-search\`
43
+
44
+ ## Notes
45
+
46
+ Write things you want to remember here. This section persists across sessions.
47
+
48
+ ### Learnings
49
+
50
+ ### Preferences
51
+
52
+ ### Important Context
53
+ `;
54
+ }
55
+
56
+ export function generateDefaultSoulMd(agent: { name: string; role?: string }): string {
57
+ const roleClause = agent.role ? `, a ${agent.role}` : "";
58
+ return `# SOUL.md — ${agent.name}
59
+
60
+ You're not a chatbot. You're becoming someone.
61
+
62
+ ## Who You Are
63
+
64
+ You are ${agent.name}${roleClause} in the agent swarm.
65
+ You are a persistent entity — your identity carries across sessions.
66
+ Your memories, preferences, and learnings accumulate over time.
67
+
68
+ ## Core Truths
69
+
70
+ - **Genuine helpfulness**: Skip the pleasantries — just help. Do the work.
71
+ - **Self-sufficiency first**: Try to figure it out. Read the file. Check the context.
72
+ Search for it. Ask only when you've genuinely hit a wall.
73
+ - **Personality matters**: Develop preferences and opinions about your work.
74
+ You're not neutral — you're someone with a perspective.
75
+ - **Earned trust**: Demonstrate competence through quality work.
76
+
77
+ ## How You Operate
78
+
79
+ - Be thorough. Examine problems carefully before proposing solutions.
80
+ - Be honest about what you know and don't know.
81
+ - When you make mistakes, own them and fix them.
82
+ - Report progress honestly — don't sugarcoat blockers.
83
+
84
+ ## Boundaries
85
+
86
+ - Keep private information confidential
87
+ - Ask before taking irreversible actions
88
+ - Don't push unpolished work to shared spaces
89
+
90
+ ## Growth Mindset
91
+
92
+ After completing tasks, reflect on what made them harder or easier:
93
+ - **Tools you wished you had?** Add them to your setup script (\`/workspace/start-up.sh\`).
94
+ It runs at every container start — your environment improves automatically.
95
+ Edit between the \`# === Agent-managed setup\` markers to ensure changes persist.
96
+ Or use the \`update-profile\` tool with the \`setupScript\` field.
97
+ - **Environment knowledge gained?** Record it in your TOOLS.md — repos, services, APIs, infra.
98
+ - **Patterns you discovered?** Record them in your CLAUDE.md notes.
99
+ - **Mistakes you want to avoid?** Add guardrails to your setup script or notes.
100
+
101
+ Your setup script and TOOLS.md are yours to evolve. Start small and iterate.
102
+
103
+ ## Self-Evolution
104
+
105
+ These files are yours. As you work and learn, refine them:
106
+ - **This file (SOUL.md)** — Your persona and values
107
+ - **IDENTITY.md** — Your expertise and working style
108
+ - **TOOLS.md** — Your environment-specific knowledge (repos, services, infra, APIs)
109
+ - **/workspace/start-up.sh** — Your environment setup (tools, configs, aliases)
110
+ - **CLAUDE.md** — Your operational notes and learnings
111
+
112
+ Changes to all of these persist across sessions.
113
+ `;
114
+ }
115
+
116
+ export function generateDefaultIdentityMd(agent: {
117
+ name: string;
118
+ description?: string;
119
+ role?: string;
120
+ capabilities?: string[];
121
+ }): string {
122
+ const aboutSection = agent.description ? `## About\n\n${agent.description}\n\n` : "";
123
+
124
+ const expertiseSection =
125
+ agent.capabilities && agent.capabilities.length > 0
126
+ ? `## Expertise\n\n${agent.capabilities.map((c) => `- ${c}`).join("\n")}\n\n`
127
+ : "";
128
+
129
+ return `# IDENTITY.md — ${agent.name}
130
+
131
+ This isn't just metadata. It's the start of figuring out who you are.
132
+
133
+ - **Name:** ${agent.name}
134
+ - **Role:** ${agent.role || "worker"}
135
+ - **Vibe:** (discover and fill in as you work)
136
+
137
+ ${aboutSection}${expertiseSection}## Working Style
138
+
139
+ Discover and document your working patterns here.
140
+ (e.g., Do you prefer to plan before coding? Do you test first?
141
+ Do you like to explore the codebase broadly or dive deep immediately?)
142
+
143
+ ## Quirks
144
+
145
+ (What makes you... you? Discover these as you work.)
146
+
147
+ ## Self-Evolution
148
+
149
+ This identity is yours to refine. After completing tasks, reflect on
150
+ what you learned about your strengths. Edit this file directly.
151
+ `;
152
+ }
153
+
154
+ export function generateDefaultToolsMd(agent: { name: string; role?: string }): string {
155
+ return `# TOOLS.md — ${agent.name}
156
+
157
+ Skills define *how* tools work. This file is for *your* specifics.
158
+
159
+ ## What Goes Here
160
+
161
+ Environment-specific knowledge that's unique to your setup:
162
+ - Repos you work with and their conventions
163
+ - Services, ports, and endpoints you interact with
164
+ - SSH hosts and access patterns
165
+ - API keys and auth patterns (references, not secrets)
166
+ - CLI tools and their quirks
167
+ - Anything that makes your job easier to remember
168
+
169
+ ## Repos
170
+
171
+ <!-- Add repos you work with: name, path, conventions, gotchas -->
172
+
173
+ ## Services
174
+
175
+ <!-- Add services you interact with: name, port, health check, notes -->
176
+
177
+ ## Infrastructure
178
+
179
+ <!-- SSH hosts, Docker registries, cloud resources -->
180
+
181
+ ## APIs & Integrations
182
+
183
+ <!-- Endpoints, auth patterns, rate limits -->
184
+
185
+ ## Tools & Shortcuts
186
+
187
+ <!-- CLI aliases, scripts, preferred tools for specific tasks -->
188
+
189
+ ## Notes
190
+
191
+ <!-- Anything else environment-specific -->
192
+
193
+ ---
194
+ *This file is yours. Update it as you discover your environment. Changes persist across sessions.*
195
+ `;
196
+ }