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.
Files changed (542) hide show
  1. package/.dockerignore +14 -0
  2. package/.env.example +44 -0
  3. package/.github/ISSUE_TEMPLATE/bug_report.yml +65 -0
  4. package/.github/ISSUE_TEMPLATE/config.yml +5 -0
  5. package/.github/ISSUE_TEMPLATE/feature_request.yml +38 -0
  6. package/.github/PULL_REQUEST_TEMPLATE.md +27 -0
  7. package/.github/dependabot.yml +20 -0
  8. package/.github/workflows/audit.yml +149 -0
  9. package/.github/workflows/ci.yml +135 -0
  10. package/CHANGELOG.md +52 -0
  11. package/CODE_OF_CONDUCT.md +37 -0
  12. package/CONTRIBUTING.md +204 -0
  13. package/LICENSE +21 -0
  14. package/README.md +19 -0
  15. package/SECURITY.md +47 -0
  16. package/apps/runner/Dockerfile +33 -0
  17. package/apps/runner/dist/__tests__/channel-restrictions.test.d.ts +8 -0
  18. package/apps/runner/dist/__tests__/channel-restrictions.test.js +63 -0
  19. package/apps/runner/dist/__tests__/channel-restrictions.test.js.map +1 -0
  20. package/apps/runner/dist/__tests__/claude-handler-resolve.test.d.ts +20 -0
  21. package/apps/runner/dist/__tests__/claude-handler-resolve.test.js +178 -0
  22. package/apps/runner/dist/__tests__/claude-handler-resolve.test.js.map +1 -0
  23. package/apps/runner/dist/__tests__/compile-claude-md.test.d.ts +13 -0
  24. package/apps/runner/dist/__tests__/compile-claude-md.test.js +144 -0
  25. package/apps/runner/dist/__tests__/compile-claude-md.test.js.map +1 -0
  26. package/apps/runner/dist/__tests__/memory-sync.test.d.ts +11 -0
  27. package/apps/runner/dist/__tests__/memory-sync.test.js +56 -0
  28. package/apps/runner/dist/__tests__/memory-sync.test.js.map +1 -0
  29. package/apps/runner/dist/__tests__/slack-file-support.test.d.ts +9 -0
  30. package/apps/runner/dist/__tests__/slack-file-support.test.js +271 -0
  31. package/apps/runner/dist/__tests__/slack-file-support.test.js.map +1 -0
  32. package/apps/runner/dist/__tests__/slack-formatting.test.d.ts +12 -0
  33. package/apps/runner/dist/__tests__/slack-formatting.test.js +400 -0
  34. package/apps/runner/dist/__tests__/slack-formatting.test.js.map +1 -0
  35. package/apps/runner/dist/__tests__/thread-context.test.d.ts +12 -0
  36. package/apps/runner/dist/__tests__/thread-context.test.js +182 -0
  37. package/apps/runner/dist/__tests__/thread-context.test.js.map +1 -0
  38. package/apps/runner/dist/agent-runner.d.ts +118 -0
  39. package/apps/runner/dist/agent-runner.js +352 -0
  40. package/apps/runner/dist/agent-runner.js.map +1 -0
  41. package/apps/runner/dist/claude-handler.d.ts +122 -0
  42. package/apps/runner/dist/claude-handler.js +402 -0
  43. package/apps/runner/dist/claude-handler.js.map +1 -0
  44. package/apps/runner/dist/compile-claude-md.d.ts +59 -0
  45. package/apps/runner/dist/compile-claude-md.js +291 -0
  46. package/apps/runner/dist/compile-claude-md.js.map +1 -0
  47. package/apps/runner/dist/correction-handler.d.ts +46 -0
  48. package/apps/runner/dist/correction-handler.js +162 -0
  49. package/apps/runner/dist/correction-handler.js.map +1 -0
  50. package/apps/runner/dist/correction-manager.d.ts +53 -0
  51. package/apps/runner/dist/correction-manager.js +241 -0
  52. package/apps/runner/dist/correction-manager.js.map +1 -0
  53. package/apps/runner/dist/db.d.ts +193 -0
  54. package/apps/runner/dist/db.js +492 -0
  55. package/apps/runner/dist/db.js.map +1 -0
  56. package/apps/runner/dist/index.d.ts +9 -0
  57. package/apps/runner/dist/index.js +43 -0
  58. package/apps/runner/dist/index.js.map +1 -0
  59. package/apps/runner/dist/job-scheduler.d.ts +57 -0
  60. package/apps/runner/dist/job-scheduler.js +150 -0
  61. package/apps/runner/dist/job-scheduler.js.map +1 -0
  62. package/apps/runner/dist/logger.d.ts +32 -0
  63. package/apps/runner/dist/logger.js +52 -0
  64. package/apps/runner/dist/logger.js.map +1 -0
  65. package/apps/runner/dist/mcp-process-manager.d.ts +38 -0
  66. package/apps/runner/dist/mcp-process-manager.js +189 -0
  67. package/apps/runner/dist/mcp-process-manager.js.map +1 -0
  68. package/apps/runner/dist/memory-mcp.d.ts +14 -0
  69. package/apps/runner/dist/memory-mcp.js +88 -0
  70. package/apps/runner/dist/memory-mcp.js.map +1 -0
  71. package/apps/runner/dist/memory-watcher.d.ts +78 -0
  72. package/apps/runner/dist/memory-watcher.js +220 -0
  73. package/apps/runner/dist/memory-watcher.js.map +1 -0
  74. package/apps/runner/dist/slack-handler.d.ts +120 -0
  75. package/apps/runner/dist/slack-handler.js +843 -0
  76. package/apps/runner/dist/slack-handler.js.map +1 -0
  77. package/apps/runner/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -0
  78. package/apps/runner/package.json +42 -0
  79. package/apps/runner/src/__tests__/channel-restrictions.test.ts +75 -0
  80. package/apps/runner/src/__tests__/claude-handler-resolve.test.ts +160 -0
  81. package/apps/runner/src/__tests__/compile-claude-md.test.ts +139 -0
  82. package/apps/runner/src/__tests__/memory-sync.test.ts +59 -0
  83. package/apps/runner/src/__tests__/slack-file-support.test.ts +376 -0
  84. package/apps/runner/src/__tests__/slack-formatting.test.ts +495 -0
  85. package/apps/runner/src/__tests__/thread-context.test.ts +215 -0
  86. package/apps/runner/src/agent-runner.ts +397 -0
  87. package/apps/runner/src/claude-handler.ts +475 -0
  88. package/apps/runner/src/compile-claude-md.ts +283 -0
  89. package/apps/runner/src/correction-handler.ts +191 -0
  90. package/apps/runner/src/correction-manager.ts +285 -0
  91. package/apps/runner/src/db.ts +604 -0
  92. package/apps/runner/src/index.ts +46 -0
  93. package/apps/runner/src/job-scheduler.ts +165 -0
  94. package/apps/runner/src/logger.ts +49 -0
  95. package/apps/runner/src/mcp-process-manager.ts +195 -0
  96. package/apps/runner/src/memory-mcp.ts +85 -0
  97. package/apps/runner/src/memory-watcher.ts +215 -0
  98. package/apps/runner/src/slack-handler.ts +929 -0
  99. package/apps/runner/tsconfig.json +17 -0
  100. package/apps/runner/vitest.config.mts +17 -0
  101. package/apps/web/.eslintrc.json +3 -0
  102. package/apps/web/.next/app-build-manifest.json +323 -0
  103. package/apps/web/.next/app-path-routes-manifest.json +46 -0
  104. package/apps/web/.next/build-manifest.json +33 -0
  105. package/apps/web/.next/cache/.previewinfo +1 -0
  106. package/apps/web/.next/cache/.rscinfo +1 -0
  107. package/apps/web/.next/cache/webpack/client-production/0.pack +0 -0
  108. package/apps/web/.next/cache/webpack/client-production/1.pack +0 -0
  109. package/apps/web/.next/cache/webpack/client-production/2.pack +0 -0
  110. package/apps/web/.next/cache/webpack/client-production/3.pack +0 -0
  111. package/apps/web/.next/cache/webpack/client-production/4.pack +0 -0
  112. package/apps/web/.next/cache/webpack/client-production/index.pack +0 -0
  113. package/apps/web/.next/cache/webpack/client-production/index.pack.old +0 -0
  114. package/apps/web/.next/cache/webpack/edge-server-production/0.pack +0 -0
  115. package/apps/web/.next/cache/webpack/edge-server-production/1.pack +0 -0
  116. package/apps/web/.next/cache/webpack/edge-server-production/index.pack +0 -0
  117. package/apps/web/.next/cache/webpack/edge-server-production/index.pack.old +0 -0
  118. package/apps/web/.next/cache/webpack/server-production/0.pack +0 -0
  119. package/apps/web/.next/cache/webpack/server-production/1.pack +0 -0
  120. package/apps/web/.next/cache/webpack/server-production/2.pack +0 -0
  121. package/apps/web/.next/cache/webpack/server-production/index.pack +0 -0
  122. package/apps/web/.next/cache/webpack/server-production/index.pack.old +0 -0
  123. package/apps/web/.next/diagnostics/build-diagnostics.json +6 -0
  124. package/apps/web/.next/diagnostics/framework.json +1 -0
  125. package/apps/web/.next/package.json +1 -0
  126. package/apps/web/.next/react-loadable-manifest.json +1 -0
  127. package/apps/web/.next/server/app/_not-found/page.js +2 -0
  128. package/apps/web/.next/server/app/_not-found/page.js.nft.json +1 -0
  129. package/apps/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -0
  130. package/apps/web/.next/server/app/agents/[slug]/page.js +4 -0
  131. package/apps/web/.next/server/app/agents/[slug]/page.js.nft.json +1 -0
  132. package/apps/web/.next/server/app/agents/[slug]/page_client-reference-manifest.js +1 -0
  133. package/apps/web/.next/server/app/agents/new/page.js +2 -0
  134. package/apps/web/.next/server/app/agents/new/page.js.nft.json +1 -0
  135. package/apps/web/.next/server/app/agents/new/page_client-reference-manifest.js +1 -0
  136. package/apps/web/.next/server/app/api/agents/[id]/access/route.js +1 -0
  137. package/apps/web/.next/server/app/api/agents/[id]/access/route.js.nft.json +1 -0
  138. package/apps/web/.next/server/app/api/agents/[id]/access/route_client-reference-manifest.js +1 -0
  139. package/apps/web/.next/server/app/api/agents/[id]/claude-md/route.js +6 -0
  140. package/apps/web/.next/server/app/api/agents/[id]/claude-md/route.js.nft.json +1 -0
  141. package/apps/web/.next/server/app/api/agents/[id]/claude-md/route_client-reference-manifest.js +1 -0
  142. package/apps/web/.next/server/app/api/agents/[id]/logs/route.js +3 -0
  143. package/apps/web/.next/server/app/api/agents/[id]/logs/route.js.nft.json +1 -0
  144. package/apps/web/.next/server/app/api/agents/[id]/logs/route_client-reference-manifest.js +1 -0
  145. package/apps/web/.next/server/app/api/agents/[id]/manifest/route.js +1 -0
  146. package/apps/web/.next/server/app/api/agents/[id]/manifest/route.js.nft.json +1 -0
  147. package/apps/web/.next/server/app/api/agents/[id]/manifest/route_client-reference-manifest.js +1 -0
  148. package/apps/web/.next/server/app/api/agents/[id]/mcps/route.js +1 -0
  149. package/apps/web/.next/server/app/api/agents/[id]/mcps/route.js.nft.json +1 -0
  150. package/apps/web/.next/server/app/api/agents/[id]/mcps/route_client-reference-manifest.js +1 -0
  151. package/apps/web/.next/server/app/api/agents/[id]/memories/[memId]/route.js +1 -0
  152. package/apps/web/.next/server/app/api/agents/[id]/memories/[memId]/route.js.nft.json +1 -0
  153. package/apps/web/.next/server/app/api/agents/[id]/memories/[memId]/route_client-reference-manifest.js +1 -0
  154. package/apps/web/.next/server/app/api/agents/[id]/memories/route.js +1 -0
  155. package/apps/web/.next/server/app/api/agents/[id]/memories/route.js.nft.json +1 -0
  156. package/apps/web/.next/server/app/api/agents/[id]/memories/route_client-reference-manifest.js +1 -0
  157. package/apps/web/.next/server/app/api/agents/[id]/permissions/route.js +1 -0
  158. package/apps/web/.next/server/app/api/agents/[id]/permissions/route.js.nft.json +1 -0
  159. package/apps/web/.next/server/app/api/agents/[id]/permissions/route_client-reference-manifest.js +1 -0
  160. package/apps/web/.next/server/app/api/agents/[id]/reload/route.js +1 -0
  161. package/apps/web/.next/server/app/api/agents/[id]/reload/route.js.nft.json +1 -0
  162. package/apps/web/.next/server/app/api/agents/[id]/reload/route_client-reference-manifest.js +1 -0
  163. package/apps/web/.next/server/app/api/agents/[id]/restrictions/route.js +1 -0
  164. package/apps/web/.next/server/app/api/agents/[id]/restrictions/route.js.nft.json +1 -0
  165. package/apps/web/.next/server/app/api/agents/[id]/restrictions/route_client-reference-manifest.js +1 -0
  166. package/apps/web/.next/server/app/api/agents/[id]/route.js +33 -0
  167. package/apps/web/.next/server/app/api/agents/[id]/route.js.nft.json +1 -0
  168. package/apps/web/.next/server/app/api/agents/[id]/route_client-reference-manifest.js +1 -0
  169. package/apps/web/.next/server/app/api/agents/[id]/skills/[skillId]/route.js +1 -0
  170. package/apps/web/.next/server/app/api/agents/[id]/skills/[skillId]/route.js.nft.json +1 -0
  171. package/apps/web/.next/server/app/api/agents/[id]/skills/[skillId]/route_client-reference-manifest.js +1 -0
  172. package/apps/web/.next/server/app/api/agents/[id]/skills/route.js +1 -0
  173. package/apps/web/.next/server/app/api/agents/[id]/skills/route.js.nft.json +1 -0
  174. package/apps/web/.next/server/app/api/agents/[id]/skills/route_client-reference-manifest.js +1 -0
  175. package/apps/web/.next/server/app/api/agents/[id]/slack-info/route.js +1 -0
  176. package/apps/web/.next/server/app/api/agents/[id]/slack-info/route.js.nft.json +1 -0
  177. package/apps/web/.next/server/app/api/agents/[id]/slack-info/route_client-reference-manifest.js +1 -0
  178. package/apps/web/.next/server/app/api/agents/[id]/snapshots/[sid]/restore/route.js +1 -0
  179. package/apps/web/.next/server/app/api/agents/[id]/snapshots/[sid]/restore/route.js.nft.json +1 -0
  180. package/apps/web/.next/server/app/api/agents/[id]/snapshots/[sid]/restore/route_client-reference-manifest.js +1 -0
  181. package/apps/web/.next/server/app/api/agents/[id]/snapshots/[sid]/route.js +1 -0
  182. package/apps/web/.next/server/app/api/agents/[id]/snapshots/[sid]/route.js.nft.json +1 -0
  183. package/apps/web/.next/server/app/api/agents/[id]/snapshots/[sid]/route_client-reference-manifest.js +1 -0
  184. package/apps/web/.next/server/app/api/agents/[id]/snapshots/route.js +1 -0
  185. package/apps/web/.next/server/app/api/agents/[id]/snapshots/route.js.nft.json +1 -0
  186. package/apps/web/.next/server/app/api/agents/[id]/snapshots/route_client-reference-manifest.js +1 -0
  187. package/apps/web/.next/server/app/api/agents/[id]/start/route.js +1 -0
  188. package/apps/web/.next/server/app/api/agents/[id]/start/route.js.nft.json +1 -0
  189. package/apps/web/.next/server/app/api/agents/[id]/start/route_client-reference-manifest.js +1 -0
  190. package/apps/web/.next/server/app/api/agents/[id]/stop/route.js +1 -0
  191. package/apps/web/.next/server/app/api/agents/[id]/stop/route.js.nft.json +1 -0
  192. package/apps/web/.next/server/app/api/agents/[id]/stop/route_client-reference-manifest.js +1 -0
  193. package/apps/web/.next/server/app/api/agents/route.js +91 -0
  194. package/apps/web/.next/server/app/api/agents/route.js.nft.json +1 -0
  195. package/apps/web/.next/server/app/api/agents/route_client-reference-manifest.js +1 -0
  196. package/apps/web/.next/server/app/api/auth/login/route.js +1 -0
  197. package/apps/web/.next/server/app/api/auth/login/route.js.nft.json +1 -0
  198. package/apps/web/.next/server/app/api/auth/login/route_client-reference-manifest.js +1 -0
  199. package/apps/web/.next/server/app/api/auth/logout/route.js +1 -0
  200. package/apps/web/.next/server/app/api/auth/logout/route.js.nft.json +1 -0
  201. package/apps/web/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -0
  202. package/apps/web/.next/server/app/api/auth/me/route.js +1 -0
  203. package/apps/web/.next/server/app/api/auth/me/route.js.nft.json +1 -0
  204. package/apps/web/.next/server/app/api/auth/me/route_client-reference-manifest.js +1 -0
  205. package/apps/web/.next/server/app/api/auth/users/[id]/route.js +1 -0
  206. package/apps/web/.next/server/app/api/auth/users/[id]/route.js.nft.json +1 -0
  207. package/apps/web/.next/server/app/api/auth/users/[id]/route_client-reference-manifest.js +1 -0
  208. package/apps/web/.next/server/app/api/auth/users/route.js +1 -0
  209. package/apps/web/.next/server/app/api/auth/users/route.js.nft.json +1 -0
  210. package/apps/web/.next/server/app/api/auth/users/route_client-reference-manifest.js +1 -0
  211. package/apps/web/.next/server/app/api/env-vars/[key]/route.js +1 -0
  212. package/apps/web/.next/server/app/api/env-vars/[key]/route.js.nft.json +1 -0
  213. package/apps/web/.next/server/app/api/env-vars/[key]/route_client-reference-manifest.js +1 -0
  214. package/apps/web/.next/server/app/api/env-vars/route.js +1 -0
  215. package/apps/web/.next/server/app/api/env-vars/route.js.nft.json +1 -0
  216. package/apps/web/.next/server/app/api/env-vars/route_client-reference-manifest.js +1 -0
  217. package/apps/web/.next/server/app/api/jobs/[id]/route.js +1 -0
  218. package/apps/web/.next/server/app/api/jobs/[id]/route.js.nft.json +1 -0
  219. package/apps/web/.next/server/app/api/jobs/[id]/route_client-reference-manifest.js +1 -0
  220. package/apps/web/.next/server/app/api/jobs/[id]/runs/route.js +1 -0
  221. package/apps/web/.next/server/app/api/jobs/[id]/runs/route.js.nft.json +1 -0
  222. package/apps/web/.next/server/app/api/jobs/[id]/runs/route_client-reference-manifest.js +1 -0
  223. package/apps/web/.next/server/app/api/jobs/route.js +1 -0
  224. package/apps/web/.next/server/app/api/jobs/route.js.nft.json +1 -0
  225. package/apps/web/.next/server/app/api/jobs/route_client-reference-manifest.js +1 -0
  226. package/apps/web/.next/server/app/api/mcps/[id]/route.js +1 -0
  227. package/apps/web/.next/server/app/api/mcps/[id]/route.js.nft.json +1 -0
  228. package/apps/web/.next/server/app/api/mcps/[id]/route_client-reference-manifest.js +1 -0
  229. package/apps/web/.next/server/app/api/mcps/[id]/test/route.js +1 -0
  230. package/apps/web/.next/server/app/api/mcps/[id]/test/route.js.nft.json +1 -0
  231. package/apps/web/.next/server/app/api/mcps/[id]/test/route_client-reference-manifest.js +1 -0
  232. package/apps/web/.next/server/app/api/mcps/route.js +1 -0
  233. package/apps/web/.next/server/app/api/mcps/route.js.nft.json +1 -0
  234. package/apps/web/.next/server/app/api/mcps/route_client-reference-manifest.js +1 -0
  235. package/apps/web/.next/server/app/api/settings/route.js +1 -0
  236. package/apps/web/.next/server/app/api/settings/route.js.nft.json +1 -0
  237. package/apps/web/.next/server/app/api/settings/route_client-reference-manifest.js +1 -0
  238. package/apps/web/.next/server/app/icon.svg/route.js +1 -0
  239. package/apps/web/.next/server/app/icon.svg/route.js.nft.json +1 -0
  240. package/apps/web/.next/server/app/jobs/page.js +2 -0
  241. package/apps/web/.next/server/app/jobs/page.js.nft.json +1 -0
  242. package/apps/web/.next/server/app/jobs/page_client-reference-manifest.js +1 -0
  243. package/apps/web/.next/server/app/login/page.js +2 -0
  244. package/apps/web/.next/server/app/login/page.js.nft.json +1 -0
  245. package/apps/web/.next/server/app/login/page_client-reference-manifest.js +1 -0
  246. package/apps/web/.next/server/app/page.js +2 -0
  247. package/apps/web/.next/server/app/page.js.nft.json +1 -0
  248. package/apps/web/.next/server/app/page_client-reference-manifest.js +1 -0
  249. package/apps/web/.next/server/app/settings/env-vars/page.js +2 -0
  250. package/apps/web/.next/server/app/settings/env-vars/page.js.nft.json +1 -0
  251. package/apps/web/.next/server/app/settings/env-vars/page_client-reference-manifest.js +1 -0
  252. package/apps/web/.next/server/app/settings/mcps/page.js +2 -0
  253. package/apps/web/.next/server/app/settings/mcps/page.js.nft.json +1 -0
  254. package/apps/web/.next/server/app/settings/mcps/page_client-reference-manifest.js +1 -0
  255. package/apps/web/.next/server/app/settings/page.js +2 -0
  256. package/apps/web/.next/server/app/settings/page.js.nft.json +1 -0
  257. package/apps/web/.next/server/app/settings/page_client-reference-manifest.js +1 -0
  258. package/apps/web/.next/server/app-paths-manifest.json +46 -0
  259. package/apps/web/.next/server/chunks/1157.js +9 -0
  260. package/apps/web/.next/server/chunks/2287.js +1 -0
  261. package/apps/web/.next/server/chunks/3444.js +1 -0
  262. package/apps/web/.next/server/chunks/383.js +6 -0
  263. package/apps/web/.next/server/chunks/4012.js +58 -0
  264. package/apps/web/.next/server/chunks/6791.js +1 -0
  265. package/apps/web/.next/server/chunks/7171.js +1 -0
  266. package/apps/web/.next/server/chunks/8819.js +22 -0
  267. package/apps/web/.next/server/edge-runtime-webpack.js +2 -0
  268. package/apps/web/.next/server/edge-runtime-webpack.js.map +1 -0
  269. package/apps/web/.next/server/interception-route-rewrite-manifest.js +1 -0
  270. package/apps/web/.next/server/middleware-build-manifest.js +1 -0
  271. package/apps/web/.next/server/middleware-manifest.json +32 -0
  272. package/apps/web/.next/server/middleware-react-loadable-manifest.js +1 -0
  273. package/apps/web/.next/server/next-font-manifest.js +1 -0
  274. package/apps/web/.next/server/next-font-manifest.json +1 -0
  275. package/apps/web/.next/server/pages/_app.js +1 -0
  276. package/apps/web/.next/server/pages/_app.js.nft.json +1 -0
  277. package/apps/web/.next/server/pages/_document.js +1 -0
  278. package/apps/web/.next/server/pages/_document.js.nft.json +1 -0
  279. package/apps/web/.next/server/pages/_error.js +19 -0
  280. package/apps/web/.next/server/pages/_error.js.nft.json +1 -0
  281. package/apps/web/.next/server/pages-manifest.json +5 -0
  282. package/apps/web/.next/server/server-reference-manifest.js +1 -0
  283. package/apps/web/.next/server/server-reference-manifest.json +1 -0
  284. package/apps/web/.next/server/src/middleware.js +14 -0
  285. package/apps/web/.next/server/src/middleware.js.map +1 -0
  286. package/apps/web/.next/server/webpack-runtime.js +1 -0
  287. package/apps/web/.next/static/chunks/18-90b700ea37b686a2.js +1 -0
  288. package/apps/web/.next/static/chunks/87c73c54-24122e7b92478d00.js +1 -0
  289. package/apps/web/.next/static/chunks/9664-af80478aa73ba424.js +1 -0
  290. package/apps/web/.next/static/chunks/app/_not-found/page-b9cee17ed89ca24a.js +1 -0
  291. package/apps/web/.next/static/chunks/app/agents/[slug]/page-18369fc3fe1a9a7b.js +1 -0
  292. package/apps/web/.next/static/chunks/app/agents/new/page-bf11cf8901c7e2cd.js +1 -0
  293. package/apps/web/.next/static/chunks/app/api/agents/[id]/access/route-07f0f73ac9839899.js +1 -0
  294. package/apps/web/.next/static/chunks/app/api/agents/[id]/claude-md/route-07f0f73ac9839899.js +1 -0
  295. package/apps/web/.next/static/chunks/app/api/agents/[id]/logs/route-07f0f73ac9839899.js +1 -0
  296. package/apps/web/.next/static/chunks/app/api/agents/[id]/manifest/route-07f0f73ac9839899.js +1 -0
  297. package/apps/web/.next/static/chunks/app/api/agents/[id]/mcps/route-07f0f73ac9839899.js +1 -0
  298. package/apps/web/.next/static/chunks/app/api/agents/[id]/memories/[memId]/route-07f0f73ac9839899.js +1 -0
  299. package/apps/web/.next/static/chunks/app/api/agents/[id]/memories/route-07f0f73ac9839899.js +1 -0
  300. package/apps/web/.next/static/chunks/app/api/agents/[id]/permissions/route-07f0f73ac9839899.js +1 -0
  301. package/apps/web/.next/static/chunks/app/api/agents/[id]/reload/route-07f0f73ac9839899.js +1 -0
  302. package/apps/web/.next/static/chunks/app/api/agents/[id]/restrictions/route-07f0f73ac9839899.js +1 -0
  303. package/apps/web/.next/static/chunks/app/api/agents/[id]/route-07f0f73ac9839899.js +1 -0
  304. package/apps/web/.next/static/chunks/app/api/agents/[id]/skills/[skillId]/route-07f0f73ac9839899.js +1 -0
  305. package/apps/web/.next/static/chunks/app/api/agents/[id]/skills/route-07f0f73ac9839899.js +1 -0
  306. package/apps/web/.next/static/chunks/app/api/agents/[id]/slack-info/route-07f0f73ac9839899.js +1 -0
  307. package/apps/web/.next/static/chunks/app/api/agents/[id]/snapshots/[sid]/restore/route-07f0f73ac9839899.js +1 -0
  308. package/apps/web/.next/static/chunks/app/api/agents/[id]/snapshots/[sid]/route-07f0f73ac9839899.js +1 -0
  309. package/apps/web/.next/static/chunks/app/api/agents/[id]/snapshots/route-07f0f73ac9839899.js +1 -0
  310. package/apps/web/.next/static/chunks/app/api/agents/[id]/start/route-07f0f73ac9839899.js +1 -0
  311. package/apps/web/.next/static/chunks/app/api/agents/[id]/stop/route-07f0f73ac9839899.js +1 -0
  312. package/apps/web/.next/static/chunks/app/api/agents/route-07f0f73ac9839899.js +1 -0
  313. package/apps/web/.next/static/chunks/app/api/auth/login/route-07f0f73ac9839899.js +1 -0
  314. package/apps/web/.next/static/chunks/app/api/auth/logout/route-07f0f73ac9839899.js +1 -0
  315. package/apps/web/.next/static/chunks/app/api/auth/me/route-07f0f73ac9839899.js +1 -0
  316. package/apps/web/.next/static/chunks/app/api/auth/users/[id]/route-07f0f73ac9839899.js +1 -0
  317. package/apps/web/.next/static/chunks/app/api/auth/users/route-07f0f73ac9839899.js +1 -0
  318. package/apps/web/.next/static/chunks/app/api/env-vars/[key]/route-07f0f73ac9839899.js +1 -0
  319. package/apps/web/.next/static/chunks/app/api/env-vars/route-07f0f73ac9839899.js +1 -0
  320. package/apps/web/.next/static/chunks/app/api/jobs/[id]/route-07f0f73ac9839899.js +1 -0
  321. package/apps/web/.next/static/chunks/app/api/jobs/[id]/runs/route-07f0f73ac9839899.js +1 -0
  322. package/apps/web/.next/static/chunks/app/api/jobs/route-07f0f73ac9839899.js +1 -0
  323. package/apps/web/.next/static/chunks/app/api/mcps/[id]/route-07f0f73ac9839899.js +1 -0
  324. package/apps/web/.next/static/chunks/app/api/mcps/[id]/test/route-07f0f73ac9839899.js +1 -0
  325. package/apps/web/.next/static/chunks/app/api/mcps/route-07f0f73ac9839899.js +1 -0
  326. package/apps/web/.next/static/chunks/app/api/settings/route-07f0f73ac9839899.js +1 -0
  327. package/apps/web/.next/static/chunks/app/jobs/page-f5aa89a47c50efd8.js +1 -0
  328. package/apps/web/.next/static/chunks/app/layout-2079f4964aa7314e.js +1 -0
  329. package/apps/web/.next/static/chunks/app/login/layout-07f0f73ac9839899.js +1 -0
  330. package/apps/web/.next/static/chunks/app/login/page-aa259283dc38e8f9.js +1 -0
  331. package/apps/web/.next/static/chunks/app/page-e83437b608104dff.js +1 -0
  332. package/apps/web/.next/static/chunks/app/settings/env-vars/page-06479dbdfb78b76b.js +1 -0
  333. package/apps/web/.next/static/chunks/app/settings/mcps/page-75650686ed6490c7.js +1 -0
  334. package/apps/web/.next/static/chunks/app/settings/page-e1e62fc41ff6cddd.js +1 -0
  335. package/apps/web/.next/static/chunks/framework-811407f832a33072.js +1 -0
  336. package/apps/web/.next/static/chunks/main-3f1cddbdd67b1546.js +1 -0
  337. package/apps/web/.next/static/chunks/main-app-cebd8a6a5ccbf72d.js +1 -0
  338. package/apps/web/.next/static/chunks/pages/_app-50fa07b56b2d29ac.js +1 -0
  339. package/apps/web/.next/static/chunks/pages/_error-fed8688bdd23f211.js +1 -0
  340. package/apps/web/.next/static/chunks/polyfills-42372ed130431b0a.js +1 -0
  341. package/apps/web/.next/static/chunks/webpack-6c05566dba553c97.js +1 -0
  342. package/apps/web/.next/static/css/15371687405525e2.css +5 -0
  343. package/apps/web/.next/static/ikfNbLhuw7jntn35bz0lk/_buildManifest.js +1 -0
  344. package/apps/web/.next/static/ikfNbLhuw7jntn35bz0lk/_ssgManifest.js +1 -0
  345. package/apps/web/.next/trace +5 -0
  346. package/apps/web/.next/types/app/agents/[slug]/page.ts +84 -0
  347. package/apps/web/.next/types/app/agents/new/page.ts +84 -0
  348. package/apps/web/.next/types/app/api/agents/[id]/access/route.ts +347 -0
  349. package/apps/web/.next/types/app/api/agents/[id]/claude-md/route.ts +347 -0
  350. package/apps/web/.next/types/app/api/agents/[id]/logs/route.ts +347 -0
  351. package/apps/web/.next/types/app/api/agents/[id]/manifest/route.ts +347 -0
  352. package/apps/web/.next/types/app/api/agents/[id]/mcps/route.ts +347 -0
  353. package/apps/web/.next/types/app/api/agents/[id]/memories/[memId]/route.ts +347 -0
  354. package/apps/web/.next/types/app/api/agents/[id]/memories/route.ts +347 -0
  355. package/apps/web/.next/types/app/api/agents/[id]/permissions/route.ts +347 -0
  356. package/apps/web/.next/types/app/api/agents/[id]/reload/route.ts +347 -0
  357. package/apps/web/.next/types/app/api/agents/[id]/restrictions/route.ts +347 -0
  358. package/apps/web/.next/types/app/api/agents/[id]/route.ts +347 -0
  359. package/apps/web/.next/types/app/api/agents/[id]/skills/[skillId]/route.ts +347 -0
  360. package/apps/web/.next/types/app/api/agents/[id]/skills/route.ts +347 -0
  361. package/apps/web/.next/types/app/api/agents/[id]/slack-info/route.ts +347 -0
  362. package/apps/web/.next/types/app/api/agents/[id]/snapshots/[sid]/restore/route.ts +347 -0
  363. package/apps/web/.next/types/app/api/agents/[id]/snapshots/[sid]/route.ts +347 -0
  364. package/apps/web/.next/types/app/api/agents/[id]/snapshots/route.ts +347 -0
  365. package/apps/web/.next/types/app/api/agents/[id]/start/route.ts +347 -0
  366. package/apps/web/.next/types/app/api/agents/[id]/stop/route.ts +347 -0
  367. package/apps/web/.next/types/app/api/agents/route.ts +347 -0
  368. package/apps/web/.next/types/app/api/auth/login/route.ts +347 -0
  369. package/apps/web/.next/types/app/api/auth/logout/route.ts +347 -0
  370. package/apps/web/.next/types/app/api/auth/me/route.ts +347 -0
  371. package/apps/web/.next/types/app/api/auth/users/[id]/route.ts +347 -0
  372. package/apps/web/.next/types/app/api/auth/users/route.ts +347 -0
  373. package/apps/web/.next/types/app/api/env-vars/[key]/route.ts +347 -0
  374. package/apps/web/.next/types/app/api/env-vars/route.ts +347 -0
  375. package/apps/web/.next/types/app/api/jobs/[id]/route.ts +347 -0
  376. package/apps/web/.next/types/app/api/jobs/[id]/runs/route.ts +347 -0
  377. package/apps/web/.next/types/app/api/jobs/route.ts +347 -0
  378. package/apps/web/.next/types/app/api/mcps/[id]/route.ts +347 -0
  379. package/apps/web/.next/types/app/api/mcps/[id]/test/route.ts +347 -0
  380. package/apps/web/.next/types/app/api/mcps/route.ts +347 -0
  381. package/apps/web/.next/types/app/api/settings/route.ts +347 -0
  382. package/apps/web/.next/types/app/jobs/page.ts +84 -0
  383. package/apps/web/.next/types/app/login/layout.ts +84 -0
  384. package/apps/web/.next/types/app/login/page.ts +84 -0
  385. package/apps/web/.next/types/app/page.ts +84 -0
  386. package/apps/web/.next/types/app/settings/env-vars/page.ts +84 -0
  387. package/apps/web/.next/types/app/settings/mcps/page.ts +84 -0
  388. package/apps/web/.next/types/app/settings/page.ts +84 -0
  389. package/apps/web/.next/types/cache-life.d.ts +141 -0
  390. package/apps/web/.next/types/package.json +1 -0
  391. package/apps/web/.next/types/routes.d.ts +114 -0
  392. package/apps/web/.next/types/validator.ts +448 -0
  393. package/apps/web/Dockerfile +37 -0
  394. package/apps/web/next-env.d.ts +6 -0
  395. package/apps/web/next.config.js +6 -0
  396. package/apps/web/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -0
  397. package/apps/web/package.json +48 -0
  398. package/apps/web/postcss.config.js +3 -0
  399. package/apps/web/public/logo.svg +17 -0
  400. package/apps/web/src/app/agents/[slug]/page.tsx +2235 -0
  401. package/apps/web/src/app/agents/new/page.tsx +1161 -0
  402. package/apps/web/src/app/api/agents/[id]/access/route.ts +76 -0
  403. package/apps/web/src/app/api/agents/[id]/claude-md/route.ts +111 -0
  404. package/apps/web/src/app/api/agents/[id]/logs/route.ts +84 -0
  405. package/apps/web/src/app/api/agents/[id]/manifest/route.ts +32 -0
  406. package/apps/web/src/app/api/agents/[id]/mcps/route.ts +73 -0
  407. package/apps/web/src/app/api/agents/[id]/memories/[memId]/route.ts +31 -0
  408. package/apps/web/src/app/api/agents/[id]/memories/route.ts +56 -0
  409. package/apps/web/src/app/api/agents/[id]/permissions/route.ts +74 -0
  410. package/apps/web/src/app/api/agents/[id]/reload/route.ts +33 -0
  411. package/apps/web/src/app/api/agents/[id]/restrictions/route.ts +85 -0
  412. package/apps/web/src/app/api/agents/[id]/route.ts +81 -0
  413. package/apps/web/src/app/api/agents/[id]/skills/[skillId]/route.ts +52 -0
  414. package/apps/web/src/app/api/agents/[id]/skills/route.ts +80 -0
  415. package/apps/web/src/app/api/agents/[id]/slack-info/route.ts +38 -0
  416. package/apps/web/src/app/api/agents/[id]/snapshots/[sid]/restore/route.ts +61 -0
  417. package/apps/web/src/app/api/agents/[id]/snapshots/[sid]/route.ts +53 -0
  418. package/apps/web/src/app/api/agents/[id]/snapshots/route.ts +84 -0
  419. package/apps/web/src/app/api/agents/[id]/start/route.ts +35 -0
  420. package/apps/web/src/app/api/agents/[id]/stop/route.ts +35 -0
  421. package/apps/web/src/app/api/agents/route.ts +99 -0
  422. package/apps/web/src/app/api/auth/login/route.ts +39 -0
  423. package/apps/web/src/app/api/auth/logout/route.ts +21 -0
  424. package/apps/web/src/app/api/auth/me/route.ts +24 -0
  425. package/apps/web/src/app/api/auth/users/[id]/route.ts +48 -0
  426. package/apps/web/src/app/api/auth/users/route.ts +63 -0
  427. package/apps/web/src/app/api/env-vars/[key]/route.ts +66 -0
  428. package/apps/web/src/app/api/env-vars/route.ts +59 -0
  429. package/apps/web/src/app/api/jobs/[id]/route.ts +51 -0
  430. package/apps/web/src/app/api/jobs/[id]/runs/route.ts +24 -0
  431. package/apps/web/src/app/api/jobs/route.ts +42 -0
  432. package/apps/web/src/app/api/mcps/[id]/route.ts +60 -0
  433. package/apps/web/src/app/api/mcps/[id]/test/route.ts +195 -0
  434. package/apps/web/src/app/api/mcps/route.ts +72 -0
  435. package/apps/web/src/app/api/settings/route.ts +42 -0
  436. package/apps/web/src/app/globals.css +124 -0
  437. package/apps/web/src/app/icon.svg +17 -0
  438. package/apps/web/src/app/jobs/page.tsx +543 -0
  439. package/apps/web/src/app/layout-shell.tsx +89 -0
  440. package/apps/web/src/app/layout.tsx +18 -0
  441. package/apps/web/src/app/login/layout.tsx +9 -0
  442. package/apps/web/src/app/login/page.tsx +150 -0
  443. package/apps/web/src/app/page.tsx +573 -0
  444. package/apps/web/src/app/settings/env-vars/page.tsx +216 -0
  445. package/apps/web/src/app/settings/mcps/page.tsx +763 -0
  446. package/apps/web/src/app/settings/page.tsx +528 -0
  447. package/apps/web/src/app/sidebar.tsx +345 -0
  448. package/apps/web/src/lib/__tests__/api-guard.test.ts +189 -0
  449. package/apps/web/src/lib/__tests__/auth.test.ts +262 -0
  450. package/apps/web/src/lib/__tests__/boss-registry.test.ts +323 -0
  451. package/apps/web/src/lib/__tests__/compile.test.ts +161 -0
  452. package/apps/web/src/lib/__tests__/db-agent-hierarchy.test.ts +136 -0
  453. package/apps/web/src/lib/__tests__/db-env-vars.test.ts +216 -0
  454. package/apps/web/src/lib/__tests__/db-restrictions.test.ts +117 -0
  455. package/apps/web/src/lib/__tests__/db.integration.test.ts +271 -0
  456. package/apps/web/src/lib/__tests__/diff.test.ts +102 -0
  457. package/apps/web/src/lib/__tests__/mcp-mask.test.ts +274 -0
  458. package/apps/web/src/lib/__tests__/skill-templates.test.ts +237 -0
  459. package/apps/web/src/lib/__tests__/slack-manifest.test.ts +105 -0
  460. package/apps/web/src/lib/api-guard.ts +68 -0
  461. package/apps/web/src/lib/auth-context.tsx +71 -0
  462. package/apps/web/src/lib/auth.ts +128 -0
  463. package/apps/web/src/lib/boss-registry.ts +90 -0
  464. package/apps/web/src/lib/compile.ts +51 -0
  465. package/apps/web/src/lib/db.ts +1196 -0
  466. package/apps/web/src/lib/diff.ts +43 -0
  467. package/apps/web/src/lib/mcp-mask.ts +91 -0
  468. package/apps/web/src/lib/portal.tsx +23 -0
  469. package/apps/web/src/lib/skill-templates.ts +148 -0
  470. package/apps/web/src/lib/slack-manifest.ts +85 -0
  471. package/apps/web/src/middleware.ts +68 -0
  472. package/apps/web/tailwind.config.js +6 -0
  473. package/apps/web/tsconfig.json +23 -0
  474. package/apps/web/vitest.config.mts +21 -0
  475. package/cli/.claude/settings.local.json +6 -0
  476. package/cli/README.md +281 -0
  477. package/cli/node_modules/.package-lock.json +427 -0
  478. package/cli/node_modules/commander/LICENSE +22 -0
  479. package/cli/node_modules/commander/Readme.md +1157 -0
  480. package/cli/node_modules/commander/esm.mjs +16 -0
  481. package/cli/node_modules/commander/index.js +24 -0
  482. package/cli/node_modules/commander/lib/argument.js +149 -0
  483. package/cli/node_modules/commander/lib/command.js +2509 -0
  484. package/cli/node_modules/commander/lib/error.js +39 -0
  485. package/cli/node_modules/commander/lib/help.js +520 -0
  486. package/cli/node_modules/commander/lib/option.js +330 -0
  487. package/cli/node_modules/commander/lib/suggestSimilar.js +101 -0
  488. package/cli/node_modules/commander/package-support.json +16 -0
  489. package/cli/node_modules/commander/package.json +84 -0
  490. package/cli/node_modules/commander/typings/esm.d.mts +3 -0
  491. package/cli/node_modules/commander/typings/index.d.ts +969 -0
  492. package/cli/package-lock.json +449 -0
  493. package/cli/package.json +44 -0
  494. package/cli/src/commands/init.ts +514 -0
  495. package/cli/src/commands/manage.ts +115 -0
  496. package/cli/src/index.ts +63 -0
  497. package/cli/tsconfig.json +14 -0
  498. package/docker-compose.yml +122 -0
  499. package/docs/agents/boss-agents.mdx +108 -0
  500. package/docs/agents/creating-agents.mdx +132 -0
  501. package/docs/agents/memory.mdx +113 -0
  502. package/docs/agents/tools.mdx +103 -0
  503. package/docs/configuration/env-vars.mdx +166 -0
  504. package/docs/configuration/mcp-servers.mdx +203 -0
  505. package/docs/configuration/slack-app.mdx +175 -0
  506. package/docs/docs.json +79 -0
  507. package/docs/favicon.svg +17 -0
  508. package/docs/features/history.mdx +60 -0
  509. package/docs/features/import-export.mdx +77 -0
  510. package/docs/features/logs.mdx +131 -0
  511. package/docs/features/multi-workspace.mdx +90 -0
  512. package/docs/features/scheduled-jobs.mdx +231 -0
  513. package/docs/features/users.mdx +92 -0
  514. package/docs/introduction.mdx +160 -0
  515. package/docs/logo/dark.svg +17 -0
  516. package/docs/logo/light.svg +17 -0
  517. package/docs/logo/wide-dark.svg +12 -0
  518. package/docs/logo/wide-light.svg +12 -0
  519. package/docs/quickstart.mdx +270 -0
  520. package/docs/self-hosting/docker.mdx +151 -0
  521. package/docs/self-hosting/production.mdx +176 -0
  522. package/package.json +20 -36
  523. package/packages/shared/dist/index.d.ts +8 -0
  524. package/packages/shared/dist/index.d.ts.map +1 -0
  525. package/packages/shared/dist/index.js +24 -0
  526. package/packages/shared/dist/index.js.map +1 -0
  527. package/packages/shared/dist/types.d.ts +584 -0
  528. package/packages/shared/dist/types.d.ts.map +1 -0
  529. package/packages/shared/dist/types.js +39 -0
  530. package/packages/shared/dist/types.js.map +1 -0
  531. package/packages/shared/package.json +15 -0
  532. package/packages/shared/src/db/schema.sql +354 -0
  533. package/packages/shared/src/index.ts +8 -0
  534. package/packages/shared/src/types.ts +683 -0
  535. package/packages/shared/tsconfig.json +17 -0
  536. package/scripts/dev.sh +45 -0
  537. /package/{dist → cli/dist}/commands/init.d.ts +0 -0
  538. /package/{dist → cli/dist}/commands/init.js +0 -0
  539. /package/{dist → cli/dist}/commands/manage.d.ts +0 -0
  540. /package/{dist → cli/dist}/commands/manage.js +0 -0
  541. /package/{dist → cli/dist}/index.d.ts +0 -0
  542. /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.