@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,320 +1,250 @@
1
1
  # Slack agents
2
2
 
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 land in that thread. You choose the status chip, a live
6
- stream, or agent-owned posts.
3
+ A Slack agent wakes when someone mentions it, sends it a DM, or posts
4
+ in a channel it watches. From there, it keeps the conversation in one
5
+ thread and can reply all at once, stream the answer live, or decide for
6
+ itself when to post updates.
7
7
 
8
- Use `agent-sdk slack create` when Cursor should own the Slack app. Use
9
- `agent-sdk slack init --manual` when you own it. Commands and flags live
10
- in the [CLI reference](/docs/reference/cli.md#slack). Coding agents should
11
- follow [`skills/setup-slack/SKILL.md`](https://github.com/cursor/cursor/blob/main/packages/agent-serve/skills/setup-slack/SKILL.md).
8
+ Run `agent-sdk slack create --dir .`, then `agent-sdk slack doctor`.
12
9
 
13
- ## Define the channel
10
+ ## Answer a mention or DM
14
11
 
15
- Author `agent/channels/slack.ts` with `slackChannel()` from
16
- `@cursor/july/channels/slack`:
12
+ Mention the bot in a channel or send it a DM, and it will answer in a
13
+ thread on that message. Any follow-up in the same thread continues the
14
+ conversation where it left off.
17
15
 
18
16
  ```ts
17
+ // agent/channels/slack.ts
19
18
  import { slackChannel } from "@cursor/july/channels/slack";
20
19
 
21
- export default slackChannel();
22
- ```
23
-
24
- `slackChannel()` reads `SLACK_BOT_TOKEN` and `SLACK_APP_TOKEN`. Pass
25
- `envPrefix: "WEATHER_AGENT"` to read `WEATHER_AGENT_SLACK_BOT_TOKEN`
26
- and `WEATHER_AGENT_SLACK_APP_TOKEN` instead. Use a prefix when one
27
- host serves several Slack bots.
28
-
29
- A thread is one conversation. The bot answers mentions and DMs. It
30
- refuses Slack Connect users, guests, and people from other workspaces.
31
- Missing tokens leave this channel idle. The rest of `serve` still
32
- starts.
33
-
34
- ## Control who can message the agent
35
-
36
- External senders are blocked. Set `blockExternals: false` only when
37
- people outside your org should reach the agent:
38
-
39
- ```ts
40
20
  export default slackChannel({
41
- policy: { blockExternals: false },
42
- });
43
- ```
44
-
45
- Anyone in the thread can continue it. Restrict follow-ups to the person
46
- who started the session with `respondTo: "author"`:
47
-
48
- ```ts
49
- export default slackChannel({
50
- policy: { respondTo: "author" },
21
+ // TRIAGE_SLACK_BOT_TOKEN and TRIAGE_SLACK_APP_TOKEN
22
+ envPrefix: "TRIAGE",
51
23
  });
52
24
  ```
53
25
 
54
- ## Choose how the reply arrives
55
-
56
- Slack gives an agent two places to show progress while a turn runs: the
57
- status chip under the thread ("Running grep…") and the reply message
58
- itself. It won't fill both at once. While a message is streaming, Slack
59
- shows its own "is working…" chip and hides any status text you set. Cards
60
- only exist inside a streamed message. `reply.mode` picks the path.
61
-
62
- ### `post` (default): status chip, then one message
26
+ ## Post one reply with a status chip
63
27
 
64
- Tool calls and the first line of each reasoning block show in the chip as
65
- they happen. The answer lands as a single message when the turn finishes.
28
+ By default, Slack shows a status chip beneath the thread while the turn
29
+ runs, cycling through idle messages until reasoning or tool activity
30
+ gives it something more specific to show. When the turn finishes, the
31
+ chip disappears and one complete reply lands in the thread.
66
32
 
67
33
  ```ts
68
34
  export default slackChannel({
69
35
  reply: {
70
36
  mode: "post",
71
37
  status: {
38
+ // First line of each reasoning block on the chip.
72
39
  reasoning: true,
40
+ // Tool names as they start ("Running grep, glob...").
73
41
  tools: true,
74
- idle: ["Checking the monorepo", "Poking Datadog"],
42
+ idle: ["Checking the monorepo...", "Poking Datadog..."],
75
43
  },
76
44
  },
77
45
  });
78
46
  ```
79
47
 
80
- `idle` is the rotation Slack cycles through when nothing more specific is
81
- known, up to 5 lines of 50 characters. Pass a function to `tools` to write
82
- your own line from the calls in flight.
48
+ ## Stream a live reply
83
49
 
84
- ### `stream`: live text, with cards
85
-
86
- The answer streams into one message as the model writes it. Slack owns the
87
- chip for the duration, so live feedback inside the message comes from
88
- cards. Both are off unless you turn them on.
50
+ In stream mode, the reply appears immediately and grows as the model
51
+ writes. Slack shows its generic "is working..." state until the stream
52
+ ends, while optional reasoning and tool cards keep progress inside the
53
+ same message.
89
54
 
90
55
  ```ts
91
56
  export default slackChannel({
92
57
  reply: {
93
58
  mode: "stream",
59
+ // Thinking card inside the streamed message.
94
60
  reasoningCard: true,
95
- toolCards: { group: "per-tool" },
61
+ // One card per tool in that same message.
62
+ toolCards: true,
96
63
  },
97
- toolLabels: { grep: "Searching code", read: "Reading files" },
98
64
  });
99
65
  ```
100
66
 
101
- The reasoning card is one task card, titled "Thinking", that receives the
102
- model's reasoning as it streams and completes when the answer text starts.
103
- `maxChars` (default 1500) caps how much it collects. Slack caps a streamed
104
- message near 12k characters including cards; when an answer outgrows that,
105
- the streamed message closes where it stands and the rest continues in a
106
- new message.
107
-
108
- Tool cards default to one card per tool name with a call count in the title
109
- (`grep ×3`), updated in place as calls finish. `group: "per-call"` shows one
110
- card per call instead.
111
-
112
- Cards are collapsible by default: each call adds one line under the title,
113
- the same summary the playground shows in a tool's header (the grep pattern,
114
- the file path, the shell command), and the group expands the same way the
115
- reasoning card does. `collapsible: false` keeps cards to their titles. On a
116
- collapsible card, `details(call)` returns the line to add when a call starts
117
- and `output(result)` the text to add when it finishes.
118
-
119
- `toolLabels` renames tools everywhere they appear: the chip, card titles,
120
- and the default `Running …` line.
121
-
122
- ### `agentic`: the agent posts
123
-
124
- Opt in when the agent should own every message in the thread. Mentions
125
- and DMs still start turns. The channel does not write the status chip,
126
- tool cards, reasoning cards, or assistant text. Approval cards
127
- still post if you set `toolApprovals`.
128
-
129
- Mount `@cursor/july/extensions/slack-communication` so the agent can
130
- talk. The extension adds typed tools and the `slack-voice` skill. The
131
- channel watches those tool names (bare or `<namespace>__<name>`) and
132
- calls Slack through the channel client after a successful result. A
133
- rejected call, a dry-run stub, or a turn that never calls
134
- `post-update` stays silent. The framework does not also finalize
135
- assistant text.
67
+ ## Let the agent own every message
68
+
69
+ Use agentic mode when the agent should decide how to communicate, not
70
+ only what to say. The bot reacts to the parent message with eyes and
71
+ shows a thinking chip, then the agent chooses when to post progress and
72
+ how to deliver the final reply.
73
+
74
+ `slack-communication` gives those posts a Slack-aware voice by default:
75
+ lead with the result, share progress when the picture changes, and keep
76
+ tool chatter off the thread. Use `tone` for the rest of the
77
+ communication contract, including voice, level of detail, formatting,
78
+ and how updates should be structured.
136
79
 
137
80
  ```ts
138
81
  // agent/extensions/slack.ts
139
82
  import slackCommunication from "@cursor/july/extensions/slack-communication";
140
83
 
141
- export default slackCommunication();
84
+ export default slackCommunication({
85
+ tone:
86
+ "Be concise but warm. Use bullets for evidence and end with the next action.",
87
+ });
142
88
  ```
143
89
 
144
90
  ```ts
145
- // agent/channels/slack.ts
146
91
  export default slackChannel({
92
+ // `post-update` writes mid-turn progress and the final reply.
147
93
  reply: { mode: "agentic" },
148
94
  });
149
95
  ```
150
96
 
151
- | Tool | What it writes | Scope |
152
- | --- | --- | --- |
153
- | `post-update` | Mid-turn progress and the final reply (`chat.postMessage` / `chat.update`) | `chat:write` |
154
- | `post-card` | Collapsible task card (`chat.startStream` / `chat.appendStream`) | `chat:write` |
155
- | `post-file` | Workspace file on the reply (`files.getUploadURLExternal`) | `files:write` |
156
- | `react` | Emoji on a message `ts` (`reactions.add`). Omit `ts` for the thread root. | `reactions:write` |
157
- | `set-status` | Subtitle chip (`assistant.threads.setStatus`). Empty string clears it. | `assistant:write` |
158
-
159
- `agent-sdk slack create` already grants those scopes. Do not add a
160
- freeform Slack method tool.
97
+ ## Wake on a channel post
161
98
 
162
- Pass `tone` to add agent-specific voice without forking the tools:
99
+ This example watches `#triage-alerts`, so any substantial top-level
100
+ message starts a thread even when nobody mentions the bot. The length
101
+ guard filters out short posts before they can start a turn.
163
102
 
164
103
  ```ts
165
- export default slackCommunication({
166
- tone: "Lead with the merge decision. Name the risk next.",
104
+ export default slackChannel({
105
+ engagement: {
106
+ channelPosts: {
107
+ allow: ["#triage-alerts"],
108
+ posts: "top-level",
109
+ debounceMs: 15_000,
110
+ },
111
+ },
112
+ onChannelPost: async (_ctx, message) => {
113
+ if (message.markdown.length <= 20) {
114
+ return null;
115
+ }
116
+ // `{}` starts a model turn as the sender.
117
+ return {};
118
+ },
167
119
  });
168
120
  ```
169
121
 
170
- ### Migrating from `streaming` and `thinkingSteps`
122
+ When you create the app, pass `--channel-posts` and invite the bot to
123
+ every channel in the allowlist.
171
124
 
172
- `streaming: false` is `reply: { mode: "post" }`. `streaming: true` is
173
- `reply: { mode: "stream", toolCards: { group: "per-call", collapsible:
174
- false } }`, the title-only cards it used to show. `loadingMessages` moves
175
- to `reply.status.idle`. The old options still work and `agent-sdk validate`
176
- prints the rewrite for each one.
125
+ ## Control who can message
177
126
 
178
- A channel that set none of these used to stream. It now posts. Set
179
- `reply: { mode: "stream" }` to keep streaming.
127
+ By default, people outside your workspace get no reply. This matters
128
+ most in Slack Connect channels, where external collaborators share the
129
+ channel and can mention or reply to bots installed by your
130
+ organization. Keeping `blockExternals` on prevents them from starting
131
+ or steering an agent session and, through it, directing any tools
132
+ available to the agent.
180
133
 
181
- ## Set it up
134
+ Set `blockExternals: false` only when external collaborators are
135
+ intended users of the agent.
182
136
 
183
- `slack create` opens the Cursor dashboard wizard. Finish Slack consent
184
- and the bot name there. The CLI writes tokens to `.env.local` and never
185
- prints them. Skip the wizard if those tokens are already set, unless
186
- you want a Cursor-managed app.
187
-
188
- ### Provision with the CLI
189
-
190
- ```bash
191
- agent-sdk slack create --dir .
192
- agent-sdk slack create --dir . --prod
137
+ ```ts
138
+ export default slackChannel({
139
+ // Let external collaborators start and continue agent sessions.
140
+ policy: { blockExternals: false },
141
+ });
193
142
  ```
194
143
 
195
- Sign in first (`agent-sdk login` or `CURSOR_API_KEY`). A team
196
- service-account key cannot create Slack apps. Finish **Add
197
- Slack to this agent** as the same Cursor account. Then run
198
- `agent-sdk slack doctor --prefix MY_AGENT` and serve:
144
+ Anyone in a thread can continue its session by default. If the
145
+ conversation should stay between the agent and its original author,
146
+ set `respondTo: "author"`.
199
147
 
200
- ```bash
201
- agent-sdk serve --dir . --dev
148
+ ```ts
149
+ export default slackChannel({
150
+ policy: { respondTo: "author" },
151
+ });
202
152
  ```
203
153
 
204
- Invite the bot and mention it, or DM it. Expect a Thinking status,
205
- then a threaded streaming reply.
154
+ ## Events
206
155
 
207
- If Slack needs a workspace admin, keep the CLI running. Open the
208
- **Request approval** link it prints. After an admin approves, click
209
- **Retry** in the wizard.
156
+ Mentions and DMs wake the agent automatically, while `onChannelPost`
157
+ runs for messages in watched channels. Declare `onAppMention` or
158
+ `onDirectMessage` when you need to filter those default wakes; each
159
+ handler returns `{}` to start a turn or `null` to skip it.
210
160
 
211
- `slack destroy` deletes the Cursor-managed app. `slack icon` updates
212
- its icon. A second `slack create` for the same agent and environment
213
- replaces that app's manifest and tokens.
161
+ For example, this handler only starts a turn for DMs prefixed with
162
+ `triage:`:
214
163
 
215
- ### Provision from the dashboard
164
+ ```ts
165
+ onDirectMessage: async (_ctx, message) => {
166
+ if (!message.markdown.startsWith("triage:")) {
167
+ return null;
168
+ }
169
+ // `{}` starts a model turn as the sender.
170
+ return {};
171
+ },
172
+ ```
216
173
 
217
- The same wizard is on [Deployed Agents](https://cursor.com/dashboard).
218
- Open **Integrations** and click **Add Slack to this agent**.
174
+ ## Thread affinity
219
175
 
220
- Local `agent-sdk serve` reads `.env.local`. The next deploy injects the
221
- stored secrets.
176
+ A Slack thread maps to one agent session, so every follow-up in that
177
+ thread resumes the same conversation.
222
178
 
223
- If Slack needs admin approval, click **Request approval**, then
224
- **Retry** after an admin approves.
179
+ ## Call Slack from deterministic code via `ctx`
225
180
 
226
- The app row's menu covers rename, icon, token rotation, removal, and
227
- workspace disconnect.
181
+ Channel hooks can post before starting the model turn, which is useful
182
+ for deterministic acknowledgements such as `Looking at this now.` The
183
+ same bot credential also lets tools call Slack later in the turn:
228
184
 
229
- ### Create your own Slack app
185
+ - Channel hooks: `ctx.thread.post()`, `ctx.slack.channelId`,
186
+ `ctx.slack.threadTs`
230
187
 
231
- `slack init --manual` is for an app you own. It writes the channel file
232
- and Slack manifests. When Slack CLI (`~/.slack/bin/slack`) is logged
233
- in, it installs the app. When it isn't, install the app yourself.
188
+ - Tools: `ctx.host.slack.getClient()`
234
189
 
235
- ```bash
236
- agent-sdk slack init --manual --dir . --name "My Agent"
190
+ ```ts
191
+ onAppMention: async (ctx, message) => {
192
+ if (message.markdown.trim() === "") {
193
+ return null;
194
+ }
195
+ await ctx.thread.post("Looking at this now.");
196
+ return {};
197
+ },
237
198
  ```
238
199
 
239
- Install Slack CLI if you need it:
200
+ Use the IDs on the hook `ctx` when handling an event, and
201
+ `ctx.host.slack.getClient()` when a tool needs the Slack Web API.
202
+
203
+ ## Connect
240
204
 
241
205
  ```bash
242
- curl -fsSL https://downloads.slack-edge.com/slack-cli/install.sh | bash
206
+ agent-sdk login
207
+ agent-sdk slack create --dir .
208
+ agent-sdk slack doctor --prefix TRIAGE
243
209
  ```
244
210
 
245
- Log in with `slack login --no-prompt`. In Slack, send
246
- `/slackauthticket <ticket>`, then
247
- `slack login --ticket <ticket> --challenge <code>`. Install the
248
- workspace app with `slack app install`. Create a separate production
249
- app the same way.
250
-
251
- Or paste `.slack/manifest.dev.json` at
252
- [api.slack.com/apps](https://api.slack.com/apps) (**Create New App** →
253
- **From a manifest**). Repeat with `.slack/manifest.prod.json`. Dev and
254
- prod are separate Slack apps.
211
+ After you sign in, `slack create` opens **Add Slack to this agent** in
212
+ the browser and writes the resulting tokens to `.env.local` without
213
+ printing them. You can open the same wizard from **Integrations** on
214
+ [Deployed Agents](https://cursor.com/dashboard).
255
215
 
256
- Then put a bot token (`xoxb-...`) and an app-level token with
257
- `connections:write` (`xapp-...`) in `.env.local`. Use the names
258
- `slack init --manual` printed. Run `slack doctor` and serve as above.
216
+ If you already own the Slack app, initialize it with
217
+ `agent-sdk slack init --manual --dir . --name "Triage"` and follow the
218
+ [Slack setup skill](https://github.com/cursor/cursor/blob/main/packages/agent-serve/skills/setup-slack/SKILL.md) for installation
219
+ and tokens.
259
220
 
260
- Serve this app with Agent SDK. Do not run `slack deploy`.
221
+ ## Test locally
261
222
 
262
- ## Choose when the agent engages
223
+ Run `doctor` first to catch missing credentials, then start the agent
224
+ and send it the same mention or DM a teammate would.
263
225
 
264
- Mentions and DMs are on. Watching channel posts without a mention is
265
- opt-in:
266
-
267
- ```ts
268
- export default slackChannel({
269
- envPrefix: "TRIAGE",
270
- engagement: {
271
- channelPosts: {
272
- allow: ["#triage-alerts"],
273
- posts: "top-level",
274
- debounceMs: 15_000,
275
- },
276
- },
277
- onChannelPost: async (_ctx, message) => {
278
- return message.markdown.length > 20 ? {} : null;
279
- },
280
- });
226
+ ```bash
227
+ agent-sdk slack doctor --prefix TRIAGE
228
+ agent-sdk serve --dir . --dev
281
229
  ```
282
230
 
283
- Pass `--channel-posts` on `slack create` or `slack init --manual` so
284
- the Slack app receives those events. The bot must be in each watched
285
- channel. `allow: ["*"]` watches every joined channel.
286
-
287
- Set `includeBotPosts: true` for alert feeds and other bots. This app
288
- never wakes on its own posts.
289
-
290
- ## Prepare work on the host
291
-
292
- Mention and DM handlers may return a prepared `message`,
293
- `workspaceFiles`, or `cloud` block. Use the same host-prep pattern as
294
- [custom channels](/docs/guides/webhooks.md#prepare-on-the-host-then-hand-off).
295
-
296
- Slack file uploads attach automatically. Images become vision input.
297
- Supported documents become workspace files for the turn.
231
+ ## Practices
298
232
 
299
- ## Add approval buttons
233
+ - If the tokens are missing, the Slack channel stays idle while the
234
+ rest of `serve` starts normally.
300
235
 
301
- Tools with `needsApproval` park until a person decides. Post those
302
- decisions in Slack with one flag:
303
-
304
- ```ts
305
- export default slackChannel({
306
- toolApprovals: true,
307
- });
308
- ```
236
+ - Keep `channelPosts.allow` narrow because each qualifying post can
237
+ start a model turn.
309
238
 
310
- The Slack app needs interactivity. Recreate it with `slack create` if
311
- clicks do nothing. Cards show redacted, truncated arguments. Execution
312
- still uses the full input, so review sensitive tools in the playground
313
- when the card may hide fields. The lifecycle is in
314
- [Gate a tool on human approval](/docs/reference/tools.md#gate-a-tool-on-human-approval).
239
+ - Set `envPrefix` when two Slack bots share a host so the token names
240
+ do not collide.
315
241
 
316
- ## Run several agents on one host
242
+ ## Related
317
243
 
318
- Give each agent its own Slack app and token pair. Set `envPrefix` so
319
- the names don't collide (`WEATHER_AGENT_SLACK_*`, `TRIAGE_SLACK_*`).
320
- Agents without tokens stay idle. The others still serve.
244
+ - [CLI reference](/docs/reference/cli.md#slack): `slack create`,
245
+ `doctor`, `init --manual`
246
+ - [`skills/setup-slack/SKILL.md`](https://github.com/cursor/cursor/blob/main/packages/agent-serve/skills/setup-slack/SKILL.md):
247
+ the companion skill for coding agents
248
+ - [Webhooks and custom channels](/docs/guides/webhooks.md): host prep on mention
249
+ and DM handlers
250
+ - [Evals](/docs/evals.md): freeze a mention as a regression check