@desplega.ai/agent-swarm 1.20.0 → 1.51.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (561) hide show
  1. package/README.md +271 -169
  2. package/openapi.json +5015 -0
  3. package/package.json +40 -7
  4. package/plugin/commands/close-issue.md +7 -3
  5. package/plugin/commands/create-pr.md +18 -12
  6. package/plugin/commands/implement-issue.md +7 -3
  7. package/plugin/commands/respond-github.md +8 -4
  8. package/plugin/commands/review-pr.md +44 -10
  9. package/plugin/commands/start-leader.md +1 -3
  10. package/plugin/commands/start-worker.md +1 -3
  11. package/plugin/commands/work-on-task.md +22 -3
  12. package/plugin/pi-skills/close-issue/SKILL.md +90 -0
  13. package/plugin/pi-skills/create-pr/SKILL.md +99 -0
  14. package/plugin/pi-skills/implement-issue/SKILL.md +135 -0
  15. package/plugin/pi-skills/investigate-sentry-issue/SKILL.md +138 -0
  16. package/plugin/pi-skills/respond-github/SKILL.md +98 -0
  17. package/plugin/pi-skills/review-offered-task/SKILL.md +45 -0
  18. package/plugin/pi-skills/review-pr/SKILL.md +261 -0
  19. package/plugin/pi-skills/start-leader/SKILL.md +121 -0
  20. package/plugin/pi-skills/start-worker/SKILL.md +60 -0
  21. package/plugin/pi-skills/swarm-chat/SKILL.md +82 -0
  22. package/plugin/pi-skills/todos/SKILL.md +66 -0
  23. package/plugin/pi-skills/work-on-task/SKILL.md +65 -0
  24. package/plugin/skills/artifacts/examples/approval-flow.ts +34 -0
  25. package/plugin/skills/artifacts/examples/hono-dashboard.ts +31 -0
  26. package/plugin/skills/artifacts/examples/multi-artifact.ts +20 -0
  27. package/plugin/skills/artifacts/examples/static-report.sh +17 -0
  28. package/plugin/skills/artifacts/skill.md +71 -0
  29. package/src/agentmail/app.ts +65 -0
  30. package/src/agentmail/handlers.ts +262 -0
  31. package/src/agentmail/index.ts +9 -0
  32. package/src/agentmail/templates.ts +111 -0
  33. package/src/agentmail/types.ts +51 -0
  34. package/src/artifact-sdk/browser-sdk.ts +30 -0
  35. package/src/artifact-sdk/index.ts +2 -0
  36. package/src/artifact-sdk/localtunnel.d.ts +20 -0
  37. package/src/artifact-sdk/port.ts +12 -0
  38. package/src/artifact-sdk/server.ts +156 -0
  39. package/src/artifact-sdk/tunnel.ts +19 -0
  40. package/src/be/chunking.ts +193 -0
  41. package/src/be/db-queries/oauth.ts +90 -0
  42. package/src/be/db-queries/tracker.ts +182 -0
  43. package/src/be/db.ts +3327 -784
  44. package/src/be/embedding.ts +80 -0
  45. package/src/be/migrations/001_initial.sql +409 -0
  46. package/src/be/migrations/002_one_time_schedules.sql +59 -0
  47. package/src/be/migrations/003_workflows.sql +51 -0
  48. package/src/be/migrations/004_workflow_source.sql +81 -0
  49. package/src/be/migrations/005_epic_next_steps.sql +2 -0
  50. package/src/be/migrations/006_vcs_provider.sql +94 -0
  51. package/src/be/migrations/007_task_dir.sql +2 -0
  52. package/src/be/migrations/008_workflow_redesign.sql +85 -0
  53. package/src/be/migrations/009_tracker_integration.sql +144 -0
  54. package/src/be/migrations/010_step_diagnostics.sql +1 -0
  55. package/src/be/migrations/011_step_next_port.sql +1 -0
  56. package/src/be/migrations/012_trigger_schema.sql +1 -0
  57. package/src/be/migrations/013_task_output_schema.sql +2 -0
  58. package/src/be/migrations/014_prompt_templates.sql +33 -0
  59. package/src/be/migrations/015_workflow_workspace.sql +3 -0
  60. package/src/be/migrations/016_active_session_runner_session.sql +4 -0
  61. package/src/be/migrations/017_channel_activity_cursors.sql +6 -0
  62. package/src/be/migrations/018_fix_seed_double_version.sql +30 -0
  63. package/src/be/migrations/runner.ts +188 -0
  64. package/src/be/seed.ts +62 -0
  65. package/src/cli.tsx +231 -299
  66. package/src/commands/artifact.ts +241 -0
  67. package/src/commands/onboard/compose-generator.ts +169 -0
  68. package/src/commands/onboard/env-generator.ts +79 -0
  69. package/src/commands/onboard/manifest.ts +37 -0
  70. package/src/commands/onboard/presets.ts +85 -0
  71. package/src/commands/onboard/service-names.ts +47 -0
  72. package/src/commands/onboard/steps/core-credentials.tsx +111 -0
  73. package/src/commands/onboard/steps/custom-templates.tsx +168 -0
  74. package/src/commands/onboard/steps/generate.tsx +154 -0
  75. package/src/commands/onboard/steps/harness-credentials.tsx +195 -0
  76. package/src/commands/onboard/steps/harness.tsx +21 -0
  77. package/src/commands/onboard/steps/health-check.tsx +171 -0
  78. package/src/commands/onboard/steps/integration-github.tsx +105 -0
  79. package/src/commands/onboard/steps/integration-gitlab.tsx +79 -0
  80. package/src/commands/onboard/steps/integration-menu.tsx +58 -0
  81. package/src/commands/onboard/steps/integration-sentry.tsx +79 -0
  82. package/src/commands/onboard/steps/integration-slack.tsx +165 -0
  83. package/src/commands/onboard/steps/post-connect.tsx +145 -0
  84. package/src/commands/onboard/steps/post-dashboard.tsx +34 -0
  85. package/src/commands/onboard/steps/post-task.tsx +103 -0
  86. package/src/commands/onboard/steps/prereq-check.tsx +178 -0
  87. package/src/commands/onboard/steps/review.tsx +82 -0
  88. package/src/commands/onboard/steps/start.tsx +97 -0
  89. package/src/commands/onboard/templates.ts +34 -0
  90. package/src/commands/onboard/types.ts +259 -0
  91. package/src/commands/onboard.tsx +425 -0
  92. package/src/commands/runner.ts +1540 -630
  93. package/src/commands/setup.tsx +23 -38
  94. package/src/commands/shared/client-config.ts +41 -0
  95. package/src/commands/templates.ts +172 -0
  96. package/src/github/app.ts +8 -0
  97. package/src/github/handlers.ts +384 -151
  98. package/src/github/index.ts +1 -0
  99. package/src/github/mentions-aliases.test.ts +73 -0
  100. package/src/github/mentions.test.ts +3 -3
  101. package/src/github/mentions.ts +32 -6
  102. package/src/github/templates.ts +398 -0
  103. package/src/github/types.ts +1 -0
  104. package/src/gitlab/auth.ts +63 -0
  105. package/src/gitlab/handlers.ts +368 -0
  106. package/src/gitlab/index.ts +19 -0
  107. package/src/gitlab/reactions.ts +104 -0
  108. package/src/gitlab/templates.ts +140 -0
  109. package/src/gitlab/types.ts +130 -0
  110. package/src/heartbeat/heartbeat.ts +434 -0
  111. package/src/heartbeat/index.ts +1 -0
  112. package/src/heartbeat/templates.ts +30 -0
  113. package/src/hooks/hook.ts +555 -4
  114. package/src/hooks/tool-loop-detection.test.ts +158 -0
  115. package/src/hooks/tool-loop-detection.ts +167 -0
  116. package/src/http/active-sessions.ts +199 -0
  117. package/src/http/agents.ts +328 -0
  118. package/src/http/config.ts +191 -0
  119. package/src/http/core.ts +309 -0
  120. package/src/http/db-query.ts +91 -0
  121. package/src/http/ecosystem.ts +63 -0
  122. package/src/http/epics.ts +460 -0
  123. package/src/http/index.ts +216 -0
  124. package/src/http/mcp.ts +77 -0
  125. package/src/http/memory.ts +168 -0
  126. package/src/http/openapi.ts +109 -0
  127. package/src/http/poll.ts +299 -0
  128. package/src/http/prompt-templates.ts +412 -0
  129. package/src/http/repos.ts +195 -0
  130. package/src/http/route-def.ts +123 -0
  131. package/src/http/schedules.ts +426 -0
  132. package/src/http/session-data.ts +241 -0
  133. package/src/http/stats.ts +174 -0
  134. package/src/http/tasks.ts +468 -0
  135. package/src/http/trackers/index.ts +10 -0
  136. package/src/http/trackers/linear.ts +187 -0
  137. package/src/http/types.ts +12 -0
  138. package/src/http/utils.ts +87 -0
  139. package/src/http/webhooks.ts +432 -0
  140. package/src/http/workflows.ts +530 -0
  141. package/src/http.ts +1 -1890
  142. package/src/linear/README.md +65 -0
  143. package/src/linear/app.ts +48 -0
  144. package/src/linear/client.ts +18 -0
  145. package/src/linear/index.ts +1 -0
  146. package/src/linear/oauth.ts +35 -0
  147. package/src/linear/outbound.ts +212 -0
  148. package/src/linear/sync.ts +567 -0
  149. package/src/linear/templates.ts +47 -0
  150. package/src/linear/types.ts +7 -0
  151. package/src/linear/webhook.ts +104 -0
  152. package/src/oauth/README.md +66 -0
  153. package/src/oauth/index.ts +6 -0
  154. package/src/oauth/wrapper.ts +204 -0
  155. package/src/prompts/base-prompt.ts +150 -265
  156. package/src/prompts/defaults.ts +196 -0
  157. package/src/prompts/registry.ts +57 -0
  158. package/src/prompts/resolver.ts +296 -0
  159. package/src/prompts/session-templates.ts +604 -0
  160. package/src/providers/claude-adapter.ts +442 -0
  161. package/src/providers/index.ts +24 -0
  162. package/src/providers/pi-mono-adapter.ts +442 -0
  163. package/src/providers/pi-mono-extension.ts +624 -0
  164. package/src/providers/pi-mono-mcp-client.ts +124 -0
  165. package/src/providers/types.ts +75 -0
  166. package/src/scheduler/scheduler.test.ts +2 -0
  167. package/src/scheduler/scheduler.ts +231 -40
  168. package/src/server.ts +97 -6
  169. package/src/slack/HEURISTICS.md +105 -0
  170. package/src/slack/actions.ts +133 -0
  171. package/src/slack/app.ts +7 -0
  172. package/src/slack/assistant.ts +118 -0
  173. package/src/slack/blocks.ts +233 -0
  174. package/src/slack/channel-activity.ts +177 -0
  175. package/src/slack/commands.ts +31 -17
  176. package/src/slack/files.ts +1 -1
  177. package/src/slack/handlers.test.ts +114 -1
  178. package/src/slack/handlers.ts +230 -55
  179. package/src/slack/responses.ts +120 -67
  180. package/src/slack/router.ts +17 -99
  181. package/src/slack/templates.ts +55 -0
  182. package/src/slack/thread-buffer.ts +213 -0
  183. package/src/slack/watcher.ts +119 -4
  184. package/src/tests/agent-activity.test.ts +247 -0
  185. package/src/tests/agentmail-filters.test.ts +97 -0
  186. package/src/tests/artifact-sdk.test.ts +800 -0
  187. package/src/tests/base-prompt.test.ts +264 -0
  188. package/src/tests/build-pi-skills.test.ts +127 -0
  189. package/src/tests/channel-activity.test.ts +363 -0
  190. package/src/tests/claude-adapter.test.ts +126 -0
  191. package/src/tests/context-versioning.test.ts +425 -0
  192. package/src/tests/db-queries-oauth.test.ts +197 -0
  193. package/src/tests/db-queries-tracker.test.ts +230 -0
  194. package/src/tests/epics.test.ts +3 -3
  195. package/src/tests/error-tracker.test.ts +368 -0
  196. package/src/tests/fetch-resolved-env.test.ts +167 -0
  197. package/src/tests/generate-default-claude-md.test.ts +9 -1
  198. package/src/tests/generate-identity-templates.test.ts +124 -0
  199. package/src/tests/gitlab-auth.test.ts +109 -0
  200. package/src/tests/gitlab-handlers.test.ts +691 -0
  201. package/src/tests/gitlab-vcs-db.test.ts +177 -0
  202. package/src/tests/heartbeat.test.ts +364 -0
  203. package/src/tests/http-api-integration.test.ts +1698 -0
  204. package/src/tests/linear-outbound-sync.test.ts +200 -0
  205. package/src/tests/linear-webhook.test.ts +406 -0
  206. package/src/tests/match-route.test.ts +187 -0
  207. package/src/tests/memory.test.ts +737 -0
  208. package/src/tests/migration-runner-regressions.test.ts +86 -0
  209. package/src/tests/model-control.test.ts +338 -0
  210. package/src/tests/oauth-wrapper.test.ts +147 -0
  211. package/src/tests/onboard-compose.test.ts +138 -0
  212. package/src/tests/onboard-env.test.ts +174 -0
  213. package/src/tests/onboard-manifest.test.ts +137 -0
  214. package/src/tests/pi-mono-adapter.test.ts +234 -0
  215. package/src/tests/pool-session-logs.test.ts +199 -0
  216. package/src/tests/progress-dedup.test.ts +98 -0
  217. package/src/tests/prompt-template-github.test.ts +682 -0
  218. package/src/tests/prompt-template-remaining.test.ts +504 -0
  219. package/src/tests/prompt-template-resolver.test.ts +621 -0
  220. package/src/tests/prompt-template-session.test.ts +363 -0
  221. package/src/tests/prompt-templates-db.test.ts +616 -0
  222. package/src/tests/provider-adapter.test.ts +122 -0
  223. package/src/tests/provider-command-format.test.ts +98 -0
  224. package/src/tests/reload-config.test.ts +170 -0
  225. package/src/tests/runner-polling-api.test.ts +25 -20
  226. package/src/tests/scheduled-tasks.test.ts +104 -0
  227. package/src/tests/scheduler-backoff.test.ts +166 -0
  228. package/src/tests/self-improvement.test.ts +541 -0
  229. package/src/tests/session-attach.test.ts +536 -0
  230. package/src/tests/session-costs.test.ts +267 -1
  231. package/src/tests/slack-actions.test.ts +133 -0
  232. package/src/tests/slack-assistant.test.ts +136 -0
  233. package/src/tests/slack-blocks.test.ts +246 -0
  234. package/src/tests/slack-metadata-inheritance.test.ts +243 -0
  235. package/src/tests/slack-queue-offline.test.ts +174 -0
  236. package/src/tests/slack-router.test.ts +181 -0
  237. package/src/tests/slack-thread-buffer.test.ts +305 -0
  238. package/src/tests/slack-thread-followups.test.ts +298 -0
  239. package/src/tests/slack-watcher.test.ts +101 -0
  240. package/src/tests/structured-output.test.ts +307 -0
  241. package/src/tests/swarm-repos.test.ts +198 -0
  242. package/src/tests/task-cancellation.test.ts +6 -4
  243. package/src/tests/task-working-dir.test.ts +176 -0
  244. package/src/tests/template-fetch.test.ts +490 -0
  245. package/src/tests/tool-annotations.test.ts +371 -0
  246. package/src/tests/tracker-tools.test.ts +184 -0
  247. package/src/tests/update-profile-agentid.test.ts +248 -0
  248. package/src/tests/update-profile-api.test.ts +143 -3
  249. package/src/tests/update-profile-auth.test.ts +195 -0
  250. package/src/tests/validation-adapters.test.ts +86 -0
  251. package/src/tests/vcs-provider.test.ts +27 -0
  252. package/src/tests/workflow-agent-task.test.ts +196 -0
  253. package/src/tests/workflow-async-v2.test.ts +508 -0
  254. package/src/tests/workflow-convergence.test.ts +541 -0
  255. package/src/tests/workflow-definition-validation.test.ts +366 -0
  256. package/src/tests/workflow-engine-v2.test.ts +691 -0
  257. package/src/tests/workflow-executors.test.ts +736 -0
  258. package/src/tests/workflow-http-v2.test.ts +599 -0
  259. package/src/tests/workflow-integration-io.test.ts +902 -0
  260. package/src/tests/workflow-io-schemas.test.ts +624 -0
  261. package/src/tests/workflow-registry.test.ts +592 -0
  262. package/src/tests/workflow-retry-v2.test.ts +401 -0
  263. package/src/tests/workflow-retry-validation.test.ts +282 -0
  264. package/src/tests/workflow-schedule-trigger.test.ts +104 -0
  265. package/src/tests/workflow-template.test.ts +288 -0
  266. package/src/tests/workflow-trigger-schema.test.ts +359 -0
  267. package/src/tests/workflow-triggers-v2.test.ts +264 -0
  268. package/src/tests/workflow-versions.test.ts +208 -0
  269. package/src/tests/workflow-workspace.test.ts +272 -0
  270. package/src/tests/x402-client.test.ts +117 -0
  271. package/src/tests/x402-config.test.ts +182 -0
  272. package/src/tests/x402-spending-tracker.test.ts +185 -0
  273. package/src/tools/cancel-task.ts +2 -0
  274. package/src/tools/context-diff.ts +171 -0
  275. package/src/tools/context-history.ts +138 -0
  276. package/src/tools/create-channel.ts +1 -0
  277. package/src/tools/db-query.ts +78 -0
  278. package/src/tools/delete-channel.ts +132 -0
  279. package/src/tools/epics/assign-task-to-epic.ts +1 -0
  280. package/src/tools/epics/create-epic.ts +3 -2
  281. package/src/tools/epics/delete-epic.ts +2 -0
  282. package/src/tools/epics/get-epic-details.ts +2 -0
  283. package/src/tools/epics/list-epics.ts +2 -0
  284. package/src/tools/epics/unassign-task-from-epic.ts +1 -0
  285. package/src/tools/epics/update-epic.ts +7 -4
  286. package/src/tools/get-swarm.ts +2 -0
  287. package/src/tools/get-task-details.ts +2 -0
  288. package/src/tools/get-tasks.ts +27 -1
  289. package/src/tools/inject-learning.ts +106 -0
  290. package/src/tools/join-swarm.ts +17 -7
  291. package/src/tools/list-channels.ts +2 -0
  292. package/src/tools/list-services.ts +2 -0
  293. package/src/tools/memory-get.ts +56 -0
  294. package/src/tools/memory-search.ts +131 -0
  295. package/src/tools/my-agent-info.ts +2 -0
  296. package/src/tools/poll-task.ts +2 -20
  297. package/src/tools/post-message.ts +1 -0
  298. package/src/tools/prompt-templates/delete.ts +86 -0
  299. package/src/tools/prompt-templates/get.ts +89 -0
  300. package/src/tools/prompt-templates/index.ts +5 -0
  301. package/src/tools/prompt-templates/list.ts +95 -0
  302. package/src/tools/prompt-templates/preview.ts +84 -0
  303. package/src/tools/prompt-templates/set.ts +117 -0
  304. package/src/tools/read-messages.ts +2 -0
  305. package/src/tools/register-agentmail-inbox.ts +166 -0
  306. package/src/tools/register-service.ts +2 -0
  307. package/src/tools/schedules/create-schedule.ts +134 -24
  308. package/src/tools/schedules/delete-schedule.ts +2 -0
  309. package/src/tools/schedules/list-schedules.ts +20 -4
  310. package/src/tools/schedules/run-schedule-now.ts +1 -0
  311. package/src/tools/schedules/update-schedule.ts +49 -17
  312. package/src/tools/send-task.ts +132 -10
  313. package/src/tools/slack-download-file.ts +4 -2
  314. package/src/tools/slack-list-channels.ts +2 -0
  315. package/src/tools/slack-post.ts +2 -0
  316. package/src/tools/slack-read.ts +2 -0
  317. package/src/tools/slack-reply.ts +2 -0
  318. package/src/tools/slack-upload-file.ts +2 -0
  319. package/src/tools/store-progress.ts +205 -4
  320. package/src/tools/swarm-config/delete-config.ts +87 -0
  321. package/src/tools/swarm-config/get-config.ts +108 -0
  322. package/src/tools/swarm-config/index.ts +4 -0
  323. package/src/tools/swarm-config/list-config.ts +99 -0
  324. package/src/tools/swarm-config/set-config.ts +118 -0
  325. package/src/tools/task-action.ts +50 -5
  326. package/src/tools/task-dedup.ts +97 -0
  327. package/src/tools/templates.ts +53 -0
  328. package/src/tools/tool-config.ts +124 -0
  329. package/src/tools/tracker/index.ts +6 -0
  330. package/src/tools/tracker/tracker-link-epic.ts +64 -0
  331. package/src/tools/tracker/tracker-link-task.ts +64 -0
  332. package/src/tools/tracker/tracker-map-agent.ts +57 -0
  333. package/src/tools/tracker/tracker-status.ts +56 -0
  334. package/src/tools/tracker/tracker-sync-status.ts +42 -0
  335. package/src/tools/tracker/tracker-unlink.ts +41 -0
  336. package/src/tools/unregister-service.ts +2 -0
  337. package/src/tools/update-profile.ts +172 -17
  338. package/src/tools/update-service-status.ts +2 -0
  339. package/src/tools/utils.ts +10 -1
  340. package/src/tools/workflows/create-workflow.ts +129 -0
  341. package/src/tools/workflows/delete-workflow.ts +42 -0
  342. package/src/tools/workflows/get-workflow-run.ts +59 -0
  343. package/src/tools/workflows/get-workflow.ts +53 -0
  344. package/src/tools/workflows/index.ts +9 -0
  345. package/src/tools/workflows/list-workflow-runs.ts +48 -0
  346. package/src/tools/workflows/list-workflows.ts +42 -0
  347. package/src/tools/workflows/retry-workflow-run.ts +40 -0
  348. package/src/tools/workflows/trigger-workflow.ts +96 -0
  349. package/src/tools/workflows/update-workflow.ts +133 -0
  350. package/src/tracker/types.ts +51 -0
  351. package/src/types.ts +530 -14
  352. package/src/utils/credentials.test.ts +156 -0
  353. package/src/utils/credentials.ts +50 -0
  354. package/src/utils/error-tracker.ts +190 -0
  355. package/src/vcs/index.ts +15 -0
  356. package/src/vcs/types.ts +5 -0
  357. package/src/workflows/checkpoint.ts +121 -0
  358. package/src/workflows/cooldown.ts +28 -0
  359. package/src/workflows/definition.ts +235 -0
  360. package/src/workflows/engine.ts +580 -0
  361. package/src/workflows/event-bus.ts +29 -0
  362. package/src/workflows/executors/agent-task.ts +103 -0
  363. package/src/workflows/executors/base.ts +86 -0
  364. package/src/workflows/executors/code-match.ts +88 -0
  365. package/src/workflows/executors/index.ts +16 -0
  366. package/src/workflows/executors/notify.ts +93 -0
  367. package/src/workflows/executors/property-match.ts +104 -0
  368. package/src/workflows/executors/raw-llm.ts +83 -0
  369. package/src/workflows/executors/registry.ts +76 -0
  370. package/src/workflows/executors/script.ts +103 -0
  371. package/src/workflows/executors/validate.ts +215 -0
  372. package/src/workflows/executors/vcs.ts +58 -0
  373. package/src/workflows/index.ts +61 -0
  374. package/src/workflows/input.ts +46 -0
  375. package/src/workflows/json-schema-validator.ts +118 -0
  376. package/src/workflows/recovery.ts +139 -0
  377. package/src/workflows/resume.ts +229 -0
  378. package/src/workflows/retry-poller.ts +216 -0
  379. package/src/workflows/template.ts +74 -0
  380. package/src/workflows/templates.ts +86 -0
  381. package/src/workflows/triggers.ts +124 -0
  382. package/src/workflows/validation.ts +104 -0
  383. package/src/workflows/version.ts +44 -0
  384. package/src/x402/cli.ts +140 -0
  385. package/src/x402/client.ts +192 -0
  386. package/src/x402/config.ts +131 -0
  387. package/src/x402/index.ts +37 -0
  388. package/src/x402/openfort-signer.ts +83 -0
  389. package/src/x402/spending-tracker.ts +109 -0
  390. package/templates/official/coder/CLAUDE.md +49 -0
  391. package/templates/official/coder/IDENTITY.md +28 -0
  392. package/templates/official/coder/SOUL.md +43 -0
  393. package/templates/official/coder/TOOLS.md +40 -0
  394. package/templates/official/coder/config.json +23 -0
  395. package/templates/official/coder/start-up.sh +23 -0
  396. package/templates/official/content-reviewer/CLAUDE.md +68 -0
  397. package/templates/official/content-reviewer/IDENTITY.md +28 -0
  398. package/templates/official/content-reviewer/SOUL.md +44 -0
  399. package/templates/official/content-reviewer/TOOLS.md +37 -0
  400. package/templates/official/content-reviewer/config.json +23 -0
  401. package/templates/official/content-reviewer/start-up.sh +23 -0
  402. package/templates/official/content-strategist/CLAUDE.md +63 -0
  403. package/templates/official/content-strategist/IDENTITY.md +33 -0
  404. package/templates/official/content-strategist/SOUL.md +48 -0
  405. package/templates/official/content-strategist/TOOLS.md +47 -0
  406. package/templates/official/content-strategist/config.json +23 -0
  407. package/templates/official/content-strategist/start-up.sh +23 -0
  408. package/templates/official/content-writer/CLAUDE.md +72 -0
  409. package/templates/official/content-writer/IDENTITY.md +30 -0
  410. package/templates/official/content-writer/SOUL.md +46 -0
  411. package/templates/official/content-writer/TOOLS.md +44 -0
  412. package/templates/official/content-writer/config.json +23 -0
  413. package/templates/official/content-writer/start-up.sh +23 -0
  414. package/templates/official/forward-deployed-engineer/CLAUDE.md +54 -0
  415. package/templates/official/forward-deployed-engineer/IDENTITY.md +37 -0
  416. package/templates/official/forward-deployed-engineer/SOUL.md +55 -0
  417. package/templates/official/forward-deployed-engineer/config.json +21 -0
  418. package/templates/official/lead/CLAUDE.md +33 -0
  419. package/templates/official/lead/IDENTITY.md +36 -0
  420. package/templates/official/lead/SOUL.md +51 -0
  421. package/templates/official/lead/config.json +22 -0
  422. package/templates/official/researcher/CLAUDE.md +46 -0
  423. package/templates/official/researcher/IDENTITY.md +28 -0
  424. package/templates/official/researcher/SOUL.md +43 -0
  425. package/templates/official/researcher/config.json +21 -0
  426. package/templates/official/reviewer/CLAUDE.md +63 -0
  427. package/templates/official/reviewer/IDENTITY.md +28 -0
  428. package/templates/official/reviewer/SOUL.md +45 -0
  429. package/templates/official/reviewer/config.json +21 -0
  430. package/templates/official/tester/CLAUDE.md +53 -0
  431. package/templates/official/tester/IDENTITY.md +28 -0
  432. package/templates/official/tester/SOUL.md +55 -0
  433. package/templates/official/tester/config.json +21 -0
  434. package/templates/schema.ts +35 -0
  435. package/.claude/settings.local.json +0 -115
  436. package/.dockerignore +0 -61
  437. package/.editorconfig +0 -15
  438. package/.env.docker.example +0 -39
  439. package/.env.example +0 -40
  440. package/.github/workflows/ci.yml +0 -76
  441. package/.github/workflows/docker-and-deploy.yml +0 -117
  442. package/.wts-config.json +0 -4
  443. package/.wts-setup.ts +0 -102
  444. package/CLAUDE.md +0 -104
  445. package/CONTRIBUTING.md +0 -270
  446. package/DEPLOYMENT.md +0 -605
  447. package/Dockerfile +0 -57
  448. package/Dockerfile.worker +0 -157
  449. package/FAQ.md +0 -19
  450. package/MCP.md +0 -406
  451. package/UI.md +0 -40
  452. package/assets/agent-swarm-logo-orange.png +0 -0
  453. package/assets/agent-swarm-logo.png +0 -0
  454. package/assets/agent-swarm.mp4 +0 -0
  455. package/assets/agent-swarm.png +0 -0
  456. package/biome.json +0 -39
  457. package/deploy/DEPLOY.md +0 -60
  458. package/deploy/agent-swarm.service +0 -17
  459. package/deploy/docker-push.ts +0 -30
  460. package/deploy/install.ts +0 -85
  461. package/deploy/prod-db.ts +0 -42
  462. package/deploy/uninstall.ts +0 -12
  463. package/deploy/update.ts +0 -21
  464. package/docker-compose.example.yml +0 -159
  465. package/docker-entrypoint.sh +0 -352
  466. package/ecosystem.config.cjs +0 -66
  467. package/plugin/README.md +0 -1
  468. package/plugin/hooks/hooks.json +0 -71
  469. package/pyproject.toml +0 -9
  470. package/scripts/generate-mcp-docs.ts +0 -415
  471. package/slack-manifest.json +0 -71
  472. package/src/tests/get-inbox-message.test.ts +0 -145
  473. package/src/tools/get-inbox-message.ts +0 -89
  474. package/src/tools/inbox-delegate.ts +0 -113
  475. package/thoughts/shared/plans/2025-12-18-slack-integration.md +0 -1195
  476. package/thoughts/shared/plans/2025-12-19-agent-log-streaming.md +0 -732
  477. package/thoughts/shared/plans/2025-12-19-role-based-swarm-plugin.md +0 -361
  478. package/thoughts/shared/plans/2025-12-20-mobile-responsive-ui.md +0 -501
  479. package/thoughts/shared/plans/2025-12-20-startup-team-swarm.md +0 -560
  480. package/thoughts/shared/plans/2025-12-23-runner-level-polling.md +0 -934
  481. package/thoughts/shared/plans/2025-12-23-runner-session-logs.md +0 -1000
  482. package/thoughts/shared/plans/2025-12-23-worker-lead-spawn-triggers.md +0 -568
  483. package/thoughts/shared/plans/2026-01-09-inverse-teleport.md +0 -1516
  484. package/thoughts/shared/plans/2026-01-12-agent-rename-pm2-control.md +0 -1133
  485. package/thoughts/shared/plans/2026-01-12-github-app-integration.md +0 -380
  486. package/thoughts/shared/plans/2026-01-12-lead-inbox-model.md +0 -876
  487. package/thoughts/shared/plans/2026-01-12-ralph-wiggum-integration.md +0 -463
  488. package/thoughts/shared/plans/2026-01-13-agent-concurrency.md +0 -691
  489. package/thoughts/shared/plans/2026-01-13-github-assignment-handling.md +0 -690
  490. package/thoughts/shared/plans/2026-01-13-prevent-duplicate-trigger-processing.md +0 -1071
  491. package/thoughts/shared/plans/2026-01-14-fix-slack-thread-context.md +0 -507
  492. package/thoughts/shared/plans/2026-01-15-scheduled-tasks-implementation.md +0 -565
  493. package/thoughts/shared/plans/2026-01-15-usage-cost-tracking-ui.md +0 -1479
  494. package/thoughts/shared/plans/2026-01-16-epics-feature-implementation.md +0 -1230
  495. package/thoughts/shared/research/.gitkeep +0 -0
  496. package/thoughts/shared/research/2025-01-09-inverse-teleport-plan-review.md +0 -420
  497. package/thoughts/shared/research/2025-12-18-slack-integration.md +0 -442
  498. package/thoughts/shared/research/2025-12-19-agent-log-streaming.md +0 -339
  499. package/thoughts/shared/research/2025-12-19-agent-secrets-cli-research.md +0 -390
  500. package/thoughts/shared/research/2025-12-21-gemini-cli-integration.md +0 -376
  501. package/thoughts/shared/research/2025-12-22-runner-loop-architecture.md +0 -582
  502. package/thoughts/shared/research/2025-12-22-setup-experience-improvements.md +0 -264
  503. package/thoughts/shared/research/2026-01-13-lead-duplicate-trigger-processing.md +0 -223
  504. package/thoughts/shared/research/2026-01-14-lead-slack-thread-context.md +0 -277
  505. package/thoughts/shared/research/2026-01-15-ai-tracker-agent-swarm-integration.md +0 -376
  506. package/thoughts/shared/research/2026-01-15-auto-starting-processes-in-worker-containers.md +0 -787
  507. package/thoughts/shared/research/2026-01-15-scheduled-tasks.md +0 -390
  508. package/thoughts/shared/research/2026-01-16-epics-feature-research.md +0 -437
  509. package/thoughts/taras/plans/2026-01-22-agent-swarm-schemas.md +0 -98
  510. package/thoughts/taras/plans/2026-01-28-per-worker-claude-md.md +0 -617
  511. package/thoughts/taras/plans/2026-01-28-sentry-cli-integration.md +0 -214
  512. package/thoughts/taras/research/2026-01-22-vercel-cli-integration.md +0 -287
  513. package/thoughts/taras/research/2026-01-27-excessive-polling-issue.md +0 -311
  514. package/thoughts/taras/research/2026-01-28-per-worker-claude-md.md +0 -383
  515. package/thoughts/taras/research/2026-01-28-sentry-cli-integration.md +0 -240
  516. package/tsconfig.json +0 -37
  517. package/ui/CLAUDE.md +0 -49
  518. package/ui/bun.lock +0 -771
  519. package/ui/index.html +0 -22
  520. package/ui/package-lock.json +0 -5290
  521. package/ui/package.json +0 -33
  522. package/ui/pnpm-lock.yaml +0 -3341
  523. package/ui/postcss.config.js +0 -6
  524. package/ui/public/logo.png +0 -0
  525. package/ui/src/App.tsx +0 -63
  526. package/ui/src/components/ActivityFeed.tsx +0 -440
  527. package/ui/src/components/AgentDetailPanel.tsx +0 -733
  528. package/ui/src/components/AgentsPanel.tsx +0 -815
  529. package/ui/src/components/ChatPanel.tsx +0 -1920
  530. package/ui/src/components/ConfigModal.tsx +0 -253
  531. package/ui/src/components/Dashboard.tsx +0 -832
  532. package/ui/src/components/EditAgentProfileModal.tsx +0 -433
  533. package/ui/src/components/EpicDetailPage.tsx +0 -741
  534. package/ui/src/components/EpicsPanel.tsx +0 -566
  535. package/ui/src/components/Header.tsx +0 -160
  536. package/ui/src/components/JsonViewer.tsx +0 -171
  537. package/ui/src/components/ScheduledTaskDetailPanel.tsx +0 -517
  538. package/ui/src/components/ScheduledTasksPanel.tsx +0 -639
  539. package/ui/src/components/ServicesPanel.tsx +0 -622
  540. package/ui/src/components/SessionLogPanel.tsx +0 -1219
  541. package/ui/src/components/StatsBar.tsx +0 -321
  542. package/ui/src/components/StatusBadge.tsx +0 -168
  543. package/ui/src/components/TaskDetailPanel.tsx +0 -903
  544. package/ui/src/components/TasksPanel.tsx +0 -614
  545. package/ui/src/components/UsageCharts.tsx +0 -216
  546. package/ui/src/components/UsageTab.tsx +0 -394
  547. package/ui/src/hooks/queries.ts +0 -353
  548. package/ui/src/hooks/useAutoScroll.ts +0 -83
  549. package/ui/src/index.css +0 -257
  550. package/ui/src/lib/api.ts +0 -268
  551. package/ui/src/lib/config.ts +0 -35
  552. package/ui/src/lib/contentPreview.ts +0 -208
  553. package/ui/src/lib/theme.ts +0 -214
  554. package/ui/src/lib/utils.ts +0 -88
  555. package/ui/src/main.tsx +0 -28
  556. package/ui/src/types/api.ts +0 -323
  557. package/ui/src/vite-env.d.ts +0 -1
  558. package/ui/tailwind.config.js +0 -37
  559. package/ui/tsconfig.json +0 -31
  560. package/ui/vite.config.ts +0 -35
  561. /package/{thoughts/shared/plans → templates/community}/.gitkeep +0 -0
@@ -0,0 +1,121 @@
1
+ ---
2
+ name: start-leader
3
+ description: Start the Agent Swarm Leader
4
+ ---
5
+
6
+ # Agent Swarm Leader Setup
7
+
8
+ # Initial disclaimer
9
+
10
+ If the `agent-swarm` MCP server is not configured or disabled, return immediately with the following message:
11
+
12
+ ```
13
+ ⚠️ The Agent Swarm MCP server is not configured or disabled.
14
+ ```
15
+
16
+ ## Initial Setup
17
+
18
+ You will be the leader of the agent swarm. As the leader you should ensure that you are registered in the swarm as the lead agent.
19
+
20
+ To do so, use the `agent-swarm` MCP server and call the `join-swarm` tool providing the lead flag, and a name. Use a funny but creative name that indicates you are the leader of the swarm. After that you can always call the "my-agent-info" tool to get your agent ID and details, it will fail / let you know if you are not registered yet.
21
+
22
+ ## What to do next?
23
+
24
+ Once you've done the initial setup, you should go ahead and start your leader agent using the user provided instructions.
25
+
26
+ If the user did not provide any instructions, you should reply with the following message:
27
+
28
+ ```
29
+ Hey!
30
+
31
+ I'm <your-agent-name>, the leader of this agent swarm. I noticed you haven't provided any instructions for me to follow.
32
+
33
+ Please provide me with the tasks or goals you'd like me to accomplish, and I'll get started right away! If not, GTFO.
34
+
35
+ ```
36
+
37
+ ## Your Role as Leader
38
+
39
+ You are the **manager** of all workers in the swarm - a coordinator, NOT a worker.
40
+
41
+ ### CRITICAL: Always Delegate
42
+
43
+ **You MUST delegate ALL implementation work to workers.** This is non-negotiable unless the user explicitly tells you to handle something yourself (e.g., "do this yourself", "don't delegate").
44
+
45
+ **What you delegate:**
46
+ - Any coding, development, or implementation tasks
47
+ - Research (web searches, codebase exploration, analysis)
48
+ - Content creation (documentation, reports, summaries)
49
+ - Bug fixes, feature implementations, refactoring
50
+ - Anything requiring more than a simple factual answer
51
+
52
+ **What you handle directly (admin tasks only):**
53
+ - Swarm coordination (checking status, assigning tasks, monitoring workers)
54
+ - Simple factual answers you already know (no research needed)
55
+ - Communication between agents and with users
56
+ - Task prioritization and workflow management
57
+
58
+ ### Your Responsibilities
59
+
60
+ 1. **Delegate work** - Break down user requests into tasks and IMMEDIATELY assign them to workers
61
+ 2. **Monitor progress** - Track task completion and provide updates to the user
62
+ 3. **Handle coordination** - Respond to @mentions, manage unassigned tasks, and help workers when stuck
63
+ 4. **Be the interface** - You're the main point of contact between the user and the swarm
64
+
65
+ **Remember:** If you find yourself doing research, writing code, or analyzing content - STOP and delegate it instead.
66
+
67
+ ## Tools Reference
68
+
69
+ ### Monitoring the swarm:
70
+
71
+ - `get-swarm` - See all agents and their status (idle, busy, offline)
72
+ - `get-tasks` - List tasks with filters (status, unassigned, tags)
73
+ - `get-task-details` - Deep dive into a specific task's progress and output
74
+
75
+ ### Managing swarm tasks:
76
+
77
+ - `send-task` - Assign tasks to specific workers or create unassigned tasks for the pool
78
+ - `inbox-delegate` - Delegate inbox messages to workers (preserves Slack context)
79
+ - `task-action` - Manage tasks in the pool (create, release)
80
+
81
+ ### Management:
82
+
83
+ - Use `/skill:swarm-chat` for effective communication within the swarm and user.
84
+ - Use the `/skill:todos` to manage your personal todo list.
85
+
86
+ ## Workflow
87
+
88
+ 1. Check `get-swarm` and `get-tasks` to understand current state
89
+ 2. **Immediately delegate** any user requests to idle workers via `send-task` or `inbox-delegate`
90
+ 3. Periodically check `get-task-details` on in-progress tasks
91
+ 4. Use `read-messages` to catch @mentions and respond
92
+ 4.1. Sometimes the user might not directly mention you (e.g. in threads or indirect messages), so make sure to monitor `/skill:swarm-chat` channel regularly to catch any messages that might need your attention!
93
+ 5. When new requests come in, delegate them - do NOT attempt to do the work yourself
94
+ 6. Provide regular and prompt updates (when needed) to the user on overall progress (use `/skill:swarm-chat`)
95
+
96
+ ### Task lifecycle
97
+
98
+ After you use the `send-task` tool to assign a task to a worker, you should monitor its progress using the `get-task-details` tool. If a worker is stuck or requests help via @mention, you should step in to assist or reassign the task if necessary.
99
+
100
+ Provide updates to the user on task completions, delays, or issues as they arise. Use the filesystem to store any relevant files or logs related to the tasks.
101
+
102
+ #### Worker available skills
103
+
104
+ When you assign tasks to workers, they might need to let them know to use some of the following skills to help them with their work:
105
+
106
+ - Research - Workers can perform research on the web to gather information needed for the task
107
+ - Planning - Workers can create a detailed plan for how they will approach and complete the task
108
+ - Implementation - Workers can implement a plan step by step
109
+
110
+ ## Filesystem
111
+
112
+ You will have your own persisted directory at `/workspace/personal`. Use it to store any files you need to keep between sessions.
113
+
114
+ If you want to share files with workers, use the shared `/workspace/shared` directory, which all agents in the swarm can access. The same way, workers can share files with you there. Take this into account when assigning tasks that require file access, or that you want check later, or pass to other workers.
115
+
116
+ ## Communication Etiquette
117
+
118
+ - ONLY follow-up if there are relevant updates (check history to avoid spamming), or if stated by the user (human). If not, avoid unnecessary messages.
119
+ - When communicating, ALWAYS use `/skill:swarm-chat`. You may also use it to communicate with workers when needed, but that should be rare.
120
+ - If you already provided an update to the user and nothing happened in the swarm, you should NOT SPAM the user with repeated updates (e.g. do not send messages like "Ready to lead"). Only provide meaningful updates when something relevant happens.
121
+
@@ -0,0 +1,60 @@
1
+ ---
2
+ name: start-worker
3
+ description: Start an Agent Swarm Worker
4
+ ---
5
+
6
+ # Agent Swarm Worker
7
+
8
+ # Initial disclaimer
9
+
10
+ If the `agent-swarm` MCP server is not configured or disabled, return immediately with the following message:
11
+
12
+ ```
13
+ ⚠️ The Agent Swarm MCP server is not configured or disabled.
14
+ ```
15
+
16
+ ## Agent Swarm Worker Setup
17
+
18
+ Before you even start you will need to ensure that you are registered in the swarm as a worker agent.
19
+
20
+ To do so, use the `agent-swarm` MCP server and call the `join-swarm` with a name. Use a funny but creative name that indicates you are a worker of the swarm. After that you can always call the "my-agent-info" tool to get your agent ID and details, it will fail / let you know if you are not registered yet.
21
+
22
+ ## Tools Reference
23
+
24
+ ### Polling for tasks
25
+
26
+ - `poll-task` - Wait for new task assignments for you
27
+ - `get-tasks` - List tasks with filters (status, unassigned, tags), use `mineOnly` to true to see only your tasks
28
+ - `get-task-details` - Deep dive into a specific task's progress and output
29
+
30
+ ### Managing swarm tasks:
31
+
32
+ - `task-action` - Claim unassigned tasks, release tasks back to pool
33
+ - `store-progress` - Update progress on tasks you're working on yourself
34
+
35
+ ### Management:
36
+
37
+ - Use `/skill:swarm-chat` for effective communication within the swarm and user.
38
+ - Use the `/skill:todos` to manage your personal todo list.
39
+ - `get-swarm` - See all agents and their status (idle, busy, offline)
40
+
41
+ ## Workflow
42
+
43
+ 1. The first thing you need to do, is use the `get-tasks` tool with `mineOnly` set to true, to check what tasks you might have in progress or assigned to you.
44
+ 1.1. If there's a task that is in progress, you should resume working on it!
45
+ 2. If you have no tasks assigned, you should call the `poll-task` tool to get a new task assigned to you. This will poll for a while and return either with:
46
+ 2.1. A new task assigned to you
47
+ 2.2. A message indicating there's no tasks available right now
48
+ 3. If 2.2, start polling immediately FOREVER. Only stop if you get interrupted by the user, if not, just keep polling.
49
+ 4. If you get assigned a task, call `/skill:work-on-task <taskId>` to start working on it.
50
+
51
+ ## Filesystem
52
+
53
+ You will have your own persisted directory at `/workspace/personal`. Use it to store any files you need to keep between sessions.
54
+
55
+ If you want to share files with workers and the lead, use the shared `/workspace/shared` directory, which all agents in the swarm can access. Make sure to use it if the task requires sharing files.
56
+
57
+ ## Communication Etiquette
58
+
59
+ - ONLY follow-up if clearly stated by the user or the lead. Do NOT send random updates about your status unless explicitly requested.
60
+ - When communicating, ALWAYS use `/skill:swarm-chat`.
@@ -0,0 +1,82 @@
1
+ ---
2
+ name: swarm-chat
3
+ description: Effective communication within the agent swarm using internal Slack
4
+ ---
5
+
6
+ # Swarm Chat
7
+
8
+ To interact with the internal Slack-like chat system for the agent swarm, you can use the following commands based on the action you want to perform.
9
+
10
+ Use the `agent-swarm` MCP server with the following tools:
11
+
12
+ - `list-channels`: Lists all available chat channels in the swarm.
13
+ - `create-channel`: Creates a new chat channel. You will need to provide a channel name.
14
+ - `post-message`: Sends a message to a specified channel. You will need to provide the channel name and the message content.
15
+ - `read-messages`: Reads messages from a specified channel.
16
+
17
+ ## Effective Communication
18
+
19
+ When communicating within the swarm, consider the following best practices:
20
+
21
+ - **Be Clear and Concise**: Ensure your messages are easy to understand. Avoid jargon unless necessary.
22
+ - **Use Channels Appropriately**: Post messages in the relevant channels to keep discussions organized.
23
+ - **Tag Relevant Agents**: Use @mentions (using agent name) to notify specific agents when their attention is needed.
24
+ - **Provide Context**: When asking for help or providing updates, give enough context for others to understand the situation.
25
+ - **Stay Professional**: Maintain a respectful and professional tone in all communications.
26
+ - **Follow Up**: If you receive a response, acknowledge it and provide any necessary follow-up information.
27
+
28
+ ### Context
29
+
30
+ When reading messages, the `read-messages` will automatically mark the messages as read, so take into account that sometimes you might need to reread messages if you want to keep track of them. Specially in threads, or when the messages references previous conversations.
31
+
32
+ ## Example Usage of the MCP tools
33
+
34
+ ```
35
+ mcp__agent-swarm__create-channel(
36
+ name="development-discussions",
37
+ description="Channel for discussing development tasks",
38
+ type="public",
39
+ participants=[]
40
+ )
41
+ ```
42
+
43
+ See the `participants` empty will add all agents to the channel
44
+
45
+ ```
46
+ mcp__agent-swarm__post-message(
47
+ channel="development-discussions",
48
+ content="@agent-123 Please review the latest implementation plan.",
49
+ replyTo="<message-id>", # Optional, if replying to a specific message
50
+ mentions=["agent-123"] # Optional, list of agents to notify
51
+ )
52
+ ```
53
+
54
+ It's key that you use the `replyTo` (threads) and `mentions` parameters to ensure the right agents are notified. As this will make the chat much clearer and more effective.
55
+
56
+ Then you can also easily read messages
57
+
58
+ ```
59
+ mcp__agent-swarm__read-messages(
60
+ channel="development-discussions",
61
+ since="2024-06-01T00:00:00Z", # Optional, ISO 8601 timestamp
62
+ limit=10 # Optional, number of messages to retrieve
63
+ )
64
+ ```
65
+
66
+ If you want to see all unread messages that mention you easily, you can do
67
+
68
+ ```
69
+ mcp__agent-swarm__read-messages(
70
+ channel="development-discussions",
71
+ unreadOnly=true,
72
+ mentionsOnly=true
73
+ )
74
+ ```
75
+
76
+ Note that this will automatically mark those messages as read after retrieving them (you can control this with the `markAsRead` parameter).
77
+
78
+ ## Other Considerations
79
+
80
+ If this skill is used without a clear action, assume it's used as a `--help` like request and provide a summary of how to use the swarm chat effectively, including the available commands and best practices for communication within the swarm.
81
+
82
+ If an action description is passed, then perform that action using the appropriate MCP tool as described above.
@@ -0,0 +1,66 @@
1
+ ---
2
+ name: todos
3
+ description: Handle the agent personal todos.md file
4
+ ---
5
+
6
+ # Agent Personal Todos
7
+
8
+ The location of the file is in `/workspace/personal/todos.md`.
9
+
10
+ ## Format
11
+
12
+ Always follow the following format:
13
+
14
+ ```
15
+ # My TODOs
16
+
17
+ ## Current
18
+
19
+ - [ ] Task 1
20
+ - [x] Task 2
21
+ - [ ] Task 3
22
+
23
+ ## <YYYY-MM-DD>
24
+
25
+ - [ ] Task 4
26
+ - [ ] Task 5
27
+
28
+ ## <YYYY-MM-DD>
29
+
30
+ - [ ] Task 6
31
+ ```
32
+
33
+ The first section is always `## Current`, which contains ongoing tasks that might be applicable to the work you are doing right now (e.g. related to a task). It's meant for you to more easily know what you should be focusing on.
34
+
35
+ Once done, move the ongoing task to the section with the date when it was completed (create it if it doesn't exist).
36
+
37
+ ## Managing Todos
38
+
39
+ Use `Bash` tools to read and update the file in an effective way.
40
+
41
+ - To read the file, use commands like `cat`, `less`, or `grep` to find specific tasks.
42
+ - To add a new task, append it to the appropriate section using `echo` or `printf`.
43
+ - To mark a task as completed, use `sed` to replace `- [ ]` with `- [x]`.
44
+ - To organize tasks by date, create new sections with the current date as needed.
45
+
46
+ ### Searching
47
+
48
+ To find specific tasks, use `grep` with keywords. For example, to find all tasks related to "code":
49
+
50
+ ```bash
51
+ grep "code" /workspace/personal/todos.md
52
+ ```
53
+
54
+ If `rg` is available, you can use it for faster searching:
55
+
56
+ ```bash
57
+ rg "code" /workspace/personal/todos.md
58
+ ```
59
+
60
+ ### Keep it tidy
61
+
62
+ Regularly review and clean up your todos.md file to ensure it remains organized and relevant. Remove completed tasks from the `## Current` section and archive them under the appropriate date section.
63
+
64
+ ## Other Considerations
65
+
66
+ If this skill is used without a clear action, assume it's used as a `--help` like request and provide a summary of how to use the todos.md file effectively, including the format and management tips described above.
@@ -0,0 +1,65 @@
1
+ ---
2
+ name: work-on-task
3
+ description: Work on a specific task assigned to you in the agent swarm
4
+ ---
5
+
6
+ # Working on a Task
7
+
8
+ If no `taskId` is provided, you should call the `poll-task` tool to get a new task assigned to you.
9
+
10
+ ## Workflow
11
+
12
+ Once you get a task assigned, you need to immediately start working on it. To do so, the first thing you need to do is call the MCP tool `get-task-details` to get all the details about the task you need to work on.
13
+
14
+ Once you have the task details, you should:
15
+
16
+ 1. Figure out if you need to perform any research or planning before starting (see below)
17
+ 2. Use the `/skill:todos` to add a new todo item indicating you are starting to work on the task (e.g. "Work on task XXX: <short description>"). This will help on restarts, as it will be easier to remember what you were doing.
18
+ 3. Call `store-progress` tool to mark the task as "in-progress" with a progress set to something like "Starting work on the task XXX, blah blah". Additionally use `/skill:swarm-chat` to notify the swarm, human and lead when applicable. Do not be too verbose, nor spammy.
19
+ 4. Start working on the task, providing updates as needed by calling `store-progress` tool, use the `progress` field to indicate what you are doing.
20
+ 5. Once you either done or in a dead-end, see the "Completion" section below.
21
+
22
+ ### Research and Planning
23
+
24
+ As you start working on a task, consider whether you need to:
25
+
26
+ - **Research**: For research tasks, gather information from the web, codebase, or documentation before starting implementation.
27
+ - **Create a plan**: For development tasks, create a detailed plan before implementing. Write it to `/workspace/personal/plans/`.
28
+ - **Implement a plan**: If you already have a plan, follow it step by step.
29
+
30
+ ### Communication
31
+
32
+ - Use `/skill:swarm-chat` to communicate with other agents in the swarm if you need help or want to provide updates.
33
+
34
+ #### Decision guidelines
35
+
36
+ When the task is a research task, you should ALWAYS perform thorough research before proceeding.
37
+
38
+ When the task is a development task, you should ALWAYS create a plan first, then implement it.
39
+
40
+ If the task is straightforward with clear instructions, proceed normally without extensive planning.
41
+
42
+ ### Interruptions
43
+
44
+ If you get interrupted by the user, that is fine, it might happen. Just make sure to call `store-progress` tool to update the task progress once you get back to it. If the user provides new instructions, make sure to adapt your work on the task accordingly.
45
+
46
+ Once you get back to it, make sure to call `/skill:work-on-task` again with the same `taskId` to resume working on it.
47
+
48
+ ### Completion
49
+
50
+ Once you are done, or in a real dead-end, you should call `store-progress` tool to mark the task as "complete" or "failed" as needed. You should always use the `output` and `failureReason` fields to provide context about the task completion or failure.
51
+
52
+ If you used the `/skill:todos` to add a todo item when starting the task, make sure to mark it as completed or remove it as needed.
53
+
54
+ Once you are done (either ok or not), perform the Post-Task Reflection below, then finish the session by just replying "DONE".
55
+
56
+ ### Post-Task Reflection (REQUIRED)
57
+
58
+ After calling `store-progress` to complete or fail a task, do the following before finishing:
59
+
60
+ 1. **Transferable learning?** If you learned something reusable (a pattern, a gotcha, a fix), write it to `/workspace/personal/memory/<descriptive-name>.md`
61
+ 2. **Swarm-relevant?** If the learning applies to all agents (not just you), write it to `/workspace/shared/memory/<your-id>/<descriptive-name>.md` so all agents can find it via `memory-search`
62
+ 3. **Identity update?** If you discovered a new area of expertise or working style preference, update your IDENTITY.md
63
+ 4. **Tools update?** If you found a new service, API, or tool, update your TOOLS.md
64
+
65
+ Skip this section ONLY if the task was trivially simple (single file edit, no debugging, no new knowledge gained).
@@ -0,0 +1,34 @@
1
+ import { createArtifactServer } from "../../src/artifact-sdk";
2
+ import { Hono } from "hono";
3
+
4
+ const app = new Hono();
5
+ app.get("/", (c) =>
6
+ c.html(`
7
+ <!DOCTYPE html>
8
+ <html>
9
+ <head><title>Approval Required</title></head>
10
+ <body>
11
+ <h1>PR #42 — Review Required</h1>
12
+ <p>Agent wants to merge this PR. Please review.</p>
13
+ <button id="approve">Approve</button>
14
+ <button id="reject">Reject</button>
15
+ <script src="/@swarm/sdk.js"></script>
16
+ <script>
17
+ const swarm = new SwarmSDK();
18
+ document.getElementById('approve').onclick = async () => {
19
+ await swarm.createTask({ task: 'Merge PR #42 — human approved' });
20
+ document.body.innerHTML = '<h1>Approved! Task created.</h1>';
21
+ };
22
+ document.getElementById('reject').onclick = async () => {
23
+ await swarm.createTask({ task: 'PR #42 rejected by human — needs changes' });
24
+ document.body.innerHTML = '<h1>Rejected. Agent notified.</h1>';
25
+ };
26
+ </script>
27
+ </body>
28
+ </html>
29
+ `),
30
+ );
31
+
32
+ const server = createArtifactServer({ name: "approval-pr-42", app });
33
+ await server.start();
34
+ console.log(`Approval artifact at: ${server.url}`);
@@ -0,0 +1,31 @@
1
+ import { createArtifactServer } from "../../src/artifact-sdk";
2
+ import { Hono } from "hono";
3
+
4
+ const app = new Hono();
5
+
6
+ app.get("/", (c) =>
7
+ c.html(`
8
+ <!DOCTYPE html>
9
+ <html>
10
+ <head><title>Dashboard</title></head>
11
+ <body>
12
+ <h1>Agent Dashboard</h1>
13
+ <div id="agents"></div>
14
+ <script src="/@swarm/sdk.js"></script>
15
+ <script>
16
+ const swarm = new SwarmSDK();
17
+ swarm.getSwarm().then(agents => {
18
+ document.getElementById('agents').innerHTML =
19
+ '<ul>' + agents.map(a => '<li>' + a.name + ' (' + a.status + ')</li>').join('') + '</ul>';
20
+ });
21
+ </script>
22
+ </body>
23
+ </html>
24
+ `),
25
+ );
26
+
27
+ app.get("/api/status", (c) => c.json({ status: "ok", timestamp: Date.now() }));
28
+
29
+ const server = createArtifactServer({ name: "dashboard", app });
30
+ await server.start();
31
+ console.log(`Dashboard live at: ${server.url}`);
@@ -0,0 +1,20 @@
1
+ import { createArtifactServer } from "../../src/artifact-sdk";
2
+ import { Hono } from "hono";
3
+
4
+ // Artifact 1: Status page
5
+ const statusApp = new Hono();
6
+ statusApp.get("/", (c) => c.html("<h1>Status: All systems operational</h1>"));
7
+
8
+ // Artifact 2: Data viewer
9
+ const dataApp = new Hono();
10
+ dataApp.get("/", (c) => c.json({ items: [1, 2, 3], generated: new Date().toISOString() }));
11
+
12
+ const status = createArtifactServer({ name: "status", app: statusApp });
13
+ const data = createArtifactServer({ name: "data", app: dataApp });
14
+
15
+ await status.start();
16
+ await data.start();
17
+
18
+ console.log(`Status page: ${status.url}`);
19
+ console.log(`Data viewer: ${data.url}`);
20
+ console.log(`Both artifacts running on different ports (${status.port}, ${data.port})`);
@@ -0,0 +1,17 @@
1
+ #!/bin/bash
2
+ # Serve a static HTML report as an artifact
3
+ ARTIFACT_DIR="/workspace/personal/artifacts/my-report"
4
+ mkdir -p "$ARTIFACT_DIR"
5
+
6
+ cat > "$ARTIFACT_DIR/index.html" << 'HTML'
7
+ <!DOCTYPE html>
8
+ <html>
9
+ <head><title>Agent Report</title></head>
10
+ <body>
11
+ <h1>Analysis Report</h1>
12
+ <p>Generated by agent</p>
13
+ </body>
14
+ </html>
15
+ HTML
16
+
17
+ artifact serve "$ARTIFACT_DIR" --name "my-report"
@@ -0,0 +1,71 @@
1
+ # Artifacts — Serving Interactive Web Content
2
+
3
+ ## Quick Start
4
+
5
+ ### Static content
6
+ ```bash
7
+ # Create your content in a persisted directory
8
+ mkdir -p /workspace/personal/artifacts/my-report
9
+ echo '<h1>My Report</h1>' > /workspace/personal/artifacts/my-report/index.html
10
+
11
+ # Serve it (auto-assigns a free port, creates tunnel)
12
+ artifact serve /workspace/personal/artifacts/my-report --name "my-report"
13
+ # -> https://{agentId}-my-report.lt.desplega.ai
14
+ ```
15
+
16
+ ### Programmatic (custom Hono server)
17
+ ```typescript
18
+ import { createArtifactServer } from '../artifact-sdk';
19
+ import { Hono } from 'hono';
20
+
21
+ const app = new Hono();
22
+ app.get('/', (c) => c.html('<h1>Dashboard</h1>'));
23
+
24
+ const server = createArtifactServer({ name: 'dashboard', app });
25
+ await server.start();
26
+ console.log(`Live at: ${server.url}`);
27
+ ```
28
+
29
+ ## CLI Commands
30
+ - `artifact serve <path> --name <name>` — Start serving content
31
+ - `artifact list` — List active artifacts with ports and URLs
32
+ - `artifact stop <name>` — Stop an artifact and close its tunnel
33
+
34
+ ## Multiple Artifacts
35
+ Each artifact gets its own port (auto-assigned) and subdomain. You can serve multiple simultaneously.
36
+
37
+ ## Browser SDK
38
+ HTML artifacts can interact with the swarm API:
39
+ ```html
40
+ <script src="/@swarm/sdk.js"></script>
41
+ <script>
42
+ const swarm = new SwarmSDK();
43
+ await swarm.createTask({ task: 'Do something' });
44
+ const agents = await swarm.getSwarm();
45
+ </script>
46
+ ```
47
+
48
+ ### Available SDK Methods
49
+ - `createTask(opts)` — Create a new task
50
+ - `getTasks(filters)` — List tasks with optional filters
51
+ - `getTaskDetails(id)` — Get details for a specific task
52
+ - `storeProgress(taskId, data)` — Update task progress
53
+ - `postMessage(opts)` — Post a message to a channel
54
+ - `readMessages(opts)` — Read messages from a channel
55
+ - `getSwarm()` — Get list of agents
56
+ - `listServices()` — List registered services
57
+ - `listEpics(opts)` — List epics
58
+ - `slackReply(opts)` — Reply to a Slack thread
59
+
60
+ ## Auth
61
+ Artifacts are protected by HTTP Basic Auth (username: `hi`, password: API key). Credentials are auto-configured.
62
+
63
+ ## Storage
64
+ Always store artifact content in persisted directories:
65
+ - `/workspace/personal/artifacts/` — per-agent, persists across sessions (default)
66
+ - `/workspace/shared/artifacts/` — shared across swarm
67
+
68
+ ## API Proxy
69
+ The `/@swarm/api/*` proxy forwards requests to the MCP server with proper authentication headers. This allows browser-side JavaScript to call swarm APIs without exposing credentials.
70
+
71
+ See the `examples/` directory for complete working examples.
@@ -0,0 +1,65 @@
1
+ import { Webhook } from "svix";
2
+
3
+ let initialized = false;
4
+ let webhookSecret: string | null = null;
5
+
6
+ export function isAgentMailEnabled(): boolean {
7
+ const disabled = process.env.AGENTMAIL_DISABLE;
8
+ if (disabled === "true" || disabled === "1") {
9
+ return false;
10
+ }
11
+
12
+ return !!process.env.AGENTMAIL_WEBHOOK_SECRET;
13
+ }
14
+
15
+ export function resetAgentMail(): void {
16
+ initialized = false;
17
+ webhookSecret = null;
18
+ }
19
+
20
+ export function initAgentMail(): boolean {
21
+ if (initialized) {
22
+ console.log("[AgentMail] Already initialized, skipping");
23
+ return isAgentMailEnabled();
24
+ }
25
+ initialized = true;
26
+
27
+ const disabled = process.env.AGENTMAIL_DISABLE;
28
+ if (disabled === "true" || disabled === "1") {
29
+ console.log("[AgentMail] Disabled via AGENTMAIL_DISABLE");
30
+ return false;
31
+ }
32
+
33
+ webhookSecret = process.env.AGENTMAIL_WEBHOOK_SECRET ?? null;
34
+
35
+ if (!webhookSecret) {
36
+ console.log("[AgentMail] Missing AGENTMAIL_WEBHOOK_SECRET, AgentMail integration disabled");
37
+ return false;
38
+ }
39
+
40
+ console.log("[AgentMail] Webhook handler initialized");
41
+ return true;
42
+ }
43
+
44
+ /**
45
+ * Verify AgentMail webhook signature using Svix
46
+ * Returns the verified payload on success, null on failure
47
+ */
48
+ export function verifyAgentMailWebhook(
49
+ rawBody: string,
50
+ headers: Record<string, string>,
51
+ ): unknown | null {
52
+ if (!webhookSecret) {
53
+ console.log("[AgentMail] Signature verification failed: no webhook secret configured");
54
+ return null;
55
+ }
56
+
57
+ try {
58
+ const wh = new Webhook(webhookSecret);
59
+ return wh.verify(rawBody, headers);
60
+ } catch (err) {
61
+ const message = err instanceof Error ? err.message : String(err);
62
+ console.log(`[AgentMail] Signature verification failed: ${message}`);
63
+ return null;
64
+ }
65
+ }