@cursor/july 0.1.111 → 0.1.112
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/dist/bin/agent-serve.js +18 -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/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 +142 -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.DxTdhphC.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.QmjDU6Jh.js +1 -0
- package/dist/docs/assets/chunks/{VPLocalSearchBox.CdqoBZJX.js → VPLocalSearchBox.CR3KTF0X.js} +1 -1
- package/dist/docs/assets/chunks/{arc.BVX3ycTn.js → arc.CVVqBOdS.js} +1 -1
- package/dist/docs/assets/chunks/{architectureDiagram-Q4EWVU46.CcChnMxX.js → architectureDiagram-Q4EWVU46.CJHGP4ki.js} +1 -1
- package/dist/docs/assets/chunks/{baseUniq.xwtXO-yt.js → baseUniq.r7UVVRBP.js} +1 -1
- package/dist/docs/assets/chunks/{blockDiagram-DXYQGD6D.CijZ_taK.js → blockDiagram-DXYQGD6D.DKmMaTre.js} +1 -1
- package/dist/docs/assets/chunks/{c4Diagram-AHTNJAMY.0FBvwBvK.js → c4Diagram-AHTNJAMY.DDJsntUO.js} +1 -1
- package/dist/docs/assets/chunks/channel.BjpoSbz_.js +1 -0
- package/dist/docs/assets/chunks/{chunk-4BX2VUAB.CELMmMDA.js → chunk-4BX2VUAB.BK2rKt6W.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-4TB4RGXK.C4bhFtSm.js → chunk-4TB4RGXK.DRLV8RnF.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-55IACEB6.ZnQ9gRRQ.js → chunk-55IACEB6.DaKjxtb7.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-EDXVE4YY.DPlmglG-.js → chunk-EDXVE4YY.C5sPCIT1.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-FMBD7UC4.BrUk8pff.js → chunk-FMBD7UC4.CSGWyNTB.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-OYMX7WX6.CcmWIncu.js → chunk-OYMX7WX6.D5tK9XEr.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-QZHKN3VN.D65-cs8I.js → chunk-QZHKN3VN.BeZGd1UZ.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-YZCP3GAM.qoXZpG9F.js → chunk-YZCP3GAM.U_tfWwQR.js} +1 -1
- package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.BgxOlMHw.js +1 -0
- package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.BgxOlMHw.js +1 -0
- package/dist/docs/assets/chunks/clone.DRuGBKZC.js +1 -0
- package/dist/docs/assets/chunks/{cose-bilkent-S5V4N54A.8rYtqudO.js → cose-bilkent-S5V4N54A.DVeRXIb6.js} +1 -1
- package/dist/docs/assets/chunks/{dagre-KV5264BT.DrRP1fOh.js → dagre-KV5264BT.BpKJAeRZ.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-5BDNPKRD.DHj_xA2_.js → diagram-5BDNPKRD.BQOtrd1Z.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-G4DWMVQ6.Bz_6nAKj.js → diagram-G4DWMVQ6.CSDAhjPI.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-MMDJMWI5.BWA0xSW9.js → diagram-MMDJMWI5.Dpztst2S.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-TYMM5635.CpTJLNJI.js → diagram-TYMM5635.qJHRizHR.js} +1 -1
- package/dist/docs/assets/chunks/{erDiagram-SMLLAGMA.-7AWWSrP.js → erDiagram-SMLLAGMA.vbDotH3l.js} +1 -1
- package/dist/docs/assets/chunks/{flowDiagram-DWJPFMVM.BTnQ742_.js → flowDiagram-DWJPFMVM.CqS_ZQr4.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.DTLdR4pN.js} +1 -1
- package/dist/docs/assets/chunks/{gitGraphDiagram-UUTBAWPF.CZcNTFZd.js → gitGraphDiagram-UUTBAWPF.D04lnbnr.js} +1 -1
- package/dist/docs/assets/chunks/{graph.V2GLaab4.js → graph.BlfqLJsM.js} +1 -1
- package/dist/docs/assets/chunks/{infoDiagram-42DDH7IO.7pZOkCCU.js → infoDiagram-42DDH7IO.tAooImWA.js} +1 -1
- package/dist/docs/assets/chunks/{ishikawaDiagram-UXIWVN3A.DSMo3Qa3.js → ishikawaDiagram-UXIWVN3A.ClUsVqnJ.js} +1 -1
- package/dist/docs/assets/chunks/{journeyDiagram-VCZTEJTY.BNEgWN1S.js → journeyDiagram-VCZTEJTY.C3tUgyCg.js} +1 -1
- package/dist/docs/assets/chunks/{kanban-definition-6JOO6SKY.B-4d4tC7.js → kanban-definition-6JOO6SKY.CtD9-QCe.js} +1 -1
- package/dist/docs/assets/chunks/{layout.Dvbn9nSb.js → layout.D38U-LnT.js} +1 -1
- package/dist/docs/assets/chunks/{linear.D2GM4p4b.js → linear.BJmssyhN.js} +1 -1
- package/dist/docs/assets/chunks/{min.DVBtLK-B.js → min.DNgXoouU.js} +1 -1
- package/dist/docs/assets/chunks/{mindmap-definition-QFDTVHPH.CnJRI55x.js → mindmap-definition-QFDTVHPH.Dcp6cxeu.js} +1 -1
- package/dist/docs/assets/chunks/{pieDiagram-DEJITSTG.CtoaTFlA.js → pieDiagram-DEJITSTG.CLDw6zIs.js} +1 -1
- package/dist/docs/assets/chunks/{quadrantDiagram-34T5L4WZ.DtT24_vN.js → quadrantDiagram-34T5L4WZ.CYaeeY4c.js} +1 -1
- package/dist/docs/assets/chunks/{requirementDiagram-MS252O5E.CjSO4o8f.js → requirementDiagram-MS252O5E.gMYuRpq2.js} +1 -1
- package/dist/docs/assets/chunks/{sankeyDiagram-XADWPNL6.-wWiIVWa.js → sankeyDiagram-XADWPNL6.CZqyHFbc.js} +1 -1
- package/dist/docs/assets/chunks/{sequenceDiagram-FGHM5R23.DSk8s4gX.js → sequenceDiagram-FGHM5R23.BTsCjUDN.js} +1 -1
- package/dist/docs/assets/chunks/{stateDiagram-FHFEXIEX.BFKAsdkN.js → stateDiagram-FHFEXIEX.CftT9mLJ.js} +1 -1
- package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.-43J68xB.js +1 -0
- package/dist/docs/assets/chunks/{theme.C0MctGaz.js → theme.B_7J9ZsV.js} +2 -2
- package/dist/docs/assets/chunks/{timeline-definition-GMOUNBTQ.TUNJbAFe.js → timeline-definition-GMOUNBTQ.DbU3WUNw.js} +1 -1
- package/dist/docs/assets/chunks/{vennDiagram-DHZGUBPP.C-RGNnk4.js → vennDiagram-DHZGUBPP.ixsq-q2u.js} +1 -1
- package/dist/docs/assets/chunks/wardley-RL74JXVD.WRXz-Dux.js +162 -0
- package/dist/docs/assets/chunks/{wardleyDiagram-NUSXRM2D.DH4zt73Y.js → wardleyDiagram-NUSXRM2D.C0ewvgbp.js} +1 -1
- package/dist/docs/assets/chunks/{xychartDiagram-5P7HB3ND.B-3k6bF6.js → xychartDiagram-5P7HB3ND.nAEhF4bO.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.BYvfZ-PO.js +72 -0
- package/dist/docs/assets/evals.md.BYvfZ-PO.lean.js +1 -0
- package/dist/docs/assets/guides_agent-to-agent.md.8oDTfu-E.js +30 -0
- package/dist/docs/assets/guides_agent-to-agent.md.8oDTfu-E.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_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.CmyrlXfY.js} +1 -1
- package/dist/docs/assets/{reference_connections.md.Cb3U_c8n.lean.js → reference_connections.md.CmyrlXfY.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.Ceq-qT8d.js +58 -0
- package/dist/docs/assets/reference_extensions.md.Ceq-qT8d.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.BHsSMMyO.js} +1 -1
- package/dist/docs/assets/{reference_subagents.md.e5qitjJt.lean.js → reference_subagents.md.BHsSMMyO.lean.js} +1 -1
- package/dist/docs/assets/{reference_tools.md.BdCO2aHZ.js → reference_tools.md.BYzUTeVA.js} +1 -1
- package/dist/docs/assets/{reference_tools.md.BdCO2aHZ.lean.js → reference_tools.md.BYzUTeVA.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 +146 -673
- package/dist/docs/guides/agent-to-agent.html +58 -42
- package/dist/docs/guides/agent-to-agent.md +112 -35
- 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/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 +3082 -3104
- package/dist/docs/llms.txt +21 -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 +37 -37
- 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 +127 -199
- 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 +37 -37
- package/dist/docs/reference/tools.html +37 -37
- 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/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/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/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 +17 -0
- package/dist/internal/hosted-delivery-protocol.d.ts.map +1 -1
- package/dist/internal/hosted-delivery-protocol.js +50 -1
- package/dist/internal/hosted-delivery.d.ts.map +1 -1
- package/dist/internal/hosted-delivery.js +8 -0
- 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 +94 -39
- package/dist/internal/session-engine.d.ts.map +1 -1
- package/dist/internal/session-engine.js +11 -5
- 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-B1c1LeIf.js +67 -0
- package/dist/playground/assets/index-CK2LX3iD.css +1 -0
- package/dist/playground/index.html +2 -2
- package/dist/types.d.ts +9 -0
- 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 +147 -674
- package/docs/guides/agent-to-agent.md +113 -36
- 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/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/evals.md +298 -0
- package/docs/reference/extensions.md +128 -200
- package/docs/reference/hooks.md +34 -34
- 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 +1 -1
- package/skills/github/SKILL.md +21 -13
- package/src/bin/agent-serve.ts +22 -0
- package/src/channels/github/github-channel.ts +29 -19
- package/src/channels/slack/agentic-delivery.ts +2 -0
- package/src/channels/slack/dispatch.ts +126 -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/filesystem.ts +168 -65
- package/src/index.ts +3 -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/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 +78 -1
- package/src/internal/hosted-delivery.ts +8 -0
- package/src/internal/init-project.ts +4 -0
- package/src/internal/server.ts +104 -41
- package/src/internal/session-engine.ts +16 -4
- package/src/internal/skill-catalog.ts +69 -0
- package/src/types.ts +9 -0
- 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/chunks/wardley-RL74JXVD.g5efOWmT.js +0 -162
- 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
package/docs/guides/slack.md
CHANGED
|
@@ -1,325 +1,255 @@
|
|
|
1
1
|
---
|
|
2
2
|
title: "Slack"
|
|
3
|
-
description: "
|
|
3
|
+
description: "Wake your agent from mentions, DMs, and watched posts, then reply in the thread."
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Slack agents
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
8
|
+
A Slack agent wakes when someone mentions it, sends it a DM, or posts
|
|
9
|
+
in a channel it watches. From there, it keeps the conversation in one
|
|
10
|
+
thread and can reply all at once, stream the answer live, or decide for
|
|
11
|
+
itself when to post updates.
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
`agent-sdk slack init --manual` when you own it. Commands and flags live
|
|
15
|
-
in the [CLI reference](../reference/cli.md#slack). Coding agents should
|
|
16
|
-
follow [`skills/setup-slack/SKILL.md`](../../skills/setup-slack/SKILL.md).
|
|
13
|
+
Run `agent-sdk slack create --dir .`, then `agent-sdk slack doctor`.
|
|
17
14
|
|
|
18
|
-
##
|
|
15
|
+
## Answer a mention or DM
|
|
19
16
|
|
|
20
|
-
|
|
21
|
-
|
|
17
|
+
Mention the bot in a channel or send it a DM, and it will answer in a
|
|
18
|
+
thread on that message. Any follow-up in the same thread continues the
|
|
19
|
+
conversation where it left off.
|
|
22
20
|
|
|
23
21
|
```ts
|
|
22
|
+
// agent/channels/slack.ts
|
|
24
23
|
import { slackChannel } from "@cursor/july/channels/slack";
|
|
25
24
|
|
|
26
|
-
export default slackChannel();
|
|
27
|
-
```
|
|
28
|
-
|
|
29
|
-
`slackChannel()` reads `SLACK_BOT_TOKEN` and `SLACK_APP_TOKEN`. Pass
|
|
30
|
-
`envPrefix: "WEATHER_AGENT"` to read `WEATHER_AGENT_SLACK_BOT_TOKEN`
|
|
31
|
-
and `WEATHER_AGENT_SLACK_APP_TOKEN` instead. Use a prefix when one
|
|
32
|
-
host serves several Slack bots.
|
|
33
|
-
|
|
34
|
-
A thread is one conversation. The bot answers mentions and DMs. It
|
|
35
|
-
refuses Slack Connect users, guests, and people from other workspaces.
|
|
36
|
-
Missing tokens leave this channel idle. The rest of `serve` still
|
|
37
|
-
starts.
|
|
38
|
-
|
|
39
|
-
## Control who can message the agent
|
|
40
|
-
|
|
41
|
-
External senders are blocked. Set `blockExternals: false` only when
|
|
42
|
-
people outside your org should reach the agent:
|
|
43
|
-
|
|
44
|
-
```ts
|
|
45
25
|
export default slackChannel({
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
```
|
|
49
|
-
|
|
50
|
-
Anyone in the thread can continue it. Restrict follow-ups to the person
|
|
51
|
-
who started the session with `respondTo: "author"`:
|
|
52
|
-
|
|
53
|
-
```ts
|
|
54
|
-
export default slackChannel({
|
|
55
|
-
policy: { respondTo: "author" },
|
|
26
|
+
// TRIAGE_SLACK_BOT_TOKEN and TRIAGE_SLACK_APP_TOKEN
|
|
27
|
+
envPrefix: "TRIAGE",
|
|
56
28
|
});
|
|
57
29
|
```
|
|
58
30
|
|
|
59
|
-
##
|
|
60
|
-
|
|
61
|
-
Slack gives an agent two places to show progress while a turn runs: the
|
|
62
|
-
status chip under the thread ("Running grep…") and the reply message
|
|
63
|
-
itself. It won't fill both at once. While a message is streaming, Slack
|
|
64
|
-
shows its own "is working…" chip and hides any status text you set. Cards
|
|
65
|
-
only exist inside a streamed message. `reply.mode` picks the path.
|
|
66
|
-
|
|
67
|
-
### `post` (default): status chip, then one message
|
|
31
|
+
## Post one reply with a status chip
|
|
68
32
|
|
|
69
|
-
|
|
70
|
-
|
|
33
|
+
By default, Slack shows a status chip beneath the thread while the turn
|
|
34
|
+
runs, cycling through idle messages until reasoning or tool activity
|
|
35
|
+
gives it something more specific to show. When the turn finishes, the
|
|
36
|
+
chip disappears and one complete reply lands in the thread.
|
|
71
37
|
|
|
72
38
|
```ts
|
|
73
39
|
export default slackChannel({
|
|
74
40
|
reply: {
|
|
75
41
|
mode: "post",
|
|
76
42
|
status: {
|
|
43
|
+
// First line of each reasoning block on the chip.
|
|
77
44
|
reasoning: true,
|
|
45
|
+
// Tool names as they start ("Running grep, glob...").
|
|
78
46
|
tools: true,
|
|
79
|
-
idle: ["Checking the monorepo
|
|
47
|
+
idle: ["Checking the monorepo...", "Poking Datadog..."],
|
|
80
48
|
},
|
|
81
49
|
},
|
|
82
50
|
});
|
|
83
51
|
```
|
|
84
52
|
|
|
85
|
-
|
|
86
|
-
known, up to 5 lines of 50 characters. Pass a function to `tools` to write
|
|
87
|
-
your own line from the calls in flight.
|
|
53
|
+
## Stream a live reply
|
|
88
54
|
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
cards. Both are off unless you turn them on.
|
|
55
|
+
In stream mode, the reply appears immediately and grows as the model
|
|
56
|
+
writes. Slack shows its generic "is working..." state until the stream
|
|
57
|
+
ends, while optional reasoning and tool cards keep progress inside the
|
|
58
|
+
same message.
|
|
94
59
|
|
|
95
60
|
```ts
|
|
96
61
|
export default slackChannel({
|
|
97
62
|
reply: {
|
|
98
63
|
mode: "stream",
|
|
64
|
+
// Thinking card inside the streamed message.
|
|
99
65
|
reasoningCard: true,
|
|
100
|
-
|
|
66
|
+
// One card per tool in that same message.
|
|
67
|
+
toolCards: true,
|
|
101
68
|
},
|
|
102
|
-
toolLabels: { grep: "Searching code", read: "Reading files" },
|
|
103
69
|
});
|
|
104
70
|
```
|
|
105
71
|
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
the same summary the playground shows in a tool's header (the grep pattern,
|
|
119
|
-
the file path, the shell command), and the group expands the same way the
|
|
120
|
-
reasoning card does. `collapsible: false` keeps cards to their titles. On a
|
|
121
|
-
collapsible card, `details(call)` returns the line to add when a call starts
|
|
122
|
-
and `output(result)` the text to add when it finishes.
|
|
123
|
-
|
|
124
|
-
`toolLabels` renames tools everywhere they appear: the chip, card titles,
|
|
125
|
-
and the default `Running …` line.
|
|
126
|
-
|
|
127
|
-
### `agentic`: the agent posts
|
|
128
|
-
|
|
129
|
-
Opt in when the agent should own every message in the thread. Mentions
|
|
130
|
-
and DMs still start turns. The channel does not write the status chip,
|
|
131
|
-
tool cards, reasoning cards, or assistant text. Approval cards
|
|
132
|
-
still post if you set `toolApprovals`.
|
|
133
|
-
|
|
134
|
-
Mount `@cursor/july/extensions/slack-communication` so the agent can
|
|
135
|
-
talk. The extension adds typed tools and the `slack-voice` skill. The
|
|
136
|
-
channel watches those tool names (bare or `<namespace>__<name>`) and
|
|
137
|
-
calls Slack through the channel client after a successful result. A
|
|
138
|
-
rejected call, a dry-run stub, or a turn that never calls
|
|
139
|
-
`post-update` stays silent. The framework does not also finalize
|
|
140
|
-
assistant text.
|
|
72
|
+
## Let the agent own every message
|
|
73
|
+
|
|
74
|
+
Use agentic mode when the agent should decide how to communicate, not
|
|
75
|
+
only what to say. The bot reacts to the parent message with eyes and
|
|
76
|
+
shows a thinking chip, then the agent chooses when to post progress and
|
|
77
|
+
how to deliver the final reply.
|
|
78
|
+
|
|
79
|
+
`slack-communication` gives those posts a Slack-aware voice by default:
|
|
80
|
+
lead with the result, share progress when the picture changes, and keep
|
|
81
|
+
tool chatter off the thread. Use `tone` for the rest of the
|
|
82
|
+
communication contract, including voice, level of detail, formatting,
|
|
83
|
+
and how updates should be structured.
|
|
141
84
|
|
|
142
85
|
```ts
|
|
143
86
|
// agent/extensions/slack.ts
|
|
144
87
|
import slackCommunication from "@cursor/july/extensions/slack-communication";
|
|
145
88
|
|
|
146
|
-
export default slackCommunication(
|
|
89
|
+
export default slackCommunication({
|
|
90
|
+
tone:
|
|
91
|
+
"Be concise but warm. Use bullets for evidence and end with the next action.",
|
|
92
|
+
});
|
|
147
93
|
```
|
|
148
94
|
|
|
149
95
|
```ts
|
|
150
|
-
// agent/channels/slack.ts
|
|
151
96
|
export default slackChannel({
|
|
97
|
+
// `post-update` writes mid-turn progress and the final reply.
|
|
152
98
|
reply: { mode: "agentic" },
|
|
153
99
|
});
|
|
154
100
|
```
|
|
155
101
|
|
|
156
|
-
|
|
157
|
-
| --- | --- | --- |
|
|
158
|
-
| `post-update` | Mid-turn progress and the final reply (`chat.postMessage` / `chat.update`) | `chat:write` |
|
|
159
|
-
| `post-card` | Collapsible task card (`chat.startStream` / `chat.appendStream`) | `chat:write` |
|
|
160
|
-
| `post-file` | Workspace file on the reply (`files.getUploadURLExternal`) | `files:write` |
|
|
161
|
-
| `react` | Emoji on a message `ts` (`reactions.add`). Omit `ts` for the thread root. | `reactions:write` |
|
|
162
|
-
| `set-status` | Subtitle chip (`assistant.threads.setStatus`). Empty string clears it. | `assistant:write` |
|
|
163
|
-
|
|
164
|
-
`agent-sdk slack create` already grants those scopes. Do not add a
|
|
165
|
-
freeform Slack method tool.
|
|
102
|
+
## Wake on a channel post
|
|
166
103
|
|
|
167
|
-
|
|
104
|
+
This example watches `#triage-alerts`, so any substantial top-level
|
|
105
|
+
message starts a thread even when nobody mentions the bot. The length
|
|
106
|
+
guard filters out short posts before they can start a turn.
|
|
168
107
|
|
|
169
108
|
```ts
|
|
170
|
-
export default
|
|
171
|
-
|
|
109
|
+
export default slackChannel({
|
|
110
|
+
engagement: {
|
|
111
|
+
channelPosts: {
|
|
112
|
+
allow: ["#triage-alerts"],
|
|
113
|
+
posts: "top-level",
|
|
114
|
+
debounceMs: 15_000,
|
|
115
|
+
},
|
|
116
|
+
},
|
|
117
|
+
onChannelPost: async (_ctx, message) => {
|
|
118
|
+
if (message.markdown.length <= 20) {
|
|
119
|
+
return null;
|
|
120
|
+
}
|
|
121
|
+
// `{}` starts a model turn as the sender.
|
|
122
|
+
return {};
|
|
123
|
+
},
|
|
172
124
|
});
|
|
173
125
|
```
|
|
174
126
|
|
|
175
|
-
|
|
127
|
+
When you create the app, pass `--channel-posts` and invite the bot to
|
|
128
|
+
every channel in the allowlist.
|
|
176
129
|
|
|
177
|
-
|
|
178
|
-
`reply: { mode: "stream", toolCards: { group: "per-call", collapsible:
|
|
179
|
-
false } }`, the title-only cards it used to show. `loadingMessages` moves
|
|
180
|
-
to `reply.status.idle`. The old options still work and `agent-sdk validate`
|
|
181
|
-
prints the rewrite for each one.
|
|
130
|
+
## Control who can message
|
|
182
131
|
|
|
183
|
-
|
|
184
|
-
|
|
132
|
+
By default, people outside your workspace get no reply. This matters
|
|
133
|
+
most in Slack Connect channels, where external collaborators share the
|
|
134
|
+
channel and can mention or reply to bots installed by your
|
|
135
|
+
organization. Keeping `blockExternals` on prevents them from starting
|
|
136
|
+
or steering an agent session and, through it, directing any tools
|
|
137
|
+
available to the agent.
|
|
185
138
|
|
|
186
|
-
|
|
139
|
+
Set `blockExternals: false` only when external collaborators are
|
|
140
|
+
intended users of the agent.
|
|
187
141
|
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
### Provision with the CLI
|
|
194
|
-
|
|
195
|
-
```bash
|
|
196
|
-
agent-sdk slack create --dir .
|
|
197
|
-
agent-sdk slack create --dir . --prod
|
|
142
|
+
```ts
|
|
143
|
+
export default slackChannel({
|
|
144
|
+
// Let external collaborators start and continue agent sessions.
|
|
145
|
+
policy: { blockExternals: false },
|
|
146
|
+
});
|
|
198
147
|
```
|
|
199
148
|
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
`agent-sdk slack doctor --prefix MY_AGENT` and serve:
|
|
149
|
+
Anyone in a thread can continue its session by default. If the
|
|
150
|
+
conversation should stay between the agent and its original author,
|
|
151
|
+
set `respondTo: "author"`.
|
|
204
152
|
|
|
205
|
-
```
|
|
206
|
-
|
|
153
|
+
```ts
|
|
154
|
+
export default slackChannel({
|
|
155
|
+
policy: { respondTo: "author" },
|
|
156
|
+
});
|
|
207
157
|
```
|
|
208
158
|
|
|
209
|
-
|
|
210
|
-
then a threaded streaming reply.
|
|
159
|
+
## Events
|
|
211
160
|
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
161
|
+
Mentions and DMs wake the agent automatically, while `onChannelPost`
|
|
162
|
+
runs for messages in watched channels. Declare `onAppMention` or
|
|
163
|
+
`onDirectMessage` when you need to filter those default wakes; each
|
|
164
|
+
handler returns `{}` to start a turn or `null` to skip it.
|
|
215
165
|
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
replaces that app's manifest and tokens.
|
|
166
|
+
For example, this handler only starts a turn for DMs prefixed with
|
|
167
|
+
`triage:`:
|
|
219
168
|
|
|
220
|
-
|
|
169
|
+
```ts
|
|
170
|
+
onDirectMessage: async (_ctx, message) => {
|
|
171
|
+
if (!message.markdown.startsWith("triage:")) {
|
|
172
|
+
return null;
|
|
173
|
+
}
|
|
174
|
+
// `{}` starts a model turn as the sender.
|
|
175
|
+
return {};
|
|
176
|
+
},
|
|
177
|
+
```
|
|
221
178
|
|
|
222
|
-
|
|
223
|
-
Open **Integrations** and click **Add Slack to this agent**.
|
|
179
|
+
## Thread affinity
|
|
224
180
|
|
|
225
|
-
|
|
226
|
-
|
|
181
|
+
A Slack thread maps to one agent session, so every follow-up in that
|
|
182
|
+
thread resumes the same conversation.
|
|
227
183
|
|
|
228
|
-
|
|
229
|
-
**Retry** after an admin approves.
|
|
184
|
+
## Call Slack from deterministic code via `ctx`
|
|
230
185
|
|
|
231
|
-
|
|
232
|
-
|
|
186
|
+
Channel hooks can post before starting the model turn, which is useful
|
|
187
|
+
for deterministic acknowledgements such as `Looking at this now.` The
|
|
188
|
+
same bot credential also lets tools call Slack later in the turn:
|
|
233
189
|
|
|
234
|
-
|
|
190
|
+
- Channel hooks: `ctx.thread.post()`, `ctx.slack.channelId`,
|
|
191
|
+
`ctx.slack.threadTs`
|
|
235
192
|
|
|
236
|
-
|
|
237
|
-
and Slack manifests. When Slack CLI (`~/.slack/bin/slack`) is logged
|
|
238
|
-
in, it installs the app. When it isn't, install the app yourself.
|
|
193
|
+
- Tools: `ctx.host.slack.getClient()`
|
|
239
194
|
|
|
240
|
-
```
|
|
241
|
-
|
|
195
|
+
```ts
|
|
196
|
+
onAppMention: async (ctx, message) => {
|
|
197
|
+
if (message.markdown.trim() === "") {
|
|
198
|
+
return null;
|
|
199
|
+
}
|
|
200
|
+
await ctx.thread.post("Looking at this now.");
|
|
201
|
+
return {};
|
|
202
|
+
},
|
|
242
203
|
```
|
|
243
204
|
|
|
244
|
-
|
|
205
|
+
Use the IDs on the hook `ctx` when handling an event, and
|
|
206
|
+
`ctx.host.slack.getClient()` when a tool needs the Slack Web API.
|
|
207
|
+
|
|
208
|
+
## Connect
|
|
245
209
|
|
|
246
210
|
```bash
|
|
247
|
-
|
|
211
|
+
agent-sdk login
|
|
212
|
+
agent-sdk slack create --dir .
|
|
213
|
+
agent-sdk slack doctor --prefix TRIAGE
|
|
248
214
|
```
|
|
249
215
|
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
app the same way.
|
|
255
|
-
|
|
256
|
-
Or paste `.slack/manifest.dev.json` at
|
|
257
|
-
[api.slack.com/apps](https://api.slack.com/apps) (**Create New App** →
|
|
258
|
-
**From a manifest**). Repeat with `.slack/manifest.prod.json`. Dev and
|
|
259
|
-
prod are separate Slack apps.
|
|
216
|
+
After you sign in, `slack create` opens **Add Slack to this agent** in
|
|
217
|
+
the browser and writes the resulting tokens to `.env.local` without
|
|
218
|
+
printing them. You can open the same wizard from **Integrations** on
|
|
219
|
+
[Deployed Agents](https://cursor.com/dashboard).
|
|
260
220
|
|
|
261
|
-
|
|
262
|
-
`
|
|
263
|
-
|
|
221
|
+
If you already own the Slack app, initialize it with
|
|
222
|
+
`agent-sdk slack init --manual --dir . --name "Triage"` and follow the
|
|
223
|
+
[Slack setup skill](../../skills/setup-slack/SKILL.md) for installation
|
|
224
|
+
and tokens.
|
|
264
225
|
|
|
265
|
-
|
|
226
|
+
## Test locally
|
|
266
227
|
|
|
267
|
-
|
|
228
|
+
Run `doctor` first to catch missing credentials, then start the agent
|
|
229
|
+
and send it the same mention or DM a teammate would.
|
|
268
230
|
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
```ts
|
|
273
|
-
export default slackChannel({
|
|
274
|
-
envPrefix: "TRIAGE",
|
|
275
|
-
engagement: {
|
|
276
|
-
channelPosts: {
|
|
277
|
-
allow: ["#triage-alerts"],
|
|
278
|
-
posts: "top-level",
|
|
279
|
-
debounceMs: 15_000,
|
|
280
|
-
},
|
|
281
|
-
},
|
|
282
|
-
onChannelPost: async (_ctx, message) => {
|
|
283
|
-
return message.markdown.length > 20 ? {} : null;
|
|
284
|
-
},
|
|
285
|
-
});
|
|
231
|
+
```bash
|
|
232
|
+
agent-sdk slack doctor --prefix TRIAGE
|
|
233
|
+
agent-sdk serve --dir . --dev
|
|
286
234
|
```
|
|
287
235
|
|
|
288
|
-
|
|
289
|
-
the Slack app receives those events. The bot must be in each watched
|
|
290
|
-
channel. `allow: ["*"]` watches every joined channel.
|
|
291
|
-
|
|
292
|
-
Set `includeBotPosts: true` for alert feeds and other bots. This app
|
|
293
|
-
never wakes on its own posts.
|
|
294
|
-
|
|
295
|
-
## Prepare work on the host
|
|
296
|
-
|
|
297
|
-
Mention and DM handlers may return a prepared `message`,
|
|
298
|
-
`workspaceFiles`, or `cloud` block. Use the same host-prep pattern as
|
|
299
|
-
[custom channels](./webhooks.md#prepare-on-the-host-then-hand-off).
|
|
300
|
-
|
|
301
|
-
Slack file uploads attach automatically. Images become vision input.
|
|
302
|
-
Supported documents become workspace files for the turn.
|
|
236
|
+
## Practices
|
|
303
237
|
|
|
304
|
-
|
|
238
|
+
- If the tokens are missing, the Slack channel stays idle while the
|
|
239
|
+
rest of `serve` starts normally.
|
|
305
240
|
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
```ts
|
|
310
|
-
export default slackChannel({
|
|
311
|
-
toolApprovals: true,
|
|
312
|
-
});
|
|
313
|
-
```
|
|
241
|
+
- Keep `channelPosts.allow` narrow because each qualifying post can
|
|
242
|
+
start a model turn.
|
|
314
243
|
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
still uses the full input, so review sensitive tools in the playground
|
|
318
|
-
when the card may hide fields. The lifecycle is in
|
|
319
|
-
[Gate a tool on human approval](../reference/tools.md#gate-a-tool-on-human-approval).
|
|
244
|
+
- Set `envPrefix` when two Slack bots share a host so the token names
|
|
245
|
+
do not collide.
|
|
320
246
|
|
|
321
|
-
##
|
|
247
|
+
## Related
|
|
322
248
|
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
249
|
+
- [CLI reference](../reference/cli.md#slack): `slack create`,
|
|
250
|
+
`doctor`, `init --manual`
|
|
251
|
+
- [`skills/setup-slack/SKILL.md`](../../skills/setup-slack/SKILL.md):
|
|
252
|
+
the companion skill for coding agents
|
|
253
|
+
- [Webhooks and custom channels](./webhooks.md): host prep on mention
|
|
254
|
+
and DM handlers
|
|
255
|
+
- [Evals](../evals.md): freeze a mention as a regression check
|