@desplega.ai/agent-swarm 1.20.0 → 1.49.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/settings.json +84 -0
- package/.claude/settings.local.json +3 -1
- package/.entire/settings.json +4 -0
- package/.env.docker.example +40 -23
- package/.env.example +39 -1
- package/.github/ISSUE_TEMPLATE/bug_report.yml +78 -0
- package/.github/ISSUE_TEMPLATE/community-template.yml +77 -0
- package/.github/ISSUE_TEMPLATE/config.yml +8 -0
- package/.github/ISSUE_TEMPLATE/feature_request.yml +60 -0
- package/.github/PULL_REQUEST_TEMPLATE/community-template.md +29 -0
- package/.github/workflows/ci.yml +3 -27
- package/.github/workflows/docker-and-deploy.yml +20 -5
- package/.github/workflows/merge-gate.yml +233 -0
- package/.opencode/plugins/entire.ts +133 -0
- package/.superset/config.json +6 -0
- package/.wts-setup.ts +103 -34
- package/CHANGELOG.md +447 -0
- package/CLAUDE.md +422 -5
- package/CONTRIBUTING.md +46 -1
- package/DEPLOYMENT.md +26 -9
- package/Dockerfile +15 -7
- package/Dockerfile.worker +99 -67
- package/MCP.md +452 -17
- package/README.md +271 -169
- package/api-entrypoint.sh +56 -0
- package/depot.json +1 -0
- package/docker-compose.example.yml +194 -3
- package/docker-compose.local.yml +119 -0
- package/docker-entrypoint.sh +393 -113
- package/docs-site/app/api/search/route.ts +4 -0
- package/docs-site/app/docs/[[...slug]]/page.tsx +87 -0
- package/docs-site/app/docs/layout.tsx +12 -0
- package/docs-site/app/globals.css +24 -0
- package/docs-site/app/layout.config.tsx +34 -0
- package/docs-site/app/layout.tsx +119 -0
- package/docs-site/app/llms-full.txt/route.ts +11 -0
- package/docs-site/app/llms.mdx/docs/[[...slug]]/route.ts +24 -0
- package/docs-site/app/llms.txt/route.ts +8 -0
- package/docs-site/app/page.tsx +5 -0
- package/docs-site/app/robots.ts +13 -0
- package/docs-site/app/sitemap.ts +37 -0
- package/docs-site/components/api-page.client.tsx +4 -0
- package/docs-site/components/api-page.tsx +7 -0
- package/docs-site/components/mdx/mermaid.tsx +55 -0
- package/docs-site/content/docs/(documentation)/architecture/agents.mdx +117 -0
- package/docs-site/content/docs/(documentation)/architecture/hooks.mdx +77 -0
- package/docs-site/content/docs/(documentation)/architecture/memory.mdx +96 -0
- package/docs-site/content/docs/(documentation)/architecture/meta.json +4 -0
- package/docs-site/content/docs/(documentation)/architecture/overview.mdx +172 -0
- package/docs-site/content/docs/(documentation)/concepts/epics.mdx +98 -0
- package/docs-site/content/docs/(documentation)/concepts/meta.json +4 -0
- package/docs-site/content/docs/(documentation)/concepts/scheduling.mdx +136 -0
- package/docs-site/content/docs/(documentation)/concepts/services.mdx +104 -0
- package/docs-site/content/docs/(documentation)/concepts/task-lifecycle.mdx +148 -0
- package/docs-site/content/docs/(documentation)/concepts/workflows.mdx +209 -0
- package/docs-site/content/docs/(documentation)/contributing.mdx +158 -0
- package/docs-site/content/docs/(documentation)/getting-started.mdx +157 -0
- package/docs-site/content/docs/(documentation)/guides/agentmail-integration.mdx +79 -0
- package/docs-site/content/docs/(documentation)/guides/deployment.mdx +171 -0
- package/docs-site/content/docs/(documentation)/guides/github-integration.mdx +81 -0
- package/docs-site/content/docs/(documentation)/guides/gitlab-integration.mdx +93 -0
- package/docs-site/content/docs/(documentation)/guides/linear-integration.mdx +98 -0
- package/docs-site/content/docs/(documentation)/guides/meta.json +13 -0
- package/docs-site/content/docs/(documentation)/guides/sentry-integration.mdx +52 -0
- package/docs-site/content/docs/(documentation)/guides/slack-integration.mdx +179 -0
- package/docs-site/content/docs/(documentation)/guides/x402-payments.mdx +154 -0
- package/docs-site/content/docs/(documentation)/index.mdx +65 -0
- package/docs-site/content/docs/(documentation)/meta.json +19 -0
- package/docs-site/content/docs/(documentation)/reference/cli.mdx +241 -0
- package/docs-site/content/docs/(documentation)/reference/environment-variables.mdx +205 -0
- package/docs-site/content/docs/(documentation)/reference/mcp-tools.mdx +449 -0
- package/docs-site/content/docs/(documentation)/reference/meta.json +4 -0
- package/docs-site/content/docs/api-reference/active-sessions.mdx +9 -0
- package/docs-site/content/docs/api-reference/agents.mdx +9 -0
- package/docs-site/content/docs/api-reference/channels.mdx +9 -0
- package/docs-site/content/docs/api-reference/config.mdx +9 -0
- package/docs-site/content/docs/api-reference/debug.mdx +9 -0
- package/docs-site/content/docs/api-reference/ecosystem.mdx +9 -0
- package/docs-site/content/docs/api-reference/epics.mdx +9 -0
- package/docs-site/content/docs/api-reference/index.mdx +32 -0
- package/docs-site/content/docs/api-reference/memory.mdx +9 -0
- package/docs-site/content/docs/api-reference/meta.json +25 -0
- package/docs-site/content/docs/api-reference/poll.mdx +9 -0
- package/docs-site/content/docs/api-reference/repos.mdx +9 -0
- package/docs-site/content/docs/api-reference/schedules.mdx +9 -0
- package/docs-site/content/docs/api-reference/session-data.mdx +9 -0
- package/docs-site/content/docs/api-reference/stats.mdx +9 -0
- package/docs-site/content/docs/api-reference/tasks.mdx +9 -0
- package/docs-site/content/docs/api-reference/trackers.mdx +9 -0
- package/docs-site/content/docs/api-reference/webhooks.mdx +9 -0
- package/docs-site/content/docs/api-reference/workflows.mdx +9 -0
- package/docs-site/content/docs/meta.json +3 -0
- package/docs-site/lib/get-llm-text.ts +10 -0
- package/docs-site/lib/openapi.ts +23 -0
- package/docs-site/lib/source.ts +8 -0
- package/docs-site/mdx-components.tsx +13 -0
- package/docs-site/next.config.mjs +29 -0
- package/docs-site/package.json +35 -0
- package/docs-site/pnpm-lock.yaml +5407 -0
- package/docs-site/postcss.config.mjs +8 -0
- package/docs-site/scripts/generate-docs.ts +171 -0
- package/docs-site/source.config.ts +17 -0
- package/docs-site/tsconfig.json +46 -0
- package/ecosystem.config.cjs +4 -4
- package/landing/next.config.ts +14 -0
- package/landing/package.json +31 -0
- package/landing/pnpm-lock.yaml +1091 -0
- package/landing/postcss.config.mjs +8 -0
- 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 +30 -0
- package/landing/public/omghost-openfort.svg +9 -0
- package/landing/src/app/actions/waitlist.ts +25 -0
- package/landing/src/app/blog/openfort-hackathon/page.tsx +863 -0
- package/landing/src/app/blog/page.tsx +162 -0
- package/landing/src/app/blog/swarm-metrics/page.tsx +685 -0
- package/landing/src/app/examples/page.tsx +174 -0
- package/landing/src/app/examples/x402/page.tsx +456 -0
- package/landing/src/app/globals.css +122 -0
- package/landing/src/app/layout.tsx +134 -0
- package/landing/src/app/page.tsx +27 -0
- package/landing/src/app/robots.ts +13 -0
- package/landing/src/app/sitemap.ts +44 -0
- package/landing/src/components/architecture.tsx +163 -0
- package/landing/src/components/cta.tsx +52 -0
- package/landing/src/components/features.tsx +160 -0
- package/landing/src/components/footer.tsx +100 -0
- package/landing/src/components/hero.tsx +217 -0
- package/landing/src/components/how-it-works.tsx +165 -0
- package/landing/src/components/navbar.tsx +147 -0
- package/landing/src/components/waitlist.tsx +110 -0
- package/landing/src/components/why-choose.tsx +149 -0
- package/landing/src/components/workshops.tsx +328 -0
- package/landing/src/lib/utils.ts +6 -0
- package/landing/tsconfig.json +41 -0
- package/misc/transcripts/2026-03-09-pi-mono-e2e-verification.md +154 -0
- package/new-ui/CLAUDE.md +92 -0
- package/new-ui/README.md +73 -0
- package/new-ui/biome.json +42 -0
- package/new-ui/components.json +21 -0
- package/new-ui/index.html +25 -0
- package/new-ui/package.json +49 -0
- package/new-ui/pnpm-lock.yaml +4845 -0
- package/new-ui/public/logo.png +0 -0
- package/new-ui/src/api/client.ts +814 -0
- package/new-ui/src/api/hooks/index.ts +64 -0
- package/new-ui/src/api/hooks/use-agents.ts +58 -0
- package/new-ui/src/api/hooks/use-channels.ts +115 -0
- package/new-ui/src/api/hooks/use-config-api.ts +46 -0
- package/new-ui/src/api/hooks/use-costs.ts +122 -0
- package/new-ui/src/api/hooks/use-db-query.ts +29 -0
- package/new-ui/src/api/hooks/use-epics.ts +75 -0
- package/new-ui/src/api/hooks/use-repos.ts +61 -0
- package/new-ui/src/api/hooks/use-schedules.ts +81 -0
- package/new-ui/src/api/hooks/use-services.ts +16 -0
- package/new-ui/src/api/hooks/use-stats.ts +27 -0
- package/new-ui/src/api/hooks/use-tasks.ts +89 -0
- package/new-ui/src/api/hooks/use-workflows.ts +109 -0
- package/{ui/src/types/api.ts → new-ui/src/api/types.ts} +236 -10
- package/new-ui/src/app/App.tsx +13 -0
- package/new-ui/src/app/providers.tsx +32 -0
- package/new-ui/src/app/router.tsx +52 -0
- package/new-ui/src/components/layout/app-header.tsx +47 -0
- package/new-ui/src/components/layout/app-sidebar.tsx +128 -0
- package/new-ui/src/components/layout/breadcrumbs.tsx +57 -0
- package/new-ui/src/components/layout/config-guard.tsx +22 -0
- package/new-ui/src/components/layout/root-layout.tsx +40 -0
- package/new-ui/src/components/layout/swarm-switcher.tsx +85 -0
- package/new-ui/src/components/shared/command-menu.tsx +131 -0
- package/new-ui/src/components/shared/data-grid.tsx +141 -0
- package/new-ui/src/components/shared/empty-state.tsx +24 -0
- package/new-ui/src/components/shared/error-boundary.tsx +72 -0
- package/new-ui/src/components/shared/json-viewer.tsx +47 -0
- package/new-ui/src/components/shared/name-connection-modal.tsx +99 -0
- package/new-ui/src/components/shared/page-skeleton.tsx +16 -0
- package/new-ui/src/components/shared/session-log-viewer.tsx +364 -0
- package/new-ui/src/components/shared/stats-bar.tsx +132 -0
- package/new-ui/src/components/shared/status-badge.tsx +131 -0
- package/new-ui/src/components/shared/usage-summary.tsx +179 -0
- package/new-ui/src/components/ui/alert-dialog.tsx +176 -0
- package/new-ui/src/components/ui/alert.tsx +60 -0
- package/new-ui/src/components/ui/avatar.tsx +96 -0
- package/new-ui/src/components/ui/badge.tsx +46 -0
- package/new-ui/src/components/ui/button.tsx +62 -0
- package/new-ui/src/components/ui/card.tsx +75 -0
- package/new-ui/src/components/ui/command.tsx +160 -0
- package/new-ui/src/components/ui/dialog.tsx +143 -0
- package/new-ui/src/components/ui/dropdown-menu.tsx +226 -0
- package/new-ui/src/components/ui/input.tsx +21 -0
- package/new-ui/src/components/ui/label.tsx +19 -0
- package/new-ui/src/components/ui/progress.tsx +26 -0
- package/new-ui/src/components/ui/scroll-area.tsx +54 -0
- package/new-ui/src/components/ui/select.tsx +175 -0
- package/new-ui/src/components/ui/separator.tsx +28 -0
- package/new-ui/src/components/ui/sheet.tsx +132 -0
- package/new-ui/src/components/ui/sidebar.tsx +691 -0
- package/new-ui/src/components/ui/skeleton.tsx +13 -0
- package/new-ui/src/components/ui/sonner.tsx +35 -0
- package/new-ui/src/components/ui/switch.tsx +33 -0
- package/new-ui/src/components/ui/table.tsx +92 -0
- package/new-ui/src/components/ui/tabs.tsx +79 -0
- package/new-ui/src/components/ui/textarea.tsx +18 -0
- package/new-ui/src/components/ui/tooltip.tsx +51 -0
- package/new-ui/src/components/workflows/action-node.tsx +53 -0
- package/new-ui/src/components/workflows/condition-node.tsx +50 -0
- package/new-ui/src/components/workflows/graph-utils.ts +124 -0
- package/new-ui/src/components/workflows/json-tree.tsx +189 -0
- package/new-ui/src/components/workflows/node-styles.ts +10 -0
- package/new-ui/src/components/workflows/step-detail-sheet.tsx +87 -0
- package/new-ui/src/components/workflows/trigger-node.tsx +41 -0
- package/new-ui/src/components/workflows/workflow-graph.tsx +65 -0
- package/{ui/src/hooks/useAutoScroll.ts → new-ui/src/hooks/use-auto-scroll.ts} +0 -1
- package/new-ui/src/hooks/use-config.ts +203 -0
- package/new-ui/src/hooks/use-keyboard-shortcuts.ts +41 -0
- package/new-ui/src/hooks/use-mobile.ts +19 -0
- package/new-ui/src/hooks/use-theme.ts +60 -0
- package/new-ui/src/lib/config.ts +188 -0
- package/new-ui/src/lib/slugs.ts +71 -0
- package/{ui → new-ui}/src/lib/utils.ts +32 -0
- package/new-ui/src/main.tsx +11 -0
- package/new-ui/src/pages/agents/[id]/page.tsx +492 -0
- package/new-ui/src/pages/agents/page.tsx +134 -0
- package/new-ui/src/pages/chat/page.tsx +674 -0
- package/new-ui/src/pages/config/page.tsx +1109 -0
- package/new-ui/src/pages/dashboard/page.tsx +454 -0
- package/new-ui/src/pages/debug/page.tsx +275 -0
- package/new-ui/src/pages/epics/[id]/page.tsx +809 -0
- package/new-ui/src/pages/epics/page.tsx +321 -0
- package/new-ui/src/pages/not-found/page.tsx +18 -0
- package/new-ui/src/pages/repos/page.tsx +369 -0
- package/new-ui/src/pages/schedules/[id]/page.tsx +664 -0
- package/new-ui/src/pages/schedules/page.tsx +477 -0
- package/new-ui/src/pages/services/page.tsx +128 -0
- package/new-ui/src/pages/tasks/[id]/page.tsx +670 -0
- package/new-ui/src/pages/tasks/page.tsx +592 -0
- package/new-ui/src/pages/usage/page.tsx +195 -0
- package/new-ui/src/pages/workflow-runs/[id]/page.tsx +363 -0
- package/new-ui/src/pages/workflows/[id]/page.tsx +417 -0
- package/new-ui/src/pages/workflows/page.tsx +266 -0
- package/new-ui/src/styles/ag-grid.css +36 -0
- package/new-ui/src/styles/globals.css +213 -0
- package/new-ui/test-results/.last-run.json +4 -0
- package/{ui/tsconfig.json → new-ui/tsconfig.app.json} +7 -4
- package/new-ui/tsconfig.json +4 -0
- package/new-ui/tsconfig.node.json +26 -0
- package/new-ui/vercel.json +4 -0
- package/new-ui/vite.config.ts +28 -0
- package/openapi.json +4436 -0
- package/package.json +31 -7
- package/plugin/build-pi-skills.ts +233 -0
- 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/prek.toml +75 -0
- package/scripts/check-db-boundary.sh +60 -0
- package/scripts/e2e-docker-provider.ts +820 -0
- package/scripts/e2e-io-schemas-test.ts +807 -0
- package/scripts/e2e-provider-test.ts +220 -0
- package/scripts/e2e-workflow-redesign.sh +229 -0
- package/scripts/e2e-workflow-test.sh +285 -0
- package/scripts/e2e-workflow-test.ts +857 -0
- package/scripts/generate-openapi.ts +26 -0
- package/scripts/measure-tool-tokens.ts +118 -0
- package/scripts/x402-e2e-test.ts +195 -0
- package/scripts/x402-test-server.ts +236 -0
- package/scripts/x402-testnet-e2e.ts +668 -0
- package/slack-manifest.json +17 -0
- package/src/agentmail/app.ts +65 -0
- package/src/agentmail/handlers.ts +207 -0
- package/src/agentmail/index.ts +9 -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 +2729 -770
- 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/runner.ts +188 -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 +1376 -559
- package/src/commands/setup.tsx +23 -38
- package/src/commands/shared/client-config.ts +41 -0
- package/src/github/app.ts +8 -0
- package/src/github/handlers.ts +93 -75
- package/src/github/index.ts +1 -0
- package/src/github/types.ts +1 -0
- package/src/gitlab/auth.ts +63 -0
- package/src/gitlab/handlers.ts +327 -0
- package/src/gitlab/index.ts +19 -0
- package/src/gitlab/reactions.ts +104 -0
- package/src/gitlab/types.ts +130 -0
- package/src/heartbeat/heartbeat.ts +425 -0
- package/src/heartbeat/index.ts +1 -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 +172 -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 +213 -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 +178 -0
- package/src/http/repos.ts +195 -0
- package/src/http/route-def.ts +123 -0
- package/src/http/schedules.ts +391 -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 +522 -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 +543 -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 +366 -24
- package/src/prompts/defaults.ts +196 -0
- package/src/providers/claude-adapter.ts +429 -0
- package/src/providers/index.ts +24 -0
- package/src/providers/pi-mono-adapter.ts +442 -0
- package/src/providers/pi-mono-extension.ts +620 -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 +186 -29
- package/src/server.ts +82 -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 +115 -0
- package/src/slack/blocks.ts +233 -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 +212 -52
- package/src/slack/responses.ts +120 -67
- package/src/slack/router.ts +17 -99
- 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/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 +363 -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 +402 -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/progress-dedup.test.ts +98 -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 +540 -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 +311 -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-api.test.ts +143 -3
- 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 +386 -0
- package/src/tests/workflow-convergence.test.ts +541 -0
- package/src/tests/workflow-definition-validation.test.ts +290 -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-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/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/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 +187 -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 +30 -5
- package/src/tools/task-dedup.ts +97 -0
- package/src/tools/tool-config.ts +117 -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 +93 -10
- package/src/tools/update-service-status.ts +2 -0
- package/src/tools/utils.ts +10 -1
- package/src/tools/workflows/create-workflow.ts +111 -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 +118 -0
- package/src/tracker/types.ts +51 -0
- package/src/types.ts +477 -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 +217 -0
- package/src/workflows/engine.ts +554 -0
- package/src/workflows/event-bus.ts +29 -0
- package/src/workflows/executors/agent-task.ts +92 -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 +143 -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 +95 -0
- package/src/workflows/validation.ts +104 -0
- package/src/workflows/version.ts +42 -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/community/.gitkeep +0 -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/templates-ui/README.md +46 -0
- package/templates-ui/components.json +17 -0
- package/templates-ui/eslint.config.mjs +18 -0
- package/templates-ui/next.config.ts +7 -0
- package/templates-ui/package.json +35 -0
- package/templates-ui/pnpm-lock.yaml +4571 -0
- package/templates-ui/postcss.config.mjs +7 -0
- package/templates-ui/public/file.svg +1 -0
- package/templates-ui/public/globe.svg +1 -0
- package/templates-ui/public/logo.png +0 -0
- package/templates-ui/public/next.svg +1 -0
- package/templates-ui/public/vercel.svg +1 -0
- package/templates-ui/public/window.svg +1 -0
- package/templates-ui/src/app/[category]/[name]/page.tsx +89 -0
- package/templates-ui/src/app/api/templates/[...slug]/route.ts +52 -0
- package/templates-ui/src/app/api/templates/route.ts +18 -0
- package/templates-ui/src/app/builder/page.tsx +37 -0
- package/templates-ui/src/app/globals.css +94 -0
- package/templates-ui/src/app/layout.tsx +79 -0
- package/templates-ui/src/app/page.tsx +38 -0
- package/templates-ui/src/app/robots.ts +11 -0
- package/templates-ui/src/app/sitemap.ts +31 -0
- package/templates-ui/src/components/compose-builder.tsx +442 -0
- package/templates-ui/src/components/compose-preview.tsx +117 -0
- package/templates-ui/src/components/file-preview.tsx +77 -0
- package/templates-ui/src/components/footer.tsx +40 -0
- package/templates-ui/src/components/header.tsx +41 -0
- package/templates-ui/src/components/template-card.tsx +87 -0
- package/templates-ui/src/components/template-detail.tsx +125 -0
- package/templates-ui/src/components/template-gallery.tsx +263 -0
- package/templates-ui/src/components/ui/badge.tsx +36 -0
- package/templates-ui/src/components/ui/button.tsx +57 -0
- package/templates-ui/src/components/ui/card.tsx +76 -0
- package/templates-ui/src/components/ui/separator.tsx +31 -0
- package/templates-ui/src/components/ui/tooltip.tsx +32 -0
- package/templates-ui/src/lib/compose-generator.ts +241 -0
- package/templates-ui/src/lib/templates.ts +137 -0
- package/templates-ui/src/lib/utils.ts +6 -0
- package/templates-ui/tsconfig.json +34 -0
- package/thoughts/research/2026-02-28-openfort-viem-x402-research.md +679 -0
- package/thoughts/research/2026-02-28-x402-payments-research.md +686 -0
- package/thoughts/researcher/plans/2026-02-20-agent-self-improvement-plan.md +282 -0
- package/thoughts/researcher/research/2026-02-20-agent-self-improvement.md +492 -0
- package/thoughts/shared/plans/2026-02-26-mcp-tool-context-reduction.md +282 -0
- package/thoughts/shared/plans/2026-03-02-claude-context-mode-integration.md +328 -0
- package/thoughts/shared/plans/2026-03-02-code-level-heartbeat.md +224 -0
- package/thoughts/shared/research/2026-02-26-cliffy-mcp-tools.md +159 -0
- package/thoughts/shared/research/2026-03-03-database-migration-system-refactor.md +337 -0
- package/thoughts/swarm-researcher/plans/2026-02-23-openclaw-improvements-plan.md +778 -0
- package/thoughts/swarm-researcher/plans/2026-02-26-artifacts-localtunnel-plan.md +1269 -0
- package/thoughts/swarm-researcher/research/2026-02-23-openclaw-vs-agent-swarm-comparison.md +411 -0
- package/thoughts/swarm-researcher/research/2026-02-26-artifacts-localtunnel.md +724 -0
- package/thoughts/taras/brainstorms/2026-03-20-prompt-template-registry.md +443 -0
- package/thoughts/taras/brainstorms/2026-03-20-setup-cli-onboarding.md +307 -0
- package/thoughts/taras/plans/2026-02-20-auto-improvement.md +803 -0
- package/thoughts/taras/plans/2026-02-20-env-management.md +538 -0
- package/thoughts/taras/plans/2026-02-20-memory-system.md +882 -0
- package/thoughts/taras/plans/2026-02-20-repos-knowledge.md +806 -0
- package/thoughts/taras/plans/2026-02-20-session-attach.md +647 -0
- package/thoughts/taras/plans/2026-02-20-worker-identity.md +820 -0
- package/thoughts/taras/plans/2026-02-25-feat-new-ui-visual-redesign-plan.md +768 -0
- package/thoughts/taras/plans/2026-03-04-fix-buildSystemPrompt-missing-fields.md +77 -0
- package/thoughts/taras/plans/2026-03-04-new-ui-missing-actions.md +543 -0
- package/thoughts/taras/plans/2026-03-06-one-time-scheduled-tasks.md +373 -0
- package/thoughts/taras/plans/2026-03-08-memory-self-improvement-enhancements.md +512 -0
- package/thoughts/taras/plans/2026-03-08-pi-mono-provider-implementation.md +919 -0
- package/thoughts/taras/plans/2026-03-09-templates-registry.md +723 -0
- package/thoughts/taras/plans/2026-03-10-task-working-directory.md +371 -0
- package/thoughts/taras/plans/2026-03-11-archil-per-agent-write-strategy.md +621 -0
- package/thoughts/taras/plans/2026-03-12-eliminate-inbox-route-to-tasks.md +61 -0
- package/thoughts/taras/plans/2026-03-12-slack-thread-followup-additive.md +488 -0
- package/thoughts/taras/plans/2026-03-13-slack-ai-improvements.md +644 -0
- package/thoughts/taras/plans/2026-03-16-route-wrapper-openapi.md +636 -0
- package/thoughts/taras/plans/2026-03-17-multi-api-config.md +444 -0
- package/thoughts/taras/plans/2026-03-18-agent-fs-integration.md +591 -0
- package/thoughts/taras/plans/2026-03-18-debug-db-explorer.md +446 -0
- package/thoughts/taras/plans/2026-03-18-workflow-redesign.md +987 -0
- package/thoughts/taras/plans/2026-03-19-compound-learnings.md +403 -0
- package/thoughts/taras/plans/2026-03-19-ticket-tracker-linear-integration.md +860 -0
- package/thoughts/taras/plans/2026-03-19-workflow-io-schemas-and-bugs.md +899 -0
- package/thoughts/taras/plans/2026-03-20-setup-cli-onboarding.md +874 -0
- package/thoughts/taras/plans/2026-03-20-workflow-structured-output-validation-workspace.md +723 -0
- package/thoughts/taras/research/2026-02-19-agent-native-swarm-architecture.md +390 -0
- package/thoughts/taras/research/2026-02-19-swarm-gaps-implementation.md +594 -0
- package/thoughts/taras/research/2026-02-25-dashboard-ui-design-best-practices.md +825 -0
- package/thoughts/taras/research/2026-02-26-task-detail-page-redesign.md +393 -0
- package/thoughts/taras/research/2026-03-03-new-ui-missing-actions.md +168 -0
- package/thoughts/taras/research/2026-03-05-pi-mono-provider-research.md +230 -0
- package/thoughts/taras/research/2026-03-06-workflow-engine-design.md +445 -0
- package/thoughts/taras/research/2026-03-08-drive-loop-concept.md +375 -0
- package/thoughts/taras/research/2026-03-08-pi-mono-deep-dive.md +869 -0
- package/thoughts/taras/research/2026-03-09-templates-registry.md +373 -0
- package/thoughts/taras/research/2026-03-10-agent-working-directory.md +223 -0
- package/thoughts/taras/research/2026-03-10-configurable-event-prompts.md +339 -0
- package/thoughts/taras/research/2026-03-11-archil-production-setup.md +181 -0
- package/thoughts/taras/research/2026-03-11-archil-shared-disk-write-strategies.md +437 -0
- package/thoughts/taras/research/2026-03-13-slack-ai-features.md +258 -0
- package/thoughts/taras/research/2026-03-16-openapi-docs-generation.md +335 -0
- package/thoughts/taras/research/2026-03-16-route-wrapper-openapi.md +670 -0
- package/thoughts/taras/research/2026-03-16-slack-thread-followups-e2e.md +54 -0
- package/thoughts/taras/research/2026-03-18-agent-fs-integration.md +558 -0
- package/thoughts/taras/research/2026-03-18-linear-integration-finalization.md +526 -0
- package/thoughts/taras/research/2026-03-18-workflow-redesign.md +797 -0
- package/thoughts/taras/research/2026-03-19-workflow-node-io-schemas-and-bugs.md +563 -0
- package/thoughts/taras/research/2026-03-19-workflow-structured-output-validation-workspace.md +486 -0
- package/thoughts/taras/research/2026-03-20-prompt-template-registry.md +469 -0
- package/tsconfig.json +1 -1
- package/FAQ.md +0 -19
- 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/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/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/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/main.tsx +0 -28
- package/ui/src/vite-env.d.ts +0 -1
- package/ui/tailwind.config.js +0 -37
- package/ui/vite.config.ts +0 -35
- /package/{ui → docs-site}/public/logo.png +0 -0
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
---
|
|
2
|
+
date: 2026-03-02T22:55:00Z
|
|
3
|
+
topic: "Code-Level Heartbeat for Swarm Triage"
|
|
4
|
+
type: plan
|
|
5
|
+
status: draft
|
|
6
|
+
github_issue: 101
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Code-Level Heartbeat for Swarm Triage — Implementation Plan
|
|
10
|
+
|
|
11
|
+
## Overview
|
|
12
|
+
|
|
13
|
+
Implement a lightweight code-level heartbeat module that runs on the API server (alongside the scheduler) to handle swarm triage WITHOUT spinning up Claude sessions. The heartbeat uses a 3-tier approach: preflight gate → code-level triage → Claude escalation (only when needed).
|
|
14
|
+
|
|
15
|
+
GitHub Issue: #101
|
|
16
|
+
|
|
17
|
+
## Current State Analysis
|
|
18
|
+
|
|
19
|
+
- **No triage code exists** — there's zero triage logic anywhere in the codebase
|
|
20
|
+
- **Scheduler pattern** (`src/scheduler/scheduler.ts:176-224`) provides a proven template: `startScheduler`/`stopScheduler` with `setInterval`, concurrency guard via `isProcessing` flag, and startup from `src/http.ts:2820-2825`
|
|
21
|
+
- **Existing DB queries** cover most needs:
|
|
22
|
+
- `getTaskStats()` (`db.ts:1767`) — counts by status (in_progress, unassigned, etc.)
|
|
23
|
+
- `getAllAgents()` (`db.ts:1174`) — all agents with status (idle/busy/offline)
|
|
24
|
+
- `getActiveTaskCount(agentId)` (`db.ts:1282`) — per-agent active tasks
|
|
25
|
+
- `hasCapacity(agentId)` (`db.ts:1294`) — capacity check
|
|
26
|
+
- `releaseStaleReviewingTasks()` (`db.ts:2605`) — stale review cleanup
|
|
27
|
+
- `releaseStaleMentionProcessing()` (`db.ts:3538`) — stale mention cleanup
|
|
28
|
+
- `releaseStaleProcessingInbox()` (`db.ts:4421`) — stale inbox cleanup
|
|
29
|
+
- `cleanupStaleSessions()` (`db.ts:6144`) — stale session cleanup
|
|
30
|
+
- `getEpicsWithProgressUpdates()` (`db.ts:5233`) — epic progress
|
|
31
|
+
- `getCompletedSlackTasks()` (`db.ts:1822`) — completed Slack tasks
|
|
32
|
+
- `getRecentlyFinishedWorkerTasks()` (`db.ts:1839`) — unnotified worker task completions
|
|
33
|
+
- `getUnassignedTasksCount()` (`db.ts:2661`) — pool size
|
|
34
|
+
- `claimTask()` (`db.ts:2420`) — atomic pool task claiming
|
|
35
|
+
- **The scheduler is started in `http.ts:2820-2825`** and stopped in `http.ts:2766-2769`
|
|
36
|
+
- **Task auto-assignment currently works via polling**: workers poll `/api/poll` which returns `pool_tasks_available` trigger, then workers use `task-action` tool to claim. There's NO server-side auto-assignment.
|
|
37
|
+
|
|
38
|
+
### Key Discoveries:
|
|
39
|
+
- `db.ts:1587` `getTasksByStatus("in_progress")` returns all in-progress tasks
|
|
40
|
+
- `db.ts:1174` `getAllAgents()` returns agents with `status`, `maxTasks` fields
|
|
41
|
+
- `db.ts:2420` `claimTask(taskId, agentId)` is atomic — perfect for auto-assignment
|
|
42
|
+
- `db.ts:1517` `getPendingTaskForAgent(agentId)` finds ready tasks respecting dependency order
|
|
43
|
+
- `http.ts:2820-2825` shows the pattern for starting the heartbeat (dynamic import + env config)
|
|
44
|
+
- `scheduler/scheduler.ts:196-211` shows the concurrency guard pattern (`isProcessing` flag)
|
|
45
|
+
- Worker `pool_tasks_available` trigger (`http.ts:657-665`) only notifies workers about pool tasks — doesn't assign them
|
|
46
|
+
|
|
47
|
+
## Desired End State
|
|
48
|
+
|
|
49
|
+
A new `src/heartbeat/` module that:
|
|
50
|
+
1. Runs a configurable interval (default 90s) on the API server
|
|
51
|
+
2. Tier 1: Preflight gate bails early if nothing looks actionable (zero cost for healthy swarms)
|
|
52
|
+
3. Tier 2: Handles stall detection, worker health, pool auto-assignment, stale cleanup, epic staleness — all in code
|
|
53
|
+
4. Tier 3: Creates a triage task for the lead agent only when ambiguous situations need human reasoning
|
|
54
|
+
5. Logs all actions for observability
|
|
55
|
+
6. Is started/stopped alongside the scheduler in `http.ts`
|
|
56
|
+
|
|
57
|
+
## Quick Verification Reference
|
|
58
|
+
|
|
59
|
+
- `bun test src/tests/heartbeat.test.ts` — heartbeat-specific tests
|
|
60
|
+
- `bun run lint:fix` — lint + format
|
|
61
|
+
- `bun run tsc:check` — type check
|
|
62
|
+
- `bun test` — all tests
|
|
63
|
+
|
|
64
|
+
Key files:
|
|
65
|
+
- `src/heartbeat/heartbeat.ts` — main heartbeat module
|
|
66
|
+
- `src/heartbeat/index.ts` — barrel export
|
|
67
|
+
- `src/tests/heartbeat.test.ts` — tests
|
|
68
|
+
- `src/http.ts` — startup/shutdown integration
|
|
69
|
+
|
|
70
|
+
## What We're NOT Doing
|
|
71
|
+
|
|
72
|
+
- Not replacing the existing scheduler — the heartbeat is a separate concern
|
|
73
|
+
- Not adding Slack notification sending directly — the heartbeat logs findings and creates tasks
|
|
74
|
+
- Not building a complex rules engine — simple threshold-based checks
|
|
75
|
+
- Not adding a UI dashboard for heartbeat results — just console logging + task creation for escalation
|
|
76
|
+
- Not implementing the `swarm-heartbeat-triage` schedule (referenced in the issue but doesn't exist) — the code-level heartbeat replaces that concept entirely
|
|
77
|
+
|
|
78
|
+
## Implementation Approach
|
|
79
|
+
|
|
80
|
+
Follow the scheduler pattern exactly: create a `src/heartbeat/` module with `startHeartbeat`/`stopHeartbeat` exports, a `setInterval` loop with a concurrency guard, and start/stop it from `http.ts`. The heartbeat sweep function runs three tiers sequentially, accumulating findings. Environment variable `HEARTBEAT_INTERVAL_MS` controls the interval (default 90000 = 90s).
|
|
81
|
+
|
|
82
|
+
---
|
|
83
|
+
|
|
84
|
+
## Phase 1: Core Heartbeat Module (Tier 1 + Tier 2)
|
|
85
|
+
|
|
86
|
+
### Overview
|
|
87
|
+
Create the heartbeat module with the preflight gate and all code-level triage checks.
|
|
88
|
+
|
|
89
|
+
### Changes Required:
|
|
90
|
+
|
|
91
|
+
#### 1. Heartbeat Module
|
|
92
|
+
**File**: `src/heartbeat/heartbeat.ts` (new)
|
|
93
|
+
**Changes**: Create the main heartbeat module with:
|
|
94
|
+
|
|
95
|
+
- Exports: `startHeartbeat(intervalMs)`, `stopHeartbeat()`
|
|
96
|
+
- Internal: `runHeartbeatSweep()` with concurrency guard (`isSweeping` flag)
|
|
97
|
+
- Tier 1 preflight gate: `getTaskStats()` + `getAllAgents()` → bail if nothing actionable
|
|
98
|
+
- Tier 2 triage checks:
|
|
99
|
+
1. `detectStalledTasks()` — in_progress tasks with `lastUpdatedAt` > 30min threshold
|
|
100
|
+
2. `checkWorkerHealth()` — fix mismatched agent status vs active task count
|
|
101
|
+
3. `autoAssignPoolTasks()` — assign unassigned tasks to idle workers using `claimTask()`
|
|
102
|
+
4. `cleanupStaleResources()` — call existing stale release functions
|
|
103
|
+
5. `checkEpicStaleness()` — active epics with no recent updates
|
|
104
|
+
- Tier 3 escalation: Create a triage task for lead agent if ambiguous findings exist
|
|
105
|
+
- Configurable thresholds via env vars with sensible defaults
|
|
106
|
+
|
|
107
|
+
#### 2. Barrel Export
|
|
108
|
+
**File**: `src/heartbeat/index.ts` (new)
|
|
109
|
+
**Changes**: `export { startHeartbeat, stopHeartbeat } from "./heartbeat";`
|
|
110
|
+
|
|
111
|
+
#### 3. HTTP Server Integration
|
|
112
|
+
**File**: `src/http.ts`
|
|
113
|
+
**Changes**:
|
|
114
|
+
- Import and start heartbeat alongside scheduler in the server listen callback (~line 2820)
|
|
115
|
+
- Stop heartbeat in shutdown function (~line 2766)
|
|
116
|
+
- Guard with env var `HEARTBEAT_DISABLE`
|
|
117
|
+
|
|
118
|
+
#### 4. New DB Queries
|
|
119
|
+
**File**: `src/be/db.ts`
|
|
120
|
+
**Changes**: Add three new functions:
|
|
121
|
+
- `getStalledInProgressTasks(thresholdMinutes)` — returns in_progress tasks with stale `lastUpdatedAt`
|
|
122
|
+
- `getIdleWorkersWithCapacity()` — non-lead, non-offline agents with idle status and remaining capacity
|
|
123
|
+
- `getUnassignedPoolTasks(limit)` — unassigned tasks ordered by priority DESC, createdAt ASC
|
|
124
|
+
|
|
125
|
+
### Success Criteria:
|
|
126
|
+
|
|
127
|
+
#### Automated Verification:
|
|
128
|
+
- [ ] Type check passes: `cd /home/worker/.worktrees/agent-swarm/2026-03-02-feat/code-level-heartbeat && bun run tsc:check`
|
|
129
|
+
- [ ] Lint passes: `cd /home/worker/.worktrees/agent-swarm/2026-03-02-feat/code-level-heartbeat && bun run lint:fix`
|
|
130
|
+
- [ ] File exists: `ls src/heartbeat/heartbeat.ts src/heartbeat/index.ts`
|
|
131
|
+
|
|
132
|
+
#### Manual Verification:
|
|
133
|
+
- [ ] Heartbeat module follows scheduler pattern (setInterval, concurrency guard, start/stop exports)
|
|
134
|
+
- [ ] Preflight gate queries are lightweight (single `getTaskStats()` + `getAllAgents()`)
|
|
135
|
+
- [ ] Auto-assignment uses atomic `claimTask()` to prevent races
|
|
136
|
+
- [ ] All thresholds are configurable via env vars
|
|
137
|
+
|
|
138
|
+
**Implementation Note**: After completing this phase, pause for manual confirmation.
|
|
139
|
+
|
|
140
|
+
---
|
|
141
|
+
|
|
142
|
+
## Phase 2: Tests
|
|
143
|
+
|
|
144
|
+
### Overview
|
|
145
|
+
Add comprehensive tests for the heartbeat module.
|
|
146
|
+
|
|
147
|
+
### Changes Required:
|
|
148
|
+
|
|
149
|
+
#### 1. Heartbeat Tests
|
|
150
|
+
**File**: `src/tests/heartbeat.test.ts` (new)
|
|
151
|
+
**Changes**: Follow the pattern from `src/tests/scheduled-tasks.test.ts` (isolated SQLite DB, `initDb`/`closeDb` in `beforeAll`/`afterAll`):
|
|
152
|
+
|
|
153
|
+
Tests:
|
|
154
|
+
1. Preflight gate - empty state: No tasks, no agents → gate returns false (bail)
|
|
155
|
+
2. Preflight gate - healthy state: Only completed tasks, all agents idle, no pool tasks → gate returns false
|
|
156
|
+
3. Preflight gate - actionable state: Unassigned pool tasks exist → gate returns true
|
|
157
|
+
4. Stall detection: Create an in_progress task with old `lastUpdatedAt` → detected as stalled
|
|
158
|
+
5. Auto-assignment: Create idle worker + unassigned pool task → task gets auto-assigned via `claimTask`
|
|
159
|
+
6. Auto-assignment respects capacity: Worker at max capacity → not assigned
|
|
160
|
+
7. Auto-assignment skips leads: Lead agent is idle → not used for auto-assignment
|
|
161
|
+
8. Auto-assignment skips offline: Offline worker → not used for auto-assignment
|
|
162
|
+
9. Worker health fix: Agent marked busy with 0 active tasks → status corrected to idle
|
|
163
|
+
10. Concurrency guard: Two concurrent sweeps → only one runs
|
|
164
|
+
11. Start/stop lifecycle: `startHeartbeat` + `stopHeartbeat` work correctly
|
|
165
|
+
|
|
166
|
+
### Success Criteria:
|
|
167
|
+
|
|
168
|
+
#### Automated Verification:
|
|
169
|
+
- [ ] Heartbeat tests pass: `cd /home/worker/.worktrees/agent-swarm/2026-03-02-feat/code-level-heartbeat && bun test src/tests/heartbeat.test.ts`
|
|
170
|
+
- [ ] All tests pass: `cd /home/worker/.worktrees/agent-swarm/2026-03-02-feat/code-level-heartbeat && bun test`
|
|
171
|
+
- [ ] Lint passes: `cd /home/worker/.worktrees/agent-swarm/2026-03-02-feat/code-level-heartbeat && bun run lint:fix`
|
|
172
|
+
|
|
173
|
+
#### Manual Verification:
|
|
174
|
+
- [ ] Tests cover all three tiers
|
|
175
|
+
- [ ] Tests use isolated DB (no shared state)
|
|
176
|
+
- [ ] Tests clean up after themselves
|
|
177
|
+
|
|
178
|
+
**Implementation Note**: After completing this phase, pause for manual confirmation.
|
|
179
|
+
|
|
180
|
+
---
|
|
181
|
+
|
|
182
|
+
## Phase 3: Final Polish + PR
|
|
183
|
+
|
|
184
|
+
### Overview
|
|
185
|
+
Run full checks and create PR.
|
|
186
|
+
|
|
187
|
+
### Changes Required:
|
|
188
|
+
|
|
189
|
+
#### 1. Final lint + type check
|
|
190
|
+
Run `bun run lint:fix` and `bun run tsc:check` to ensure everything is clean.
|
|
191
|
+
|
|
192
|
+
#### 2. Commit
|
|
193
|
+
Clear commit message referencing Issue #101.
|
|
194
|
+
|
|
195
|
+
#### 3. Create PR
|
|
196
|
+
Use `wts pr` to create PR with `tarasyarema` as reviewer, referencing "Closes #101".
|
|
197
|
+
|
|
198
|
+
### Success Criteria:
|
|
199
|
+
|
|
200
|
+
#### Automated Verification:
|
|
201
|
+
- [ ] All tests pass: `cd /home/worker/.worktrees/agent-swarm/2026-03-02-feat/code-level-heartbeat && bun test`
|
|
202
|
+
- [ ] Lint passes: `cd /home/worker/.worktrees/agent-swarm/2026-03-02-feat/code-level-heartbeat && bun run lint:fix`
|
|
203
|
+
- [ ] Type check passes: `cd /home/worker/.worktrees/agent-swarm/2026-03-02-feat/code-level-heartbeat && bun run tsc:check`
|
|
204
|
+
|
|
205
|
+
#### Manual Verification:
|
|
206
|
+
- [ ] PR created with `tarasyarema` as reviewer
|
|
207
|
+
- [ ] PR body references "Closes #101"
|
|
208
|
+
- [ ] PR body describes the 3-tier architecture
|
|
209
|
+
|
|
210
|
+
**Implementation Note**: After completing this phase, the task is done.
|
|
211
|
+
|
|
212
|
+
---
|
|
213
|
+
|
|
214
|
+
## Testing Strategy
|
|
215
|
+
|
|
216
|
+
- **Unit tests** (`src/tests/heartbeat.test.ts`): Isolated SQLite DB, test each tier independently
|
|
217
|
+
- **Integration**: The heartbeat uses the same DB functions as the rest of the system — no new DB schema changes needed
|
|
218
|
+
- **No E2E**: The heartbeat is an internal server component, tested at the unit level
|
|
219
|
+
|
|
220
|
+
## References
|
|
221
|
+
- GitHub Issue: #101
|
|
222
|
+
- Scheduler pattern: `src/scheduler/scheduler.ts`
|
|
223
|
+
- DB queries: `src/be/db.ts`
|
|
224
|
+
- HTTP server lifecycle: `src/http.ts:2762-2830`
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
---
|
|
2
|
+
date: 2026-02-26T20:10:00Z
|
|
3
|
+
researcher: Researcher
|
|
4
|
+
repository: desplega-ai/agent-swarm
|
|
5
|
+
topic: "CLIfying Agent-Swarm and AgentMail MCP Tools — clihub Investigation"
|
|
6
|
+
tags: [research, mcp, cli, skills, context-window, tool-search, clihub]
|
|
7
|
+
status: complete
|
|
8
|
+
autonomy: autopilot
|
|
9
|
+
last_updated: 2026-02-26
|
|
10
|
+
last_updated_by: Researcher
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# Research: CLIfying Agent-Swarm and AgentMail MCP Tools
|
|
14
|
+
|
|
15
|
+
**Date**: 2026-02-26
|
|
16
|
+
**Researcher**: Researcher
|
|
17
|
+
**Repository**: desplega-ai/agent-swarm
|
|
18
|
+
|
|
19
|
+
## Research Question
|
|
20
|
+
|
|
21
|
+
Can we reduce the ~15-18% context window overhead from our 61 MCP tools (50 agent-swarm + 11 AgentMail) by converting them to CLI commands using clihub or Claude Code skills?
|
|
22
|
+
|
|
23
|
+
## Summary
|
|
24
|
+
|
|
25
|
+
After thorough investigation of three approaches (clihub CLI generation, Claude Code Skills, and MCP Tool Search), the **most impactful and lowest-effort solution is MCP Tool Search** — a native Claude Code feature shipped in January 2026 that defers tool loading and reduces token overhead by ~85%. clihub is an interesting Go-based code generator but is not directly suitable for our use case due to Go toolchain requirements, per-call connection overhead, and lack of structured output support. Skills complement Tool Search by providing usage guidance but don't replace MCP tool declarations on their own. The recommended approach is a phased strategy: (1) verify/optimize Tool Search, (2) create skill guides for complex tool groups, (3) optimize capability-based tool loading.
|
|
26
|
+
|
|
27
|
+
## Detailed Findings
|
|
28
|
+
|
|
29
|
+
### 1. clihub Architecture
|
|
30
|
+
|
|
31
|
+
**Repository**: https://github.com/thellimist/clihub (Go, MIT, v0.0.2)
|
|
32
|
+
|
|
33
|
+
clihub is a 4-stage pipeline:
|
|
34
|
+
|
|
35
|
+
1. **Connect**: Connects to MCP server via HTTP (StreamableHTTP) or stdio transport. Comprehensive auth support (Bearer, API key, OAuth2 with PKCE, Google SA).
|
|
36
|
+
2. **Discover**: Calls `tools/list` to enumerate all MCP tools. Supports include/exclude filtering with fuzzy "did you mean?" suggestions.
|
|
37
|
+
3. **Generate**: Parses each tool's JSON Schema into Go `ToolOption` structs, maps JSON types to Go types, generates a complete Go program from a ~1190-line template. One Cobra subcommand per tool with typed flags.
|
|
38
|
+
4. **Compile**: Runs `go build` with `CGO_ENABLED=0` for static binary. Supports cross-compilation to 6 platforms.
|
|
39
|
+
|
|
40
|
+
**Code stats**: 4,866 lines production + 3,335 lines tests. Only 3 direct Go dependencies.
|
|
41
|
+
|
|
42
|
+
**Type mapping**:
|
|
43
|
+
|
|
44
|
+
| JSON Schema | Go Type | CLI Flag |
|
|
45
|
+
|-------------|---------|----------|
|
|
46
|
+
| string | string | `--flag-name "value"` |
|
|
47
|
+
| integer | int | `--flag-name 42` |
|
|
48
|
+
| number | float64 | `--flag-name 3.14` |
|
|
49
|
+
| boolean | bool | `--flag-name` |
|
|
50
|
+
| array (strings) | []string | `--flag-name a,b,c` |
|
|
51
|
+
| object | string (raw JSON) | `--raw '{"key":"val"}'` |
|
|
52
|
+
|
|
53
|
+
**Key limitation**: `object` parameters fall through to raw JSON strings. This affects our tools like `store-progress` (has `costData` object param), `create-schedule` (complex config), and `update-profile` (multiple text fields). The schema validation story is weak for complex types.
|
|
54
|
+
|
|
55
|
+
### 2. Agent-Swarm MCP Tools Inventory
|
|
56
|
+
|
|
57
|
+
**50 tools** registered in `src/server.ts`. 22 always registered, 28 gated by capability flags.
|
|
58
|
+
|
|
59
|
+
| Category | Count | Always Loaded | Capability Gate |
|
|
60
|
+
|----------|-------|---------------|-----------------|
|
|
61
|
+
| Core | 9 | Yes | — |
|
|
62
|
+
| Config | 4 | Yes | — |
|
|
63
|
+
| Slack | 8 | Yes | — |
|
|
64
|
+
| AgentMail | 1 | Yes | — |
|
|
65
|
+
| Task Pool | 1 | No | `task-pool` |
|
|
66
|
+
| Messaging | 5 | No | `messaging` |
|
|
67
|
+
| Profiles | 3 | No | `profiles` |
|
|
68
|
+
| Services | 4 | No | `services` |
|
|
69
|
+
| Scheduling | 5 | No | `scheduling` |
|
|
70
|
+
| Epics | 7 | No | `epics` |
|
|
71
|
+
| Memory | 3 | No | `memory` |
|
|
72
|
+
|
|
73
|
+
**Estimated token footprint**: ~12,000-16,000 tokens for all 50 tool declarations (JSON Schema with descriptions, parameter types, validation rules).
|
|
74
|
+
|
|
75
|
+
### 3. Claude Code Skills System
|
|
76
|
+
|
|
77
|
+
Skills use **progressive disclosure** for token efficiency:
|
|
78
|
+
|
|
79
|
+
- **Startup**: Only name + description (~100 tokens per skill)
|
|
80
|
+
- **Invocation**: Full SKILL.md body loaded (~2-5K tokens)
|
|
81
|
+
- **References**: Supporting files loaded only when needed (0 tokens)
|
|
82
|
+
- **Scripts**: Source never enters context, only output
|
|
83
|
+
|
|
84
|
+
Skills are defined as directories with `SKILL.md` files containing YAML frontmatter + Markdown body. They can be project-level (`.claude/skills/`), user-level (`~/.claude/skills/`), or plugin-level.
|
|
85
|
+
|
|
86
|
+
**Key insight**: Skills are **instructions**, not tool replacements. They guide Claude on HOW to use tools but don't eliminate the tool declarations from context. To get token savings, skills must be combined with Tool Search or tool removal.
|
|
87
|
+
|
|
88
|
+
### 4. MCP Tool Search (January 2026)
|
|
89
|
+
|
|
90
|
+
The most relevant discovery. Tool Search is a native Claude Code feature that:
|
|
91
|
+
|
|
92
|
+
- Defers loading of tools marked with `defer_loading: true`
|
|
93
|
+
- Claude discovers tools on-demand via a special "Tool Search Tool"
|
|
94
|
+
- Auto-enabled when MCP tool descriptions exceed 10K tokens (**our case**)
|
|
95
|
+
- Measured 85% token reduction in Anthropic's benchmarks
|
|
96
|
+
|
|
97
|
+
**This may already be active for our agents** given our tool count exceeds the auto-enable threshold.
|
|
98
|
+
|
|
99
|
+
### 5. Existing Skill Patterns in Our Codebase
|
|
100
|
+
|
|
101
|
+
We found 10 distinct skill patterns currently deployed:
|
|
102
|
+
|
|
103
|
+
1. **CLI Expert**: `wts-expert`, `qa-use` — Quick reference tables + workflow guides for CLI tools
|
|
104
|
+
2. **SDK Reference**: `agentmail` — API docs with dual-language examples
|
|
105
|
+
3. **Agentic Workflow**: `researching`, `planning`, `implementing` — Multi-step processes with autonomy modes
|
|
106
|
+
4. **MCP-Wrapping**: `swarm-expert` — References MCP tool names with usage guidance
|
|
107
|
+
5. **Thin Redirect**: `process-review` — Points to another skill's section
|
|
108
|
+
|
|
109
|
+
The `swarm-expert` skill at `plugin/skills/swarm-expert/` already demonstrates the pattern of wrapping MCP tools with a skill guide.
|
|
110
|
+
|
|
111
|
+
## Code References
|
|
112
|
+
|
|
113
|
+
| File | Description |
|
|
114
|
+
|------|-------------|
|
|
115
|
+
| `src/server.ts` | MCP server factory — tool registration with capability gates |
|
|
116
|
+
| `src/tools/utils.ts` | `createToolRegistrar()` — auto-extracts X-Agent-ID header |
|
|
117
|
+
| `src/tools/*.ts` | Individual tool implementations (50 files) |
|
|
118
|
+
| `plugin/skills/` | Skills directory (currently empty except swarm-expert) |
|
|
119
|
+
|
|
120
|
+
## Architecture Documentation
|
|
121
|
+
|
|
122
|
+
### Current MCP Tool Loading Flow
|
|
123
|
+
|
|
124
|
+
```
|
|
125
|
+
Agent session starts
|
|
126
|
+
→ Claude Code connects to MCP server (stdio/HTTP)
|
|
127
|
+
→ MCP server registers ALL tools for agent's capabilities
|
|
128
|
+
→ All tool schemas injected into system prompt (~14K tokens)
|
|
129
|
+
→ Agent begins work with full tool set always in context
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
### Proposed Flow (with Tool Search + Skills)
|
|
133
|
+
|
|
134
|
+
```
|
|
135
|
+
Agent session starts
|
|
136
|
+
→ Claude Code connects to MCP server
|
|
137
|
+
→ Core tools loaded immediately (~4.5K tokens)
|
|
138
|
+
→ Non-core tools deferred via Tool Search
|
|
139
|
+
→ Skill descriptions loaded (~500 tokens for 5 skills)
|
|
140
|
+
→ Agent begins work
|
|
141
|
+
|
|
142
|
+
When agent needs scheduling:
|
|
143
|
+
→ Tool Search discovers scheduling tools
|
|
144
|
+
→ Scheduling skill loaded with usage guide
|
|
145
|
+
→ Agent uses MCP tools with skill guidance
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
## Open Questions
|
|
149
|
+
|
|
150
|
+
1. **Is Tool Search already auto-enabled for our agents?** We exceed the 10K token threshold. Need to verify.
|
|
151
|
+
2. **Can we configure `defer_loading` per-tool in our MCP server?** The `@modelcontextprotocol/sdk` may support this.
|
|
152
|
+
3. **What's the actual tool usage distribution?** Which of the 50 tools do workers actually call? This would inform which to defer.
|
|
153
|
+
4. **Does Tool Search work with our custom MCP transport?** Our server uses both stdio and HTTP transports.
|
|
154
|
+
5. **AgentMail tools**: The 11 AgentMail tools come from a separate MCP server (`npx agentmail-mcp`). Does Tool Search apply across multiple MCP servers?
|
|
155
|
+
|
|
156
|
+
## Related Research
|
|
157
|
+
|
|
158
|
+
- `thoughts/shared/research/2026-02-20-agentmail-mcp-integration.md` — Previous AgentMail MCP research
|
|
159
|
+
- `thoughts/shared/research/2026-02-24-context-evals.md` — Context evaluation research
|