@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.
- package/README.md +271 -169
- package/openapi.json +5015 -0
- package/package.json +40 -7
- package/plugin/commands/close-issue.md +7 -3
- package/plugin/commands/create-pr.md +18 -12
- package/plugin/commands/implement-issue.md +7 -3
- package/plugin/commands/respond-github.md +8 -4
- package/plugin/commands/review-pr.md +44 -10
- package/plugin/commands/start-leader.md +1 -3
- package/plugin/commands/start-worker.md +1 -3
- package/plugin/commands/work-on-task.md +22 -3
- package/plugin/pi-skills/close-issue/SKILL.md +90 -0
- package/plugin/pi-skills/create-pr/SKILL.md +99 -0
- package/plugin/pi-skills/implement-issue/SKILL.md +135 -0
- package/plugin/pi-skills/investigate-sentry-issue/SKILL.md +138 -0
- package/plugin/pi-skills/respond-github/SKILL.md +98 -0
- package/plugin/pi-skills/review-offered-task/SKILL.md +45 -0
- package/plugin/pi-skills/review-pr/SKILL.md +261 -0
- package/plugin/pi-skills/start-leader/SKILL.md +121 -0
- package/plugin/pi-skills/start-worker/SKILL.md +60 -0
- package/plugin/pi-skills/swarm-chat/SKILL.md +82 -0
- package/plugin/pi-skills/todos/SKILL.md +66 -0
- package/plugin/pi-skills/work-on-task/SKILL.md +65 -0
- package/plugin/skills/artifacts/examples/approval-flow.ts +34 -0
- package/plugin/skills/artifacts/examples/hono-dashboard.ts +31 -0
- package/plugin/skills/artifacts/examples/multi-artifact.ts +20 -0
- package/plugin/skills/artifacts/examples/static-report.sh +17 -0
- package/plugin/skills/artifacts/skill.md +71 -0
- package/src/agentmail/app.ts +65 -0
- package/src/agentmail/handlers.ts +262 -0
- package/src/agentmail/index.ts +9 -0
- package/src/agentmail/templates.ts +111 -0
- package/src/agentmail/types.ts +51 -0
- package/src/artifact-sdk/browser-sdk.ts +30 -0
- package/src/artifact-sdk/index.ts +2 -0
- package/src/artifact-sdk/localtunnel.d.ts +20 -0
- package/src/artifact-sdk/port.ts +12 -0
- package/src/artifact-sdk/server.ts +156 -0
- package/src/artifact-sdk/tunnel.ts +19 -0
- package/src/be/chunking.ts +193 -0
- package/src/be/db-queries/oauth.ts +90 -0
- package/src/be/db-queries/tracker.ts +182 -0
- package/src/be/db.ts +3327 -784
- package/src/be/embedding.ts +80 -0
- package/src/be/migrations/001_initial.sql +409 -0
- package/src/be/migrations/002_one_time_schedules.sql +59 -0
- package/src/be/migrations/003_workflows.sql +51 -0
- package/src/be/migrations/004_workflow_source.sql +81 -0
- package/src/be/migrations/005_epic_next_steps.sql +2 -0
- package/src/be/migrations/006_vcs_provider.sql +94 -0
- package/src/be/migrations/007_task_dir.sql +2 -0
- package/src/be/migrations/008_workflow_redesign.sql +85 -0
- package/src/be/migrations/009_tracker_integration.sql +144 -0
- package/src/be/migrations/010_step_diagnostics.sql +1 -0
- package/src/be/migrations/011_step_next_port.sql +1 -0
- package/src/be/migrations/012_trigger_schema.sql +1 -0
- package/src/be/migrations/013_task_output_schema.sql +2 -0
- package/src/be/migrations/014_prompt_templates.sql +33 -0
- package/src/be/migrations/015_workflow_workspace.sql +3 -0
- package/src/be/migrations/016_active_session_runner_session.sql +4 -0
- package/src/be/migrations/017_channel_activity_cursors.sql +6 -0
- package/src/be/migrations/018_fix_seed_double_version.sql +30 -0
- package/src/be/migrations/runner.ts +188 -0
- package/src/be/seed.ts +62 -0
- package/src/cli.tsx +231 -299
- package/src/commands/artifact.ts +241 -0
- package/src/commands/onboard/compose-generator.ts +169 -0
- package/src/commands/onboard/env-generator.ts +79 -0
- package/src/commands/onboard/manifest.ts +37 -0
- package/src/commands/onboard/presets.ts +85 -0
- package/src/commands/onboard/service-names.ts +47 -0
- package/src/commands/onboard/steps/core-credentials.tsx +111 -0
- package/src/commands/onboard/steps/custom-templates.tsx +168 -0
- package/src/commands/onboard/steps/generate.tsx +154 -0
- package/src/commands/onboard/steps/harness-credentials.tsx +195 -0
- package/src/commands/onboard/steps/harness.tsx +21 -0
- package/src/commands/onboard/steps/health-check.tsx +171 -0
- package/src/commands/onboard/steps/integration-github.tsx +105 -0
- package/src/commands/onboard/steps/integration-gitlab.tsx +79 -0
- package/src/commands/onboard/steps/integration-menu.tsx +58 -0
- package/src/commands/onboard/steps/integration-sentry.tsx +79 -0
- package/src/commands/onboard/steps/integration-slack.tsx +165 -0
- package/src/commands/onboard/steps/post-connect.tsx +145 -0
- package/src/commands/onboard/steps/post-dashboard.tsx +34 -0
- package/src/commands/onboard/steps/post-task.tsx +103 -0
- package/src/commands/onboard/steps/prereq-check.tsx +178 -0
- package/src/commands/onboard/steps/review.tsx +82 -0
- package/src/commands/onboard/steps/start.tsx +97 -0
- package/src/commands/onboard/templates.ts +34 -0
- package/src/commands/onboard/types.ts +259 -0
- package/src/commands/onboard.tsx +425 -0
- package/src/commands/runner.ts +1540 -630
- package/src/commands/setup.tsx +23 -38
- package/src/commands/shared/client-config.ts +41 -0
- package/src/commands/templates.ts +172 -0
- package/src/github/app.ts +8 -0
- package/src/github/handlers.ts +384 -151
- package/src/github/index.ts +1 -0
- package/src/github/mentions-aliases.test.ts +73 -0
- package/src/github/mentions.test.ts +3 -3
- package/src/github/mentions.ts +32 -6
- package/src/github/templates.ts +398 -0
- package/src/github/types.ts +1 -0
- package/src/gitlab/auth.ts +63 -0
- package/src/gitlab/handlers.ts +368 -0
- package/src/gitlab/index.ts +19 -0
- package/src/gitlab/reactions.ts +104 -0
- package/src/gitlab/templates.ts +140 -0
- package/src/gitlab/types.ts +130 -0
- package/src/heartbeat/heartbeat.ts +434 -0
- package/src/heartbeat/index.ts +1 -0
- package/src/heartbeat/templates.ts +30 -0
- package/src/hooks/hook.ts +555 -4
- package/src/hooks/tool-loop-detection.test.ts +158 -0
- package/src/hooks/tool-loop-detection.ts +167 -0
- package/src/http/active-sessions.ts +199 -0
- package/src/http/agents.ts +328 -0
- package/src/http/config.ts +191 -0
- package/src/http/core.ts +309 -0
- package/src/http/db-query.ts +91 -0
- package/src/http/ecosystem.ts +63 -0
- package/src/http/epics.ts +460 -0
- package/src/http/index.ts +216 -0
- package/src/http/mcp.ts +77 -0
- package/src/http/memory.ts +168 -0
- package/src/http/openapi.ts +109 -0
- package/src/http/poll.ts +299 -0
- package/src/http/prompt-templates.ts +412 -0
- package/src/http/repos.ts +195 -0
- package/src/http/route-def.ts +123 -0
- package/src/http/schedules.ts +426 -0
- package/src/http/session-data.ts +241 -0
- package/src/http/stats.ts +174 -0
- package/src/http/tasks.ts +468 -0
- package/src/http/trackers/index.ts +10 -0
- package/src/http/trackers/linear.ts +187 -0
- package/src/http/types.ts +12 -0
- package/src/http/utils.ts +87 -0
- package/src/http/webhooks.ts +432 -0
- package/src/http/workflows.ts +530 -0
- package/src/http.ts +1 -1890
- package/src/linear/README.md +65 -0
- package/src/linear/app.ts +48 -0
- package/src/linear/client.ts +18 -0
- package/src/linear/index.ts +1 -0
- package/src/linear/oauth.ts +35 -0
- package/src/linear/outbound.ts +212 -0
- package/src/linear/sync.ts +567 -0
- package/src/linear/templates.ts +47 -0
- package/src/linear/types.ts +7 -0
- package/src/linear/webhook.ts +104 -0
- package/src/oauth/README.md +66 -0
- package/src/oauth/index.ts +6 -0
- package/src/oauth/wrapper.ts +204 -0
- package/src/prompts/base-prompt.ts +150 -265
- package/src/prompts/defaults.ts +196 -0
- package/src/prompts/registry.ts +57 -0
- package/src/prompts/resolver.ts +296 -0
- package/src/prompts/session-templates.ts +604 -0
- package/src/providers/claude-adapter.ts +442 -0
- package/src/providers/index.ts +24 -0
- package/src/providers/pi-mono-adapter.ts +442 -0
- package/src/providers/pi-mono-extension.ts +624 -0
- package/src/providers/pi-mono-mcp-client.ts +124 -0
- package/src/providers/types.ts +75 -0
- package/src/scheduler/scheduler.test.ts +2 -0
- package/src/scheduler/scheduler.ts +231 -40
- package/src/server.ts +97 -6
- package/src/slack/HEURISTICS.md +105 -0
- package/src/slack/actions.ts +133 -0
- package/src/slack/app.ts +7 -0
- package/src/slack/assistant.ts +118 -0
- package/src/slack/blocks.ts +233 -0
- package/src/slack/channel-activity.ts +177 -0
- package/src/slack/commands.ts +31 -17
- package/src/slack/files.ts +1 -1
- package/src/slack/handlers.test.ts +114 -1
- package/src/slack/handlers.ts +230 -55
- package/src/slack/responses.ts +120 -67
- package/src/slack/router.ts +17 -99
- package/src/slack/templates.ts +55 -0
- package/src/slack/thread-buffer.ts +213 -0
- package/src/slack/watcher.ts +119 -4
- package/src/tests/agent-activity.test.ts +247 -0
- package/src/tests/agentmail-filters.test.ts +97 -0
- package/src/tests/artifact-sdk.test.ts +800 -0
- package/src/tests/base-prompt.test.ts +264 -0
- package/src/tests/build-pi-skills.test.ts +127 -0
- package/src/tests/channel-activity.test.ts +363 -0
- package/src/tests/claude-adapter.test.ts +126 -0
- package/src/tests/context-versioning.test.ts +425 -0
- package/src/tests/db-queries-oauth.test.ts +197 -0
- package/src/tests/db-queries-tracker.test.ts +230 -0
- package/src/tests/epics.test.ts +3 -3
- package/src/tests/error-tracker.test.ts +368 -0
- package/src/tests/fetch-resolved-env.test.ts +167 -0
- package/src/tests/generate-default-claude-md.test.ts +9 -1
- package/src/tests/generate-identity-templates.test.ts +124 -0
- package/src/tests/gitlab-auth.test.ts +109 -0
- package/src/tests/gitlab-handlers.test.ts +691 -0
- package/src/tests/gitlab-vcs-db.test.ts +177 -0
- package/src/tests/heartbeat.test.ts +364 -0
- package/src/tests/http-api-integration.test.ts +1698 -0
- package/src/tests/linear-outbound-sync.test.ts +200 -0
- package/src/tests/linear-webhook.test.ts +406 -0
- package/src/tests/match-route.test.ts +187 -0
- package/src/tests/memory.test.ts +737 -0
- package/src/tests/migration-runner-regressions.test.ts +86 -0
- package/src/tests/model-control.test.ts +338 -0
- package/src/tests/oauth-wrapper.test.ts +147 -0
- package/src/tests/onboard-compose.test.ts +138 -0
- package/src/tests/onboard-env.test.ts +174 -0
- package/src/tests/onboard-manifest.test.ts +137 -0
- package/src/tests/pi-mono-adapter.test.ts +234 -0
- package/src/tests/pool-session-logs.test.ts +199 -0
- package/src/tests/progress-dedup.test.ts +98 -0
- package/src/tests/prompt-template-github.test.ts +682 -0
- package/src/tests/prompt-template-remaining.test.ts +504 -0
- package/src/tests/prompt-template-resolver.test.ts +621 -0
- package/src/tests/prompt-template-session.test.ts +363 -0
- package/src/tests/prompt-templates-db.test.ts +616 -0
- package/src/tests/provider-adapter.test.ts +122 -0
- package/src/tests/provider-command-format.test.ts +98 -0
- package/src/tests/reload-config.test.ts +170 -0
- package/src/tests/runner-polling-api.test.ts +25 -20
- package/src/tests/scheduled-tasks.test.ts +104 -0
- package/src/tests/scheduler-backoff.test.ts +166 -0
- package/src/tests/self-improvement.test.ts +541 -0
- package/src/tests/session-attach.test.ts +536 -0
- package/src/tests/session-costs.test.ts +267 -1
- package/src/tests/slack-actions.test.ts +133 -0
- package/src/tests/slack-assistant.test.ts +136 -0
- package/src/tests/slack-blocks.test.ts +246 -0
- package/src/tests/slack-metadata-inheritance.test.ts +243 -0
- package/src/tests/slack-queue-offline.test.ts +174 -0
- package/src/tests/slack-router.test.ts +181 -0
- package/src/tests/slack-thread-buffer.test.ts +305 -0
- package/src/tests/slack-thread-followups.test.ts +298 -0
- package/src/tests/slack-watcher.test.ts +101 -0
- package/src/tests/structured-output.test.ts +307 -0
- package/src/tests/swarm-repos.test.ts +198 -0
- package/src/tests/task-cancellation.test.ts +6 -4
- package/src/tests/task-working-dir.test.ts +176 -0
- package/src/tests/template-fetch.test.ts +490 -0
- package/src/tests/tool-annotations.test.ts +371 -0
- package/src/tests/tracker-tools.test.ts +184 -0
- package/src/tests/update-profile-agentid.test.ts +248 -0
- package/src/tests/update-profile-api.test.ts +143 -3
- package/src/tests/update-profile-auth.test.ts +195 -0
- package/src/tests/validation-adapters.test.ts +86 -0
- package/src/tests/vcs-provider.test.ts +27 -0
- package/src/tests/workflow-agent-task.test.ts +196 -0
- package/src/tests/workflow-async-v2.test.ts +508 -0
- package/src/tests/workflow-convergence.test.ts +541 -0
- package/src/tests/workflow-definition-validation.test.ts +366 -0
- package/src/tests/workflow-engine-v2.test.ts +691 -0
- package/src/tests/workflow-executors.test.ts +736 -0
- package/src/tests/workflow-http-v2.test.ts +599 -0
- package/src/tests/workflow-integration-io.test.ts +902 -0
- package/src/tests/workflow-io-schemas.test.ts +624 -0
- package/src/tests/workflow-registry.test.ts +592 -0
- package/src/tests/workflow-retry-v2.test.ts +401 -0
- package/src/tests/workflow-retry-validation.test.ts +282 -0
- package/src/tests/workflow-schedule-trigger.test.ts +104 -0
- package/src/tests/workflow-template.test.ts +288 -0
- package/src/tests/workflow-trigger-schema.test.ts +359 -0
- package/src/tests/workflow-triggers-v2.test.ts +264 -0
- package/src/tests/workflow-versions.test.ts +208 -0
- package/src/tests/workflow-workspace.test.ts +272 -0
- package/src/tests/x402-client.test.ts +117 -0
- package/src/tests/x402-config.test.ts +182 -0
- package/src/tests/x402-spending-tracker.test.ts +185 -0
- package/src/tools/cancel-task.ts +2 -0
- package/src/tools/context-diff.ts +171 -0
- package/src/tools/context-history.ts +138 -0
- package/src/tools/create-channel.ts +1 -0
- package/src/tools/db-query.ts +78 -0
- package/src/tools/delete-channel.ts +132 -0
- package/src/tools/epics/assign-task-to-epic.ts +1 -0
- package/src/tools/epics/create-epic.ts +3 -2
- package/src/tools/epics/delete-epic.ts +2 -0
- package/src/tools/epics/get-epic-details.ts +2 -0
- package/src/tools/epics/list-epics.ts +2 -0
- package/src/tools/epics/unassign-task-from-epic.ts +1 -0
- package/src/tools/epics/update-epic.ts +7 -4
- package/src/tools/get-swarm.ts +2 -0
- package/src/tools/get-task-details.ts +2 -0
- package/src/tools/get-tasks.ts +27 -1
- package/src/tools/inject-learning.ts +106 -0
- package/src/tools/join-swarm.ts +17 -7
- package/src/tools/list-channels.ts +2 -0
- package/src/tools/list-services.ts +2 -0
- package/src/tools/memory-get.ts +56 -0
- package/src/tools/memory-search.ts +131 -0
- package/src/tools/my-agent-info.ts +2 -0
- package/src/tools/poll-task.ts +2 -20
- package/src/tools/post-message.ts +1 -0
- package/src/tools/prompt-templates/delete.ts +86 -0
- package/src/tools/prompt-templates/get.ts +89 -0
- package/src/tools/prompt-templates/index.ts +5 -0
- package/src/tools/prompt-templates/list.ts +95 -0
- package/src/tools/prompt-templates/preview.ts +84 -0
- package/src/tools/prompt-templates/set.ts +117 -0
- package/src/tools/read-messages.ts +2 -0
- package/src/tools/register-agentmail-inbox.ts +166 -0
- package/src/tools/register-service.ts +2 -0
- package/src/tools/schedules/create-schedule.ts +134 -24
- package/src/tools/schedules/delete-schedule.ts +2 -0
- package/src/tools/schedules/list-schedules.ts +20 -4
- package/src/tools/schedules/run-schedule-now.ts +1 -0
- package/src/tools/schedules/update-schedule.ts +49 -17
- package/src/tools/send-task.ts +132 -10
- package/src/tools/slack-download-file.ts +4 -2
- package/src/tools/slack-list-channels.ts +2 -0
- package/src/tools/slack-post.ts +2 -0
- package/src/tools/slack-read.ts +2 -0
- package/src/tools/slack-reply.ts +2 -0
- package/src/tools/slack-upload-file.ts +2 -0
- package/src/tools/store-progress.ts +205 -4
- package/src/tools/swarm-config/delete-config.ts +87 -0
- package/src/tools/swarm-config/get-config.ts +108 -0
- package/src/tools/swarm-config/index.ts +4 -0
- package/src/tools/swarm-config/list-config.ts +99 -0
- package/src/tools/swarm-config/set-config.ts +118 -0
- package/src/tools/task-action.ts +50 -5
- package/src/tools/task-dedup.ts +97 -0
- package/src/tools/templates.ts +53 -0
- package/src/tools/tool-config.ts +124 -0
- package/src/tools/tracker/index.ts +6 -0
- package/src/tools/tracker/tracker-link-epic.ts +64 -0
- package/src/tools/tracker/tracker-link-task.ts +64 -0
- package/src/tools/tracker/tracker-map-agent.ts +57 -0
- package/src/tools/tracker/tracker-status.ts +56 -0
- package/src/tools/tracker/tracker-sync-status.ts +42 -0
- package/src/tools/tracker/tracker-unlink.ts +41 -0
- package/src/tools/unregister-service.ts +2 -0
- package/src/tools/update-profile.ts +172 -17
- package/src/tools/update-service-status.ts +2 -0
- package/src/tools/utils.ts +10 -1
- package/src/tools/workflows/create-workflow.ts +129 -0
- package/src/tools/workflows/delete-workflow.ts +42 -0
- package/src/tools/workflows/get-workflow-run.ts +59 -0
- package/src/tools/workflows/get-workflow.ts +53 -0
- package/src/tools/workflows/index.ts +9 -0
- package/src/tools/workflows/list-workflow-runs.ts +48 -0
- package/src/tools/workflows/list-workflows.ts +42 -0
- package/src/tools/workflows/retry-workflow-run.ts +40 -0
- package/src/tools/workflows/trigger-workflow.ts +96 -0
- package/src/tools/workflows/update-workflow.ts +133 -0
- package/src/tracker/types.ts +51 -0
- package/src/types.ts +530 -14
- package/src/utils/credentials.test.ts +156 -0
- package/src/utils/credentials.ts +50 -0
- package/src/utils/error-tracker.ts +190 -0
- package/src/vcs/index.ts +15 -0
- package/src/vcs/types.ts +5 -0
- package/src/workflows/checkpoint.ts +121 -0
- package/src/workflows/cooldown.ts +28 -0
- package/src/workflows/definition.ts +235 -0
- package/src/workflows/engine.ts +580 -0
- package/src/workflows/event-bus.ts +29 -0
- package/src/workflows/executors/agent-task.ts +103 -0
- package/src/workflows/executors/base.ts +86 -0
- package/src/workflows/executors/code-match.ts +88 -0
- package/src/workflows/executors/index.ts +16 -0
- package/src/workflows/executors/notify.ts +93 -0
- package/src/workflows/executors/property-match.ts +104 -0
- package/src/workflows/executors/raw-llm.ts +83 -0
- package/src/workflows/executors/registry.ts +76 -0
- package/src/workflows/executors/script.ts +103 -0
- package/src/workflows/executors/validate.ts +215 -0
- package/src/workflows/executors/vcs.ts +58 -0
- package/src/workflows/index.ts +61 -0
- package/src/workflows/input.ts +46 -0
- package/src/workflows/json-schema-validator.ts +118 -0
- package/src/workflows/recovery.ts +139 -0
- package/src/workflows/resume.ts +229 -0
- package/src/workflows/retry-poller.ts +216 -0
- package/src/workflows/template.ts +74 -0
- package/src/workflows/templates.ts +86 -0
- package/src/workflows/triggers.ts +124 -0
- package/src/workflows/validation.ts +104 -0
- package/src/workflows/version.ts +44 -0
- package/src/x402/cli.ts +140 -0
- package/src/x402/client.ts +192 -0
- package/src/x402/config.ts +131 -0
- package/src/x402/index.ts +37 -0
- package/src/x402/openfort-signer.ts +83 -0
- package/src/x402/spending-tracker.ts +109 -0
- package/templates/official/coder/CLAUDE.md +49 -0
- package/templates/official/coder/IDENTITY.md +28 -0
- package/templates/official/coder/SOUL.md +43 -0
- package/templates/official/coder/TOOLS.md +40 -0
- package/templates/official/coder/config.json +23 -0
- package/templates/official/coder/start-up.sh +23 -0
- package/templates/official/content-reviewer/CLAUDE.md +68 -0
- package/templates/official/content-reviewer/IDENTITY.md +28 -0
- package/templates/official/content-reviewer/SOUL.md +44 -0
- package/templates/official/content-reviewer/TOOLS.md +37 -0
- package/templates/official/content-reviewer/config.json +23 -0
- package/templates/official/content-reviewer/start-up.sh +23 -0
- package/templates/official/content-strategist/CLAUDE.md +63 -0
- package/templates/official/content-strategist/IDENTITY.md +33 -0
- package/templates/official/content-strategist/SOUL.md +48 -0
- package/templates/official/content-strategist/TOOLS.md +47 -0
- package/templates/official/content-strategist/config.json +23 -0
- package/templates/official/content-strategist/start-up.sh +23 -0
- package/templates/official/content-writer/CLAUDE.md +72 -0
- package/templates/official/content-writer/IDENTITY.md +30 -0
- package/templates/official/content-writer/SOUL.md +46 -0
- package/templates/official/content-writer/TOOLS.md +44 -0
- package/templates/official/content-writer/config.json +23 -0
- package/templates/official/content-writer/start-up.sh +23 -0
- package/templates/official/forward-deployed-engineer/CLAUDE.md +54 -0
- package/templates/official/forward-deployed-engineer/IDENTITY.md +37 -0
- package/templates/official/forward-deployed-engineer/SOUL.md +55 -0
- package/templates/official/forward-deployed-engineer/config.json +21 -0
- package/templates/official/lead/CLAUDE.md +33 -0
- package/templates/official/lead/IDENTITY.md +36 -0
- package/templates/official/lead/SOUL.md +51 -0
- package/templates/official/lead/config.json +22 -0
- package/templates/official/researcher/CLAUDE.md +46 -0
- package/templates/official/researcher/IDENTITY.md +28 -0
- package/templates/official/researcher/SOUL.md +43 -0
- package/templates/official/researcher/config.json +21 -0
- package/templates/official/reviewer/CLAUDE.md +63 -0
- package/templates/official/reviewer/IDENTITY.md +28 -0
- package/templates/official/reviewer/SOUL.md +45 -0
- package/templates/official/reviewer/config.json +21 -0
- package/templates/official/tester/CLAUDE.md +53 -0
- package/templates/official/tester/IDENTITY.md +28 -0
- package/templates/official/tester/SOUL.md +55 -0
- package/templates/official/tester/config.json +21 -0
- package/templates/schema.ts +35 -0
- package/.claude/settings.local.json +0 -115
- package/.dockerignore +0 -61
- package/.editorconfig +0 -15
- package/.env.docker.example +0 -39
- package/.env.example +0 -40
- package/.github/workflows/ci.yml +0 -76
- package/.github/workflows/docker-and-deploy.yml +0 -117
- package/.wts-config.json +0 -4
- package/.wts-setup.ts +0 -102
- package/CLAUDE.md +0 -104
- package/CONTRIBUTING.md +0 -270
- package/DEPLOYMENT.md +0 -605
- package/Dockerfile +0 -57
- package/Dockerfile.worker +0 -157
- package/FAQ.md +0 -19
- package/MCP.md +0 -406
- package/UI.md +0 -40
- package/assets/agent-swarm-logo-orange.png +0 -0
- package/assets/agent-swarm-logo.png +0 -0
- package/assets/agent-swarm.mp4 +0 -0
- package/assets/agent-swarm.png +0 -0
- package/biome.json +0 -39
- package/deploy/DEPLOY.md +0 -60
- package/deploy/agent-swarm.service +0 -17
- package/deploy/docker-push.ts +0 -30
- package/deploy/install.ts +0 -85
- package/deploy/prod-db.ts +0 -42
- package/deploy/uninstall.ts +0 -12
- package/deploy/update.ts +0 -21
- package/docker-compose.example.yml +0 -159
- package/docker-entrypoint.sh +0 -352
- package/ecosystem.config.cjs +0 -66
- package/plugin/README.md +0 -1
- package/plugin/hooks/hooks.json +0 -71
- package/pyproject.toml +0 -9
- package/scripts/generate-mcp-docs.ts +0 -415
- package/slack-manifest.json +0 -71
- package/src/tests/get-inbox-message.test.ts +0 -145
- package/src/tools/get-inbox-message.ts +0 -89
- package/src/tools/inbox-delegate.ts +0 -113
- package/thoughts/shared/plans/2025-12-18-slack-integration.md +0 -1195
- package/thoughts/shared/plans/2025-12-19-agent-log-streaming.md +0 -732
- package/thoughts/shared/plans/2025-12-19-role-based-swarm-plugin.md +0 -361
- package/thoughts/shared/plans/2025-12-20-mobile-responsive-ui.md +0 -501
- package/thoughts/shared/plans/2025-12-20-startup-team-swarm.md +0 -560
- package/thoughts/shared/plans/2025-12-23-runner-level-polling.md +0 -934
- package/thoughts/shared/plans/2025-12-23-runner-session-logs.md +0 -1000
- package/thoughts/shared/plans/2025-12-23-worker-lead-spawn-triggers.md +0 -568
- package/thoughts/shared/plans/2026-01-09-inverse-teleport.md +0 -1516
- package/thoughts/shared/plans/2026-01-12-agent-rename-pm2-control.md +0 -1133
- package/thoughts/shared/plans/2026-01-12-github-app-integration.md +0 -380
- package/thoughts/shared/plans/2026-01-12-lead-inbox-model.md +0 -876
- package/thoughts/shared/plans/2026-01-12-ralph-wiggum-integration.md +0 -463
- package/thoughts/shared/plans/2026-01-13-agent-concurrency.md +0 -691
- package/thoughts/shared/plans/2026-01-13-github-assignment-handling.md +0 -690
- package/thoughts/shared/plans/2026-01-13-prevent-duplicate-trigger-processing.md +0 -1071
- package/thoughts/shared/plans/2026-01-14-fix-slack-thread-context.md +0 -507
- package/thoughts/shared/plans/2026-01-15-scheduled-tasks-implementation.md +0 -565
- package/thoughts/shared/plans/2026-01-15-usage-cost-tracking-ui.md +0 -1479
- package/thoughts/shared/plans/2026-01-16-epics-feature-implementation.md +0 -1230
- package/thoughts/shared/research/.gitkeep +0 -0
- package/thoughts/shared/research/2025-01-09-inverse-teleport-plan-review.md +0 -420
- package/thoughts/shared/research/2025-12-18-slack-integration.md +0 -442
- package/thoughts/shared/research/2025-12-19-agent-log-streaming.md +0 -339
- package/thoughts/shared/research/2025-12-19-agent-secrets-cli-research.md +0 -390
- package/thoughts/shared/research/2025-12-21-gemini-cli-integration.md +0 -376
- package/thoughts/shared/research/2025-12-22-runner-loop-architecture.md +0 -582
- package/thoughts/shared/research/2025-12-22-setup-experience-improvements.md +0 -264
- package/thoughts/shared/research/2026-01-13-lead-duplicate-trigger-processing.md +0 -223
- package/thoughts/shared/research/2026-01-14-lead-slack-thread-context.md +0 -277
- package/thoughts/shared/research/2026-01-15-ai-tracker-agent-swarm-integration.md +0 -376
- package/thoughts/shared/research/2026-01-15-auto-starting-processes-in-worker-containers.md +0 -787
- package/thoughts/shared/research/2026-01-15-scheduled-tasks.md +0 -390
- package/thoughts/shared/research/2026-01-16-epics-feature-research.md +0 -437
- package/thoughts/taras/plans/2026-01-22-agent-swarm-schemas.md +0 -98
- package/thoughts/taras/plans/2026-01-28-per-worker-claude-md.md +0 -617
- package/thoughts/taras/plans/2026-01-28-sentry-cli-integration.md +0 -214
- package/thoughts/taras/research/2026-01-22-vercel-cli-integration.md +0 -287
- package/thoughts/taras/research/2026-01-27-excessive-polling-issue.md +0 -311
- package/thoughts/taras/research/2026-01-28-per-worker-claude-md.md +0 -383
- package/thoughts/taras/research/2026-01-28-sentry-cli-integration.md +0 -240
- package/tsconfig.json +0 -37
- package/ui/CLAUDE.md +0 -49
- package/ui/bun.lock +0 -771
- package/ui/index.html +0 -22
- package/ui/package-lock.json +0 -5290
- package/ui/package.json +0 -33
- package/ui/pnpm-lock.yaml +0 -3341
- package/ui/postcss.config.js +0 -6
- package/ui/public/logo.png +0 -0
- package/ui/src/App.tsx +0 -63
- package/ui/src/components/ActivityFeed.tsx +0 -440
- package/ui/src/components/AgentDetailPanel.tsx +0 -733
- package/ui/src/components/AgentsPanel.tsx +0 -815
- package/ui/src/components/ChatPanel.tsx +0 -1920
- package/ui/src/components/ConfigModal.tsx +0 -253
- package/ui/src/components/Dashboard.tsx +0 -832
- package/ui/src/components/EditAgentProfileModal.tsx +0 -433
- package/ui/src/components/EpicDetailPage.tsx +0 -741
- package/ui/src/components/EpicsPanel.tsx +0 -566
- package/ui/src/components/Header.tsx +0 -160
- package/ui/src/components/JsonViewer.tsx +0 -171
- package/ui/src/components/ScheduledTaskDetailPanel.tsx +0 -517
- package/ui/src/components/ScheduledTasksPanel.tsx +0 -639
- package/ui/src/components/ServicesPanel.tsx +0 -622
- package/ui/src/components/SessionLogPanel.tsx +0 -1219
- package/ui/src/components/StatsBar.tsx +0 -321
- package/ui/src/components/StatusBadge.tsx +0 -168
- package/ui/src/components/TaskDetailPanel.tsx +0 -903
- package/ui/src/components/TasksPanel.tsx +0 -614
- package/ui/src/components/UsageCharts.tsx +0 -216
- package/ui/src/components/UsageTab.tsx +0 -394
- package/ui/src/hooks/queries.ts +0 -353
- package/ui/src/hooks/useAutoScroll.ts +0 -83
- package/ui/src/index.css +0 -257
- package/ui/src/lib/api.ts +0 -268
- package/ui/src/lib/config.ts +0 -35
- package/ui/src/lib/contentPreview.ts +0 -208
- package/ui/src/lib/theme.ts +0 -214
- package/ui/src/lib/utils.ts +0 -88
- package/ui/src/main.tsx +0 -28
- package/ui/src/types/api.ts +0 -323
- package/ui/src/vite-env.d.ts +0 -1
- package/ui/tailwind.config.js +0 -37
- package/ui/tsconfig.json +0 -31
- package/ui/vite.config.ts +0 -35
- /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
|
+
}
|