@cursor/july 0.1.93 → 0.1.95
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 +8 -20
- package/README.md +4 -26
- package/dist/channels/github/github-channel.d.ts.map +1 -1
- package/dist/channels/github/github-channel.js +14 -2
- package/dist/channels/github/types.d.ts +18 -3
- package/dist/channels/github/types.d.ts.map +1 -1
- package/dist/channels/origin/origin-channel.d.ts.map +1 -1
- package/dist/channels/origin/origin-channel.js +11 -3
- package/dist/channels/origin/origin-webhook.d.ts +11 -1
- package/dist/channels/origin/origin-webhook.d.ts.map +1 -1
- package/dist/channels/origin/origin-webhook.js +23 -3
- package/dist/channels/origin/types.d.ts +8 -0
- package/dist/channels/origin/types.d.ts.map +1 -1
- package/dist/channels/slack/attachments.js +2 -2
- package/dist/channels/slack/dispatch.d.ts +0 -7
- package/dist/channels/slack/dispatch.d.ts.map +1 -1
- package/dist/channels/slack/dispatch.js +4 -7
- package/dist/channels/slack/eval-directive.d.ts +5 -12
- package/dist/channels/slack/eval-directive.d.ts.map +1 -1
- package/dist/channels/slack/eval-directive.js +8 -19
- package/dist/channels/slack/index.d.ts +0 -6
- package/dist/channels/slack/index.d.ts.map +1 -1
- package/dist/channels/slack/index.js +0 -6
- package/dist/channels/slack/pr-ref.d.ts +7 -1
- package/dist/channels/slack/pr-ref.d.ts.map +1 -1
- package/dist/channels/slack/pr-ref.js +42 -23
- package/dist/channels/slack/setup.d.ts +4 -4
- package/dist/channels/slack/setup.d.ts.map +1 -1
- package/dist/channels/slack/setup.js +8 -15
- package/dist/channels/slack/slack-channel.d.ts +6 -13
- package/dist/channels/slack/slack-channel.d.ts.map +1 -1
- package/dist/channels/slack/slack-channel.js +15 -101
- package/dist/channels/slack/types.d.ts +12 -79
- package/dist/channels/slack/types.d.ts.map +1 -1
- package/dist/channels/slack/types.js +1 -15
- package/dist/client.d.ts +14 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +12 -0
- package/dist/connections.d.ts +18 -9
- package/dist/connections.d.ts.map +1 -1
- package/dist/connections.js +17 -8
- package/dist/docs/404.html +2 -2
- package/dist/docs/ab.html +4 -4
- package/dist/docs/assets/{app.CjWU-x0z.js → app.BBj0klBO.js} +1 -1
- package/dist/docs/assets/chunks/@localSearchIndexroot.oqPawjiD.js +1 -0
- package/dist/docs/assets/chunks/{VPLocalSearchBox.Cxy8ySFQ.js → VPLocalSearchBox.CUEXpL78.js} +1 -1
- package/dist/docs/assets/chunks/{theme.Dvq1Bktu.js → theme.DabmQnia.js} +2 -2
- package/dist/docs/assets/concepts.md.lwAgBIMI.js +1 -0
- package/dist/docs/assets/{deployment.md.DoLFAzfm.js → deployment.md.D9msOFOW.js} +3 -8
- package/dist/docs/assets/{deployment.md.DoLFAzfm.lean.js → deployment.md.D9msOFOW.lean.js} +1 -1
- package/dist/docs/assets/{guides_agent-to-agent.md.B3JIaAqz.js → guides_agent-to-agent.md.BDb0t1QV.js} +1 -1
- package/dist/docs/assets/guides_cloud-runtime.md.CkYbjnAX.js +9 -0
- package/dist/docs/assets/guides_cloud-runtime.md.CkYbjnAX.lean.js +1 -0
- package/dist/docs/assets/{guides_convert-automation.md.Bboisykk.js → guides_convert-automation.md.B4sjlodG.js} +1 -1
- package/dist/docs/assets/{guides_github.md.DqJhuaN1.js → guides_github.md.Cnh2mL4a.js} +1 -1
- package/dist/docs/assets/{guides_mcp-oauth.md.CJvrXtkN.js → guides_mcp-oauth.md.DPYmBCbV.js} +7 -9
- package/dist/docs/assets/{guides_mcp-oauth.md.CJvrXtkN.lean.js → guides_mcp-oauth.md.DPYmBCbV.lean.js} +1 -1
- package/dist/docs/assets/{guides_slack.md.mqeNKs84.js → guides_slack.md.C32HsdKk.js} +5 -11
- package/dist/docs/assets/guides_slack.md.C32HsdKk.lean.js +1 -0
- package/dist/docs/assets/index.md.BoHaMdeZ.js +5 -0
- package/dist/docs/assets/{index.md.B-lVR4wT.lean.js → index.md.BoHaMdeZ.lean.js} +1 -1
- package/dist/docs/assets/{quickstart.md.BrmfrrIr.js → quickstart.md.Nj_LjW_a.js} +1 -1
- package/dist/docs/assets/{reference_cli.md.D9KESDsD.js → reference_cli.md.BsMOxDvh.js} +4 -3
- package/dist/docs/assets/{reference_cli.md.D9KESDsD.lean.js → reference_cli.md.BsMOxDvh.lean.js} +1 -1
- package/dist/docs/assets/{reference_connections.md.DB6SsN6U.js → reference_connections.md.BH8Oc0D0.js} +5 -5
- package/dist/docs/assets/{reference_connections.md.DB6SsN6U.lean.js → reference_connections.md.BH8Oc0D0.lean.js} +1 -1
- package/dist/docs/assets/{reference_hooks.md.BxN87gCw.js → reference_hooks.md.a8BJxMR5.js} +1 -1
- package/dist/docs/assets/reference_http-api.md.D89k1mdm.js +11 -0
- package/dist/docs/assets/reference_http-api.md.D89k1mdm.lean.js +1 -0
- package/dist/docs/assets/reference_project-layout.md.Bv4KOtlB.js +19 -0
- package/dist/docs/assets/{reference_subagents.md.Xoav0AII.js → reference_subagents.md.CfsIloPm.js} +1 -1
- package/dist/docs/assets/{reference_tools.md.DuKvkYWG.js → reference_tools.md.BHeXn2id.js} +3 -3
- package/dist/docs/assets/{reference_tools.md.DuKvkYWG.lean.js → reference_tools.md.BHeXn2id.lean.js} +1 -1
- package/dist/docs/assets/{templates_agentic-owners.md.DqtPdm6f.js → templates_agentic-owners.md.BZSH4N9z.js} +1 -1
- package/dist/docs/assets/{templates_demo.md.DhFcWN6j.js → templates_demo.md.BeQX9V3H.js} +1 -1
- package/dist/docs/assets/{templates_pr-autofixer.md.R4K_qytS.js → templates_pr-autofixer.md.x5zl6-GT.js} +2 -2
- package/dist/docs/assets/{templates_pr-autofixer.md.R4K_qytS.lean.js → templates_pr-autofixer.md.x5zl6-GT.lean.js} +1 -1
- package/dist/docs/assets/templates_security-help.md.C3Ny_Qr2.js +4 -0
- package/dist/docs/assets/templates_security-help.md.C3Ny_Qr2.lean.js +1 -0
- package/dist/docs/assets/{templates_security-reviewer.md.ByFyRta2.js → templates_security-reviewer.md.lshxbCLK.js} +2 -2
- package/dist/docs/assets/{templates_security-reviewer.md.ByFyRta2.lean.js → templates_security-reviewer.md.lshxbCLK.lean.js} +1 -1
- package/dist/docs/assets/{templates_triage.md.CVlpctKS.js → templates_triage.md.Co4UNzkZ.js} +3 -3
- package/dist/docs/assets/{templates_triage.md.CVlpctKS.lean.js → templates_triage.md.Co4UNzkZ.lean.js} +1 -1
- package/dist/docs/assets/troubleshooting.md.Ctv3T8C2.js +1 -0
- package/dist/docs/building-with-agents.html +4 -4
- package/dist/docs/concepts.html +5 -5
- package/dist/docs/concepts.md +1 -0
- package/dist/docs/deployment.html +7 -12
- package/dist/docs/deployment.md +1 -20
- package/dist/docs/design/agsh.md +406 -0
- package/dist/docs/evals.html +4 -4
- package/dist/docs/guides/agent-to-agent.html +6 -6
- package/dist/docs/guides/agent-to-agent.md +2 -2
- package/dist/docs/guides/cloud-runtime.html +6 -6
- package/dist/docs/guides/cloud-runtime.md +1 -0
- package/dist/docs/guides/convert-automation.html +6 -6
- package/dist/docs/guides/convert-automation.md +1 -1
- package/dist/docs/guides/github.html +6 -6
- package/dist/docs/guides/github.md +4 -4
- package/dist/docs/guides/human-in-the-loop.html +4 -4
- package/dist/docs/guides/mcp-oauth.html +11 -13
- package/dist/docs/guides/mcp-oauth.md +10 -18
- package/dist/docs/guides/opentelemetry.html +5 -5
- package/dist/docs/guides/slack.html +9 -15
- package/dist/docs/guides/slack.md +9 -46
- package/dist/docs/guides/webhooks.html +4 -4
- package/dist/docs/hashmap.json +1 -1
- package/dist/docs/hillclimbing.html +4 -4
- package/dist/docs/index.html +6 -6
- package/dist/docs/index.md +3 -29
- package/dist/docs/llms-full.txt +756 -2810
- package/dist/docs/llms.txt +3 -16
- package/dist/docs/quickstart.html +6 -6
- package/dist/docs/quickstart.md +2 -3
- package/dist/docs/reference/agent-config.html +4 -4
- package/dist/docs/reference/artifacts.html +4 -4
- package/dist/docs/reference/channels.html +4 -4
- package/dist/docs/reference/cli.html +8 -7
- package/dist/docs/reference/cli.md +5 -2
- package/dist/docs/reference/connections.html +9 -9
- package/dist/docs/reference/connections.md +15 -11
- package/dist/docs/reference/hooks.html +6 -6
- package/dist/docs/reference/hooks.md +2 -3
- package/dist/docs/reference/http-api.html +6 -6
- package/dist/docs/reference/http-api.md +8 -0
- package/dist/docs/reference/instructions.html +4 -4
- package/dist/docs/reference/playground.html +4 -4
- package/dist/docs/reference/project-layout.html +8 -6
- package/dist/docs/reference/project-layout.md +5 -1
- package/dist/docs/reference/prompt.html +4 -4
- package/dist/docs/reference/schedules.html +4 -4
- package/dist/docs/reference/sessions.html +4 -4
- package/dist/docs/reference/skills.html +4 -4
- package/dist/docs/reference/subagents.html +6 -6
- package/dist/docs/reference/subagents.md +2 -2
- package/dist/docs/reference/tools.html +7 -7
- package/dist/docs/reference/tools.md +19 -3
- package/dist/docs/scaffolding-agents.html +4 -4
- package/dist/docs/storage.html +4 -4
- package/dist/docs/templates/agentic-owners.html +7 -7
- package/dist/docs/templates/agentic-owners.md +1 -1
- package/dist/docs/templates/demo.html +6 -6
- package/dist/docs/templates/demo.md +3 -2
- package/dist/docs/templates/pr-autofixer.html +6 -6
- package/dist/docs/templates/pr-autofixer.md +8 -13
- package/dist/docs/templates/security-help.html +30 -0
- package/dist/docs/templates/security-help.md +65 -0
- package/dist/docs/templates/security-reviewer.html +6 -6
- package/dist/docs/templates/security-reviewer.md +1 -3
- package/dist/docs/templates/triage.html +7 -7
- package/dist/docs/templates/triage.md +2 -6
- package/dist/docs/troubleshooting.html +5 -5
- package/dist/docs/troubleshooting.md +2 -2
- package/dist/files-backends/cursor-hosted.d.ts +6 -2
- package/dist/files-backends/cursor-hosted.d.ts.map +1 -1
- package/dist/files-backends/cursor-hosted.js +2 -2
- package/dist/files.d.ts +2 -0
- package/dist/files.d.ts.map +1 -1
- package/dist/files.js +5 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/internal/advertise-tools.d.ts +11 -0
- package/dist/internal/advertise-tools.d.ts.map +1 -1
- package/dist/internal/advertise-tools.js +47 -9
- package/dist/internal/cli-deploy.d.ts.map +1 -1
- package/dist/internal/cli-deploy.js +135 -6
- package/dist/internal/cli-mcp-oauth.d.ts.map +1 -1
- package/dist/internal/cli-mcp-oauth.js +7 -4
- package/dist/internal/conversation-mirror.d.ts +82 -0
- package/dist/internal/conversation-mirror.d.ts.map +1 -0
- package/dist/internal/conversation-mirror.js +251 -0
- package/dist/internal/convert-automation/convert-workflow.d.ts.map +1 -1
- package/dist/internal/convert-automation/convert-workflow.js +26 -15
- package/dist/internal/convert-automation/slug.d.ts +0 -2
- package/dist/internal/convert-automation/slug.d.ts.map +1 -1
- package/dist/internal/convert-automation/slug.js +0 -8
- package/dist/internal/cursor/account-mcp.d.ts.map +1 -1
- package/dist/internal/cursor/account-mcp.js +5 -1
- package/dist/internal/deferred-channel-session.d.ts +20 -0
- package/dist/internal/deferred-channel-session.d.ts.map +1 -0
- package/dist/internal/deferred-channel-session.js +62 -0
- package/dist/internal/deploy-client.d.ts +13 -1
- package/dist/internal/deploy-client.d.ts.map +1 -1
- package/dist/internal/deploy-client.js +11 -1
- package/dist/internal/deploy-manifest.d.ts.map +1 -1
- package/dist/internal/deploy-manifest.js +11 -5
- package/dist/internal/discovery.d.ts.map +1 -1
- package/dist/internal/discovery.js +110 -15
- package/dist/internal/framework-storage-selection.d.ts +32 -16
- package/dist/internal/framework-storage-selection.d.ts.map +1 -1
- package/dist/internal/framework-storage-selection.js +51 -17
- package/dist/internal/hosted-admission-context.d.ts +20 -0
- package/dist/internal/hosted-admission-context.d.ts.map +1 -0
- package/dist/internal/hosted-admission-context.js +31 -0
- package/dist/internal/hosted-delivery-protocol.d.ts +5 -0
- package/dist/internal/hosted-delivery-protocol.d.ts.map +1 -1
- package/dist/internal/hosted-delivery-protocol.js +33 -1
- package/dist/internal/hosted-delivery.d.ts +4 -2
- package/dist/internal/hosted-delivery.d.ts.map +1 -1
- package/dist/internal/hosted-delivery.js +97 -44
- package/dist/internal/hosted-managed-automation.d.ts +30 -0
- package/dist/internal/hosted-managed-automation.d.ts.map +1 -0
- package/dist/internal/hosted-managed-automation.js +58 -0
- package/dist/internal/mcp-endpoint.js +3 -3
- package/dist/internal/mcp-host.d.ts +8 -7
- package/dist/internal/mcp-host.d.ts.map +1 -1
- package/dist/internal/mcp-host.js +8 -7
- package/dist/internal/peer-connections.d.ts.map +1 -1
- package/dist/internal/peer-connections.js +5 -1
- package/dist/internal/playground/static.d.ts +0 -3
- package/dist/internal/playground/static.d.ts.map +1 -1
- package/dist/internal/resolved-connections.d.ts.map +1 -1
- package/dist/internal/resolved-connections.js +5 -7
- package/dist/internal/review-comments.d.ts.map +1 -1
- package/dist/internal/review-comments.js +10 -98
- package/dist/internal/scm/pr-url.d.ts +14 -0
- package/dist/internal/scm/pr-url.d.ts.map +1 -0
- package/dist/internal/scm/pr-url.js +65 -0
- package/dist/internal/sdk-runner.d.ts +14 -0
- package/dist/internal/sdk-runner.d.ts.map +1 -1
- package/dist/internal/sdk-runner.js +41 -2
- package/dist/internal/server.d.ts.map +1 -1
- package/dist/internal/server.js +123 -174
- package/dist/internal/session-engine.d.ts +45 -10
- package/dist/internal/session-engine.d.ts.map +1 -1
- package/dist/internal/session-engine.js +217 -65
- package/dist/internal/tool-catalog.d.ts +31 -0
- package/dist/internal/tool-catalog.d.ts.map +1 -0
- package/dist/internal/tool-catalog.js +67 -0
- package/dist/playground/assets/index-CF7hUDnQ.css +1 -0
- package/dist/playground/assets/{index-D9MFzhNE.js → index-CZA1uEWA.js} +48 -48
- package/dist/playground/index.html +2 -2
- package/dist/storage-backends/cursor-hosted.d.ts +7 -2
- package/dist/storage-backends/cursor-hosted.d.ts.map +1 -1
- package/dist/storage-backends/cursor-hosted.js +2 -2
- package/dist/types.d.ts +72 -23
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +19 -0
- package/docs/README.md +3 -29
- package/docs/concepts.md +1 -0
- package/docs/deployment.md +1 -20
- package/docs/design/agsh.md +406 -0
- package/docs/guides/agent-to-agent.md +2 -2
- package/docs/guides/cloud-runtime.md +1 -0
- package/docs/guides/convert-automation.md +1 -1
- package/docs/guides/github.md +4 -4
- package/docs/guides/mcp-oauth.md +10 -18
- package/docs/guides/slack.md +10 -47
- package/docs/quickstart.md +2 -3
- package/docs/reference/cli.md +5 -2
- package/docs/reference/connections.md +15 -11
- package/docs/reference/hooks.md +2 -3
- package/docs/reference/http-api.md +8 -0
- package/docs/reference/project-layout.md +5 -1
- package/docs/reference/subagents.md +2 -2
- package/docs/reference/tools.md +19 -3
- package/docs/templates/agentic-owners.md +1 -1
- package/docs/templates/demo.md +3 -2
- package/docs/templates/pr-autofixer.md +8 -13
- package/docs/templates/security-help.md +70 -0
- package/docs/templates/security-reviewer.md +1 -3
- package/docs/templates/triage.md +2 -6
- package/docs/troubleshooting.md +2 -2
- package/package.json +9 -2
- package/skills/create-agent/SKILL.md +6 -13
- package/skills/debug/SKILL.md +2 -4
- package/skills/evals/SKILL.md +1 -1
- package/skills/framework-map/SKILL.md +3 -2
- package/skills/mcp-auth/SKILL.md +10 -13
- package/skills/setup-slack/SKILL.md +21 -137
- package/src/channels/github/github-channel.ts +23 -8
- package/src/channels/github/types.ts +19 -2
- package/src/channels/origin/origin-channel.ts +13 -1
- package/src/channels/origin/origin-webhook.ts +27 -3
- package/src/channels/origin/types.ts +8 -0
- package/src/channels/slack/attachments.ts +2 -2
- package/src/channels/slack/dispatch.ts +2 -16
- package/src/channels/slack/eval-directive.ts +8 -27
- package/src/channels/slack/index.ts +0 -6
- package/src/channels/slack/pr-ref.ts +56 -25
- package/src/channels/slack/setup.ts +8 -15
- package/src/channels/slack/slack-channel.ts +14 -125
- package/src/channels/slack/types.ts +12 -96
- package/src/client.ts +23 -0
- package/src/connections.ts +20 -7
- package/src/files-backends/cursor-hosted.ts +9 -3
- package/src/files.ts +11 -0
- package/src/index.ts +2 -0
- package/src/internal/advertise-tools.ts +45 -7
- package/src/internal/cli-deploy.ts +171 -7
- package/src/internal/cli-mcp-oauth.ts +6 -4
- package/src/internal/conversation-mirror.ts +330 -0
- package/src/internal/convert-automation/convert-workflow.ts +29 -17
- package/src/internal/convert-automation/slug.ts +0 -9
- package/src/internal/cursor/account-mcp.ts +4 -1
- package/src/internal/deferred-channel-session.ts +61 -0
- package/src/internal/deploy-client.ts +24 -1
- package/src/internal/deploy-manifest.ts +10 -5
- package/src/internal/discovery.ts +129 -15
- package/src/internal/fixtures/units-server.ts +52 -0
- package/src/internal/framework-storage-selection.ts +61 -19
- package/src/internal/hosted-admission-context.ts +37 -0
- package/src/internal/hosted-delivery-protocol.ts +44 -1
- package/src/internal/hosted-delivery.ts +155 -68
- package/src/internal/hosted-managed-automation.ts +72 -0
- package/src/internal/mcp-endpoint.ts +3 -3
- package/src/internal/mcp-host.ts +8 -7
- package/src/internal/peer-connections.ts +4 -1
- package/src/internal/playground/static.ts +1 -3
- package/src/internal/resolved-connections.ts +8 -10
- package/src/internal/review-comments.ts +10 -113
- package/src/internal/scm/pr-url.ts +95 -0
- package/src/internal/sdk-runner.ts +57 -2
- package/src/internal/server.ts +161 -251
- package/src/internal/session-engine.ts +266 -69
- package/src/internal/tool-catalog.ts +106 -0
- package/src/storage-backends/cursor-hosted.ts +10 -3
- package/src/types.ts +90 -23
- package/templates/agentic-owners/README.md +1 -1
- package/templates/agentic-owners/agent/agent.ts +0 -10
- package/templates/agentic-owners/agent/channels/github.ts +5 -14
- package/templates/agentic-owners/agent/lib/config.ts +0 -8
- package/templates/agentic-owners/agent/lib/review.ts +2 -15
- package/templates/agentic-owners/agent/tools/record_review.ts +2 -4
- package/templates/demo/agent/agent.ts +0 -10
- package/templates/pr-autofixer/README.md +0 -2
- package/templates/pr-autofixer/agent/agent.ts +0 -11
- package/templates/pr-autofixer/agent/channels/slack.ts +1 -2
- package/templates/pr-autofixer/agent/lib/pr-state.ts +5 -17
- package/templates/pr-autofixer/agent/lib/repos.ts +0 -1
- package/templates/security-help/README.md +2 -2
- package/templates/security-help/agent/agent.ts +1 -2
- package/templates/security-help/agent/channels/slack.ts +0 -3
- package/templates/security-help/agent/instructions.md +9 -10
- package/templates/security-help/agent/skills/access-request.md +1 -1
- package/templates/security-help/agent/skills/faq.md +31 -0
- package/templates/security-help/agent/skills/security-playbooks.md +1 -1
- package/templates/security-help/package.json +1 -2
- package/templates/security-reviewer/agent/agent.ts +0 -10
- package/templates/triage/README.md +2 -1
- package/templates/triage/agent/agent.ts +0 -10
- package/templates/triage/agent/channels/queue.ts +1 -1
- package/templates/triage/agent/channels/webhook.ts +1 -3
- package/templates/triage/overlays/jira/agent/mcp-connections/tracker.ts +0 -1
- package/templates/triage/overlays/linear/agent/mcp-connections/tracker.ts +0 -1
- package/dist/channels/slack/cursor-account.d.ts +0 -87
- package/dist/channels/slack/cursor-account.d.ts.map +0 -1
- package/dist/channels/slack/cursor-account.js +0 -100
- package/dist/docs/assets/chunks/@localSearchIndexroot.ChpIC3Zy.js +0 -1
- package/dist/docs/assets/concepts.md.F6AiPorA.js +0 -1
- package/dist/docs/assets/example-agents_approval-buddy.md.DmezILPg.js +0 -10
- package/dist/docs/assets/example-agents_approval-buddy.md.DmezILPg.lean.js +0 -1
- package/dist/docs/assets/example-agents_benny.md.B0kwY7D_.js +0 -5
- package/dist/docs/assets/example-agents_benny.md.B0kwY7D_.lean.js +0 -1
- package/dist/docs/assets/example-agents_bugbot.md.BRGMi9O2.js +0 -11
- package/dist/docs/assets/example-agents_bugbot.md.BRGMi9O2.lean.js +0 -1
- package/dist/docs/assets/example-agents_codebase-wiki.md.BBNw9Ekr.js +0 -8
- package/dist/docs/assets/example-agents_codebase-wiki.md.BBNw9Ekr.lean.js +0 -1
- package/dist/docs/assets/example-agents_codeowners-review.md.Bfta-lBU.js +0 -8
- package/dist/docs/assets/example-agents_codeowners-review.md.Bfta-lBU.lean.js +0 -1
- package/dist/docs/assets/example-agents_concierge.md.BzB2b20R.js +0 -22
- package/dist/docs/assets/example-agents_concierge.md.BzB2b20R.lean.js +0 -1
- package/dist/docs/assets/example-agents_index.md.ChBp0AX6.js +0 -2
- package/dist/docs/assets/example-agents_index.md.ChBp0AX6.lean.js +0 -1
- package/dist/docs/assets/example-agents_knowledge-base.md.CrA85ig-.js +0 -11
- package/dist/docs/assets/example-agents_knowledge-base.md.CrA85ig-.lean.js +0 -1
- package/dist/docs/assets/example-agents_oncall.md.DK4XkYTd.js +0 -10
- package/dist/docs/assets/example-agents_oncall.md.DK4XkYTd.lean.js +0 -1
- package/dist/docs/assets/example-agents_security-reviewer.md.74pPpWYj.js +0 -19
- package/dist/docs/assets/example-agents_security-reviewer.md.74pPpWYj.lean.js +0 -1
- package/dist/docs/assets/example-agents_slack-agent.md.D7Kdj5BV.js +0 -5
- package/dist/docs/assets/example-agents_slack-agent.md.D7Kdj5BV.lean.js +0 -1
- package/dist/docs/assets/example-agents_weather-agent.md.CaGpmw3Y.js +0 -25
- package/dist/docs/assets/example-agents_weather-agent.md.CaGpmw3Y.lean.js +0 -1
- package/dist/docs/assets/guides_cloud-runtime.md.BnvjPiia.js +0 -9
- package/dist/docs/assets/guides_cloud-runtime.md.BnvjPiia.lean.js +0 -1
- package/dist/docs/assets/guides_slack.md.mqeNKs84.lean.js +0 -1
- package/dist/docs/assets/index.md.B-lVR4wT.js +0 -5
- package/dist/docs/assets/reference_http-api.md.C68BERYr.js +0 -11
- package/dist/docs/assets/reference_http-api.md.C68BERYr.lean.js +0 -1
- package/dist/docs/assets/reference_project-layout.md.WN9nwJht.js +0 -17
- package/dist/docs/assets/troubleshooting.md.vCWwvqcJ.js +0 -1
- package/dist/docs/example-agents/approval-buddy.html +0 -36
- package/dist/docs/example-agents/approval-buddy.md +0 -266
- package/dist/docs/example-agents/benny.html +0 -31
- package/dist/docs/example-agents/benny.md +0 -173
- package/dist/docs/example-agents/bugbot.html +0 -37
- package/dist/docs/example-agents/bugbot.md +0 -229
- package/dist/docs/example-agents/codebase-wiki.html +0 -34
- package/dist/docs/example-agents/codebase-wiki.md +0 -167
- package/dist/docs/example-agents/codeowners-review.html +0 -34
- package/dist/docs/example-agents/codeowners-review.md +0 -192
- package/dist/docs/example-agents/concierge.html +0 -48
- package/dist/docs/example-agents/concierge.md +0 -200
- package/dist/docs/example-agents/index.html +0 -28
- package/dist/docs/example-agents/index.md +0 -99
- package/dist/docs/example-agents/knowledge-base.html +0 -37
- package/dist/docs/example-agents/knowledge-base.md +0 -168
- package/dist/docs/example-agents/oncall.html +0 -36
- package/dist/docs/example-agents/oncall.md +0 -212
- package/dist/docs/example-agents/security-reviewer.html +0 -45
- package/dist/docs/example-agents/security-reviewer.md +0 -265
- package/dist/docs/example-agents/slack-agent.html +0 -31
- package/dist/docs/example-agents/slack-agent.md +0 -142
- package/dist/docs/example-agents/weather-agent.html +0 -51
- package/dist/docs/example-agents/weather-agent.md +0 -297
- package/dist/internal/cursor-slack-relay.d.ts +0 -96
- package/dist/internal/cursor-slack-relay.d.ts.map +0 -1
- package/dist/internal/cursor-slack-relay.js +0 -176
- package/dist/playground/assets/index-D9N7-q97.css +0 -1
- package/docs/example-agents/approval-buddy.md +0 -271
- package/docs/example-agents/benny.md +0 -178
- package/docs/example-agents/bugbot.md +0 -234
- package/docs/example-agents/codebase-wiki.md +0 -172
- package/docs/example-agents/codeowners-review.md +0 -197
- package/docs/example-agents/concierge.md +0 -205
- package/docs/example-agents/index.md +0 -104
- package/docs/example-agents/knowledge-base.md +0 -173
- package/docs/example-agents/oncall.md +0 -217
- package/docs/example-agents/security-reviewer.md +0 -270
- package/docs/example-agents/slack-agent.md +0 -147
- package/docs/example-agents/weather-agent.md +0 -302
- package/src/channels/slack/cursor-account.ts +0 -202
- package/src/internal/cursor-slack-relay.ts +0 -249
- package/templates/security-help/agent/knowledge/faq/approvals.md +0 -5
- package/templates/security-help/agent/knowledge/faq/channels.md +0 -6
- package/templates/security-help/agent/knowledge/faq/phishing.md +0 -10
- package/templates/security-help/agent/skills/security-first-pass.md +0 -15
- /package/dist/docs/assets/{concepts.md.F6AiPorA.lean.js → concepts.md.lwAgBIMI.lean.js} +0 -0
- /package/dist/docs/assets/{guides_agent-to-agent.md.B3JIaAqz.lean.js → guides_agent-to-agent.md.BDb0t1QV.lean.js} +0 -0
- /package/dist/docs/assets/{guides_convert-automation.md.Bboisykk.lean.js → guides_convert-automation.md.B4sjlodG.lean.js} +0 -0
- /package/dist/docs/assets/{guides_github.md.DqJhuaN1.lean.js → guides_github.md.Cnh2mL4a.lean.js} +0 -0
- /package/dist/docs/assets/{quickstart.md.BrmfrrIr.lean.js → quickstart.md.Nj_LjW_a.lean.js} +0 -0
- /package/dist/docs/assets/{reference_hooks.md.BxN87gCw.lean.js → reference_hooks.md.a8BJxMR5.lean.js} +0 -0
- /package/dist/docs/assets/{reference_project-layout.md.WN9nwJht.lean.js → reference_project-layout.md.Bv4KOtlB.lean.js} +0 -0
- /package/dist/docs/assets/{reference_subagents.md.Xoav0AII.lean.js → reference_subagents.md.CfsIloPm.lean.js} +0 -0
- /package/dist/docs/assets/{templates_agentic-owners.md.DqtPdm6f.lean.js → templates_agentic-owners.md.BZSH4N9z.lean.js} +0 -0
- /package/dist/docs/assets/{templates_demo.md.DhFcWN6j.lean.js → templates_demo.md.BeQX9V3H.lean.js} +0 -0
- /package/dist/docs/assets/{troubleshooting.md.vCWwvqcJ.lean.js → troubleshooting.md.Ctv3T8C2.lean.js} +0 -0
|
@@ -1,173 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: "Build a team knowledge base through conversation"
|
|
3
|
-
description: "Teach an agent about people, systems, decisions, and preferences; store that knowledge as markdown and retrieve it in fresh sessions."
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Build a team knowledge base through conversation
|
|
7
|
-
|
|
8
|
-
Knowledge base turns conversations into shared team context. Teach the agent
|
|
9
|
-
about people, systems, decisions, and standing preferences. Three server
|
|
10
|
-
tools read, search, and write human-readable markdown pages; a conventions
|
|
11
|
-
skill shapes each write; and a daily schedule merges duplicates and rebuilds
|
|
12
|
-
the index. A fresh session retrieves what an earlier conversation captured.
|
|
13
|
-
|
|
14
|
-
Use this project when people should curate organizational knowledge through
|
|
15
|
-
chat. Use [Codebase wiki](./codebase-wiki.md) when merged PRs should maintain
|
|
16
|
-
feature documentation instead.
|
|
17
|
-
|
|
18
|
-
[Browse the knowledge base source.](../../examples/knowledge-base/)
|
|
19
|
-
|
|
20
|
-
## Keep shared knowledge on the filesystem
|
|
21
|
-
|
|
22
|
-
The knowledge base lives outside any session workspace, in a wiki
|
|
23
|
-
directory on the serve host by default. `KNOWLEDGE_BASE_DIR` overrides the location,
|
|
24
|
-
and the tools resolve it on every call, so tests and evals can point the same
|
|
25
|
-
code at a temp directory.
|
|
26
|
-
|
|
27
|
-
The store enforces its own safety:
|
|
28
|
-
|
|
29
|
-
- Page ids are one to three lowercase kebab-case segments, so a page id
|
|
30
|
-
can't escape the wiki directory.
|
|
31
|
-
- Pages cap at 64 KiB. Oversized writes fail with instructions to split
|
|
32
|
-
the page.
|
|
33
|
-
- `wiki_write` replaces whole pages. The instructions require reading a
|
|
34
|
-
page before updating it, so rewrites carry existing facts forward.
|
|
35
|
-
|
|
36
|
-
Every page is plain markdown. You can open the wiki in an editor,
|
|
37
|
-
review it in a PR, or grep it.
|
|
38
|
-
|
|
39
|
-
## Follow a fact through the agent
|
|
40
|
-
|
|
41
|
-
1. You tell the agent something durable: a system, an owner, a standing
|
|
42
|
-
preference.
|
|
43
|
-
2. The instructions require a `wiki_search` before claiming knowledge
|
|
44
|
-
and a `wiki_write` after learning something worth keeping.
|
|
45
|
-
3. The `wiki-conventions` skill picks the page id (`staging-database`,
|
|
46
|
-
`people/jane-doe`), the page shape, and the dated fact format.
|
|
47
|
-
4. The tool writes the page under the durable wiki root and returns
|
|
48
|
-
whether it created or updated the page.
|
|
49
|
-
5. A later session, on any channel, finds the fact with `wiki_search`
|
|
50
|
-
and cites the knowledge-base page in its answer.
|
|
51
|
-
|
|
52
|
-
Ephemeral chatter stays out. The instructions tell the model to skip
|
|
53
|
-
one-off questions and to ask before saving anything borderline.
|
|
54
|
-
|
|
55
|
-
## Map the knowledge-base files
|
|
56
|
-
|
|
57
|
-
| File | Purpose |
|
|
58
|
-
| --- | --- |
|
|
59
|
-
| [`agent/agent.ts`](../../examples/knowledge-base/agent/agent.ts) | Selects the local runtime and model. |
|
|
60
|
-
| [`agent/instructions.md`](../../examples/knowledge-base/agent/instructions.md) | Sets the read-before-answer and save-after-learning policy. |
|
|
61
|
-
| [`agent/lib/wiki-store.ts`](../../examples/knowledge-base/agent/lib/wiki-store.ts) | Validates page ids, lists, reads, writes, and searches the knowledge base. |
|
|
62
|
-
| [`agent/tools/wiki_read.ts`](../../examples/knowledge-base/agent/tools/wiki_read.ts) | Reads one page or lists every page with titles and timestamps. |
|
|
63
|
-
| [`agent/tools/wiki_search.ts`](../../examples/knowledge-base/agent/tools/wiki_search.ts) | Searches titles and bodies with per-page match lines. |
|
|
64
|
-
| [`agent/tools/wiki_write.ts`](../../examples/knowledge-base/agent/tools/wiki_write.ts) | Creates or replaces a page and reports created versus updated. |
|
|
65
|
-
| [`agent/skills/wiki-conventions.md`](../../examples/knowledge-base/agent/skills/wiki-conventions.md) | Names pages, shapes them, and dates every fact. |
|
|
66
|
-
| [`agent/schedules/gardener.md`](../../examples/knowledge-base/agent/schedules/gardener.md) | Merges duplicates, rebuilds the index, and flags stale facts daily. |
|
|
67
|
-
| [`agent/lib/wiki-store.test.ts`](../../examples/knowledge-base/agent/lib/wiki-store.test.ts) | Unit-tests slug safety and store round-trips. |
|
|
68
|
-
| [`agent/storage.ts`](../../examples/knowledge-base/agent/storage.ts) | Persists sessions and events with `cursorHostedStorage`. |
|
|
69
|
-
| [`evals/evals.config.ts`](../../examples/knowledge-base/evals/evals.config.ts) | Caps eval run concurrency. |
|
|
70
|
-
| [`evals/knowledge.eval.ts`](../../examples/knowledge-base/evals/knowledge.eval.ts) | Seeds a temp knowledge base and gates recall, save, and no-write decisions. |
|
|
71
|
-
|
|
72
|
-
There is no authored channel, MCP connection, subagent, hook, or A/B
|
|
73
|
-
experiment. The wiki directory is the durable knowledge store.
|
|
74
|
-
|
|
75
|
-
## Prepare the example
|
|
76
|
-
|
|
77
|
-
You need:
|
|
78
|
-
|
|
79
|
-
- Node 22.13 or newer.
|
|
80
|
-
- An agent-runtime credential for model turns.
|
|
81
|
-
|
|
82
|
-
Nothing else. The wiki is created on first write.
|
|
83
|
-
|
|
84
|
-
## Validate the surface
|
|
85
|
-
|
|
86
|
-
```bash
|
|
87
|
-
agent-sdk validate --dir examples/knowledge-base
|
|
88
|
-
agent-sdk info --dir examples/knowledge-base --json
|
|
89
|
-
```
|
|
90
|
-
|
|
91
|
-
The manifest should report three server tools, one skill, and one
|
|
92
|
-
schedule.
|
|
93
|
-
|
|
94
|
-
## Exercise the store without a model turn
|
|
95
|
-
|
|
96
|
-
```bash
|
|
97
|
-
agent-sdk call wiki_write \
|
|
98
|
-
--dir examples/knowledge-base \
|
|
99
|
-
--input '{"page":"staging-database","content":"# Staging database\n\n- Port: 6432 (recorded 2026-07-19)\n"}'
|
|
100
|
-
|
|
101
|
-
agent-sdk call wiki_search \
|
|
102
|
-
--dir examples/knowledge-base \
|
|
103
|
-
--input '{"query":"6432"}'
|
|
104
|
-
|
|
105
|
-
agent-sdk call wiki_read --dir examples/knowledge-base --input '{}'
|
|
106
|
-
```
|
|
107
|
-
|
|
108
|
-
Invalid page ids fail fast. Try `{"page":"../escape"}` and the tool
|
|
109
|
-
returns the validation error instead of touching the filesystem.
|
|
110
|
-
|
|
111
|
-
## Prove recall across sessions
|
|
112
|
-
|
|
113
|
-
```bash
|
|
114
|
-
agent-sdk dev examples/knowledge-base
|
|
115
|
-
```
|
|
116
|
-
|
|
117
|
-
Teach it something in the playground:
|
|
118
|
-
|
|
119
|
-
> Remember: our staging database is Postgres at
|
|
120
|
-
> staging-db.internal.example.com, port 6432 via PgBouncer. Jane Doe
|
|
121
|
-
> owns it.
|
|
122
|
-
|
|
123
|
-
The trace shows the conventions skill load, then `wiki_write` calls
|
|
124
|
-
for `staging-database`, `people/jane-doe`, and `index`. Start a new
|
|
125
|
-
session and ask:
|
|
126
|
-
|
|
127
|
-
> What port does our staging database use, and who owns it?
|
|
128
|
-
|
|
129
|
-
The fresh session finds the answer with `wiki_search` and `wiki_read`
|
|
130
|
-
and cites the pages. The conversation history is empty; the wiki is the
|
|
131
|
-
source of truth.
|
|
132
|
-
|
|
133
|
-
## Run the gardener
|
|
134
|
-
|
|
135
|
-
The `gardener` schedule fires at 06:00 UTC and rewrites the wiki for
|
|
136
|
-
consistency: merge near-duplicate pages, rebuild `index`, and flag
|
|
137
|
-
facts older than 90 days. Under `agent-sdk dev`, timers don't auto-fire.
|
|
138
|
-
Trigger it by hand:
|
|
139
|
-
|
|
140
|
-
```bash
|
|
141
|
-
curl -s -X POST http://127.0.0.1:3000/knowledge-base/v1/dev/schedules/gardener
|
|
142
|
-
```
|
|
143
|
-
|
|
144
|
-
## Run the evals
|
|
145
|
-
|
|
146
|
-
```bash
|
|
147
|
-
agent-sdk eval --dir examples/knowledge-base --list
|
|
148
|
-
agent-sdk eval --dir examples/knowledge-base knowledge/recall
|
|
149
|
-
```
|
|
150
|
-
|
|
151
|
-
The eval file seeds a temp directory through `KNOWLEDGE_BASE_DIR`
|
|
152
|
-
inside the cases, so the durable knowledge base never sees test data.
|
|
153
|
-
`knowledge/recall` proves the fact comes from disk, not the conversation.
|
|
154
|
-
`knowledge/save`
|
|
155
|
-
gates the write decision, and `knowledge/no-write-on-ephemera` proves small
|
|
156
|
-
talk stays out of the knowledge base.
|
|
157
|
-
|
|
158
|
-
## Reuse the knowledge-base pattern
|
|
159
|
-
|
|
160
|
-
Copy this shape when an agent needs durable, inspectable team knowledge:
|
|
161
|
-
|
|
162
|
-
- Resolve the storage root lazily behind an environment override.
|
|
163
|
-
- Validate identifiers in the store, not in the prompt.
|
|
164
|
-
- Put naming and structure conventions in a skill so writes stay
|
|
165
|
-
consistent.
|
|
166
|
-
- Add a consolidation schedule instead of letting pages rot.
|
|
167
|
-
|
|
168
|
-
## Where to go next
|
|
169
|
-
|
|
170
|
-
- [Tools](../reference/tools.md)
|
|
171
|
-
- [Skills](../reference/skills.md)
|
|
172
|
-
- [Schedules](../reference/schedules.md)
|
|
173
|
-
- [Evals](../evals.md)
|
|
@@ -1,217 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: "Investigate every alert in its own Slack thread"
|
|
3
|
-
description: "Watch a bot-fed alerts channel, react when the agent locks in, coalesce thread chatter behind a quiet window, and let the agent schedule its own re-checks."
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Investigate every alert in its own Slack thread
|
|
7
|
-
|
|
8
|
-
This agent is an on-call teammate. Alert feeds post into an alerts channel
|
|
9
|
-
as bots. Each new alert dispatches an investigation session pinned to that
|
|
10
|
-
post's thread: the agent reacts 👀 the moment it locks in, investigates
|
|
11
|
-
immediately, and posts brief findings backed by evidence it observed.
|
|
12
|
-
Replies in the thread reach it only after the thread has been quiet for
|
|
13
|
-
about a minute, and reminder tools let it wake itself later to re-check a
|
|
14
|
-
baseline or confirm an alert cleared.
|
|
15
|
-
|
|
16
|
-
Use this example when alerts land in Slack and you want one thread-scoped
|
|
17
|
-
investigation per alert, with an agent that paces its own engagement
|
|
18
|
-
instead of answering every message.
|
|
19
|
-
|
|
20
|
-
[Browse the current alert-investigator source.](../../examples/oncall/)
|
|
21
|
-
|
|
22
|
-
## Follow an alert
|
|
23
|
-
|
|
24
|
-
1. An alert feed (Alertmanager, PagerDuty, Datadog) posts a new top-level
|
|
25
|
-
message in the watched alerts channel.
|
|
26
|
-
2. The channel watch accepts it. `includeBotPosts` lets bot authors
|
|
27
|
-
through; the agent's own posts always stay dropped.
|
|
28
|
-
3. The handler reacts 👀 on the alert post and sets "Investigating…"
|
|
29
|
-
typing. The reaction is the lock-in signal: this alert has an owner.
|
|
30
|
-
4. The Agent SDK creates a session keyed to the alert's thread and dispatches
|
|
31
|
-
immediately. New alerts get no debounce.
|
|
32
|
-
5. The agent reads the alert, gathers evidence, and posts findings to the
|
|
33
|
-
thread once it has a hypothesis.
|
|
34
|
-
6. People discuss in the thread. Replies buffer per thread and dispatch as
|
|
35
|
-
one coalesced follow-up after roughly a minute of quiet.
|
|
36
|
-
7. The agent arms reminders for anything that needs time and posts interim
|
|
37
|
-
updates when new evidence changes the picture.
|
|
38
|
-
|
|
39
|
-
Mentions and DMs skip the watch entirely and behave like ordinary chat.
|
|
40
|
-
|
|
41
|
-
## Map the files
|
|
42
|
-
|
|
43
|
-
| File | Purpose |
|
|
44
|
-
| --- | --- |
|
|
45
|
-
| [`agent/agent.ts`](../../examples/oncall/agent/agent.ts) | Names the agent and keeps harness workspaces outside any monorepo checkout. |
|
|
46
|
-
| [`agent/instructions.md`](../../examples/oncall/agent/instructions.md) | Engagement rules, the investigation loop, and the message discipline. |
|
|
47
|
-
| [`agent/channels/slack-app.ts`](../../examples/oncall/agent/channels/slack-app.ts) | Dedicated Socket Mode app: watch configuration and handler wiring. |
|
|
48
|
-
| [`agent/lib/alert-watch.ts`](../../examples/oncall/agent/lib/alert-watch.ts) | The engagement policy: lock in on new alerts, coalesce replies. |
|
|
49
|
-
| [`agent/lib/thread-debounce.ts`](../../examples/oncall/agent/lib/thread-debounce.ts) | Per-thread quiet window. |
|
|
50
|
-
| [`agent/lib/alerts.ts`](../../examples/oncall/agent/lib/alerts.ts) | Dispatch classification, prompt building, and thread addressing. |
|
|
51
|
-
| [`agent/lib/slack-api.ts`](../../examples/oncall/agent/lib/slack-api.ts) | Reactions and thread posts on this agent's own token pair. |
|
|
52
|
-
| [`agent/tools/reminders_create.ts`](../../examples/oncall/agent/tools/reminders_create.ts) | Self-scheduled wakes bound to the thread (plus `reminders_list` and `reminders_cancel`). |
|
|
53
|
-
| [`agent/tools/post_thread_update.ts`](../../examples/oncall/agent/tools/post_thread_update.ts) | Interim updates to the thread mid-turn. |
|
|
54
|
-
| [`agent/storage.ts`](../../examples/oncall/agent/storage.ts) | Persists sessions and events with `cursorHostedStorage`. |
|
|
55
|
-
| [`evals/evals.config.ts`](../../examples/oncall/evals/evals.config.ts) | Caps eval run concurrency. |
|
|
56
|
-
| [`evals/smoke.eval.ts`](../../examples/oncall/evals/smoke.eval.ts) | Checks identity and the reminder-tool route. |
|
|
57
|
-
|
|
58
|
-
## Let bot posts through the watch
|
|
59
|
-
|
|
60
|
-
Channel watching drops bot-authored posts by default so two agents can
|
|
61
|
-
never feed each other. Alert channels invert the assumption: the posts
|
|
62
|
-
worth watching come from bots. `channelPosts.includeBotPosts` opts in per
|
|
63
|
-
channel:
|
|
64
|
-
|
|
65
|
-
```ts
|
|
66
|
-
engagement: {
|
|
67
|
-
channelPosts: {
|
|
68
|
-
allow: ["#alerts"],
|
|
69
|
-
posts: "all",
|
|
70
|
-
includeBotPosts: true,
|
|
71
|
-
},
|
|
72
|
-
},
|
|
73
|
-
```
|
|
74
|
-
|
|
75
|
-
Loop safety survives the opt-in. The pack matches the watching app's own
|
|
76
|
-
posts by the `bot_id` and bot user id from `auth.test` and drops them, so
|
|
77
|
-
the agent's findings never re-dispatch it. Posts that mention the bot stay
|
|
78
|
-
on the mention path.
|
|
79
|
-
|
|
80
|
-
`posts: "all"` also delivers thread replies. The handler, not the pack,
|
|
81
|
-
decides their pace.
|
|
82
|
-
|
|
83
|
-
## Pace the engagement
|
|
84
|
-
|
|
85
|
-
The example runs two rhythms:
|
|
86
|
-
|
|
87
|
-
- A new alert dispatches immediately.
|
|
88
|
-
- Thread replies produce one engagement per lull.
|
|
89
|
-
|
|
90
|
-
The pack's `debounceMs` is per message; it exists to let edits settle. This
|
|
91
|
-
agent needs a per-thread window instead, so the handler owns it
|
|
92
|
-
([`lib/thread-debounce.ts`](../../examples/oncall/agent/lib/thread-debounce.ts)).
|
|
93
|
-
Every reply restarts a 60-second timer keyed by thread. Superseded waiters
|
|
94
|
-
resolve `null` and the handler returns `null` for them. When the thread
|
|
95
|
-
goes quiet, the newest waiter receives the whole batch and dispatches one
|
|
96
|
-
follow-up that lists every message with mentionable attribution.
|
|
97
|
-
|
|
98
|
-
Two details make the window matter. A follow-up that arrives while a turn
|
|
99
|
-
runs preempts that turn (latest message wins), so engaging per message
|
|
100
|
-
would keep cancelling the investigation. And @mentions bypass the window
|
|
101
|
-
through Slack's mention path, so a person who needs the agent now still
|
|
102
|
-
gets it now.
|
|
103
|
-
|
|
104
|
-
## Schedule your own re-checks
|
|
105
|
-
|
|
106
|
-
Investigations rarely finish in one pass. A baseline comparison needs 20
|
|
107
|
-
minutes of data. An alert that cleared may re-fire. The example hands the
|
|
108
|
-
model three tools over `host.reminders`:
|
|
109
|
-
|
|
110
|
-
- `reminders_create` arms a one-shot (`delay: "20m"`) or recurring
|
|
111
|
-
(`every: "30m"` with a plain-language stop condition) wake bound to the
|
|
112
|
-
thread's conversation.
|
|
113
|
-
- `reminders_list` shows the thread's standing watches.
|
|
114
|
-
- `reminders_cancel` disarms one, and refuses ids that belong to another
|
|
115
|
-
thread's conversation.
|
|
116
|
-
|
|
117
|
-
When a reminder fires, its prompt returns to the same session as a
|
|
118
|
-
follow-up turn, and the reply lands in the alert thread. The instructions
|
|
119
|
-
keep wake prompts generic (re-read live state instead of replaying stale
|
|
120
|
-
numbers) and wake replies to one line, for example "re-checked p99 on
|
|
121
|
-
api-gateway: 120ms, back at baseline, cancelling the watch."
|
|
122
|
-
|
|
123
|
-
Keep these tool filenames if you copy the design: the framework's reminder
|
|
124
|
-
fire prompt tells the model to call `reminders_cancel` by name when a stop
|
|
125
|
-
condition is set.
|
|
126
|
-
|
|
127
|
-
## Alert people mid-investigation
|
|
128
|
-
|
|
129
|
-
The final reply of each turn posts to the thread on its own.
|
|
130
|
-
`post_thread_update` covers evidence that shouldn't wait for the turn to
|
|
131
|
-
finish: it posts a one-or-two-sentence update through the agent's token,
|
|
132
|
-
with `<@USERID>` mentions for the people who need to act. The instructions
|
|
133
|
-
restrict it to changes in hypothesis, severity, or blast radius. Progress
|
|
134
|
-
narration doesn't qualify.
|
|
135
|
-
|
|
136
|
-
## Connect the Slack app
|
|
137
|
-
|
|
138
|
-
Channel watching is Socket Mode only, so this example uses a dedicated
|
|
139
|
-
app:
|
|
140
|
-
|
|
141
|
-
```bash
|
|
142
|
-
agent-sdk slack create --dir examples/oncall --name "Oncall" --channel-posts
|
|
143
|
-
agent-sdk slack doctor --prefix ONCALL
|
|
144
|
-
```
|
|
145
|
-
|
|
146
|
-
`--channel-posts` prefills channel-watch events (`message.channels` /
|
|
147
|
-
`message.groups`). Invite the bot to each watched channel after the
|
|
148
|
-
wizard finishes.
|
|
149
|
-
|
|
150
|
-
`ONCALL_ALERTS_CHANNELS` sets the watch list as comma-separated ids or
|
|
151
|
-
`#names`. It defaults to `#alerts`.
|
|
152
|
-
|
|
153
|
-
Wire observability MCP servers under `agent/mcp-connections/` so evidence
|
|
154
|
-
gathering reaches your logs, metrics, and dashboards. The example ships
|
|
155
|
-
none; without them the agent works from the alert text, its links, and the
|
|
156
|
-
thread.
|
|
157
|
-
|
|
158
|
-
## Validate and start the server
|
|
159
|
-
|
|
160
|
-
```bash
|
|
161
|
-
agent-sdk validate --dir examples/oncall
|
|
162
|
-
agent-sdk info --dir examples/oncall --json
|
|
163
|
-
agent-sdk dev examples/oncall
|
|
164
|
-
```
|
|
165
|
-
|
|
166
|
-
The info output lists four server tools and the watched channel on the
|
|
167
|
-
`slack-app` channel. Missing tokens leave that channel idle without
|
|
168
|
-
stopping the server.
|
|
169
|
-
|
|
170
|
-
In dev mode, reminder timers don't auto-fire. List and fire them by hand
|
|
171
|
-
through the dev routes described in
|
|
172
|
-
[Schedules and reminders](../reference/schedules.md#dispatch-and-dev-mode).
|
|
173
|
-
|
|
174
|
-
## Test the policy without Slack
|
|
175
|
-
|
|
176
|
-
The engagement policy is plain code with unit tests:
|
|
177
|
-
|
|
178
|
-
```bash
|
|
179
|
-
pnpm exec vitest run examples/oncall
|
|
180
|
-
```
|
|
181
|
-
|
|
182
|
-
The integration test drives a synthetic Events API delivery through the
|
|
183
|
-
real parse, watch, and dispatch plumbing. It asserts a bot alert
|
|
184
|
-
dispatches pinned to its thread after the lock-in reaction, the agent's
|
|
185
|
-
own posts never loop, and replies coalesce behind the quiet window.
|
|
186
|
-
|
|
187
|
-
The smoke eval spends a model turn:
|
|
188
|
-
|
|
189
|
-
```bash
|
|
190
|
-
agent-sdk eval --dir examples/oncall smoke --json
|
|
191
|
-
```
|
|
192
|
-
|
|
193
|
-
It checks identity and the reminder-tool route lexically. It doesn't prove
|
|
194
|
-
Slack delivery or reaction behavior; the unit tests cover the dispatch
|
|
195
|
-
side, and a live check needs the dedicated app connected.
|
|
196
|
-
|
|
197
|
-
## Build an alert investigator
|
|
198
|
-
|
|
199
|
-
Use this structure when a bot feed should drive thread-scoped work:
|
|
200
|
-
|
|
201
|
-
1. Watch the feed channel with `includeBotPosts: true` and a narrow
|
|
202
|
-
allowlist.
|
|
203
|
-
2. Acknowledge on the triggering post before dispatching, so people see
|
|
204
|
-
ownership without opening the thread.
|
|
205
|
-
3. Dispatch new items immediately; coalesce thread chatter behind a
|
|
206
|
-
per-thread quiet window.
|
|
207
|
-
4. Give the agent reminder tools for anything that needs time, and make
|
|
208
|
-
cancel discipline part of the instructions.
|
|
209
|
-
5. Keep every posted message brief and tied to evidence the agent saw.
|
|
210
|
-
|
|
211
|
-
## Where to go next
|
|
212
|
-
|
|
213
|
-
- [Slack](../guides/slack.md)
|
|
214
|
-
- [Schedules and reminders](../reference/schedules.md)
|
|
215
|
-
- [Tools](../reference/tools.md)
|
|
216
|
-
- [Playbook router](./benny.md) for the human-post variant of channel
|
|
217
|
-
watching
|
|
@@ -1,270 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: "Run staged security reviews from GitHub events"
|
|
3
|
-
description: "Orchestrate parallel reviewer agents, streamed triage, deterministic stages, live playground progress, durable sessions, and severity A/B metrics."
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Run staged security reviews from GitHub events
|
|
7
|
-
|
|
8
|
-
Security Reviewer turns a pull request into a staged host-side review. One
|
|
9
|
-
tool prepares the diff and selects modules. A second fans out specialized
|
|
10
|
-
reviewers and triages candidates as they arrive. A third deduplicates the
|
|
11
|
-
confirmed findings, writes artifacts, and may publish a GitHub review.
|
|
12
|
-
|
|
13
|
-
Use this example when the workflow needs several model workers, but the host
|
|
14
|
-
must own orchestration, progress, artifacts, and the final write.
|
|
15
|
-
|
|
16
|
-
Source lives under [`factory/security-reviewer/`](../../../../factory/security-reviewer/) (factory agent, not under `examples/`).
|
|
17
|
-
|
|
18
|
-
Want one model turn and one comment? Scaffold the
|
|
19
|
-
[security-reviewer template](../templates/security-reviewer.md).
|
|
20
|
-
|
|
21
|
-
[Browse the Security Reviewer source.](../../../../factory/security-reviewer/)
|
|
22
|
-
|
|
23
|
-
## Run a three-stage host pipeline
|
|
24
|
-
|
|
25
|
-
Security Reviewer is a pipeline, not one long agent turn:
|
|
26
|
-
|
|
27
|
-
| Stage | Tool | Result |
|
|
28
|
-
| --- | --- | --- |
|
|
29
|
-
| Prepare | `prepare_review` | Fetch metadata and diff, create a `runId`, and select security modules. |
|
|
30
|
-
| Review and triage | `run_reviewers` | Run module reviewers in parallel and start triage as each candidate arrives. |
|
|
31
|
-
| Finalize | `finalize_review` | Apply thresholds, deduplicate findings, write artifacts, and optionally post a review. |
|
|
32
|
-
|
|
33
|
-
`run_triage` remains available as a compatibility stage. In the normal flow,
|
|
34
|
-
triage has already completed inside `run_reviewers`, so it reports existing
|
|
35
|
-
results. If candidates exist without triage output, it starts triage workers
|
|
36
|
-
and writes their state.
|
|
37
|
-
|
|
38
|
-
The configured root agent chooses and sequences tools in chat. The review
|
|
39
|
-
workers use a model selected by the host pipeline. They are
|
|
40
|
-
created programmatically with the agent SDK, not discovered from
|
|
41
|
-
`agent/subagents/`.
|
|
42
|
-
|
|
43
|
-
## Follow a GitHub review
|
|
44
|
-
|
|
45
|
-
1. A pull request event starts a review and opens a playground session.
|
|
46
|
-
2. The playground shows reviewer and triage progress.
|
|
47
|
-
3. Confirmed findings appear in the PR review.
|
|
48
|
-
4. A GitHub Check reports completion or a processing failure.
|
|
49
|
-
|
|
50
|
-
## Map the framework features
|
|
51
|
-
|
|
52
|
-
| Capability | Source | Role |
|
|
53
|
-
| --- | --- | --- |
|
|
54
|
-
| Root agent | [`agent/agent.ts`](../../../../factory/security-reviewer/agent/agent.ts), [`agent/instructions.md`](../../../../factory/security-reviewer/agent/instructions.md) | Configure local chat and explain the three-stage contract. |
|
|
55
|
-
| Server tools | [`agent/tools/`](../../../../factory/security-reviewer/agent/tools/) | Expose each review stage to chat and host orchestration. |
|
|
56
|
-
| GitHub channel | [`agent/channels/github.ts`](../../../../factory/security-reviewer/agent/channels/github.ts) | Filter wakes, run background tasks, and publish status. |
|
|
57
|
-
| Progress channel | [`agent/channels/asr-progress.ts`](../../../../factory/security-reviewer/agent/channels/asr-progress.ts) | Serve live reviewer and triage state by `runId`. |
|
|
58
|
-
| Playground renderer | [`agent/playground/tools/run_reviewers.tsx`](../../../../factory/security-reviewer/agent/playground/tools/run_reviewers.tsx) | Replace the generic tool chip with live module rows. |
|
|
59
|
-
| SDK review pipeline | [`review-stages.ts`](../../../../factory/security-reviewer/agent/lib/review-stages.ts), [`@anysphere/security-review-lib`](../../../../packages/security-review-lib/src/index.ts) | Select modules, call model workers, triage, deduplicate, and write artifacts. |
|
|
60
|
-
| Storage | [`agent/storage.ts`](../../../../factory/security-reviewer/agent/storage.ts) | Persist framework sessions with `cursorHostedStorage` (lazy restore). |
|
|
61
|
-
| A/B | [`agent/ab.ts`](../../../../factory/security-reviewer/agent/ab.ts) | Compare all-severity versus high-only GitHub comments. |
|
|
62
|
-
| Eval | [`evals/`](../../../../factory/security-reviewer/evals/) | Check stage-tool presence against a pinned sample. |
|
|
63
|
-
|
|
64
|
-
There is no Slack channel, authored skill, discovered subagent, MCP
|
|
65
|
-
connection, schedule, reminder, hook, tool approval, or cloud runtime.
|
|
66
|
-
|
|
67
|
-
## Prepare the host
|
|
68
|
-
|
|
69
|
-
You need:
|
|
70
|
-
|
|
71
|
-
- Node 22.13 or newer.
|
|
72
|
-
- An agent-runtime credential for the root turn and review workers.
|
|
73
|
-
- GitHub read access for preparation.
|
|
74
|
-
- GitHub write access for webhook-driven reviews and Checks.
|
|
75
|
-
|
|
76
|
-
The pipeline exposes settings for:
|
|
77
|
-
|
|
78
|
-
- the worker model,
|
|
79
|
-
- reviewer and triage parallelism,
|
|
80
|
-
- reviewer, triage, duplicate-gate, and final-dedupe timeouts, and
|
|
81
|
-
- prior-comment loading.
|
|
82
|
-
|
|
83
|
-
The active names live beside the orchestration in
|
|
84
|
-
[`review-stages.ts`](../../../../factory/security-reviewer/agent/lib/review-stages.ts).
|
|
85
|
-
|
|
86
|
-
## Validate the discovered agent
|
|
87
|
-
|
|
88
|
-
```bash
|
|
89
|
-
agent-sdk validate --dir ../../factory/security-reviewer
|
|
90
|
-
agent-sdk info --dir ../../factory/security-reviewer --json
|
|
91
|
-
agent-sdk eval --dir ../../factory/security-reviewer --list
|
|
92
|
-
```
|
|
93
|
-
|
|
94
|
-
`validate` should pass. `info` and `eval --list` should match the capabilities
|
|
95
|
-
mapped above.
|
|
96
|
-
|
|
97
|
-
## Know the chat path's write boundary
|
|
98
|
-
|
|
99
|
-
In chat, the root instructions ask the model to use this order:
|
|
100
|
-
|
|
101
|
-
```text
|
|
102
|
-
prepare_review -> run_reviewers -> finalize_review
|
|
103
|
-
```
|
|
104
|
-
|
|
105
|
-
They also ask the model to set `postComment: true` only on request. This is
|
|
106
|
-
prompt policy, not a deterministic safety gate. The model chooses tool
|
|
107
|
-
arguments, and `finalize_review` has no human approval. Use the direct stage
|
|
108
|
-
calls below when a no-post proof must be enforced.
|
|
109
|
-
|
|
110
|
-
## Call stages directly without publishing
|
|
111
|
-
|
|
112
|
-
Call each stage and pass `postComment: false` yourself:
|
|
113
|
-
|
|
114
|
-
```bash
|
|
115
|
-
agent-sdk call prepare_review \
|
|
116
|
-
--dir ../../factory/security-reviewer \
|
|
117
|
-
--input '{"prUrl":"https://github.com/owner/repo/pull/123"}'
|
|
118
|
-
|
|
119
|
-
agent-sdk call run_reviewers \
|
|
120
|
-
--dir ../../factory/security-reviewer \
|
|
121
|
-
--input '{"runId":"<run-id>"}'
|
|
122
|
-
|
|
123
|
-
agent-sdk call finalize_review \
|
|
124
|
-
--dir ../../factory/security-reviewer \
|
|
125
|
-
--input '{"runId":"<run-id>","postComment":false}'
|
|
126
|
-
```
|
|
127
|
-
|
|
128
|
-
Review state lives under the project's run-artifact directory, so later
|
|
129
|
-
stages can open the prepared `runId`.
|
|
130
|
-
|
|
131
|
-
> [!CAUTION]
|
|
132
|
-
> `finalize_review` with `postComment: true` writes to GitHub. The webhook
|
|
133
|
-
> path always requests that write. Chat instructions alone don't prevent it.
|
|
134
|
-
|
|
135
|
-
## Watch parallel work in the playground
|
|
136
|
-
|
|
137
|
-
Run the dev server:
|
|
138
|
-
|
|
139
|
-
```bash
|
|
140
|
-
agent-sdk dev ../../factory/security-reviewer
|
|
141
|
-
```
|
|
142
|
-
|
|
143
|
-
Open the printed playground and start a review. The custom
|
|
144
|
-
`run_reviewers` renderer polls the progress channel's `GET /:runId` route.
|
|
145
|
-
|
|
146
|
-
It refreshes every 500 ms while the stage runs. Each row shows a reviewer
|
|
147
|
-
module's state, candidates, reviewed areas, and failure. A second section
|
|
148
|
-
shows triage jobs and confirmed or rejected counts.
|
|
149
|
-
|
|
150
|
-
This is an authored playground extension. The Agent SDK discovers it by the tool
|
|
151
|
-
name, so the generic `run_reviewers` chip becomes a domain-specific view
|
|
152
|
-
without changing the framework playground.
|
|
153
|
-
|
|
154
|
-
## Fan out reviewers while triage starts
|
|
155
|
-
|
|
156
|
-
Module selection uses repository and path rules. The current module set
|
|
157
|
-
covers:
|
|
158
|
-
|
|
159
|
-
- agent tooling trust boundaries,
|
|
160
|
-
- privileged service RPCs,
|
|
161
|
-
- product-specific security risks,
|
|
162
|
-
- dependency and supply-chain changes,
|
|
163
|
-
- deployment and infrastructure code,
|
|
164
|
-
- filesystem and workspace boundaries,
|
|
165
|
-
- privacy, and
|
|
166
|
-
- general security review.
|
|
167
|
-
|
|
168
|
-
Selected modules may run more than once. Candidates pass through a duplicate
|
|
169
|
-
gate, then bounded triage. Reviewer or triage failures can produce partial
|
|
170
|
-
results. A final dedupe failure stops finalization.
|
|
171
|
-
|
|
172
|
-
The pipeline writes JSONL journals as work completes. Final artifacts include
|
|
173
|
-
the review bundle, patch, reviewer outputs, candidates, triage decisions,
|
|
174
|
-
findings, accounting, and audit events.
|
|
175
|
-
|
|
176
|
-
## Separate session storage from review artifacts
|
|
177
|
-
|
|
178
|
-
`cursorHostedStorage` keeps Agent SDK session and event records on
|
|
179
|
-
Cursor-managed hosting. Security Reviewer sets `restore: "off"` so startup
|
|
180
|
-
doesn't load old review sessions in bulk. A continuation lookup can still
|
|
181
|
-
fetch a needed session. See [Storage](../storage.md).
|
|
182
|
-
|
|
183
|
-
The staged review files are separate from session storage. Session-store
|
|
184
|
-
durability doesn't preserve those files. All stages for one `runId` must see
|
|
185
|
-
the same filesystem.
|
|
186
|
-
|
|
187
|
-
This split is useful when conversation history needs shared durability but
|
|
188
|
-
large review artifacts belong on attached storage or an object store.
|
|
189
|
-
|
|
190
|
-
## Compare live comment variants
|
|
191
|
-
|
|
192
|
-
The comment-severity experiment uses sticky session assignment with a 5%
|
|
193
|
-
holdout:
|
|
194
|
-
|
|
195
|
-
- `control` posts every finding.
|
|
196
|
-
- `treatment` posts only high and critical findings.
|
|
197
|
-
|
|
198
|
-
Finalization enforces the comment filter. The treatment also adds an
|
|
199
|
-
instruction overlay asking chat and playground summaries to lead with high
|
|
200
|
-
and critical findings. Full artifacts, `finalResponse`, and finding counts
|
|
201
|
-
still include every finding. Stage-tool counters appear in the
|
|
202
|
-
playground A/B view. Local sample and snapshot files persist under
|
|
203
|
-
the project state directory.
|
|
204
|
-
|
|
205
|
-
When a treatment session has only low or medium findings, the filtered review
|
|
206
|
-
body currently says no vulnerabilities were found even though artifacts and
|
|
207
|
-
status retain findings. Account for that mismatch before using this
|
|
208
|
-
experiment as a publishing policy.
|
|
209
|
-
|
|
210
|
-
Eval sessions skip A/B enrollment.
|
|
211
|
-
|
|
212
|
-
## Test the GitHub channel carefully
|
|
213
|
-
|
|
214
|
-
The channel uses the host's Cursor account repository scope. It wakes on
|
|
215
|
-
`opened` and `synchronize`, skips drafts, and posts its own GitHub Check.
|
|
216
|
-
|
|
217
|
-
Inspect its event surface:
|
|
218
|
-
|
|
219
|
-
```bash
|
|
220
|
-
agent-sdk github events \
|
|
221
|
-
--dir ../../factory/security-reviewer \
|
|
222
|
-
--json
|
|
223
|
-
```
|
|
224
|
-
|
|
225
|
-
Replay reaches the full publishing path:
|
|
226
|
-
|
|
227
|
-
```bash
|
|
228
|
-
TEST_PR_URL=https://github.com/your-org/allowlisted-test-repo/pull/123
|
|
229
|
-
agent-sdk github replay \
|
|
230
|
-
"$TEST_PR_URL" \
|
|
231
|
-
--dir ../../factory/security-reviewer \
|
|
232
|
-
--action opened
|
|
233
|
-
```
|
|
234
|
-
|
|
235
|
-
Set `TEST_PR_URL` to a PR in the channel's configured repository allowlist.
|
|
236
|
-
Run the command only against a PR intended for test reviews. It posts a
|
|
237
|
-
GitHub Check and may post findings.
|
|
238
|
-
|
|
239
|
-
## Inspect the eval before running it
|
|
240
|
-
|
|
241
|
-
```bash
|
|
242
|
-
agent-sdk eval --dir ../../factory/security-reviewer --list
|
|
243
|
-
```
|
|
244
|
-
|
|
245
|
-
The case gates the review flow and prevents comment posting. It still fetches
|
|
246
|
-
the live PR, so it needs GitHub access.
|
|
247
|
-
|
|
248
|
-
## Build another staged pipeline
|
|
249
|
-
|
|
250
|
-
Use staged host orchestration when:
|
|
251
|
-
|
|
252
|
-
- each phase needs its own timeout and artifact,
|
|
253
|
-
- model workers should run in bounded parallel,
|
|
254
|
-
- later work can start as soon as partial results arrive,
|
|
255
|
-
- a webhook must acknowledge before the work finishes, or
|
|
256
|
-
- operators need live progress beyond one tool spinner.
|
|
257
|
-
|
|
258
|
-
Keep external writes in finalization. Pass a `runId` between stages, journal
|
|
259
|
-
progress before publishing, and make partial-worker failures visible in the
|
|
260
|
-
result.
|
|
261
|
-
|
|
262
|
-
## Where to go next
|
|
263
|
-
|
|
264
|
-
- [GitHub](../guides/github.md)
|
|
265
|
-
- [Tools](../reference/tools.md)
|
|
266
|
-
- [Channels](../reference/channels.md)
|
|
267
|
-
- [Playground](../reference/playground.md)
|
|
268
|
-
- [Storage](../storage.md)
|
|
269
|
-
- [Live A/B metrics](../ab.md)
|
|
270
|
-
- [Evals](../evals.md)
|