slackhive 0.1.37 → 0.1.39
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/.dockerignore +14 -0
- package/.env.example +44 -0
- package/.github/ISSUE_TEMPLATE/bug_report.yml +65 -0
- package/.github/ISSUE_TEMPLATE/config.yml +5 -0
- package/.github/ISSUE_TEMPLATE/feature_request.yml +38 -0
- package/.github/PULL_REQUEST_TEMPLATE.md +27 -0
- package/.github/dependabot.yml +20 -0
- package/.github/workflows/audit.yml +149 -0
- package/.github/workflows/ci.yml +135 -0
- package/CHANGELOG.md +52 -0
- package/CODE_OF_CONDUCT.md +37 -0
- package/CONTRIBUTING.md +204 -0
- package/LICENSE +21 -0
- package/README.md +19 -0
- package/SECURITY.md +47 -0
- package/apps/runner/Dockerfile +33 -0
- package/apps/runner/dist/__tests__/channel-restrictions.test.d.ts +8 -0
- package/apps/runner/dist/__tests__/channel-restrictions.test.js +63 -0
- package/apps/runner/dist/__tests__/channel-restrictions.test.js.map +1 -0
- package/apps/runner/dist/__tests__/claude-handler-resolve.test.d.ts +20 -0
- package/apps/runner/dist/__tests__/claude-handler-resolve.test.js +178 -0
- package/apps/runner/dist/__tests__/claude-handler-resolve.test.js.map +1 -0
- package/apps/runner/dist/__tests__/compile-claude-md.test.d.ts +13 -0
- package/apps/runner/dist/__tests__/compile-claude-md.test.js +144 -0
- package/apps/runner/dist/__tests__/compile-claude-md.test.js.map +1 -0
- package/apps/runner/dist/__tests__/memory-sync.test.d.ts +11 -0
- package/apps/runner/dist/__tests__/memory-sync.test.js +56 -0
- package/apps/runner/dist/__tests__/memory-sync.test.js.map +1 -0
- package/apps/runner/dist/__tests__/slack-file-support.test.d.ts +9 -0
- package/apps/runner/dist/__tests__/slack-file-support.test.js +271 -0
- package/apps/runner/dist/__tests__/slack-file-support.test.js.map +1 -0
- package/apps/runner/dist/__tests__/slack-formatting.test.d.ts +12 -0
- package/apps/runner/dist/__tests__/slack-formatting.test.js +400 -0
- package/apps/runner/dist/__tests__/slack-formatting.test.js.map +1 -0
- package/apps/runner/dist/__tests__/thread-context.test.d.ts +12 -0
- package/apps/runner/dist/__tests__/thread-context.test.js +182 -0
- package/apps/runner/dist/__tests__/thread-context.test.js.map +1 -0
- package/apps/runner/dist/agent-runner.d.ts +118 -0
- package/apps/runner/dist/agent-runner.js +352 -0
- package/apps/runner/dist/agent-runner.js.map +1 -0
- package/apps/runner/dist/claude-handler.d.ts +122 -0
- package/apps/runner/dist/claude-handler.js +402 -0
- package/apps/runner/dist/claude-handler.js.map +1 -0
- package/apps/runner/dist/compile-claude-md.d.ts +59 -0
- package/apps/runner/dist/compile-claude-md.js +291 -0
- package/apps/runner/dist/compile-claude-md.js.map +1 -0
- package/apps/runner/dist/correction-handler.d.ts +46 -0
- package/apps/runner/dist/correction-handler.js +162 -0
- package/apps/runner/dist/correction-handler.js.map +1 -0
- package/apps/runner/dist/correction-manager.d.ts +53 -0
- package/apps/runner/dist/correction-manager.js +241 -0
- package/apps/runner/dist/correction-manager.js.map +1 -0
- package/apps/runner/dist/db.d.ts +193 -0
- package/apps/runner/dist/db.js +492 -0
- package/apps/runner/dist/db.js.map +1 -0
- package/apps/runner/dist/index.d.ts +9 -0
- package/apps/runner/dist/index.js +43 -0
- package/apps/runner/dist/index.js.map +1 -0
- package/apps/runner/dist/job-scheduler.d.ts +57 -0
- package/apps/runner/dist/job-scheduler.js +150 -0
- package/apps/runner/dist/job-scheduler.js.map +1 -0
- package/apps/runner/dist/logger.d.ts +32 -0
- package/apps/runner/dist/logger.js +52 -0
- package/apps/runner/dist/logger.js.map +1 -0
- package/apps/runner/dist/mcp-process-manager.d.ts +38 -0
- package/apps/runner/dist/mcp-process-manager.js +189 -0
- package/apps/runner/dist/mcp-process-manager.js.map +1 -0
- package/apps/runner/dist/memory-mcp.d.ts +14 -0
- package/apps/runner/dist/memory-mcp.js +88 -0
- package/apps/runner/dist/memory-mcp.js.map +1 -0
- package/apps/runner/dist/memory-watcher.d.ts +78 -0
- package/apps/runner/dist/memory-watcher.js +220 -0
- package/apps/runner/dist/memory-watcher.js.map +1 -0
- package/apps/runner/dist/slack-handler.d.ts +120 -0
- package/apps/runner/dist/slack-handler.js +843 -0
- package/apps/runner/dist/slack-handler.js.map +1 -0
- package/apps/runner/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -0
- package/apps/runner/package.json +42 -0
- package/apps/runner/src/__tests__/channel-restrictions.test.ts +75 -0
- package/apps/runner/src/__tests__/claude-handler-resolve.test.ts +160 -0
- package/apps/runner/src/__tests__/compile-claude-md.test.ts +139 -0
- package/apps/runner/src/__tests__/memory-sync.test.ts +59 -0
- package/apps/runner/src/__tests__/slack-file-support.test.ts +376 -0
- package/apps/runner/src/__tests__/slack-formatting.test.ts +495 -0
- package/apps/runner/src/__tests__/thread-context.test.ts +215 -0
- package/apps/runner/src/agent-runner.ts +397 -0
- package/apps/runner/src/claude-handler.ts +475 -0
- package/apps/runner/src/compile-claude-md.ts +283 -0
- package/apps/runner/src/correction-handler.ts +191 -0
- package/apps/runner/src/correction-manager.ts +285 -0
- package/apps/runner/src/db.ts +604 -0
- package/apps/runner/src/index.ts +46 -0
- package/apps/runner/src/job-scheduler.ts +165 -0
- package/apps/runner/src/logger.ts +49 -0
- package/apps/runner/src/mcp-process-manager.ts +195 -0
- package/apps/runner/src/memory-mcp.ts +85 -0
- package/apps/runner/src/memory-watcher.ts +215 -0
- package/apps/runner/src/slack-handler.ts +929 -0
- package/apps/runner/tsconfig.json +17 -0
- package/apps/runner/vitest.config.mts +17 -0
- package/apps/web/.eslintrc.json +3 -0
- package/apps/web/.next/app-build-manifest.json +323 -0
- package/apps/web/.next/app-path-routes-manifest.json +46 -0
- package/apps/web/.next/build-manifest.json +33 -0
- package/apps/web/.next/cache/.previewinfo +1 -0
- package/apps/web/.next/cache/.rscinfo +1 -0
- package/apps/web/.next/cache/webpack/client-production/0.pack +0 -0
- package/apps/web/.next/cache/webpack/client-production/1.pack +0 -0
- package/apps/web/.next/cache/webpack/client-production/2.pack +0 -0
- package/apps/web/.next/cache/webpack/client-production/3.pack +0 -0
- package/apps/web/.next/cache/webpack/client-production/4.pack +0 -0
- package/apps/web/.next/cache/webpack/client-production/index.pack +0 -0
- package/apps/web/.next/cache/webpack/client-production/index.pack.old +0 -0
- package/apps/web/.next/cache/webpack/edge-server-production/0.pack +0 -0
- package/apps/web/.next/cache/webpack/edge-server-production/1.pack +0 -0
- package/apps/web/.next/cache/webpack/edge-server-production/index.pack +0 -0
- package/apps/web/.next/cache/webpack/edge-server-production/index.pack.old +0 -0
- package/apps/web/.next/cache/webpack/server-production/0.pack +0 -0
- package/apps/web/.next/cache/webpack/server-production/1.pack +0 -0
- package/apps/web/.next/cache/webpack/server-production/2.pack +0 -0
- package/apps/web/.next/cache/webpack/server-production/index.pack +0 -0
- package/apps/web/.next/cache/webpack/server-production/index.pack.old +0 -0
- package/apps/web/.next/diagnostics/build-diagnostics.json +6 -0
- package/apps/web/.next/diagnostics/framework.json +1 -0
- package/apps/web/.next/package.json +1 -0
- package/apps/web/.next/react-loadable-manifest.json +1 -0
- package/apps/web/.next/server/app/_not-found/page.js +2 -0
- package/apps/web/.next/server/app/_not-found/page.js.nft.json +1 -0
- package/apps/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -0
- package/apps/web/.next/server/app/agents/[slug]/page.js +4 -0
- package/apps/web/.next/server/app/agents/[slug]/page.js.nft.json +1 -0
- package/apps/web/.next/server/app/agents/[slug]/page_client-reference-manifest.js +1 -0
- package/apps/web/.next/server/app/agents/new/page.js +2 -0
- package/apps/web/.next/server/app/agents/new/page.js.nft.json +1 -0
- package/apps/web/.next/server/app/agents/new/page_client-reference-manifest.js +1 -0
- package/apps/web/.next/server/app/api/agents/[id]/access/route.js +1 -0
- package/apps/web/.next/server/app/api/agents/[id]/access/route.js.nft.json +1 -0
- package/apps/web/.next/server/app/api/agents/[id]/access/route_client-reference-manifest.js +1 -0
- package/apps/web/.next/server/app/api/agents/[id]/claude-md/route.js +6 -0
- package/apps/web/.next/server/app/api/agents/[id]/claude-md/route.js.nft.json +1 -0
- package/apps/web/.next/server/app/api/agents/[id]/claude-md/route_client-reference-manifest.js +1 -0
- package/apps/web/.next/server/app/api/agents/[id]/logs/route.js +3 -0
- package/apps/web/.next/server/app/api/agents/[id]/logs/route.js.nft.json +1 -0
- package/apps/web/.next/server/app/api/agents/[id]/logs/route_client-reference-manifest.js +1 -0
- package/apps/web/.next/server/app/api/agents/[id]/manifest/route.js +1 -0
- package/apps/web/.next/server/app/api/agents/[id]/manifest/route.js.nft.json +1 -0
- package/apps/web/.next/server/app/api/agents/[id]/manifest/route_client-reference-manifest.js +1 -0
- package/apps/web/.next/server/app/api/agents/[id]/mcps/route.js +1 -0
- package/apps/web/.next/server/app/api/agents/[id]/mcps/route.js.nft.json +1 -0
- package/apps/web/.next/server/app/api/agents/[id]/mcps/route_client-reference-manifest.js +1 -0
- package/apps/web/.next/server/app/api/agents/[id]/memories/[memId]/route.js +1 -0
- package/apps/web/.next/server/app/api/agents/[id]/memories/[memId]/route.js.nft.json +1 -0
- package/apps/web/.next/server/app/api/agents/[id]/memories/[memId]/route_client-reference-manifest.js +1 -0
- package/apps/web/.next/server/app/api/agents/[id]/memories/route.js +1 -0
- package/apps/web/.next/server/app/api/agents/[id]/memories/route.js.nft.json +1 -0
- package/apps/web/.next/server/app/api/agents/[id]/memories/route_client-reference-manifest.js +1 -0
- package/apps/web/.next/server/app/api/agents/[id]/permissions/route.js +1 -0
- package/apps/web/.next/server/app/api/agents/[id]/permissions/route.js.nft.json +1 -0
- package/apps/web/.next/server/app/api/agents/[id]/permissions/route_client-reference-manifest.js +1 -0
- package/apps/web/.next/server/app/api/agents/[id]/reload/route.js +1 -0
- package/apps/web/.next/server/app/api/agents/[id]/reload/route.js.nft.json +1 -0
- package/apps/web/.next/server/app/api/agents/[id]/reload/route_client-reference-manifest.js +1 -0
- package/apps/web/.next/server/app/api/agents/[id]/restrictions/route.js +1 -0
- package/apps/web/.next/server/app/api/agents/[id]/restrictions/route.js.nft.json +1 -0
- package/apps/web/.next/server/app/api/agents/[id]/restrictions/route_client-reference-manifest.js +1 -0
- package/apps/web/.next/server/app/api/agents/[id]/route.js +33 -0
- package/apps/web/.next/server/app/api/agents/[id]/route.js.nft.json +1 -0
- package/apps/web/.next/server/app/api/agents/[id]/route_client-reference-manifest.js +1 -0
- package/apps/web/.next/server/app/api/agents/[id]/skills/[skillId]/route.js +1 -0
- package/apps/web/.next/server/app/api/agents/[id]/skills/[skillId]/route.js.nft.json +1 -0
- package/apps/web/.next/server/app/api/agents/[id]/skills/[skillId]/route_client-reference-manifest.js +1 -0
- package/apps/web/.next/server/app/api/agents/[id]/skills/route.js +1 -0
- package/apps/web/.next/server/app/api/agents/[id]/skills/route.js.nft.json +1 -0
- package/apps/web/.next/server/app/api/agents/[id]/skills/route_client-reference-manifest.js +1 -0
- package/apps/web/.next/server/app/api/agents/[id]/slack-info/route.js +1 -0
- package/apps/web/.next/server/app/api/agents/[id]/slack-info/route.js.nft.json +1 -0
- package/apps/web/.next/server/app/api/agents/[id]/slack-info/route_client-reference-manifest.js +1 -0
- package/apps/web/.next/server/app/api/agents/[id]/snapshots/[sid]/restore/route.js +1 -0
- package/apps/web/.next/server/app/api/agents/[id]/snapshots/[sid]/restore/route.js.nft.json +1 -0
- package/apps/web/.next/server/app/api/agents/[id]/snapshots/[sid]/restore/route_client-reference-manifest.js +1 -0
- package/apps/web/.next/server/app/api/agents/[id]/snapshots/[sid]/route.js +1 -0
- package/apps/web/.next/server/app/api/agents/[id]/snapshots/[sid]/route.js.nft.json +1 -0
- package/apps/web/.next/server/app/api/agents/[id]/snapshots/[sid]/route_client-reference-manifest.js +1 -0
- package/apps/web/.next/server/app/api/agents/[id]/snapshots/route.js +1 -0
- package/apps/web/.next/server/app/api/agents/[id]/snapshots/route.js.nft.json +1 -0
- package/apps/web/.next/server/app/api/agents/[id]/snapshots/route_client-reference-manifest.js +1 -0
- package/apps/web/.next/server/app/api/agents/[id]/start/route.js +1 -0
- package/apps/web/.next/server/app/api/agents/[id]/start/route.js.nft.json +1 -0
- package/apps/web/.next/server/app/api/agents/[id]/start/route_client-reference-manifest.js +1 -0
- package/apps/web/.next/server/app/api/agents/[id]/stop/route.js +1 -0
- package/apps/web/.next/server/app/api/agents/[id]/stop/route.js.nft.json +1 -0
- package/apps/web/.next/server/app/api/agents/[id]/stop/route_client-reference-manifest.js +1 -0
- package/apps/web/.next/server/app/api/agents/route.js +91 -0
- package/apps/web/.next/server/app/api/agents/route.js.nft.json +1 -0
- package/apps/web/.next/server/app/api/agents/route_client-reference-manifest.js +1 -0
- package/apps/web/.next/server/app/api/auth/login/route.js +1 -0
- package/apps/web/.next/server/app/api/auth/login/route.js.nft.json +1 -0
- package/apps/web/.next/server/app/api/auth/login/route_client-reference-manifest.js +1 -0
- package/apps/web/.next/server/app/api/auth/logout/route.js +1 -0
- package/apps/web/.next/server/app/api/auth/logout/route.js.nft.json +1 -0
- package/apps/web/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -0
- package/apps/web/.next/server/app/api/auth/me/route.js +1 -0
- package/apps/web/.next/server/app/api/auth/me/route.js.nft.json +1 -0
- package/apps/web/.next/server/app/api/auth/me/route_client-reference-manifest.js +1 -0
- package/apps/web/.next/server/app/api/auth/users/[id]/route.js +1 -0
- package/apps/web/.next/server/app/api/auth/users/[id]/route.js.nft.json +1 -0
- package/apps/web/.next/server/app/api/auth/users/[id]/route_client-reference-manifest.js +1 -0
- package/apps/web/.next/server/app/api/auth/users/route.js +1 -0
- package/apps/web/.next/server/app/api/auth/users/route.js.nft.json +1 -0
- package/apps/web/.next/server/app/api/auth/users/route_client-reference-manifest.js +1 -0
- package/apps/web/.next/server/app/api/env-vars/[key]/route.js +1 -0
- package/apps/web/.next/server/app/api/env-vars/[key]/route.js.nft.json +1 -0
- package/apps/web/.next/server/app/api/env-vars/[key]/route_client-reference-manifest.js +1 -0
- package/apps/web/.next/server/app/api/env-vars/route.js +1 -0
- package/apps/web/.next/server/app/api/env-vars/route.js.nft.json +1 -0
- package/apps/web/.next/server/app/api/env-vars/route_client-reference-manifest.js +1 -0
- package/apps/web/.next/server/app/api/jobs/[id]/route.js +1 -0
- package/apps/web/.next/server/app/api/jobs/[id]/route.js.nft.json +1 -0
- package/apps/web/.next/server/app/api/jobs/[id]/route_client-reference-manifest.js +1 -0
- package/apps/web/.next/server/app/api/jobs/[id]/runs/route.js +1 -0
- package/apps/web/.next/server/app/api/jobs/[id]/runs/route.js.nft.json +1 -0
- package/apps/web/.next/server/app/api/jobs/[id]/runs/route_client-reference-manifest.js +1 -0
- package/apps/web/.next/server/app/api/jobs/route.js +1 -0
- package/apps/web/.next/server/app/api/jobs/route.js.nft.json +1 -0
- package/apps/web/.next/server/app/api/jobs/route_client-reference-manifest.js +1 -0
- package/apps/web/.next/server/app/api/mcps/[id]/route.js +1 -0
- package/apps/web/.next/server/app/api/mcps/[id]/route.js.nft.json +1 -0
- package/apps/web/.next/server/app/api/mcps/[id]/route_client-reference-manifest.js +1 -0
- package/apps/web/.next/server/app/api/mcps/[id]/test/route.js +1 -0
- package/apps/web/.next/server/app/api/mcps/[id]/test/route.js.nft.json +1 -0
- package/apps/web/.next/server/app/api/mcps/[id]/test/route_client-reference-manifest.js +1 -0
- package/apps/web/.next/server/app/api/mcps/route.js +1 -0
- package/apps/web/.next/server/app/api/mcps/route.js.nft.json +1 -0
- package/apps/web/.next/server/app/api/mcps/route_client-reference-manifest.js +1 -0
- package/apps/web/.next/server/app/api/settings/route.js +1 -0
- package/apps/web/.next/server/app/api/settings/route.js.nft.json +1 -0
- package/apps/web/.next/server/app/api/settings/route_client-reference-manifest.js +1 -0
- package/apps/web/.next/server/app/icon.svg/route.js +1 -0
- package/apps/web/.next/server/app/icon.svg/route.js.nft.json +1 -0
- package/apps/web/.next/server/app/jobs/page.js +2 -0
- package/apps/web/.next/server/app/jobs/page.js.nft.json +1 -0
- package/apps/web/.next/server/app/jobs/page_client-reference-manifest.js +1 -0
- package/apps/web/.next/server/app/login/page.js +2 -0
- package/apps/web/.next/server/app/login/page.js.nft.json +1 -0
- package/apps/web/.next/server/app/login/page_client-reference-manifest.js +1 -0
- package/apps/web/.next/server/app/page.js +2 -0
- package/apps/web/.next/server/app/page.js.nft.json +1 -0
- package/apps/web/.next/server/app/page_client-reference-manifest.js +1 -0
- package/apps/web/.next/server/app/settings/env-vars/page.js +2 -0
- package/apps/web/.next/server/app/settings/env-vars/page.js.nft.json +1 -0
- package/apps/web/.next/server/app/settings/env-vars/page_client-reference-manifest.js +1 -0
- package/apps/web/.next/server/app/settings/mcps/page.js +2 -0
- package/apps/web/.next/server/app/settings/mcps/page.js.nft.json +1 -0
- package/apps/web/.next/server/app/settings/mcps/page_client-reference-manifest.js +1 -0
- package/apps/web/.next/server/app/settings/page.js +2 -0
- package/apps/web/.next/server/app/settings/page.js.nft.json +1 -0
- package/apps/web/.next/server/app/settings/page_client-reference-manifest.js +1 -0
- package/apps/web/.next/server/app-paths-manifest.json +46 -0
- package/apps/web/.next/server/chunks/1157.js +9 -0
- package/apps/web/.next/server/chunks/2287.js +1 -0
- package/apps/web/.next/server/chunks/3444.js +1 -0
- package/apps/web/.next/server/chunks/383.js +6 -0
- package/apps/web/.next/server/chunks/4012.js +58 -0
- package/apps/web/.next/server/chunks/6791.js +1 -0
- package/apps/web/.next/server/chunks/7171.js +1 -0
- package/apps/web/.next/server/chunks/8819.js +22 -0
- package/apps/web/.next/server/edge-runtime-webpack.js +2 -0
- package/apps/web/.next/server/edge-runtime-webpack.js.map +1 -0
- package/apps/web/.next/server/interception-route-rewrite-manifest.js +1 -0
- package/apps/web/.next/server/middleware-build-manifest.js +1 -0
- package/apps/web/.next/server/middleware-manifest.json +32 -0
- package/apps/web/.next/server/middleware-react-loadable-manifest.js +1 -0
- package/apps/web/.next/server/next-font-manifest.js +1 -0
- package/apps/web/.next/server/next-font-manifest.json +1 -0
- package/apps/web/.next/server/pages/_app.js +1 -0
- package/apps/web/.next/server/pages/_app.js.nft.json +1 -0
- package/apps/web/.next/server/pages/_document.js +1 -0
- package/apps/web/.next/server/pages/_document.js.nft.json +1 -0
- package/apps/web/.next/server/pages/_error.js +19 -0
- package/apps/web/.next/server/pages/_error.js.nft.json +1 -0
- package/apps/web/.next/server/pages-manifest.json +5 -0
- package/apps/web/.next/server/server-reference-manifest.js +1 -0
- package/apps/web/.next/server/server-reference-manifest.json +1 -0
- package/apps/web/.next/server/src/middleware.js +14 -0
- package/apps/web/.next/server/src/middleware.js.map +1 -0
- package/apps/web/.next/server/webpack-runtime.js +1 -0
- package/apps/web/.next/static/chunks/18-90b700ea37b686a2.js +1 -0
- package/apps/web/.next/static/chunks/87c73c54-24122e7b92478d00.js +1 -0
- package/apps/web/.next/static/chunks/9664-af80478aa73ba424.js +1 -0
- package/apps/web/.next/static/chunks/app/_not-found/page-b9cee17ed89ca24a.js +1 -0
- package/apps/web/.next/static/chunks/app/agents/[slug]/page-18369fc3fe1a9a7b.js +1 -0
- package/apps/web/.next/static/chunks/app/agents/new/page-bf11cf8901c7e2cd.js +1 -0
- package/apps/web/.next/static/chunks/app/api/agents/[id]/access/route-07f0f73ac9839899.js +1 -0
- package/apps/web/.next/static/chunks/app/api/agents/[id]/claude-md/route-07f0f73ac9839899.js +1 -0
- package/apps/web/.next/static/chunks/app/api/agents/[id]/logs/route-07f0f73ac9839899.js +1 -0
- package/apps/web/.next/static/chunks/app/api/agents/[id]/manifest/route-07f0f73ac9839899.js +1 -0
- package/apps/web/.next/static/chunks/app/api/agents/[id]/mcps/route-07f0f73ac9839899.js +1 -0
- package/apps/web/.next/static/chunks/app/api/agents/[id]/memories/[memId]/route-07f0f73ac9839899.js +1 -0
- package/apps/web/.next/static/chunks/app/api/agents/[id]/memories/route-07f0f73ac9839899.js +1 -0
- package/apps/web/.next/static/chunks/app/api/agents/[id]/permissions/route-07f0f73ac9839899.js +1 -0
- package/apps/web/.next/static/chunks/app/api/agents/[id]/reload/route-07f0f73ac9839899.js +1 -0
- package/apps/web/.next/static/chunks/app/api/agents/[id]/restrictions/route-07f0f73ac9839899.js +1 -0
- package/apps/web/.next/static/chunks/app/api/agents/[id]/route-07f0f73ac9839899.js +1 -0
- package/apps/web/.next/static/chunks/app/api/agents/[id]/skills/[skillId]/route-07f0f73ac9839899.js +1 -0
- package/apps/web/.next/static/chunks/app/api/agents/[id]/skills/route-07f0f73ac9839899.js +1 -0
- package/apps/web/.next/static/chunks/app/api/agents/[id]/slack-info/route-07f0f73ac9839899.js +1 -0
- package/apps/web/.next/static/chunks/app/api/agents/[id]/snapshots/[sid]/restore/route-07f0f73ac9839899.js +1 -0
- package/apps/web/.next/static/chunks/app/api/agents/[id]/snapshots/[sid]/route-07f0f73ac9839899.js +1 -0
- package/apps/web/.next/static/chunks/app/api/agents/[id]/snapshots/route-07f0f73ac9839899.js +1 -0
- package/apps/web/.next/static/chunks/app/api/agents/[id]/start/route-07f0f73ac9839899.js +1 -0
- package/apps/web/.next/static/chunks/app/api/agents/[id]/stop/route-07f0f73ac9839899.js +1 -0
- package/apps/web/.next/static/chunks/app/api/agents/route-07f0f73ac9839899.js +1 -0
- package/apps/web/.next/static/chunks/app/api/auth/login/route-07f0f73ac9839899.js +1 -0
- package/apps/web/.next/static/chunks/app/api/auth/logout/route-07f0f73ac9839899.js +1 -0
- package/apps/web/.next/static/chunks/app/api/auth/me/route-07f0f73ac9839899.js +1 -0
- package/apps/web/.next/static/chunks/app/api/auth/users/[id]/route-07f0f73ac9839899.js +1 -0
- package/apps/web/.next/static/chunks/app/api/auth/users/route-07f0f73ac9839899.js +1 -0
- package/apps/web/.next/static/chunks/app/api/env-vars/[key]/route-07f0f73ac9839899.js +1 -0
- package/apps/web/.next/static/chunks/app/api/env-vars/route-07f0f73ac9839899.js +1 -0
- package/apps/web/.next/static/chunks/app/api/jobs/[id]/route-07f0f73ac9839899.js +1 -0
- package/apps/web/.next/static/chunks/app/api/jobs/[id]/runs/route-07f0f73ac9839899.js +1 -0
- package/apps/web/.next/static/chunks/app/api/jobs/route-07f0f73ac9839899.js +1 -0
- package/apps/web/.next/static/chunks/app/api/mcps/[id]/route-07f0f73ac9839899.js +1 -0
- package/apps/web/.next/static/chunks/app/api/mcps/[id]/test/route-07f0f73ac9839899.js +1 -0
- package/apps/web/.next/static/chunks/app/api/mcps/route-07f0f73ac9839899.js +1 -0
- package/apps/web/.next/static/chunks/app/api/settings/route-07f0f73ac9839899.js +1 -0
- package/apps/web/.next/static/chunks/app/jobs/page-f5aa89a47c50efd8.js +1 -0
- package/apps/web/.next/static/chunks/app/layout-2079f4964aa7314e.js +1 -0
- package/apps/web/.next/static/chunks/app/login/layout-07f0f73ac9839899.js +1 -0
- package/apps/web/.next/static/chunks/app/login/page-aa259283dc38e8f9.js +1 -0
- package/apps/web/.next/static/chunks/app/page-e83437b608104dff.js +1 -0
- package/apps/web/.next/static/chunks/app/settings/env-vars/page-06479dbdfb78b76b.js +1 -0
- package/apps/web/.next/static/chunks/app/settings/mcps/page-75650686ed6490c7.js +1 -0
- package/apps/web/.next/static/chunks/app/settings/page-e1e62fc41ff6cddd.js +1 -0
- package/apps/web/.next/static/chunks/framework-811407f832a33072.js +1 -0
- package/apps/web/.next/static/chunks/main-3f1cddbdd67b1546.js +1 -0
- package/apps/web/.next/static/chunks/main-app-cebd8a6a5ccbf72d.js +1 -0
- package/apps/web/.next/static/chunks/pages/_app-50fa07b56b2d29ac.js +1 -0
- package/apps/web/.next/static/chunks/pages/_error-fed8688bdd23f211.js +1 -0
- package/apps/web/.next/static/chunks/polyfills-42372ed130431b0a.js +1 -0
- package/apps/web/.next/static/chunks/webpack-6c05566dba553c97.js +1 -0
- package/apps/web/.next/static/css/15371687405525e2.css +5 -0
- package/apps/web/.next/static/ikfNbLhuw7jntn35bz0lk/_buildManifest.js +1 -0
- package/apps/web/.next/static/ikfNbLhuw7jntn35bz0lk/_ssgManifest.js +1 -0
- package/apps/web/.next/trace +5 -0
- package/apps/web/.next/types/app/agents/[slug]/page.ts +84 -0
- package/apps/web/.next/types/app/agents/new/page.ts +84 -0
- package/apps/web/.next/types/app/api/agents/[id]/access/route.ts +347 -0
- package/apps/web/.next/types/app/api/agents/[id]/claude-md/route.ts +347 -0
- package/apps/web/.next/types/app/api/agents/[id]/logs/route.ts +347 -0
- package/apps/web/.next/types/app/api/agents/[id]/manifest/route.ts +347 -0
- package/apps/web/.next/types/app/api/agents/[id]/mcps/route.ts +347 -0
- package/apps/web/.next/types/app/api/agents/[id]/memories/[memId]/route.ts +347 -0
- package/apps/web/.next/types/app/api/agents/[id]/memories/route.ts +347 -0
- package/apps/web/.next/types/app/api/agents/[id]/permissions/route.ts +347 -0
- package/apps/web/.next/types/app/api/agents/[id]/reload/route.ts +347 -0
- package/apps/web/.next/types/app/api/agents/[id]/restrictions/route.ts +347 -0
- package/apps/web/.next/types/app/api/agents/[id]/route.ts +347 -0
- package/apps/web/.next/types/app/api/agents/[id]/skills/[skillId]/route.ts +347 -0
- package/apps/web/.next/types/app/api/agents/[id]/skills/route.ts +347 -0
- package/apps/web/.next/types/app/api/agents/[id]/slack-info/route.ts +347 -0
- package/apps/web/.next/types/app/api/agents/[id]/snapshots/[sid]/restore/route.ts +347 -0
- package/apps/web/.next/types/app/api/agents/[id]/snapshots/[sid]/route.ts +347 -0
- package/apps/web/.next/types/app/api/agents/[id]/snapshots/route.ts +347 -0
- package/apps/web/.next/types/app/api/agents/[id]/start/route.ts +347 -0
- package/apps/web/.next/types/app/api/agents/[id]/stop/route.ts +347 -0
- package/apps/web/.next/types/app/api/agents/route.ts +347 -0
- package/apps/web/.next/types/app/api/auth/login/route.ts +347 -0
- package/apps/web/.next/types/app/api/auth/logout/route.ts +347 -0
- package/apps/web/.next/types/app/api/auth/me/route.ts +347 -0
- package/apps/web/.next/types/app/api/auth/users/[id]/route.ts +347 -0
- package/apps/web/.next/types/app/api/auth/users/route.ts +347 -0
- package/apps/web/.next/types/app/api/env-vars/[key]/route.ts +347 -0
- package/apps/web/.next/types/app/api/env-vars/route.ts +347 -0
- package/apps/web/.next/types/app/api/jobs/[id]/route.ts +347 -0
- package/apps/web/.next/types/app/api/jobs/[id]/runs/route.ts +347 -0
- package/apps/web/.next/types/app/api/jobs/route.ts +347 -0
- package/apps/web/.next/types/app/api/mcps/[id]/route.ts +347 -0
- package/apps/web/.next/types/app/api/mcps/[id]/test/route.ts +347 -0
- package/apps/web/.next/types/app/api/mcps/route.ts +347 -0
- package/apps/web/.next/types/app/api/settings/route.ts +347 -0
- package/apps/web/.next/types/app/jobs/page.ts +84 -0
- package/apps/web/.next/types/app/login/layout.ts +84 -0
- package/apps/web/.next/types/app/login/page.ts +84 -0
- package/apps/web/.next/types/app/page.ts +84 -0
- package/apps/web/.next/types/app/settings/env-vars/page.ts +84 -0
- package/apps/web/.next/types/app/settings/mcps/page.ts +84 -0
- package/apps/web/.next/types/app/settings/page.ts +84 -0
- package/apps/web/.next/types/cache-life.d.ts +141 -0
- package/apps/web/.next/types/package.json +1 -0
- package/apps/web/.next/types/routes.d.ts +114 -0
- package/apps/web/.next/types/validator.ts +448 -0
- package/apps/web/Dockerfile +37 -0
- package/apps/web/next-env.d.ts +6 -0
- package/apps/web/next.config.js +6 -0
- package/apps/web/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -0
- package/apps/web/package.json +48 -0
- package/apps/web/postcss.config.js +3 -0
- package/apps/web/public/logo.svg +17 -0
- package/apps/web/src/app/agents/[slug]/page.tsx +2235 -0
- package/apps/web/src/app/agents/new/page.tsx +1161 -0
- package/apps/web/src/app/api/agents/[id]/access/route.ts +76 -0
- package/apps/web/src/app/api/agents/[id]/claude-md/route.ts +111 -0
- package/apps/web/src/app/api/agents/[id]/logs/route.ts +84 -0
- package/apps/web/src/app/api/agents/[id]/manifest/route.ts +32 -0
- package/apps/web/src/app/api/agents/[id]/mcps/route.ts +73 -0
- package/apps/web/src/app/api/agents/[id]/memories/[memId]/route.ts +31 -0
- package/apps/web/src/app/api/agents/[id]/memories/route.ts +56 -0
- package/apps/web/src/app/api/agents/[id]/permissions/route.ts +74 -0
- package/apps/web/src/app/api/agents/[id]/reload/route.ts +33 -0
- package/apps/web/src/app/api/agents/[id]/restrictions/route.ts +85 -0
- package/apps/web/src/app/api/agents/[id]/route.ts +81 -0
- package/apps/web/src/app/api/agents/[id]/skills/[skillId]/route.ts +52 -0
- package/apps/web/src/app/api/agents/[id]/skills/route.ts +80 -0
- package/apps/web/src/app/api/agents/[id]/slack-info/route.ts +38 -0
- package/apps/web/src/app/api/agents/[id]/snapshots/[sid]/restore/route.ts +61 -0
- package/apps/web/src/app/api/agents/[id]/snapshots/[sid]/route.ts +53 -0
- package/apps/web/src/app/api/agents/[id]/snapshots/route.ts +84 -0
- package/apps/web/src/app/api/agents/[id]/start/route.ts +35 -0
- package/apps/web/src/app/api/agents/[id]/stop/route.ts +35 -0
- package/apps/web/src/app/api/agents/route.ts +99 -0
- package/apps/web/src/app/api/auth/login/route.ts +39 -0
- package/apps/web/src/app/api/auth/logout/route.ts +21 -0
- package/apps/web/src/app/api/auth/me/route.ts +24 -0
- package/apps/web/src/app/api/auth/users/[id]/route.ts +48 -0
- package/apps/web/src/app/api/auth/users/route.ts +63 -0
- package/apps/web/src/app/api/env-vars/[key]/route.ts +66 -0
- package/apps/web/src/app/api/env-vars/route.ts +59 -0
- package/apps/web/src/app/api/jobs/[id]/route.ts +51 -0
- package/apps/web/src/app/api/jobs/[id]/runs/route.ts +24 -0
- package/apps/web/src/app/api/jobs/route.ts +42 -0
- package/apps/web/src/app/api/mcps/[id]/route.ts +60 -0
- package/apps/web/src/app/api/mcps/[id]/test/route.ts +195 -0
- package/apps/web/src/app/api/mcps/route.ts +72 -0
- package/apps/web/src/app/api/settings/route.ts +42 -0
- package/apps/web/src/app/globals.css +124 -0
- package/apps/web/src/app/icon.svg +17 -0
- package/apps/web/src/app/jobs/page.tsx +543 -0
- package/apps/web/src/app/layout-shell.tsx +89 -0
- package/apps/web/src/app/layout.tsx +18 -0
- package/apps/web/src/app/login/layout.tsx +9 -0
- package/apps/web/src/app/login/page.tsx +150 -0
- package/apps/web/src/app/page.tsx +573 -0
- package/apps/web/src/app/settings/env-vars/page.tsx +216 -0
- package/apps/web/src/app/settings/mcps/page.tsx +763 -0
- package/apps/web/src/app/settings/page.tsx +528 -0
- package/apps/web/src/app/sidebar.tsx +345 -0
- package/apps/web/src/lib/__tests__/api-guard.test.ts +189 -0
- package/apps/web/src/lib/__tests__/auth.test.ts +262 -0
- package/apps/web/src/lib/__tests__/boss-registry.test.ts +323 -0
- package/apps/web/src/lib/__tests__/compile.test.ts +161 -0
- package/apps/web/src/lib/__tests__/db-agent-hierarchy.test.ts +136 -0
- package/apps/web/src/lib/__tests__/db-env-vars.test.ts +216 -0
- package/apps/web/src/lib/__tests__/db-restrictions.test.ts +117 -0
- package/apps/web/src/lib/__tests__/db.integration.test.ts +271 -0
- package/apps/web/src/lib/__tests__/diff.test.ts +102 -0
- package/apps/web/src/lib/__tests__/mcp-mask.test.ts +274 -0
- package/apps/web/src/lib/__tests__/skill-templates.test.ts +237 -0
- package/apps/web/src/lib/__tests__/slack-manifest.test.ts +105 -0
- package/apps/web/src/lib/api-guard.ts +68 -0
- package/apps/web/src/lib/auth-context.tsx +71 -0
- package/apps/web/src/lib/auth.ts +128 -0
- package/apps/web/src/lib/boss-registry.ts +90 -0
- package/apps/web/src/lib/compile.ts +51 -0
- package/apps/web/src/lib/db.ts +1196 -0
- package/apps/web/src/lib/diff.ts +43 -0
- package/apps/web/src/lib/mcp-mask.ts +91 -0
- package/apps/web/src/lib/portal.tsx +23 -0
- package/apps/web/src/lib/skill-templates.ts +148 -0
- package/apps/web/src/lib/slack-manifest.ts +85 -0
- package/apps/web/src/middleware.ts +68 -0
- package/apps/web/tailwind.config.js +6 -0
- package/apps/web/tsconfig.json +23 -0
- package/apps/web/vitest.config.mts +21 -0
- package/cli/.claude/settings.local.json +6 -0
- package/cli/README.md +281 -0
- package/cli/node_modules/.package-lock.json +427 -0
- package/cli/node_modules/commander/LICENSE +22 -0
- package/cli/node_modules/commander/Readme.md +1157 -0
- package/cli/node_modules/commander/esm.mjs +16 -0
- package/cli/node_modules/commander/index.js +24 -0
- package/cli/node_modules/commander/lib/argument.js +149 -0
- package/cli/node_modules/commander/lib/command.js +2509 -0
- package/cli/node_modules/commander/lib/error.js +39 -0
- package/cli/node_modules/commander/lib/help.js +520 -0
- package/cli/node_modules/commander/lib/option.js +330 -0
- package/cli/node_modules/commander/lib/suggestSimilar.js +101 -0
- package/cli/node_modules/commander/package-support.json +16 -0
- package/cli/node_modules/commander/package.json +84 -0
- package/cli/node_modules/commander/typings/esm.d.mts +3 -0
- package/cli/node_modules/commander/typings/index.d.ts +969 -0
- package/cli/package-lock.json +449 -0
- package/cli/package.json +44 -0
- package/cli/src/commands/init.ts +514 -0
- package/cli/src/commands/manage.ts +115 -0
- package/cli/src/index.ts +63 -0
- package/cli/tsconfig.json +14 -0
- package/docker-compose.yml +122 -0
- package/docs/agents/boss-agents.mdx +108 -0
- package/docs/agents/creating-agents.mdx +132 -0
- package/docs/agents/memory.mdx +113 -0
- package/docs/agents/tools.mdx +103 -0
- package/docs/configuration/env-vars.mdx +166 -0
- package/docs/configuration/mcp-servers.mdx +203 -0
- package/docs/configuration/slack-app.mdx +175 -0
- package/docs/docs.json +79 -0
- package/docs/favicon.svg +17 -0
- package/docs/features/history.mdx +60 -0
- package/docs/features/import-export.mdx +77 -0
- package/docs/features/logs.mdx +131 -0
- package/docs/features/multi-workspace.mdx +90 -0
- package/docs/features/scheduled-jobs.mdx +231 -0
- package/docs/features/users.mdx +92 -0
- package/docs/introduction.mdx +160 -0
- package/docs/logo/dark.svg +17 -0
- package/docs/logo/light.svg +17 -0
- package/docs/logo/wide-dark.svg +12 -0
- package/docs/logo/wide-light.svg +12 -0
- package/docs/quickstart.mdx +270 -0
- package/docs/self-hosting/docker.mdx +151 -0
- package/docs/self-hosting/production.mdx +176 -0
- package/package.json +20 -36
- package/packages/shared/dist/index.d.ts +8 -0
- package/packages/shared/dist/index.d.ts.map +1 -0
- package/packages/shared/dist/index.js +24 -0
- package/packages/shared/dist/index.js.map +1 -0
- package/packages/shared/dist/types.d.ts +584 -0
- package/packages/shared/dist/types.d.ts.map +1 -0
- package/packages/shared/dist/types.js +39 -0
- package/packages/shared/dist/types.js.map +1 -0
- package/packages/shared/package.json +15 -0
- package/packages/shared/src/db/schema.sql +354 -0
- package/packages/shared/src/index.ts +8 -0
- package/packages/shared/src/types.ts +683 -0
- package/packages/shared/tsconfig.json +17 -0
- package/scripts/dev.sh +45 -0
- /package/{dist → cli/dist}/commands/init.d.ts +0 -0
- /package/{dist → cli/dist}/commands/init.js +0 -0
- /package/{dist → cli/dist}/commands/manage.d.ts +0 -0
- /package/{dist → cli/dist}/commands/manage.js +0 -0
- /package/{dist → cli/dist}/index.d.ts +0 -0
- /package/{dist → cli/dist}/index.js +0 -0
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Introduction"
|
|
3
|
+
description: "SlackHive turns your Slack workspace into a team of AI agents — specialists you @mention, a Boss that coordinates, and memory that compounds over time."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
## Build your AI-first company on Slack
|
|
7
|
+
|
|
8
|
+
Your team already lives in Slack. Every question, decision, and follow-up happens there. SlackHive adds AI agents to that same workspace — they sit alongside your people, in the same channels, in the same threads.
|
|
9
|
+
|
|
10
|
+
These aren't chatbots you switch to. They're **colleagues you @mention**. Each one connects to the tools your team already uses — Notion, Jira, GitHub, Figma, your database, your analytics stack. They read context, take action, and report back — right inside Slack.
|
|
11
|
+
|
|
12
|
+
**Anyone on the team can create an agent.** No engineers required. If you can describe what you need, you can deploy it in minutes.
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## What this looks like in practice
|
|
17
|
+
|
|
18
|
+
A CEO who wants to drill into metrics doesn't open a BI tool — they ask `@data-analyst` directly in Slack. An engineer debugging a production issue asks `@devops` to tail logs and open a PR with the fix. A PM sketches a feature idea and asks `@designer` to create the initial wireframe in Figma. A marketer asks `@content-writer` to draft a campaign brief in their brand voice.
|
|
19
|
+
|
|
20
|
+
Every tool your company uses — Notion, Jira, GitHub, Redshift, HubSpot, Figma — becomes accessible through a simple @mention in Slack.
|
|
21
|
+
|
|
22
|
+
```
|
|
23
|
+
CEO: @data-analyst revenue is down 8% this week, can you dig in?
|
|
24
|
+
DataBot: [queries Redshift across 6 dimensions]
|
|
25
|
+
Found it — enterprise tier churn spiked on Tuesday after
|
|
26
|
+
the pricing page change. 3 accounts, $42k ARR. @boss — done!
|
|
27
|
+
|
|
28
|
+
Engineer: @devops the checkout service is throwing 500s, what's happening?
|
|
29
|
+
DevOps: [reads logs via MCP, identifies root cause]
|
|
30
|
+
Memory leak in the payment processor connection pool.
|
|
31
|
+
I've opened PR #847 with the fix and added a health check.
|
|
32
|
+
|
|
33
|
+
PM: @designer can you mock up a simpler onboarding flow?
|
|
34
|
+
Designer: [uses Figma MCP to create frames]
|
|
35
|
+
Done — here's the Figma link with 3 variants. Let me know
|
|
36
|
+
which direction you want to take.
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## Two ways to work
|
|
42
|
+
|
|
43
|
+
### Tag a specialist directly
|
|
44
|
+
|
|
45
|
+
When you know who to ask, @mention them. The agent reads the thread, uses its tools, and replies.
|
|
46
|
+
|
|
47
|
+
```
|
|
48
|
+
You: @data-analyst pull last week's conversion funnel
|
|
49
|
+
DataBot: [reads thread, runs Redshift query]
|
|
50
|
+
Conversions were up 12% WoW. Checkout completion
|
|
51
|
+
jumped 3×. Want a channel or cohort breakdown?
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
### Ask @boss to figure it out
|
|
55
|
+
|
|
56
|
+
When you're not sure who handles it, tag your Boss agent. Boss reads your request, finds the right specialist, delegates in the same thread, and summarizes the result.
|
|
57
|
+
|
|
58
|
+
```
|
|
59
|
+
You: @boss can you analyze last week's conversion funnel?
|
|
60
|
+
Boss: That's right up @data-analyst's alley. Let me loop them in 👇
|
|
61
|
+
@data-analyst — user wants conversion funnel analysis for last week.
|
|
62
|
+
When you're done, please tag @boss.
|
|
63
|
+
|
|
64
|
+
DataBot: [reads full thread, runs Redshift query]
|
|
65
|
+
Conversions were up 12% WoW, driven by a 3× improvement
|
|
66
|
+
in checkout completion. @boss — done!
|
|
67
|
+
|
|
68
|
+
Boss: Great find @data-analyst! To summarize —
|
|
69
|
+
conversions are up 12% week-over-week. The big win was
|
|
70
|
+
checkout: completion rate jumped 3×. Want me to dig into
|
|
71
|
+
which channels drove that?
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
The specialist receives the **full Slack thread** as context — nothing is lost in the handoff.
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
## How SlackHive works
|
|
79
|
+
|
|
80
|
+
<Steps>
|
|
81
|
+
<Step title="Create an agent">
|
|
82
|
+
Give it a name, a persona ("You are a data analyst who writes concise SQL..."), and connect it to a Slack app. Takes about 5 minutes.
|
|
83
|
+
</Step>
|
|
84
|
+
<Step title="Connect it to your tools">
|
|
85
|
+
Assign MCP servers to give the agent real capabilities — query a database, read files, call an API, create Jira tickets, update Notion pages. Or leave it as a conversational agent.
|
|
86
|
+
</Step>
|
|
87
|
+
<Step title="Your team @mentions it in Slack">
|
|
88
|
+
The agent wakes up, reads the thread for context, uses its tools, and replies directly in the thread.
|
|
89
|
+
</Step>
|
|
90
|
+
<Step title="It learns and improves">
|
|
91
|
+
After each conversation, the agent writes structured memory — who you are, what you prefer, what it learned about your team. Those memories are loaded at the start of every future conversation.
|
|
92
|
+
</Step>
|
|
93
|
+
</Steps>
|
|
94
|
+
|
|
95
|
+
---
|
|
96
|
+
|
|
97
|
+
## What's included
|
|
98
|
+
|
|
99
|
+
<CardGroup cols={2}>
|
|
100
|
+
<Card title="Boss Orchestration" icon="sitemap">
|
|
101
|
+
A Boss agent receives high-level requests and delegates to the right specialists via Slack thread @mentions. Specialists report back, and Boss consolidates results.
|
|
102
|
+
</Card>
|
|
103
|
+
<Card title="Persistent Memory" icon="brain">
|
|
104
|
+
Agents write structured memories during every session — feedback, user context, project state. Memories compound over time — the longer an agent works with your team, the sharper it gets.
|
|
105
|
+
</Card>
|
|
106
|
+
<Card title="MCP Tool Servers" icon="plug">
|
|
107
|
+
Connect agents to any external tool — Notion, Jira, GitHub, Redshift, Figma, HubSpot — via the Model Context Protocol. Manage a global catalog and assign per-agent.
|
|
108
|
+
</Card>
|
|
109
|
+
<Card title="Skills" icon="terminal">
|
|
110
|
+
Skills are domain knowledge files your agent always carries — SQL conventions, writing guidelines, PR templates. Give agents repeatable workflows baked into their context.
|
|
111
|
+
</Card>
|
|
112
|
+
<Card title="Encrypted Secret Store" icon="lock">
|
|
113
|
+
A platform-level encrypted store for API keys and credentials. MCP configs reference secrets by name — raw values are never exposed in the API or UI.
|
|
114
|
+
</Card>
|
|
115
|
+
<Card title="Hot Reload" icon="bolt">
|
|
116
|
+
Edit any agent — instructions, skills, tools, permissions — and changes take effect within seconds. No restarts, no downtime.
|
|
117
|
+
</Card>
|
|
118
|
+
<Card title="Version History" icon="clock-rotate-left">
|
|
119
|
+
Every save auto-snapshots the full agent state. Browse history with line-level diffs and restore any version with one click.
|
|
120
|
+
</Card>
|
|
121
|
+
<Card title="Access Control" icon="shield">
|
|
122
|
+
Four roles: superadmin, admin, editor, and viewer. Grant per-agent access to specific team members. All permissions enforced server-side.
|
|
123
|
+
</Card>
|
|
124
|
+
</CardGroup>
|
|
125
|
+
|
|
126
|
+
---
|
|
127
|
+
|
|
128
|
+
## Under the hood
|
|
129
|
+
|
|
130
|
+
SlackHive runs as four Docker Compose services:
|
|
131
|
+
|
|
132
|
+
| Service | What it does |
|
|
133
|
+
|---------|-------------|
|
|
134
|
+
| **Web** (Next.js) | The management dashboard — create agents, edit skills, view logs |
|
|
135
|
+
| **Runner** (Node.js) | Hosts all agent processes and maintains their Slack connections |
|
|
136
|
+
| **PostgreSQL** | Stores agents, memories, skills, sessions, users, and history |
|
|
137
|
+
| **Redis** | Pub/sub bus that delivers hot-reload events from Web to Runner instantly |
|
|
138
|
+
|
|
139
|
+
<Note>
|
|
140
|
+
SlackHive agents are powered by **Claude Code** — not a chatbot wrapper. Each agent is a real AI agent with tools, memory, and instructions. Works with a Claude Pro or Max subscription, or a standard API key.
|
|
141
|
+
</Note>
|
|
142
|
+
|
|
143
|
+
---
|
|
144
|
+
|
|
145
|
+
## Get started
|
|
146
|
+
|
|
147
|
+
<CardGroup cols={2}>
|
|
148
|
+
<Card title="Quick Start" icon="rocket" href="/quickstart">
|
|
149
|
+
From zero to your first agent responding in Slack — in under 10 minutes.
|
|
150
|
+
</Card>
|
|
151
|
+
<Card title="Create an Agent" icon="robot" href="/agents/creating-agents">
|
|
152
|
+
Walk through the agent creation wizard in detail.
|
|
153
|
+
</Card>
|
|
154
|
+
<Card title="Boss Agents" icon="sitemap" href="/agents/boss-agents">
|
|
155
|
+
Set up a Boss to orchestrate a team of specialists.
|
|
156
|
+
</Card>
|
|
157
|
+
<Card title="MCP Servers" icon="plug" href="/configuration/mcp-servers">
|
|
158
|
+
Connect agents to Notion, Jira, GitHub, databases, and more.
|
|
159
|
+
</Card>
|
|
160
|
+
</CardGroup>
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
|
|
2
|
+
<defs>
|
|
3
|
+
<style>
|
|
4
|
+
.bg { fill: #1A1918; }
|
|
5
|
+
.line { fill: none; stroke: #EBE6E0; stroke-width: 32; stroke-linecap: round; stroke-linejoin: round; }
|
|
6
|
+
.prompt-accent { fill: none; stroke: #D97757; stroke-width: 32; stroke-linecap: round; stroke-linejoin: round; }
|
|
7
|
+
.cursor { fill: #D97757; }
|
|
8
|
+
</style>
|
|
9
|
+
</defs>
|
|
10
|
+
<rect class="bg" width="512" height="512" rx="112" />
|
|
11
|
+
<path class="line" d="M 200 140 L 200 372" />
|
|
12
|
+
<path class="line" d="M 312 140 L 312 372" />
|
|
13
|
+
<path class="line" d="M 140 200 L 372 200" />
|
|
14
|
+
<path class="prompt-accent" d="M 100 280 L 140 312 L 100 344" />
|
|
15
|
+
<path class="line" d="M 180 312 L 280 312" />
|
|
16
|
+
<rect class="cursor" x="312" y="296" width="40" height="32" rx="6" />
|
|
17
|
+
</svg>
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
|
|
2
|
+
<defs>
|
|
3
|
+
<style>
|
|
4
|
+
.bg { fill: #F5F0EB; }
|
|
5
|
+
.line { fill: none; stroke: #1A1918; stroke-width: 32; stroke-linecap: round; stroke-linejoin: round; }
|
|
6
|
+
.prompt-accent { fill: none; stroke: #D97757; stroke-width: 32; stroke-linecap: round; stroke-linejoin: round; }
|
|
7
|
+
.cursor { fill: #D97757; }
|
|
8
|
+
</style>
|
|
9
|
+
</defs>
|
|
10
|
+
<rect class="bg" width="512" height="512" rx="112" />
|
|
11
|
+
<path class="line" d="M 200 140 L 200 372" />
|
|
12
|
+
<path class="line" d="M 312 140 L 312 372" />
|
|
13
|
+
<path class="line" d="M 140 200 L 372 200" />
|
|
14
|
+
<path class="prompt-accent" d="M 100 280 L 140 312 L 100 344" />
|
|
15
|
+
<path class="line" d="M 180 312 L 280 312" />
|
|
16
|
+
<rect class="cursor" x="312" y="296" width="40" height="32" rx="6" />
|
|
17
|
+
</svg>
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 60" fill="none">
|
|
2
|
+
<!-- Icon -->
|
|
3
|
+
<rect x="0" y="2" width="56" height="56" rx="12" fill="#1A1918"/>
|
|
4
|
+
<line x1="20" y1="14" x2="20" y2="46" stroke="#EBE6E0" stroke-width="4" stroke-linecap="round"/>
|
|
5
|
+
<line x1="36" y1="14" x2="36" y2="46" stroke="#EBE6E0" stroke-width="4" stroke-linecap="round"/>
|
|
6
|
+
<line x1="12" y1="22" x2="44" y2="22" stroke="#EBE6E0" stroke-width="4" stroke-linecap="round"/>
|
|
7
|
+
<polyline points="8,32 14,38 8,44" fill="none" stroke="#D97757" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/>
|
|
8
|
+
<line x1="18" y1="38" x2="30" y2="38" stroke="#EBE6E0" stroke-width="4" stroke-linecap="round"/>
|
|
9
|
+
<rect x="34" y="34" width="6" height="5" rx="1.5" fill="#D97757"/>
|
|
10
|
+
<!-- Text -->
|
|
11
|
+
<text x="68" y="44" font-family="system-ui,-apple-system,sans-serif" font-size="38" font-weight="700" fill="#EBE6E0">SlackHive</text>
|
|
12
|
+
</svg>
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 60" fill="none">
|
|
2
|
+
<!-- Icon -->
|
|
3
|
+
<rect x="0" y="2" width="56" height="56" rx="12" fill="#1A1918"/>
|
|
4
|
+
<line x1="20" y1="14" x2="20" y2="46" stroke="#EBE6E0" stroke-width="4" stroke-linecap="round"/>
|
|
5
|
+
<line x1="36" y1="14" x2="36" y2="46" stroke="#EBE6E0" stroke-width="4" stroke-linecap="round"/>
|
|
6
|
+
<line x1="12" y1="22" x2="44" y2="22" stroke="#EBE6E0" stroke-width="4" stroke-linecap="round"/>
|
|
7
|
+
<polyline points="8,32 14,38 8,44" fill="none" stroke="#D97757" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/>
|
|
8
|
+
<line x1="18" y1="38" x2="30" y2="38" stroke="#EBE6E0" stroke-width="4" stroke-linecap="round"/>
|
|
9
|
+
<rect x="34" y="34" width="6" height="5" rx="1.5" fill="#D97757"/>
|
|
10
|
+
<!-- Text -->
|
|
11
|
+
<text x="68" y="44" font-family="system-ui,-apple-system,sans-serif" font-size="38" font-weight="700" fill="#1A1918">SlackHive</text>
|
|
12
|
+
</svg>
|
|
@@ -0,0 +1,270 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Quick Start"
|
|
3
|
+
description: "From zero to your first AI agent responding in Slack — in under 10 minutes."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
This guide takes you from a fresh machine to a working SlackHive setup with a live agent in your Slack workspace. You'll install SlackHive, create a Slack app, and send your first message to an AI agent.
|
|
7
|
+
|
|
8
|
+
<Note>
|
|
9
|
+
**Before you begin, you'll need:**
|
|
10
|
+
- [Docker Desktop](https://www.docker.com/products/docker-desktop/) installed and running
|
|
11
|
+
- A Slack workspace where you can install apps (you need to be an admin, or have permission to install apps)
|
|
12
|
+
- One of:
|
|
13
|
+
- An [Anthropic API key](https://console.anthropic.com) — pay per token, best for teams
|
|
14
|
+
- A Claude Pro or Max subscription — run `claude login` on your machine first
|
|
15
|
+
</Note>
|
|
16
|
+
|
|
17
|
+
## Install SlackHive
|
|
18
|
+
|
|
19
|
+
<Tabs>
|
|
20
|
+
<Tab title="CLI (Recommended)">
|
|
21
|
+
The `slackhive` CLI handles everything automatically — it checks your environment, clones the repo, walks you through configuration, and starts all services.
|
|
22
|
+
|
|
23
|
+
<Steps>
|
|
24
|
+
<Step title="Install the CLI">
|
|
25
|
+
Open your terminal and run:
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
npm install -g slackhive
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
<Note>Requires Node.js 20 or later. Check your version with `node --version`.</Note>
|
|
32
|
+
</Step>
|
|
33
|
+
<Step title="Run the setup wizard">
|
|
34
|
+
```bash
|
|
35
|
+
slackhive init
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
The wizard will ask you a few questions:
|
|
39
|
+
|
|
40
|
+
| Prompt | What to enter |
|
|
41
|
+
|--------|---------------|
|
|
42
|
+
| **Install directory** | Where to put SlackHive (default: `./slackhive`) |
|
|
43
|
+
| **Admin username** | Your login name for the dashboard |
|
|
44
|
+
| **Admin password** | Choose a strong password |
|
|
45
|
+
| **Anthropic API key** | Your `sk-ant-api03-...` key, or leave blank for Claude Max |
|
|
46
|
+
|
|
47
|
+
Everything else (database passwords, encryption keys) is generated automatically.
|
|
48
|
+
|
|
49
|
+
Once you confirm, the wizard checks that Docker is running, builds the images, and starts all four services. This takes 2–3 minutes on the first run.
|
|
50
|
+
</Step>
|
|
51
|
+
<Step title="Open the dashboard">
|
|
52
|
+
When the wizard finishes, navigate to:
|
|
53
|
+
|
|
54
|
+
```
|
|
55
|
+
http://localhost:3001
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
Log in with the admin credentials you just set. You'll see the SlackHive dashboard.
|
|
59
|
+
</Step>
|
|
60
|
+
</Steps>
|
|
61
|
+
</Tab>
|
|
62
|
+
<Tab title="Manual Setup">
|
|
63
|
+
If you prefer to set things up yourself:
|
|
64
|
+
|
|
65
|
+
<Steps>
|
|
66
|
+
<Step title="Clone the repository">
|
|
67
|
+
```bash
|
|
68
|
+
git clone https://github.com/pelago-labs/slackhive.git
|
|
69
|
+
cd slackhive
|
|
70
|
+
```
|
|
71
|
+
</Step>
|
|
72
|
+
<Step title="Create your environment file">
|
|
73
|
+
```bash
|
|
74
|
+
cp .env.example .env
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
Open `.env` and fill in these required values:
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
# Claude (choose one)
|
|
81
|
+
ANTHROPIC_API_KEY=sk-ant-api03-...
|
|
82
|
+
|
|
83
|
+
# Database
|
|
84
|
+
POSTGRES_DB=slackhive
|
|
85
|
+
POSTGRES_USER=slackhive
|
|
86
|
+
POSTGRES_PASSWORD=your-strong-password
|
|
87
|
+
|
|
88
|
+
# Redis
|
|
89
|
+
REDIS_PASSWORD=your-strong-password
|
|
90
|
+
|
|
91
|
+
# Dashboard login
|
|
92
|
+
ADMIN_USERNAME=admin
|
|
93
|
+
ADMIN_PASSWORD=your-strong-password
|
|
94
|
+
|
|
95
|
+
# Security keys — generate with: openssl rand -hex 32
|
|
96
|
+
AUTH_SECRET=...
|
|
97
|
+
ENV_SECRET_KEY=...
|
|
98
|
+
|
|
99
|
+
NODE_ENV=production
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
<Tip>
|
|
103
|
+
Generate strong values for `AUTH_SECRET` and `ENV_SECRET_KEY` with:
|
|
104
|
+
```bash
|
|
105
|
+
openssl rand -hex 32
|
|
106
|
+
```
|
|
107
|
+
</Tip>
|
|
108
|
+
</Step>
|
|
109
|
+
<Step title="Start all services">
|
|
110
|
+
```bash
|
|
111
|
+
docker compose up -d --build
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
This builds and starts four containers:
|
|
115
|
+
|
|
116
|
+
| Container | Port | Description |
|
|
117
|
+
|-----------|------|-------------|
|
|
118
|
+
| `web` | 3001 | Management dashboard |
|
|
119
|
+
| `runner` | — | Agent process host |
|
|
120
|
+
| `postgres` | 5432 | Database |
|
|
121
|
+
| `redis` | 6379 | Hot-reload event bus |
|
|
122
|
+
|
|
123
|
+
First run takes 2–3 minutes while images build.
|
|
124
|
+
</Step>
|
|
125
|
+
<Step title="Open the dashboard">
|
|
126
|
+
Navigate to [http://localhost:3001](http://localhost:3001) and log in.
|
|
127
|
+
</Step>
|
|
128
|
+
</Steps>
|
|
129
|
+
|
|
130
|
+
<Warning>
|
|
131
|
+
Never commit your `.env` file. It contains secrets and is already listed in `.gitignore`.
|
|
132
|
+
</Warning>
|
|
133
|
+
</Tab>
|
|
134
|
+
</Tabs>
|
|
135
|
+
|
|
136
|
+
## Create your first agent
|
|
137
|
+
|
|
138
|
+
Once you're logged into the dashboard, click **New Agent** in the sidebar. This opens a 5-step wizard.
|
|
139
|
+
|
|
140
|
+
<Steps>
|
|
141
|
+
<Step title="Name & Role">
|
|
142
|
+
Give your agent:
|
|
143
|
+
- **Name** — shown in Slack (e.g. "Data Analyst" or "Ava")
|
|
144
|
+
- **Description** — what this agent does. Keep it short — this is used by Boss agents to know who to delegate to.
|
|
145
|
+
- **Persona** — how the agent should behave. This becomes its identity. Example:
|
|
146
|
+
|
|
147
|
+
```
|
|
148
|
+
You are a data analyst who specializes in SQL queries and business metrics.
|
|
149
|
+
You give concise, direct answers. You always show your SQL before running it.
|
|
150
|
+
When you have results, lead with the key insight, then show the numbers.
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
- **Model** — `claude-sonnet-4-6` is a good default for most agents
|
|
154
|
+
|
|
155
|
+
Leave the **Boss** toggle off for now. You can come back to that later.
|
|
156
|
+
</Step>
|
|
157
|
+
<Step title="Create a Slack App">
|
|
158
|
+
Each SlackHive agent needs its own Slack app. The wizard generates everything you need.
|
|
159
|
+
|
|
160
|
+
1. Click **Generate Manifest** in the wizard
|
|
161
|
+
2. Open [api.slack.com/apps](https://api.slack.com/apps) in a **new tab**
|
|
162
|
+
3. Click **Create New App** → **From an app manifest**
|
|
163
|
+
4. Select your Slack workspace
|
|
164
|
+
5. Paste the manifest JSON from the wizard
|
|
165
|
+
6. Click **Create**
|
|
166
|
+
7. On the next screen, click **Install to Workspace** → **Allow**
|
|
167
|
+
|
|
168
|
+
Your Slack bot now exists in your workspace. You'll grab its credentials in the next step.
|
|
169
|
+
|
|
170
|
+
<Tip>
|
|
171
|
+
Keep the Slack app settings tab open — you'll need it for Step 3.
|
|
172
|
+
</Tip>
|
|
173
|
+
</Step>
|
|
174
|
+
<Step title="Enter Credentials">
|
|
175
|
+
You need three values from your Slack app. Go back to the Slack app settings tab:
|
|
176
|
+
|
|
177
|
+
**Bot Token**
|
|
178
|
+
- Go to **OAuth & Permissions** in the left sidebar
|
|
179
|
+
- Copy the **Bot User OAuth Token** — it starts with `xoxb-`
|
|
180
|
+
|
|
181
|
+
**App Token**
|
|
182
|
+
- Go to **Basic Information**
|
|
183
|
+
- Scroll to **App-Level Tokens**
|
|
184
|
+
- Click **Generate Token and Scopes**
|
|
185
|
+
- Give it any name (e.g. "socket-mode")
|
|
186
|
+
- Add the scope `connections:write`
|
|
187
|
+
- Click **Generate**, then copy the token — it starts with `xapp-`
|
|
188
|
+
|
|
189
|
+
**Signing Secret**
|
|
190
|
+
- Still on **Basic Information**
|
|
191
|
+
- Under **App Credentials**, click **Show** next to Signing Secret and copy it
|
|
192
|
+
|
|
193
|
+
Paste all three into the wizard and click **Verify Connection**. If it fails, see [Slack App Setup](/configuration/slack-app) for troubleshooting.
|
|
194
|
+
</Step>
|
|
195
|
+
<Step title="Tools (Optional)">
|
|
196
|
+
Choose a **starter template** for your agent's skill set:
|
|
197
|
+
- **Blank** — clean slate
|
|
198
|
+
- **Data Analyst** — SQL patterns, data summarization
|
|
199
|
+
- **Writer** — content drafting, editing
|
|
200
|
+
- **Developer** — code review, PR summaries
|
|
201
|
+
|
|
202
|
+
You can also assign **MCP servers** here if you've added any to the catalog. MCP servers give agents access to external tools like databases and APIs. Skip this for now — you can add them later.
|
|
203
|
+
</Step>
|
|
204
|
+
<Step title="Review & Create">
|
|
205
|
+
Review the summary and click **Create Agent**.
|
|
206
|
+
|
|
207
|
+
The runner picks up the new agent within a few seconds. You'll see the agent status change to **Active** in the dashboard.
|
|
208
|
+
</Step>
|
|
209
|
+
</Steps>
|
|
210
|
+
|
|
211
|
+
## Test your agent in Slack
|
|
212
|
+
|
|
213
|
+
Your agent is now live. Let's make sure it works.
|
|
214
|
+
|
|
215
|
+
<Steps>
|
|
216
|
+
<Step title="Invite the bot to a channel">
|
|
217
|
+
In Slack, go to any channel and type:
|
|
218
|
+
|
|
219
|
+
```
|
|
220
|
+
/invite @your-agent-name
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
Replace `your-agent-name` with the bot's Slack handle (it matches the name you gave it in the wizard).
|
|
224
|
+
</Step>
|
|
225
|
+
<Step title="Send a message">
|
|
226
|
+
@mention your agent:
|
|
227
|
+
|
|
228
|
+
```
|
|
229
|
+
@your-agent-name hello, what can you help me with?
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
You should see a typing indicator, then a response in the thread.
|
|
233
|
+
</Step>
|
|
234
|
+
</Steps>
|
|
235
|
+
|
|
236
|
+
<Tip>
|
|
237
|
+
You can also DM the bot directly without inviting it to a channel. Open a new DM in Slack, find your agent by name, and start chatting.
|
|
238
|
+
</Tip>
|
|
239
|
+
|
|
240
|
+
If you don't get a response, check the **Logs** tab on the agent's detail page in the dashboard — it shows exactly what happened and any errors.
|
|
241
|
+
|
|
242
|
+
## CLI reference
|
|
243
|
+
|
|
244
|
+
Once installed, the `slackhive` CLI gives you quick access to common operations:
|
|
245
|
+
|
|
246
|
+
| Command | What it does |
|
|
247
|
+
|---------|-------------|
|
|
248
|
+
| `slackhive init` | First-time setup wizard |
|
|
249
|
+
| `slackhive start` | Start all services |
|
|
250
|
+
| `slackhive stop` | Stop all services |
|
|
251
|
+
| `slackhive status` | Show running containers |
|
|
252
|
+
| `slackhive logs` | Tail the runner logs |
|
|
253
|
+
| `slackhive update` | Pull latest changes and rebuild |
|
|
254
|
+
|
|
255
|
+
## What's next
|
|
256
|
+
|
|
257
|
+
<CardGroup cols={2}>
|
|
258
|
+
<Card title="Create a Boss Agent" icon="sitemap" href="/agents/boss-agents">
|
|
259
|
+
Set up an orchestrator that routes requests to the right specialist automatically.
|
|
260
|
+
</Card>
|
|
261
|
+
<Card title="Connect MCP Servers" icon="plug" href="/configuration/mcp-servers">
|
|
262
|
+
Give your agent real tools — query databases, read files, call APIs.
|
|
263
|
+
</Card>
|
|
264
|
+
<Card title="Agent Memory" icon="brain" href="/agents/memory">
|
|
265
|
+
Learn how agents remember context and get smarter over time.
|
|
266
|
+
</Card>
|
|
267
|
+
<Card title="Environment Variables" icon="lock" href="/configuration/env-vars">
|
|
268
|
+
Full reference for all configuration options.
|
|
269
|
+
</Card>
|
|
270
|
+
</CardGroup>
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Docker Setup"
|
|
3
|
+
description: "Run SlackHive with Docker Compose — the standard deployment method."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
## Docker Compose architecture
|
|
7
|
+
|
|
8
|
+
SlackHive runs as four Docker Compose services. All services share a private bridge network and communicate by service name.
|
|
9
|
+
|
|
10
|
+
| Service | Image | Port (host) | Description |
|
|
11
|
+
|---------|-------|-------------|-------------|
|
|
12
|
+
| `web` | Built from `apps/web` | 3001 | Next.js 15 management UI + API |
|
|
13
|
+
| `runner` | Built from `apps/runner` | — | Agent process host (Slack Bolt) |
|
|
14
|
+
| `postgres` | `postgres:16-alpine` | 5432 | PostgreSQL database |
|
|
15
|
+
| `redis` | `redis:7-alpine` | 6379 | Pub/sub event bus |
|
|
16
|
+
|
|
17
|
+
## Prerequisites
|
|
18
|
+
|
|
19
|
+
- Docker Engine 24+ and Docker Compose v2
|
|
20
|
+
- At least 2 GB RAM available for Docker
|
|
21
|
+
- Ports 3001 and 5432 free on the host (or configure alternate ports)
|
|
22
|
+
|
|
23
|
+
## Starting services
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
# First time (builds images)
|
|
27
|
+
docker compose up -d --build
|
|
28
|
+
|
|
29
|
+
# Subsequent starts (uses cached images)
|
|
30
|
+
docker compose up -d
|
|
31
|
+
|
|
32
|
+
# Check status
|
|
33
|
+
docker compose ps
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## Stopping services
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
# Stop containers (data is preserved in volumes)
|
|
40
|
+
docker compose stop
|
|
41
|
+
|
|
42
|
+
# Stop and remove containers (data is preserved in volumes)
|
|
43
|
+
docker compose down
|
|
44
|
+
|
|
45
|
+
# Stop and remove containers AND volumes (destroys all data)
|
|
46
|
+
docker compose down -v
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
<Warning>
|
|
50
|
+
`docker compose down -v` deletes all PostgreSQL and Redis data. Do not use this unless you intend to start fresh.
|
|
51
|
+
</Warning>
|
|
52
|
+
|
|
53
|
+
## Viewing logs
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
# All services
|
|
57
|
+
docker compose logs -f
|
|
58
|
+
|
|
59
|
+
# Runner only
|
|
60
|
+
docker compose logs -f runner
|
|
61
|
+
|
|
62
|
+
# Web only
|
|
63
|
+
docker compose logs -f web
|
|
64
|
+
|
|
65
|
+
# Last 100 lines of runner
|
|
66
|
+
docker compose logs --tail 100 runner
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
## Rebuilding after changes
|
|
70
|
+
|
|
71
|
+
If you pull an update or change code:
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
docker compose up -d --build
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
Or use the CLI:
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
slackhive update
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
This pulls the latest code, rebuilds images, and restarts containers.
|
|
84
|
+
|
|
85
|
+
## Agent working directories
|
|
86
|
+
|
|
87
|
+
Agents write ephemeral files (CLAUDE.md, skills, session directories, memory files) to `AGENTS_TMP_DIR`, which defaults to `/tmp/agents` inside the runner container.
|
|
88
|
+
|
|
89
|
+
This directory is mounted as a Docker volume or bind mount. If you want agent working directories to persist across container rebuilds (useful for debugging), add a bind mount in `docker-compose.yml`:
|
|
90
|
+
|
|
91
|
+
```yaml
|
|
92
|
+
runner:
|
|
93
|
+
volumes:
|
|
94
|
+
- /path/on/host/agents:/tmp/agents
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
Otherwise, the runner recreates all workspace files from the database on startup.
|
|
98
|
+
|
|
99
|
+
## Claude Pro or Max subscription volume mount
|
|
100
|
+
|
|
101
|
+
If you're using a Claude Pro or Max subscription instead of an API key, you need to mount the Claude credentials from the host:
|
|
102
|
+
|
|
103
|
+
```yaml
|
|
104
|
+
runner:
|
|
105
|
+
volumes:
|
|
106
|
+
- ~/.claude:/root/.claude # Auth credentials
|
|
107
|
+
- /tmp/agents:/tmp/agents # Agent working dirs (optional)
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
Then make sure `ANTHROPIC_API_KEY` is **not** set in `.env`.
|
|
111
|
+
|
|
112
|
+
## Health checks
|
|
113
|
+
|
|
114
|
+
The `postgres` and `redis` services include health checks in `docker-compose.yml`. The `web` and `runner` services wait for their dependencies to be healthy before starting.
|
|
115
|
+
|
|
116
|
+
If services fail to start, check:
|
|
117
|
+
|
|
118
|
+
```bash
|
|
119
|
+
# Check health status
|
|
120
|
+
docker compose ps
|
|
121
|
+
|
|
122
|
+
# Check postgres logs
|
|
123
|
+
docker compose logs postgres
|
|
124
|
+
|
|
125
|
+
# Check redis logs
|
|
126
|
+
docker compose logs redis
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
## Persistent data volumes
|
|
130
|
+
|
|
131
|
+
By default, Docker Compose creates named volumes for PostgreSQL and Redis data:
|
|
132
|
+
|
|
133
|
+
| Volume | Contents |
|
|
134
|
+
|--------|----------|
|
|
135
|
+
| `slackhive_postgres_data` | All database tables (agents, skills, memory, sessions, users, etc.) |
|
|
136
|
+
| `slackhive_redis_data` | Redis persistence (used for pub/sub; not critical) |
|
|
137
|
+
|
|
138
|
+
These volumes survive `docker compose down` but are deleted by `docker compose down -v`.
|
|
139
|
+
|
|
140
|
+
## Database migrations
|
|
141
|
+
|
|
142
|
+
SlackHive runs database migrations automatically on startup. The web service applies any pending schema migrations before starting the server.
|
|
143
|
+
|
|
144
|
+
For manual migration (e.g. after pulling an update with schema changes):
|
|
145
|
+
|
|
146
|
+
```bash
|
|
147
|
+
docker compose up -d --build web
|
|
148
|
+
docker compose logs -f web
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
Watch for migration success messages in the web logs before proceeding.
|