@desplega.ai/agent-swarm 1.49.0 → 1.52.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/openapi.json +2070 -728
- package/package.json +10 -1
- package/src/agentmail/handlers.ts +65 -10
- package/src/agentmail/templates.ts +111 -0
- package/src/be/db.ts +1233 -7
- package/src/be/migrations/014_prompt_templates.sql +33 -0
- package/src/be/migrations/015_workflow_workspace.sql +3 -0
- package/src/be/migrations/016_active_session_runner_session.sql +4 -0
- package/src/be/migrations/017_channel_activity_cursors.sql +6 -0
- package/src/be/migrations/018_fix_seed_double_version.sql +30 -0
- package/src/be/migrations/019_skills.sql +65 -0
- package/src/be/migrations/020_approval_requests.sql +41 -0
- package/src/be/seed.ts +62 -0
- package/src/be/skill-parser.ts +70 -0
- package/src/be/skill-sync.ts +106 -0
- package/src/commands/runner.ts +320 -132
- package/src/commands/templates.ts +172 -0
- package/src/github/handlers.ts +292 -77
- package/src/github/mentions-aliases.test.ts +73 -0
- package/src/github/mentions.test.ts +3 -3
- package/src/github/mentions.ts +32 -6
- package/src/github/templates.ts +398 -0
- package/src/gitlab/handlers.ts +63 -22
- package/src/gitlab/templates.ts +140 -0
- package/src/heartbeat/heartbeat.ts +19 -10
- package/src/heartbeat/templates.ts +30 -0
- package/src/http/active-sessions.ts +27 -0
- package/src/http/approval-requests.ts +247 -0
- package/src/http/config.ts +3 -3
- package/src/http/index.ts +9 -2
- package/src/http/poll.ts +135 -14
- package/src/http/prompt-templates.ts +412 -0
- package/src/http/schedules.ts +35 -0
- package/src/http/skills.ts +479 -0
- package/src/http/workflows.ts +8 -0
- package/src/linear/sync.ts +28 -4
- package/src/linear/templates.ts +47 -0
- package/src/prompts/base-prompt.ts +41 -490
- package/src/prompts/registry.ts +57 -0
- package/src/prompts/resolver.ts +296 -0
- package/src/prompts/session-templates.ts +604 -0
- package/src/providers/claude-adapter.ts +15 -2
- package/src/providers/pi-mono-extension.ts +5 -1
- package/src/scheduler/scheduler.ts +125 -91
- package/src/server.ts +44 -0
- package/src/slack/assistant.ts +7 -4
- package/src/slack/channel-activity.ts +177 -0
- package/src/slack/handlers.ts +21 -6
- package/src/slack/templates.ts +55 -0
- package/src/tests/approval-requests.test.ts +735 -0
- package/src/tests/artifact-sdk.test.ts +12 -12
- package/src/tests/base-prompt.test.ts +49 -49
- package/src/tests/channel-activity.test.ts +363 -0
- package/src/tests/heartbeat.test.ts +1 -0
- package/src/tests/linear-webhook.test.ts +7 -3
- package/src/tests/pool-session-logs.test.ts +199 -0
- package/src/tests/prompt-template-github.test.ts +682 -0
- package/src/tests/prompt-template-remaining.test.ts +504 -0
- package/src/tests/prompt-template-resolver.test.ts +621 -0
- package/src/tests/prompt-template-session.test.ts +363 -0
- package/src/tests/prompt-templates-db.test.ts +616 -0
- package/src/tests/self-improvement.test.ts +8 -7
- package/src/tests/skill-parser.test.ts +178 -0
- package/src/tests/skill-sync.test.ts +171 -0
- package/src/tests/slack-metadata-inheritance.test.ts +1 -1
- package/src/tests/slack-thread-followups.test.ts +1 -1
- package/src/tests/structured-output.test.ts +0 -4
- package/src/tests/tool-annotations.test.ts +2 -1
- package/src/tests/update-profile-agentid.test.ts +248 -0
- package/src/tests/update-profile-auth.test.ts +195 -0
- package/src/tests/workflow-async-v2.test.ts +126 -4
- package/src/tests/workflow-definition-validation.test.ts +76 -0
- package/src/tests/workflow-executors.test.ts +4 -2
- package/src/tests/workflow-retry-v2.test.ts +1 -1
- package/src/tests/workflow-schedule-trigger.test.ts +104 -0
- package/src/tests/workflow-workspace.test.ts +272 -0
- package/src/tools/prompt-templates/delete.ts +86 -0
- package/src/tools/prompt-templates/get.ts +89 -0
- package/src/tools/prompt-templates/index.ts +5 -0
- package/src/tools/prompt-templates/list.ts +95 -0
- package/src/tools/prompt-templates/preview.ts +84 -0
- package/src/tools/prompt-templates/set.ts +117 -0
- package/src/tools/request-human-input.ts +106 -0
- package/src/tools/skills/index.ts +11 -0
- package/src/tools/skills/skill-create.ts +105 -0
- package/src/tools/skills/skill-delete.ts +67 -0
- package/src/tools/skills/skill-get.ts +75 -0
- package/src/tools/skills/skill-install-remote.ts +152 -0
- package/src/tools/skills/skill-install.ts +101 -0
- package/src/tools/skills/skill-list.ts +77 -0
- package/src/tools/skills/skill-publish.ts +123 -0
- package/src/tools/skills/skill-search.ts +43 -0
- package/src/tools/skills/skill-sync-remote.ts +128 -0
- package/src/tools/skills/skill-uninstall.ts +60 -0
- package/src/tools/skills/skill-update.ts +128 -0
- package/src/tools/store-progress.ts +22 -4
- package/src/tools/task-action.ts +20 -0
- package/src/tools/templates.ts +53 -0
- package/src/tools/tool-config.ts +23 -0
- package/src/tools/update-profile.ts +106 -34
- package/src/tools/workflows/create-workflow.ts +19 -1
- package/src/tools/workflows/update-workflow.ts +16 -1
- package/src/types.ts +109 -2
- package/src/workflows/definition.ts +30 -12
- package/src/workflows/engine.ts +40 -14
- package/src/workflows/executors/agent-task.ts +14 -3
- package/src/workflows/executors/human-in-the-loop.ts +160 -0
- package/src/workflows/executors/registry.ts +2 -0
- package/src/workflows/index.ts +1 -1
- package/src/workflows/recovery.ts +72 -0
- package/src/workflows/resume.ts +162 -12
- package/src/workflows/triggers.ts +31 -2
- package/src/workflows/version.ts +2 -0
- package/.claude/settings.json +0 -84
- package/.claude/settings.local.json +0 -117
- package/.dockerignore +0 -61
- package/.editorconfig +0 -15
- package/.entire/settings.json +0 -4
- package/.env.docker.example +0 -56
- package/.env.example +0 -78
- package/.github/ISSUE_TEMPLATE/bug_report.yml +0 -78
- package/.github/ISSUE_TEMPLATE/community-template.yml +0 -77
- package/.github/ISSUE_TEMPLATE/config.yml +0 -8
- package/.github/ISSUE_TEMPLATE/feature_request.yml +0 -60
- package/.github/PULL_REQUEST_TEMPLATE/community-template.md +0 -29
- package/.github/workflows/ci.yml +0 -52
- package/.github/workflows/docker-and-deploy.yml +0 -132
- package/.github/workflows/merge-gate.yml +0 -233
- package/.opencode/plugins/entire.ts +0 -133
- package/.superset/config.json +0 -6
- package/.wts-config.json +0 -4
- package/.wts-setup.ts +0 -171
- package/CHANGELOG.md +0 -447
- package/CLAUDE.md +0 -521
- package/CONTRIBUTING.md +0 -315
- package/DEPLOYMENT.md +0 -622
- package/Dockerfile +0 -65
- package/Dockerfile.worker +0 -189
- package/MCP.md +0 -841
- package/UI.md +0 -40
- package/api-entrypoint.sh +0 -56
- package/assets/agent-swarm-logo-orange.png +0 -0
- package/assets/agent-swarm-logo.png +0 -0
- package/assets/agent-swarm.mp4 +0 -0
- package/assets/agent-swarm.png +0 -0
- package/biome.json +0 -39
- package/deploy/DEPLOY.md +0 -60
- package/deploy/agent-swarm.service +0 -17
- package/deploy/docker-push.ts +0 -30
- package/deploy/install.ts +0 -85
- package/deploy/prod-db.ts +0 -42
- package/deploy/uninstall.ts +0 -12
- package/deploy/update.ts +0 -21
- package/depot.json +0 -1
- package/docker-compose.example.yml +0 -350
- package/docker-compose.local.yml +0 -119
- package/docker-entrypoint.sh +0 -632
- package/docs-site/app/api/search/route.ts +0 -4
- package/docs-site/app/docs/[[...slug]]/page.tsx +0 -87
- package/docs-site/app/docs/layout.tsx +0 -12
- package/docs-site/app/globals.css +0 -24
- package/docs-site/app/layout.config.tsx +0 -34
- package/docs-site/app/layout.tsx +0 -119
- package/docs-site/app/llms-full.txt/route.ts +0 -11
- package/docs-site/app/llms.mdx/docs/[[...slug]]/route.ts +0 -24
- package/docs-site/app/llms.txt/route.ts +0 -8
- package/docs-site/app/page.tsx +0 -5
- package/docs-site/app/robots.ts +0 -13
- package/docs-site/app/sitemap.ts +0 -37
- package/docs-site/components/api-page.client.tsx +0 -4
- package/docs-site/components/api-page.tsx +0 -7
- package/docs-site/components/mdx/mermaid.tsx +0 -55
- package/docs-site/content/docs/(documentation)/architecture/agents.mdx +0 -117
- package/docs-site/content/docs/(documentation)/architecture/hooks.mdx +0 -77
- package/docs-site/content/docs/(documentation)/architecture/memory.mdx +0 -96
- package/docs-site/content/docs/(documentation)/architecture/meta.json +0 -4
- package/docs-site/content/docs/(documentation)/architecture/overview.mdx +0 -172
- package/docs-site/content/docs/(documentation)/concepts/epics.mdx +0 -98
- package/docs-site/content/docs/(documentation)/concepts/meta.json +0 -4
- package/docs-site/content/docs/(documentation)/concepts/scheduling.mdx +0 -136
- package/docs-site/content/docs/(documentation)/concepts/services.mdx +0 -104
- package/docs-site/content/docs/(documentation)/concepts/task-lifecycle.mdx +0 -148
- package/docs-site/content/docs/(documentation)/concepts/workflows.mdx +0 -209
- package/docs-site/content/docs/(documentation)/contributing.mdx +0 -158
- package/docs-site/content/docs/(documentation)/getting-started.mdx +0 -157
- package/docs-site/content/docs/(documentation)/guides/agentmail-integration.mdx +0 -79
- package/docs-site/content/docs/(documentation)/guides/deployment.mdx +0 -171
- package/docs-site/content/docs/(documentation)/guides/github-integration.mdx +0 -81
- package/docs-site/content/docs/(documentation)/guides/gitlab-integration.mdx +0 -93
- package/docs-site/content/docs/(documentation)/guides/linear-integration.mdx +0 -98
- package/docs-site/content/docs/(documentation)/guides/meta.json +0 -13
- package/docs-site/content/docs/(documentation)/guides/sentry-integration.mdx +0 -52
- package/docs-site/content/docs/(documentation)/guides/slack-integration.mdx +0 -179
- package/docs-site/content/docs/(documentation)/guides/x402-payments.mdx +0 -154
- package/docs-site/content/docs/(documentation)/index.mdx +0 -65
- package/docs-site/content/docs/(documentation)/meta.json +0 -19
- package/docs-site/content/docs/(documentation)/reference/cli.mdx +0 -241
- package/docs-site/content/docs/(documentation)/reference/environment-variables.mdx +0 -205
- package/docs-site/content/docs/(documentation)/reference/mcp-tools.mdx +0 -449
- package/docs-site/content/docs/(documentation)/reference/meta.json +0 -4
- package/docs-site/content/docs/api-reference/active-sessions.mdx +0 -9
- package/docs-site/content/docs/api-reference/agents.mdx +0 -9
- package/docs-site/content/docs/api-reference/channels.mdx +0 -9
- package/docs-site/content/docs/api-reference/config.mdx +0 -9
- package/docs-site/content/docs/api-reference/debug.mdx +0 -9
- package/docs-site/content/docs/api-reference/ecosystem.mdx +0 -9
- package/docs-site/content/docs/api-reference/epics.mdx +0 -9
- package/docs-site/content/docs/api-reference/index.mdx +0 -32
- package/docs-site/content/docs/api-reference/memory.mdx +0 -9
- package/docs-site/content/docs/api-reference/meta.json +0 -25
- package/docs-site/content/docs/api-reference/poll.mdx +0 -9
- package/docs-site/content/docs/api-reference/repos.mdx +0 -9
- package/docs-site/content/docs/api-reference/schedules.mdx +0 -9
- package/docs-site/content/docs/api-reference/session-data.mdx +0 -9
- package/docs-site/content/docs/api-reference/stats.mdx +0 -9
- package/docs-site/content/docs/api-reference/tasks.mdx +0 -9
- package/docs-site/content/docs/api-reference/trackers.mdx +0 -9
- package/docs-site/content/docs/api-reference/webhooks.mdx +0 -9
- package/docs-site/content/docs/api-reference/workflows.mdx +0 -9
- package/docs-site/content/docs/meta.json +0 -3
- package/docs-site/lib/get-llm-text.ts +0 -10
- package/docs-site/lib/openapi.ts +0 -23
- package/docs-site/lib/source.ts +0 -8
- package/docs-site/mdx-components.tsx +0 -13
- package/docs-site/next.config.mjs +0 -29
- package/docs-site/package.json +0 -35
- package/docs-site/pnpm-lock.yaml +0 -5407
- package/docs-site/postcss.config.mjs +0 -8
- package/docs-site/public/logo.png +0 -0
- package/docs-site/scripts/generate-docs.ts +0 -171
- package/docs-site/source.config.ts +0 -17
- package/docs-site/tsconfig.json +0 -46
- package/ecosystem.config.cjs +0 -66
- package/landing/next.config.ts +0 -14
- package/landing/package.json +0 -31
- package/landing/pnpm-lock.yaml +0 -1091
- package/landing/postcss.config.mjs +0 -8
- package/landing/public/apple-touch-icon.png +0 -0
- package/landing/public/favicon.ico +0 -0
- package/landing/public/logo.png +0 -0
- package/landing/public/og-image.png +0 -0
- package/landing/public/omghost-desplega.svg +0 -30
- package/landing/public/omghost-openfort.svg +0 -9
- package/landing/src/app/actions/waitlist.ts +0 -25
- package/landing/src/app/blog/openfort-hackathon/page.tsx +0 -863
- package/landing/src/app/blog/page.tsx +0 -162
- package/landing/src/app/blog/swarm-metrics/page.tsx +0 -685
- package/landing/src/app/examples/page.tsx +0 -174
- package/landing/src/app/examples/x402/page.tsx +0 -456
- package/landing/src/app/globals.css +0 -122
- package/landing/src/app/layout.tsx +0 -134
- package/landing/src/app/page.tsx +0 -27
- package/landing/src/app/robots.ts +0 -13
- package/landing/src/app/sitemap.ts +0 -44
- package/landing/src/components/architecture.tsx +0 -163
- package/landing/src/components/cta.tsx +0 -52
- package/landing/src/components/features.tsx +0 -160
- package/landing/src/components/footer.tsx +0 -100
- package/landing/src/components/hero.tsx +0 -217
- package/landing/src/components/how-it-works.tsx +0 -165
- package/landing/src/components/navbar.tsx +0 -147
- package/landing/src/components/waitlist.tsx +0 -110
- package/landing/src/components/why-choose.tsx +0 -149
- package/landing/src/components/workshops.tsx +0 -328
- package/landing/src/lib/utils.ts +0 -6
- package/landing/tsconfig.json +0 -41
- package/misc/transcripts/2026-03-09-pi-mono-e2e-verification.md +0 -154
- package/new-ui/CLAUDE.md +0 -92
- package/new-ui/README.md +0 -73
- package/new-ui/biome.json +0 -42
- package/new-ui/components.json +0 -21
- package/new-ui/index.html +0 -25
- package/new-ui/package.json +0 -49
- package/new-ui/pnpm-lock.yaml +0 -4845
- package/new-ui/public/logo.png +0 -0
- package/new-ui/src/api/client.ts +0 -814
- package/new-ui/src/api/hooks/index.ts +0 -64
- package/new-ui/src/api/hooks/use-agents.ts +0 -58
- package/new-ui/src/api/hooks/use-channels.ts +0 -115
- package/new-ui/src/api/hooks/use-config-api.ts +0 -46
- package/new-ui/src/api/hooks/use-costs.ts +0 -122
- package/new-ui/src/api/hooks/use-db-query.ts +0 -29
- package/new-ui/src/api/hooks/use-epics.ts +0 -75
- package/new-ui/src/api/hooks/use-repos.ts +0 -61
- package/new-ui/src/api/hooks/use-schedules.ts +0 -81
- package/new-ui/src/api/hooks/use-services.ts +0 -16
- package/new-ui/src/api/hooks/use-stats.ts +0 -27
- package/new-ui/src/api/hooks/use-tasks.ts +0 -89
- package/new-ui/src/api/hooks/use-workflows.ts +0 -109
- package/new-ui/src/api/types.ts +0 -549
- package/new-ui/src/app/App.tsx +0 -13
- package/new-ui/src/app/providers.tsx +0 -32
- package/new-ui/src/app/router.tsx +0 -52
- package/new-ui/src/components/layout/app-header.tsx +0 -47
- package/new-ui/src/components/layout/app-sidebar.tsx +0 -128
- package/new-ui/src/components/layout/breadcrumbs.tsx +0 -57
- package/new-ui/src/components/layout/config-guard.tsx +0 -22
- package/new-ui/src/components/layout/root-layout.tsx +0 -40
- package/new-ui/src/components/layout/swarm-switcher.tsx +0 -85
- package/new-ui/src/components/shared/command-menu.tsx +0 -131
- package/new-ui/src/components/shared/data-grid.tsx +0 -141
- package/new-ui/src/components/shared/empty-state.tsx +0 -24
- package/new-ui/src/components/shared/error-boundary.tsx +0 -72
- package/new-ui/src/components/shared/json-viewer.tsx +0 -47
- package/new-ui/src/components/shared/name-connection-modal.tsx +0 -99
- package/new-ui/src/components/shared/page-skeleton.tsx +0 -16
- package/new-ui/src/components/shared/session-log-viewer.tsx +0 -364
- package/new-ui/src/components/shared/stats-bar.tsx +0 -132
- package/new-ui/src/components/shared/status-badge.tsx +0 -131
- package/new-ui/src/components/shared/usage-summary.tsx +0 -179
- package/new-ui/src/components/ui/alert-dialog.tsx +0 -176
- package/new-ui/src/components/ui/alert.tsx +0 -60
- package/new-ui/src/components/ui/avatar.tsx +0 -96
- package/new-ui/src/components/ui/badge.tsx +0 -46
- package/new-ui/src/components/ui/button.tsx +0 -62
- package/new-ui/src/components/ui/card.tsx +0 -75
- package/new-ui/src/components/ui/command.tsx +0 -160
- package/new-ui/src/components/ui/dialog.tsx +0 -143
- package/new-ui/src/components/ui/dropdown-menu.tsx +0 -226
- package/new-ui/src/components/ui/input.tsx +0 -21
- package/new-ui/src/components/ui/label.tsx +0 -19
- package/new-ui/src/components/ui/progress.tsx +0 -26
- package/new-ui/src/components/ui/scroll-area.tsx +0 -54
- package/new-ui/src/components/ui/select.tsx +0 -175
- package/new-ui/src/components/ui/separator.tsx +0 -28
- package/new-ui/src/components/ui/sheet.tsx +0 -132
- package/new-ui/src/components/ui/sidebar.tsx +0 -691
- package/new-ui/src/components/ui/skeleton.tsx +0 -13
- package/new-ui/src/components/ui/sonner.tsx +0 -35
- package/new-ui/src/components/ui/switch.tsx +0 -33
- package/new-ui/src/components/ui/table.tsx +0 -92
- package/new-ui/src/components/ui/tabs.tsx +0 -79
- package/new-ui/src/components/ui/textarea.tsx +0 -18
- package/new-ui/src/components/ui/tooltip.tsx +0 -51
- package/new-ui/src/components/workflows/action-node.tsx +0 -53
- package/new-ui/src/components/workflows/condition-node.tsx +0 -50
- package/new-ui/src/components/workflows/graph-utils.ts +0 -124
- package/new-ui/src/components/workflows/json-tree.tsx +0 -189
- package/new-ui/src/components/workflows/node-styles.ts +0 -10
- package/new-ui/src/components/workflows/step-detail-sheet.tsx +0 -87
- package/new-ui/src/components/workflows/trigger-node.tsx +0 -41
- package/new-ui/src/components/workflows/workflow-graph.tsx +0 -65
- package/new-ui/src/hooks/use-auto-scroll.ts +0 -82
- package/new-ui/src/hooks/use-config.ts +0 -203
- package/new-ui/src/hooks/use-keyboard-shortcuts.ts +0 -41
- package/new-ui/src/hooks/use-mobile.ts +0 -19
- package/new-ui/src/hooks/use-theme.ts +0 -60
- package/new-ui/src/lib/config.ts +0 -188
- package/new-ui/src/lib/slugs.ts +0 -71
- package/new-ui/src/lib/utils.ts +0 -120
- package/new-ui/src/main.tsx +0 -11
- package/new-ui/src/pages/agents/[id]/page.tsx +0 -492
- package/new-ui/src/pages/agents/page.tsx +0 -134
- package/new-ui/src/pages/chat/page.tsx +0 -674
- package/new-ui/src/pages/config/page.tsx +0 -1109
- package/new-ui/src/pages/dashboard/page.tsx +0 -454
- package/new-ui/src/pages/debug/page.tsx +0 -275
- package/new-ui/src/pages/epics/[id]/page.tsx +0 -809
- package/new-ui/src/pages/epics/page.tsx +0 -321
- package/new-ui/src/pages/not-found/page.tsx +0 -18
- package/new-ui/src/pages/repos/page.tsx +0 -369
- package/new-ui/src/pages/schedules/[id]/page.tsx +0 -664
- package/new-ui/src/pages/schedules/page.tsx +0 -477
- package/new-ui/src/pages/services/page.tsx +0 -128
- package/new-ui/src/pages/tasks/[id]/page.tsx +0 -670
- package/new-ui/src/pages/tasks/page.tsx +0 -592
- package/new-ui/src/pages/usage/page.tsx +0 -195
- package/new-ui/src/pages/workflow-runs/[id]/page.tsx +0 -363
- package/new-ui/src/pages/workflows/[id]/page.tsx +0 -417
- package/new-ui/src/pages/workflows/page.tsx +0 -266
- package/new-ui/src/styles/ag-grid.css +0 -36
- package/new-ui/src/styles/globals.css +0 -213
- package/new-ui/test-results/.last-run.json +0 -4
- package/new-ui/tsconfig.app.json +0 -34
- package/new-ui/tsconfig.json +0 -4
- package/new-ui/tsconfig.node.json +0 -26
- package/new-ui/vercel.json +0 -4
- package/new-ui/vite.config.ts +0 -28
- package/plugin/README.md +0 -1
- package/plugin/build-pi-skills.ts +0 -233
- package/plugin/hooks/hooks.json +0 -71
- package/prek.toml +0 -75
- package/pyproject.toml +0 -9
- package/scripts/check-db-boundary.sh +0 -60
- package/scripts/e2e-docker-provider.ts +0 -820
- package/scripts/e2e-io-schemas-test.ts +0 -807
- package/scripts/e2e-provider-test.ts +0 -220
- package/scripts/e2e-workflow-redesign.sh +0 -229
- package/scripts/e2e-workflow-test.sh +0 -285
- package/scripts/e2e-workflow-test.ts +0 -857
- package/scripts/generate-mcp-docs.ts +0 -415
- package/scripts/generate-openapi.ts +0 -26
- package/scripts/measure-tool-tokens.ts +0 -118
- package/scripts/x402-e2e-test.ts +0 -195
- package/scripts/x402-test-server.ts +0 -236
- package/scripts/x402-testnet-e2e.ts +0 -668
- package/slack-manifest.json +0 -88
- package/templates-ui/README.md +0 -46
- package/templates-ui/components.json +0 -17
- package/templates-ui/eslint.config.mjs +0 -18
- package/templates-ui/next.config.ts +0 -7
- package/templates-ui/package.json +0 -35
- package/templates-ui/pnpm-lock.yaml +0 -4571
- package/templates-ui/postcss.config.mjs +0 -7
- package/templates-ui/public/file.svg +0 -1
- package/templates-ui/public/globe.svg +0 -1
- package/templates-ui/public/logo.png +0 -0
- package/templates-ui/public/next.svg +0 -1
- package/templates-ui/public/vercel.svg +0 -1
- package/templates-ui/public/window.svg +0 -1
- package/templates-ui/src/app/[category]/[name]/page.tsx +0 -89
- package/templates-ui/src/app/api/templates/[...slug]/route.ts +0 -52
- package/templates-ui/src/app/api/templates/route.ts +0 -18
- package/templates-ui/src/app/builder/page.tsx +0 -37
- package/templates-ui/src/app/globals.css +0 -94
- package/templates-ui/src/app/layout.tsx +0 -79
- package/templates-ui/src/app/page.tsx +0 -38
- package/templates-ui/src/app/robots.ts +0 -11
- package/templates-ui/src/app/sitemap.ts +0 -31
- package/templates-ui/src/components/compose-builder.tsx +0 -442
- package/templates-ui/src/components/compose-preview.tsx +0 -117
- package/templates-ui/src/components/file-preview.tsx +0 -77
- package/templates-ui/src/components/footer.tsx +0 -40
- package/templates-ui/src/components/header.tsx +0 -41
- package/templates-ui/src/components/template-card.tsx +0 -87
- package/templates-ui/src/components/template-detail.tsx +0 -125
- package/templates-ui/src/components/template-gallery.tsx +0 -263
- package/templates-ui/src/components/ui/badge.tsx +0 -36
- package/templates-ui/src/components/ui/button.tsx +0 -57
- package/templates-ui/src/components/ui/card.tsx +0 -76
- package/templates-ui/src/components/ui/separator.tsx +0 -31
- package/templates-ui/src/components/ui/tooltip.tsx +0 -32
- package/templates-ui/src/lib/compose-generator.ts +0 -241
- package/templates-ui/src/lib/templates.ts +0 -137
- package/templates-ui/src/lib/utils.ts +0 -6
- package/templates-ui/tsconfig.json +0 -34
- package/thoughts/research/2026-02-28-openfort-viem-x402-research.md +0 -679
- package/thoughts/research/2026-02-28-x402-payments-research.md +0 -686
- package/thoughts/researcher/plans/2026-02-20-agent-self-improvement-plan.md +0 -282
- package/thoughts/researcher/research/2026-02-20-agent-self-improvement.md +0 -492
- package/thoughts/shared/plans/.gitkeep +0 -0
- package/thoughts/shared/plans/2025-12-18-slack-integration.md +0 -1195
- package/thoughts/shared/plans/2025-12-19-agent-log-streaming.md +0 -732
- package/thoughts/shared/plans/2025-12-19-role-based-swarm-plugin.md +0 -361
- package/thoughts/shared/plans/2025-12-20-mobile-responsive-ui.md +0 -501
- package/thoughts/shared/plans/2025-12-20-startup-team-swarm.md +0 -560
- package/thoughts/shared/plans/2025-12-23-runner-level-polling.md +0 -934
- package/thoughts/shared/plans/2025-12-23-runner-session-logs.md +0 -1000
- package/thoughts/shared/plans/2025-12-23-worker-lead-spawn-triggers.md +0 -568
- package/thoughts/shared/plans/2026-01-09-inverse-teleport.md +0 -1516
- package/thoughts/shared/plans/2026-01-12-agent-rename-pm2-control.md +0 -1133
- package/thoughts/shared/plans/2026-01-12-github-app-integration.md +0 -380
- package/thoughts/shared/plans/2026-01-12-lead-inbox-model.md +0 -876
- package/thoughts/shared/plans/2026-01-12-ralph-wiggum-integration.md +0 -463
- package/thoughts/shared/plans/2026-01-13-agent-concurrency.md +0 -691
- package/thoughts/shared/plans/2026-01-13-github-assignment-handling.md +0 -690
- package/thoughts/shared/plans/2026-01-13-prevent-duplicate-trigger-processing.md +0 -1071
- package/thoughts/shared/plans/2026-01-14-fix-slack-thread-context.md +0 -507
- package/thoughts/shared/plans/2026-01-15-scheduled-tasks-implementation.md +0 -565
- package/thoughts/shared/plans/2026-01-15-usage-cost-tracking-ui.md +0 -1479
- package/thoughts/shared/plans/2026-01-16-epics-feature-implementation.md +0 -1230
- package/thoughts/shared/plans/2026-02-26-mcp-tool-context-reduction.md +0 -282
- package/thoughts/shared/plans/2026-03-02-claude-context-mode-integration.md +0 -328
- package/thoughts/shared/plans/2026-03-02-code-level-heartbeat.md +0 -224
- package/thoughts/shared/research/.gitkeep +0 -0
- package/thoughts/shared/research/2025-01-09-inverse-teleport-plan-review.md +0 -420
- package/thoughts/shared/research/2025-12-18-slack-integration.md +0 -442
- package/thoughts/shared/research/2025-12-19-agent-log-streaming.md +0 -339
- package/thoughts/shared/research/2025-12-19-agent-secrets-cli-research.md +0 -390
- package/thoughts/shared/research/2025-12-21-gemini-cli-integration.md +0 -376
- package/thoughts/shared/research/2025-12-22-runner-loop-architecture.md +0 -582
- package/thoughts/shared/research/2025-12-22-setup-experience-improvements.md +0 -264
- package/thoughts/shared/research/2026-01-13-lead-duplicate-trigger-processing.md +0 -223
- package/thoughts/shared/research/2026-01-14-lead-slack-thread-context.md +0 -277
- package/thoughts/shared/research/2026-01-15-ai-tracker-agent-swarm-integration.md +0 -376
- package/thoughts/shared/research/2026-01-15-auto-starting-processes-in-worker-containers.md +0 -787
- package/thoughts/shared/research/2026-01-15-scheduled-tasks.md +0 -390
- package/thoughts/shared/research/2026-01-16-epics-feature-research.md +0 -437
- package/thoughts/shared/research/2026-02-26-cliffy-mcp-tools.md +0 -159
- package/thoughts/shared/research/2026-03-03-database-migration-system-refactor.md +0 -337
- package/thoughts/swarm-researcher/plans/2026-02-23-openclaw-improvements-plan.md +0 -778
- package/thoughts/swarm-researcher/plans/2026-02-26-artifacts-localtunnel-plan.md +0 -1269
- package/thoughts/swarm-researcher/research/2026-02-23-openclaw-vs-agent-swarm-comparison.md +0 -411
- package/thoughts/swarm-researcher/research/2026-02-26-artifacts-localtunnel.md +0 -724
- package/thoughts/taras/brainstorms/2026-03-20-prompt-template-registry.md +0 -443
- package/thoughts/taras/brainstorms/2026-03-20-setup-cli-onboarding.md +0 -307
- package/thoughts/taras/plans/2026-01-22-agent-swarm-schemas.md +0 -98
- package/thoughts/taras/plans/2026-01-28-per-worker-claude-md.md +0 -617
- package/thoughts/taras/plans/2026-01-28-sentry-cli-integration.md +0 -214
- package/thoughts/taras/plans/2026-02-20-auto-improvement.md +0 -803
- package/thoughts/taras/plans/2026-02-20-env-management.md +0 -538
- package/thoughts/taras/plans/2026-02-20-memory-system.md +0 -882
- package/thoughts/taras/plans/2026-02-20-repos-knowledge.md +0 -806
- package/thoughts/taras/plans/2026-02-20-session-attach.md +0 -647
- package/thoughts/taras/plans/2026-02-20-worker-identity.md +0 -820
- package/thoughts/taras/plans/2026-02-25-feat-new-ui-visual-redesign-plan.md +0 -768
- package/thoughts/taras/plans/2026-03-04-fix-buildSystemPrompt-missing-fields.md +0 -77
- package/thoughts/taras/plans/2026-03-04-new-ui-missing-actions.md +0 -543
- package/thoughts/taras/plans/2026-03-06-one-time-scheduled-tasks.md +0 -373
- package/thoughts/taras/plans/2026-03-08-memory-self-improvement-enhancements.md +0 -512
- package/thoughts/taras/plans/2026-03-08-pi-mono-provider-implementation.md +0 -919
- package/thoughts/taras/plans/2026-03-09-templates-registry.md +0 -723
- package/thoughts/taras/plans/2026-03-10-task-working-directory.md +0 -371
- package/thoughts/taras/plans/2026-03-11-archil-per-agent-write-strategy.md +0 -621
- package/thoughts/taras/plans/2026-03-12-eliminate-inbox-route-to-tasks.md +0 -61
- package/thoughts/taras/plans/2026-03-12-slack-thread-followup-additive.md +0 -488
- package/thoughts/taras/plans/2026-03-13-slack-ai-improvements.md +0 -644
- package/thoughts/taras/plans/2026-03-16-route-wrapper-openapi.md +0 -636
- package/thoughts/taras/plans/2026-03-17-multi-api-config.md +0 -444
- package/thoughts/taras/plans/2026-03-18-agent-fs-integration.md +0 -591
- package/thoughts/taras/plans/2026-03-18-debug-db-explorer.md +0 -446
- package/thoughts/taras/plans/2026-03-18-workflow-redesign.md +0 -987
- package/thoughts/taras/plans/2026-03-19-compound-learnings.md +0 -403
- package/thoughts/taras/plans/2026-03-19-ticket-tracker-linear-integration.md +0 -860
- package/thoughts/taras/plans/2026-03-19-workflow-io-schemas-and-bugs.md +0 -899
- package/thoughts/taras/plans/2026-03-20-setup-cli-onboarding.md +0 -874
- package/thoughts/taras/plans/2026-03-20-workflow-structured-output-validation-workspace.md +0 -723
- package/thoughts/taras/research/2026-01-22-vercel-cli-integration.md +0 -287
- package/thoughts/taras/research/2026-01-27-excessive-polling-issue.md +0 -311
- package/thoughts/taras/research/2026-01-28-per-worker-claude-md.md +0 -383
- package/thoughts/taras/research/2026-01-28-sentry-cli-integration.md +0 -240
- package/thoughts/taras/research/2026-02-19-agent-native-swarm-architecture.md +0 -390
- package/thoughts/taras/research/2026-02-19-swarm-gaps-implementation.md +0 -594
- package/thoughts/taras/research/2026-02-25-dashboard-ui-design-best-practices.md +0 -825
- package/thoughts/taras/research/2026-02-26-task-detail-page-redesign.md +0 -393
- package/thoughts/taras/research/2026-03-03-new-ui-missing-actions.md +0 -168
- package/thoughts/taras/research/2026-03-05-pi-mono-provider-research.md +0 -230
- package/thoughts/taras/research/2026-03-06-workflow-engine-design.md +0 -445
- package/thoughts/taras/research/2026-03-08-drive-loop-concept.md +0 -375
- package/thoughts/taras/research/2026-03-08-pi-mono-deep-dive.md +0 -869
- package/thoughts/taras/research/2026-03-09-templates-registry.md +0 -373
- package/thoughts/taras/research/2026-03-10-agent-working-directory.md +0 -223
- package/thoughts/taras/research/2026-03-10-configurable-event-prompts.md +0 -339
- package/thoughts/taras/research/2026-03-11-archil-production-setup.md +0 -181
- package/thoughts/taras/research/2026-03-11-archil-shared-disk-write-strategies.md +0 -437
- package/thoughts/taras/research/2026-03-13-slack-ai-features.md +0 -258
- package/thoughts/taras/research/2026-03-16-openapi-docs-generation.md +0 -335
- package/thoughts/taras/research/2026-03-16-route-wrapper-openapi.md +0 -670
- package/thoughts/taras/research/2026-03-16-slack-thread-followups-e2e.md +0 -54
- package/thoughts/taras/research/2026-03-18-agent-fs-integration.md +0 -558
- package/thoughts/taras/research/2026-03-18-linear-integration-finalization.md +0 -526
- package/thoughts/taras/research/2026-03-18-workflow-redesign.md +0 -797
- package/thoughts/taras/research/2026-03-19-workflow-node-io-schemas-and-bugs.md +0 -563
- package/thoughts/taras/research/2026-03-19-workflow-structured-output-validation-workspace.md +0 -486
- package/thoughts/taras/research/2026-03-20-prompt-template-registry.md +0 -469
- package/tsconfig.json +0 -37
|
@@ -1,617 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
date: 2026-01-28T15:30:00Z
|
|
3
|
-
topic: "Per-Worker CLAUDE.md Implementation"
|
|
4
|
-
planner: Claude (Opus 4.5)
|
|
5
|
-
git_branch: main
|
|
6
|
-
status: draft
|
|
7
|
-
tags:
|
|
8
|
-
- agents
|
|
9
|
-
- configuration
|
|
10
|
-
- CLAUDE.md
|
|
11
|
-
- workers
|
|
12
|
-
- database
|
|
13
|
-
- UI
|
|
14
|
-
---
|
|
15
|
-
|
|
16
|
-
# Per-Worker CLAUDE.md Implementation Plan
|
|
17
|
-
|
|
18
|
-
## Overview
|
|
19
|
-
|
|
20
|
-
Implement per-worker CLAUDE.md files that are stored in the database per agent, controllable from the UI, contain default worker info, can be modified by agents themselves, loaded automatically when Claude Code starts, and synced back to the database on session end.
|
|
21
|
-
|
|
22
|
-
## Current State Analysis
|
|
23
|
-
|
|
24
|
-
**Database**: The `agents` table in `src/be/db.ts:48-58` has profile fields (`description`, `role`, `capabilities`) but no `claudeMd` field.
|
|
25
|
-
|
|
26
|
-
**Profile Updates**: The `updateAgentProfile()` function at `src/be/db.ts:2117-2147` handles `description`, `role`, and `capabilities` updates using SQL `COALESCE` pattern.
|
|
27
|
-
|
|
28
|
-
**Hook System**: The `SessionStart` handler at `src/hooks/hook.ts:421-426` currently only outputs agent status. The `Stop` handler at `src/hooks/hook.ts:484-501` marks agent offline and saves PM2 state.
|
|
29
|
-
|
|
30
|
-
**UI**: `EditAgentProfileModal.tsx` handles `role`, `description`, and `capabilities` editing.
|
|
31
|
-
|
|
32
|
-
**API**: HTTP endpoint `PUT /api/agents/:id/profile` at `src/http.ts:968` accepts profile updates.
|
|
33
|
-
|
|
34
|
-
### Key Discoveries:
|
|
35
|
-
- Agent info is fetched via `getAgentInfo()` at `src/hooks/hook.ts:169-188` which calls `GET /me?include=inbox`
|
|
36
|
-
- The hook has access to `mcpConfig.headers` and `mcpConfig.url` for API calls
|
|
37
|
-
- The `AgentRow` type at `src/be/db.ts:658-670` and `rowToAgent()` at `src/be/db.ts:672-686` handle data transformation
|
|
38
|
-
- MCP server URL base is extracted via `getBaseUrl()` at `src/hooks/hook.ts:128-135`
|
|
39
|
-
|
|
40
|
-
## Desired End State
|
|
41
|
-
|
|
42
|
-
1. **Database**: `claudeMd TEXT` column exists on `agents` table with 64KB limit
|
|
43
|
-
2. **API**: Profile update endpoints accept `claudeMd` field
|
|
44
|
-
3. **Hook - SessionStart**: Writes agent's `claudeMd` content to `~/.claude/CLAUDE.md` (with backup/restore of existing file)
|
|
45
|
-
4. **Hook - Stop**: Reads `~/.claude/CLAUDE.md` and syncs content back to database
|
|
46
|
-
5. **MCP Tool**: `update-profile` tool accepts `claudeMd` field
|
|
47
|
-
6. **UI**: `EditAgentProfileModal` includes a CLAUDE.md textarea editor
|
|
48
|
-
7. **Default Template**: New agents get a default CLAUDE.md with their info and a notes section
|
|
49
|
-
|
|
50
|
-
## Quick Verification Reference
|
|
51
|
-
|
|
52
|
-
Common commands to verify the implementation:
|
|
53
|
-
- `bun run lint:fix` - Lint and format
|
|
54
|
-
- `bun run tsc:check` - TypeScript type check
|
|
55
|
-
- `bun test` - Run tests
|
|
56
|
-
|
|
57
|
-
Key files to check:
|
|
58
|
-
- `src/be/db.ts` - Database schema and migrations
|
|
59
|
-
- `src/types.ts` - TypeScript type definitions
|
|
60
|
-
- `src/hooks/hook.ts` - Hook handlers
|
|
61
|
-
- `src/tools/update-profile.ts` - MCP tool
|
|
62
|
-
- `src/http.ts` - HTTP API endpoints
|
|
63
|
-
- `ui/src/components/EditAgentProfileModal.tsx` - UI modal
|
|
64
|
-
- `ui/src/lib/api.ts` - UI API client
|
|
65
|
-
- `ui/src/types/api.ts` - UI type definitions
|
|
66
|
-
|
|
67
|
-
## What We're NOT Doing
|
|
68
|
-
|
|
69
|
-
- File watcher for real-time sync (using Stop hook only for initial implementation)
|
|
70
|
-
- Merging agent CLAUDE.md with existing user CLAUDE.md (using backup/restore approach instead)
|
|
71
|
-
- Per-task CLAUDE.md (only per-agent)
|
|
72
|
-
- Version history or CLAUDE.md diffing
|
|
73
|
-
- Size validation beyond 64KB (trusting Claude's token limits)
|
|
74
|
-
|
|
75
|
-
## Implementation Approach
|
|
76
|
-
|
|
77
|
-
The implementation follows a layered approach, building from the database up to the UI:
|
|
78
|
-
|
|
79
|
-
1. **Phase 1**: Add `claudeMd` column to database and update types
|
|
80
|
-
2. **Phase 2**: Extend profile update functions (DB, API, MCP tool)
|
|
81
|
-
3. **Phase 3**: Implement SessionStart hook to load CLAUDE.md
|
|
82
|
-
4. **Phase 4**: Implement Stop hook to sync CLAUDE.md back
|
|
83
|
-
5. **Phase 5**: Add UI editor for CLAUDE.md
|
|
84
|
-
|
|
85
|
-
Each phase is independently testable and can be committed separately.
|
|
86
|
-
|
|
87
|
-
---
|
|
88
|
-
|
|
89
|
-
## Phase 1: Database Schema & Types
|
|
90
|
-
|
|
91
|
-
### Overview
|
|
92
|
-
Add the `claudeMd` column to the database schema and update all TypeScript type definitions.
|
|
93
|
-
|
|
94
|
-
### Changes Required:
|
|
95
|
-
|
|
96
|
-
#### 1. Database Migration
|
|
97
|
-
**File**: `src/be/db.ts`
|
|
98
|
-
**Changes**:
|
|
99
|
-
- Add migration to add `claudeMd TEXT` column to agents table (after line ~495)
|
|
100
|
-
|
|
101
|
-
```typescript
|
|
102
|
-
// CLAUDE.md storage column
|
|
103
|
-
try {
|
|
104
|
-
db.run(`ALTER TABLE agents ADD COLUMN claudeMd TEXT`);
|
|
105
|
-
} catch {
|
|
106
|
-
/* exists */
|
|
107
|
-
}
|
|
108
|
-
```
|
|
109
|
-
|
|
110
|
-
#### 2. AgentRow Type
|
|
111
|
-
**File**: `src/be/db.ts`
|
|
112
|
-
**Changes**:
|
|
113
|
-
- Add `claudeMd: string | null` to `AgentRow` type (line 658-670)
|
|
114
|
-
|
|
115
|
-
#### 3. rowToAgent Function
|
|
116
|
-
**File**: `src/be/db.ts`
|
|
117
|
-
**Changes**:
|
|
118
|
-
- Add `claudeMd: row.claudeMd ?? undefined` to `rowToAgent()` (line 672-686)
|
|
119
|
-
|
|
120
|
-
#### 4. Backend TypeScript Types
|
|
121
|
-
**File**: `src/types.ts`
|
|
122
|
-
**Changes**:
|
|
123
|
-
- Add `claudeMd: z.string().max(65536).optional()` to `AgentSchema` (line 113-132)
|
|
124
|
-
|
|
125
|
-
#### 5. Frontend TypeScript Types
|
|
126
|
-
**File**: `ui/src/types/api.ts`
|
|
127
|
-
**Changes**:
|
|
128
|
-
- Add `claudeMd?: string` to `Agent` interface (line 17-33)
|
|
129
|
-
|
|
130
|
-
### Success Criteria:
|
|
131
|
-
|
|
132
|
-
#### Automated Verification:
|
|
133
|
-
- [x] TypeScript compiles: `bun run tsc:check`
|
|
134
|
-
- [x] Linting passes: `bun run lint:fix`
|
|
135
|
-
- [x] Tests pass: `bun test`
|
|
136
|
-
- [ ] Server starts: `bun run start:http` (verify migration runs)
|
|
137
|
-
|
|
138
|
-
#### Manual Verification:
|
|
139
|
-
- [ ] Check SQLite database has `claudeMd` column: `sqlite3 agent-swarm-db.sqlite ".schema agents"`
|
|
140
|
-
- [ ] Verify existing agents still load correctly (no breaking change)
|
|
141
|
-
|
|
142
|
-
**Implementation Note**: After completing this phase, pause for manual confirmation before proceeding to Phase 2.
|
|
143
|
-
|
|
144
|
-
---
|
|
145
|
-
|
|
146
|
-
## Phase 2: Profile Update Functions
|
|
147
|
-
|
|
148
|
-
### Overview
|
|
149
|
-
Extend the profile update mechanism to accept and persist the `claudeMd` field through all layers: database function, HTTP API, and MCP tool.
|
|
150
|
-
|
|
151
|
-
### Changes Required:
|
|
152
|
-
|
|
153
|
-
#### 1. updateAgentProfile Database Function
|
|
154
|
-
**File**: `src/be/db.ts`
|
|
155
|
-
**Changes**:
|
|
156
|
-
- Add `claudeMd?: string` to the updates parameter type (line 2119-2123)
|
|
157
|
-
- Add `claudeMd` to the SQL UPDATE statement (line 2131-2136)
|
|
158
|
-
- Add `updates.claudeMd ?? null` to the prepared statement parameters (line 2138-2144)
|
|
159
|
-
|
|
160
|
-
The SQL becomes:
|
|
161
|
-
```sql
|
|
162
|
-
UPDATE agents SET
|
|
163
|
-
description = COALESCE(?, description),
|
|
164
|
-
role = COALESCE(?, role),
|
|
165
|
-
capabilities = COALESCE(?, capabilities),
|
|
166
|
-
claudeMd = COALESCE(?, claudeMd),
|
|
167
|
-
lastUpdatedAt = ?
|
|
168
|
-
WHERE id = ? RETURNING *
|
|
169
|
-
```
|
|
170
|
-
|
|
171
|
-
#### 2. HTTP API Endpoint
|
|
172
|
-
**File**: `src/http.ts`
|
|
173
|
-
**Changes**:
|
|
174
|
-
- Add `claudeMd?: string` to the body type at line 985
|
|
175
|
-
- Add `claudeMd` check to the "at least one field" validation at line 995-999
|
|
176
|
-
- Add `claudeMd` size validation (max 64KB)
|
|
177
|
-
- Pass `claudeMd` to `updateAgentProfile()` call
|
|
178
|
-
|
|
179
|
-
#### 3. MCP update-profile Tool
|
|
180
|
-
**File**: `src/tools/update-profile.ts`
|
|
181
|
-
**Changes**:
|
|
182
|
-
- Add `claudeMd: z.string().max(65536).optional().describe("Personal CLAUDE.md content...")` to inputSchema (line 14-26)
|
|
183
|
-
- Add `claudeMd` to the "at least one field" validation (line 46-51)
|
|
184
|
-
- Pass `claudeMd` to `updateAgentProfile()` call (line 87-91)
|
|
185
|
-
- Add `claudeMd` to `updatedFields` tracking (line 104-108)
|
|
186
|
-
|
|
187
|
-
#### 4. UI API Client
|
|
188
|
-
**File**: `ui/src/lib/api.ts`
|
|
189
|
-
**Changes**:
|
|
190
|
-
- Add `claudeMd?: string` to the profile parameter type in `updateAgentProfile()` (line 71-73)
|
|
191
|
-
|
|
192
|
-
### Success Criteria:
|
|
193
|
-
|
|
194
|
-
#### Automated Verification:
|
|
195
|
-
- [x] TypeScript compiles: `bun run tsc:check`
|
|
196
|
-
- [x] Linting passes: `bun run lint:fix`
|
|
197
|
-
- [x] Tests pass: `bun test`
|
|
198
|
-
|
|
199
|
-
#### Manual Verification:
|
|
200
|
-
- [ ] Test HTTP API with curl:
|
|
201
|
-
```bash
|
|
202
|
-
curl -X PUT http://localhost:3013/api/agents/<agent-id>/profile \
|
|
203
|
-
-H "Content-Type: application/json" \
|
|
204
|
-
-d '{"claudeMd": "# Test Agent\n\nTest content"}'
|
|
205
|
-
```
|
|
206
|
-
- [ ] Verify `claudeMd` is persisted in database
|
|
207
|
-
- [ ] Test MCP tool via Claude Code session
|
|
208
|
-
|
|
209
|
-
**Implementation Note**: After completing this phase, pause for manual confirmation before proceeding to Phase 3.
|
|
210
|
-
|
|
211
|
-
---
|
|
212
|
-
|
|
213
|
-
## Phase 3: SessionStart Hook - Load CLAUDE.md
|
|
214
|
-
|
|
215
|
-
### Overview
|
|
216
|
-
Modify the SessionStart hook handler to write the agent's `claudeMd` content to `~/.claude/CLAUDE.md`, backing up any existing file first.
|
|
217
|
-
|
|
218
|
-
### Changes Required:
|
|
219
|
-
|
|
220
|
-
#### 1. Add Helper Functions
|
|
221
|
-
**File**: `src/hooks/hook.ts`
|
|
222
|
-
**Changes**:
|
|
223
|
-
- Add constants for file paths near the top of the file:
|
|
224
|
-
```typescript
|
|
225
|
-
const CLAUDE_MD_PATH = `${process.env.HOME}/.claude/CLAUDE.md`;
|
|
226
|
-
const CLAUDE_MD_BACKUP_PATH = `${process.env.HOME}/.claude/CLAUDE.md.bak`;
|
|
227
|
-
```
|
|
228
|
-
|
|
229
|
-
- Add helper function to backup existing CLAUDE.md:
|
|
230
|
-
```typescript
|
|
231
|
-
async function backupExistingClaudeMd(): Promise<void> {
|
|
232
|
-
const file = Bun.file(CLAUDE_MD_PATH);
|
|
233
|
-
if (await file.exists()) {
|
|
234
|
-
const content = await file.text();
|
|
235
|
-
await Bun.write(CLAUDE_MD_BACKUP_PATH, content);
|
|
236
|
-
}
|
|
237
|
-
}
|
|
238
|
-
```
|
|
239
|
-
|
|
240
|
-
- Add helper function to write agent's CLAUDE.md:
|
|
241
|
-
```typescript
|
|
242
|
-
async function writeAgentClaudeMd(content: string): Promise<void> {
|
|
243
|
-
// Ensure ~/.claude directory exists
|
|
244
|
-
const dir = `${process.env.HOME}/.claude`;
|
|
245
|
-
try {
|
|
246
|
-
await Bun.$`mkdir -p ${dir}`.quiet();
|
|
247
|
-
} catch {
|
|
248
|
-
// Directory may already exist
|
|
249
|
-
}
|
|
250
|
-
await Bun.write(CLAUDE_MD_PATH, content);
|
|
251
|
-
}
|
|
252
|
-
```
|
|
253
|
-
|
|
254
|
-
#### 2. Modify getAgentInfo to Include claudeMd
|
|
255
|
-
**File**: `src/hooks/hook.ts`
|
|
256
|
-
**Changes**:
|
|
257
|
-
- The `AgentWithInbox` interface already extends `Agent`, so it will include `claudeMd` automatically once the types are updated
|
|
258
|
-
- Verify `getAgentInfo()` (line 169-188) returns full agent data including `claudeMd`
|
|
259
|
-
|
|
260
|
-
#### 3. Modify SessionStart Handler
|
|
261
|
-
**File**: `src/hooks/hook.ts`
|
|
262
|
-
**Changes**:
|
|
263
|
-
- Update the `SessionStart` case (line 422-426) to:
|
|
264
|
-
```typescript
|
|
265
|
-
case "SessionStart":
|
|
266
|
-
if (!agentInfo) break;
|
|
267
|
-
|
|
268
|
-
// Write agent's CLAUDE.md if available
|
|
269
|
-
if (agentInfo.claudeMd) {
|
|
270
|
-
try {
|
|
271
|
-
await backupExistingClaudeMd();
|
|
272
|
-
await writeAgentClaudeMd(agentInfo.claudeMd);
|
|
273
|
-
console.log("Loaded your personal CLAUDE.md configuration.");
|
|
274
|
-
} catch (error) {
|
|
275
|
-
console.log(`Warning: Could not load CLAUDE.md: ${(error as Error).message}`);
|
|
276
|
-
}
|
|
277
|
-
}
|
|
278
|
-
break;
|
|
279
|
-
```
|
|
280
|
-
|
|
281
|
-
### Success Criteria:
|
|
282
|
-
|
|
283
|
-
#### Automated Verification:
|
|
284
|
-
- [x] TypeScript compiles: `bun run tsc:check`
|
|
285
|
-
- [x] Linting passes: `bun run lint:fix`
|
|
286
|
-
- [x] Tests pass: `bun test`
|
|
287
|
-
|
|
288
|
-
#### Manual Verification:
|
|
289
|
-
- [ ] Set an agent's `claudeMd` via API
|
|
290
|
-
- [ ] Start a Claude Code session with that agent
|
|
291
|
-
- [ ] Verify `~/.claude/CLAUDE.md` contains the agent's content
|
|
292
|
-
- [ ] Verify `~/.claude/CLAUDE.md.bak` contains the previous content (if any existed)
|
|
293
|
-
- [ ] Check the hook output shows "Loaded your personal CLAUDE.md configuration."
|
|
294
|
-
|
|
295
|
-
**Implementation Note**: After completing this phase, pause for manual confirmation before proceeding to Phase 4.
|
|
296
|
-
|
|
297
|
-
---
|
|
298
|
-
|
|
299
|
-
## Phase 4: Stop Hook - Sync CLAUDE.md Back
|
|
300
|
-
|
|
301
|
-
### Overview
|
|
302
|
-
Modify the Stop hook handler to read `~/.claude/CLAUDE.md`, sync it back to the database, and restore the backup file.
|
|
303
|
-
|
|
304
|
-
### Changes Required:
|
|
305
|
-
|
|
306
|
-
#### 1. Add Sync Function
|
|
307
|
-
**File**: `src/hooks/hook.ts`
|
|
308
|
-
**Changes**:
|
|
309
|
-
- Add helper function to sync CLAUDE.md back to server:
|
|
310
|
-
```typescript
|
|
311
|
-
async function syncClaudeMdToServer(agentId: string): Promise<void> {
|
|
312
|
-
if (!mcpConfig) return;
|
|
313
|
-
|
|
314
|
-
const file = Bun.file(CLAUDE_MD_PATH);
|
|
315
|
-
if (!(await file.exists())) return;
|
|
316
|
-
|
|
317
|
-
const content = await file.text();
|
|
318
|
-
|
|
319
|
-
// Don't sync if content is empty or too large (>64KB)
|
|
320
|
-
if (!content.trim() || content.length > 65536) return;
|
|
321
|
-
|
|
322
|
-
try {
|
|
323
|
-
await fetch(`${getBaseUrl()}/api/agents/${agentId}/profile`, {
|
|
324
|
-
method: "PUT",
|
|
325
|
-
headers: {
|
|
326
|
-
...mcpConfig.headers,
|
|
327
|
-
"Content-Type": "application/json",
|
|
328
|
-
},
|
|
329
|
-
body: JSON.stringify({ claudeMd: content }),
|
|
330
|
-
});
|
|
331
|
-
} catch {
|
|
332
|
-
// Silently fail - don't block shutdown
|
|
333
|
-
}
|
|
334
|
-
}
|
|
335
|
-
```
|
|
336
|
-
|
|
337
|
-
- Add helper function to restore backup:
|
|
338
|
-
```typescript
|
|
339
|
-
async function restoreClaudeMdBackup(): Promise<void> {
|
|
340
|
-
const backupFile = Bun.file(CLAUDE_MD_BACKUP_PATH);
|
|
341
|
-
if (await backupFile.exists()) {
|
|
342
|
-
const content = await backupFile.text();
|
|
343
|
-
await Bun.write(CLAUDE_MD_PATH, content);
|
|
344
|
-
// Remove backup file
|
|
345
|
-
await Bun.$`rm -f ${CLAUDE_MD_BACKUP_PATH}`.quiet();
|
|
346
|
-
} else {
|
|
347
|
-
// No backup existed, remove the agent's CLAUDE.md
|
|
348
|
-
await Bun.$`rm -f ${CLAUDE_MD_PATH}`.quiet();
|
|
349
|
-
}
|
|
350
|
-
}
|
|
351
|
-
```
|
|
352
|
-
|
|
353
|
-
#### 2. Modify Stop Handler
|
|
354
|
-
**File**: `src/hooks/hook.ts`
|
|
355
|
-
**Changes**:
|
|
356
|
-
- Update the `Stop` case (line 484-501) to sync and restore before marking offline:
|
|
357
|
-
```typescript
|
|
358
|
-
case "Stop":
|
|
359
|
-
// Save PM2 processes before shutdown (for container restart persistence)
|
|
360
|
-
try {
|
|
361
|
-
await Bun.$`pm2 save`.quiet();
|
|
362
|
-
} catch {
|
|
363
|
-
// PM2 not available or no processes - silently ignore
|
|
364
|
-
}
|
|
365
|
-
|
|
366
|
-
// Sync CLAUDE.md back to database and restore backup
|
|
367
|
-
if (agentInfo?.id) {
|
|
368
|
-
try {
|
|
369
|
-
await syncClaudeMdToServer(agentInfo.id);
|
|
370
|
-
await restoreClaudeMdBackup();
|
|
371
|
-
} catch {
|
|
372
|
-
// Silently fail - don't block shutdown
|
|
373
|
-
}
|
|
374
|
-
}
|
|
375
|
-
|
|
376
|
-
// Mark the agent as offline
|
|
377
|
-
await close();
|
|
378
|
-
break;
|
|
379
|
-
```
|
|
380
|
-
|
|
381
|
-
### Success Criteria:
|
|
382
|
-
|
|
383
|
-
#### Automated Verification:
|
|
384
|
-
- [x] TypeScript compiles: `bun run tsc:check`
|
|
385
|
-
- [x] Linting passes: `bun run lint:fix`
|
|
386
|
-
- [x] Tests pass: `bun test`
|
|
387
|
-
|
|
388
|
-
#### Manual Verification:
|
|
389
|
-
- [ ] Start a Claude Code session with an agent that has `claudeMd` set
|
|
390
|
-
- [ ] Modify `~/.claude/CLAUDE.md` during the session (add some notes)
|
|
391
|
-
- [ ] Exit the Claude Code session (trigger Stop hook)
|
|
392
|
-
- [ ] Verify the agent's `claudeMd` in the database was updated with the new content
|
|
393
|
-
- [ ] Verify `~/.claude/CLAUDE.md` was restored to its original content (or removed if no backup)
|
|
394
|
-
- [ ] Verify `~/.claude/CLAUDE.md.bak` was removed
|
|
395
|
-
|
|
396
|
-
**Implementation Note**: After completing this phase, pause for manual confirmation before proceeding to Phase 5.
|
|
397
|
-
|
|
398
|
-
---
|
|
399
|
-
|
|
400
|
-
## Phase 5: UI Editor
|
|
401
|
-
|
|
402
|
-
### Overview
|
|
403
|
-
Add a CLAUDE.md textarea editor to the `EditAgentProfileModal` component.
|
|
404
|
-
|
|
405
|
-
### Changes Required:
|
|
406
|
-
|
|
407
|
-
#### 1. Add State and UI
|
|
408
|
-
**File**: `ui/src/components/EditAgentProfileModal.tsx`
|
|
409
|
-
**Changes**:
|
|
410
|
-
- Add state for `claudeMd`:
|
|
411
|
-
```typescript
|
|
412
|
-
const [claudeMd, setClaudeMd] = useState("");
|
|
413
|
-
```
|
|
414
|
-
|
|
415
|
-
- Initialize state from agent (in `useEffect` after line 67):
|
|
416
|
-
```typescript
|
|
417
|
-
setClaudeMd(agent.claudeMd || "");
|
|
418
|
-
```
|
|
419
|
-
|
|
420
|
-
- Add `claudeMd` to `handleSave` (line 74-81):
|
|
421
|
-
```typescript
|
|
422
|
-
await updateProfile.mutateAsync({
|
|
423
|
-
id: agent.id,
|
|
424
|
-
profile: {
|
|
425
|
-
role: role || undefined,
|
|
426
|
-
description: description || undefined,
|
|
427
|
-
capabilities: capabilities.length > 0 ? capabilities : undefined,
|
|
428
|
-
claudeMd: claudeMd || undefined,
|
|
429
|
-
},
|
|
430
|
-
});
|
|
431
|
-
```
|
|
432
|
-
|
|
433
|
-
- Add `claudeMd` to `hasChanges` calculation (line 107-110):
|
|
434
|
-
```typescript
|
|
435
|
-
const hasChanges =
|
|
436
|
-
role !== (agent.role || "") ||
|
|
437
|
-
description !== (agent.description || "") ||
|
|
438
|
-
claudeMd !== (agent.claudeMd || "") ||
|
|
439
|
-
JSON.stringify(capabilities) !== JSON.stringify(agent.capabilities || []);
|
|
440
|
-
```
|
|
441
|
-
|
|
442
|
-
- Add CLAUDE.md textarea after the CAPABILITIES form control (around line 322):
|
|
443
|
-
```tsx
|
|
444
|
-
<FormControl>
|
|
445
|
-
<FormLabel
|
|
446
|
-
sx={{
|
|
447
|
-
fontFamily: "code",
|
|
448
|
-
color: colors.textSecondary,
|
|
449
|
-
fontSize: "0.75rem",
|
|
450
|
-
letterSpacing: "0.05em",
|
|
451
|
-
}}
|
|
452
|
-
>
|
|
453
|
-
CLAUDE.MD
|
|
454
|
-
</FormLabel>
|
|
455
|
-
<Textarea
|
|
456
|
-
value={claudeMd}
|
|
457
|
-
onChange={(e) => setClaudeMd(e.target.value)}
|
|
458
|
-
placeholder="Personal CLAUDE.md instructions and notes..."
|
|
459
|
-
minRows={6}
|
|
460
|
-
maxRows={12}
|
|
461
|
-
sx={{
|
|
462
|
-
fontFamily: "code",
|
|
463
|
-
fontSize: "0.8rem",
|
|
464
|
-
bgcolor: colors.level1,
|
|
465
|
-
borderColor: colors.border,
|
|
466
|
-
color: colors.textPrimary,
|
|
467
|
-
"&:focus-within": {
|
|
468
|
-
borderColor: colors.amber,
|
|
469
|
-
boxShadow: colors.focusGlow,
|
|
470
|
-
},
|
|
471
|
-
"&:hover": {
|
|
472
|
-
borderColor: colors.borderHover,
|
|
473
|
-
},
|
|
474
|
-
}}
|
|
475
|
-
/>
|
|
476
|
-
<FormHelperText
|
|
477
|
-
sx={{ fontFamily: "code", fontSize: "0.65rem", color: colors.textTertiary }}
|
|
478
|
-
>
|
|
479
|
-
Personal instructions loaded on session start. Notes you add here persist across sessions.
|
|
480
|
-
</FormHelperText>
|
|
481
|
-
</FormControl>
|
|
482
|
-
```
|
|
483
|
-
|
|
484
|
-
#### 2. Update Modal Size
|
|
485
|
-
**File**: `ui/src/components/EditAgentProfileModal.tsx`
|
|
486
|
-
**Changes**:
|
|
487
|
-
- Increase modal width to accommodate the larger content (line 121):
|
|
488
|
-
```typescript
|
|
489
|
-
minWidth: 550,
|
|
490
|
-
maxWidth: 650,
|
|
491
|
-
```
|
|
492
|
-
|
|
493
|
-
### Success Criteria:
|
|
494
|
-
|
|
495
|
-
#### Automated Verification:
|
|
496
|
-
- [x] TypeScript compiles: `cd ui && bun run typecheck`
|
|
497
|
-
- [x] Build succeeds: `cd ui && bun run build`
|
|
498
|
-
|
|
499
|
-
#### Manual Verification:
|
|
500
|
-
- [ ] Start the UI: `cd ui && bun run dev`
|
|
501
|
-
- [ ] Navigate to an agent's detail view
|
|
502
|
-
- [ ] Open the edit profile modal
|
|
503
|
-
- [ ] Verify CLAUDE.MD textarea is visible
|
|
504
|
-
- [ ] Enter some content in the CLAUDE.MD field
|
|
505
|
-
- [ ] Save the profile
|
|
506
|
-
- [ ] Verify the content persists (reopen modal)
|
|
507
|
-
- [ ] Start a Claude Code session with the agent
|
|
508
|
-
- [ ] Verify the CLAUDE.md content is loaded into `~/.claude/CLAUDE.md`
|
|
509
|
-
|
|
510
|
-
**Implementation Note**: After completing this phase, pause for manual confirmation.
|
|
511
|
-
|
|
512
|
-
---
|
|
513
|
-
|
|
514
|
-
## Phase 6: Default Template (Optional Enhancement)
|
|
515
|
-
|
|
516
|
-
### Overview
|
|
517
|
-
Initialize new agents with a default CLAUDE.md template containing their info.
|
|
518
|
-
|
|
519
|
-
### Changes Required:
|
|
520
|
-
|
|
521
|
-
#### 1. Add Default Template Function
|
|
522
|
-
**File**: `src/be/db.ts`
|
|
523
|
-
**Changes**:
|
|
524
|
-
- Add function to generate default CLAUDE.md:
|
|
525
|
-
```typescript
|
|
526
|
-
export function generateDefaultClaudeMd(agent: { name: string; description?: string; role?: string; capabilities?: string[] }): string {
|
|
527
|
-
const lines = [
|
|
528
|
-
`# Agent: ${agent.name}`,
|
|
529
|
-
"",
|
|
530
|
-
];
|
|
531
|
-
|
|
532
|
-
if (agent.description) {
|
|
533
|
-
lines.push(agent.description, "");
|
|
534
|
-
}
|
|
535
|
-
|
|
536
|
-
if (agent.role) {
|
|
537
|
-
lines.push(`## Role`, agent.role, "");
|
|
538
|
-
}
|
|
539
|
-
|
|
540
|
-
if (agent.capabilities && agent.capabilities.length > 0) {
|
|
541
|
-
lines.push(`## Capabilities`);
|
|
542
|
-
agent.capabilities.forEach(cap => lines.push(`- ${cap}`));
|
|
543
|
-
lines.push("");
|
|
544
|
-
}
|
|
545
|
-
|
|
546
|
-
lines.push(
|
|
547
|
-
"---",
|
|
548
|
-
"",
|
|
549
|
-
"## Notes",
|
|
550
|
-
"",
|
|
551
|
-
"If you need to remember something, write it down here. This section persists across sessions.",
|
|
552
|
-
"",
|
|
553
|
-
"### Learnings",
|
|
554
|
-
"",
|
|
555
|
-
"### Preferences",
|
|
556
|
-
"",
|
|
557
|
-
"### Important Context",
|
|
558
|
-
"",
|
|
559
|
-
);
|
|
560
|
-
|
|
561
|
-
return lines.join("\n");
|
|
562
|
-
}
|
|
563
|
-
```
|
|
564
|
-
|
|
565
|
-
#### 2. Use Default on Agent Creation
|
|
566
|
-
**File**: `src/tools/join-swarm.ts`
|
|
567
|
-
**Changes**:
|
|
568
|
-
- When creating a new agent, set initial `claudeMd` if not provided
|
|
569
|
-
- Call `updateAgentProfile()` with generated default after agent creation
|
|
570
|
-
|
|
571
|
-
### Success Criteria:
|
|
572
|
-
|
|
573
|
-
#### Automated Verification:
|
|
574
|
-
- [x] TypeScript compiles: `bun run tsc:check`
|
|
575
|
-
- [x] Tests pass: `bun test`
|
|
576
|
-
|
|
577
|
-
#### Manual Verification:
|
|
578
|
-
- [ ] Create a new agent via `join-swarm` MCP tool
|
|
579
|
-
- [ ] Check the agent's `claudeMd` field is populated with the default template
|
|
580
|
-
- [ ] Verify the template includes the agent's name, role, etc.
|
|
581
|
-
|
|
582
|
-
**Implementation Note**: This phase is optional and can be deferred. After completing, pause for manual confirmation.
|
|
583
|
-
|
|
584
|
-
---
|
|
585
|
-
|
|
586
|
-
## Testing Strategy
|
|
587
|
-
|
|
588
|
-
### Unit Tests
|
|
589
|
-
- Add tests for `generateDefaultClaudeMd()` function
|
|
590
|
-
- Add tests for `updateAgentProfile()` with `claudeMd` field
|
|
591
|
-
|
|
592
|
-
### Integration Tests
|
|
593
|
-
- Test HTTP API endpoint with `claudeMd` in request body
|
|
594
|
-
- Test MCP tool with `claudeMd` parameter
|
|
595
|
-
|
|
596
|
-
### Manual Testing
|
|
597
|
-
1. **Full flow test**:
|
|
598
|
-
- Create agent or set `claudeMd` via UI
|
|
599
|
-
- Start Claude Code session
|
|
600
|
-
- Verify `~/.claude/CLAUDE.md` has agent's content
|
|
601
|
-
- Add notes to the file during session
|
|
602
|
-
- Exit session
|
|
603
|
-
- Verify changes synced back to database
|
|
604
|
-
- Verify original `~/.claude/CLAUDE.md` restored
|
|
605
|
-
|
|
606
|
-
2. **Edge cases**:
|
|
607
|
-
- Agent with no `claudeMd` set (should not write file)
|
|
608
|
-
- Existing `~/.claude/CLAUDE.md` file (backup/restore)
|
|
609
|
-
- Large `claudeMd` content (~64KB)
|
|
610
|
-
- Empty `claudeMd` content
|
|
611
|
-
|
|
612
|
-
## References
|
|
613
|
-
- Research document: `thoughts/taras/research/2026-01-28-per-worker-claude-md.md`
|
|
614
|
-
- Agent schema: `src/be/db.ts:48-58`
|
|
615
|
-
- Profile update function: `src/be/db.ts:2117-2147`
|
|
616
|
-
- Hook handler: `src/hooks/hook.ts:105-506`
|
|
617
|
-
- UI modal: `ui/src/components/EditAgentProfileModal.tsx`
|