@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.
- package/README.md +4 -0
- package/dist/bin/agent-serve.js +20 -4
- package/dist/channels/checks.d.ts +10 -0
- package/dist/channels/checks.d.ts.map +1 -1
- package/dist/channels/github/github-channel.d.ts +29 -19
- package/dist/channels/github/github-channel.d.ts.map +1 -1
- package/dist/channels/github/github-channel.js +29 -19
- package/dist/channels/origin/checks.d.ts +1 -1
- package/dist/channels/origin/checks.d.ts.map +1 -1
- package/dist/channels/slack/agentic-delivery.d.ts.map +1 -1
- package/dist/channels/slack/agentic-delivery.js +2 -0
- package/dist/channels/slack/dispatch.d.ts +11 -1
- package/dist/channels/slack/dispatch.d.ts.map +1 -1
- package/dist/channels/slack/dispatch.js +146 -39
- package/dist/channels/slack/placeholder.d.ts +26 -0
- package/dist/channels/slack/placeholder.d.ts.map +1 -1
- package/dist/channels/slack/placeholder.js +28 -0
- package/dist/channels/slack/slack-channel.d.ts.map +1 -1
- package/dist/channels/slack/slack-channel.js +9 -16
- package/dist/docs/404.html +2 -2
- package/dist/docs/assets/{app.Drol6mi6.js → app.CAeK13eM.js} +4 -4
- package/dist/docs/assets/building-with-agents.md.BBCx0AUo.js +9 -0
- package/dist/docs/assets/building-with-agents.md.BBCx0AUo.lean.js +1 -0
- package/dist/docs/assets/chunks/@localSearchIndexroot.Ck9E52Ls.js +1 -0
- package/dist/docs/assets/chunks/{VPLocalSearchBox.CdqoBZJX.js → VPLocalSearchBox.C9LbPHod.js} +1 -1
- package/dist/docs/assets/chunks/{arc.BVX3ycTn.js → arc.CmMq2zmS.js} +1 -1
- package/dist/docs/assets/chunks/{architectureDiagram-Q4EWVU46.CcChnMxX.js → architectureDiagram-Q4EWVU46.CCXB8Uj5.js} +1 -1
- package/dist/docs/assets/chunks/{baseUniq.xwtXO-yt.js → baseUniq.CyQo6eLe.js} +1 -1
- package/dist/docs/assets/chunks/{blockDiagram-DXYQGD6D.CijZ_taK.js → blockDiagram-DXYQGD6D.JYq6w91N.js} +1 -1
- package/dist/docs/assets/chunks/{c4Diagram-AHTNJAMY.0FBvwBvK.js → c4Diagram-AHTNJAMY.BRV8GPJJ.js} +1 -1
- package/dist/docs/assets/chunks/channel.BHiYmnZ4.js +1 -0
- package/dist/docs/assets/chunks/{chunk-4BX2VUAB.CELMmMDA.js → chunk-4BX2VUAB.Bv4ooYQR.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-4TB4RGXK.C4bhFtSm.js → chunk-4TB4RGXK.t4JtKPcj.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-55IACEB6.ZnQ9gRRQ.js → chunk-55IACEB6.34lCHj9Y.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-EDXVE4YY.DPlmglG-.js → chunk-EDXVE4YY.BSwrPNrt.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-FMBD7UC4.BrUk8pff.js → chunk-FMBD7UC4.Beeun-R-.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-OYMX7WX6.CcmWIncu.js → chunk-OYMX7WX6.BUUFUcJc.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-QZHKN3VN.D65-cs8I.js → chunk-QZHKN3VN.B2XjHzN_.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-YZCP3GAM.qoXZpG9F.js → chunk-YZCP3GAM.CLYG8znk.js} +1 -1
- package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.Degh8l90.js +1 -0
- package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.Degh8l90.js +1 -0
- package/dist/docs/assets/chunks/clone.BIywbczV.js +1 -0
- package/dist/docs/assets/chunks/{cose-bilkent-S5V4N54A.8rYtqudO.js → cose-bilkent-S5V4N54A.DVEa6fZp.js} +1 -1
- package/dist/docs/assets/chunks/{dagre-KV5264BT.DrRP1fOh.js → dagre-KV5264BT.C9PZQK-S.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-5BDNPKRD.DHj_xA2_.js → diagram-5BDNPKRD.DoN0uv3Y.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-G4DWMVQ6.Bz_6nAKj.js → diagram-G4DWMVQ6.Czv3duqx.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-MMDJMWI5.BWA0xSW9.js → diagram-MMDJMWI5.BinJ5kWb.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-TYMM5635.CpTJLNJI.js → diagram-TYMM5635.DW326M4K.js} +1 -1
- package/dist/docs/assets/chunks/{erDiagram-SMLLAGMA.-7AWWSrP.js → erDiagram-SMLLAGMA.U2pR_OA7.js} +1 -1
- package/dist/docs/assets/chunks/{flowDiagram-DWJPFMVM.BTnQ742_.js → flowDiagram-DWJPFMVM.ByWJXeYK.js} +1 -1
- package/dist/docs/assets/chunks/framework.BNw1pucY.js +19 -0
- package/dist/docs/assets/chunks/{ganttDiagram-T4ZO3ILL.B5_HiiQ5.js → ganttDiagram-T4ZO3ILL.OquF0Rtg.js} +1 -1
- package/dist/docs/assets/chunks/{gitGraphDiagram-UUTBAWPF.CZcNTFZd.js → gitGraphDiagram-UUTBAWPF.Bpn01P7X.js} +1 -1
- package/dist/docs/assets/chunks/{graph.V2GLaab4.js → graph.CNRB6ETL.js} +1 -1
- package/dist/docs/assets/chunks/{infoDiagram-42DDH7IO.7pZOkCCU.js → infoDiagram-42DDH7IO.CqhknMWi.js} +1 -1
- package/dist/docs/assets/chunks/{ishikawaDiagram-UXIWVN3A.DSMo3Qa3.js → ishikawaDiagram-UXIWVN3A.C6xpR2af.js} +1 -1
- package/dist/docs/assets/chunks/{journeyDiagram-VCZTEJTY.BNEgWN1S.js → journeyDiagram-VCZTEJTY.Cg5f7oB3.js} +1 -1
- package/dist/docs/assets/chunks/{kanban-definition-6JOO6SKY.B-4d4tC7.js → kanban-definition-6JOO6SKY.Cx9YTwlU.js} +1 -1
- package/dist/docs/assets/chunks/{layout.Dvbn9nSb.js → layout.ljS-wFtK.js} +1 -1
- package/dist/docs/assets/chunks/{linear.D2GM4p4b.js → linear.jSxNrsFC.js} +1 -1
- package/dist/docs/assets/chunks/{min.DVBtLK-B.js → min.Cum8AlQw.js} +1 -1
- package/dist/docs/assets/chunks/{mindmap-definition-QFDTVHPH.CnJRI55x.js → mindmap-definition-QFDTVHPH.BLiysLpe.js} +1 -1
- package/dist/docs/assets/chunks/{pieDiagram-DEJITSTG.CtoaTFlA.js → pieDiagram-DEJITSTG.BoIDyuKF.js} +1 -1
- package/dist/docs/assets/chunks/{quadrantDiagram-34T5L4WZ.DtT24_vN.js → quadrantDiagram-34T5L4WZ.DLkpDytR.js} +1 -1
- package/dist/docs/assets/chunks/{requirementDiagram-MS252O5E.CjSO4o8f.js → requirementDiagram-MS252O5E.DqTVqSu2.js} +1 -1
- package/dist/docs/assets/chunks/{sankeyDiagram-XADWPNL6.-wWiIVWa.js → sankeyDiagram-XADWPNL6.CG_6FF7j.js} +1 -1
- package/dist/docs/assets/chunks/{sequenceDiagram-FGHM5R23.DSk8s4gX.js → sequenceDiagram-FGHM5R23.BIp9602K.js} +1 -1
- package/dist/docs/assets/chunks/{stateDiagram-FHFEXIEX.BFKAsdkN.js → stateDiagram-FHFEXIEX.COSXsD9I.js} +1 -1
- package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.qrxrbFsX.js +1 -0
- package/dist/docs/assets/chunks/{theme.C0MctGaz.js → theme.CXJ7PNwy.js} +2 -2
- package/dist/docs/assets/chunks/{timeline-definition-GMOUNBTQ.TUNJbAFe.js → timeline-definition-GMOUNBTQ.CXdVqkLq.js} +1 -1
- package/dist/docs/assets/chunks/{vennDiagram-DHZGUBPP.C-RGNnk4.js → vennDiagram-DHZGUBPP.CZxGuc4r.js} +1 -1
- package/dist/docs/assets/chunks/{wardley-RL74JXVD.g5efOWmT.js → wardley-RL74JXVD.3oVgfqQk.js} +1 -1
- package/dist/docs/assets/chunks/{wardleyDiagram-NUSXRM2D.DH4zt73Y.js → wardleyDiagram-NUSXRM2D.6_irCgGJ.js} +1 -1
- package/dist/docs/assets/chunks/{xychartDiagram-5P7HB3ND.B-3k6bF6.js → xychartDiagram-5P7HB3ND.TRPe92m3.js} +1 -1
- package/dist/docs/assets/deployment.md.D2jQZuFx.js +32 -0
- package/dist/docs/assets/deployment.md.D2jQZuFx.lean.js +1 -0
- package/dist/docs/assets/evals.md.D3Y3Aixt.js +72 -0
- package/dist/docs/assets/evals.md.D3Y3Aixt.lean.js +1 -0
- package/dist/docs/assets/guides_agent-to-agent.md.CD4T5FIl.js +41 -0
- package/dist/docs/assets/guides_agent-to-agent.md.CD4T5FIl.lean.js +1 -0
- package/dist/docs/assets/guides_bitbucket.md.mpevW-VP.js +145 -0
- package/dist/docs/assets/guides_bitbucket.md.mpevW-VP.lean.js +1 -0
- package/dist/docs/assets/guides_cloud-agents.md.Cp1O3u-X.js +15 -0
- package/dist/docs/assets/guides_cloud-agents.md.Cp1O3u-X.lean.js +1 -0
- package/dist/docs/assets/guides_convert-automation.md.CqEyfP6Y.js +43 -0
- package/dist/docs/assets/guides_convert-automation.md.CqEyfP6Y.lean.js +1 -0
- package/dist/docs/assets/guides_github.md.BwpBp3ed.js +156 -0
- package/dist/docs/assets/guides_github.md.BwpBp3ed.lean.js +1 -0
- package/dist/docs/assets/guides_gitlab.md.DaEC3nMk.js +153 -0
- package/dist/docs/assets/guides_gitlab.md.DaEC3nMk.lean.js +1 -0
- package/dist/docs/assets/guides_grokbot-agents.md.CMhZNdEU.js +16 -0
- package/dist/docs/assets/guides_grokbot-agents.md.CMhZNdEU.lean.js +1 -0
- package/dist/docs/assets/guides_improve.md.Bnp4F99w.js +22 -0
- package/dist/docs/assets/guides_improve.md.Bnp4F99w.lean.js +1 -0
- package/dist/docs/assets/guides_jev.md.F5fAkkfN.js +189 -0
- package/dist/docs/assets/guides_jev.md.F5fAkkfN.lean.js +1 -0
- package/dist/docs/assets/guides_mcp-oauth.md.bSFakfCY.js +50 -0
- package/dist/docs/assets/guides_mcp-oauth.md.bSFakfCY.lean.js +1 -0
- package/dist/docs/assets/guides_opentelemetry.md.BKDxQmmd.js +35 -0
- package/dist/docs/assets/guides_opentelemetry.md.BKDxQmmd.lean.js +1 -0
- package/dist/docs/assets/guides_slack.md.Bo96y42E.js +70 -0
- package/dist/docs/assets/guides_slack.md.Bo96y42E.lean.js +1 -0
- package/dist/docs/assets/guides_webhooks.md.1A72_VEE.js +92 -0
- package/dist/docs/assets/guides_webhooks.md.1A72_VEE.lean.js +1 -0
- package/dist/docs/assets/hillclimbing.md.D4E1o5Sa.js +7 -0
- package/dist/docs/assets/hillclimbing.md.D4E1o5Sa.lean.js +1 -0
- package/dist/docs/assets/{index.md.BFVyY2KT.js → index.md.C-t81M5J.js} +2 -2
- package/dist/docs/assets/{index.md.BFVyY2KT.lean.js → index.md.C-t81M5J.lean.js} +1 -1
- package/dist/docs/assets/{quickstart.md.D3MjSZN-.js → quickstart.md.DAvVhuuU.js} +1 -1
- package/dist/docs/assets/{quickstart.md.D3MjSZN-.lean.js → quickstart.md.DAvVhuuU.lean.js} +1 -1
- package/dist/docs/assets/{reference_agent-config.md.CfVA-LZJ.js → reference_agent-config.md.DGPyw7ms.js} +1 -1
- package/dist/docs/assets/{reference_agent-config.md.CfVA-LZJ.lean.js → reference_agent-config.md.DGPyw7ms.lean.js} +1 -1
- package/dist/docs/assets/{reference_artifacts.md.Vf7qyIZ-.js → reference_artifacts.md.Bu_4HmsD.js} +1 -1
- package/dist/docs/assets/{reference_artifacts.md.Vf7qyIZ-.lean.js → reference_artifacts.md.Bu_4HmsD.lean.js} +1 -1
- package/dist/docs/assets/{reference_channels.md.icqLKcTc.js → reference_channels.md.nFWbzAic.js} +1 -1
- package/dist/docs/assets/{reference_channels.md.icqLKcTc.lean.js → reference_channels.md.nFWbzAic.lean.js} +1 -1
- package/dist/docs/assets/{reference_cli.md.B2dBL6L8.js → reference_cli.md.DLWDz9ij.js} +3 -1
- package/dist/docs/assets/{reference_cli.md.B2dBL6L8.lean.js → reference_cli.md.DLWDz9ij.lean.js} +1 -1
- package/dist/docs/assets/{reference_connections.md.Cb3U_c8n.js → reference_connections.md.Je9dMsdd.js} +2 -2
- package/dist/docs/assets/{reference_connections.md.Cb3U_c8n.lean.js → reference_connections.md.Je9dMsdd.lean.js} +1 -1
- package/dist/docs/assets/reference_evals.md.DNJzM_yf.js +57 -0
- package/dist/docs/assets/reference_evals.md.DNJzM_yf.lean.js +1 -0
- package/dist/docs/assets/reference_extensions.md.Cv5aLCz_.js +58 -0
- package/dist/docs/assets/reference_extensions.md.Cv5aLCz_.lean.js +1 -0
- package/dist/docs/assets/{reference_hooks.md.CZuynAxj.js → reference_hooks.md.B7uzNENk.js} +2 -2
- package/dist/docs/assets/{reference_hooks.md.CZuynAxj.lean.js → reference_hooks.md.B7uzNENk.lean.js} +1 -1
- package/dist/docs/assets/{reference_http-api.md.DTKcYE6L.js → reference_http-api.md.CduHavZ2.js} +1 -1
- package/dist/docs/assets/{reference_http-api.md.DTKcYE6L.lean.js → reference_http-api.md.CduHavZ2.lean.js} +1 -1
- package/dist/docs/assets/{reference_instructions.md.D7gkckK-.js → reference_instructions.md.CU1My5My.js} +1 -1
- package/dist/docs/assets/{reference_instructions.md.D7gkckK-.lean.js → reference_instructions.md.CU1My5My.lean.js} +1 -1
- package/dist/docs/assets/{reference_playground.md.D2YExv5K.js → reference_playground.md.Ch2d0Iqi.js} +1 -1
- package/dist/docs/assets/{reference_playground.md.D2YExv5K.lean.js → reference_playground.md.Ch2d0Iqi.lean.js} +1 -1
- package/dist/docs/assets/{reference_project-layout.md.DPxbUJyt.js → reference_project-layout.md.BGhgpy9V.js} +1 -1
- package/dist/docs/assets/{reference_project-layout.md.DPxbUJyt.lean.js → reference_project-layout.md.BGhgpy9V.lean.js} +1 -1
- package/dist/docs/assets/{reference_prompt.md.BQ5uAv1F.js → reference_prompt.md.Ccp0R53H.js} +1 -1
- package/dist/docs/assets/{reference_prompt.md.BQ5uAv1F.lean.js → reference_prompt.md.Ccp0R53H.lean.js} +1 -1
- package/dist/docs/assets/{reference_schedules.md.BasfZWO-.js → reference_schedules.md.B2Nm6FaD.js} +1 -1
- package/dist/docs/assets/{reference_schedules.md.BasfZWO-.lean.js → reference_schedules.md.B2Nm6FaD.lean.js} +1 -1
- package/dist/docs/assets/{reference_sessions.md.YKvIsWAx.js → reference_sessions.md.1_6Vyv7x.js} +1 -1
- package/dist/docs/assets/{reference_sessions.md.YKvIsWAx.lean.js → reference_sessions.md.1_6Vyv7x.lean.js} +1 -1
- package/dist/docs/assets/{reference_skills.md.rNgpsGd0.js → reference_skills.md.DjQkRefx.js} +1 -1
- package/dist/docs/assets/{reference_skills.md.rNgpsGd0.lean.js → reference_skills.md.DjQkRefx.lean.js} +1 -1
- package/dist/docs/assets/{reference_subagents.md.e5qitjJt.js → reference_subagents.md.Dl16gcBj.js} +2 -2
- package/dist/docs/assets/{reference_subagents.md.e5qitjJt.lean.js → reference_subagents.md.Dl16gcBj.lean.js} +1 -1
- package/dist/docs/assets/{reference_tools.md.BdCO2aHZ.js → reference_tools.md.B1dH1lpa.js} +3 -3
- package/dist/docs/assets/{reference_tools.md.BdCO2aHZ.lean.js → reference_tools.md.B1dH1lpa.lean.js} +1 -1
- package/dist/docs/assets/{templates_agentic-owners.md.Da_AGDlH.js → templates_agentic-owners.md.9M575F5C.js} +1 -1
- package/dist/docs/assets/{templates_agentic-owners.md.Da_AGDlH.lean.js → templates_agentic-owners.md.9M575F5C.lean.js} +1 -1
- package/dist/docs/assets/{templates_pr-autofixer.md.DqxocIGh.js → templates_pr-autofixer.md.ws0DDXDy.js} +1 -1
- package/dist/docs/assets/{templates_pr-autofixer.md.DqxocIGh.lean.js → templates_pr-autofixer.md.ws0DDXDy.lean.js} +1 -1
- package/dist/docs/assets/{templates_security-reviewer.md.Bhnvd8VE.js → templates_security-reviewer.md.KEFYXzfK.js} +1 -1
- package/dist/docs/assets/{templates_security-reviewer.md.Bhnvd8VE.lean.js → templates_security-reviewer.md.KEFYXzfK.lean.js} +1 -1
- package/dist/docs/assets/templates_thermo-quality-review.md.VNJ_mohX.js +3 -0
- package/dist/docs/assets/templates_thermo-quality-review.md.VNJ_mohX.lean.js +1 -0
- package/dist/docs/assets/templates_thermo-review.md.Hi3zWOkP.js +3 -0
- package/dist/docs/assets/templates_thermo-review.md.Hi3zWOkP.lean.js +1 -0
- package/dist/docs/assets/{templates_triage.md.BdBWO9Ic.js → templates_triage.md.CVGe_FG6.js} +1 -1
- package/dist/docs/assets/{templates_triage.md.BdBWO9Ic.lean.js → templates_triage.md.CVGe_FG6.lean.js} +1 -1
- package/dist/docs/assets/troubleshooting.md.mnfFG2Em.js +1 -0
- package/dist/docs/assets/troubleshooting.md.mnfFG2Em.lean.js +1 -0
- package/dist/docs/building-with-agents.html +44 -48
- package/dist/docs/building-with-agents.md +94 -82
- package/dist/docs/deployment.html +59 -78
- package/dist/docs/deployment.md +117 -363
- package/dist/docs/evals.html +85 -224
- package/dist/docs/evals.md +149 -673
- package/dist/docs/guides/agent-to-agent.html +74 -47
- package/dist/docs/guides/agent-to-agent.md +128 -46
- package/dist/docs/guides/bitbucket.html +179 -44
- package/dist/docs/guides/bitbucket.md +249 -48
- package/dist/docs/guides/cloud-agents.html +46 -40
- package/dist/docs/guides/cloud-agents.md +119 -66
- package/dist/docs/guides/convert-automation.html +80 -49
- package/dist/docs/guides/convert-automation.md +156 -147
- package/dist/docs/guides/github.html +184 -92
- package/dist/docs/guides/github.md +260 -245
- package/dist/docs/guides/gitlab.html +184 -45
- package/dist/docs/guides/gitlab.md +249 -50
- package/dist/docs/guides/grokbot-agents.html +48 -41
- package/dist/docs/guides/grokbot-agents.md +99 -53
- package/dist/docs/guides/improve.html +48 -40
- package/dist/docs/guides/improve.md +111 -58
- package/dist/docs/guides/jev.html +248 -0
- package/dist/docs/guides/jev.md +348 -0
- package/dist/docs/guides/mcp-oauth.html +74 -52
- package/dist/docs/guides/mcp-oauth.md +111 -121
- package/dist/docs/guides/opentelemetry.html +63 -54
- package/dist/docs/guides/opentelemetry.md +96 -165
- package/dist/docs/guides/slack.html +83 -59
- package/dist/docs/guides/slack.md +157 -227
- package/dist/docs/guides/webhooks.html +97 -230
- package/dist/docs/guides/webhooks.md +154 -385
- package/dist/docs/hashmap.json +1 -1
- package/dist/docs/hillclimbing.html +44 -38
- package/dist/docs/hillclimbing.md +101 -55
- package/dist/docs/index.html +38 -38
- package/dist/docs/index.md +2 -0
- package/dist/docs/llms-full.txt +3490 -3146
- package/dist/docs/llms.txt +22 -18
- package/dist/docs/quickstart.html +37 -37
- package/dist/docs/reference/agent-config.html +37 -37
- package/dist/docs/reference/artifacts.html +38 -38
- package/dist/docs/reference/channels.html +37 -37
- package/dist/docs/reference/cli.html +39 -37
- package/dist/docs/reference/cli.md +2 -0
- package/dist/docs/reference/connections.html +38 -38
- package/dist/docs/reference/connections.md +1 -1
- package/dist/docs/reference/evals.html +116 -0
- package/dist/docs/reference/evals.md +293 -0
- package/dist/docs/reference/extensions.html +80 -84
- package/dist/docs/reference/extensions.md +131 -202
- package/dist/docs/reference/hooks.html +39 -39
- package/dist/docs/reference/hooks.md +34 -34
- package/dist/docs/reference/http-api.html +37 -37
- package/dist/docs/reference/instructions.html +37 -37
- package/dist/docs/reference/playground.html +37 -37
- package/dist/docs/reference/project-layout.html +37 -37
- package/dist/docs/reference/prompt.html +37 -37
- package/dist/docs/reference/schedules.html +37 -37
- package/dist/docs/reference/sessions.html +37 -37
- package/dist/docs/reference/skills.html +37 -37
- package/dist/docs/reference/subagents.html +38 -38
- package/dist/docs/reference/subagents.md +1 -1
- package/dist/docs/reference/tools.html +38 -38
- package/dist/docs/reference/tools.md +4 -0
- package/dist/docs/templates/agentic-owners.html +38 -38
- package/dist/docs/templates/pr-autofixer.html +37 -37
- package/dist/docs/templates/security-reviewer.html +38 -38
- package/dist/docs/templates/thermo-quality-review.html +62 -0
- package/dist/docs/templates/thermo-quality-review.md +75 -0
- package/dist/docs/templates/thermo-review.html +62 -0
- package/dist/docs/templates/thermo-review.md +74 -0
- package/dist/docs/templates/triage.html +37 -37
- package/dist/docs/troubleshooting.html +38 -38
- package/dist/docs/troubleshooting.md +97 -66
- package/dist/extensions/cursor-cloud-agents/skills/handoff.md +3 -7
- package/dist/extensions/improve/extension.d.ts +3 -1
- package/dist/extensions/improve/extension.d.ts.map +1 -1
- package/dist/extensions/improve/extension.js +4 -2
- package/dist/extensions/improve/skills/yourself.js +1 -1
- package/dist/extensions/jev/extension.d.ts +43 -0
- package/dist/extensions/jev/extension.d.ts.map +1 -0
- package/dist/extensions/jev/extension.js +47 -0
- package/dist/extensions/jev/lib/evaluate.d.ts +101 -0
- package/dist/extensions/jev/lib/evaluate.d.ts.map +1 -0
- package/dist/extensions/jev/lib/evaluate.js +167 -0
- package/dist/extensions/jev/skills/gated-write.md +25 -0
- package/dist/extensions/jev/skills/questions.md +33 -0
- package/dist/extensions/jev/tools/evaluate.d.ts +4 -0
- package/dist/extensions/jev/tools/evaluate.d.ts.map +1 -0
- package/dist/extensions/jev/tools/evaluate.js +88 -0
- package/dist/extensions.d.ts +1 -1
- package/dist/extensions.d.ts.map +1 -1
- package/dist/extensions.js +2 -0
- package/dist/filesystem.d.ts +46 -2
- package/dist/filesystem.d.ts.map +1 -1
- package/dist/filesystem.js +149 -102
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/internal/advertise-tools.d.ts.map +1 -1
- package/dist/internal/advertise-tools.js +6 -0
- package/dist/internal/cli-ax.d.ts +6 -0
- package/dist/internal/cli-ax.d.ts.map +1 -1
- package/dist/internal/cli-ax.js +72 -14
- package/dist/internal/continuation-identity.d.ts.map +1 -1
- package/dist/internal/continuation-identity.js +1 -0
- package/dist/internal/cursor-agent-template.d.ts +1 -1
- package/dist/internal/cursor-agent-template.d.ts.map +1 -1
- package/dist/internal/cursor-agent-template.js +2 -0
- package/dist/internal/discovery/connections.d.ts.map +1 -1
- package/dist/internal/discovery/connections.js +18 -0
- package/dist/internal/discovery/extensions.d.ts.map +1 -1
- package/dist/internal/discovery/extensions.js +8 -4
- package/dist/internal/discovery/info.d.ts.map +1 -1
- package/dist/internal/discovery/info.js +1 -0
- package/dist/internal/filesystem/tools.d.ts.map +1 -1
- package/dist/internal/filesystem/tools.js +2 -2
- package/dist/internal/filesystem/walk.d.ts +7 -4
- package/dist/internal/filesystem/walk.d.ts.map +1 -1
- package/dist/internal/filesystem/walk.js +34 -11
- package/dist/internal/hosted-admission-adapter.d.ts +3 -0
- package/dist/internal/hosted-admission-adapter.d.ts.map +1 -1
- package/dist/internal/hosted-delivery-protocol.d.ts +20 -0
- package/dist/internal/hosted-delivery-protocol.d.ts.map +1 -1
- package/dist/internal/hosted-delivery-protocol.js +51 -1
- package/dist/internal/hosted-delivery.d.ts.map +1 -1
- package/dist/internal/hosted-delivery.js +23 -25
- package/dist/internal/hosted-execution-diag.d.ts +12 -4
- package/dist/internal/hosted-execution-diag.d.ts.map +1 -1
- package/dist/internal/hosted-execution-diag.js +26 -4
- package/dist/internal/hosted-execution-flush.d.ts +1 -0
- package/dist/internal/hosted-execution-flush.d.ts.map +1 -1
- package/dist/internal/hosted-execution-flush.js +4 -2
- package/dist/internal/init-project.d.ts.map +1 -1
- package/dist/internal/init-project.js +4 -0
- package/dist/internal/server.d.ts.map +1 -1
- package/dist/internal/server.js +111 -48
- package/dist/internal/session-engine.d.ts +4 -1
- package/dist/internal/session-engine.d.ts.map +1 -1
- package/dist/internal/session-engine.js +39 -9
- package/dist/internal/skill-catalog.d.ts +28 -0
- package/dist/internal/skill-catalog.d.ts.map +1 -0
- package/dist/internal/skill-catalog.js +44 -0
- package/dist/playground/assets/index-DSMAewbx.css +1 -0
- package/dist/playground/assets/index-De_lpFxE.js +67 -0
- package/dist/playground/index.html +2 -2
- package/dist/types.d.ts +32 -3
- package/dist/types.d.ts.map +1 -1
- package/docs/README.md +2 -0
- package/docs/building-with-agents.md +96 -84
- package/docs/deployment.md +118 -364
- package/docs/evals.md +149 -673
- package/docs/guides/agent-to-agent.md +130 -48
- package/docs/guides/bitbucket.md +250 -49
- package/docs/guides/cloud-agents.md +119 -67
- package/docs/guides/convert-automation.md +157 -148
- package/docs/guides/github.md +261 -246
- package/docs/guides/gitlab.md +250 -51
- package/docs/guides/grokbot-agents.md +100 -55
- package/docs/guides/improve.md +112 -59
- package/docs/guides/jev.md +353 -0
- package/docs/guides/mcp-oauth.md +112 -122
- package/docs/guides/opentelemetry.md +97 -166
- package/docs/guides/slack.md +158 -228
- package/docs/guides/webhooks.md +155 -386
- package/docs/hillclimbing.md +102 -56
- package/docs/reference/cli.md +2 -0
- package/docs/reference/connections.md +1 -1
- package/docs/reference/evals.md +298 -0
- package/docs/reference/extensions.md +132 -203
- package/docs/reference/hooks.md +34 -34
- package/docs/reference/subagents.md +1 -1
- package/docs/reference/tools.md +4 -0
- package/docs/templates/thermo-quality-review.md +80 -0
- package/docs/templates/thermo-review.md +79 -0
- package/docs/troubleshooting.md +98 -67
- package/package.json +8 -1
- package/skills/github/SKILL.md +21 -13
- package/src/bin/agent-serve.ts +24 -3
- package/src/channels/checks.ts +8 -0
- package/src/channels/github/github-channel.ts +29 -19
- package/src/channels/origin/checks.ts +3 -1
- package/src/channels/slack/agentic-delivery.ts +2 -0
- package/src/channels/slack/dispatch.ts +131 -4
- package/src/channels/slack/placeholder.ts +51 -0
- package/src/channels/slack/slack-channel.ts +9 -2
- package/src/extensions/cursor-cloud-agents/skills/handoff.md +3 -7
- package/src/extensions/improve/extension.ts +4 -2
- package/src/extensions/improve/skills/yourself.ts +1 -1
- package/src/extensions/jev/extension.ts +95 -0
- package/src/extensions/jev/lib/evaluate.ts +289 -0
- package/src/extensions/jev/skills/gated-write.md +25 -0
- package/src/extensions/jev/skills/questions.md +33 -0
- package/src/extensions/jev/tools/evaluate.ts +90 -0
- package/src/extensions.ts +2 -0
- package/src/filesystem.ts +168 -65
- package/src/index.ts +3 -0
- package/src/internal/advertise-tools.ts +6 -0
- package/src/internal/cli-ax.ts +88 -15
- package/src/internal/continuation-identity.ts +1 -0
- package/src/internal/cursor-agent-template.ts +2 -0
- package/src/internal/discovery/connections.ts +21 -0
- package/src/internal/discovery/extensions.ts +12 -4
- package/src/internal/discovery/info.ts +1 -0
- package/src/internal/filesystem/tools.ts +2 -0
- package/src/internal/filesystem/walk.ts +60 -15
- package/src/internal/hosted-admission-adapter.ts +3 -0
- package/src/internal/hosted-delivery-protocol.ts +82 -1
- package/src/internal/hosted-delivery.ts +23 -0
- package/src/internal/hosted-execution-diag.ts +33 -4
- package/src/internal/hosted-execution-flush.ts +4 -0
- package/src/internal/init-project.ts +4 -0
- package/src/internal/server.ts +130 -53
- package/src/internal/session-engine.ts +46 -8
- package/src/internal/skill-catalog.ts +69 -0
- package/src/types.ts +33 -3
- package/templates/thermo-quality-review/README.md +35 -0
- package/templates/thermo-quality-review/agent/agent.ts +8 -0
- package/templates/thermo-quality-review/agent/channels/github.ts +42 -0
- package/templates/thermo-quality-review/agent/instructions.md +43 -0
- package/templates/thermo-quality-review/agent/tools/post_findings.ts +70 -0
- package/templates/thermo-quality-review/evals/evals.config.ts +5 -0
- package/templates/thermo-quality-review/evals/review.eval.ts +62 -0
- package/templates/thermo-quality-review/package.json +18 -0
- package/templates/thermo-quality-review/tsconfig.json +12 -0
- package/templates/thermo-review/README.md +35 -0
- package/templates/thermo-review/agent/agent.ts +8 -0
- package/templates/thermo-review/agent/channels/github.ts +42 -0
- package/templates/thermo-review/agent/instructions.md +40 -0
- package/templates/thermo-review/agent/tools/post_findings.ts +70 -0
- package/templates/thermo-review/evals/evals.config.ts +5 -0
- package/templates/thermo-review/evals/review.eval.ts +53 -0
- package/templates/thermo-review/package.json +18 -0
- package/templates/thermo-review/tsconfig.json +12 -0
- package/dist/docs/assets/building-with-agents.md.CEGVXkmO.js +0 -13
- package/dist/docs/assets/building-with-agents.md.CEGVXkmO.lean.js +0 -1
- package/dist/docs/assets/chunks/@localSearchIndexroot.DtXk1hy-.js +0 -1
- package/dist/docs/assets/chunks/channel.Bkv1N-gK.js +0 -1
- package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.CZDco1o8.js +0 -1
- package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.CZDco1o8.js +0 -1
- package/dist/docs/assets/chunks/clone.YSt_40_s.js +0 -1
- package/dist/docs/assets/chunks/framework.dypDpWZ3.js +0 -19
- package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.C4CLm481.js +0 -1
- package/dist/docs/assets/deployment.md.Dm4Qo3hp.js +0 -51
- package/dist/docs/assets/deployment.md.Dm4Qo3hp.lean.js +0 -1
- package/dist/docs/assets/evals.md.BLDRt5LH.js +0 -211
- package/dist/docs/assets/evals.md.BLDRt5LH.lean.js +0 -1
- package/dist/docs/assets/guides_agent-to-agent.md.BI0xclmy.js +0 -14
- package/dist/docs/assets/guides_agent-to-agent.md.BI0xclmy.lean.js +0 -1
- package/dist/docs/assets/guides_bitbucket.md.CTpCl__f.js +0 -10
- package/dist/docs/assets/guides_bitbucket.md.CTpCl__f.lean.js +0 -1
- package/dist/docs/assets/guides_cloud-agents.md.lSE_l7lH.js +0 -9
- package/dist/docs/assets/guides_cloud-agents.md.lSE_l7lH.lean.js +0 -1
- package/dist/docs/assets/guides_convert-automation.md.Ck6Cr68A.js +0 -12
- package/dist/docs/assets/guides_convert-automation.md.Ck6Cr68A.lean.js +0 -1
- package/dist/docs/assets/guides_github.md.D6ER29dG.js +0 -64
- package/dist/docs/assets/guides_github.md.D6ER29dG.lean.js +0 -1
- package/dist/docs/assets/guides_gitlab.md.P-TjBnS5.js +0 -14
- package/dist/docs/assets/guides_gitlab.md.P-TjBnS5.lean.js +0 -1
- package/dist/docs/assets/guides_grokbot-agents.md.WBZIOvkz.js +0 -9
- package/dist/docs/assets/guides_grokbot-agents.md.WBZIOvkz.lean.js +0 -1
- package/dist/docs/assets/guides_improve.md.BKaDuKKK.js +0 -14
- package/dist/docs/assets/guides_improve.md.BKaDuKKK.lean.js +0 -1
- package/dist/docs/assets/guides_mcp-oauth.md.DMNMpXtO.js +0 -28
- package/dist/docs/assets/guides_mcp-oauth.md.DMNMpXtO.lean.js +0 -1
- package/dist/docs/assets/guides_opentelemetry.md._CRfDyzH.js +0 -26
- package/dist/docs/assets/guides_opentelemetry.md._CRfDyzH.lean.js +0 -1
- package/dist/docs/assets/guides_slack.md.DdT8rmsj.js +0 -46
- package/dist/docs/assets/guides_slack.md.DdT8rmsj.lean.js +0 -1
- package/dist/docs/assets/guides_webhooks.md.aQW10HRe.js +0 -225
- package/dist/docs/assets/guides_webhooks.md.aQW10HRe.lean.js +0 -1
- package/dist/docs/assets/hillclimbing.md.Dq4kkVIL.js +0 -1
- package/dist/docs/assets/hillclimbing.md.Dq4kkVIL.lean.js +0 -1
- package/dist/docs/assets/reference_extensions.md.wlFD3cUR.js +0 -62
- package/dist/docs/assets/reference_extensions.md.wlFD3cUR.lean.js +0 -1
- package/dist/docs/assets/troubleshooting.md.BcgNoYtJ.js +0 -1
- package/dist/docs/assets/troubleshooting.md.BcgNoYtJ.lean.js +0 -1
- package/dist/playground/assets/index-BLlKgZtI.css +0 -1
- package/dist/playground/assets/index-CDS5p9sR.js +0 -67
|
@@ -1,320 +1,250 @@
|
|
|
1
1
|
# Slack agents
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
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
|
-
|
|
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
|
-
##
|
|
10
|
+
## Answer a mention or DM
|
|
14
11
|
|
|
15
|
-
|
|
16
|
-
|
|
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
|
-
|
|
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
|
-
##
|
|
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
|
-
|
|
65
|
-
|
|
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
|
|
42
|
+
idle: ["Checking the monorepo...", "Poking Datadog..."],
|
|
75
43
|
},
|
|
76
44
|
},
|
|
77
45
|
});
|
|
78
46
|
```
|
|
79
47
|
|
|
80
|
-
|
|
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
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
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
|
-
|
|
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
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
166
|
-
|
|
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
|
-
|
|
122
|
+
When you create the app, pass `--channel-posts` and invite the bot to
|
|
123
|
+
every channel in the allowlist.
|
|
171
124
|
|
|
172
|
-
|
|
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
|
-
|
|
179
|
-
|
|
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
|
-
|
|
134
|
+
Set `blockExternals: false` only when external collaborators are
|
|
135
|
+
intended users of the agent.
|
|
182
136
|
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
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
|
-
|
|
196
|
-
|
|
197
|
-
|
|
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
|
-
```
|
|
201
|
-
|
|
148
|
+
```ts
|
|
149
|
+
export default slackChannel({
|
|
150
|
+
policy: { respondTo: "author" },
|
|
151
|
+
});
|
|
202
152
|
```
|
|
203
153
|
|
|
204
|
-
|
|
205
|
-
then a threaded streaming reply.
|
|
154
|
+
## Events
|
|
206
155
|
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
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
|
-
|
|
212
|
-
|
|
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
|
-
|
|
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
|
-
|
|
218
|
-
Open **Integrations** and click **Add Slack to this agent**.
|
|
174
|
+
## Thread affinity
|
|
219
175
|
|
|
220
|
-
|
|
221
|
-
|
|
176
|
+
A Slack thread maps to one agent session, so every follow-up in that
|
|
177
|
+
thread resumes the same conversation.
|
|
222
178
|
|
|
223
|
-
|
|
224
|
-
**Retry** after an admin approves.
|
|
179
|
+
## Call Slack from deterministic code via `ctx`
|
|
225
180
|
|
|
226
|
-
|
|
227
|
-
|
|
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
|
-
|
|
185
|
+
- Channel hooks: `ctx.thread.post()`, `ctx.slack.channelId`,
|
|
186
|
+
`ctx.slack.threadTs`
|
|
230
187
|
|
|
231
|
-
|
|
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
|
-
```
|
|
236
|
-
|
|
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
|
-
|
|
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
|
-
|
|
206
|
+
agent-sdk login
|
|
207
|
+
agent-sdk slack create --dir .
|
|
208
|
+
agent-sdk slack doctor --prefix TRIAGE
|
|
243
209
|
```
|
|
244
210
|
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
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
|
-
|
|
257
|
-
`
|
|
258
|
-
|
|
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
|
-
|
|
221
|
+
## Test locally
|
|
261
222
|
|
|
262
|
-
|
|
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
|
-
|
|
265
|
-
|
|
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
|
-
|
|
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
|
-
|
|
233
|
+
- If the tokens are missing, the Slack channel stays idle while the
|
|
234
|
+
rest of `serve` starts normally.
|
|
300
235
|
|
|
301
|
-
|
|
302
|
-
|
|
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
|
-
|
|
311
|
-
|
|
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
|
-
##
|
|
242
|
+
## Related
|
|
317
243
|
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
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
|