@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,282 @@
|
|
|
1
|
+
---
|
|
2
|
+
date: 2026-02-26
|
|
3
|
+
author: Researcher
|
|
4
|
+
repository: desplega-ai/agent-swarm
|
|
5
|
+
topic: "Implementation Plan: Reduce MCP Tool Context Overhead"
|
|
6
|
+
tags: [plan, mcp, tools, context-window, skills, tool-search]
|
|
7
|
+
status: proposed
|
|
8
|
+
related_research: thoughts/shared/research/2026-02-26-cliffy-mcp-tools.md
|
|
9
|
+
related_rfc: docs/rfcs/0001-cliffy-mcp-tools.md
|
|
10
|
+
pr: "#95"
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# Implementation Plan: Reduce MCP Tool Context Overhead via Tool Search & Skills
|
|
14
|
+
|
|
15
|
+
**Based on**: RFC-0001 and research findings from 2026-02-26
|
|
16
|
+
**Goal**: Reduce agent context window overhead from ~14K tokens (50 MCP tools) to ~3-5K tokens at session startup
|
|
17
|
+
**Expected impact**: 65-85% reduction in MCP tool context overhead
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## Phase 1: Verify & Optimize Tool Search (Effort: Low, Impact: High)
|
|
22
|
+
|
|
23
|
+
**Timeline**: 1-2 sessions
|
|
24
|
+
**Owner**: Any worker (suggested: Researcher for verification, Picateclas for code changes)
|
|
25
|
+
|
|
26
|
+
### 1.1 Verify Tool Search Auto-Enable Status
|
|
27
|
+
|
|
28
|
+
**Goal**: Determine if Claude Code's Tool Search is already active for our agents.
|
|
29
|
+
|
|
30
|
+
**Steps**:
|
|
31
|
+
1. Add temporary debug logging to a worker session to observe whether Claude Code sends a `Tool Search` invocation before calling MCP tools. This can be done by:
|
|
32
|
+
- Checking the Claude Code session logs (if available) for `tool_search` calls
|
|
33
|
+
- Adding a `console.log` in the MCP server's `tools/list` handler to see how/when it's called
|
|
34
|
+
- Examining Claude Code's `--verbose` output during a session
|
|
35
|
+
2. Check the `@modelcontextprotocol/sdk` version (`^1.25.1` in our `package.json`) for `defer_loading` support in tool registration
|
|
36
|
+
3. Review Claude Code client-side Tool Search documentation for auto-enable conditions and confirm our ~12-16K token tool payload exceeds the 10K threshold
|
|
37
|
+
|
|
38
|
+
**Acceptance criteria**: Written confirmation of whether Tool Search is active, and if not, what's needed to enable it.
|
|
39
|
+
|
|
40
|
+
### 1.2 Add `annotations` to Tool Registrations
|
|
41
|
+
|
|
42
|
+
**Goal**: Improve tool discoverability for Tool Search by adding structured annotations.
|
|
43
|
+
|
|
44
|
+
**Files to modify**: `src/tools/utils.ts` (utility), each tool file in `src/tools/*.ts`
|
|
45
|
+
|
|
46
|
+
**Steps**:
|
|
47
|
+
1. Research the MCP SDK's `ToolAnnotations` type — our `utils.ts:13` already imports it and `ToolConfig:66` accepts it as optional, but NO tool currently sets it
|
|
48
|
+
2. Define a standard annotation schema for our tools. At minimum:
|
|
49
|
+
- `readOnlyHint` / `destructiveHint` per the MCP spec (for safety classification)
|
|
50
|
+
- Consider adding custom metadata for tool grouping/categories if the SDK supports it
|
|
51
|
+
3. Add annotations to all 50 tools, prioritizing:
|
|
52
|
+
- Destructive tools (`delete-channel`, `delete-epic`, `delete-config`, `delete-schedule`, `cancel-task`) → `destructiveHint: true`
|
|
53
|
+
- Read-only tools (`get-tasks`, `get-swarm`, `list-*`, `memory-search`) → `readOnlyHint: true`
|
|
54
|
+
4. Audit tool descriptions for search-friendliness:
|
|
55
|
+
- Current descriptions are 1-2 sentences, action-oriented — generally fine
|
|
56
|
+
- Add trigger keywords where missing (e.g., `post-message` description is too brief: "Posts a message to a channel for cross-agent communication" — could add "internal chat, agent-to-agent")
|
|
57
|
+
- Ensure cross-references between related tools (already done for `memory-search` → `memory-get`)
|
|
58
|
+
|
|
59
|
+
**Acceptance criteria**: All 50 tools have `annotations` set. Descriptions reviewed for searchability. PR with changes.
|
|
60
|
+
|
|
61
|
+
**Status (2026-02-26)**: DONE. 36 tools annotated with readOnlyHint (20), destructiveHint (7), idempotentHint (6), openWorldHint (6). 14 write-only tools skipped (no specific hints apply). Type-check and lint clean.
|
|
62
|
+
|
|
63
|
+
### 1.3 Configure Explicit `defer_loading` (if supported)
|
|
64
|
+
|
|
65
|
+
**Goal**: Explicitly mark non-core tools for deferred loading instead of relying on auto-enable.
|
|
66
|
+
|
|
67
|
+
**Depends on**: 1.1 results (need to confirm SDK support)
|
|
68
|
+
|
|
69
|
+
**Steps**:
|
|
70
|
+
1. If the MCP SDK supports `defer_loading` in tool metadata, add it to the 31 non-core tools identified in the RFC:
|
|
71
|
+
- Scheduling (5 tools)
|
|
72
|
+
- Epics (7 tools)
|
|
73
|
+
- Services (4 tools)
|
|
74
|
+
- Config (4 tools)
|
|
75
|
+
- Profiles (3 tools)
|
|
76
|
+
- Slack extras (4: `slack-upload-file`, `slack-download-file`, `slack-list-channels`, `slack-post`)
|
|
77
|
+
- Memory extras (1: `inject-learning`)
|
|
78
|
+
- Messaging extras (3: `create-channel`, `delete-channel`, `list-channels`)
|
|
79
|
+
2. Keep 16 core tools always-loaded (as classified in RFC section "Must Stay as MCP Tools"):
|
|
80
|
+
- `join-swarm`, `poll-task`, `get-task-details`, `store-progress`, `send-task`, `get-tasks`, `my-agent-info`, `get-swarm`, `cancel-task`, `task-action`
|
|
81
|
+
- `slack-reply`, `slack-read`
|
|
82
|
+
- `read-messages`, `post-message`
|
|
83
|
+
- `memory-search`, `memory-get`
|
|
84
|
+
3. If the SDK does NOT support `defer_loading`, document the gap and investigate alternatives (e.g., Claude Code `--tool-search` flag, `.claude/settings.json` config)
|
|
85
|
+
|
|
86
|
+
**Acceptance criteria**: Non-core tools marked for deferred loading OR documented gap with workaround.
|
|
87
|
+
|
|
88
|
+
**Status (2026-02-26)**: `defer_loading` is NOT supported in `@modelcontextprotocol/sdk@^1.25.1`. The `ToolSchema` only supports `description`, `inputSchema`, `outputSchema`, and `annotations` (with `readOnlyHint`, `destructiveHint`, `idempotentHint`, `openWorldHint`, `title`). No lazy/deferred loading mechanism exists in the MCP protocol spec at this version. Tool Search is a Claude Code client-side feature that auto-activates when tool token count exceeds ~10K. With our ~14K tokens across 50 tools, Tool Search should already be active. The annotations added in Phase 1.2 improve Tool Search discoverability.
|
|
89
|
+
|
|
90
|
+
### 1.4 Measure Baseline and Post-Change Token Counts
|
|
91
|
+
|
|
92
|
+
**Goal**: Quantify actual token savings.
|
|
93
|
+
|
|
94
|
+
**Steps**:
|
|
95
|
+
1. Before changes: count tokens from a full `tools/list` response (all 50 tools)
|
|
96
|
+
2. After changes: count tokens for core-only tools + Tool Search overhead
|
|
97
|
+
3. Document delta in the RFC
|
|
98
|
+
|
|
99
|
+
**Acceptance criteria**: Measured before/after token counts documented.
|
|
100
|
+
|
|
101
|
+
---
|
|
102
|
+
|
|
103
|
+
## Phase 2: Create Skill Guides for Complex Tool Groups (Effort: Medium, Impact: Medium)
|
|
104
|
+
|
|
105
|
+
**Timeline**: 2-3 sessions
|
|
106
|
+
**Owner**: Researcher (skill design) + Picateclas (integration)
|
|
107
|
+
|
|
108
|
+
### 2.1 Create `scheduling-expert` Skill (Proof of Concept)
|
|
109
|
+
|
|
110
|
+
**Goal**: Build the first skill guide for a complex tool group and validate the pattern.
|
|
111
|
+
|
|
112
|
+
**Directory**: `plugin/skills/scheduling-expert/`
|
|
113
|
+
|
|
114
|
+
**Files to create**:
|
|
115
|
+
```
|
|
116
|
+
plugin/skills/scheduling-expert/
|
|
117
|
+
├── SKILL.md # Core usage guide with YAML frontmatter
|
|
118
|
+
├── COMMANDS.md # Detailed parameter reference for all 5 scheduling tools
|
|
119
|
+
└── examples/
|
|
120
|
+
└── common-patterns.md # Cron patterns, interval templates
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
**SKILL.md content requirements** (following Claude Code skills best practices):
|
|
124
|
+
- YAML frontmatter with `name`, `description` (include trigger words: "schedule", "cron", "recurring", "periodic", "automated tasks", "timer")
|
|
125
|
+
- Quick reference table mapping goals to MCP tool names
|
|
126
|
+
- Common patterns section (daily at 9am, hourly, weekly, custom cron)
|
|
127
|
+
- Error handling guidance (what happens when a schedule name conflicts, cron parsing errors)
|
|
128
|
+
- Link to COMMANDS.md for detailed params
|
|
129
|
+
|
|
130
|
+
**Steps**:
|
|
131
|
+
1. Create skill directory structure
|
|
132
|
+
2. Write SKILL.md with proper frontmatter and quick reference
|
|
133
|
+
3. Write COMMANDS.md documenting all 5 scheduling tool parameters (from Zod schemas in `src/tools/schedules/`)
|
|
134
|
+
4. Write examples/common-patterns.md with practical scheduling scenarios
|
|
135
|
+
5. Test skill loading in a dev session
|
|
136
|
+
|
|
137
|
+
**Acceptance criteria**: Skill loads correctly when invoked via `/scheduling-expert` or when Claude detects scheduling intent.
|
|
138
|
+
|
|
139
|
+
### 2.2 Create `epic-management` Skill
|
|
140
|
+
|
|
141
|
+
**Goal**: Guide Claude through the epic → task workflow.
|
|
142
|
+
|
|
143
|
+
**Directory**: `plugin/skills/epic-management/`
|
|
144
|
+
|
|
145
|
+
**Content focus**:
|
|
146
|
+
- Epic lifecycle: draft → active → paused → completed/cancelled
|
|
147
|
+
- Workflow: create epic → create tasks → assign tasks to epic → track progress
|
|
148
|
+
- Quick reference for all 7 epic tools
|
|
149
|
+
- Common patterns: multi-task project decomposition, epic progress tracking
|
|
150
|
+
|
|
151
|
+
**Steps**: Same structure as 2.1 adapted for epics.
|
|
152
|
+
|
|
153
|
+
### 2.3 Create `service-registry` Skill
|
|
154
|
+
|
|
155
|
+
**Goal**: Guide the PM2 + service registry workflow.
|
|
156
|
+
|
|
157
|
+
**Directory**: `plugin/skills/service-registry/`
|
|
158
|
+
|
|
159
|
+
**Content focus**:
|
|
160
|
+
- Full lifecycle: start PM2 → register → health check → update → unregister → stop
|
|
161
|
+
- Port 3000 convention, health check endpoint requirement
|
|
162
|
+
- URL pattern: `https://{agentId}.{swarmUrl}`
|
|
163
|
+
- Quick reference for all 4 service tools
|
|
164
|
+
|
|
165
|
+
**Steps**: Same structure as 2.1 adapted for services.
|
|
166
|
+
|
|
167
|
+
### 2.4 Enhance Existing `swarm-expert` Skill
|
|
168
|
+
|
|
169
|
+
**Goal**: The existing `swarm-expert` skill pattern (currently referenced in research but missing from `plugin/skills/`) should be properly created or updated.
|
|
170
|
+
|
|
171
|
+
**Note**: The research doc references `plugin/skills/swarm-expert/` but this directory does not exist (only `.gitkeep` in `plugin/skills/`). Need to verify if this skill lives elsewhere (e.g., in the Claude Code plugin config) or needs to be created.
|
|
172
|
+
|
|
173
|
+
**Steps**:
|
|
174
|
+
1. Locate the actual `swarm-expert` skill (may be in `.claude/skills/` or loaded via plugin config)
|
|
175
|
+
2. If it exists elsewhere, evaluate whether to consolidate into `plugin/skills/`
|
|
176
|
+
3. If it doesn't exist, create it as a general swarm operations guide
|
|
177
|
+
|
|
178
|
+
---
|
|
179
|
+
|
|
180
|
+
## Phase 3: Optimize Capability-Based Tool Loading per Worker Role (Effort: Medium, Impact: Medium)
|
|
181
|
+
|
|
182
|
+
**Timeline**: 2-3 sessions
|
|
183
|
+
**Owner**: Researcher (analysis) + Picateclas (implementation)
|
|
184
|
+
|
|
185
|
+
### 3.1 Audit Actual Tool Usage by Worker Role
|
|
186
|
+
|
|
187
|
+
**Goal**: Determine which tools each worker role actually uses.
|
|
188
|
+
|
|
189
|
+
**Steps**:
|
|
190
|
+
1. Add usage instrumentation to `createToolRegistrar` in `src/tools/utils.ts`:
|
|
191
|
+
- Log tool name + agent ID on each call
|
|
192
|
+
- Can be a simple counter stored in-memory or logged to stdout
|
|
193
|
+
2. Run for 1-2 days to collect usage data
|
|
194
|
+
3. Analyze which tools each agent role calls:
|
|
195
|
+
- Researcher: likely core + memory + messaging only
|
|
196
|
+
- Picateclas (implementation): likely core + messaging + profiles
|
|
197
|
+
- Lead: likely all tools
|
|
198
|
+
4. Produce a usage matrix: agent role × tool → call frequency
|
|
199
|
+
|
|
200
|
+
**Acceptance criteria**: Usage matrix document with data-backed recommendations.
|
|
201
|
+
|
|
202
|
+
### 3.2 Define Minimal Capability Profiles per Role
|
|
203
|
+
|
|
204
|
+
**Goal**: Reduce tool count from 50 to ~25-30 per worker.
|
|
205
|
+
|
|
206
|
+
**Steps**:
|
|
207
|
+
1. Based on 3.1 usage data, define capability profiles:
|
|
208
|
+
- `researcher`: `core,task-pool,messaging,memory` (removes scheduling, epics, services, profiles, config)
|
|
209
|
+
- `implementer`: `core,task-pool,messaging,profiles,memory` (removes scheduling, epics, services)
|
|
210
|
+
- `lead`: all capabilities (no change)
|
|
211
|
+
2. Update worker configuration to use role-specific `CAPABILITIES` env vars
|
|
212
|
+
3. Document the capability profiles and which tools each includes
|
|
213
|
+
|
|
214
|
+
**Acceptance criteria**: Role-specific capability profiles defined and configured.
|
|
215
|
+
|
|
216
|
+
### 3.3 Implement Role-Based Defaults in Runner
|
|
217
|
+
|
|
218
|
+
**Goal**: Automatically set `CAPABILITIES` based on agent role.
|
|
219
|
+
|
|
220
|
+
**Files to modify**: `src/commands/runner.ts`, potentially `src/server.ts`
|
|
221
|
+
|
|
222
|
+
**Steps**:
|
|
223
|
+
1. Map agent roles to capability profiles (could be a simple lookup table)
|
|
224
|
+
2. Set `CAPABILITIES` env var in worker container based on agent role from swarm registry
|
|
225
|
+
3. Keep override mechanism for agents that need additional capabilities
|
|
226
|
+
|
|
227
|
+
**Acceptance criteria**: Workers start with role-appropriate tool sets. Override mechanism works.
|
|
228
|
+
|
|
229
|
+
---
|
|
230
|
+
|
|
231
|
+
## Phase 4: CLI Wrapper for Human Operators (Effort: High, Impact: Low, Optional)
|
|
232
|
+
|
|
233
|
+
**Timeline**: Deferred — only if there's demand
|
|
234
|
+
**Owner**: TBD
|
|
235
|
+
|
|
236
|
+
This phase is documented for completeness but is **not recommended for near-term implementation**. It would generate a `swarm` CLI binary using clihub or a custom TypeScript CLI for human administrators.
|
|
237
|
+
|
|
238
|
+
**Deferred because**:
|
|
239
|
+
- Primary goal is agent context reduction, not human UX
|
|
240
|
+
- The `gh api` + `curl` approach already works for human operators
|
|
241
|
+
- The UI provides a better human interface
|
|
242
|
+
|
|
243
|
+
---
|
|
244
|
+
|
|
245
|
+
## Implementation Order & Dependencies
|
|
246
|
+
|
|
247
|
+
```
|
|
248
|
+
Phase 1.1 (verify Tool Search)
|
|
249
|
+
└─> Phase 1.2 (add annotations) — can run in parallel with 1.1
|
|
250
|
+
└─> Phase 1.3 (defer_loading) — depends on 1.1 results
|
|
251
|
+
└─> Phase 1.4 (measure) — depends on 1.2 and 1.3
|
|
252
|
+
|
|
253
|
+
Phase 2.1 (scheduling skill) — can start immediately, independent
|
|
254
|
+
└─> Phase 2.2 (epic skill) — sequential after pattern validated
|
|
255
|
+
└─> Phase 2.3 (service skill) — sequential
|
|
256
|
+
└─> Phase 2.4 (swarm-expert) — sequential
|
|
257
|
+
|
|
258
|
+
Phase 3.1 (usage audit) — start after Phase 1 is done
|
|
259
|
+
└─> Phase 3.2 (define profiles) — depends on 3.1 data
|
|
260
|
+
└─> Phase 3.3 (implement in runner) — depends on 3.2
|
|
261
|
+
```
|
|
262
|
+
|
|
263
|
+
**Critical path**: Phase 1.1 → 1.3 → 1.4 (verify, configure, measure)
|
|
264
|
+
**Quick wins**: Phase 1.2 (annotations) and Phase 2.1 (first skill) can start immediately.
|
|
265
|
+
|
|
266
|
+
## Success Metrics
|
|
267
|
+
|
|
268
|
+
| Metric | Current | Target | Phase |
|
|
269
|
+
|--------|---------|--------|-------|
|
|
270
|
+
| Tool tokens at session start | ~14,000 | ~4,500 | Phase 1 |
|
|
271
|
+
| Tool tokens with strict caps | ~14,000 | ~3,000 | Phase 3 |
|
|
272
|
+
| Tools registered per worker | 50 | 25-30 | Phase 3 |
|
|
273
|
+
| Skill coverage for complex groups | 0/4 | 4/4 | Phase 2 |
|
|
274
|
+
|
|
275
|
+
## Risks
|
|
276
|
+
|
|
277
|
+
| Risk | Likelihood | Impact | Mitigation |
|
|
278
|
+
|------|-----------|--------|-----------|
|
|
279
|
+
| Tool Search not supported by our MCP SDK version | Medium | High | Check SDK docs in Phase 1.1; may need SDK upgrade |
|
|
280
|
+
| Deferred tools not discoverable by Claude | Low | High | Optimize descriptions in Phase 1.2; test empirically |
|
|
281
|
+
| Strict capabilities break edge-case workflows | Medium | Medium | Audit usage data first (Phase 3.1); keep override mechanism |
|
|
282
|
+
| Skills add maintenance burden | Low | Low | Start with only 3-4 skills for most complex groups |
|
|
@@ -0,0 +1,328 @@
|
|
|
1
|
+
---
|
|
2
|
+
date: 2026-03-02
|
|
3
|
+
author: Reviewer
|
|
4
|
+
repository: desplega-ai/agent-swarm
|
|
5
|
+
topic: "Integration Plan: Add claude-context-mode as Default Context Management"
|
|
6
|
+
tags: [plan, context-window, mcp, plugin, context-mode, optimization]
|
|
7
|
+
status: implemented
|
|
8
|
+
related_plans: thoughts/shared/plans/2026-02-26-mcp-tool-context-reduction.md
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Integration Plan: Add `claude-context-mode` to Agent Swarm
|
|
12
|
+
|
|
13
|
+
**Source**: https://github.com/mksglu/claude-context-mode
|
|
14
|
+
**Goal**: Reduce context window consumption during research and planning tasks by intercepting tool output and compressing it through FTS5-backed indexing
|
|
15
|
+
**Expected impact**: ~98% reduction in raw tool output entering context (315 KB → 5.4 KB per the author's benchmarks)
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## Problem Statement
|
|
20
|
+
|
|
21
|
+
Research and planning tasks consume excessive context window space. When agents perform web fetches, read large files, run CLI commands, or process Playwright snapshots, the raw output floods the 200K context window. This causes:
|
|
22
|
+
|
|
23
|
+
- Research sessions hitting context limits after ~30 minutes
|
|
24
|
+
- Frequent context compaction losing important earlier findings
|
|
25
|
+
- Increased API costs from large context payloads
|
|
26
|
+
- Reduced session productivity
|
|
27
|
+
|
|
28
|
+
## What is `claude-context-mode`?
|
|
29
|
+
|
|
30
|
+
An MCP plugin (MIT licensed, v0.9.17) that sits between Claude Code and tool outputs. It provides:
|
|
31
|
+
|
|
32
|
+
1. **6 MCP tools**: `batch_execute`, `execute`, `execute_file`, `index`, `search`, `fetch_and_index`
|
|
33
|
+
2. **Sandboxed execution**: Commands run in isolated subprocesses; only stdout summaries enter context
|
|
34
|
+
3. **FTS5 knowledge base**: SQLite with BM25 ranking, Porter stemming, trigram matching, Levenshtein fuzzy correction
|
|
35
|
+
4. **PreToolUse hooks**: Intercepts Bash (curl/wget), WebFetch, Read, Grep, and Task (subagent) calls, redirecting them through context-mode tools
|
|
36
|
+
5. **Progressive search throttling**: Calls 1-3 normal, 4-8 reduced, 9+ blocked
|
|
37
|
+
6. **Subagent routing**: Auto-injects instructions into Task/Agent tool prompts to keep subagent responses compact
|
|
38
|
+
|
|
39
|
+
### Architecture
|
|
40
|
+
|
|
41
|
+
```
|
|
42
|
+
Claude Code
|
|
43
|
+
│
|
|
44
|
+
├── PreToolUse hooks (context-mode)
|
|
45
|
+
│ ├── Bash: blocks curl/wget → suggests execute/fetch_and_index
|
|
46
|
+
│ ├── WebFetch: DENIES → redirects to fetch_and_index
|
|
47
|
+
│ ├── Read: advisory tip → suggests execute_file for large files
|
|
48
|
+
│ ├── Grep: advisory tip → suggests execute for large results
|
|
49
|
+
│ └── Task: injects routing block into subagent prompts
|
|
50
|
+
│
|
|
51
|
+
├── MCP Server (context-mode on stdio)
|
|
52
|
+
│ ├── batch_execute → runs commands, auto-indexes output, returns search results
|
|
53
|
+
│ ├── execute → sandboxed code in 11 languages, intent-driven filtering
|
|
54
|
+
│ ├── execute_file → reads file into sandbox, only printed summary enters context
|
|
55
|
+
│ ├── index → indexes markdown into FTS5
|
|
56
|
+
│ ├── search → BM25 search with porter→trigram→fuzzy fallback
|
|
57
|
+
│ └── fetch_and_index → fetches URL, converts to markdown, indexes into FTS5
|
|
58
|
+
│
|
|
59
|
+
└── FTS5 Knowledge Base (SQLite, ephemeral per session in /tmp)
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
## Integration Approach
|
|
65
|
+
|
|
66
|
+
### Overview of Changes
|
|
67
|
+
|
|
68
|
+
| Component | Change | Effort |
|
|
69
|
+
|-----------|--------|--------|
|
|
70
|
+
| `Dockerfile.worker` | Add context-mode plugin installation | Low |
|
|
71
|
+
| `docker-entrypoint.sh` | Register context-mode MCP server + configure | Low |
|
|
72
|
+
| `Dockerfile.worker` | Grant context-mode tool permissions in settings.json | Low |
|
|
73
|
+
| Hook coexistence | Validate both hook systems work together | Low (testing) |
|
|
74
|
+
| Skill/SKILL.md | Ensure behavioral instructions load correctly | Low |
|
|
75
|
+
| Base prompt | Optional: add brief context-mode awareness note | Low |
|
|
76
|
+
|
|
77
|
+
### What Does NOT Need to Change
|
|
78
|
+
|
|
79
|
+
- **Agent-swarm MCP server**: Remains unchanged (HTTP MCP at `$MCP_URL/mcp`)
|
|
80
|
+
- **Agent-swarm hooks**: Remain unchanged (agent-swarm's PreToolUse handles task cancellation and loop detection, which is orthogonal to context-mode's output compression)
|
|
81
|
+
- **Runner/session spawning**: No changes needed
|
|
82
|
+
- **SOUL.md/IDENTITY.md/TOOLS.md**: No changes needed
|
|
83
|
+
|
|
84
|
+
---
|
|
85
|
+
|
|
86
|
+
## Phase 1: Plugin Installation (Dockerfile.worker)
|
|
87
|
+
|
|
88
|
+
### 1.1 Install context-mode in the Docker image
|
|
89
|
+
|
|
90
|
+
Add the context-mode plugin installation to the Dockerfile. Two options:
|
|
91
|
+
|
|
92
|
+
**Option A: Marketplace installation (preferred)**
|
|
93
|
+
|
|
94
|
+
Add to the existing marketplace section in `docker-entrypoint.sh`:
|
|
95
|
+
|
|
96
|
+
```bash
|
|
97
|
+
# In the "=== Marketplace Installation ===" section
|
|
98
|
+
echo "Installing context-mode plugin..."
|
|
99
|
+
claude plugin marketplace add mksglu/claude-context-mode || echo "context-mode marketplace add failed, continuing..."
|
|
100
|
+
claude plugin install context-mode@mksglu-claude-context-mode --scope user || echo "context-mode plugin install failed, continuing..."
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
**Option B: Pre-install in Dockerfile**
|
|
104
|
+
|
|
105
|
+
Add to `Dockerfile.worker` after the global tools installation:
|
|
106
|
+
|
|
107
|
+
```dockerfile
|
|
108
|
+
# Pre-install context-mode dependencies for faster startup
|
|
109
|
+
RUN npm install -g context-mode
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
Then register as MCP server in docker-entrypoint.sh.
|
|
113
|
+
|
|
114
|
+
**Recommendation**: Option A (marketplace) — keeps the installation pattern consistent with existing plugins (desplega, agent-swarm, wts, qa-use) and ensures the SKILL.md behavioral instructions are loaded automatically by Claude Code's plugin system.
|
|
115
|
+
|
|
116
|
+
### 1.2 Grant MCP tool permissions
|
|
117
|
+
|
|
118
|
+
In `Dockerfile.worker`, add context-mode permissions to the settings.json:
|
|
119
|
+
|
|
120
|
+
```json
|
|
121
|
+
{
|
|
122
|
+
"permissions": {
|
|
123
|
+
"allow": ["mcp__agent-swarm__*", "mcp__context-mode__*"]
|
|
124
|
+
},
|
|
125
|
+
"enableAllProjectMcpServers": true,
|
|
126
|
+
"enabledMcpjsonServers": ["agent-swarm", "context-mode"]
|
|
127
|
+
}
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
The context-mode plugin's `plugin.json` declares the MCP server as:
|
|
131
|
+
```json
|
|
132
|
+
{
|
|
133
|
+
"mcpServers": {
|
|
134
|
+
"context-mode": {
|
|
135
|
+
"command": "node",
|
|
136
|
+
"args": ["${CLAUDE_PLUGIN_ROOT}/start.mjs"]
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
This is a stdio-based MCP server, separate from agent-swarm's HTTP MCP. Both can run simultaneously.
|
|
143
|
+
|
|
144
|
+
---
|
|
145
|
+
|
|
146
|
+
## Phase 2: Hook Coexistence
|
|
147
|
+
|
|
148
|
+
### How Hooks Work in Claude Code
|
|
149
|
+
|
|
150
|
+
Claude Code merges hooks from multiple sources:
|
|
151
|
+
1. `~/.claude/settings.json` (user-level hooks)
|
|
152
|
+
2. Plugin `hooks.json` files (per-plugin hooks)
|
|
153
|
+
|
|
154
|
+
Both fire independently for the same event. If any hook returns a "block"/"deny" decision, the tool call is blocked.
|
|
155
|
+
|
|
156
|
+
### Current Agent-Swarm Hooks (settings.json)
|
|
157
|
+
|
|
158
|
+
```json
|
|
159
|
+
{
|
|
160
|
+
"PreToolUse": [{"matcher": "*", "hooks": [{"type": "command", "command": "/usr/local/bin/agent-swarm hook"}]}]
|
|
161
|
+
}
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
Agent-swarm's PreToolUse does:
|
|
165
|
+
- Check if worker's task was cancelled → block
|
|
166
|
+
- Tool loop detection → block if looping
|
|
167
|
+
- Block poll-task when polling limit reached
|
|
168
|
+
|
|
169
|
+
### Context-Mode Hooks (plugin hooks.json)
|
|
170
|
+
|
|
171
|
+
```json
|
|
172
|
+
{
|
|
173
|
+
"PreToolUse": [
|
|
174
|
+
{"matcher": "Bash", "hooks": [...]},
|
|
175
|
+
{"matcher": "WebFetch", "hooks": [...]},
|
|
176
|
+
{"matcher": "Read", "hooks": [...]},
|
|
177
|
+
{"matcher": "Grep", "hooks": [...]},
|
|
178
|
+
{"matcher": "Task", "hooks": [...]}
|
|
179
|
+
]
|
|
180
|
+
}
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
Context-mode's PreToolUse does:
|
|
184
|
+
- Bash: blocks curl/wget, allows everything else
|
|
185
|
+
- WebFetch: **DENIES** the call, redirects to fetch_and_index
|
|
186
|
+
- Read: advisory context tip
|
|
187
|
+
- Grep: advisory context tip
|
|
188
|
+
- Task: injects routing instructions into subagent prompts
|
|
189
|
+
|
|
190
|
+
### Coexistence Analysis
|
|
191
|
+
|
|
192
|
+
These hook systems are **complementary, not conflicting**:
|
|
193
|
+
|
|
194
|
+
| Scenario | Agent-Swarm Hook | Context-Mode Hook | Result |
|
|
195
|
+
|----------|-----------------|-------------------|--------|
|
|
196
|
+
| Normal tool call | passes | passes | Tool executes |
|
|
197
|
+
| Task cancelled + any tool | blocks | may pass/block | Blocked (correct) |
|
|
198
|
+
| Tool loop detected | blocks | may pass | Blocked (correct) |
|
|
199
|
+
| `curl` in Bash | passes | blocks | Blocked, suggests context-mode (correct) |
|
|
200
|
+
| WebFetch call | passes | denies | Denied, redirects to fetch_and_index (correct) |
|
|
201
|
+
| Read large file | passes | adds advisory | Tool executes with advice (correct) |
|
|
202
|
+
| Subagent (Task) | passes | injects routing | Subagent gets context-mode instructions (correct) |
|
|
203
|
+
|
|
204
|
+
**Risk**: Context-mode's `Task` matcher intercepts the `Task` tool. Agent-swarm uses the `Agent` tool (not `Task`). Need to verify whether context-mode's `pretooluse.mjs` also handles the `Agent` tool or if it needs modification.
|
|
205
|
+
|
|
206
|
+
**Action item**: Check if `pretooluse.mjs` matches `Agent` tool calls (used by agent-swarm for subagents). If not, may need to add `Agent` to the matcher list or fork the hook.
|
|
207
|
+
|
|
208
|
+
#### Phase 2 Findings (2026-03-03)
|
|
209
|
+
|
|
210
|
+
**Confirmed: context-mode does NOT handle the `Agent` tool.** The `hooks.json` only registers matchers for 5 tools: `Bash`, `WebFetch`, `Read`, `Grep`, and `Task`. The `pretooluse.mjs` script has no conditional logic for `Agent`.
|
|
211
|
+
|
|
212
|
+
**Impact**: Agent-swarm's subagent calls (via the `Agent` tool) will pass through context-mode's hooks unmodified. The subagent routing/prompt injection that context-mode applies to `Task` will NOT apply to `Agent` calls. This means subagents won't automatically receive context-mode instructions via the hook.
|
|
213
|
+
|
|
214
|
+
**Mitigation**: This is acceptable for now because:
|
|
215
|
+
1. The base prompt enhancement (Phase 3.2) ensures all agents are aware of context-mode tools regardless.
|
|
216
|
+
2. Each agent session loads the context-mode SKILL.md via the plugin system, so subagents spawned within the same session already have context-mode behavioral instructions.
|
|
217
|
+
3. If tighter subagent routing is needed in the future, we can either: (a) submit a PR to claude-context-mode adding `Agent` to the matcher list, or (b) add our own `Agent` matcher in agent-swarm's hooks that mirrors context-mode's routing injection.
|
|
218
|
+
|
|
219
|
+
---
|
|
220
|
+
|
|
221
|
+
## Phase 3: Behavioral Configuration
|
|
222
|
+
|
|
223
|
+
### 3.1 SKILL.md Loading
|
|
224
|
+
|
|
225
|
+
When installed via marketplace, context-mode's `skills/context-mode/SKILL.md` is automatically available. This SKILL.md contains the behavioral instructions that teach Claude to:
|
|
226
|
+
|
|
227
|
+
- Default to context-mode for ALL commands
|
|
228
|
+
- Only use direct Bash for safe mutations (git, npm install, echo, etc.)
|
|
229
|
+
- Use `batch_execute` as the primary workhorse tool
|
|
230
|
+
- Follow the decision tree for different data types (CLI output, web docs, files, etc.)
|
|
231
|
+
|
|
232
|
+
### 3.2 Base Prompt Enhancement (Optional)
|
|
233
|
+
|
|
234
|
+
Consider adding a brief note to `src/prompts/base-prompt.ts` mentioning context-mode availability:
|
|
235
|
+
|
|
236
|
+
```
|
|
237
|
+
You have access to the context-mode MCP tools (batch_execute, execute, search, etc.)
|
|
238
|
+
which compress tool output to save context window space. Prefer these over raw
|
|
239
|
+
Bash/WebFetch for data-fetching operations.
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
This is **optional** since the SKILL.md already provides comprehensive behavioral instructions, but a brief mention in the base prompt ensures awareness even before the skill is activated.
|
|
243
|
+
|
|
244
|
+
---
|
|
245
|
+
|
|
246
|
+
## Phase 4: Testing & Validation
|
|
247
|
+
|
|
248
|
+
### 4.1 Functional Tests
|
|
249
|
+
|
|
250
|
+
1. **Hook coexistence**: Start a worker session and verify:
|
|
251
|
+
- Agent-swarm hooks fire correctly (task cancellation, loop detection)
|
|
252
|
+
- Context-mode hooks fire correctly (curl blocking, WebFetch denial)
|
|
253
|
+
- No hook errors or conflicts in logs
|
|
254
|
+
|
|
255
|
+
2. **MCP server availability**: Verify both MCP servers are accessible:
|
|
256
|
+
- `agent-swarm` (HTTP at `$MCP_URL/mcp`)
|
|
257
|
+
- `context-mode` (stdio, launched by plugin system)
|
|
258
|
+
|
|
259
|
+
3. **Tool execution**: Test key context-mode tools:
|
|
260
|
+
- `batch_execute` with shell commands
|
|
261
|
+
- `fetch_and_index` with a URL
|
|
262
|
+
- `search` after indexing
|
|
263
|
+
|
|
264
|
+
### 4.2 Integration Tests
|
|
265
|
+
|
|
266
|
+
1. **Research task**: Run a research task and measure:
|
|
267
|
+
- Context window usage before/after
|
|
268
|
+
- Session duration before hitting context limits
|
|
269
|
+
- Quality of research output
|
|
270
|
+
|
|
271
|
+
2. **Planning task**: Run a planning task that reads multiple files and verify context-mode intercepts large file reads.
|
|
272
|
+
|
|
273
|
+
3. **Subagent routing**: Launch a subagent via Agent tool and verify context-mode routing instructions are injected.
|
|
274
|
+
|
|
275
|
+
### 4.3 Rollback Plan
|
|
276
|
+
|
|
277
|
+
If issues arise:
|
|
278
|
+
1. Remove context-mode from marketplace installation in `docker-entrypoint.sh`
|
|
279
|
+
2. Remove permissions from `settings.json` in Dockerfile
|
|
280
|
+
3. Rebuild and redeploy containers
|
|
281
|
+
|
|
282
|
+
The change is fully reversible since context-mode is an additive plugin with no modifications to agent-swarm's core code.
|
|
283
|
+
|
|
284
|
+
---
|
|
285
|
+
|
|
286
|
+
## Risks & Mitigations
|
|
287
|
+
|
|
288
|
+
| Risk | Likelihood | Impact | Mitigation |
|
|
289
|
+
|------|-----------|--------|-----------|
|
|
290
|
+
| Hook ordering causes unexpected blocks | Low | High | Both hook systems are complementary; test thoroughly in Phase 4 |
|
|
291
|
+
| context-mode blocks WebFetch needed by some workflows | Medium | Medium | WebFetch is redirected to `fetch_and_index` which provides same data; agent-swarm tools (AgentMail, etc.) use HTTP MCP, not WebFetch |
|
|
292
|
+
| `Task` vs `Agent` tool mismatch in subagent routing | Medium | Medium | Verify and adapt pretooluse.mjs matcher; may need PR to context-mode or local fork |
|
|
293
|
+
| Performance overhead from stdio MCP + SQLite FTS5 | Low | Low | FTS5 is lightweight; SQLite is already available in Docker image |
|
|
294
|
+
| context-mode updates/breaking changes | Low | Medium | Pin to specific version; test before upgrading |
|
|
295
|
+
| Skill instructions override agent-swarm preferred behaviors | Medium | Medium | Review SKILL.md for conflicts with agent-swarm conventions; adjust if needed |
|
|
296
|
+
|
|
297
|
+
---
|
|
298
|
+
|
|
299
|
+
## Implementation Checklist
|
|
300
|
+
|
|
301
|
+
- [x] **Phase 1.1**: Add context-mode marketplace installation to `docker-entrypoint.sh` *(implemented in commit 73692e6)*
|
|
302
|
+
- [x] **Phase 1.2**: Add `mcp__context-mode__*` to permissions allow list in `Dockerfile.worker` *(implemented in commit 73692e6)*
|
|
303
|
+
- [x] **Phase 1.2**: Add `context-mode` to `enabledMcpjsonServers` in `Dockerfile.worker` *(implemented in commit 73692e6)*
|
|
304
|
+
- [x] **Phase 2**: Verify hook coexistence (especially `Agent` vs `Task` tool matching) — **Confirmed: `Agent` tool NOT matched by context-mode hooks. Acceptable; see findings above.**
|
|
305
|
+
- [x] **Phase 3.1**: Verify SKILL.md loads correctly via plugin system — **Confirmed: marketplace install auto-loads SKILL.md via Claude Code's plugin system.**
|
|
306
|
+
- [x] **Phase 3.2**: Add context-mode awareness note to `src/prompts/base-prompt.ts`
|
|
307
|
+
- [ ] **Phase 4.1**: Run functional tests for hooks and MCP servers *(requires deployed container; manual validation post-deploy)*
|
|
308
|
+
- [ ] **Phase 4.2**: Run integration test with research task *(requires deployed container; manual validation post-deploy)*
|
|
309
|
+
- [x] **Phase 4.3**: Document rollback procedure *(already documented in plan — remove from docker-entrypoint.sh + Dockerfile.worker, rebuild)*
|
|
310
|
+
|
|
311
|
+
---
|
|
312
|
+
|
|
313
|
+
## Relationship to Existing Work
|
|
314
|
+
|
|
315
|
+
This plan complements the existing [MCP Tool Context Reduction plan](thoughts/shared/plans/2026-02-26-mcp-tool-context-reduction.md) (PR #95). That plan focuses on reducing the *tool definitions* overhead (~14K tokens from 50 tools). This plan focuses on reducing the *tool output* overhead (raw data from tool calls). Both can be applied together for maximum context savings:
|
|
316
|
+
|
|
317
|
+
- **Tool definitions**: ~14K → ~4.5K tokens (from tool annotations + Tool Search)
|
|
318
|
+
- **Tool output**: ~315 KB → ~5.4 KB per research session (from context-mode)
|
|
319
|
+
|
|
320
|
+
## Files to Modify
|
|
321
|
+
|
|
322
|
+
| File | Change |
|
|
323
|
+
|------|--------|
|
|
324
|
+
| `docker-entrypoint.sh` | Add marketplace installation commands (~3 lines) |
|
|
325
|
+
| `Dockerfile.worker` | Update settings.json to include context-mode permissions (~2 lines) |
|
|
326
|
+
| `src/prompts/base-prompt.ts` | (Optional) Add context-mode awareness note (~3 lines) |
|
|
327
|
+
|
|
328
|
+
**Total estimated changes**: ~8-10 lines across 2-3 files. This is a low-risk, high-impact integration.
|