@cursor/july 0.1.90 → 0.1.92
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/AGENTS.md +12 -0
- package/README.md +8 -7
- package/dist/channels/slack/channel-watch.d.ts +1 -1
- package/dist/channels/slack/channel-watch.js +1 -1
- package/dist/channels/slack/slack-channel.js +1 -1
- package/dist/channels/slack/types.d.ts +2 -4
- package/dist/channels/slack/types.d.ts.map +1 -1
- package/dist/docs/404.html +5 -3
- package/dist/docs/ab.html +9 -7
- package/dist/docs/ab.md +338 -0
- package/dist/docs/assets/{ab.md.DYjwREAP.js → ab.md.CVzWxLoB.js} +1 -1
- package/dist/docs/assets/{ab.md.DYjwREAP.lean.js → ab.md.CVzWxLoB.lean.js} +1 -1
- package/dist/docs/assets/{app.wiNkt6G7.js → app.Bci6CM9E.js} +1 -1
- package/dist/docs/assets/{building-with-agents.md.PeZaZA1P.js → building-with-agents.md.DH8A_cHA.js} +1 -1
- package/dist/docs/assets/{building-with-agents.md.PeZaZA1P.lean.js → building-with-agents.md.DH8A_cHA.lean.js} +1 -1
- package/dist/docs/assets/chunks/@localSearchIndexroot.Dv-Q0XtU.js +1 -0
- package/dist/docs/assets/chunks/{VPLocalSearchBox.ByhUGu47.js → VPLocalSearchBox.BCPT6xA-.js} +1 -1
- package/dist/docs/assets/chunks/{framework.CAZyNGu9.js → framework.BCISBCiQ.js} +1 -1
- package/dist/docs/assets/chunks/theme.BEA8BF3c.js +2 -0
- package/dist/docs/assets/{concepts.md.2NfkGjqM.js → concepts.md.CRfU3bVg.js} +1 -1
- package/dist/docs/assets/{concepts.md.2NfkGjqM.lean.js → concepts.md.CRfU3bVg.lean.js} +1 -1
- package/dist/docs/assets/{deployment.md.B8kW-h7P.js → deployment.md.DX_hc3ze.js} +6 -5
- package/dist/docs/assets/{deployment.md.B8kW-h7P.lean.js → deployment.md.DX_hc3ze.lean.js} +1 -1
- package/dist/docs/assets/{evals.md.CVe_O75-.js → evals.md.a0SMN6r9.js} +3 -3
- package/dist/docs/assets/{evals.md.CVe_O75-.lean.js → evals.md.a0SMN6r9.lean.js} +1 -1
- package/dist/docs/assets/{example-agents_approval-buddy.md.CIiZ9coo.js → example-agents_approval-buddy.md.DNL83puR.js} +1 -1
- package/dist/docs/assets/{example-agents_approval-buddy.md.CIiZ9coo.lean.js → example-agents_approval-buddy.md.DNL83puR.lean.js} +1 -1
- package/dist/docs/assets/{example-agents_benny.md.B-LIDGja.js → example-agents_benny.md.C40vHRLc.js} +1 -1
- package/dist/docs/assets/{example-agents_benny.md.B-LIDGja.lean.js → example-agents_benny.md.C40vHRLc.lean.js} +1 -1
- package/dist/docs/assets/{example-agents_bugbot.md.Dp5JqHSQ.js → example-agents_bugbot.md.BRGMi9O2.js} +1 -1
- package/dist/docs/assets/{example-agents_bugbot.md.Dp5JqHSQ.lean.js → example-agents_bugbot.md.BRGMi9O2.lean.js} +1 -1
- package/dist/docs/assets/{example-agents_codebase-wiki.md.D-lteFf0.js → example-agents_codebase-wiki.md.Dftj_tPp.js} +1 -1
- package/dist/docs/assets/{example-agents_codebase-wiki.md.D-lteFf0.lean.js → example-agents_codebase-wiki.md.Dftj_tPp.lean.js} +1 -1
- package/dist/docs/assets/{example-agents_codeowners-review.md.BU2ZXLf-.js → example-agents_codeowners-review.md.Bfta-lBU.js} +1 -1
- package/dist/docs/assets/{example-agents_codeowners-review.md.BU2ZXLf-.lean.js → example-agents_codeowners-review.md.Bfta-lBU.lean.js} +1 -1
- package/dist/docs/assets/{example-agents_concierge.md.DA2al_NK.js → example-agents_concierge.md.MrKpQndp.js} +1 -1
- package/dist/docs/assets/{example-agents_concierge.md.DA2al_NK.lean.js → example-agents_concierge.md.MrKpQndp.lean.js} +1 -1
- package/dist/docs/assets/{example-agents_fsd.md.ZeGEpAw_.js → example-agents_fsd.md.ZWHWWZPE.js} +1 -1
- package/dist/docs/assets/{example-agents_fsd.md.ZeGEpAw_.lean.js → example-agents_fsd.md.ZWHWWZPE.lean.js} +1 -1
- package/dist/docs/assets/example-agents_index.md.QZ8mhr6n.js +2 -0
- package/dist/docs/assets/{example-agents_index.md.xmJ87d_3.lean.js → example-agents_index.md.QZ8mhr6n.lean.js} +1 -1
- package/dist/docs/assets/{example-agents_knowledge-base.md.IneynQSR.js → example-agents_knowledge-base.md.DqKqHQ9u.js} +1 -1
- package/dist/docs/assets/{example-agents_knowledge-base.md.IneynQSR.lean.js → example-agents_knowledge-base.md.DqKqHQ9u.lean.js} +1 -1
- package/dist/docs/assets/{example-agents_oncall.md.CBmyuAKc.js → example-agents_oncall.md.DK4XkYTd.js} +1 -1
- package/dist/docs/assets/{example-agents_oncall.md.CBmyuAKc.lean.js → example-agents_oncall.md.DK4XkYTd.lean.js} +1 -1
- package/dist/docs/assets/{example-agents_security-reviewer.md.DBL1TwtP.js → example-agents_security-reviewer.md.Bai6D0Ee.js} +4 -4
- package/dist/docs/assets/{example-agents_security-reviewer.md.DBL1TwtP.lean.js → example-agents_security-reviewer.md.Bai6D0Ee.lean.js} +1 -1
- package/dist/docs/assets/{example-agents_slack-agent.md.06jQXTAI.js → example-agents_slack-agent.md.D7Kdj5BV.js} +1 -1
- package/dist/docs/assets/{example-agents_slack-agent.md.06jQXTAI.lean.js → example-agents_slack-agent.md.D7Kdj5BV.lean.js} +1 -1
- package/dist/docs/assets/{example-agents_weather-agent.md.DC3lINjo.js → example-agents_weather-agent.md.lVEAbWFf.js} +5 -5
- package/dist/docs/assets/example-agents_weather-agent.md.lVEAbWFf.lean.js +1 -0
- package/dist/docs/assets/{guides_agent-to-agent.md.Bmbxy-FA.js → guides_agent-to-agent.md.BCeVdJRJ.js} +1 -1
- package/dist/docs/assets/{guides_agent-to-agent.md.Bmbxy-FA.lean.js → guides_agent-to-agent.md.BCeVdJRJ.lean.js} +1 -1
- package/dist/docs/assets/{guides_cloud-runtime.md.CbklWfzh.js → guides_cloud-runtime.md.BSMLIBHr.js} +1 -1
- package/dist/docs/assets/{guides_cloud-runtime.md.CbklWfzh.lean.js → guides_cloud-runtime.md.BSMLIBHr.lean.js} +1 -1
- package/dist/docs/assets/{guides_convert-automation.md.BhMzTkE5.js → guides_convert-automation.md.D06eIzea.js} +1 -1
- package/dist/docs/assets/{guides_convert-automation.md.BhMzTkE5.lean.js → guides_convert-automation.md.D06eIzea.lean.js} +1 -1
- package/dist/docs/assets/{guides_github.md.CLLQJKRB.js → guides_github.md.Cdt1s2QC.js} +4 -4
- package/dist/docs/assets/{guides_github.md.CLLQJKRB.lean.js → guides_github.md.Cdt1s2QC.lean.js} +1 -1
- package/dist/docs/assets/{guides_human-in-the-loop.md.Cf8kIIqC.js → guides_human-in-the-loop.md.By1G2T3_.js} +1 -1
- package/dist/docs/assets/{guides_human-in-the-loop.md.Cf8kIIqC.lean.js → guides_human-in-the-loop.md.By1G2T3_.lean.js} +1 -1
- package/dist/docs/assets/{guides_mcp-oauth.md.CzEB6RaG.js → guides_mcp-oauth.md.Du0f7pGU.js} +1 -1
- package/dist/docs/assets/{guides_mcp-oauth.md.CzEB6RaG.lean.js → guides_mcp-oauth.md.Du0f7pGU.lean.js} +1 -1
- package/dist/docs/assets/{guides_opentelemetry.md.Csn7ZI25.js → guides_opentelemetry.md.bmPmkvJu.js} +1 -1
- package/dist/docs/assets/{guides_opentelemetry.md.Csn7ZI25.lean.js → guides_opentelemetry.md.bmPmkvJu.lean.js} +1 -1
- package/dist/docs/assets/{guides_slack.md.DP4H75WP.js → guides_slack.md.DiUmk_Oi.js} +5 -5
- package/dist/docs/assets/{guides_slack.md.DP4H75WP.lean.js → guides_slack.md.DiUmk_Oi.lean.js} +1 -1
- package/dist/docs/assets/{guides_webhooks.md.DB-r_er9.js → guides_webhooks.md.BpnIdO0i.js} +5 -6
- package/dist/docs/assets/{guides_webhooks.md.DB-r_er9.lean.js → guides_webhooks.md.BpnIdO0i.lean.js} +1 -1
- package/dist/docs/assets/{hillclimbing.md.yXqdlv2R.js → hillclimbing.md.ywF3yDAd.js} +1 -1
- package/dist/docs/assets/{hillclimbing.md.yXqdlv2R.lean.js → hillclimbing.md.ywF3yDAd.lean.js} +1 -1
- package/dist/docs/assets/index.md.BAaMXLFd.js +5 -0
- package/dist/docs/assets/{index.md.DhRHS_-L.lean.js → index.md.BAaMXLFd.lean.js} +1 -1
- package/dist/docs/assets/{quickstart.md.DZxBu44y.js → quickstart.md.DsrarzEg.js} +1 -1
- package/dist/docs/assets/{quickstart.md.DZxBu44y.lean.js → quickstart.md.DsrarzEg.lean.js} +1 -1
- package/dist/docs/assets/{reference_agent-config.md.CTWp4DnU.js → reference_agent-config.md.Bqylgw50.js} +1 -1
- package/dist/docs/assets/{reference_agent-config.md.CTWp4DnU.lean.js → reference_agent-config.md.Bqylgw50.lean.js} +1 -1
- package/dist/docs/assets/{reference_artifacts.md.BGG4bZo-.js → reference_artifacts.md.Dior32Qw.js} +1 -1
- package/dist/docs/assets/{reference_artifacts.md.BGG4bZo-.lean.js → reference_artifacts.md.Dior32Qw.lean.js} +1 -1
- package/dist/docs/assets/{reference_channels.md.CboFd5IH.js → reference_channels.md.DQZjCnyh.js} +2 -2
- package/dist/docs/assets/{reference_channels.md.CboFd5IH.lean.js → reference_channels.md.DQZjCnyh.lean.js} +1 -1
- package/dist/docs/assets/{reference_cli.md.TAaYU8br.js → reference_cli.md.B7GkAJRC.js} +8 -7
- package/dist/docs/assets/{reference_cli.md.TAaYU8br.lean.js → reference_cli.md.B7GkAJRC.lean.js} +1 -1
- package/dist/docs/assets/{reference_connections.md.Cu3N-S3Q.js → reference_connections.md.DYidrb-j.js} +5 -5
- package/dist/docs/assets/{reference_connections.md.Cu3N-S3Q.lean.js → reference_connections.md.DYidrb-j.lean.js} +1 -1
- package/dist/docs/assets/{reference_hooks.md.DJE5DXcT.js → reference_hooks.md.B9FSgdDe.js} +1 -1
- package/dist/docs/assets/{reference_hooks.md.DJE5DXcT.lean.js → reference_hooks.md.B9FSgdDe.lean.js} +1 -1
- package/dist/docs/assets/{reference_http-api.md.DMbdFGVQ.js → reference_http-api.md.CSHVobzG.js} +4 -4
- package/dist/docs/assets/{reference_http-api.md.DMbdFGVQ.lean.js → reference_http-api.md.CSHVobzG.lean.js} +1 -1
- package/dist/docs/assets/{reference_instructions.md.CgoV-YEb.js → reference_instructions.md.DhNCOl7r.js} +1 -1
- package/dist/docs/assets/{reference_instructions.md.CgoV-YEb.lean.js → reference_instructions.md.DhNCOl7r.lean.js} +1 -1
- package/dist/docs/assets/{reference_playground.md.CPZhfYaO.js → reference_playground.md.Dfb92yQf.js} +1 -1
- package/dist/docs/assets/{reference_playground.md.CPZhfYaO.lean.js → reference_playground.md.Dfb92yQf.lean.js} +1 -1
- package/dist/docs/assets/{reference_project-layout.md.CueaKpjr.js → reference_project-layout.md.CwkSbEWT.js} +1 -1
- package/dist/docs/assets/{reference_project-layout.md.CueaKpjr.lean.js → reference_project-layout.md.CwkSbEWT.lean.js} +1 -1
- package/dist/docs/assets/{reference_prompt.md.BaiweQxE.js → reference_prompt.md.DZUMtLPD.js} +1 -1
- package/dist/docs/assets/{reference_prompt.md.BaiweQxE.lean.js → reference_prompt.md.DZUMtLPD.lean.js} +1 -1
- package/dist/docs/assets/{reference_schedules.md.gmfYzf_I.js → reference_schedules.md.DNipebiG.js} +1 -1
- package/dist/docs/assets/{reference_schedules.md.gmfYzf_I.lean.js → reference_schedules.md.DNipebiG.lean.js} +1 -1
- package/dist/docs/assets/{reference_sessions.md.B0DdlM-K.js → reference_sessions.md.tUFzz98S.js} +1 -1
- package/dist/docs/assets/{reference_sessions.md.B0DdlM-K.lean.js → reference_sessions.md.tUFzz98S.lean.js} +1 -1
- package/dist/docs/assets/{reference_skills.md.BRF2nDv9.js → reference_skills.md.B5ZEuHfG.js} +1 -1
- package/dist/docs/assets/{reference_skills.md.BRF2nDv9.lean.js → reference_skills.md.B5ZEuHfG.lean.js} +1 -1
- package/dist/docs/assets/{reference_subagents.md.DSrGLIuB.js → reference_subagents.md.Xoav0AII.js} +1 -1
- package/dist/docs/assets/{reference_subagents.md.DSrGLIuB.lean.js → reference_subagents.md.Xoav0AII.lean.js} +1 -1
- package/dist/docs/assets/{reference_tools.md.XmeFP_3d.js → reference_tools.md.wpaJtHn6.js} +2 -3
- package/dist/docs/assets/{reference_tools.md.XmeFP_3d.lean.js → reference_tools.md.wpaJtHn6.lean.js} +1 -1
- package/dist/docs/assets/{scaffolding-agents.md.BpMFXv2J.js → scaffolding-agents.md.CRDDUtYJ.js} +1 -1
- package/dist/docs/assets/{scaffolding-agents.md.BpMFXv2J.lean.js → scaffolding-agents.md.CRDDUtYJ.lean.js} +1 -1
- package/dist/docs/assets/{storage.md.ks1u64_R.js → storage.md.JbjlHWZ6.js} +1 -1
- package/dist/docs/assets/{storage.md.ks1u64_R.lean.js → storage.md.JbjlHWZ6.lean.js} +1 -1
- package/dist/docs/assets/{style.kTsvp4pE.css → style.BRuM8477.css} +1 -1
- package/dist/docs/assets/{templates_agentic-owners.md.BkTLORaU.js → templates_agentic-owners.md.DSJSIpWU.js} +1 -1
- package/dist/docs/assets/{templates_agentic-owners.md.BkTLORaU.lean.js → templates_agentic-owners.md.DSJSIpWU.lean.js} +1 -1
- package/dist/docs/assets/{templates_demo.md.Bgd6MBaZ.js → templates_demo.md.DhFcWN6j.js} +1 -1
- package/dist/docs/assets/{templates_demo.md.Bgd6MBaZ.lean.js → templates_demo.md.DhFcWN6j.lean.js} +1 -1
- package/dist/docs/assets/{templates_pr-autofixer.md.DcmoeUNZ.js → templates_pr-autofixer.md.1HAR3RXE.js} +1 -1
- package/dist/docs/assets/{templates_pr-autofixer.md.DcmoeUNZ.lean.js → templates_pr-autofixer.md.1HAR3RXE.lean.js} +1 -1
- package/dist/docs/assets/{templates_security-reviewer.md.C0yIUaYs.js → templates_security-reviewer.md.ByFyRta2.js} +1 -1
- package/dist/docs/assets/{templates_security-reviewer.md.C0yIUaYs.lean.js → templates_security-reviewer.md.ByFyRta2.lean.js} +1 -1
- package/dist/docs/assets/{templates_triage.md.DWuQ1bZz.js → templates_triage.md.CVlpctKS.js} +2 -2
- package/dist/docs/assets/{templates_triage.md.DWuQ1bZz.lean.js → templates_triage.md.CVlpctKS.lean.js} +1 -1
- package/dist/docs/assets/troubleshooting.md.DYECCZiJ.js +1 -0
- package/dist/docs/assets/{troubleshooting.md.KgmmaCgw.lean.js → troubleshooting.md.DYECCZiJ.lean.js} +1 -1
- package/dist/docs/building-with-agents.html +9 -7
- package/dist/docs/building-with-agents.md +124 -0
- package/dist/docs/concepts.html +9 -7
- package/dist/docs/concepts.md +174 -0
- package/dist/docs/deployment.html +13 -10
- package/dist/docs/deployment.md +464 -0
- package/dist/docs/evals.html +10 -8
- package/dist/docs/evals.md +481 -0
- package/dist/docs/example-agents/approval-buddy.html +9 -7
- package/dist/docs/example-agents/approval-buddy.md +266 -0
- package/dist/docs/example-agents/benny.html +9 -7
- package/dist/docs/example-agents/benny.md +182 -0
- package/dist/docs/example-agents/bugbot.html +9 -7
- package/dist/docs/example-agents/bugbot.md +229 -0
- package/dist/docs/example-agents/codebase-wiki.html +9 -7
- package/dist/docs/example-agents/codebase-wiki.md +170 -0
- package/dist/docs/example-agents/codeowners-review.html +9 -7
- package/dist/docs/example-agents/codeowners-review.md +192 -0
- package/dist/docs/example-agents/concierge.html +9 -7
- package/dist/docs/example-agents/concierge.md +201 -0
- package/dist/docs/example-agents/fsd.html +9 -7
- package/dist/docs/example-agents/fsd.md +329 -0
- package/dist/docs/example-agents/index.html +9 -7
- package/dist/docs/example-agents/index.md +102 -0
- package/dist/docs/example-agents/knowledge-base.html +9 -7
- package/dist/docs/example-agents/knowledge-base.md +168 -0
- package/dist/docs/example-agents/oncall.html +9 -7
- package/dist/docs/example-agents/oncall.md +212 -0
- package/dist/docs/example-agents/security-reviewer.html +12 -10
- package/dist/docs/example-agents/security-reviewer.md +265 -0
- package/dist/docs/example-agents/slack-agent.html +9 -7
- package/dist/docs/example-agents/slack-agent.md +142 -0
- package/dist/docs/example-agents/weather-agent.html +14 -12
- package/dist/docs/example-agents/weather-agent.md +296 -0
- package/dist/docs/guides/agent-to-agent.html +9 -7
- package/dist/docs/guides/agent-to-agent.md +113 -0
- package/dist/docs/guides/cloud-runtime.html +9 -7
- package/dist/docs/guides/cloud-runtime.md +131 -0
- package/dist/docs/guides/convert-automation.html +9 -7
- package/dist/docs/guides/convert-automation.md +171 -0
- package/dist/docs/guides/github.html +11 -9
- package/dist/docs/guides/github.md +287 -0
- package/dist/docs/guides/human-in-the-loop.html +9 -7
- package/dist/docs/guides/human-in-the-loop.md +126 -0
- package/dist/docs/guides/mcp-oauth.html +9 -7
- package/dist/docs/guides/mcp-oauth.md +159 -0
- package/dist/docs/guides/opentelemetry.html +9 -7
- package/dist/docs/guides/opentelemetry.md +209 -0
- package/dist/docs/guides/slack.html +12 -10
- package/dist/docs/guides/slack.md +337 -0
- package/dist/docs/guides/webhooks.html +12 -11
- package/dist/docs/guides/webhooks.md +463 -0
- package/dist/docs/hashmap.json +1 -1
- package/dist/docs/hillclimbing.html +9 -7
- package/dist/docs/hillclimbing.md +88 -0
- package/dist/docs/index.html +10 -8
- package/dist/docs/index.md +179 -0
- package/dist/docs/llms-full.txt +11518 -0
- package/dist/docs/llms.txt +75 -0
- package/dist/docs/quickstart.html +9 -7
- package/dist/docs/quickstart.md +364 -0
- package/dist/docs/reference/agent-config.html +9 -7
- package/dist/docs/reference/agent-config.md +256 -0
- package/dist/docs/reference/artifacts.html +9 -7
- package/dist/docs/reference/artifacts.md +112 -0
- package/dist/docs/reference/channels.html +10 -8
- package/dist/docs/reference/channels.md +255 -0
- package/dist/docs/reference/cli.html +15 -12
- package/dist/docs/reference/cli.md +957 -0
- package/dist/docs/reference/connections.html +12 -10
- package/dist/docs/reference/connections.md +268 -0
- package/dist/docs/reference/hooks.html +9 -7
- package/dist/docs/reference/hooks.md +102 -0
- package/dist/docs/reference/http-api.html +12 -10
- package/dist/docs/reference/http-api.md +267 -0
- package/dist/docs/reference/instructions.html +9 -7
- package/dist/docs/reference/instructions.md +74 -0
- package/dist/docs/reference/playground.html +9 -7
- package/dist/docs/reference/playground.md +62 -0
- package/dist/docs/reference/project-layout.html +9 -7
- package/dist/docs/reference/project-layout.md +107 -0
- package/dist/docs/reference/prompt.html +9 -7
- package/dist/docs/reference/prompt.md +42 -0
- package/dist/docs/reference/schedules.html +9 -7
- package/dist/docs/reference/schedules.md +215 -0
- package/dist/docs/reference/sessions.html +9 -7
- package/dist/docs/reference/sessions.md +170 -0
- package/dist/docs/reference/skills.html +9 -7
- package/dist/docs/reference/skills.md +83 -0
- package/dist/docs/reference/subagents.html +9 -7
- package/dist/docs/reference/subagents.md +71 -0
- package/dist/docs/reference/tools.html +10 -9
- package/dist/docs/reference/tools.md +298 -0
- package/dist/docs/scaffolding-agents.html +9 -7
- package/dist/docs/scaffolding-agents.md +130 -0
- package/dist/docs/storage.html +9 -7
- package/dist/docs/storage.md +219 -0
- package/dist/docs/templates/agentic-owners.html +9 -7
- package/dist/docs/templates/agentic-owners.md +92 -0
- package/dist/docs/templates/demo.html +9 -7
- package/dist/docs/templates/demo.md +79 -0
- package/dist/docs/templates/pr-autofixer.html +9 -7
- package/dist/docs/templates/pr-autofixer.md +131 -0
- package/dist/docs/templates/security-reviewer.html +9 -7
- package/dist/docs/templates/security-reviewer.md +84 -0
- package/dist/docs/templates/triage.html +10 -8
- package/dist/docs/templates/triage.md +98 -0
- package/dist/docs/troubleshooting.html +9 -7
- package/dist/docs/troubleshooting.md +111 -0
- package/dist/internal/cli-deploy.d.ts.map +1 -1
- package/dist/internal/cli-deploy.js +21 -3
- 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 +1 -0
- package/dist/internal/deploy-client.d.ts +18 -0
- package/dist/internal/deploy-client.d.ts.map +1 -1
- package/dist/internal/deploy-client.js +25 -1
- package/dist/internal/deploy-manifest.d.ts.map +1 -1
- package/dist/internal/deploy-manifest.js +5 -1
- package/dist/internal/discovery.d.ts +5 -1
- package/dist/internal/discovery.d.ts.map +1 -1
- package/dist/internal/discovery.js +16 -0
- package/dist/internal/http-channel.d.ts +2 -2
- package/dist/internal/http-channel.d.ts.map +1 -1
- package/dist/internal/http-channel.js +11 -31
- package/dist/internal/init-project.d.ts.map +1 -1
- package/dist/internal/init-project.js +2 -0
- package/dist/internal/init-scaffold.d.ts.map +1 -1
- package/dist/internal/init-scaffold.js +1 -0
- package/dist/internal/playground/static.d.ts.map +1 -1
- package/dist/internal/playground/static.js +2 -0
- package/dist/internal/session-engine.d.ts +8 -0
- package/dist/internal/session-engine.d.ts.map +1 -1
- package/dist/internal/session-engine.js +50 -6
- package/dist/playground/assets/index-D9N7-q97.css +1 -0
- package/dist/playground/assets/{index-DxapiDj_.js → index-DDvyC2z6.js} +49 -49
- package/dist/playground/index.html +2 -2
- package/dist/types.d.ts +8 -5
- package/dist/types.d.ts.map +1 -1
- package/docs/README.md +3 -1
- package/docs/concepts.md +1 -1
- package/docs/deployment.md +9 -6
- package/docs/evals.md +1 -5
- package/docs/example-agents/codebase-wiki.md +2 -3
- package/docs/example-agents/fsd.md +1 -1
- package/docs/example-agents/index.md +2 -2
- package/docs/example-agents/knowledge-base.md +3 -3
- package/docs/example-agents/security-reviewer.md +17 -48
- package/docs/example-agents/weather-agent.md +14 -45
- package/docs/guides/github.md +7 -4
- package/docs/guides/slack.md +7 -2
- package/docs/guides/webhooks.md +12 -15
- package/docs/reference/channels.md +4 -0
- package/docs/reference/cli.md +21 -7
- package/docs/reference/connections.md +13 -32
- package/docs/reference/http-api.md +14 -9
- package/docs/reference/tools.md +1 -3
- package/docs/templates/triage.md +3 -5
- package/docs/troubleshooting.md +1 -1
- package/package.json +2 -2
- package/skills/ab/SKILL.md +3 -0
- package/skills/create-agent/SKILL.md +9 -7
- package/skills/debug/SKILL.md +3 -0
- package/skills/evals/SKILL.md +3 -0
- package/skills/framework-map/SKILL.md +9 -6
- package/skills/github/SKILL.md +3 -0
- package/skills/hillclimb/SKILL.md +3 -0
- package/skills/mcp-auth/SKILL.md +3 -0
- package/skills/otel/SKILL.md +3 -0
- package/skills/setup-slack/SKILL.md +4 -1
- package/src/channels/slack/channel-watch.ts +1 -1
- package/src/channels/slack/slack-channel.ts +1 -1
- package/src/channels/slack/types.ts +2 -4
- package/src/internal/cli-deploy.ts +27 -7
- package/src/internal/cursor-agent-template.ts +1 -0
- package/src/internal/deploy-client.ts +40 -1
- package/src/internal/deploy-manifest.ts +10 -1
- package/src/internal/discovery.ts +20 -0
- package/src/internal/http-channel.ts +14 -41
- package/src/internal/init-project.ts +2 -0
- package/src/internal/init-scaffold.ts +1 -0
- package/src/internal/playground/static.ts +2 -0
- package/src/internal/session-engine.ts +62 -14
- package/src/types.ts +8 -5
- package/templates/security-help/README.md +37 -0
- package/templates/security-help/agent/agent.ts +18 -0
- package/templates/security-help/agent/channels/github.ts +13 -0
- package/templates/security-help/agent/channels/slack.ts +89 -0
- package/templates/security-help/agent/instructions.md +20 -0
- package/templates/security-help/agent/knowledge/faq/approvals.md +5 -0
- package/templates/security-help/agent/knowledge/faq/channels.md +6 -0
- package/templates/security-help/agent/knowledge/faq/phishing.md +10 -0
- package/templates/security-help/agent/lib/pr-first-pass.ts +42 -0
- package/templates/security-help/agent/lib/repos.ts +5 -0
- package/templates/security-help/agent/skills/access-request.md +10 -0
- package/templates/security-help/agent/skills/security-first-pass.md +15 -0
- package/templates/security-help/agent/skills/security-playbooks.md +12 -0
- package/templates/security-help/agent/skills/security-pr-first-pass.md +12 -0
- package/templates/security-help/evals/evals.config.ts +5 -0
- package/templates/security-help/evals/security-help.eval.ts +53 -0
- package/templates/security-help/init.json +31 -0
- package/templates/security-help/package.json +18 -0
- package/templates/security-help/tsconfig.json +12 -0
- package/templates/triage/agent/channels/webhook.ts +2 -2
- package/dist/docs/assets/chunks/@localSearchIndexroot.FV0R6kOb.js +0 -1
- package/dist/docs/assets/chunks/theme.Dx7j_-0n.js +0 -2
- package/dist/docs/assets/example-agents_index.md.xmJ87d_3.js +0 -2
- package/dist/docs/assets/example-agents_weather-agent.md.DC3lINjo.lean.js +0 -1
- package/dist/docs/assets/index.md.DhRHS_-L.js +0 -5
- package/dist/docs/assets/troubleshooting.md.KgmmaCgw.js +0 -1
- package/dist/playground/assets/index-BpVS-paP.css +0 -1
|
@@ -0,0 +1,337 @@
|
|
|
1
|
+
# Slack agents
|
|
2
|
+
|
|
3
|
+
The Slack channel puts your agent in Slack. Two products: the Cursor-hosted
|
|
4
|
+
connection (`cursorAccount: true`), or a dedicated Socket Mode app created
|
|
5
|
+
in the dashboard wizard (`agent-sdk slack create`). To own the Slack app
|
|
6
|
+
yourself, run `agent-sdk slack init --manual` and paste the manifests at
|
|
7
|
+
[api.slack.com](https://api.slack.com/apps). Socket Mode has no
|
|
8
|
+
public Request URL. Replies stream in threads, with tool "thinking" steps,
|
|
9
|
+
suggested prompts, and opt-in approval buttons.
|
|
10
|
+
|
|
11
|
+
The companion skill is
|
|
12
|
+
[`skills/setup-slack/SKILL.md`](https://github.com/cursor/cursor/blob/main/packages/agent-serve/skills/setup-slack/SKILL.md).
|
|
13
|
+
|
|
14
|
+
## Define the channel
|
|
15
|
+
|
|
16
|
+
Author `agent/channels/slack.ts` with `slackChannel()` from
|
|
17
|
+
`@cursor/july/channels/slack`:
|
|
18
|
+
|
|
19
|
+
```ts
|
|
20
|
+
import { slackChannel } from "@cursor/july/channels/slack";
|
|
21
|
+
|
|
22
|
+
// Single agent: reads SLACK_BOT_TOKEN + SLACK_APP_TOKEN
|
|
23
|
+
export default slackChannel();
|
|
24
|
+
|
|
25
|
+
// Multi-agent serve: one Slack app (and token pair) per agent
|
|
26
|
+
export default slackChannel({ envPrefix: "WEATHER_AGENT" });
|
|
27
|
+
// → WEATHER_AGENT_SLACK_BOT_TOKEN + WEATHER_AGENT_SLACK_APP_TOKEN
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
By default the channel connects over Socket Mode (the app connects
|
|
31
|
+
outward, so it works from behind any firewall) and responds only to
|
|
32
|
+
`app_mention` events and direct messages. It also refuses Slack Connect
|
|
33
|
+
users, guests, and senders from other workspaces. Threads bind to
|
|
34
|
+
sessions with `continuationToken = channelId:threadTs`, so a thread is
|
|
35
|
+
one durable conversation. Replies stream (`chat.startStream` /
|
|
36
|
+
`appendStream` / `stopStream`) with a plain-message fallback, a rotating
|
|
37
|
+
status shows while the agent works, and the pack sets thread titles and
|
|
38
|
+
suggested prompts. When a Slack API is unavailable (`method_not_found`,
|
|
39
|
+
`missing_scope`), the pack degrades to `postMessage` instead of failing.
|
|
40
|
+
|
|
41
|
+
Missing tokens leave the channel idle (`channel idle … missing
|
|
42
|
+
credentials`) rather than failing `serve`. That's useful when you mount
|
|
43
|
+
many agents and only some have Slack apps.
|
|
44
|
+
|
|
45
|
+
## Use the Cursor Slack connection
|
|
46
|
+
|
|
47
|
+
If the Cursor Slack app is already installed in your workspace and linked
|
|
48
|
+
to your Cursor account, skip the dedicated Slack app:
|
|
49
|
+
|
|
50
|
+
```ts
|
|
51
|
+
import { slackChannel } from "@cursor/july/channels/slack";
|
|
52
|
+
|
|
53
|
+
export default slackChannel({
|
|
54
|
+
cursorAccount: true,
|
|
55
|
+
agentName: "Weatherbot", // single token — no spaces; defaults from mount slug (PascalCase)
|
|
56
|
+
agentIcon: { emoji: ":robot_face:" },
|
|
57
|
+
});
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
Sign the host in (`agent-sdk login` or `CURSOR_API_KEY`), then mention the
|
|
61
|
+
agent in Slack as `@Cursor Weatherbot …`. Thread replies and DMs keep going to
|
|
62
|
+
the same agent. Messages appear as the Cursor app under that agent's name
|
|
63
|
+
and icon. Slack shows its working status, then posts one final reply.
|
|
64
|
+
|
|
65
|
+
Use a dedicated Socket Mode Slack app when you need your own bot user,
|
|
66
|
+
channel watching (`engagement.channelPosts`), or approval buttons. On
|
|
67
|
+
`cursorAccount`, agents must be explicitly addressed (@mention, DM, or
|
|
68
|
+
claimed-thread reply). Channel watching and `toolApprovals` /
|
|
69
|
+
`interactivity` are Socket Mode only; the Cursor connection does not relay
|
|
70
|
+
Block Kit clicks. Agent names must be unique on the host; an unmatched
|
|
71
|
+
`@Cursor <name>` stays on Cursor's normal Slack agent.
|
|
72
|
+
|
|
73
|
+
## Control who can message the agent
|
|
74
|
+
|
|
75
|
+
External senders are blocked by default. Slack Connect users, guests, and
|
|
76
|
+
people whose home workspace is not the install team never reach the
|
|
77
|
+
handler. That applies to Socket Mode and `cursorAccount: true`. Set
|
|
78
|
+
`blockExternals: false` only when the agent should serve people outside
|
|
79
|
+
your org:
|
|
80
|
+
|
|
81
|
+
```ts
|
|
82
|
+
export default slackChannel({
|
|
83
|
+
policy: { blockExternals: false },
|
|
84
|
+
});
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
Sessions are thread-scoped by default, so anyone in the thread can
|
|
88
|
+
continue. Restrict follow-ups to the person who started the session with
|
|
89
|
+
`respondTo: "author"`:
|
|
90
|
+
|
|
91
|
+
```ts
|
|
92
|
+
export default slackChannel({
|
|
93
|
+
policy: { respondTo: "author" },
|
|
94
|
+
});
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
## Set it up
|
|
98
|
+
|
|
99
|
+
For a dedicated Socket Mode bot, run `agent-sdk slack create`. The CLI
|
|
100
|
+
opens the signed-in Cursor dashboard wizard. Slack consent, bot name,
|
|
101
|
+
and admin-approval wait happen there. Tokens are stored as deployment
|
|
102
|
+
secrets and written to `.env.local`. They are never shown. Do not paste
|
|
103
|
+
a manifest at [api.slack.com](https://api.slack.com/apps) unless you
|
|
104
|
+
are on the [manual setup](#manual-setup) path.
|
|
105
|
+
|
|
106
|
+
Bots that already have tokens in `.env.local` keep working. Skip the
|
|
107
|
+
wizard unless you want a Cursor-managed app.
|
|
108
|
+
|
|
109
|
+
### Provision with the CLI
|
|
110
|
+
|
|
111
|
+
```bash
|
|
112
|
+
agent-sdk slack create --dir . # dev app (default)
|
|
113
|
+
agent-sdk slack create --dir . --prod # prod app
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
`slack create` needs a signed-in host (`agent-sdk login` or
|
|
117
|
+
`CURSOR_API_KEY`). It scaffolds `agent/channels/slack.ts` when the file
|
|
118
|
+
is missing, opens the dashboard wizard, and waits. Finish **Add Slack
|
|
119
|
+
to this agent** in the browser as the same Cursor account. The CLI
|
|
120
|
+
writes `<PREFIX>_SLACK_BOT_TOKEN` and `<PREFIX>_SLACK_APP_TOKEN` into
|
|
121
|
+
`<dir>/.env.local`, then runs `doctor`. Serve and smoke it as described
|
|
122
|
+
[below](#wire-the-env-and-verify).
|
|
123
|
+
|
|
124
|
+
If Slack needs a workspace admin to approve the app, keep the CLI
|
|
125
|
+
running. Managed install does not file the request — open Slack's
|
|
126
|
+
**Request approval** page (the CLI prints the link; the same URL is
|
|
127
|
+
**Send a reminder** after you submit). After an admin approves, click
|
|
128
|
+
**Retry** in the wizard.
|
|
129
|
+
|
|
130
|
+
Useful companions: `--name` / `--icon` / `--channel-posts` prefill the
|
|
131
|
+
wizard. `--slack-team T0123ABCD` picks a workspace when several are
|
|
132
|
+
connected. A second `slack create` for the same agent and env overwrites
|
|
133
|
+
that Slack app. It keeps the Slack app id and replaces the manifest and
|
|
134
|
+
tokens. `agent-sdk slack destroy` deletes the provisioned app.
|
|
135
|
+
`agent-sdk slack icon <source>` updates the icon later.
|
|
136
|
+
|
|
137
|
+
### Provision from the dashboard
|
|
138
|
+
|
|
139
|
+
The same wizard is on [Deployed Agents](https://cursor.com/dashboard).
|
|
140
|
+
Open **Integrations** on an agent and click **Add Slack to this agent**,
|
|
141
|
+
or follow the URL `slack create` printed.
|
|
142
|
+
|
|
143
|
+
A first-run agent that has no hosted engine yet shows **Not deployed
|
|
144
|
+
yet**. Local `agent-sdk serve` works from `.env.local`. The next
|
|
145
|
+
**Deploy** injects the stored secrets; there is no Slack-only Redeploy.
|
|
146
|
+
|
|
147
|
+
If Slack needs admin approval, the wizard waits. Click **Request
|
|
148
|
+
approval** to file the request in Slack (that same page later sends a
|
|
149
|
+
reminder). After an admin approves, click **Retry**.
|
|
150
|
+
|
|
151
|
+
The app row's menu covers later care: rename, set an icon, rotate
|
|
152
|
+
tokens, remove the app, or disconnect the workspace.
|
|
153
|
+
|
|
154
|
+
### Wire the env and verify
|
|
155
|
+
|
|
156
|
+
`agent-sdk slack create` already wrote the tokens to `.env.local`, so
|
|
157
|
+
after provisioning skip straight to `doctor`. `serve` / `dev` /
|
|
158
|
+
`slack doctor` load that file (real environment variables always win).
|
|
159
|
+
|
|
160
|
+
```bash
|
|
161
|
+
agent-sdk slack doctor --prefix MY_AGENT
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
Proceed when `app_token`, `connections_open`, `bot_token`, and
|
|
165
|
+
`auth_test` are all green. Then serve and smoke it:
|
|
166
|
+
|
|
167
|
+
```bash
|
|
168
|
+
agent-sdk serve --dir . --dev
|
|
169
|
+
# expect: [agent-sdk/slack] Socket Mode connected
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
Invite the bot to a channel and @mention it (or DM it). Expect the
|
|
173
|
+
Thinking… status, then a threaded streaming reply, with correlated
|
|
174
|
+
server logs (`inbound kind=app_mention`, `session start`,
|
|
175
|
+
`reply delivered via stream|postMessage`).
|
|
176
|
+
|
|
177
|
+
### Manual setup
|
|
178
|
+
|
|
179
|
+
`slack init --manual` is for a Slack app you own at api.slack.com. You
|
|
180
|
+
paste the generated manifests and mint tokens yourself. Use this when
|
|
181
|
+
you want an unmanaged app, or when the dashboard wizard is not an
|
|
182
|
+
option.
|
|
183
|
+
|
|
184
|
+
```bash
|
|
185
|
+
agent-sdk slack init --manual --dir . --name "My Agent"
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
That writes `agent/channels/slack.ts`, importable manifests at
|
|
189
|
+
`.agent-serve/slack/manifest.{dev,prod}.json`, `env.example`, and
|
|
190
|
+
`setup-status.json`. `--no-prefix` uses shared `SLACK_*` variables on
|
|
191
|
+
a single-agent host. `--prefix CUSTOM` overrides the directory-derived
|
|
192
|
+
prefix. `--channel-posts` subscribes the manifests to channel-post
|
|
193
|
+
events.
|
|
194
|
+
|
|
195
|
+
`slack manifest --env both` regenerates the JSON files without
|
|
196
|
+
touching the channel file.
|
|
197
|
+
|
|
198
|
+
#### Create the apps
|
|
199
|
+
|
|
200
|
+
This phase needs someone with permission to create Slack apps.
|
|
201
|
+
|
|
202
|
+
1. Open [api.slack.com/apps](https://api.slack.com/apps) → **Create New
|
|
203
|
+
App** → **From a manifest**.
|
|
204
|
+
2. Paste `manifest.dev.json` and create the dev app.
|
|
205
|
+
3. Repeat with `manifest.prod.json`. Dev and prod are separate Slack
|
|
206
|
+
apps with separate tokens.
|
|
207
|
+
|
|
208
|
+
#### Install and mint tokens
|
|
209
|
+
|
|
210
|
+
For each app: **Install to Workspace** and copy the Bot User OAuth Token
|
|
211
|
+
(`xoxb-…`). Then under **Basic Information → App-Level Tokens** create a
|
|
212
|
+
token with scope `connections:write` and copy it (`xapp-…`).
|
|
213
|
+
|
|
214
|
+
Put the pair in `.env.local` using the names from `env.example`, then
|
|
215
|
+
run `slack doctor` and serve as [above](#wire-the-env-and-verify).
|
|
216
|
+
|
|
217
|
+
## Choose when the agent engages
|
|
218
|
+
|
|
219
|
+
Mentions and DMs are on by default. Watching channels means dispatching
|
|
220
|
+
on new posts without a mention. That's an explicit opt-in:
|
|
221
|
+
|
|
222
|
+
```ts
|
|
223
|
+
export default slackChannel({
|
|
224
|
+
envPrefix: "TRIAGE",
|
|
225
|
+
engagement: {
|
|
226
|
+
// mentions / directMessages default to true
|
|
227
|
+
channelPosts: {
|
|
228
|
+
allow: ["#triage-alerts"], // use ["*"] for every joined channel
|
|
229
|
+
posts: "top-level", // default: thread replies never dispatch
|
|
230
|
+
debounceMs: 15_000, // optional: let rapid edits settle
|
|
231
|
+
includeBotPosts: false, // default: bot-authored posts never dispatch
|
|
232
|
+
},
|
|
233
|
+
},
|
|
234
|
+
onChannelPost: async (ctx, message) => {
|
|
235
|
+
// same contract as onAppMention: return null to skip
|
|
236
|
+
return message.markdown.length > 20 ? {} : null;
|
|
237
|
+
},
|
|
238
|
+
});
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
Channel watching needs the `message.channels` / `message.groups` events
|
|
242
|
+
on the Slack app (Socket Mode only; not available with
|
|
243
|
+
`cursorAccount: true`). Pass `--channel-posts` on `slack create` or
|
|
244
|
+
`slack init --manual`. The bot must also be a member of each watched
|
|
245
|
+
channel.
|
|
246
|
+
|
|
247
|
+
Set `allow: ["*"]` to watch every channel the bot has joined.
|
|
248
|
+
|
|
249
|
+
Set `includeBotPosts: true` when the posts worth watching come from bots:
|
|
250
|
+
alert feeds, webhook integrations, or other agents posting notes. The
|
|
251
|
+
watching app's own posts stay dropped either way, matched by the `bot_id`
|
|
252
|
+
and bot user id from `auth.test`, so an agent can never dispatch on its
|
|
253
|
+
own replies. The
|
|
254
|
+
[alert investigator example](/docs/example-agents/oncall.md) watches a
|
|
255
|
+
bot-fed alerts channel this way.
|
|
256
|
+
|
|
257
|
+
## Prepare work on the host
|
|
258
|
+
|
|
259
|
+
Mention and DM handlers may return a prepared `message`,
|
|
260
|
+
`workspaceFiles`, or `cloud` block. It's the same host-prep pattern as
|
|
261
|
+
[custom channels](/docs/guides/webhooks.md#prepare-on-the-host-then-hand-off).
|
|
262
|
+
PR agents use it: extract a PR URL from the mention text and run the
|
|
263
|
+
same host path as the HTTP channel.
|
|
264
|
+
|
|
265
|
+
Slack file uploads are attached automatically. Images become vision input.
|
|
266
|
+
Supported documents become workspace files for the turn.
|
|
267
|
+
|
|
268
|
+
## Add approval buttons
|
|
269
|
+
|
|
270
|
+
Tools with `needsApproval` park until a person decides. Route that
|
|
271
|
+
through Slack with one flag:
|
|
272
|
+
|
|
273
|
+
```ts
|
|
274
|
+
export default slackChannel({
|
|
275
|
+
toolApprovals: true, // posts Block Kit Approve/Deny cards + routes clicks
|
|
276
|
+
});
|
|
277
|
+
```
|
|
278
|
+
|
|
279
|
+
Approval cards need interactivity on the Slack app. Recreate with
|
|
280
|
+
`slack create` if clicks do nothing. Composing events by hand: spread
|
|
281
|
+
`buildToolApprovalEvents({ credentials })` into `events` and set
|
|
282
|
+
`interactivity: true` on the channel so Socket Mode routes the clicks.
|
|
283
|
+
|
|
284
|
+
Approval buttons need Socket Mode. `slackChannel({ cursorAccount: true })`
|
|
285
|
+
rejects `toolApprovals` and `interactivity` at construction, since the
|
|
286
|
+
Cursor Slack connection does not relay Block Kit clicks. Use a dedicated
|
|
287
|
+
Slack app to run approvals for a cursor-account agent.
|
|
288
|
+
|
|
289
|
+
Cards show redacted, truncated arguments (Block Kit size limits);
|
|
290
|
+
execution still uses the full validated input, so review sensitive tools
|
|
291
|
+
in the playground when the arguments may exceed the card. Approvals
|
|
292
|
+
exist for `execution: "server"` tools on the local runtime only, and
|
|
293
|
+
parked calls do not survive a host restart. The full lifecycle is in
|
|
294
|
+
[Human-in-the-loop](/docs/guides/human-in-the-loop.md).
|
|
295
|
+
|
|
296
|
+
## Run several agents on one host
|
|
297
|
+
|
|
298
|
+
One Slack app and token pair per agent. Never share a pair across
|
|
299
|
+
agents in the same process. `envPrefix` keeps them apart
|
|
300
|
+
(`WEATHER_AGENT_SLACK_*`, `TRIAGE_SLACK_*`, …), and agents without tokens mount
|
|
301
|
+
with their Slack channel idle while everything else serves normally.
|
|
302
|
+
|
|
303
|
+
## Keep the channel healthy
|
|
304
|
+
|
|
305
|
+
Two habits matter most.
|
|
306
|
+
|
|
307
|
+
- Don't `await` long work inside Slack dispatch handlers. The pack
|
|
308
|
+
dispatches through `waitUntil` and streams as the turn progresses.
|
|
309
|
+
- In `--dev` (loopback) or `--allow-anonymous` (trusted shared host), the
|
|
310
|
+
playground can list and stream Slack sessions and resolve their parked
|
|
311
|
+
approvals (the audit trail records the HTTP caller). Bearer-auth hosts
|
|
312
|
+
stay strict: Slack approvals must come from Slack interactivity or a
|
|
313
|
+
matching principal.
|
|
314
|
+
|
|
315
|
+
## CLI reference
|
|
316
|
+
|
|
317
|
+
The `slack` subcommands cover setup end to end.
|
|
318
|
+
|
|
319
|
+
```bash
|
|
320
|
+
agent-sdk slack setup # two-product chooser plus manual phases
|
|
321
|
+
agent-sdk slack create --dir . # dashboard wizard (dev app)
|
|
322
|
+
agent-sdk slack create --dir . --prod # prod app
|
|
323
|
+
agent-sdk slack destroy --dir . # delete the provisioned app
|
|
324
|
+
agent-sdk slack icon ./icon.png --dir . # set the provisioned app's icon
|
|
325
|
+
agent-sdk slack init --manual --dir . # manifests to paste at api.slack.com
|
|
326
|
+
agent-sdk slack manifest --env both # regenerate those JSON files
|
|
327
|
+
agent-sdk slack doctor --prefix MY_AGENT # token / connectivity checks
|
|
328
|
+
```
|
|
329
|
+
|
|
330
|
+
## What's next
|
|
331
|
+
|
|
332
|
+
Continue with these pages:
|
|
333
|
+
|
|
334
|
+
- [Human-in-the-loop](/docs/guides/human-in-the-loop.md): the approval lifecycle
|
|
335
|
+
behind `toolApprovals`
|
|
336
|
+
- [Webhooks and custom channels](/docs/guides/webhooks.md): the mechanism this
|
|
337
|
+
pack is built on
|