@cursor/july 0.1.96 → 0.1.97

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 (321) hide show
  1. package/README.md +3 -2
  2. package/dist/bin/agent-serve.js +14 -3
  3. package/dist/channels/origin/api.d.ts +15 -4
  4. package/dist/channels/origin/api.d.ts.map +1 -1
  5. package/dist/channels/origin/api.js +19 -3
  6. package/dist/channels/origin/binding.d.ts +11 -0
  7. package/dist/channels/origin/binding.d.ts.map +1 -1
  8. package/dist/channels/origin/binding.js +41 -25
  9. package/dist/channels/origin/index.d.ts +1 -0
  10. package/dist/channels/origin/index.d.ts.map +1 -1
  11. package/dist/channels/origin/index.js +1 -0
  12. package/dist/channels/origin/origin-channel.d.ts.map +1 -1
  13. package/dist/channels/origin/origin-channel.js +3 -0
  14. package/dist/channels/origin/reactions.d.ts +56 -0
  15. package/dist/channels/origin/reactions.d.ts.map +1 -0
  16. package/dist/channels/origin/reactions.js +67 -0
  17. package/dist/channels/origin/types.d.ts +11 -0
  18. package/dist/channels/origin/types.d.ts.map +1 -1
  19. package/dist/channels/slack/approvals.d.ts +16 -0
  20. package/dist/channels/slack/approvals.d.ts.map +1 -1
  21. package/dist/channels/slack/approvals.js +86 -0
  22. package/dist/channels/slack/cli-project.d.ts +19 -0
  23. package/dist/channels/slack/cli-project.d.ts.map +1 -0
  24. package/dist/channels/slack/cli-project.js +234 -0
  25. package/dist/channels/slack/defaults.d.ts.map +1 -1
  26. package/dist/channels/slack/defaults.js +97 -39
  27. package/dist/channels/slack/init.d.ts +3 -2
  28. package/dist/channels/slack/init.d.ts.map +1 -1
  29. package/dist/channels/slack/init.js +5 -5
  30. package/dist/channels/slack/interactive.d.ts +2 -1
  31. package/dist/channels/slack/interactive.d.ts.map +1 -1
  32. package/dist/channels/slack/interactive.js +15 -4
  33. package/dist/channels/slack/manifest.d.ts +1 -1
  34. package/dist/channels/slack/manifest.js +1 -1
  35. package/dist/channels/slack/setup.d.ts +1 -1
  36. package/dist/channels/slack/setup.d.ts.map +1 -1
  37. package/dist/channels/slack/setup.js +10 -6
  38. package/dist/channels/slack/slack-channel.d.ts.map +1 -1
  39. package/dist/channels/slack/slack-channel.js +1 -0
  40. package/dist/channels/slack/tool-approval-events.d.ts.map +1 -1
  41. package/dist/channels/slack/tool-approval-events.js +91 -1
  42. package/dist/docs/404.html +2 -2
  43. package/dist/docs/ab.html +4 -4
  44. package/dist/docs/assets/{app.jXleCmOc.js → app.B3rWNYE1.js} +1 -1
  45. package/dist/docs/assets/chunks/@localSearchIndexroot.BU9nHdnQ.js +1 -0
  46. package/dist/docs/assets/chunks/{VPLocalSearchBox.8LhyglIT.js → VPLocalSearchBox.C1lhqJJR.js} +1 -1
  47. package/dist/docs/assets/chunks/{theme.9ged-pr2.js → theme.B40_SXuv.js} +2 -2
  48. package/dist/docs/assets/{deployment.md.D9msOFOW.js → deployment.md.MFPKqsqI.js} +2 -2
  49. package/dist/docs/assets/{guides_mcp-oauth.md.DPYmBCbV.js → guides_mcp-oauth.md.CN-6YmTJ.js} +4 -4
  50. package/dist/docs/assets/{guides_mcp-oauth.md.DPYmBCbV.lean.js → guides_mcp-oauth.md.CN-6YmTJ.lean.js} +1 -1
  51. package/dist/docs/assets/guides_slack.md.VDXQV3ja.js +22 -0
  52. package/dist/docs/assets/guides_slack.md.VDXQV3ja.lean.js +1 -0
  53. package/dist/docs/assets/index.md.CVeRUOeZ.js +5 -0
  54. package/dist/docs/assets/{reference_agent-config.md.Cp_x38Nl.js → reference_agent-config.md.BHeYMgme.js} +1 -1
  55. package/dist/docs/assets/{reference_cli.md.CCnG-nJx.js → reference_cli.md.RyZf5OTE.js} +9 -6
  56. package/dist/docs/assets/{reference_cli.md.CCnG-nJx.lean.js → reference_cli.md.RyZf5OTE.lean.js} +1 -1
  57. package/dist/docs/assets/{reference_connections.md.BH8Oc0D0.js → reference_connections.md.DxldvyIB.js} +4 -3
  58. package/dist/docs/assets/{reference_http-api.md.D89k1mdm.js → reference_http-api.md.5zOAbV86.js} +1 -1
  59. package/dist/docs/assets/reference_sessions.md.NxFP_CAC.js +1 -0
  60. package/dist/docs/assets/{reference_tools.md.BHeXn2id.js → reference_tools.md.B84gw9Ii.js} +1 -1
  61. package/dist/docs/assets/templates_agents-md.md.CXSMZljE.js +2 -0
  62. package/dist/docs/assets/templates_agents-md.md.CXSMZljE.lean.js +1 -0
  63. package/dist/docs/assets/troubleshooting.md.DCiPBhYs.js +1 -0
  64. package/dist/docs/building-with-agents.html +4 -4
  65. package/dist/docs/concepts.html +4 -4
  66. package/dist/docs/deployment.html +7 -7
  67. package/dist/docs/deployment.md +5 -4
  68. package/dist/docs/evals.html +4 -4
  69. package/dist/docs/guides/agent-to-agent.html +4 -4
  70. package/dist/docs/guides/cloud-runtime.html +4 -4
  71. package/dist/docs/guides/convert-automation.html +4 -4
  72. package/dist/docs/guides/github.html +4 -4
  73. package/dist/docs/guides/human-in-the-loop.html +4 -4
  74. package/dist/docs/guides/mcp-oauth.html +8 -8
  75. package/dist/docs/guides/mcp-oauth.md +26 -8
  76. package/dist/docs/guides/opentelemetry.html +4 -4
  77. package/dist/docs/guides/slack.html +17 -33
  78. package/dist/docs/guides/slack.md +92 -201
  79. package/dist/docs/guides/webhooks.html +4 -4
  80. package/dist/docs/hashmap.json +1 -1
  81. package/dist/docs/hillclimbing.html +4 -4
  82. package/dist/docs/index.html +6 -6
  83. package/dist/docs/index.md +5 -3
  84. package/dist/docs/llms-full.txt +299 -653
  85. package/dist/docs/llms.txt +2 -2
  86. package/dist/docs/quickstart.html +4 -4
  87. package/dist/docs/reference/agent-config.html +6 -6
  88. package/dist/docs/reference/agent-config.md +2 -2
  89. package/dist/docs/reference/artifacts.html +4 -4
  90. package/dist/docs/reference/channels.html +4 -4
  91. package/dist/docs/reference/cli.html +13 -10
  92. package/dist/docs/reference/cli.md +38 -16
  93. package/dist/docs/reference/connections.html +9 -8
  94. package/dist/docs/reference/connections.md +6 -3
  95. package/dist/docs/reference/hooks.html +4 -4
  96. package/dist/docs/reference/http-api.html +6 -6
  97. package/dist/docs/reference/http-api.md +2 -1
  98. package/dist/docs/reference/instructions.html +4 -4
  99. package/dist/docs/reference/playground.html +4 -4
  100. package/dist/docs/reference/project-layout.html +4 -4
  101. package/dist/docs/reference/prompt.html +4 -4
  102. package/dist/docs/reference/schedules.html +4 -4
  103. package/dist/docs/reference/sessions.html +5 -5
  104. package/dist/docs/reference/sessions.md +4 -2
  105. package/dist/docs/reference/skills.html +4 -4
  106. package/dist/docs/reference/subagents.html +4 -4
  107. package/dist/docs/reference/tools.html +6 -6
  108. package/dist/docs/reference/tools.md +9 -2
  109. package/dist/docs/scaffolding-agents.html +4 -4
  110. package/dist/docs/storage.html +4 -4
  111. package/dist/docs/templates/agentic-owners.html +4 -4
  112. package/dist/docs/templates/agents-md.html +28 -0
  113. package/dist/docs/templates/agents-md.md +105 -0
  114. package/dist/docs/templates/code-wiki.html +5 -5
  115. package/dist/docs/templates/demo.html +4 -4
  116. package/dist/docs/templates/pr-autofixer.html +4 -4
  117. package/dist/docs/templates/security-help.html +4 -4
  118. package/dist/docs/templates/security-reviewer.html +5 -5
  119. package/dist/docs/templates/triage.html +4 -4
  120. package/dist/docs/troubleshooting.html +5 -5
  121. package/dist/docs/troubleshooting.md +2 -2
  122. package/dist/evals/run-facts.d.ts.map +1 -1
  123. package/dist/evals/run-facts.js +27 -0
  124. package/dist/internal/advertise-tools.d.ts.map +1 -1
  125. package/dist/internal/advertise-tools.js +15 -9
  126. package/dist/internal/approval-gate.d.ts +12 -13
  127. package/dist/internal/approval-gate.d.ts.map +1 -1
  128. package/dist/internal/approval-gate.js +16 -21
  129. package/dist/internal/chat-client.js +10 -0
  130. package/dist/internal/cli-deploy.d.ts +5 -0
  131. package/dist/internal/cli-deploy.d.ts.map +1 -1
  132. package/dist/internal/cli-deploy.js +50 -17
  133. package/dist/internal/cli-mcp-oauth.js +8 -18
  134. package/dist/internal/cli-slack-manual.d.ts +24 -2
  135. package/dist/internal/cli-slack-manual.d.ts.map +1 -1
  136. package/dist/internal/cli-slack-manual.js +251 -20
  137. package/dist/internal/cli-slack.d.ts +9 -2
  138. package/dist/internal/cli-slack.d.ts.map +1 -1
  139. package/dist/internal/cli-slack.js +29 -82
  140. package/dist/internal/cursor/account-mcp.d.ts +1 -0
  141. package/dist/internal/cursor/account-mcp.d.ts.map +1 -1
  142. package/dist/internal/cursor/account-mcp.js +17 -0
  143. package/dist/internal/cursor-agent-template.d.ts +1 -1
  144. package/dist/internal/cursor-agent-template.d.ts.map +1 -1
  145. package/dist/internal/cursor-agent-template.js +1 -0
  146. package/dist/internal/deploy-client.d.ts +17 -0
  147. package/dist/internal/deploy-client.d.ts.map +1 -1
  148. package/dist/internal/deploy-client.js +31 -10
  149. package/dist/internal/env-file.d.ts +19 -0
  150. package/dist/internal/env-file.d.ts.map +1 -0
  151. package/dist/internal/env-file.js +90 -0
  152. package/dist/internal/framework-file-storage.d.ts +1 -1
  153. package/dist/internal/framework-file-storage.d.ts.map +1 -1
  154. package/dist/internal/framework-file-storage.js +6 -0
  155. package/dist/internal/hosted-delivery-protocol.d.ts +7 -0
  156. package/dist/internal/hosted-delivery-protocol.d.ts.map +1 -1
  157. package/dist/internal/hosted-delivery-protocol.js +7 -0
  158. package/dist/internal/hosted-delivery.d.ts +6 -0
  159. package/dist/internal/hosted-delivery.d.ts.map +1 -1
  160. package/dist/internal/hosted-delivery.js +63 -22
  161. package/dist/internal/hosted-execution-diag.d.ts +48 -0
  162. package/dist/internal/hosted-execution-diag.d.ts.map +1 -0
  163. package/dist/internal/hosted-execution-diag.js +150 -0
  164. package/dist/internal/http-channel.d.ts.map +1 -1
  165. package/dist/internal/http-channel.js +81 -1
  166. package/dist/internal/init-project.d.ts.map +1 -1
  167. package/dist/internal/init-project.js +2 -0
  168. package/dist/internal/logs-client.d.ts +5 -0
  169. package/dist/internal/logs-client.d.ts.map +1 -1
  170. package/dist/internal/logs-client.js +5 -0
  171. package/dist/internal/mcp-endpoint.js +2 -3
  172. package/dist/internal/mcp-host.d.ts +10 -0
  173. package/dist/internal/mcp-host.d.ts.map +1 -1
  174. package/dist/internal/mcp-host.js +57 -8
  175. package/dist/internal/mcp-oauth-on-demand.d.ts +68 -0
  176. package/dist/internal/mcp-oauth-on-demand.d.ts.map +1 -0
  177. package/dist/internal/mcp-oauth-on-demand.js +287 -0
  178. package/dist/internal/mcp-oauth-persist.d.ts +42 -0
  179. package/dist/internal/mcp-oauth-persist.d.ts.map +1 -0
  180. package/dist/internal/mcp-oauth-persist.js +92 -0
  181. package/dist/internal/mcp-oauth.d.ts +1 -0
  182. package/dist/internal/mcp-oauth.d.ts.map +1 -1
  183. package/dist/internal/mcp-oauth.js +10 -2
  184. package/dist/internal/otel/collector.d.ts.map +1 -1
  185. package/dist/internal/otel/collector.js +22 -9
  186. package/dist/internal/server.d.ts +3 -0
  187. package/dist/internal/server.d.ts.map +1 -1
  188. package/dist/internal/server.js +49 -22
  189. package/dist/internal/session-engine.d.ts +88 -3
  190. package/dist/internal/session-engine.d.ts.map +1 -1
  191. package/dist/internal/session-engine.js +515 -43
  192. package/dist/internal/sessions-client.d.ts +9 -7
  193. package/dist/internal/sessions-client.d.ts.map +1 -1
  194. package/dist/internal/sessions-client.js +3 -1
  195. package/dist/internal/storage-coordinator.d.ts +7 -0
  196. package/dist/internal/storage-coordinator.d.ts.map +1 -1
  197. package/dist/internal/storage-coordinator.js +28 -5
  198. package/dist/internal/storage-roles.d.ts +5 -0
  199. package/dist/internal/storage-roles.d.ts.map +1 -1
  200. package/dist/internal/stream-progress.d.ts.map +1 -1
  201. package/dist/internal/stream-progress.js +10 -0
  202. package/dist/internal/tool-policy.d.ts +9 -1
  203. package/dist/internal/tool-policy.d.ts.map +1 -1
  204. package/dist/internal/tool-policy.js +13 -0
  205. package/dist/internal/trajectory.d.ts.map +1 -1
  206. package/dist/internal/trajectory.js +10 -0
  207. package/dist/internal/turn-outbox.d.ts +24 -0
  208. package/dist/internal/turn-outbox.d.ts.map +1 -0
  209. package/dist/internal/turn-outbox.js +80 -0
  210. package/dist/playground/assets/{index-Cx9CclK_.js → index-DrkI6y5O.js} +45 -45
  211. package/dist/playground/assets/index-DzNGwm7q.css +1 -0
  212. package/dist/playground/index.html +2 -2
  213. package/dist/storage-backends/cursor-hosted.d.ts +1 -1
  214. package/dist/storage-backends/cursor-hosted.d.ts.map +1 -1
  215. package/dist/storage-backends/cursor-hosted.js +12 -0
  216. package/dist/storage.d.ts +8 -0
  217. package/dist/storage.d.ts.map +1 -1
  218. package/dist/types.d.ts +63 -7
  219. package/dist/types.d.ts.map +1 -1
  220. package/docs/README.md +5 -3
  221. package/docs/deployment.md +5 -4
  222. package/docs/guides/mcp-oauth.md +26 -8
  223. package/docs/guides/slack.md +93 -202
  224. package/docs/reference/agent-config.md +2 -2
  225. package/docs/reference/cli.md +38 -16
  226. package/docs/reference/connections.md +6 -3
  227. package/docs/reference/http-api.md +2 -1
  228. package/docs/reference/sessions.md +4 -2
  229. package/docs/reference/tools.md +9 -2
  230. package/docs/templates/agents-md.md +110 -0
  231. package/docs/troubleshooting.md +2 -2
  232. package/package.json +1 -1
  233. package/skills/create-agent/SKILL.md +2 -1
  234. package/skills/mcp-auth/SKILL.md +6 -3
  235. package/skills/setup-slack/SKILL.md +23 -13
  236. package/src/bin/agent-serve.ts +13 -1
  237. package/src/channels/origin/api.ts +24 -5
  238. package/src/channels/origin/binding.ts +55 -26
  239. package/src/channels/origin/index.ts +1 -0
  240. package/src/channels/origin/origin-channel.ts +4 -0
  241. package/src/channels/origin/reactions.ts +82 -0
  242. package/src/channels/origin/types.ts +11 -0
  243. package/src/channels/slack/approvals.ts +105 -0
  244. package/src/channels/slack/cli-project.ts +267 -0
  245. package/src/channels/slack/defaults.ts +109 -46
  246. package/src/channels/slack/init.ts +10 -5
  247. package/src/channels/slack/interactive.ts +35 -9
  248. package/src/channels/slack/manifest.ts +1 -1
  249. package/src/channels/slack/setup.ts +10 -6
  250. package/src/channels/slack/slack-channel.ts +1 -0
  251. package/src/channels/slack/tool-approval-events.ts +93 -0
  252. package/src/evals/run-facts.ts +32 -0
  253. package/src/internal/advertise-tools.ts +31 -10
  254. package/src/internal/approval-gate.ts +20 -29
  255. package/src/internal/chat-client.ts +19 -0
  256. package/src/internal/cli-deploy.ts +79 -9
  257. package/src/internal/cli-mcp-oauth.ts +7 -21
  258. package/src/internal/cli-slack-manual.ts +350 -18
  259. package/src/internal/cli-slack.ts +40 -84
  260. package/src/internal/cursor/account-mcp.ts +21 -0
  261. package/src/internal/cursor-agent-template.ts +1 -0
  262. package/src/internal/deploy-client.ts +43 -0
  263. package/src/internal/env-file.ts +84 -0
  264. package/src/internal/framework-file-storage.ts +7 -1
  265. package/src/internal/hosted-delivery-protocol.ts +7 -0
  266. package/src/internal/hosted-delivery.ts +100 -27
  267. package/src/internal/hosted-execution-diag.ts +207 -0
  268. package/src/internal/http-channel.ts +99 -0
  269. package/src/internal/init-project.ts +2 -0
  270. package/src/internal/logs-client.ts +5 -0
  271. package/src/internal/mcp-endpoint.ts +13 -4
  272. package/src/internal/mcp-host.ts +77 -11
  273. package/src/internal/mcp-oauth-on-demand.ts +352 -0
  274. package/src/internal/mcp-oauth-persist.ts +127 -0
  275. package/src/internal/mcp-oauth.ts +17 -1
  276. package/src/internal/otel/collector.ts +30 -0
  277. package/src/internal/server.ts +59 -9
  278. package/src/internal/session-engine.ts +659 -56
  279. package/src/internal/sessions-client.ts +17 -8
  280. package/src/internal/storage-coordinator.ts +38 -8
  281. package/src/internal/storage-roles.ts +7 -0
  282. package/src/internal/stream-progress.ts +19 -0
  283. package/src/internal/tool-policy.ts +18 -0
  284. package/src/internal/trajectory.ts +10 -0
  285. package/src/internal/turn-outbox.ts +85 -0
  286. package/src/storage-backends/cursor-hosted.ts +13 -1
  287. package/src/storage.ts +12 -0
  288. package/src/types.ts +68 -8
  289. package/templates/agents-md/README.md +39 -0
  290. package/templates/agents-md/agent/agent.ts +8 -0
  291. package/templates/agents-md/agent/channels/github.ts +10 -0
  292. package/templates/agents-md/agent/channels/queue.ts +28 -0
  293. package/templates/agents-md/agent/channels/slack.ts +9 -0
  294. package/templates/agents-md/agent/instructions.md +39 -0
  295. package/templates/agents-md/agent/lib/collect.ts +439 -0
  296. package/templates/agents-md/agent/lib/config.ts +8 -0
  297. package/templates/agents-md/agent/lib/paths.ts +51 -0
  298. package/templates/agents-md/agent/schedules/weekly.ts +17 -0
  299. package/templates/agents-md/agent/tools/apply_agents.ts +226 -0
  300. package/templates/agents-md/evals/agents.eval.ts +135 -0
  301. package/templates/agents-md/evals/evals.config.ts +5 -0
  302. package/templates/agents-md/init.json +38 -0
  303. package/templates/agents-md/package.json +18 -0
  304. package/templates/agents-md/tsconfig.json +12 -0
  305. package/dist/docs/assets/chunks/@localSearchIndexroot.DFoGuETX.js +0 -1
  306. package/dist/docs/assets/guides_slack.md.C32HsdKk.js +0 -38
  307. package/dist/docs/assets/guides_slack.md.C32HsdKk.lean.js +0 -1
  308. package/dist/docs/assets/index.md.CI93Ltlb.js +0 -5
  309. package/dist/docs/assets/reference_sessions.md.D0mIh4KK.js +0 -1
  310. package/dist/docs/assets/troubleshooting.md.Ctv3T8C2.js +0 -1
  311. package/dist/docs/design/agsh.md +0 -406
  312. package/dist/playground/assets/index-B1DDvBeC.css +0 -1
  313. package/docs/design/agsh.md +0 -406
  314. /package/dist/docs/assets/{deployment.md.D9msOFOW.lean.js → deployment.md.MFPKqsqI.lean.js} +0 -0
  315. /package/dist/docs/assets/{index.md.CI93Ltlb.lean.js → index.md.CVeRUOeZ.lean.js} +0 -0
  316. /package/dist/docs/assets/{reference_agent-config.md.Cp_x38Nl.lean.js → reference_agent-config.md.BHeYMgme.lean.js} +0 -0
  317. /package/dist/docs/assets/{reference_connections.md.BH8Oc0D0.lean.js → reference_connections.md.DxldvyIB.lean.js} +0 -0
  318. /package/dist/docs/assets/{reference_http-api.md.D89k1mdm.lean.js → reference_http-api.md.5zOAbV86.lean.js} +0 -0
  319. /package/dist/docs/assets/{reference_sessions.md.D0mIh4KK.lean.js → reference_sessions.md.NxFP_CAC.lean.js} +0 -0
  320. /package/dist/docs/assets/{reference_tools.md.BHeXn2id.lean.js → reference_tools.md.B84gw9Ii.lean.js} +0 -0
  321. /package/dist/docs/assets/{troubleshooting.md.Ctv3T8C2.lean.js → troubleshooting.md.DCiPBhYs.lean.js} +0 -0
@@ -1,15 +1,13 @@
1
1
  # Slack agents
2
2
 
3
- The Slack channel puts your agent in Slack as its own Socket Mode bot.
4
- `agent-sdk slack create` opens the dashboard wizard and writes tokens
5
- to `.env.local`. To own the Slack app yourself, run
6
- `agent-sdk slack init --manual` and paste the manifests at
7
- [api.slack.com](https://api.slack.com/apps). Socket Mode has no
8
- public Request URL. Replies stream in threads, with tool "thinking" steps,
9
- suggested prompts, and opt-in approval buttons.
3
+ The Slack channel is a Socket Mode bot. The app connects out, so you
4
+ don't need a public Request URL. Mentions and DMs start a thread.
5
+ Replies stream there, with thinking steps and suggested prompts.
10
6
 
11
- The companion skill is
12
- [`skills/setup-slack/SKILL.md`](https://github.com/cursor/cursor/blob/main/packages/agent-serve/skills/setup-slack/SKILL.md).
7
+ Use `agent-sdk slack create` when Cursor should own the Slack app. Use
8
+ `agent-sdk slack init --manual` when you own it. Commands and flags live
9
+ in the [CLI reference](/docs/reference/cli.md#slack). Coding agents should
10
+ follow [`skills/setup-slack/SKILL.md`](https://github.com/cursor/cursor/blob/main/packages/agent-serve/skills/setup-slack/SKILL.md).
13
11
 
14
12
  ## Define the channel
15
13
 
@@ -19,35 +17,23 @@ Author `agent/channels/slack.ts` with `slackChannel()` from
19
17
  ```ts
20
18
  import { slackChannel } from "@cursor/july/channels/slack";
21
19
 
22
- // Single agent: reads SLACK_BOT_TOKEN + SLACK_APP_TOKEN
23
20
  export default slackChannel();
24
-
25
- // Multi-agent serve: one Slack app (and token pair) per agent
26
- export default slackChannel({ envPrefix: "WEATHER_AGENT" });
27
- // → WEATHER_AGENT_SLACK_BOT_TOKEN + WEATHER_AGENT_SLACK_APP_TOKEN
28
21
  ```
29
22
 
30
- By default the channel connects over Socket Mode (the app connects
31
- outward, so it works from behind any firewall) and responds only to
32
- `app_mention` events and direct messages. It also refuses Slack Connect
33
- users, guests, and senders from other workspaces. Threads bind to
34
- sessions with `continuationToken = channelId:threadTs`, so a thread is
35
- one durable conversation. Replies stream (`chat.startStream` /
36
- `appendStream` / `stopStream`) with a plain-message fallback, a rotating
37
- status shows while the agent works, and the pack sets thread titles and
38
- suggested prompts. When a Slack API is unavailable (`method_not_found`,
39
- `missing_scope`), the pack degrades to `postMessage` instead of failing.
40
-
41
- Missing tokens leave the channel idle (`channel idle … missing
42
- credentials`) rather than failing `serve`. That's useful when you mount
43
- many agents and only some have Slack apps.
23
+ `slackChannel()` reads `SLACK_BOT_TOKEN` and `SLACK_APP_TOKEN`. Pass
24
+ `envPrefix: "WEATHER_AGENT"` to read `WEATHER_AGENT_SLACK_BOT_TOKEN`
25
+ and `WEATHER_AGENT_SLACK_APP_TOKEN` instead. Use a prefix when one
26
+ host serves several Slack bots.
27
+
28
+ A thread is one conversation. The bot answers mentions and DMs. It
29
+ refuses Slack Connect users, guests, and people from other workspaces.
30
+ Missing tokens leave this channel idle. The rest of `serve` still
31
+ starts.
44
32
 
45
33
  ## Control who can message the agent
46
34
 
47
- External senders are blocked by default. Slack Connect users, guests, and
48
- people whose home workspace is not the install team never reach the
49
- handler. Set `blockExternals: false` only when the agent should serve
50
- people outside your org:
35
+ External senders are blocked. Set `blockExternals: false` only when
36
+ people outside your org should reach the agent:
51
37
 
52
38
  ```ts
53
39
  export default slackChannel({
@@ -55,9 +41,8 @@ export default slackChannel({
55
41
  });
56
42
  ```
57
43
 
58
- Sessions are thread-scoped by default, so anyone in the thread can
59
- continue. Restrict follow-ups to the person who started the session with
60
- `respondTo: "author"`:
44
+ Anyone in the thread can continue it. Restrict follow-ups to the person
45
+ who started the session with `respondTo: "author"`:
61
46
 
62
47
  ```ts
63
48
  export default slackChannel({
@@ -67,234 +52,140 @@ export default slackChannel({
67
52
 
68
53
  ## Set it up
69
54
 
70
- For a dedicated Socket Mode bot, run `agent-sdk slack create`. The CLI
71
- opens the signed-in Cursor dashboard wizard. Slack consent, bot name,
72
- and admin-approval wait happen there. Tokens are stored as deployment
73
- secrets and written to `.env.local`. They are never shown. Do not paste
74
- a manifest at [api.slack.com](https://api.slack.com/apps) unless you
75
- are on the [manual setup](#manual-setup) path.
76
-
77
- Bots that already have tokens in `.env.local` keep working. Skip the
78
- wizard unless you want a Cursor-managed app.
55
+ `slack create` opens the Cursor dashboard wizard. Finish Slack consent
56
+ and the bot name there. The CLI writes tokens to `.env.local` and never
57
+ prints them. Skip the wizard if those tokens are already set, unless
58
+ you want a Cursor-managed app.
79
59
 
80
60
  ### Provision with the CLI
81
61
 
82
62
  ```bash
83
- agent-sdk slack create --dir . # dev app (default)
84
- agent-sdk slack create --dir . --prod # prod app
63
+ agent-sdk slack create --dir .
64
+ agent-sdk slack create --dir . --prod
85
65
  ```
86
66
 
87
- `slack create` needs a signed-in host (`agent-sdk login` or
88
- `CURSOR_API_KEY`). It scaffolds `agent/channels/slack.ts` when the file
89
- is missing, opens the dashboard wizard, and waits. Finish **Add Slack
90
- to this agent** in the browser as the same Cursor account. The CLI
91
- writes `<PREFIX>_SLACK_BOT_TOKEN` and `<PREFIX>_SLACK_APP_TOKEN` into
92
- `<dir>/.env.local`, then runs `doctor`. Serve and smoke it as described
93
- [below](#wire-the-env-and-verify).
94
-
95
- If Slack needs a workspace admin to approve the app, keep the CLI
96
- running. Managed install does not file the request. Open Slack's
97
- **Request approval** page (the CLI prints the link; the same URL is
98
- **Send a reminder** after you submit). After an admin approves, click
67
+ Sign in first (`agent-sdk login` or `CURSOR_API_KEY`). Finish **Add
68
+ Slack to this agent** as the same Cursor account. Then run
69
+ `agent-sdk slack doctor --prefix MY_AGENT` and serve:
70
+
71
+ ```bash
72
+ agent-sdk serve --dir . --dev
73
+ ```
74
+
75
+ Invite the bot and mention it, or DM it. Expect a Thinking status,
76
+ then a threaded streaming reply.
77
+
78
+ If Slack needs a workspace admin, keep the CLI running. Open the
79
+ **Request approval** link it prints. After an admin approves, click
99
80
  **Retry** in the wizard.
100
81
 
101
- Useful companions: `--name` / `--icon` / `--channel-posts` prefill the
102
- wizard. `--slack-team T0123ABCD` picks a workspace when several are
103
- connected. A second `slack create` for the same agent and env overwrites
104
- that Slack app. It keeps the Slack app id and replaces the manifest and
105
- tokens. `agent-sdk slack destroy` deletes the provisioned app.
106
- `agent-sdk slack icon <source>` updates the icon later.
82
+ `slack destroy` deletes the Cursor-managed app. `slack icon` updates
83
+ its icon. A second `slack create` for the same agent and environment
84
+ replaces that app's manifest and tokens.
107
85
 
108
86
  ### Provision from the dashboard
109
87
 
110
88
  The same wizard is on [Deployed Agents](https://cursor.com/dashboard).
111
- Open **Integrations** on an agent and click **Add Slack to this agent**,
112
- or follow the URL `slack create` printed.
89
+ Open **Integrations** and click **Add Slack to this agent**.
113
90
 
114
- A first-run agent that has no hosted engine yet shows **Not deployed
115
- yet**. Local `agent-sdk serve` works from `.env.local`. The next
116
- **Deploy** injects the stored secrets; there is no Slack-only Redeploy.
91
+ Local `agent-sdk serve` reads `.env.local`. The next deploy injects the
92
+ stored secrets.
117
93
 
118
- If Slack needs admin approval, the wizard waits. Click **Request
119
- approval** to file the request in Slack (that same page later sends a
120
- reminder). After an admin approves, click **Retry**.
94
+ If Slack needs admin approval, click **Request approval**, then
95
+ **Retry** after an admin approves.
121
96
 
122
- The app row's menu covers later care: rename, set an icon, rotate
123
- tokens, remove the app, or disconnect the workspace.
97
+ The app row's menu covers rename, icon, token rotation, removal, and
98
+ workspace disconnect.
124
99
 
125
- ### Wire the env and verify
100
+ ### Create your own Slack app
126
101
 
127
- `agent-sdk slack create` already wrote the tokens to `.env.local`, so
128
- after provisioning skip straight to `doctor`. `serve` / `dev` /
129
- `slack doctor` load that file (real environment variables always win).
102
+ `slack init --manual` is for an app you own. It writes the channel file
103
+ and Slack manifests. When Slack CLI (`~/.slack/bin/slack`) is logged
104
+ in, it installs the app. When it isn't, install the app yourself.
130
105
 
131
106
  ```bash
132
- agent-sdk slack doctor --prefix MY_AGENT
133
- ```
134
-
135
- Proceed when `app_token`, `connections_open`, `bot_token`, and
136
- `auth_test` are all green. Then serve and smoke it:
137
-
138
- ```bash
139
- agent-sdk serve --dir . --dev
140
- # expect: [agent-sdk/slack] Socket Mode connected
107
+ agent-sdk slack init --manual --dir . --name "My Agent"
141
108
  ```
142
109
 
143
- Invite the bot to a channel and @mention it (or DM it). Expect the
144
- Thinking… status, then a threaded streaming reply, with correlated
145
- server logs (`inbound kind=app_mention`, `session start`,
146
- `reply delivered via stream|postMessage`).
147
-
148
- ### Manual setup
149
-
150
- `slack init --manual` is for a Slack app you own at api.slack.com. You
151
- paste the generated manifests and mint tokens yourself. Use this when
152
- you want an unmanaged app, or when the dashboard wizard is not an
153
- option.
110
+ Install Slack CLI if you need it:
154
111
 
155
112
  ```bash
156
- agent-sdk slack init --manual --dir . --name "My Agent"
113
+ curl -fsSL https://downloads.slack-edge.com/slack-cli/install.sh | bash
157
114
  ```
158
115
 
159
- That writes `agent/channels/slack.ts`, Slack manifests under the
160
- project state directory, `env.example`, and `setup-status.json`.
161
- `--no-prefix` uses shared `SLACK_*` variables on
162
- a single-agent host. `--prefix CUSTOM` overrides the directory-derived
163
- prefix. `--channel-posts` subscribes the manifests to channel-post
164
- events.
116
+ Log in with `slack login --no-prompt`. In Slack, send
117
+ `/slackauthticket <ticket>`, then
118
+ `slack login --ticket <ticket> --challenge <code>`. Install the
119
+ workspace app with `slack app install`. Create a separate production
120
+ app the same way.
165
121
 
166
- `slack manifest --env both` regenerates the JSON files without
167
- touching the channel file.
122
+ Or paste `.slack/manifest.dev.json` at
123
+ [api.slack.com/apps](https://api.slack.com/apps) (**Create New App** →
124
+ **From a manifest**). Repeat with `.slack/manifest.prod.json`. Dev and
125
+ prod are separate Slack apps.
168
126
 
169
- #### Create the apps
127
+ Then put a bot token (`xoxb-...`) and an app-level token with
128
+ `connections:write` (`xapp-...`) in `.env.local`. Use the names
129
+ `slack init --manual` printed. Run `slack doctor` and serve as above.
170
130
 
171
- This phase needs someone with permission to create Slack apps.
172
-
173
- 1. Open [api.slack.com/apps](https://api.slack.com/apps) → **Create New
174
- App** → **From a manifest**.
175
- 2. Paste `manifest.dev.json` and create the dev app.
176
- 3. Repeat with `manifest.prod.json`. Dev and prod are separate Slack
177
- apps with separate tokens.
178
-
179
- #### Install and mint tokens
180
-
181
- For each app: **Install to Workspace** and copy the Bot User OAuth Token
182
- (`xoxb-…`). Then under **Basic Information → App-Level Tokens** create a
183
- token with scope `connections:write` and copy it (`xapp-…`).
184
-
185
- Put the pair in `.env.local` using the names from `env.example`, then
186
- run `slack doctor` and serve as [above](#wire-the-env-and-verify).
131
+ Serve this app with Agent SDK. Do not run `slack deploy`.
187
132
 
188
133
  ## Choose when the agent engages
189
134
 
190
- Mentions and DMs are on by default. Watching channels means dispatching
191
- on new posts without a mention. That's an explicit opt-in:
135
+ Mentions and DMs are on. Watching channel posts without a mention is
136
+ opt-in:
192
137
 
193
138
  ```ts
194
139
  export default slackChannel({
195
140
  envPrefix: "TRIAGE",
196
141
  engagement: {
197
- // mentions / directMessages default to true
198
142
  channelPosts: {
199
- allow: ["#triage-alerts"], // use ["*"] for every joined channel
200
- posts: "top-level", // default: thread replies never dispatch
201
- debounceMs: 15_000, // optional: let rapid edits settle
202
- includeBotPosts: false, // default: bot-authored posts never dispatch
143
+ allow: ["#triage-alerts"],
144
+ posts: "top-level",
145
+ debounceMs: 15_000,
203
146
  },
204
147
  },
205
- onChannelPost: async (ctx, message) => {
206
- // same contract as onAppMention: return null to skip
148
+ onChannelPost: async (_ctx, message) => {
207
149
  return message.markdown.length > 20 ? {} : null;
208
150
  },
209
151
  });
210
152
  ```
211
153
 
212
- Channel watching needs the `message.channels` / `message.groups` events
213
- on the Slack app. Pass `--channel-posts` on `slack create` or
214
- `slack init --manual`. The bot must also be a member of each watched
215
- channel.
216
-
217
- Set `allow: ["*"]` to watch every channel the bot has joined.
154
+ Pass `--channel-posts` on `slack create` or `slack init --manual` so
155
+ the Slack app receives those events. The bot must be in each watched
156
+ channel. `allow: ["*"]` watches every joined channel.
218
157
 
219
- Set `includeBotPosts: true` when the posts worth watching come from bots:
220
- alert feeds, webhook integrations, or other agents posting notes. The
221
- watching app's own posts stay dropped either way, matched by the `bot_id`
222
- and bot user id from `auth.test`, so an agent can never dispatch on its
223
- own replies. Use this for a bot-fed alerts channel.
158
+ Set `includeBotPosts: true` for alert feeds and other bots. This app
159
+ never wakes on its own posts.
224
160
 
225
161
  ## Prepare work on the host
226
162
 
227
163
  Mention and DM handlers may return a prepared `message`,
228
- `workspaceFiles`, or `cloud` block. It's the same host-prep pattern as
164
+ `workspaceFiles`, or `cloud` block. Use the same host-prep pattern as
229
165
  [custom channels](/docs/guides/webhooks.md#prepare-on-the-host-then-hand-off).
230
- PR agents use it: extract a PR URL from the mention text and run the
231
- same host path as the HTTP channel.
232
166
 
233
- Slack file uploads are attached automatically. Images become vision input.
167
+ Slack file uploads attach automatically. Images become vision input.
234
168
  Supported documents become workspace files for the turn.
235
169
 
236
170
  ## Add approval buttons
237
171
 
238
- Tools with `needsApproval` park until a person decides. Route that
239
- through Slack with one flag:
172
+ Tools with `needsApproval` park until a person decides. Post those
173
+ decisions in Slack with one flag:
240
174
 
241
175
  ```ts
242
176
  export default slackChannel({
243
- toolApprovals: true, // posts Block Kit Approve/Deny cards + routes clicks
177
+ toolApprovals: true,
244
178
  });
245
179
  ```
246
180
 
247
- Approval cards need interactivity on the Slack app. Recreate with
248
- `slack create` if clicks do nothing. Composing events by hand: spread
249
- `buildToolApprovalEvents({ credentials })` into `events` and set
250
- `interactivity: true` on the channel so Socket Mode routes the clicks.
251
-
252
- Cards show redacted, truncated arguments (Block Kit size limits);
253
- execution still uses the full validated input, so review sensitive tools
254
- in the playground when the arguments may exceed the card. Approvals
255
- exist for `execution: "server"` tools on the local runtime only, and
256
- parked calls do not survive a host restart. The full lifecycle is in
181
+ The Slack app needs interactivity. Recreate it with `slack create` if
182
+ clicks do nothing. Cards show redacted, truncated arguments. Execution
183
+ still uses the full input, so review sensitive tools in the playground
184
+ when the card may hide fields. The lifecycle is in
257
185
  [Human-in-the-loop](/docs/guides/human-in-the-loop.md).
258
186
 
259
187
  ## Run several agents on one host
260
188
 
261
- One Slack app and token pair per agent. Never share a pair across
262
- agents in the same process. `envPrefix` keeps them apart
263
- (`WEATHER_AGENT_SLACK_*`, `TRIAGE_SLACK_*`, …), and agents without tokens mount
264
- with their Slack channel idle while everything else serves normally.
265
-
266
- ## Keep the channel healthy
267
-
268
- Two habits matter most.
269
-
270
- - Don't `await` long work inside Slack dispatch handlers. The pack
271
- dispatches through `waitUntil` and streams as the turn progresses.
272
- - In `--dev` (loopback) or `--allow-anonymous` (trusted shared host), the
273
- playground can list and stream Slack sessions and resolve their parked
274
- approvals (the audit trail records the HTTP caller). Bearer-auth hosts
275
- stay strict: Slack approvals must come from Slack interactivity or a
276
- matching principal.
277
-
278
- ## CLI reference
279
-
280
- The `slack` subcommands cover setup end to end.
281
-
282
- ```bash
283
- agent-sdk slack setup # printed setup guide
284
- agent-sdk slack create --dir . # dashboard wizard (dev app)
285
- agent-sdk slack create --dir . --prod # prod app
286
- agent-sdk slack destroy --dir . # delete the provisioned app
287
- agent-sdk slack icon ./icon.png --dir . # set the provisioned app's icon
288
- agent-sdk slack init --manual --dir . # manifests to paste at api.slack.com
289
- agent-sdk slack manifest --env both # regenerate those JSON files
290
- agent-sdk slack doctor --prefix MY_AGENT # token / connectivity checks
291
- ```
292
-
293
- ## What's next
294
-
295
- Continue with these pages:
296
-
297
- - [Human-in-the-loop](/docs/guides/human-in-the-loop.md): the approval lifecycle
298
- behind `toolApprovals`
299
- - [Webhooks and custom channels](/docs/guides/webhooks.md): the mechanism this
300
- pack is built on
189
+ Give each agent its own Slack app and token pair. Set `envPrefix` so
190
+ the names don't collide (`WEATHER_AGENT_SLACK_*`, `TRIAGE_SLACK_*`).
191
+ Agents without tokens stay idle. The others still serve.