@desplega.ai/agent-swarm 1.49.0 → 1.52.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/openapi.json +2070 -728
- package/package.json +10 -1
- package/src/agentmail/handlers.ts +65 -10
- package/src/agentmail/templates.ts +111 -0
- package/src/be/db.ts +1233 -7
- 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/019_skills.sql +65 -0
- package/src/be/migrations/020_approval_requests.sql +41 -0
- package/src/be/seed.ts +62 -0
- package/src/be/skill-parser.ts +70 -0
- package/src/be/skill-sync.ts +106 -0
- package/src/commands/runner.ts +320 -132
- package/src/commands/templates.ts +172 -0
- package/src/github/handlers.ts +292 -77
- 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/gitlab/handlers.ts +63 -22
- package/src/gitlab/templates.ts +140 -0
- package/src/heartbeat/heartbeat.ts +19 -10
- package/src/heartbeat/templates.ts +30 -0
- package/src/http/active-sessions.ts +27 -0
- package/src/http/approval-requests.ts +247 -0
- package/src/http/config.ts +3 -3
- package/src/http/index.ts +9 -2
- package/src/http/poll.ts +135 -14
- package/src/http/prompt-templates.ts +412 -0
- package/src/http/schedules.ts +35 -0
- package/src/http/skills.ts +479 -0
- package/src/http/workflows.ts +8 -0
- package/src/linear/sync.ts +28 -4
- package/src/linear/templates.ts +47 -0
- package/src/prompts/base-prompt.ts +41 -490
- 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 +15 -2
- package/src/providers/pi-mono-extension.ts +5 -1
- package/src/scheduler/scheduler.ts +125 -91
- package/src/server.ts +44 -0
- package/src/slack/assistant.ts +7 -4
- package/src/slack/channel-activity.ts +177 -0
- package/src/slack/handlers.ts +21 -6
- package/src/slack/templates.ts +55 -0
- package/src/tests/approval-requests.test.ts +735 -0
- package/src/tests/artifact-sdk.test.ts +12 -12
- package/src/tests/base-prompt.test.ts +49 -49
- package/src/tests/channel-activity.test.ts +363 -0
- package/src/tests/heartbeat.test.ts +1 -0
- package/src/tests/linear-webhook.test.ts +7 -3
- package/src/tests/pool-session-logs.test.ts +199 -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/self-improvement.test.ts +8 -7
- package/src/tests/skill-parser.test.ts +178 -0
- package/src/tests/skill-sync.test.ts +171 -0
- package/src/tests/slack-metadata-inheritance.test.ts +1 -1
- package/src/tests/slack-thread-followups.test.ts +1 -1
- package/src/tests/structured-output.test.ts +0 -4
- package/src/tests/tool-annotations.test.ts +2 -1
- package/src/tests/update-profile-agentid.test.ts +248 -0
- package/src/tests/update-profile-auth.test.ts +195 -0
- package/src/tests/workflow-async-v2.test.ts +126 -4
- package/src/tests/workflow-definition-validation.test.ts +76 -0
- package/src/tests/workflow-executors.test.ts +4 -2
- package/src/tests/workflow-retry-v2.test.ts +1 -1
- package/src/tests/workflow-schedule-trigger.test.ts +104 -0
- package/src/tests/workflow-workspace.test.ts +272 -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/request-human-input.ts +106 -0
- package/src/tools/skills/index.ts +11 -0
- package/src/tools/skills/skill-create.ts +105 -0
- package/src/tools/skills/skill-delete.ts +67 -0
- package/src/tools/skills/skill-get.ts +75 -0
- package/src/tools/skills/skill-install-remote.ts +152 -0
- package/src/tools/skills/skill-install.ts +101 -0
- package/src/tools/skills/skill-list.ts +77 -0
- package/src/tools/skills/skill-publish.ts +123 -0
- package/src/tools/skills/skill-search.ts +43 -0
- package/src/tools/skills/skill-sync-remote.ts +128 -0
- package/src/tools/skills/skill-uninstall.ts +60 -0
- package/src/tools/skills/skill-update.ts +128 -0
- package/src/tools/store-progress.ts +22 -4
- package/src/tools/task-action.ts +20 -0
- package/src/tools/templates.ts +53 -0
- package/src/tools/tool-config.ts +23 -0
- package/src/tools/update-profile.ts +106 -34
- package/src/tools/workflows/create-workflow.ts +19 -1
- package/src/tools/workflows/update-workflow.ts +16 -1
- package/src/types.ts +109 -2
- package/src/workflows/definition.ts +30 -12
- package/src/workflows/engine.ts +40 -14
- package/src/workflows/executors/agent-task.ts +14 -3
- package/src/workflows/executors/human-in-the-loop.ts +160 -0
- package/src/workflows/executors/registry.ts +2 -0
- package/src/workflows/index.ts +1 -1
- package/src/workflows/recovery.ts +72 -0
- package/src/workflows/resume.ts +162 -12
- package/src/workflows/triggers.ts +31 -2
- package/src/workflows/version.ts +2 -0
- package/.claude/settings.json +0 -84
- package/.claude/settings.local.json +0 -117
- package/.dockerignore +0 -61
- package/.editorconfig +0 -15
- package/.entire/settings.json +0 -4
- package/.env.docker.example +0 -56
- package/.env.example +0 -78
- package/.github/ISSUE_TEMPLATE/bug_report.yml +0 -78
- package/.github/ISSUE_TEMPLATE/community-template.yml +0 -77
- package/.github/ISSUE_TEMPLATE/config.yml +0 -8
- package/.github/ISSUE_TEMPLATE/feature_request.yml +0 -60
- package/.github/PULL_REQUEST_TEMPLATE/community-template.md +0 -29
- package/.github/workflows/ci.yml +0 -52
- package/.github/workflows/docker-and-deploy.yml +0 -132
- package/.github/workflows/merge-gate.yml +0 -233
- package/.opencode/plugins/entire.ts +0 -133
- package/.superset/config.json +0 -6
- package/.wts-config.json +0 -4
- package/.wts-setup.ts +0 -171
- package/CHANGELOG.md +0 -447
- package/CLAUDE.md +0 -521
- package/CONTRIBUTING.md +0 -315
- package/DEPLOYMENT.md +0 -622
- package/Dockerfile +0 -65
- package/Dockerfile.worker +0 -189
- package/MCP.md +0 -841
- package/UI.md +0 -40
- package/api-entrypoint.sh +0 -56
- 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/depot.json +0 -1
- package/docker-compose.example.yml +0 -350
- package/docker-compose.local.yml +0 -119
- package/docker-entrypoint.sh +0 -632
- package/docs-site/app/api/search/route.ts +0 -4
- package/docs-site/app/docs/[[...slug]]/page.tsx +0 -87
- package/docs-site/app/docs/layout.tsx +0 -12
- package/docs-site/app/globals.css +0 -24
- package/docs-site/app/layout.config.tsx +0 -34
- package/docs-site/app/layout.tsx +0 -119
- package/docs-site/app/llms-full.txt/route.ts +0 -11
- package/docs-site/app/llms.mdx/docs/[[...slug]]/route.ts +0 -24
- package/docs-site/app/llms.txt/route.ts +0 -8
- package/docs-site/app/page.tsx +0 -5
- package/docs-site/app/robots.ts +0 -13
- package/docs-site/app/sitemap.ts +0 -37
- package/docs-site/components/api-page.client.tsx +0 -4
- package/docs-site/components/api-page.tsx +0 -7
- package/docs-site/components/mdx/mermaid.tsx +0 -55
- package/docs-site/content/docs/(documentation)/architecture/agents.mdx +0 -117
- package/docs-site/content/docs/(documentation)/architecture/hooks.mdx +0 -77
- package/docs-site/content/docs/(documentation)/architecture/memory.mdx +0 -96
- package/docs-site/content/docs/(documentation)/architecture/meta.json +0 -4
- package/docs-site/content/docs/(documentation)/architecture/overview.mdx +0 -172
- package/docs-site/content/docs/(documentation)/concepts/epics.mdx +0 -98
- package/docs-site/content/docs/(documentation)/concepts/meta.json +0 -4
- package/docs-site/content/docs/(documentation)/concepts/scheduling.mdx +0 -136
- package/docs-site/content/docs/(documentation)/concepts/services.mdx +0 -104
- package/docs-site/content/docs/(documentation)/concepts/task-lifecycle.mdx +0 -148
- package/docs-site/content/docs/(documentation)/concepts/workflows.mdx +0 -209
- package/docs-site/content/docs/(documentation)/contributing.mdx +0 -158
- package/docs-site/content/docs/(documentation)/getting-started.mdx +0 -157
- package/docs-site/content/docs/(documentation)/guides/agentmail-integration.mdx +0 -79
- package/docs-site/content/docs/(documentation)/guides/deployment.mdx +0 -171
- package/docs-site/content/docs/(documentation)/guides/github-integration.mdx +0 -81
- package/docs-site/content/docs/(documentation)/guides/gitlab-integration.mdx +0 -93
- package/docs-site/content/docs/(documentation)/guides/linear-integration.mdx +0 -98
- package/docs-site/content/docs/(documentation)/guides/meta.json +0 -13
- package/docs-site/content/docs/(documentation)/guides/sentry-integration.mdx +0 -52
- package/docs-site/content/docs/(documentation)/guides/slack-integration.mdx +0 -179
- package/docs-site/content/docs/(documentation)/guides/x402-payments.mdx +0 -154
- package/docs-site/content/docs/(documentation)/index.mdx +0 -65
- package/docs-site/content/docs/(documentation)/meta.json +0 -19
- package/docs-site/content/docs/(documentation)/reference/cli.mdx +0 -241
- package/docs-site/content/docs/(documentation)/reference/environment-variables.mdx +0 -205
- package/docs-site/content/docs/(documentation)/reference/mcp-tools.mdx +0 -449
- package/docs-site/content/docs/(documentation)/reference/meta.json +0 -4
- package/docs-site/content/docs/api-reference/active-sessions.mdx +0 -9
- package/docs-site/content/docs/api-reference/agents.mdx +0 -9
- package/docs-site/content/docs/api-reference/channels.mdx +0 -9
- package/docs-site/content/docs/api-reference/config.mdx +0 -9
- package/docs-site/content/docs/api-reference/debug.mdx +0 -9
- package/docs-site/content/docs/api-reference/ecosystem.mdx +0 -9
- package/docs-site/content/docs/api-reference/epics.mdx +0 -9
- package/docs-site/content/docs/api-reference/index.mdx +0 -32
- package/docs-site/content/docs/api-reference/memory.mdx +0 -9
- package/docs-site/content/docs/api-reference/meta.json +0 -25
- package/docs-site/content/docs/api-reference/poll.mdx +0 -9
- package/docs-site/content/docs/api-reference/repos.mdx +0 -9
- package/docs-site/content/docs/api-reference/schedules.mdx +0 -9
- package/docs-site/content/docs/api-reference/session-data.mdx +0 -9
- package/docs-site/content/docs/api-reference/stats.mdx +0 -9
- package/docs-site/content/docs/api-reference/tasks.mdx +0 -9
- package/docs-site/content/docs/api-reference/trackers.mdx +0 -9
- package/docs-site/content/docs/api-reference/webhooks.mdx +0 -9
- package/docs-site/content/docs/api-reference/workflows.mdx +0 -9
- package/docs-site/content/docs/meta.json +0 -3
- package/docs-site/lib/get-llm-text.ts +0 -10
- package/docs-site/lib/openapi.ts +0 -23
- package/docs-site/lib/source.ts +0 -8
- package/docs-site/mdx-components.tsx +0 -13
- package/docs-site/next.config.mjs +0 -29
- package/docs-site/package.json +0 -35
- package/docs-site/pnpm-lock.yaml +0 -5407
- package/docs-site/postcss.config.mjs +0 -8
- package/docs-site/public/logo.png +0 -0
- package/docs-site/scripts/generate-docs.ts +0 -171
- package/docs-site/source.config.ts +0 -17
- package/docs-site/tsconfig.json +0 -46
- package/ecosystem.config.cjs +0 -66
- package/landing/next.config.ts +0 -14
- package/landing/package.json +0 -31
- package/landing/pnpm-lock.yaml +0 -1091
- package/landing/postcss.config.mjs +0 -8
- package/landing/public/apple-touch-icon.png +0 -0
- package/landing/public/favicon.ico +0 -0
- package/landing/public/logo.png +0 -0
- package/landing/public/og-image.png +0 -0
- package/landing/public/omghost-desplega.svg +0 -30
- package/landing/public/omghost-openfort.svg +0 -9
- package/landing/src/app/actions/waitlist.ts +0 -25
- package/landing/src/app/blog/openfort-hackathon/page.tsx +0 -863
- package/landing/src/app/blog/page.tsx +0 -162
- package/landing/src/app/blog/swarm-metrics/page.tsx +0 -685
- package/landing/src/app/examples/page.tsx +0 -174
- package/landing/src/app/examples/x402/page.tsx +0 -456
- package/landing/src/app/globals.css +0 -122
- package/landing/src/app/layout.tsx +0 -134
- package/landing/src/app/page.tsx +0 -27
- package/landing/src/app/robots.ts +0 -13
- package/landing/src/app/sitemap.ts +0 -44
- package/landing/src/components/architecture.tsx +0 -163
- package/landing/src/components/cta.tsx +0 -52
- package/landing/src/components/features.tsx +0 -160
- package/landing/src/components/footer.tsx +0 -100
- package/landing/src/components/hero.tsx +0 -217
- package/landing/src/components/how-it-works.tsx +0 -165
- package/landing/src/components/navbar.tsx +0 -147
- package/landing/src/components/waitlist.tsx +0 -110
- package/landing/src/components/why-choose.tsx +0 -149
- package/landing/src/components/workshops.tsx +0 -328
- package/landing/src/lib/utils.ts +0 -6
- package/landing/tsconfig.json +0 -41
- package/misc/transcripts/2026-03-09-pi-mono-e2e-verification.md +0 -154
- package/new-ui/CLAUDE.md +0 -92
- package/new-ui/README.md +0 -73
- package/new-ui/biome.json +0 -42
- package/new-ui/components.json +0 -21
- package/new-ui/index.html +0 -25
- package/new-ui/package.json +0 -49
- package/new-ui/pnpm-lock.yaml +0 -4845
- package/new-ui/public/logo.png +0 -0
- package/new-ui/src/api/client.ts +0 -814
- package/new-ui/src/api/hooks/index.ts +0 -64
- package/new-ui/src/api/hooks/use-agents.ts +0 -58
- package/new-ui/src/api/hooks/use-channels.ts +0 -115
- package/new-ui/src/api/hooks/use-config-api.ts +0 -46
- package/new-ui/src/api/hooks/use-costs.ts +0 -122
- package/new-ui/src/api/hooks/use-db-query.ts +0 -29
- package/new-ui/src/api/hooks/use-epics.ts +0 -75
- package/new-ui/src/api/hooks/use-repos.ts +0 -61
- package/new-ui/src/api/hooks/use-schedules.ts +0 -81
- package/new-ui/src/api/hooks/use-services.ts +0 -16
- package/new-ui/src/api/hooks/use-stats.ts +0 -27
- package/new-ui/src/api/hooks/use-tasks.ts +0 -89
- package/new-ui/src/api/hooks/use-workflows.ts +0 -109
- package/new-ui/src/api/types.ts +0 -549
- package/new-ui/src/app/App.tsx +0 -13
- package/new-ui/src/app/providers.tsx +0 -32
- package/new-ui/src/app/router.tsx +0 -52
- package/new-ui/src/components/layout/app-header.tsx +0 -47
- package/new-ui/src/components/layout/app-sidebar.tsx +0 -128
- package/new-ui/src/components/layout/breadcrumbs.tsx +0 -57
- package/new-ui/src/components/layout/config-guard.tsx +0 -22
- package/new-ui/src/components/layout/root-layout.tsx +0 -40
- package/new-ui/src/components/layout/swarm-switcher.tsx +0 -85
- package/new-ui/src/components/shared/command-menu.tsx +0 -131
- package/new-ui/src/components/shared/data-grid.tsx +0 -141
- package/new-ui/src/components/shared/empty-state.tsx +0 -24
- package/new-ui/src/components/shared/error-boundary.tsx +0 -72
- package/new-ui/src/components/shared/json-viewer.tsx +0 -47
- package/new-ui/src/components/shared/name-connection-modal.tsx +0 -99
- package/new-ui/src/components/shared/page-skeleton.tsx +0 -16
- package/new-ui/src/components/shared/session-log-viewer.tsx +0 -364
- package/new-ui/src/components/shared/stats-bar.tsx +0 -132
- package/new-ui/src/components/shared/status-badge.tsx +0 -131
- package/new-ui/src/components/shared/usage-summary.tsx +0 -179
- package/new-ui/src/components/ui/alert-dialog.tsx +0 -176
- package/new-ui/src/components/ui/alert.tsx +0 -60
- package/new-ui/src/components/ui/avatar.tsx +0 -96
- package/new-ui/src/components/ui/badge.tsx +0 -46
- package/new-ui/src/components/ui/button.tsx +0 -62
- package/new-ui/src/components/ui/card.tsx +0 -75
- package/new-ui/src/components/ui/command.tsx +0 -160
- package/new-ui/src/components/ui/dialog.tsx +0 -143
- package/new-ui/src/components/ui/dropdown-menu.tsx +0 -226
- package/new-ui/src/components/ui/input.tsx +0 -21
- package/new-ui/src/components/ui/label.tsx +0 -19
- package/new-ui/src/components/ui/progress.tsx +0 -26
- package/new-ui/src/components/ui/scroll-area.tsx +0 -54
- package/new-ui/src/components/ui/select.tsx +0 -175
- package/new-ui/src/components/ui/separator.tsx +0 -28
- package/new-ui/src/components/ui/sheet.tsx +0 -132
- package/new-ui/src/components/ui/sidebar.tsx +0 -691
- package/new-ui/src/components/ui/skeleton.tsx +0 -13
- package/new-ui/src/components/ui/sonner.tsx +0 -35
- package/new-ui/src/components/ui/switch.tsx +0 -33
- package/new-ui/src/components/ui/table.tsx +0 -92
- package/new-ui/src/components/ui/tabs.tsx +0 -79
- package/new-ui/src/components/ui/textarea.tsx +0 -18
- package/new-ui/src/components/ui/tooltip.tsx +0 -51
- package/new-ui/src/components/workflows/action-node.tsx +0 -53
- package/new-ui/src/components/workflows/condition-node.tsx +0 -50
- package/new-ui/src/components/workflows/graph-utils.ts +0 -124
- package/new-ui/src/components/workflows/json-tree.tsx +0 -189
- package/new-ui/src/components/workflows/node-styles.ts +0 -10
- package/new-ui/src/components/workflows/step-detail-sheet.tsx +0 -87
- package/new-ui/src/components/workflows/trigger-node.tsx +0 -41
- package/new-ui/src/components/workflows/workflow-graph.tsx +0 -65
- package/new-ui/src/hooks/use-auto-scroll.ts +0 -82
- package/new-ui/src/hooks/use-config.ts +0 -203
- package/new-ui/src/hooks/use-keyboard-shortcuts.ts +0 -41
- package/new-ui/src/hooks/use-mobile.ts +0 -19
- package/new-ui/src/hooks/use-theme.ts +0 -60
- package/new-ui/src/lib/config.ts +0 -188
- package/new-ui/src/lib/slugs.ts +0 -71
- package/new-ui/src/lib/utils.ts +0 -120
- package/new-ui/src/main.tsx +0 -11
- package/new-ui/src/pages/agents/[id]/page.tsx +0 -492
- package/new-ui/src/pages/agents/page.tsx +0 -134
- package/new-ui/src/pages/chat/page.tsx +0 -674
- package/new-ui/src/pages/config/page.tsx +0 -1109
- package/new-ui/src/pages/dashboard/page.tsx +0 -454
- package/new-ui/src/pages/debug/page.tsx +0 -275
- package/new-ui/src/pages/epics/[id]/page.tsx +0 -809
- package/new-ui/src/pages/epics/page.tsx +0 -321
- package/new-ui/src/pages/not-found/page.tsx +0 -18
- package/new-ui/src/pages/repos/page.tsx +0 -369
- package/new-ui/src/pages/schedules/[id]/page.tsx +0 -664
- package/new-ui/src/pages/schedules/page.tsx +0 -477
- package/new-ui/src/pages/services/page.tsx +0 -128
- package/new-ui/src/pages/tasks/[id]/page.tsx +0 -670
- package/new-ui/src/pages/tasks/page.tsx +0 -592
- package/new-ui/src/pages/usage/page.tsx +0 -195
- package/new-ui/src/pages/workflow-runs/[id]/page.tsx +0 -363
- package/new-ui/src/pages/workflows/[id]/page.tsx +0 -417
- package/new-ui/src/pages/workflows/page.tsx +0 -266
- package/new-ui/src/styles/ag-grid.css +0 -36
- package/new-ui/src/styles/globals.css +0 -213
- package/new-ui/test-results/.last-run.json +0 -4
- package/new-ui/tsconfig.app.json +0 -34
- package/new-ui/tsconfig.json +0 -4
- package/new-ui/tsconfig.node.json +0 -26
- package/new-ui/vercel.json +0 -4
- package/new-ui/vite.config.ts +0 -28
- package/plugin/README.md +0 -1
- package/plugin/build-pi-skills.ts +0 -233
- package/plugin/hooks/hooks.json +0 -71
- package/prek.toml +0 -75
- package/pyproject.toml +0 -9
- package/scripts/check-db-boundary.sh +0 -60
- package/scripts/e2e-docker-provider.ts +0 -820
- package/scripts/e2e-io-schemas-test.ts +0 -807
- package/scripts/e2e-provider-test.ts +0 -220
- package/scripts/e2e-workflow-redesign.sh +0 -229
- package/scripts/e2e-workflow-test.sh +0 -285
- package/scripts/e2e-workflow-test.ts +0 -857
- package/scripts/generate-mcp-docs.ts +0 -415
- package/scripts/generate-openapi.ts +0 -26
- package/scripts/measure-tool-tokens.ts +0 -118
- package/scripts/x402-e2e-test.ts +0 -195
- package/scripts/x402-test-server.ts +0 -236
- package/scripts/x402-testnet-e2e.ts +0 -668
- package/slack-manifest.json +0 -88
- package/templates-ui/README.md +0 -46
- package/templates-ui/components.json +0 -17
- package/templates-ui/eslint.config.mjs +0 -18
- package/templates-ui/next.config.ts +0 -7
- package/templates-ui/package.json +0 -35
- package/templates-ui/pnpm-lock.yaml +0 -4571
- package/templates-ui/postcss.config.mjs +0 -7
- package/templates-ui/public/file.svg +0 -1
- package/templates-ui/public/globe.svg +0 -1
- package/templates-ui/public/logo.png +0 -0
- package/templates-ui/public/next.svg +0 -1
- package/templates-ui/public/vercel.svg +0 -1
- package/templates-ui/public/window.svg +0 -1
- package/templates-ui/src/app/[category]/[name]/page.tsx +0 -89
- package/templates-ui/src/app/api/templates/[...slug]/route.ts +0 -52
- package/templates-ui/src/app/api/templates/route.ts +0 -18
- package/templates-ui/src/app/builder/page.tsx +0 -37
- package/templates-ui/src/app/globals.css +0 -94
- package/templates-ui/src/app/layout.tsx +0 -79
- package/templates-ui/src/app/page.tsx +0 -38
- package/templates-ui/src/app/robots.ts +0 -11
- package/templates-ui/src/app/sitemap.ts +0 -31
- package/templates-ui/src/components/compose-builder.tsx +0 -442
- package/templates-ui/src/components/compose-preview.tsx +0 -117
- package/templates-ui/src/components/file-preview.tsx +0 -77
- package/templates-ui/src/components/footer.tsx +0 -40
- package/templates-ui/src/components/header.tsx +0 -41
- package/templates-ui/src/components/template-card.tsx +0 -87
- package/templates-ui/src/components/template-detail.tsx +0 -125
- package/templates-ui/src/components/template-gallery.tsx +0 -263
- package/templates-ui/src/components/ui/badge.tsx +0 -36
- package/templates-ui/src/components/ui/button.tsx +0 -57
- package/templates-ui/src/components/ui/card.tsx +0 -76
- package/templates-ui/src/components/ui/separator.tsx +0 -31
- package/templates-ui/src/components/ui/tooltip.tsx +0 -32
- package/templates-ui/src/lib/compose-generator.ts +0 -241
- package/templates-ui/src/lib/templates.ts +0 -137
- package/templates-ui/src/lib/utils.ts +0 -6
- package/templates-ui/tsconfig.json +0 -34
- package/thoughts/research/2026-02-28-openfort-viem-x402-research.md +0 -679
- package/thoughts/research/2026-02-28-x402-payments-research.md +0 -686
- package/thoughts/researcher/plans/2026-02-20-agent-self-improvement-plan.md +0 -282
- package/thoughts/researcher/research/2026-02-20-agent-self-improvement.md +0 -492
- package/thoughts/shared/plans/.gitkeep +0 -0
- 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/plans/2026-02-26-mcp-tool-context-reduction.md +0 -282
- package/thoughts/shared/plans/2026-03-02-claude-context-mode-integration.md +0 -328
- package/thoughts/shared/plans/2026-03-02-code-level-heartbeat.md +0 -224
- 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/shared/research/2026-02-26-cliffy-mcp-tools.md +0 -159
- package/thoughts/shared/research/2026-03-03-database-migration-system-refactor.md +0 -337
- package/thoughts/swarm-researcher/plans/2026-02-23-openclaw-improvements-plan.md +0 -778
- package/thoughts/swarm-researcher/plans/2026-02-26-artifacts-localtunnel-plan.md +0 -1269
- package/thoughts/swarm-researcher/research/2026-02-23-openclaw-vs-agent-swarm-comparison.md +0 -411
- package/thoughts/swarm-researcher/research/2026-02-26-artifacts-localtunnel.md +0 -724
- package/thoughts/taras/brainstorms/2026-03-20-prompt-template-registry.md +0 -443
- package/thoughts/taras/brainstorms/2026-03-20-setup-cli-onboarding.md +0 -307
- 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/plans/2026-02-20-auto-improvement.md +0 -803
- package/thoughts/taras/plans/2026-02-20-env-management.md +0 -538
- package/thoughts/taras/plans/2026-02-20-memory-system.md +0 -882
- package/thoughts/taras/plans/2026-02-20-repos-knowledge.md +0 -806
- package/thoughts/taras/plans/2026-02-20-session-attach.md +0 -647
- package/thoughts/taras/plans/2026-02-20-worker-identity.md +0 -820
- package/thoughts/taras/plans/2026-02-25-feat-new-ui-visual-redesign-plan.md +0 -768
- package/thoughts/taras/plans/2026-03-04-fix-buildSystemPrompt-missing-fields.md +0 -77
- package/thoughts/taras/plans/2026-03-04-new-ui-missing-actions.md +0 -543
- package/thoughts/taras/plans/2026-03-06-one-time-scheduled-tasks.md +0 -373
- package/thoughts/taras/plans/2026-03-08-memory-self-improvement-enhancements.md +0 -512
- package/thoughts/taras/plans/2026-03-08-pi-mono-provider-implementation.md +0 -919
- package/thoughts/taras/plans/2026-03-09-templates-registry.md +0 -723
- package/thoughts/taras/plans/2026-03-10-task-working-directory.md +0 -371
- package/thoughts/taras/plans/2026-03-11-archil-per-agent-write-strategy.md +0 -621
- package/thoughts/taras/plans/2026-03-12-eliminate-inbox-route-to-tasks.md +0 -61
- package/thoughts/taras/plans/2026-03-12-slack-thread-followup-additive.md +0 -488
- package/thoughts/taras/plans/2026-03-13-slack-ai-improvements.md +0 -644
- package/thoughts/taras/plans/2026-03-16-route-wrapper-openapi.md +0 -636
- package/thoughts/taras/plans/2026-03-17-multi-api-config.md +0 -444
- package/thoughts/taras/plans/2026-03-18-agent-fs-integration.md +0 -591
- package/thoughts/taras/plans/2026-03-18-debug-db-explorer.md +0 -446
- package/thoughts/taras/plans/2026-03-18-workflow-redesign.md +0 -987
- package/thoughts/taras/plans/2026-03-19-compound-learnings.md +0 -403
- package/thoughts/taras/plans/2026-03-19-ticket-tracker-linear-integration.md +0 -860
- package/thoughts/taras/plans/2026-03-19-workflow-io-schemas-and-bugs.md +0 -899
- package/thoughts/taras/plans/2026-03-20-setup-cli-onboarding.md +0 -874
- package/thoughts/taras/plans/2026-03-20-workflow-structured-output-validation-workspace.md +0 -723
- 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/thoughts/taras/research/2026-02-19-agent-native-swarm-architecture.md +0 -390
- package/thoughts/taras/research/2026-02-19-swarm-gaps-implementation.md +0 -594
- package/thoughts/taras/research/2026-02-25-dashboard-ui-design-best-practices.md +0 -825
- package/thoughts/taras/research/2026-02-26-task-detail-page-redesign.md +0 -393
- package/thoughts/taras/research/2026-03-03-new-ui-missing-actions.md +0 -168
- package/thoughts/taras/research/2026-03-05-pi-mono-provider-research.md +0 -230
- package/thoughts/taras/research/2026-03-06-workflow-engine-design.md +0 -445
- package/thoughts/taras/research/2026-03-08-drive-loop-concept.md +0 -375
- package/thoughts/taras/research/2026-03-08-pi-mono-deep-dive.md +0 -869
- package/thoughts/taras/research/2026-03-09-templates-registry.md +0 -373
- package/thoughts/taras/research/2026-03-10-agent-working-directory.md +0 -223
- package/thoughts/taras/research/2026-03-10-configurable-event-prompts.md +0 -339
- package/thoughts/taras/research/2026-03-11-archil-production-setup.md +0 -181
- package/thoughts/taras/research/2026-03-11-archil-shared-disk-write-strategies.md +0 -437
- package/thoughts/taras/research/2026-03-13-slack-ai-features.md +0 -258
- package/thoughts/taras/research/2026-03-16-openapi-docs-generation.md +0 -335
- package/thoughts/taras/research/2026-03-16-route-wrapper-openapi.md +0 -670
- package/thoughts/taras/research/2026-03-16-slack-thread-followups-e2e.md +0 -54
- package/thoughts/taras/research/2026-03-18-agent-fs-integration.md +0 -558
- package/thoughts/taras/research/2026-03-18-linear-integration-finalization.md +0 -526
- package/thoughts/taras/research/2026-03-18-workflow-redesign.md +0 -797
- package/thoughts/taras/research/2026-03-19-workflow-node-io-schemas-and-bugs.md +0 -563
- package/thoughts/taras/research/2026-03-19-workflow-structured-output-validation-workspace.md +0 -486
- package/thoughts/taras/research/2026-03-20-prompt-template-registry.md +0 -469
- package/tsconfig.json +0 -37
|
@@ -1,148 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Task Lifecycle
|
|
3
|
-
description: How tasks flow through the swarm from creation to completion
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Task Lifecycle
|
|
7
|
-
|
|
8
|
-
Tasks are the fundamental unit of work in Agent Swarm. Understanding the task lifecycle is essential for working with the system effectively.
|
|
9
|
-
|
|
10
|
-
## Task States
|
|
11
|
-
|
|
12
|
-
```mermaid
|
|
13
|
-
stateDiagram-v2
|
|
14
|
-
[*] --> backlog
|
|
15
|
-
backlog --> unassigned
|
|
16
|
-
unassigned --> offered
|
|
17
|
-
offered --> pending : accepted
|
|
18
|
-
offered --> [*] : rejected
|
|
19
|
-
pending --> in_progress
|
|
20
|
-
in_progress --> completed
|
|
21
|
-
in_progress --> failed
|
|
22
|
-
in_progress --> paused
|
|
23
|
-
paused --> in_progress
|
|
24
|
-
paused --> completed
|
|
25
|
-
paused --> failed
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
### State Descriptions
|
|
29
|
-
|
|
30
|
-
| State | Description |
|
|
31
|
-
|-------|-------------|
|
|
32
|
-
| `backlog` | Task is in the backlog, not yet ready for assignment |
|
|
33
|
-
| `unassigned` | Task is in the pool, available for any worker to claim |
|
|
34
|
-
| `offered` | Task has been offered to a specific agent, awaiting accept/reject |
|
|
35
|
-
| `pending` | Task has been accepted/assigned but work hasn't started yet |
|
|
36
|
-
| `in_progress` | Worker is actively executing the task |
|
|
37
|
-
| `paused` | Task was paused (e.g., during container restart) and can be resumed |
|
|
38
|
-
| `completed` | Task finished successfully |
|
|
39
|
-
| `failed` | Task could not be completed |
|
|
40
|
-
| `cancelled` | Task was cancelled by the lead or creator |
|
|
41
|
-
|
|
42
|
-
## Task Creation
|
|
43
|
-
|
|
44
|
-
Tasks can be created in several ways:
|
|
45
|
-
|
|
46
|
-
### Direct Assignment
|
|
47
|
-
|
|
48
|
-
The lead sends a task directly to a specific worker:
|
|
49
|
-
|
|
50
|
-
```
|
|
51
|
-
send-task(task: "Fix the login bug", agentId: "worker-uuid")
|
|
52
|
-
```
|
|
53
|
-
|
|
54
|
-
### Task Pool
|
|
55
|
-
|
|
56
|
-
Tasks can be created without assignment, going into a shared pool:
|
|
57
|
-
|
|
58
|
-
```
|
|
59
|
-
task-action(action: "create", task: "Review PR #42")
|
|
60
|
-
```
|
|
61
|
-
|
|
62
|
-
Workers claim tasks from the pool:
|
|
63
|
-
|
|
64
|
-
```
|
|
65
|
-
task-action(action: "claim", taskId: "task-uuid")
|
|
66
|
-
```
|
|
67
|
-
|
|
68
|
-
### Offer Mode
|
|
69
|
-
|
|
70
|
-
Tasks can be offered to a worker who must accept or reject:
|
|
71
|
-
|
|
72
|
-
```
|
|
73
|
-
send-task(task: "Refactor auth module", agentId: "worker-uuid", offerMode: true)
|
|
74
|
-
```
|
|
75
|
-
|
|
76
|
-
### External Sources
|
|
77
|
-
|
|
78
|
-
Tasks are automatically created from:
|
|
79
|
-
- **Slack** — Direct messages to the bot
|
|
80
|
-
- **GitHub** — @mentions, issue assignments, PR review requests
|
|
81
|
-
- **Email** — Messages to registered AgentMail inboxes
|
|
82
|
-
- **Schedules** — Cron-based recurring tasks
|
|
83
|
-
|
|
84
|
-
## Task Dependencies
|
|
85
|
-
|
|
86
|
-
Tasks can depend on other tasks:
|
|
87
|
-
|
|
88
|
-
```
|
|
89
|
-
send-task(
|
|
90
|
-
task: "Deploy to production",
|
|
91
|
-
dependsOn: ["build-task-id", "test-task-id"]
|
|
92
|
-
)
|
|
93
|
-
```
|
|
94
|
-
|
|
95
|
-
A task with dependencies won't be offered or claimable until all dependencies are completed.
|
|
96
|
-
|
|
97
|
-
## Task Properties
|
|
98
|
-
|
|
99
|
-
| Property | Description |
|
|
100
|
-
|----------|-------------|
|
|
101
|
-
| `task` | Description of what needs to be done |
|
|
102
|
-
| `priority` | 0-100 (default: 50). Higher priority tasks are processed first |
|
|
103
|
-
| `tags` | Labels for filtering (e.g., `['urgent', 'frontend']`) |
|
|
104
|
-
| `taskType` | Classification (e.g., `bug`, `feature`, `review`) |
|
|
105
|
-
| `dependsOn` | Array of task IDs that must complete first |
|
|
106
|
-
| `epicId` | Optional association with an epic |
|
|
107
|
-
| `parentTaskId` | For session continuity — child task resumes parent's Claude session |
|
|
108
|
-
| `dir` | Working directory (absolute path) for the agent to start in. Falls back to repo clone path or default cwd |
|
|
109
|
-
| `model` | Model override: `haiku`, `sonnet`, or `opus`. Priority: task > `MODEL_OVERRIDE` config > `opus` |
|
|
110
|
-
| `scheduleId` | Back-reference to the originating schedule (set automatically for schedule-created tasks) |
|
|
111
|
-
|
|
112
|
-
## Progress Tracking
|
|
113
|
-
|
|
114
|
-
Workers report progress using the `store-progress` tool:
|
|
115
|
-
|
|
116
|
-
```
|
|
117
|
-
store-progress(taskId: "...", progress: "Fixed the auth check, running tests now")
|
|
118
|
-
```
|
|
119
|
-
|
|
120
|
-
When done:
|
|
121
|
-
|
|
122
|
-
```
|
|
123
|
-
store-progress(taskId: "...", status: "completed", output: "PR #42 created")
|
|
124
|
-
```
|
|
125
|
-
|
|
126
|
-
Or on failure:
|
|
127
|
-
|
|
128
|
-
```
|
|
129
|
-
store-progress(taskId: "...", status: "failed", failureReason: "Tests still failing after 3 attempts")
|
|
130
|
-
```
|
|
131
|
-
|
|
132
|
-
## Graceful Shutdown & Resume
|
|
133
|
-
|
|
134
|
-
When a worker container receives SIGTERM:
|
|
135
|
-
|
|
136
|
-
1. **Grace period** — Worker waits for active tasks to complete (default: 30s)
|
|
137
|
-
2. **Tasks paused** — Any tasks still running are marked as `paused`
|
|
138
|
-
3. **State preserved** — Progress is saved to the database
|
|
139
|
-
4. **On restart** — Worker automatically resumes paused tasks with full context
|
|
140
|
-
|
|
141
|
-
This enables zero-downtime deployments.
|
|
142
|
-
|
|
143
|
-
## Related
|
|
144
|
-
|
|
145
|
-
- [Epics](/docs/concepts/epics) — Organizing related tasks into larger projects
|
|
146
|
-
- [Scheduled Tasks](/docs/concepts/scheduling) — Automate recurring task creation
|
|
147
|
-
- [Architecture Overview](/docs/architecture/overview) — How the task system fits into the overall architecture
|
|
148
|
-
- [Deployment Guide](/docs/guides/deployment) — Graceful shutdown and task resume in production
|
|
@@ -1,209 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Workflows
|
|
3
|
-
description: Automate multi-step processes with DAG-based workflow definitions
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Workflows
|
|
7
|
-
|
|
8
|
-
Agent Swarm includes a **workflow automation engine** that lets you define multi-step processes as directed acyclic graphs (DAGs). Workflows connect triggers, conditions, and actions into pipelines that execute automatically.
|
|
9
|
-
|
|
10
|
-
## Core Concepts
|
|
11
|
-
|
|
12
|
-
A workflow consists of:
|
|
13
|
-
|
|
14
|
-
- **Nodes** — Individual steps with a `next` field that defines routing (no explicit edges needed)
|
|
15
|
-
- **Executors** — Class-based step implementations with Zod-typed config and output schemas
|
|
16
|
-
- **Triggers** — Entry points: webhook (HMAC-SHA256), schedule (ref), or manual
|
|
17
|
-
- **Checkpoint durability** — Atomic DB write after every step; resume from last checkpoint on crash
|
|
18
|
-
|
|
19
|
-
### Executor Types
|
|
20
|
-
|
|
21
|
-
The engine includes 8 built-in executor types:
|
|
22
|
-
|
|
23
|
-
| Executor | Description |
|
|
24
|
-
|----------|-------------|
|
|
25
|
-
| `script` | Run a shell script or JavaScript expression |
|
|
26
|
-
| `agent-task` | Create and delegate a task to a swarm agent |
|
|
27
|
-
| `raw-llm` | Call an LLM directly with a prompt template |
|
|
28
|
-
| `vcs` | Version control operations (create PR, merge, etc.) |
|
|
29
|
-
| `property-match` | Route based on matching properties in step input |
|
|
30
|
-
| `code-match` | Route based on a custom JavaScript expression in a sandbox |
|
|
31
|
-
| `notify` | Send a notification (Slack, email, or internal message) |
|
|
32
|
-
| `validate` | Validate step output; can halt or trigger retry |
|
|
33
|
-
|
|
34
|
-
Each executor has typed config and output schemas available via `GET /api/executor-types` (returns JSON Schemas via Zod v4 `z.toJSONSchema()`).
|
|
35
|
-
|
|
36
|
-
## Defining a Workflow
|
|
37
|
-
|
|
38
|
-
Workflows use a **nodes-with-next** schema. Each node declares its `next` field for routing — edges are auto-generated for the UI graph visualization.
|
|
39
|
-
|
|
40
|
-
```json
|
|
41
|
-
{
|
|
42
|
-
"name": "pr-review-pipeline",
|
|
43
|
-
"description": "Auto-assign PR reviews on webhook",
|
|
44
|
-
"triggers": [
|
|
45
|
-
{ "type": "webhook", "config": { "hmacSecret": "my-secret" } }
|
|
46
|
-
],
|
|
47
|
-
"definition": {
|
|
48
|
-
"nodes": [
|
|
49
|
-
{
|
|
50
|
-
"id": "check-type",
|
|
51
|
-
"type": "property-match",
|
|
52
|
-
"label": "Check Event Type",
|
|
53
|
-
"config": { "property": "event", "match": "pull_request.opened" },
|
|
54
|
-
"next": { "match": "create-review", "no_match": null }
|
|
55
|
-
},
|
|
56
|
-
{
|
|
57
|
-
"id": "create-review",
|
|
58
|
-
"type": "agent-task",
|
|
59
|
-
"label": "Create Review Task",
|
|
60
|
-
"config": {
|
|
61
|
-
"taskTemplate": "Review PR #{{input.number}}: {{input.title}}",
|
|
62
|
-
"tags": ["review", "automated"],
|
|
63
|
-
"priority": 60
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
]
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
```
|
|
70
|
-
|
|
71
|
-
### Triggers
|
|
72
|
-
|
|
73
|
-
| Type | Description |
|
|
74
|
-
|------|-------------|
|
|
75
|
-
| `webhook` | HTTP POST to `/api/workflows/:id/trigger` with optional HMAC-SHA256 verification |
|
|
76
|
-
| `schedule` | References a schedule by ID — the schedule creates workflow runs at configured times |
|
|
77
|
-
| `manual` | Triggered via the `trigger-workflow` MCP tool or dashboard UI |
|
|
78
|
-
|
|
79
|
-
### Cooldown
|
|
80
|
-
|
|
81
|
-
Workflows support a cooldown period to prevent rapid re-triggering:
|
|
82
|
-
|
|
83
|
-
```json
|
|
84
|
-
{
|
|
85
|
-
"cooldown": { "hours": 0, "minutes": 5, "seconds": 0 }
|
|
86
|
-
}
|
|
87
|
-
```
|
|
88
|
-
|
|
89
|
-
A second trigger within the cooldown window results in a run with `skipped` status.
|
|
90
|
-
|
|
91
|
-
## Execution Model
|
|
92
|
-
|
|
93
|
-
When a workflow triggers:
|
|
94
|
-
|
|
95
|
-
1. The trigger source (webhook, schedule, or manual) creates a new **workflow run**
|
|
96
|
-
2. The engine's `walkGraph()` finds ready nodes and executes them in parallel
|
|
97
|
-
3. Each node's executor runs and produces output that determines port-based routing via `next`
|
|
98
|
-
4. **Checkpoint durability** — after every step, an atomic DB write saves the step result and execution context
|
|
99
|
-
5. On crash or restart, execution resumes from the last checkpoint
|
|
100
|
-
|
|
101
|
-
### Per-Step Retry
|
|
102
|
-
|
|
103
|
-
Each node can define a `retryPolicy`:
|
|
104
|
-
|
|
105
|
-
```json
|
|
106
|
-
{
|
|
107
|
-
"retryPolicy": {
|
|
108
|
-
"maxRetries": 3,
|
|
109
|
-
"backoff": "exponential",
|
|
110
|
-
"initialDelayMs": 1000
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
```
|
|
114
|
-
|
|
115
|
-
Backoff strategies: `exponential`, `linear`, `static`. The poller detects failed steps and re-executes them according to the policy.
|
|
116
|
-
|
|
117
|
-
### Per-Step Validation
|
|
118
|
-
|
|
119
|
-
The `validate` executor runs after a step to check output quality. It can:
|
|
120
|
-
- **Pass** — continue to the next step
|
|
121
|
-
- **Halt** — stop the workflow run
|
|
122
|
-
- **Retry** — re-execute the previous step
|
|
123
|
-
|
|
124
|
-
### Cross-Node Data Access (`inputs` Mapping)
|
|
125
|
-
|
|
126
|
-
By default, upstream step outputs are **not** available for interpolation. Only `trigger` (trigger data) and `input` (workflow-level resolved inputs) are in scope. To access another node's output, declare an `inputs` mapping on the node:
|
|
127
|
-
|
|
128
|
-
```json
|
|
129
|
-
{
|
|
130
|
-
"id": "summarize",
|
|
131
|
-
"type": "agent-task",
|
|
132
|
-
"inputs": { "cityData": "generate-city" },
|
|
133
|
-
"config": {
|
|
134
|
-
"template": "The city is {{cityData.taskOutput.city}} in {{cityData.taskOutput.country}}"
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
```
|
|
138
|
-
|
|
139
|
-
- Keys are local names used in `{{interpolation}}`, values are context paths (usually a node ID)
|
|
140
|
-
- Agent-task output shape is `{ taskId, taskOutput }` — access fields via `localName.taskOutput.field`
|
|
141
|
-
- For trigger data: `{ "pr": "trigger.pullRequest" }` → `{{pr.number}}`
|
|
142
|
-
- Without `inputs`, templates referencing upstream nodes silently resolve to empty strings
|
|
143
|
-
|
|
144
|
-
### Structured Output (`outputSchema`)
|
|
145
|
-
|
|
146
|
-
Agent-task nodes can require structured JSON output from the agent via `config.outputSchema`:
|
|
147
|
-
|
|
148
|
-
```json
|
|
149
|
-
{
|
|
150
|
-
"id": "generate-city",
|
|
151
|
-
"type": "agent-task",
|
|
152
|
-
"config": {
|
|
153
|
-
"template": "Pick a random city and return it as JSON",
|
|
154
|
-
"outputSchema": {
|
|
155
|
-
"type": "object",
|
|
156
|
-
"required": ["city", "country"],
|
|
157
|
-
"properties": {
|
|
158
|
-
"city": { "type": "string" },
|
|
159
|
-
"country": { "type": "string" }
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
```
|
|
165
|
-
|
|
166
|
-
There are **two different `outputSchema` locations** — they validate at different layers:
|
|
167
|
-
|
|
168
|
-
| Location | Validates |
|
|
169
|
-
|----------|-----------|
|
|
170
|
-
| `config.outputSchema` (inside config) | The **agent's raw JSON** response |
|
|
171
|
-
| Node-level `outputSchema` (sibling of config) | The **executor's return** envelope (rarely needed) |
|
|
172
|
-
|
|
173
|
-
For agent-task nodes, put your schema in `config.outputSchema`. The agent is prompted to produce JSON matching this schema, and `store-progress` validates it inline.
|
|
174
|
-
|
|
175
|
-
### Workspace Scoping
|
|
176
|
-
|
|
177
|
-
Agent-task nodes support workspace scoping via `config.vcsRepo`. When set, the agent is started in a workspace pre-configured with the specified git repository.
|
|
178
|
-
|
|
179
|
-
### Version History
|
|
180
|
-
|
|
181
|
-
Every workflow update creates a snapshot in the version history table, recording the previous definition. This provides an audit trail and enables rollback.
|
|
182
|
-
|
|
183
|
-
## MCP Tools
|
|
184
|
-
|
|
185
|
-
| Tool | Description |
|
|
186
|
-
|------|-------------|
|
|
187
|
-
| `create-workflow` | Create a new workflow with a DAG definition |
|
|
188
|
-
| `get-workflow` | Get workflow details by ID |
|
|
189
|
-
| `list-workflows` | List all workflows (optionally filter by enabled status) |
|
|
190
|
-
| `update-workflow` | Update a workflow's definition, name, or enabled status |
|
|
191
|
-
| `delete-workflow` | Delete a workflow and its run history |
|
|
192
|
-
| `trigger-workflow` | Manually trigger a workflow execution |
|
|
193
|
-
| `get-workflow-run` | Get details of a specific workflow run |
|
|
194
|
-
| `list-workflow-runs` | List runs for a workflow |
|
|
195
|
-
| `retry-workflow-run` | Retry a failed workflow run |
|
|
196
|
-
|
|
197
|
-
## Dashboard UI
|
|
198
|
-
|
|
199
|
-
The dashboard includes a **Workflows** section (under Operations) with:
|
|
200
|
-
|
|
201
|
-
- **Workflows list** — View all workflows with enable/disable status
|
|
202
|
-
- **Workflow detail** — Tabbed view with Definition (node inspector showing config/input/output schemas) and Runs tabs
|
|
203
|
-
- **Run detail** — Split layout with interactive graph and collapsible steps panel, JsonTree viewer, bidirectional node selection, expand/collapse all, millisecond duration display
|
|
204
|
-
|
|
205
|
-
## Related
|
|
206
|
-
|
|
207
|
-
- [Scheduled Tasks](/docs/concepts/scheduling) — Time-based task automation (complementary to event-driven workflows)
|
|
208
|
-
- [Task Lifecycle](/docs/concepts/task-lifecycle) — How tasks created by workflows flow through the system
|
|
209
|
-
- [MCP Tools Reference](/docs/reference/mcp-tools) — Full tool documentation
|
|
@@ -1,158 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Contributing
|
|
3
|
-
description: How to contribute to Agent Swarm — development setup, coding standards, PR workflow, and project architecture
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Contributing
|
|
7
|
-
|
|
8
|
-
Agent Swarm is open source and welcomes contributions from the community. Whether you're fixing a bug, adding a feature, creating a template, or improving documentation — we appreciate your help.
|
|
9
|
-
|
|
10
|
-
## Getting Started
|
|
11
|
-
|
|
12
|
-
If you're new to the project, start with the [Getting Started guide](/docs/getting-started) for an overview of the setup and architecture. The [Architecture Overview](/docs/architecture/overview) explains how the components fit together.
|
|
13
|
-
|
|
14
|
-
1. **Fork the repository** — [desplega-ai/agent-swarm](https://github.com/desplega-ai/agent-swarm)
|
|
15
|
-
2. **Clone your fork** and create a branch:
|
|
16
|
-
```bash
|
|
17
|
-
git clone https://github.com/<your-username>/agent-swarm.git
|
|
18
|
-
cd agent-swarm
|
|
19
|
-
git checkout -b my-feature
|
|
20
|
-
```
|
|
21
|
-
3. **Install dependencies**:
|
|
22
|
-
```bash
|
|
23
|
-
bun install
|
|
24
|
-
```
|
|
25
|
-
|
|
26
|
-
## Code Contributions
|
|
27
|
-
|
|
28
|
-
### Development Workflow
|
|
29
|
-
|
|
30
|
-
```bash
|
|
31
|
-
# Start the API server in dev mode
|
|
32
|
-
bun run dev:http
|
|
33
|
-
|
|
34
|
-
# Run a worker locally
|
|
35
|
-
bun run worker
|
|
36
|
-
|
|
37
|
-
# Lint and format
|
|
38
|
-
bun run lint:fix
|
|
39
|
-
bun run format
|
|
40
|
-
|
|
41
|
-
# Type-check
|
|
42
|
-
bun run tsc:check
|
|
43
|
-
```
|
|
44
|
-
|
|
45
|
-
### Pull Request Guidelines
|
|
46
|
-
|
|
47
|
-
- **One concern per PR** — keep changes focused and reviewable
|
|
48
|
-
- **Write clear commit messages** — describe _why_, not just _what_
|
|
49
|
-
- **Follow existing patterns** — match the codebase's style and conventions
|
|
50
|
-
- **Test your changes** — run `bun run lint` and `bun run tsc:check` before submitting
|
|
51
|
-
- **Keep PRs small** — large PRs are harder to review. Break big features into smaller incremental PRs when possible
|
|
52
|
-
|
|
53
|
-
### Code Style
|
|
54
|
-
|
|
55
|
-
- TypeScript throughout, strict mode
|
|
56
|
-
- Use `bun` as the package manager and runtime
|
|
57
|
-
- Prefer explicit types over `any`
|
|
58
|
-
- Follow the existing project structure (commands in `src/commands/`, tools in `src/tools/`, hooks in `src/hooks/`)
|
|
59
|
-
|
|
60
|
-
## Contributing Templates
|
|
61
|
-
|
|
62
|
-
Templates are a great way to contribute — they let other teams bootstrap specialized agents quickly.
|
|
63
|
-
|
|
64
|
-
### Creating a Template
|
|
65
|
-
|
|
66
|
-
1. Create a directory under `templates/community/<your-template-name>/`
|
|
67
|
-
2. Add the required files:
|
|
68
|
-
|
|
69
|
-
```
|
|
70
|
-
templates/community/your-template/
|
|
71
|
-
├── config.json # Template metadata and agent defaults
|
|
72
|
-
├── SOUL.md # Agent persona and values
|
|
73
|
-
├── IDENTITY.md # Expertise, working style
|
|
74
|
-
├── CLAUDE.md # Instructions and notes
|
|
75
|
-
├── TOOLS.md # Environment-specific knowledge
|
|
76
|
-
└── start-up.sh # Setup script (runs on container start)
|
|
77
|
-
```
|
|
78
|
-
|
|
79
|
-
3. Define your `config.json`:
|
|
80
|
-
|
|
81
|
-
```json
|
|
82
|
-
{
|
|
83
|
-
"name": "your-template",
|
|
84
|
-
"displayName": "Your Template",
|
|
85
|
-
"description": "A short description of what this agent specializes in",
|
|
86
|
-
"version": "1.0.0",
|
|
87
|
-
"category": "community",
|
|
88
|
-
"icon": "bot",
|
|
89
|
-
"author": "Your Name <you@example.com>",
|
|
90
|
-
"agentDefaults": {
|
|
91
|
-
"role": "worker",
|
|
92
|
-
"capabilities": ["your", "capabilities"],
|
|
93
|
-
"maxTasks": 3
|
|
94
|
-
},
|
|
95
|
-
"files": {
|
|
96
|
-
"claudeMd": "CLAUDE.md",
|
|
97
|
-
"soulMd": "SOUL.md",
|
|
98
|
-
"identityMd": "IDENTITY.md",
|
|
99
|
-
"toolsMd": "TOOLS.md",
|
|
100
|
-
"setupScript": "start-up.sh"
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
```
|
|
104
|
-
|
|
105
|
-
4. Use `{{agent.name}}`, `{{agent.role}}`, and `{{agent.capabilities}}` placeholders in your identity files — they get interpolated at agent startup.
|
|
106
|
-
|
|
107
|
-
5. Submit a PR. Community templates are reviewed for quality and safety before merging.
|
|
108
|
-
|
|
109
|
-
### Template Guidelines
|
|
110
|
-
|
|
111
|
-
- **Clear purpose** — the template should serve a specific, well-defined role
|
|
112
|
-
- **Good defaults** — capabilities, max tasks, and identity files should make sense out of the box
|
|
113
|
-
- **Documentation** — include a brief description and any setup notes in the template's `CLAUDE.md`
|
|
114
|
-
- **No secrets** — never include API keys, tokens, or credentials in template files
|
|
115
|
-
|
|
116
|
-
Browse existing templates at [templates.agent-swarm.dev](https://templates.agent-swarm.dev) for inspiration.
|
|
117
|
-
|
|
118
|
-
## Documentation
|
|
119
|
-
|
|
120
|
-
The docs site lives in `docs-site/` and uses [Fumadocs](https://fumadocs.dev) with MDX content.
|
|
121
|
-
|
|
122
|
-
### Editing Docs
|
|
123
|
-
|
|
124
|
-
1. Content files are in `docs-site/content/docs/`
|
|
125
|
-
2. Add new pages as `.mdx` files in the appropriate directory
|
|
126
|
-
3. Register new pages in the section's `meta.json`
|
|
127
|
-
4. Build and verify:
|
|
128
|
-
```bash
|
|
129
|
-
cd docs-site
|
|
130
|
-
pnpm install
|
|
131
|
-
pnpm build
|
|
132
|
-
```
|
|
133
|
-
|
|
134
|
-
### Landing Page
|
|
135
|
-
|
|
136
|
-
The landing page lives in `landing/` and is built with Next.js, Tailwind CSS, and Framer Motion.
|
|
137
|
-
|
|
138
|
-
## Reporting Issues
|
|
139
|
-
|
|
140
|
-
- Use [GitHub Issues](https://github.com/desplega-ai/agent-swarm/issues) for bugs and feature requests
|
|
141
|
-
- Include reproduction steps, expected vs. actual behavior, and relevant logs
|
|
142
|
-
- Check existing issues before opening a new one
|
|
143
|
-
|
|
144
|
-
## Community
|
|
145
|
-
|
|
146
|
-
- [Discord](https://discord.gg/KZgfyyDVZa) — chat, ask questions, share your swarm setups
|
|
147
|
-
- [GitHub Discussions](https://github.com/desplega-ai/agent-swarm/discussions) — longer-form conversations
|
|
148
|
-
|
|
149
|
-
## Useful References
|
|
150
|
-
|
|
151
|
-
- [CLI Reference](/docs/reference/cli) — command details for managing agents, tasks, and configuration
|
|
152
|
-
- [MCP Tools Reference](/docs/reference/mcp-tools) — all tools available to agents in the swarm
|
|
153
|
-
- [Environment Variables](/docs/reference/environment-variables) — configuration options
|
|
154
|
-
- [Deployment Guide](/docs/guides/deployment) — production deployment with Docker Compose
|
|
155
|
-
|
|
156
|
-
## License
|
|
157
|
-
|
|
158
|
-
Agent Swarm is released under the [MIT License](https://github.com/desplega-ai/agent-swarm/blob/main/LICENSE). By contributing, you agree that your contributions will be licensed under the same terms.
|
|
@@ -1,157 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Getting Started
|
|
3
|
-
description: Install Agent Swarm, configure your first lead and worker agents, and run your first multi-agent task in minutes
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Getting Started
|
|
7
|
-
|
|
8
|
-
This guide walks you through setting up a fully operational Agent Swarm with a lead agent and workers.
|
|
9
|
-
|
|
10
|
-
> Agent Swarm currently supports **Claude Code** as the AI coding assistant. Support for other agents is coming soon.
|
|
11
|
-
|
|
12
|
-
## Prerequisites
|
|
13
|
-
|
|
14
|
-
- [Docker](https://docker.com) and Docker Compose
|
|
15
|
-
- [Claude Code](https://docs.anthropic.com/en/docs/claude-code) installed, with an OAuth token (`claude setup-token`)
|
|
16
|
-
|
|
17
|
-
## Using Templates
|
|
18
|
-
|
|
19
|
-
Agent Swarm ships with **official templates** that give your agents pre-configured identities, skills, and setup scripts. Instead of starting from scratch, pick a template that matches the role you need.
|
|
20
|
-
|
|
21
|
-
| Template | Role | Best for |
|
|
22
|
-
|----------|------|----------|
|
|
23
|
-
| **Lead** | `lead` | Orchestrating workers, decomposing tasks, managing epics |
|
|
24
|
-
| **Coder** | `worker` | Implementation, PRs, code reviews |
|
|
25
|
-
| **Researcher** | `worker` | Web research, analysis, documentation |
|
|
26
|
-
| **Reviewer** | `worker` | Code review, quality assurance |
|
|
27
|
-
| **Tester** | `worker` | Testing, validation, CI/CD |
|
|
28
|
-
| **Forward Deployed Engineer** | `worker` | Client-facing work, rapid prototyping |
|
|
29
|
-
|
|
30
|
-
To use a template, set the `TEMPLATE_ID` environment variable when starting an agent:
|
|
31
|
-
|
|
32
|
-
```bash
|
|
33
|
-
# Use the coder template for a worker
|
|
34
|
-
TEMPLATE_ID=official/coder docker compose up worker-1 -d
|
|
35
|
-
|
|
36
|
-
# Use the lead template
|
|
37
|
-
TEMPLATE_ID=official/lead docker compose up lead -d
|
|
38
|
-
```
|
|
39
|
-
|
|
40
|
-
Templates are fetched from the [Templates Registry](https://templates.agent-swarm.dev) and cached locally for 24 hours. You can also [create your own templates](/docs/contributing#contributing-templates) and contribute them to the community.
|
|
41
|
-
|
|
42
|
-
Browse all available templates at [templates.agent-swarm.dev](https://templates.agent-swarm.dev).
|
|
43
|
-
|
|
44
|
-
## Option A: Onboard Wizard (Recommended)
|
|
45
|
-
|
|
46
|
-
The fastest way to get a full swarm running. The interactive wizard collects credentials, generates `docker-compose.yml` + `.env`, starts the stack, and verifies health.
|
|
47
|
-
|
|
48
|
-
```bash
|
|
49
|
-
bunx @desplega.ai/agent-swarm onboard
|
|
50
|
-
```
|
|
51
|
-
|
|
52
|
-
Or in non-interactive mode with a preset:
|
|
53
|
-
|
|
54
|
-
```bash
|
|
55
|
-
ANTHROPIC_API_KEY=sk-... bunx @desplega.ai/agent-swarm onboard --yes --preset=dev
|
|
56
|
-
```
|
|
57
|
-
|
|
58
|
-
Available presets: `dev`, `content`, `research`, `solo`. Use `--dry-run` to preview without writing files.
|
|
59
|
-
|
|
60
|
-
## Option B: Manual Docker Compose
|
|
61
|
-
|
|
62
|
-
Set up manually with Docker Compose for full control.
|
|
63
|
-
|
|
64
|
-
```bash
|
|
65
|
-
git clone https://github.com/desplega-ai/agent-swarm.git
|
|
66
|
-
cd agent-swarm
|
|
67
|
-
|
|
68
|
-
# Configure environment
|
|
69
|
-
cp .env.docker.example .env
|
|
70
|
-
# Edit .env — set API_KEY and CLAUDE_CODE_OAUTH_TOKEN at minimum
|
|
71
|
-
# Optionally set TEMPLATE_ID=official/coder for workers, TEMPLATE_ID=official/lead for leads
|
|
72
|
-
|
|
73
|
-
# Start everything
|
|
74
|
-
docker compose -f docker-compose.example.yml --env-file .env up -d
|
|
75
|
-
```
|
|
76
|
-
|
|
77
|
-
The API runs on port `3013`. The dashboard is available separately (see the [Dashboard UI](/docs/reference/cli) section).
|
|
78
|
-
|
|
79
|
-
## Option C: Local API + Docker Workers
|
|
80
|
-
|
|
81
|
-
Run the API locally and connect Docker workers to it.
|
|
82
|
-
|
|
83
|
-
```bash
|
|
84
|
-
git clone https://github.com/desplega-ai/agent-swarm.git
|
|
85
|
-
cd agent-swarm
|
|
86
|
-
bun install
|
|
87
|
-
|
|
88
|
-
# 1. Configure and start the API server
|
|
89
|
-
cp .env.example .env
|
|
90
|
-
# Edit .env — set API_KEY
|
|
91
|
-
bun run start:http
|
|
92
|
-
```
|
|
93
|
-
|
|
94
|
-
In a new terminal, start a worker:
|
|
95
|
-
|
|
96
|
-
```bash
|
|
97
|
-
# 2. Configure and run a Docker worker
|
|
98
|
-
cp .env.docker.example .env.docker
|
|
99
|
-
# Edit .env.docker — set API_KEY (same as above) and CLAUDE_CODE_OAUTH_TOKEN
|
|
100
|
-
bun run docker:build:worker
|
|
101
|
-
mkdir -p ./logs ./work/shared ./work/worker-1
|
|
102
|
-
bun run docker:run:worker
|
|
103
|
-
```
|
|
104
|
-
|
|
105
|
-
## Option D: Claude Code as Lead Agent
|
|
106
|
-
|
|
107
|
-
Use Claude Code directly as the lead agent — no Docker required for the lead.
|
|
108
|
-
|
|
109
|
-
```bash
|
|
110
|
-
# After starting the API server (Option C, step 1):
|
|
111
|
-
bunx @desplega.ai/agent-swarm connect
|
|
112
|
-
```
|
|
113
|
-
|
|
114
|
-
This configures Claude Code to connect to the swarm. Start Claude Code and tell it:
|
|
115
|
-
|
|
116
|
-
```
|
|
117
|
-
Register yourself as the lead agent in the agent-swarm.
|
|
118
|
-
```
|
|
119
|
-
|
|
120
|
-
## Verifying Your Setup
|
|
121
|
-
|
|
122
|
-
Once your swarm is running, you can verify it's working:
|
|
123
|
-
|
|
124
|
-
1. **Check the API** — Visit `http://localhost:3013/health`
|
|
125
|
-
2. **Check agents** — Use the dashboard or API to see registered agents
|
|
126
|
-
3. **Send a test task** — Message the lead agent via Slack or the API
|
|
127
|
-
|
|
128
|
-
## Configuration
|
|
129
|
-
|
|
130
|
-
### Required Environment Variables
|
|
131
|
-
|
|
132
|
-
| Variable | Description |
|
|
133
|
-
|----------|-------------|
|
|
134
|
-
| `API_KEY` | Secret key for API authentication |
|
|
135
|
-
| `CLAUDE_CODE_OAUTH_TOKEN` | OAuth token for Claude CLI |
|
|
136
|
-
|
|
137
|
-
### Optional Variables
|
|
138
|
-
|
|
139
|
-
| Variable | Default | Description |
|
|
140
|
-
|----------|---------|-------------|
|
|
141
|
-
| `PORT` | `3013` | API server port |
|
|
142
|
-
| `AGENT_ID` | Auto-generated | Stable UUID for task resume |
|
|
143
|
-
| `AGENT_NAME` | Auto-generated | Display name for the agent |
|
|
144
|
-
| `AGENT_ROLE` | `worker` | Role: `worker` or `lead` |
|
|
145
|
-
| `MCP_BASE_URL` | `http://host.docker.internal:3013` | MCP server URL |
|
|
146
|
-
|
|
147
|
-
For the complete list, see [Environment Variables](/docs/reference/environment-variables).
|
|
148
|
-
|
|
149
|
-
## Next Steps
|
|
150
|
-
|
|
151
|
-
- [Browse Templates](https://templates.agent-swarm.dev) — Explore and preview agent templates
|
|
152
|
-
- [Architecture Overview](/docs/architecture/overview) — Understand the system design
|
|
153
|
-
- [Task Lifecycle](/docs/concepts/task-lifecycle) — Learn how tasks flow through the swarm
|
|
154
|
-
- [Deployment Guide](/docs/guides/deployment) — Production deployment options
|
|
155
|
-
- [AgentMail Integration](/docs/guides/agentmail-integration) — Give agents their own email inboxes
|
|
156
|
-
- [Linear Integration](/docs/guides/linear-integration) — Bidirectional ticket tracking with Linear
|
|
157
|
-
- [Contributing](/docs/contributing) — Learn how to contribute code, templates, and docs
|