@cursor/july 0.1.111 → 0.1.113

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 (441) hide show
  1. package/README.md +4 -0
  2. package/dist/bin/agent-serve.js +20 -4
  3. package/dist/channels/checks.d.ts +10 -0
  4. package/dist/channels/checks.d.ts.map +1 -1
  5. package/dist/channels/github/github-channel.d.ts +29 -19
  6. package/dist/channels/github/github-channel.d.ts.map +1 -1
  7. package/dist/channels/github/github-channel.js +29 -19
  8. package/dist/channels/origin/checks.d.ts +1 -1
  9. package/dist/channels/origin/checks.d.ts.map +1 -1
  10. package/dist/channels/slack/agentic-delivery.d.ts.map +1 -1
  11. package/dist/channels/slack/agentic-delivery.js +2 -0
  12. package/dist/channels/slack/dispatch.d.ts +11 -1
  13. package/dist/channels/slack/dispatch.d.ts.map +1 -1
  14. package/dist/channels/slack/dispatch.js +146 -39
  15. package/dist/channels/slack/placeholder.d.ts +26 -0
  16. package/dist/channels/slack/placeholder.d.ts.map +1 -1
  17. package/dist/channels/slack/placeholder.js +28 -0
  18. package/dist/channels/slack/slack-channel.d.ts.map +1 -1
  19. package/dist/channels/slack/slack-channel.js +9 -16
  20. package/dist/docs/404.html +2 -2
  21. package/dist/docs/assets/{app.Drol6mi6.js → app.CAeK13eM.js} +4 -4
  22. package/dist/docs/assets/building-with-agents.md.BBCx0AUo.js +9 -0
  23. package/dist/docs/assets/building-with-agents.md.BBCx0AUo.lean.js +1 -0
  24. package/dist/docs/assets/chunks/@localSearchIndexroot.Ck9E52Ls.js +1 -0
  25. package/dist/docs/assets/chunks/{VPLocalSearchBox.CdqoBZJX.js → VPLocalSearchBox.C9LbPHod.js} +1 -1
  26. package/dist/docs/assets/chunks/{arc.BVX3ycTn.js → arc.CmMq2zmS.js} +1 -1
  27. package/dist/docs/assets/chunks/{architectureDiagram-Q4EWVU46.CcChnMxX.js → architectureDiagram-Q4EWVU46.CCXB8Uj5.js} +1 -1
  28. package/dist/docs/assets/chunks/{baseUniq.xwtXO-yt.js → baseUniq.CyQo6eLe.js} +1 -1
  29. package/dist/docs/assets/chunks/{blockDiagram-DXYQGD6D.CijZ_taK.js → blockDiagram-DXYQGD6D.JYq6w91N.js} +1 -1
  30. package/dist/docs/assets/chunks/{c4Diagram-AHTNJAMY.0FBvwBvK.js → c4Diagram-AHTNJAMY.BRV8GPJJ.js} +1 -1
  31. package/dist/docs/assets/chunks/channel.BHiYmnZ4.js +1 -0
  32. package/dist/docs/assets/chunks/{chunk-4BX2VUAB.CELMmMDA.js → chunk-4BX2VUAB.Bv4ooYQR.js} +1 -1
  33. package/dist/docs/assets/chunks/{chunk-4TB4RGXK.C4bhFtSm.js → chunk-4TB4RGXK.t4JtKPcj.js} +1 -1
  34. package/dist/docs/assets/chunks/{chunk-55IACEB6.ZnQ9gRRQ.js → chunk-55IACEB6.34lCHj9Y.js} +1 -1
  35. package/dist/docs/assets/chunks/{chunk-EDXVE4YY.DPlmglG-.js → chunk-EDXVE4YY.BSwrPNrt.js} +1 -1
  36. package/dist/docs/assets/chunks/{chunk-FMBD7UC4.BrUk8pff.js → chunk-FMBD7UC4.Beeun-R-.js} +1 -1
  37. package/dist/docs/assets/chunks/{chunk-OYMX7WX6.CcmWIncu.js → chunk-OYMX7WX6.BUUFUcJc.js} +1 -1
  38. package/dist/docs/assets/chunks/{chunk-QZHKN3VN.D65-cs8I.js → chunk-QZHKN3VN.B2XjHzN_.js} +1 -1
  39. package/dist/docs/assets/chunks/{chunk-YZCP3GAM.qoXZpG9F.js → chunk-YZCP3GAM.CLYG8znk.js} +1 -1
  40. package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.Degh8l90.js +1 -0
  41. package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.Degh8l90.js +1 -0
  42. package/dist/docs/assets/chunks/clone.BIywbczV.js +1 -0
  43. package/dist/docs/assets/chunks/{cose-bilkent-S5V4N54A.8rYtqudO.js → cose-bilkent-S5V4N54A.DVEa6fZp.js} +1 -1
  44. package/dist/docs/assets/chunks/{dagre-KV5264BT.DrRP1fOh.js → dagre-KV5264BT.C9PZQK-S.js} +1 -1
  45. package/dist/docs/assets/chunks/{diagram-5BDNPKRD.DHj_xA2_.js → diagram-5BDNPKRD.DoN0uv3Y.js} +1 -1
  46. package/dist/docs/assets/chunks/{diagram-G4DWMVQ6.Bz_6nAKj.js → diagram-G4DWMVQ6.Czv3duqx.js} +1 -1
  47. package/dist/docs/assets/chunks/{diagram-MMDJMWI5.BWA0xSW9.js → diagram-MMDJMWI5.BinJ5kWb.js} +1 -1
  48. package/dist/docs/assets/chunks/{diagram-TYMM5635.CpTJLNJI.js → diagram-TYMM5635.DW326M4K.js} +1 -1
  49. package/dist/docs/assets/chunks/{erDiagram-SMLLAGMA.-7AWWSrP.js → erDiagram-SMLLAGMA.U2pR_OA7.js} +1 -1
  50. package/dist/docs/assets/chunks/{flowDiagram-DWJPFMVM.BTnQ742_.js → flowDiagram-DWJPFMVM.ByWJXeYK.js} +1 -1
  51. package/dist/docs/assets/chunks/framework.BNw1pucY.js +19 -0
  52. package/dist/docs/assets/chunks/{ganttDiagram-T4ZO3ILL.B5_HiiQ5.js → ganttDiagram-T4ZO3ILL.OquF0Rtg.js} +1 -1
  53. package/dist/docs/assets/chunks/{gitGraphDiagram-UUTBAWPF.CZcNTFZd.js → gitGraphDiagram-UUTBAWPF.Bpn01P7X.js} +1 -1
  54. package/dist/docs/assets/chunks/{graph.V2GLaab4.js → graph.CNRB6ETL.js} +1 -1
  55. package/dist/docs/assets/chunks/{infoDiagram-42DDH7IO.7pZOkCCU.js → infoDiagram-42DDH7IO.CqhknMWi.js} +1 -1
  56. package/dist/docs/assets/chunks/{ishikawaDiagram-UXIWVN3A.DSMo3Qa3.js → ishikawaDiagram-UXIWVN3A.C6xpR2af.js} +1 -1
  57. package/dist/docs/assets/chunks/{journeyDiagram-VCZTEJTY.BNEgWN1S.js → journeyDiagram-VCZTEJTY.Cg5f7oB3.js} +1 -1
  58. package/dist/docs/assets/chunks/{kanban-definition-6JOO6SKY.B-4d4tC7.js → kanban-definition-6JOO6SKY.Cx9YTwlU.js} +1 -1
  59. package/dist/docs/assets/chunks/{layout.Dvbn9nSb.js → layout.ljS-wFtK.js} +1 -1
  60. package/dist/docs/assets/chunks/{linear.D2GM4p4b.js → linear.jSxNrsFC.js} +1 -1
  61. package/dist/docs/assets/chunks/{min.DVBtLK-B.js → min.Cum8AlQw.js} +1 -1
  62. package/dist/docs/assets/chunks/{mindmap-definition-QFDTVHPH.CnJRI55x.js → mindmap-definition-QFDTVHPH.BLiysLpe.js} +1 -1
  63. package/dist/docs/assets/chunks/{pieDiagram-DEJITSTG.CtoaTFlA.js → pieDiagram-DEJITSTG.BoIDyuKF.js} +1 -1
  64. package/dist/docs/assets/chunks/{quadrantDiagram-34T5L4WZ.DtT24_vN.js → quadrantDiagram-34T5L4WZ.DLkpDytR.js} +1 -1
  65. package/dist/docs/assets/chunks/{requirementDiagram-MS252O5E.CjSO4o8f.js → requirementDiagram-MS252O5E.DqTVqSu2.js} +1 -1
  66. package/dist/docs/assets/chunks/{sankeyDiagram-XADWPNL6.-wWiIVWa.js → sankeyDiagram-XADWPNL6.CG_6FF7j.js} +1 -1
  67. package/dist/docs/assets/chunks/{sequenceDiagram-FGHM5R23.DSk8s4gX.js → sequenceDiagram-FGHM5R23.BIp9602K.js} +1 -1
  68. package/dist/docs/assets/chunks/{stateDiagram-FHFEXIEX.BFKAsdkN.js → stateDiagram-FHFEXIEX.COSXsD9I.js} +1 -1
  69. package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.qrxrbFsX.js +1 -0
  70. package/dist/docs/assets/chunks/{theme.C0MctGaz.js → theme.CXJ7PNwy.js} +2 -2
  71. package/dist/docs/assets/chunks/{timeline-definition-GMOUNBTQ.TUNJbAFe.js → timeline-definition-GMOUNBTQ.CXdVqkLq.js} +1 -1
  72. package/dist/docs/assets/chunks/{vennDiagram-DHZGUBPP.C-RGNnk4.js → vennDiagram-DHZGUBPP.CZxGuc4r.js} +1 -1
  73. package/dist/docs/assets/chunks/{wardley-RL74JXVD.g5efOWmT.js → wardley-RL74JXVD.3oVgfqQk.js} +1 -1
  74. package/dist/docs/assets/chunks/{wardleyDiagram-NUSXRM2D.DH4zt73Y.js → wardleyDiagram-NUSXRM2D.6_irCgGJ.js} +1 -1
  75. package/dist/docs/assets/chunks/{xychartDiagram-5P7HB3ND.B-3k6bF6.js → xychartDiagram-5P7HB3ND.TRPe92m3.js} +1 -1
  76. package/dist/docs/assets/deployment.md.D2jQZuFx.js +32 -0
  77. package/dist/docs/assets/deployment.md.D2jQZuFx.lean.js +1 -0
  78. package/dist/docs/assets/evals.md.D3Y3Aixt.js +72 -0
  79. package/dist/docs/assets/evals.md.D3Y3Aixt.lean.js +1 -0
  80. package/dist/docs/assets/guides_agent-to-agent.md.CD4T5FIl.js +41 -0
  81. package/dist/docs/assets/guides_agent-to-agent.md.CD4T5FIl.lean.js +1 -0
  82. package/dist/docs/assets/guides_bitbucket.md.mpevW-VP.js +145 -0
  83. package/dist/docs/assets/guides_bitbucket.md.mpevW-VP.lean.js +1 -0
  84. package/dist/docs/assets/guides_cloud-agents.md.Cp1O3u-X.js +15 -0
  85. package/dist/docs/assets/guides_cloud-agents.md.Cp1O3u-X.lean.js +1 -0
  86. package/dist/docs/assets/guides_convert-automation.md.CqEyfP6Y.js +43 -0
  87. package/dist/docs/assets/guides_convert-automation.md.CqEyfP6Y.lean.js +1 -0
  88. package/dist/docs/assets/guides_github.md.BwpBp3ed.js +156 -0
  89. package/dist/docs/assets/guides_github.md.BwpBp3ed.lean.js +1 -0
  90. package/dist/docs/assets/guides_gitlab.md.DaEC3nMk.js +153 -0
  91. package/dist/docs/assets/guides_gitlab.md.DaEC3nMk.lean.js +1 -0
  92. package/dist/docs/assets/guides_grokbot-agents.md.CMhZNdEU.js +16 -0
  93. package/dist/docs/assets/guides_grokbot-agents.md.CMhZNdEU.lean.js +1 -0
  94. package/dist/docs/assets/guides_improve.md.Bnp4F99w.js +22 -0
  95. package/dist/docs/assets/guides_improve.md.Bnp4F99w.lean.js +1 -0
  96. package/dist/docs/assets/guides_jev.md.F5fAkkfN.js +189 -0
  97. package/dist/docs/assets/guides_jev.md.F5fAkkfN.lean.js +1 -0
  98. package/dist/docs/assets/guides_mcp-oauth.md.bSFakfCY.js +50 -0
  99. package/dist/docs/assets/guides_mcp-oauth.md.bSFakfCY.lean.js +1 -0
  100. package/dist/docs/assets/guides_opentelemetry.md.BKDxQmmd.js +35 -0
  101. package/dist/docs/assets/guides_opentelemetry.md.BKDxQmmd.lean.js +1 -0
  102. package/dist/docs/assets/guides_slack.md.Bo96y42E.js +70 -0
  103. package/dist/docs/assets/guides_slack.md.Bo96y42E.lean.js +1 -0
  104. package/dist/docs/assets/guides_webhooks.md.1A72_VEE.js +92 -0
  105. package/dist/docs/assets/guides_webhooks.md.1A72_VEE.lean.js +1 -0
  106. package/dist/docs/assets/hillclimbing.md.D4E1o5Sa.js +7 -0
  107. package/dist/docs/assets/hillclimbing.md.D4E1o5Sa.lean.js +1 -0
  108. package/dist/docs/assets/{index.md.BFVyY2KT.js → index.md.C-t81M5J.js} +2 -2
  109. package/dist/docs/assets/{index.md.BFVyY2KT.lean.js → index.md.C-t81M5J.lean.js} +1 -1
  110. package/dist/docs/assets/{quickstart.md.D3MjSZN-.js → quickstart.md.DAvVhuuU.js} +1 -1
  111. package/dist/docs/assets/{quickstart.md.D3MjSZN-.lean.js → quickstart.md.DAvVhuuU.lean.js} +1 -1
  112. package/dist/docs/assets/{reference_agent-config.md.CfVA-LZJ.js → reference_agent-config.md.DGPyw7ms.js} +1 -1
  113. package/dist/docs/assets/{reference_agent-config.md.CfVA-LZJ.lean.js → reference_agent-config.md.DGPyw7ms.lean.js} +1 -1
  114. package/dist/docs/assets/{reference_artifacts.md.Vf7qyIZ-.js → reference_artifacts.md.Bu_4HmsD.js} +1 -1
  115. package/dist/docs/assets/{reference_artifacts.md.Vf7qyIZ-.lean.js → reference_artifacts.md.Bu_4HmsD.lean.js} +1 -1
  116. package/dist/docs/assets/{reference_channels.md.icqLKcTc.js → reference_channels.md.nFWbzAic.js} +1 -1
  117. package/dist/docs/assets/{reference_channels.md.icqLKcTc.lean.js → reference_channels.md.nFWbzAic.lean.js} +1 -1
  118. package/dist/docs/assets/{reference_cli.md.B2dBL6L8.js → reference_cli.md.DLWDz9ij.js} +3 -1
  119. package/dist/docs/assets/{reference_cli.md.B2dBL6L8.lean.js → reference_cli.md.DLWDz9ij.lean.js} +1 -1
  120. package/dist/docs/assets/{reference_connections.md.Cb3U_c8n.js → reference_connections.md.Je9dMsdd.js} +2 -2
  121. package/dist/docs/assets/{reference_connections.md.Cb3U_c8n.lean.js → reference_connections.md.Je9dMsdd.lean.js} +1 -1
  122. package/dist/docs/assets/reference_evals.md.DNJzM_yf.js +57 -0
  123. package/dist/docs/assets/reference_evals.md.DNJzM_yf.lean.js +1 -0
  124. package/dist/docs/assets/reference_extensions.md.Cv5aLCz_.js +58 -0
  125. package/dist/docs/assets/reference_extensions.md.Cv5aLCz_.lean.js +1 -0
  126. package/dist/docs/assets/{reference_hooks.md.CZuynAxj.js → reference_hooks.md.B7uzNENk.js} +2 -2
  127. package/dist/docs/assets/{reference_hooks.md.CZuynAxj.lean.js → reference_hooks.md.B7uzNENk.lean.js} +1 -1
  128. package/dist/docs/assets/{reference_http-api.md.DTKcYE6L.js → reference_http-api.md.CduHavZ2.js} +1 -1
  129. package/dist/docs/assets/{reference_http-api.md.DTKcYE6L.lean.js → reference_http-api.md.CduHavZ2.lean.js} +1 -1
  130. package/dist/docs/assets/{reference_instructions.md.D7gkckK-.js → reference_instructions.md.CU1My5My.js} +1 -1
  131. package/dist/docs/assets/{reference_instructions.md.D7gkckK-.lean.js → reference_instructions.md.CU1My5My.lean.js} +1 -1
  132. package/dist/docs/assets/{reference_playground.md.D2YExv5K.js → reference_playground.md.Ch2d0Iqi.js} +1 -1
  133. package/dist/docs/assets/{reference_playground.md.D2YExv5K.lean.js → reference_playground.md.Ch2d0Iqi.lean.js} +1 -1
  134. package/dist/docs/assets/{reference_project-layout.md.DPxbUJyt.js → reference_project-layout.md.BGhgpy9V.js} +1 -1
  135. package/dist/docs/assets/{reference_project-layout.md.DPxbUJyt.lean.js → reference_project-layout.md.BGhgpy9V.lean.js} +1 -1
  136. package/dist/docs/assets/{reference_prompt.md.BQ5uAv1F.js → reference_prompt.md.Ccp0R53H.js} +1 -1
  137. package/dist/docs/assets/{reference_prompt.md.BQ5uAv1F.lean.js → reference_prompt.md.Ccp0R53H.lean.js} +1 -1
  138. package/dist/docs/assets/{reference_schedules.md.BasfZWO-.js → reference_schedules.md.B2Nm6FaD.js} +1 -1
  139. package/dist/docs/assets/{reference_schedules.md.BasfZWO-.lean.js → reference_schedules.md.B2Nm6FaD.lean.js} +1 -1
  140. package/dist/docs/assets/{reference_sessions.md.YKvIsWAx.js → reference_sessions.md.1_6Vyv7x.js} +1 -1
  141. package/dist/docs/assets/{reference_sessions.md.YKvIsWAx.lean.js → reference_sessions.md.1_6Vyv7x.lean.js} +1 -1
  142. package/dist/docs/assets/{reference_skills.md.rNgpsGd0.js → reference_skills.md.DjQkRefx.js} +1 -1
  143. package/dist/docs/assets/{reference_skills.md.rNgpsGd0.lean.js → reference_skills.md.DjQkRefx.lean.js} +1 -1
  144. package/dist/docs/assets/{reference_subagents.md.e5qitjJt.js → reference_subagents.md.Dl16gcBj.js} +2 -2
  145. package/dist/docs/assets/{reference_subagents.md.e5qitjJt.lean.js → reference_subagents.md.Dl16gcBj.lean.js} +1 -1
  146. package/dist/docs/assets/{reference_tools.md.BdCO2aHZ.js → reference_tools.md.B1dH1lpa.js} +3 -3
  147. package/dist/docs/assets/{reference_tools.md.BdCO2aHZ.lean.js → reference_tools.md.B1dH1lpa.lean.js} +1 -1
  148. package/dist/docs/assets/{templates_agentic-owners.md.Da_AGDlH.js → templates_agentic-owners.md.9M575F5C.js} +1 -1
  149. package/dist/docs/assets/{templates_agentic-owners.md.Da_AGDlH.lean.js → templates_agentic-owners.md.9M575F5C.lean.js} +1 -1
  150. package/dist/docs/assets/{templates_pr-autofixer.md.DqxocIGh.js → templates_pr-autofixer.md.ws0DDXDy.js} +1 -1
  151. package/dist/docs/assets/{templates_pr-autofixer.md.DqxocIGh.lean.js → templates_pr-autofixer.md.ws0DDXDy.lean.js} +1 -1
  152. package/dist/docs/assets/{templates_security-reviewer.md.Bhnvd8VE.js → templates_security-reviewer.md.KEFYXzfK.js} +1 -1
  153. package/dist/docs/assets/{templates_security-reviewer.md.Bhnvd8VE.lean.js → templates_security-reviewer.md.KEFYXzfK.lean.js} +1 -1
  154. package/dist/docs/assets/templates_thermo-quality-review.md.VNJ_mohX.js +3 -0
  155. package/dist/docs/assets/templates_thermo-quality-review.md.VNJ_mohX.lean.js +1 -0
  156. package/dist/docs/assets/templates_thermo-review.md.Hi3zWOkP.js +3 -0
  157. package/dist/docs/assets/templates_thermo-review.md.Hi3zWOkP.lean.js +1 -0
  158. package/dist/docs/assets/{templates_triage.md.BdBWO9Ic.js → templates_triage.md.CVGe_FG6.js} +1 -1
  159. package/dist/docs/assets/{templates_triage.md.BdBWO9Ic.lean.js → templates_triage.md.CVGe_FG6.lean.js} +1 -1
  160. package/dist/docs/assets/troubleshooting.md.mnfFG2Em.js +1 -0
  161. package/dist/docs/assets/troubleshooting.md.mnfFG2Em.lean.js +1 -0
  162. package/dist/docs/building-with-agents.html +44 -48
  163. package/dist/docs/building-with-agents.md +94 -82
  164. package/dist/docs/deployment.html +59 -78
  165. package/dist/docs/deployment.md +117 -363
  166. package/dist/docs/evals.html +85 -224
  167. package/dist/docs/evals.md +149 -673
  168. package/dist/docs/guides/agent-to-agent.html +74 -47
  169. package/dist/docs/guides/agent-to-agent.md +128 -46
  170. package/dist/docs/guides/bitbucket.html +179 -44
  171. package/dist/docs/guides/bitbucket.md +249 -48
  172. package/dist/docs/guides/cloud-agents.html +46 -40
  173. package/dist/docs/guides/cloud-agents.md +119 -66
  174. package/dist/docs/guides/convert-automation.html +80 -49
  175. package/dist/docs/guides/convert-automation.md +156 -147
  176. package/dist/docs/guides/github.html +184 -92
  177. package/dist/docs/guides/github.md +260 -245
  178. package/dist/docs/guides/gitlab.html +184 -45
  179. package/dist/docs/guides/gitlab.md +249 -50
  180. package/dist/docs/guides/grokbot-agents.html +48 -41
  181. package/dist/docs/guides/grokbot-agents.md +99 -53
  182. package/dist/docs/guides/improve.html +48 -40
  183. package/dist/docs/guides/improve.md +111 -58
  184. package/dist/docs/guides/jev.html +248 -0
  185. package/dist/docs/guides/jev.md +348 -0
  186. package/dist/docs/guides/mcp-oauth.html +74 -52
  187. package/dist/docs/guides/mcp-oauth.md +111 -121
  188. package/dist/docs/guides/opentelemetry.html +63 -54
  189. package/dist/docs/guides/opentelemetry.md +96 -165
  190. package/dist/docs/guides/slack.html +83 -59
  191. package/dist/docs/guides/slack.md +157 -227
  192. package/dist/docs/guides/webhooks.html +97 -230
  193. package/dist/docs/guides/webhooks.md +154 -385
  194. package/dist/docs/hashmap.json +1 -1
  195. package/dist/docs/hillclimbing.html +44 -38
  196. package/dist/docs/hillclimbing.md +101 -55
  197. package/dist/docs/index.html +38 -38
  198. package/dist/docs/index.md +2 -0
  199. package/dist/docs/llms-full.txt +3490 -3146
  200. package/dist/docs/llms.txt +22 -18
  201. package/dist/docs/quickstart.html +37 -37
  202. package/dist/docs/reference/agent-config.html +37 -37
  203. package/dist/docs/reference/artifacts.html +38 -38
  204. package/dist/docs/reference/channels.html +37 -37
  205. package/dist/docs/reference/cli.html +39 -37
  206. package/dist/docs/reference/cli.md +2 -0
  207. package/dist/docs/reference/connections.html +38 -38
  208. package/dist/docs/reference/connections.md +1 -1
  209. package/dist/docs/reference/evals.html +116 -0
  210. package/dist/docs/reference/evals.md +293 -0
  211. package/dist/docs/reference/extensions.html +80 -84
  212. package/dist/docs/reference/extensions.md +131 -202
  213. package/dist/docs/reference/hooks.html +39 -39
  214. package/dist/docs/reference/hooks.md +34 -34
  215. package/dist/docs/reference/http-api.html +37 -37
  216. package/dist/docs/reference/instructions.html +37 -37
  217. package/dist/docs/reference/playground.html +37 -37
  218. package/dist/docs/reference/project-layout.html +37 -37
  219. package/dist/docs/reference/prompt.html +37 -37
  220. package/dist/docs/reference/schedules.html +37 -37
  221. package/dist/docs/reference/sessions.html +37 -37
  222. package/dist/docs/reference/skills.html +37 -37
  223. package/dist/docs/reference/subagents.html +38 -38
  224. package/dist/docs/reference/subagents.md +1 -1
  225. package/dist/docs/reference/tools.html +38 -38
  226. package/dist/docs/reference/tools.md +4 -0
  227. package/dist/docs/templates/agentic-owners.html +38 -38
  228. package/dist/docs/templates/pr-autofixer.html +37 -37
  229. package/dist/docs/templates/security-reviewer.html +38 -38
  230. package/dist/docs/templates/thermo-quality-review.html +62 -0
  231. package/dist/docs/templates/thermo-quality-review.md +75 -0
  232. package/dist/docs/templates/thermo-review.html +62 -0
  233. package/dist/docs/templates/thermo-review.md +74 -0
  234. package/dist/docs/templates/triage.html +37 -37
  235. package/dist/docs/troubleshooting.html +38 -38
  236. package/dist/docs/troubleshooting.md +97 -66
  237. package/dist/extensions/cursor-cloud-agents/skills/handoff.md +3 -7
  238. package/dist/extensions/improve/extension.d.ts +3 -1
  239. package/dist/extensions/improve/extension.d.ts.map +1 -1
  240. package/dist/extensions/improve/extension.js +4 -2
  241. package/dist/extensions/improve/skills/yourself.js +1 -1
  242. package/dist/extensions/jev/extension.d.ts +43 -0
  243. package/dist/extensions/jev/extension.d.ts.map +1 -0
  244. package/dist/extensions/jev/extension.js +47 -0
  245. package/dist/extensions/jev/lib/evaluate.d.ts +101 -0
  246. package/dist/extensions/jev/lib/evaluate.d.ts.map +1 -0
  247. package/dist/extensions/jev/lib/evaluate.js +167 -0
  248. package/dist/extensions/jev/skills/gated-write.md +25 -0
  249. package/dist/extensions/jev/skills/questions.md +33 -0
  250. package/dist/extensions/jev/tools/evaluate.d.ts +4 -0
  251. package/dist/extensions/jev/tools/evaluate.d.ts.map +1 -0
  252. package/dist/extensions/jev/tools/evaluate.js +88 -0
  253. package/dist/extensions.d.ts +1 -1
  254. package/dist/extensions.d.ts.map +1 -1
  255. package/dist/extensions.js +2 -0
  256. package/dist/filesystem.d.ts +46 -2
  257. package/dist/filesystem.d.ts.map +1 -1
  258. package/dist/filesystem.js +149 -102
  259. package/dist/index.d.ts +2 -2
  260. package/dist/index.d.ts.map +1 -1
  261. package/dist/index.js +1 -1
  262. package/dist/internal/advertise-tools.d.ts.map +1 -1
  263. package/dist/internal/advertise-tools.js +6 -0
  264. package/dist/internal/cli-ax.d.ts +6 -0
  265. package/dist/internal/cli-ax.d.ts.map +1 -1
  266. package/dist/internal/cli-ax.js +72 -14
  267. package/dist/internal/continuation-identity.d.ts.map +1 -1
  268. package/dist/internal/continuation-identity.js +1 -0
  269. package/dist/internal/cursor-agent-template.d.ts +1 -1
  270. package/dist/internal/cursor-agent-template.d.ts.map +1 -1
  271. package/dist/internal/cursor-agent-template.js +2 -0
  272. package/dist/internal/discovery/connections.d.ts.map +1 -1
  273. package/dist/internal/discovery/connections.js +18 -0
  274. package/dist/internal/discovery/extensions.d.ts.map +1 -1
  275. package/dist/internal/discovery/extensions.js +8 -4
  276. package/dist/internal/discovery/info.d.ts.map +1 -1
  277. package/dist/internal/discovery/info.js +1 -0
  278. package/dist/internal/filesystem/tools.d.ts.map +1 -1
  279. package/dist/internal/filesystem/tools.js +2 -2
  280. package/dist/internal/filesystem/walk.d.ts +7 -4
  281. package/dist/internal/filesystem/walk.d.ts.map +1 -1
  282. package/dist/internal/filesystem/walk.js +34 -11
  283. package/dist/internal/hosted-admission-adapter.d.ts +3 -0
  284. package/dist/internal/hosted-admission-adapter.d.ts.map +1 -1
  285. package/dist/internal/hosted-delivery-protocol.d.ts +20 -0
  286. package/dist/internal/hosted-delivery-protocol.d.ts.map +1 -1
  287. package/dist/internal/hosted-delivery-protocol.js +51 -1
  288. package/dist/internal/hosted-delivery.d.ts.map +1 -1
  289. package/dist/internal/hosted-delivery.js +23 -25
  290. package/dist/internal/hosted-execution-diag.d.ts +12 -4
  291. package/dist/internal/hosted-execution-diag.d.ts.map +1 -1
  292. package/dist/internal/hosted-execution-diag.js +26 -4
  293. package/dist/internal/hosted-execution-flush.d.ts +1 -0
  294. package/dist/internal/hosted-execution-flush.d.ts.map +1 -1
  295. package/dist/internal/hosted-execution-flush.js +4 -2
  296. package/dist/internal/init-project.d.ts.map +1 -1
  297. package/dist/internal/init-project.js +4 -0
  298. package/dist/internal/server.d.ts.map +1 -1
  299. package/dist/internal/server.js +111 -48
  300. package/dist/internal/session-engine.d.ts +4 -1
  301. package/dist/internal/session-engine.d.ts.map +1 -1
  302. package/dist/internal/session-engine.js +39 -9
  303. package/dist/internal/skill-catalog.d.ts +28 -0
  304. package/dist/internal/skill-catalog.d.ts.map +1 -0
  305. package/dist/internal/skill-catalog.js +44 -0
  306. package/dist/playground/assets/index-DSMAewbx.css +1 -0
  307. package/dist/playground/assets/index-De_lpFxE.js +67 -0
  308. package/dist/playground/index.html +2 -2
  309. package/dist/types.d.ts +32 -3
  310. package/dist/types.d.ts.map +1 -1
  311. package/docs/README.md +2 -0
  312. package/docs/building-with-agents.md +96 -84
  313. package/docs/deployment.md +118 -364
  314. package/docs/evals.md +149 -673
  315. package/docs/guides/agent-to-agent.md +130 -48
  316. package/docs/guides/bitbucket.md +250 -49
  317. package/docs/guides/cloud-agents.md +119 -67
  318. package/docs/guides/convert-automation.md +157 -148
  319. package/docs/guides/github.md +261 -246
  320. package/docs/guides/gitlab.md +250 -51
  321. package/docs/guides/grokbot-agents.md +100 -55
  322. package/docs/guides/improve.md +112 -59
  323. package/docs/guides/jev.md +353 -0
  324. package/docs/guides/mcp-oauth.md +112 -122
  325. package/docs/guides/opentelemetry.md +97 -166
  326. package/docs/guides/slack.md +158 -228
  327. package/docs/guides/webhooks.md +155 -386
  328. package/docs/hillclimbing.md +102 -56
  329. package/docs/reference/cli.md +2 -0
  330. package/docs/reference/connections.md +1 -1
  331. package/docs/reference/evals.md +298 -0
  332. package/docs/reference/extensions.md +132 -203
  333. package/docs/reference/hooks.md +34 -34
  334. package/docs/reference/subagents.md +1 -1
  335. package/docs/reference/tools.md +4 -0
  336. package/docs/templates/thermo-quality-review.md +80 -0
  337. package/docs/templates/thermo-review.md +79 -0
  338. package/docs/troubleshooting.md +98 -67
  339. package/package.json +8 -1
  340. package/skills/github/SKILL.md +21 -13
  341. package/src/bin/agent-serve.ts +24 -3
  342. package/src/channels/checks.ts +8 -0
  343. package/src/channels/github/github-channel.ts +29 -19
  344. package/src/channels/origin/checks.ts +3 -1
  345. package/src/channels/slack/agentic-delivery.ts +2 -0
  346. package/src/channels/slack/dispatch.ts +131 -4
  347. package/src/channels/slack/placeholder.ts +51 -0
  348. package/src/channels/slack/slack-channel.ts +9 -2
  349. package/src/extensions/cursor-cloud-agents/skills/handoff.md +3 -7
  350. package/src/extensions/improve/extension.ts +4 -2
  351. package/src/extensions/improve/skills/yourself.ts +1 -1
  352. package/src/extensions/jev/extension.ts +95 -0
  353. package/src/extensions/jev/lib/evaluate.ts +289 -0
  354. package/src/extensions/jev/skills/gated-write.md +25 -0
  355. package/src/extensions/jev/skills/questions.md +33 -0
  356. package/src/extensions/jev/tools/evaluate.ts +90 -0
  357. package/src/extensions.ts +2 -0
  358. package/src/filesystem.ts +168 -65
  359. package/src/index.ts +3 -0
  360. package/src/internal/advertise-tools.ts +6 -0
  361. package/src/internal/cli-ax.ts +88 -15
  362. package/src/internal/continuation-identity.ts +1 -0
  363. package/src/internal/cursor-agent-template.ts +2 -0
  364. package/src/internal/discovery/connections.ts +21 -0
  365. package/src/internal/discovery/extensions.ts +12 -4
  366. package/src/internal/discovery/info.ts +1 -0
  367. package/src/internal/filesystem/tools.ts +2 -0
  368. package/src/internal/filesystem/walk.ts +60 -15
  369. package/src/internal/hosted-admission-adapter.ts +3 -0
  370. package/src/internal/hosted-delivery-protocol.ts +82 -1
  371. package/src/internal/hosted-delivery.ts +23 -0
  372. package/src/internal/hosted-execution-diag.ts +33 -4
  373. package/src/internal/hosted-execution-flush.ts +4 -0
  374. package/src/internal/init-project.ts +4 -0
  375. package/src/internal/server.ts +130 -53
  376. package/src/internal/session-engine.ts +46 -8
  377. package/src/internal/skill-catalog.ts +69 -0
  378. package/src/types.ts +33 -3
  379. package/templates/thermo-quality-review/README.md +35 -0
  380. package/templates/thermo-quality-review/agent/agent.ts +8 -0
  381. package/templates/thermo-quality-review/agent/channels/github.ts +42 -0
  382. package/templates/thermo-quality-review/agent/instructions.md +43 -0
  383. package/templates/thermo-quality-review/agent/tools/post_findings.ts +70 -0
  384. package/templates/thermo-quality-review/evals/evals.config.ts +5 -0
  385. package/templates/thermo-quality-review/evals/review.eval.ts +62 -0
  386. package/templates/thermo-quality-review/package.json +18 -0
  387. package/templates/thermo-quality-review/tsconfig.json +12 -0
  388. package/templates/thermo-review/README.md +35 -0
  389. package/templates/thermo-review/agent/agent.ts +8 -0
  390. package/templates/thermo-review/agent/channels/github.ts +42 -0
  391. package/templates/thermo-review/agent/instructions.md +40 -0
  392. package/templates/thermo-review/agent/tools/post_findings.ts +70 -0
  393. package/templates/thermo-review/evals/evals.config.ts +5 -0
  394. package/templates/thermo-review/evals/review.eval.ts +53 -0
  395. package/templates/thermo-review/package.json +18 -0
  396. package/templates/thermo-review/tsconfig.json +12 -0
  397. package/dist/docs/assets/building-with-agents.md.CEGVXkmO.js +0 -13
  398. package/dist/docs/assets/building-with-agents.md.CEGVXkmO.lean.js +0 -1
  399. package/dist/docs/assets/chunks/@localSearchIndexroot.DtXk1hy-.js +0 -1
  400. package/dist/docs/assets/chunks/channel.Bkv1N-gK.js +0 -1
  401. package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.CZDco1o8.js +0 -1
  402. package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.CZDco1o8.js +0 -1
  403. package/dist/docs/assets/chunks/clone.YSt_40_s.js +0 -1
  404. package/dist/docs/assets/chunks/framework.dypDpWZ3.js +0 -19
  405. package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.C4CLm481.js +0 -1
  406. package/dist/docs/assets/deployment.md.Dm4Qo3hp.js +0 -51
  407. package/dist/docs/assets/deployment.md.Dm4Qo3hp.lean.js +0 -1
  408. package/dist/docs/assets/evals.md.BLDRt5LH.js +0 -211
  409. package/dist/docs/assets/evals.md.BLDRt5LH.lean.js +0 -1
  410. package/dist/docs/assets/guides_agent-to-agent.md.BI0xclmy.js +0 -14
  411. package/dist/docs/assets/guides_agent-to-agent.md.BI0xclmy.lean.js +0 -1
  412. package/dist/docs/assets/guides_bitbucket.md.CTpCl__f.js +0 -10
  413. package/dist/docs/assets/guides_bitbucket.md.CTpCl__f.lean.js +0 -1
  414. package/dist/docs/assets/guides_cloud-agents.md.lSE_l7lH.js +0 -9
  415. package/dist/docs/assets/guides_cloud-agents.md.lSE_l7lH.lean.js +0 -1
  416. package/dist/docs/assets/guides_convert-automation.md.Ck6Cr68A.js +0 -12
  417. package/dist/docs/assets/guides_convert-automation.md.Ck6Cr68A.lean.js +0 -1
  418. package/dist/docs/assets/guides_github.md.D6ER29dG.js +0 -64
  419. package/dist/docs/assets/guides_github.md.D6ER29dG.lean.js +0 -1
  420. package/dist/docs/assets/guides_gitlab.md.P-TjBnS5.js +0 -14
  421. package/dist/docs/assets/guides_gitlab.md.P-TjBnS5.lean.js +0 -1
  422. package/dist/docs/assets/guides_grokbot-agents.md.WBZIOvkz.js +0 -9
  423. package/dist/docs/assets/guides_grokbot-agents.md.WBZIOvkz.lean.js +0 -1
  424. package/dist/docs/assets/guides_improve.md.BKaDuKKK.js +0 -14
  425. package/dist/docs/assets/guides_improve.md.BKaDuKKK.lean.js +0 -1
  426. package/dist/docs/assets/guides_mcp-oauth.md.DMNMpXtO.js +0 -28
  427. package/dist/docs/assets/guides_mcp-oauth.md.DMNMpXtO.lean.js +0 -1
  428. package/dist/docs/assets/guides_opentelemetry.md._CRfDyzH.js +0 -26
  429. package/dist/docs/assets/guides_opentelemetry.md._CRfDyzH.lean.js +0 -1
  430. package/dist/docs/assets/guides_slack.md.DdT8rmsj.js +0 -46
  431. package/dist/docs/assets/guides_slack.md.DdT8rmsj.lean.js +0 -1
  432. package/dist/docs/assets/guides_webhooks.md.aQW10HRe.js +0 -225
  433. package/dist/docs/assets/guides_webhooks.md.aQW10HRe.lean.js +0 -1
  434. package/dist/docs/assets/hillclimbing.md.Dq4kkVIL.js +0 -1
  435. package/dist/docs/assets/hillclimbing.md.Dq4kkVIL.lean.js +0 -1
  436. package/dist/docs/assets/reference_extensions.md.wlFD3cUR.js +0 -62
  437. package/dist/docs/assets/reference_extensions.md.wlFD3cUR.lean.js +0 -1
  438. package/dist/docs/assets/troubleshooting.md.BcgNoYtJ.js +0 -1
  439. package/dist/docs/assets/troubleshooting.md.BcgNoYtJ.lean.js +0 -1
  440. package/dist/playground/assets/index-BLlKgZtI.css +0 -1
  441. package/dist/playground/assets/index-CDS5p9sR.js +0 -67
@@ -1,325 +1,255 @@
1
1
  ---
2
2
  title: "Slack"
3
- description: "Run a Socket Mode Slack bot from the dashboard wizard, or import an app you own."
3
+ description: "Wake your agent from mentions, DMs, and watched posts, then reply in the thread."
4
4
  ---
5
5
 
6
6
  # Slack agents
7
7
 
8
- The Slack channel is a Socket Mode bot. The app connects out, so you
9
- don't need a public Request URL. Mentions and DMs start a thread.
10
- Replies land in that thread. You choose the status chip, a live
11
- stream, or agent-owned posts.
8
+ A Slack agent wakes when someone mentions it, sends it a DM, or posts
9
+ in a channel it watches. From there, it keeps the conversation in one
10
+ thread and can reply all at once, stream the answer live, or decide for
11
+ itself when to post updates.
12
12
 
13
- Use `agent-sdk slack create` when Cursor should own the Slack app. Use
14
- `agent-sdk slack init --manual` when you own it. Commands and flags live
15
- in the [CLI reference](../reference/cli.md#slack). Coding agents should
16
- follow [`skills/setup-slack/SKILL.md`](../../skills/setup-slack/SKILL.md).
13
+ Run `agent-sdk slack create --dir .`, then `agent-sdk slack doctor`.
17
14
 
18
- ## Define the channel
15
+ ## Answer a mention or DM
19
16
 
20
- Author `agent/channels/slack.ts` with `slackChannel()` from
21
- `@cursor/july/channels/slack`:
17
+ Mention the bot in a channel or send it a DM, and it will answer in a
18
+ thread on that message. Any follow-up in the same thread continues the
19
+ conversation where it left off.
22
20
 
23
21
  ```ts
22
+ // agent/channels/slack.ts
24
23
  import { slackChannel } from "@cursor/july/channels/slack";
25
24
 
26
- export default slackChannel();
27
- ```
28
-
29
- `slackChannel()` reads `SLACK_BOT_TOKEN` and `SLACK_APP_TOKEN`. Pass
30
- `envPrefix: "WEATHER_AGENT"` to read `WEATHER_AGENT_SLACK_BOT_TOKEN`
31
- and `WEATHER_AGENT_SLACK_APP_TOKEN` instead. Use a prefix when one
32
- host serves several Slack bots.
33
-
34
- A thread is one conversation. The bot answers mentions and DMs. It
35
- refuses Slack Connect users, guests, and people from other workspaces.
36
- Missing tokens leave this channel idle. The rest of `serve` still
37
- starts.
38
-
39
- ## Control who can message the agent
40
-
41
- External senders are blocked. Set `blockExternals: false` only when
42
- people outside your org should reach the agent:
43
-
44
- ```ts
45
25
  export default slackChannel({
46
- policy: { blockExternals: false },
47
- });
48
- ```
49
-
50
- Anyone in the thread can continue it. Restrict follow-ups to the person
51
- who started the session with `respondTo: "author"`:
52
-
53
- ```ts
54
- export default slackChannel({
55
- policy: { respondTo: "author" },
26
+ // TRIAGE_SLACK_BOT_TOKEN and TRIAGE_SLACK_APP_TOKEN
27
+ envPrefix: "TRIAGE",
56
28
  });
57
29
  ```
58
30
 
59
- ## Choose how the reply arrives
60
-
61
- Slack gives an agent two places to show progress while a turn runs: the
62
- status chip under the thread ("Running grep…") and the reply message
63
- itself. It won't fill both at once. While a message is streaming, Slack
64
- shows its own "is working…" chip and hides any status text you set. Cards
65
- only exist inside a streamed message. `reply.mode` picks the path.
66
-
67
- ### `post` (default): status chip, then one message
31
+ ## Post one reply with a status chip
68
32
 
69
- Tool calls and the first line of each reasoning block show in the chip as
70
- they happen. The answer lands as a single message when the turn finishes.
33
+ By default, Slack shows a status chip beneath the thread while the turn
34
+ runs, cycling through idle messages until reasoning or tool activity
35
+ gives it something more specific to show. When the turn finishes, the
36
+ chip disappears and one complete reply lands in the thread.
71
37
 
72
38
  ```ts
73
39
  export default slackChannel({
74
40
  reply: {
75
41
  mode: "post",
76
42
  status: {
43
+ // First line of each reasoning block on the chip.
77
44
  reasoning: true,
45
+ // Tool names as they start ("Running grep, glob...").
78
46
  tools: true,
79
- idle: ["Checking the monorepo", "Poking Datadog"],
47
+ idle: ["Checking the monorepo...", "Poking Datadog..."],
80
48
  },
81
49
  },
82
50
  });
83
51
  ```
84
52
 
85
- `idle` is the rotation Slack cycles through when nothing more specific is
86
- known, up to 5 lines of 50 characters. Pass a function to `tools` to write
87
- your own line from the calls in flight.
53
+ ## Stream a live reply
88
54
 
89
- ### `stream`: live text, with cards
90
-
91
- The answer streams into one message as the model writes it. Slack owns the
92
- chip for the duration, so live feedback inside the message comes from
93
- cards. Both are off unless you turn them on.
55
+ In stream mode, the reply appears immediately and grows as the model
56
+ writes. Slack shows its generic "is working..." state until the stream
57
+ ends, while optional reasoning and tool cards keep progress inside the
58
+ same message.
94
59
 
95
60
  ```ts
96
61
  export default slackChannel({
97
62
  reply: {
98
63
  mode: "stream",
64
+ // Thinking card inside the streamed message.
99
65
  reasoningCard: true,
100
- toolCards: { group: "per-tool" },
66
+ // One card per tool in that same message.
67
+ toolCards: true,
101
68
  },
102
- toolLabels: { grep: "Searching code", read: "Reading files" },
103
69
  });
104
70
  ```
105
71
 
106
- The reasoning card is one task card, titled "Thinking", that receives the
107
- model's reasoning as it streams and completes when the answer text starts.
108
- `maxChars` (default 1500) caps how much it collects. Slack caps a streamed
109
- message near 12k characters including cards; when an answer outgrows that,
110
- the streamed message closes where it stands and the rest continues in a
111
- new message.
112
-
113
- Tool cards default to one card per tool name with a call count in the title
114
- (`grep ×3`), updated in place as calls finish. `group: "per-call"` shows one
115
- card per call instead.
116
-
117
- Cards are collapsible by default: each call adds one line under the title,
118
- the same summary the playground shows in a tool's header (the grep pattern,
119
- the file path, the shell command), and the group expands the same way the
120
- reasoning card does. `collapsible: false` keeps cards to their titles. On a
121
- collapsible card, `details(call)` returns the line to add when a call starts
122
- and `output(result)` the text to add when it finishes.
123
-
124
- `toolLabels` renames tools everywhere they appear: the chip, card titles,
125
- and the default `Running …` line.
126
-
127
- ### `agentic`: the agent posts
128
-
129
- Opt in when the agent should own every message in the thread. Mentions
130
- and DMs still start turns. The channel does not write the status chip,
131
- tool cards, reasoning cards, or assistant text. Approval cards
132
- still post if you set `toolApprovals`.
133
-
134
- Mount `@cursor/july/extensions/slack-communication` so the agent can
135
- talk. The extension adds typed tools and the `slack-voice` skill. The
136
- channel watches those tool names (bare or `<namespace>__<name>`) and
137
- calls Slack through the channel client after a successful result. A
138
- rejected call, a dry-run stub, or a turn that never calls
139
- `post-update` stays silent. The framework does not also finalize
140
- assistant text.
72
+ ## Let the agent own every message
73
+
74
+ Use agentic mode when the agent should decide how to communicate, not
75
+ only what to say. The bot reacts to the parent message with eyes and
76
+ shows a thinking chip, then the agent chooses when to post progress and
77
+ how to deliver the final reply.
78
+
79
+ `slack-communication` gives those posts a Slack-aware voice by default:
80
+ lead with the result, share progress when the picture changes, and keep
81
+ tool chatter off the thread. Use `tone` for the rest of the
82
+ communication contract, including voice, level of detail, formatting,
83
+ and how updates should be structured.
141
84
 
142
85
  ```ts
143
86
  // agent/extensions/slack.ts
144
87
  import slackCommunication from "@cursor/july/extensions/slack-communication";
145
88
 
146
- export default slackCommunication();
89
+ export default slackCommunication({
90
+ tone:
91
+ "Be concise but warm. Use bullets for evidence and end with the next action.",
92
+ });
147
93
  ```
148
94
 
149
95
  ```ts
150
- // agent/channels/slack.ts
151
96
  export default slackChannel({
97
+ // `post-update` writes mid-turn progress and the final reply.
152
98
  reply: { mode: "agentic" },
153
99
  });
154
100
  ```
155
101
 
156
- | Tool | What it writes | Scope |
157
- | --- | --- | --- |
158
- | `post-update` | Mid-turn progress and the final reply (`chat.postMessage` / `chat.update`) | `chat:write` |
159
- | `post-card` | Collapsible task card (`chat.startStream` / `chat.appendStream`) | `chat:write` |
160
- | `post-file` | Workspace file on the reply (`files.getUploadURLExternal`) | `files:write` |
161
- | `react` | Emoji on a message `ts` (`reactions.add`). Omit `ts` for the thread root. | `reactions:write` |
162
- | `set-status` | Subtitle chip (`assistant.threads.setStatus`). Empty string clears it. | `assistant:write` |
163
-
164
- `agent-sdk slack create` already grants those scopes. Do not add a
165
- freeform Slack method tool.
102
+ ## Wake on a channel post
166
103
 
167
- Pass `tone` to add agent-specific voice without forking the tools:
104
+ This example watches `#triage-alerts`, so any substantial top-level
105
+ message starts a thread even when nobody mentions the bot. The length
106
+ guard filters out short posts before they can start a turn.
168
107
 
169
108
  ```ts
170
- export default slackCommunication({
171
- tone: "Lead with the merge decision. Name the risk next.",
109
+ export default slackChannel({
110
+ engagement: {
111
+ channelPosts: {
112
+ allow: ["#triage-alerts"],
113
+ posts: "top-level",
114
+ debounceMs: 15_000,
115
+ },
116
+ },
117
+ onChannelPost: async (_ctx, message) => {
118
+ if (message.markdown.length <= 20) {
119
+ return null;
120
+ }
121
+ // `{}` starts a model turn as the sender.
122
+ return {};
123
+ },
172
124
  });
173
125
  ```
174
126
 
175
- ### Migrating from `streaming` and `thinkingSteps`
127
+ When you create the app, pass `--channel-posts` and invite the bot to
128
+ every channel in the allowlist.
176
129
 
177
- `streaming: false` is `reply: { mode: "post" }`. `streaming: true` is
178
- `reply: { mode: "stream", toolCards: { group: "per-call", collapsible:
179
- false } }`, the title-only cards it used to show. `loadingMessages` moves
180
- to `reply.status.idle`. The old options still work and `agent-sdk validate`
181
- prints the rewrite for each one.
130
+ ## Control who can message
182
131
 
183
- A channel that set none of these used to stream. It now posts. Set
184
- `reply: { mode: "stream" }` to keep streaming.
132
+ By default, people outside your workspace get no reply. This matters
133
+ most in Slack Connect channels, where external collaborators share the
134
+ channel and can mention or reply to bots installed by your
135
+ organization. Keeping `blockExternals` on prevents them from starting
136
+ or steering an agent session and, through it, directing any tools
137
+ available to the agent.
185
138
 
186
- ## Set it up
139
+ Set `blockExternals: false` only when external collaborators are
140
+ intended users of the agent.
187
141
 
188
- `slack create` opens the Cursor dashboard wizard. Finish Slack consent
189
- and the bot name there. The CLI writes tokens to `.env.local` and never
190
- prints them. Skip the wizard if those tokens are already set, unless
191
- you want a Cursor-managed app.
192
-
193
- ### Provision with the CLI
194
-
195
- ```bash
196
- agent-sdk slack create --dir .
197
- agent-sdk slack create --dir . --prod
142
+ ```ts
143
+ export default slackChannel({
144
+ // Let external collaborators start and continue agent sessions.
145
+ policy: { blockExternals: false },
146
+ });
198
147
  ```
199
148
 
200
- Sign in first (`agent-sdk login` or `CURSOR_API_KEY`). A team
201
- service-account key cannot create Slack apps. Finish **Add
202
- Slack to this agent** as the same Cursor account. Then run
203
- `agent-sdk slack doctor --prefix MY_AGENT` and serve:
149
+ Anyone in a thread can continue its session by default. If the
150
+ conversation should stay between the agent and its original author,
151
+ set `respondTo: "author"`.
204
152
 
205
- ```bash
206
- agent-sdk serve --dir . --dev
153
+ ```ts
154
+ export default slackChannel({
155
+ policy: { respondTo: "author" },
156
+ });
207
157
  ```
208
158
 
209
- Invite the bot and mention it, or DM it. Expect a Thinking status,
210
- then a threaded streaming reply.
159
+ ## Events
211
160
 
212
- If Slack needs a workspace admin, keep the CLI running. Open the
213
- **Request approval** link it prints. After an admin approves, click
214
- **Retry** in the wizard.
161
+ Mentions and DMs wake the agent automatically, while `onChannelPost`
162
+ runs for messages in watched channels. Declare `onAppMention` or
163
+ `onDirectMessage` when you need to filter those default wakes; each
164
+ handler returns `{}` to start a turn or `null` to skip it.
215
165
 
216
- `slack destroy` deletes the Cursor-managed app. `slack icon` updates
217
- its icon. A second `slack create` for the same agent and environment
218
- replaces that app's manifest and tokens.
166
+ For example, this handler only starts a turn for DMs prefixed with
167
+ `triage:`:
219
168
 
220
- ### Provision from the dashboard
169
+ ```ts
170
+ onDirectMessage: async (_ctx, message) => {
171
+ if (!message.markdown.startsWith("triage:")) {
172
+ return null;
173
+ }
174
+ // `{}` starts a model turn as the sender.
175
+ return {};
176
+ },
177
+ ```
221
178
 
222
- The same wizard is on [Deployed Agents](https://cursor.com/dashboard).
223
- Open **Integrations** and click **Add Slack to this agent**.
179
+ ## Thread affinity
224
180
 
225
- Local `agent-sdk serve` reads `.env.local`. The next deploy injects the
226
- stored secrets.
181
+ A Slack thread maps to one agent session, so every follow-up in that
182
+ thread resumes the same conversation.
227
183
 
228
- If Slack needs admin approval, click **Request approval**, then
229
- **Retry** after an admin approves.
184
+ ## Call Slack from deterministic code via `ctx`
230
185
 
231
- The app row's menu covers rename, icon, token rotation, removal, and
232
- workspace disconnect.
186
+ Channel hooks can post before starting the model turn, which is useful
187
+ for deterministic acknowledgements such as `Looking at this now.` The
188
+ same bot credential also lets tools call Slack later in the turn:
233
189
 
234
- ### Create your own Slack app
190
+ - Channel hooks: `ctx.thread.post()`, `ctx.slack.channelId`,
191
+ `ctx.slack.threadTs`
235
192
 
236
- `slack init --manual` is for an app you own. It writes the channel file
237
- and Slack manifests. When Slack CLI (`~/.slack/bin/slack`) is logged
238
- in, it installs the app. When it isn't, install the app yourself.
193
+ - Tools: `ctx.host.slack.getClient()`
239
194
 
240
- ```bash
241
- agent-sdk slack init --manual --dir . --name "My Agent"
195
+ ```ts
196
+ onAppMention: async (ctx, message) => {
197
+ if (message.markdown.trim() === "") {
198
+ return null;
199
+ }
200
+ await ctx.thread.post("Looking at this now.");
201
+ return {};
202
+ },
242
203
  ```
243
204
 
244
- Install Slack CLI if you need it:
205
+ Use the IDs on the hook `ctx` when handling an event, and
206
+ `ctx.host.slack.getClient()` when a tool needs the Slack Web API.
207
+
208
+ ## Connect
245
209
 
246
210
  ```bash
247
- curl -fsSL https://downloads.slack-edge.com/slack-cli/install.sh | bash
211
+ agent-sdk login
212
+ agent-sdk slack create --dir .
213
+ agent-sdk slack doctor --prefix TRIAGE
248
214
  ```
249
215
 
250
- Log in with `slack login --no-prompt`. In Slack, send
251
- `/slackauthticket <ticket>`, then
252
- `slack login --ticket <ticket> --challenge <code>`. Install the
253
- workspace app with `slack app install`. Create a separate production
254
- app the same way.
255
-
256
- Or paste `.slack/manifest.dev.json` at
257
- [api.slack.com/apps](https://api.slack.com/apps) (**Create New App** →
258
- **From a manifest**). Repeat with `.slack/manifest.prod.json`. Dev and
259
- prod are separate Slack apps.
216
+ After you sign in, `slack create` opens **Add Slack to this agent** in
217
+ the browser and writes the resulting tokens to `.env.local` without
218
+ printing them. You can open the same wizard from **Integrations** on
219
+ [Deployed Agents](https://cursor.com/dashboard).
260
220
 
261
- Then put a bot token (`xoxb-...`) and an app-level token with
262
- `connections:write` (`xapp-...`) in `.env.local`. Use the names
263
- `slack init --manual` printed. Run `slack doctor` and serve as above.
221
+ If you already own the Slack app, initialize it with
222
+ `agent-sdk slack init --manual --dir . --name "Triage"` and follow the
223
+ [Slack setup skill](../../skills/setup-slack/SKILL.md) for installation
224
+ and tokens.
264
225
 
265
- Serve this app with Agent SDK. Do not run `slack deploy`.
226
+ ## Test locally
266
227
 
267
- ## Choose when the agent engages
228
+ Run `doctor` first to catch missing credentials, then start the agent
229
+ and send it the same mention or DM a teammate would.
268
230
 
269
- Mentions and DMs are on. Watching channel posts without a mention is
270
- opt-in:
271
-
272
- ```ts
273
- export default slackChannel({
274
- envPrefix: "TRIAGE",
275
- engagement: {
276
- channelPosts: {
277
- allow: ["#triage-alerts"],
278
- posts: "top-level",
279
- debounceMs: 15_000,
280
- },
281
- },
282
- onChannelPost: async (_ctx, message) => {
283
- return message.markdown.length > 20 ? {} : null;
284
- },
285
- });
231
+ ```bash
232
+ agent-sdk slack doctor --prefix TRIAGE
233
+ agent-sdk serve --dir . --dev
286
234
  ```
287
235
 
288
- Pass `--channel-posts` on `slack create` or `slack init --manual` so
289
- the Slack app receives those events. The bot must be in each watched
290
- channel. `allow: ["*"]` watches every joined channel.
291
-
292
- Set `includeBotPosts: true` for alert feeds and other bots. This app
293
- never wakes on its own posts.
294
-
295
- ## Prepare work on the host
296
-
297
- Mention and DM handlers may return a prepared `message`,
298
- `workspaceFiles`, or `cloud` block. Use the same host-prep pattern as
299
- [custom channels](./webhooks.md#prepare-on-the-host-then-hand-off).
300
-
301
- Slack file uploads attach automatically. Images become vision input.
302
- Supported documents become workspace files for the turn.
236
+ ## Practices
303
237
 
304
- ## Add approval buttons
238
+ - If the tokens are missing, the Slack channel stays idle while the
239
+ rest of `serve` starts normally.
305
240
 
306
- Tools with `needsApproval` park until a person decides. Post those
307
- decisions in Slack with one flag:
308
-
309
- ```ts
310
- export default slackChannel({
311
- toolApprovals: true,
312
- });
313
- ```
241
+ - Keep `channelPosts.allow` narrow because each qualifying post can
242
+ start a model turn.
314
243
 
315
- The Slack app needs interactivity. Recreate it with `slack create` if
316
- clicks do nothing. Cards show redacted, truncated arguments. Execution
317
- still uses the full input, so review sensitive tools in the playground
318
- when the card may hide fields. The lifecycle is in
319
- [Gate a tool on human approval](../reference/tools.md#gate-a-tool-on-human-approval).
244
+ - Set `envPrefix` when two Slack bots share a host so the token names
245
+ do not collide.
320
246
 
321
- ## Run several agents on one host
247
+ ## Related
322
248
 
323
- Give each agent its own Slack app and token pair. Set `envPrefix` so
324
- the names don't collide (`WEATHER_AGENT_SLACK_*`, `TRIAGE_SLACK_*`).
325
- Agents without tokens stay idle. The others still serve.
249
+ - [CLI reference](../reference/cli.md#slack): `slack create`,
250
+ `doctor`, `init --manual`
251
+ - [`skills/setup-slack/SKILL.md`](../../skills/setup-slack/SKILL.md):
252
+ the companion skill for coding agents
253
+ - [Webhooks and custom channels](./webhooks.md): host prep on mention
254
+ and DM handlers
255
+ - [Evals](../evals.md): freeze a mention as a regression check