@cursor/july 0.1.1
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 +290 -0
- package/LICENSE.md +3 -0
- package/README.md +1233 -0
- package/dist/ab.d.ts +290 -0
- package/dist/ab.d.ts.map +1 -0
- package/dist/ab.js +386 -0
- package/dist/bin/agent-serve.d.ts +15 -0
- package/dist/bin/agent-serve.d.ts.map +1 -0
- package/dist/bin/agent-serve.js +754 -0
- package/dist/channels/github/api.d.ts +101 -0
- package/dist/channels/github/api.d.ts.map +1 -0
- package/dist/channels/github/api.js +229 -0
- package/dist/channels/github/auth.d.ts +67 -0
- package/dist/channels/github/auth.d.ts.map +1 -0
- package/dist/channels/github/auth.js +239 -0
- package/dist/channels/github/binding.d.ts +73 -0
- package/dist/channels/github/binding.d.ts.map +1 -0
- package/dist/channels/github/binding.js +114 -0
- package/dist/channels/github/defaults.d.ts +24 -0
- package/dist/channels/github/defaults.d.ts.map +1 -0
- package/dist/channels/github/defaults.js +100 -0
- package/dist/channels/github/events.d.ts +18 -0
- package/dist/channels/github/events.d.ts.map +1 -0
- package/dist/channels/github/events.js +59 -0
- package/dist/channels/github/forward.d.ts +137 -0
- package/dist/channels/github/forward.d.ts.map +1 -0
- package/dist/channels/github/forward.js +271 -0
- package/dist/channels/github/github-channel.d.ts +127 -0
- package/dist/channels/github/github-channel.d.ts.map +1 -0
- package/dist/channels/github/github-channel.js +1688 -0
- package/dist/channels/github/index.d.ts +52 -0
- package/dist/channels/github/index.d.ts.map +1 -0
- package/dist/channels/github/index.js +51 -0
- package/dist/channels/github/replay.d.ts +115 -0
- package/dist/channels/github/replay.d.ts.map +1 -0
- package/dist/channels/github/replay.js +282 -0
- package/dist/channels/github/state.d.ts +26 -0
- package/dist/channels/github/state.d.ts.map +1 -0
- package/dist/channels/github/state.js +50 -0
- package/dist/channels/github/types.d.ts +385 -0
- package/dist/channels/github/types.d.ts.map +1 -0
- package/dist/channels/github/types.js +1 -0
- package/dist/channels/slack/api.d.ts +117 -0
- package/dist/channels/slack/api.d.ts.map +1 -0
- package/dist/channels/slack/api.js +437 -0
- package/dist/channels/slack/approvals.d.ts +32 -0
- package/dist/channels/slack/approvals.d.ts.map +1 -0
- package/dist/channels/slack/approvals.js +157 -0
- package/dist/channels/slack/assistant.d.ts +23 -0
- package/dist/channels/slack/assistant.d.ts.map +1 -0
- package/dist/channels/slack/assistant.js +67 -0
- package/dist/channels/slack/auth.d.ts +40 -0
- package/dist/channels/slack/auth.d.ts.map +1 -0
- package/dist/channels/slack/auth.js +71 -0
- package/dist/channels/slack/channel-watch.d.ts +46 -0
- package/dist/channels/slack/channel-watch.d.ts.map +1 -0
- package/dist/channels/slack/channel-watch.js +180 -0
- package/dist/channels/slack/constants.d.ts +17 -0
- package/dist/channels/slack/constants.d.ts.map +1 -0
- package/dist/channels/slack/constants.js +27 -0
- package/dist/channels/slack/credentials.d.ts +35 -0
- package/dist/channels/slack/credentials.d.ts.map +1 -0
- package/dist/channels/slack/credentials.js +88 -0
- package/dist/channels/slack/cursor-account.d.ts +76 -0
- package/dist/channels/slack/cursor-account.d.ts.map +1 -0
- package/dist/channels/slack/cursor-account.js +88 -0
- package/dist/channels/slack/defaults.d.ts +32 -0
- package/dist/channels/slack/defaults.d.ts.map +1 -0
- package/dist/channels/slack/defaults.js +380 -0
- package/dist/channels/slack/dispatch.d.ts +43 -0
- package/dist/channels/slack/dispatch.d.ts.map +1 -0
- package/dist/channels/slack/dispatch.js +185 -0
- package/dist/channels/slack/doctor.d.ts +24 -0
- package/dist/channels/slack/doctor.d.ts.map +1 -0
- package/dist/channels/slack/doctor.js +115 -0
- package/dist/channels/slack/event-id-dedupe.d.ts +10 -0
- package/dist/channels/slack/event-id-dedupe.d.ts.map +1 -0
- package/dist/channels/slack/event-id-dedupe.js +23 -0
- package/dist/channels/slack/inbound.d.ts +41 -0
- package/dist/channels/slack/inbound.d.ts.map +1 -0
- package/dist/channels/slack/inbound.js +166 -0
- package/dist/channels/slack/index.d.ts +45 -0
- package/dist/channels/slack/index.d.ts.map +1 -0
- package/dist/channels/slack/index.js +44 -0
- package/dist/channels/slack/init.d.ts +32 -0
- package/dist/channels/slack/init.d.ts.map +1 -0
- package/dist/channels/slack/init.js +82 -0
- package/dist/channels/slack/interactive.d.ts +19 -0
- package/dist/channels/slack/interactive.d.ts.map +1 -0
- package/dist/channels/slack/interactive.js +142 -0
- package/dist/channels/slack/links.d.ts +10 -0
- package/dist/channels/slack/links.d.ts.map +1 -0
- package/dist/channels/slack/links.js +19 -0
- package/dist/channels/slack/live-delivery.d.ts +75 -0
- package/dist/channels/slack/live-delivery.d.ts.map +1 -0
- package/dist/channels/slack/live-delivery.js +143 -0
- package/dist/channels/slack/log.d.ts +25 -0
- package/dist/channels/slack/log.d.ts.map +1 -0
- package/dist/channels/slack/log.js +47 -0
- package/dist/channels/slack/manifest.d.ts +57 -0
- package/dist/channels/slack/manifest.d.ts.map +1 -0
- package/dist/channels/slack/manifest.js +110 -0
- package/dist/channels/slack/pr-ref.d.ts +18 -0
- package/dist/channels/slack/pr-ref.d.ts.map +1 -0
- package/dist/channels/slack/pr-ref.js +36 -0
- package/dist/channels/slack/setup.d.ts +14 -0
- package/dist/channels/slack/setup.d.ts.map +1 -0
- package/dist/channels/slack/setup.js +86 -0
- package/dist/channels/slack/slack-channel.d.ts +15 -0
- package/dist/channels/slack/slack-channel.d.ts.map +1 -0
- package/dist/channels/slack/slack-channel.js +281 -0
- package/dist/channels/slack/socket-mode.d.ts +26 -0
- package/dist/channels/slack/socket-mode.d.ts.map +1 -0
- package/dist/channels/slack/socket-mode.js +116 -0
- package/dist/channels/slack/stream.d.ts +26 -0
- package/dist/channels/slack/stream.d.ts.map +1 -0
- package/dist/channels/slack/stream.js +39 -0
- package/dist/channels/slack/tool-approval-events.d.ts +33 -0
- package/dist/channels/slack/tool-approval-events.d.ts.map +1 -0
- package/dist/channels/slack/tool-approval-events.js +129 -0
- package/dist/channels/slack/types.d.ts +326 -0
- package/dist/channels/slack/types.d.ts.map +1 -0
- package/dist/channels/slack/types.js +4 -0
- package/dist/channels.d.ts +116 -0
- package/dist/channels.d.ts.map +1 -0
- package/dist/channels.js +294 -0
- package/dist/connections.d.ts +75 -0
- package/dist/connections.d.ts.map +1 -0
- package/dist/connections.js +75 -0
- package/dist/docs/404.html +22 -0
- package/dist/docs/ab.html +87 -0
- package/dist/docs/assets/ab.md.COdXkces.js +63 -0
- package/dist/docs/assets/ab.md.COdXkces.lean.js +1 -0
- package/dist/docs/assets/app.DqfFEmJd.js +1 -0
- package/dist/docs/assets/building-with-agents.md.CJCtZCyi.js +13 -0
- package/dist/docs/assets/building-with-agents.md.CJCtZCyi.lean.js +1 -0
- package/dist/docs/assets/chunks/@localSearchIndexroot.CcVk1uKq.js +1 -0
- package/dist/docs/assets/chunks/VPLocalSearchBox.BaLEdS15.js +9 -0
- package/dist/docs/assets/chunks/framework.CAZyNGu9.js +19 -0
- package/dist/docs/assets/chunks/theme.CZRvu_0q.js +2 -0
- package/dist/docs/assets/concepts.md.Cfb9b-k1.js +4 -0
- package/dist/docs/assets/concepts.md.Cfb9b-k1.lean.js +1 -0
- package/dist/docs/assets/deployment.md.Dx1TYNk5.js +14 -0
- package/dist/docs/assets/deployment.md.Dx1TYNk5.lean.js +1 -0
- package/dist/docs/assets/evals.md.DPZ_MAnI.js +85 -0
- package/dist/docs/assets/evals.md.DPZ_MAnI.lean.js +1 -0
- package/dist/docs/assets/guides_agent-to-agent.md.CrtrsySy.js +10 -0
- package/dist/docs/assets/guides_agent-to-agent.md.CrtrsySy.lean.js +1 -0
- package/dist/docs/assets/guides_cloud-runtime.md.CYlNMTNp.js +9 -0
- package/dist/docs/assets/guides_cloud-runtime.md.CYlNMTNp.lean.js +1 -0
- package/dist/docs/assets/guides_github.md.DwbKhCeS.js +20 -0
- package/dist/docs/assets/guides_github.md.DwbKhCeS.lean.js +1 -0
- package/dist/docs/assets/guides_human-in-the-loop.md.Dvuctx7s.js +28 -0
- package/dist/docs/assets/guides_human-in-the-loop.md.Dvuctx7s.lean.js +1 -0
- package/dist/docs/assets/guides_slack.md.bv41fHfW.js +37 -0
- package/dist/docs/assets/guides_slack.md.bv41fHfW.lean.js +1 -0
- package/dist/docs/assets/guides_webhooks.md.hFTik3lf.js +50 -0
- package/dist/docs/assets/guides_webhooks.md.hFTik3lf.lean.js +1 -0
- package/dist/docs/assets/hillclimbing.md.DHNast08.js +4 -0
- package/dist/docs/assets/hillclimbing.md.DHNast08.lean.js +1 -0
- package/dist/docs/assets/index.md.BPKcj5AI.js +20 -0
- package/dist/docs/assets/index.md.BPKcj5AI.lean.js +1 -0
- package/dist/docs/assets/inter-italic-cyrillic-ext.r48I6akx.woff2 +0 -0
- package/dist/docs/assets/inter-italic-cyrillic.By2_1cv3.woff2 +0 -0
- package/dist/docs/assets/inter-italic-greek-ext.1u6EdAuj.woff2 +0 -0
- package/dist/docs/assets/inter-italic-greek.DJ8dCoTZ.woff2 +0 -0
- package/dist/docs/assets/inter-italic-latin-ext.CN1xVJS-.woff2 +0 -0
- package/dist/docs/assets/inter-italic-latin.C2AdPX0b.woff2 +0 -0
- package/dist/docs/assets/inter-italic-vietnamese.BSbpV94h.woff2 +0 -0
- package/dist/docs/assets/inter-roman-cyrillic-ext.BBPuwvHQ.woff2 +0 -0
- package/dist/docs/assets/inter-roman-cyrillic.C5lxZ8CY.woff2 +0 -0
- package/dist/docs/assets/inter-roman-greek-ext.CqjqNYQ-.woff2 +0 -0
- package/dist/docs/assets/inter-roman-greek.BBVDIX6e.woff2 +0 -0
- package/dist/docs/assets/inter-roman-latin-ext.4ZJIpNVo.woff2 +0 -0
- package/dist/docs/assets/inter-roman-latin.Di8DUHzh.woff2 +0 -0
- package/dist/docs/assets/inter-roman-vietnamese.BjW4sHH5.woff2 +0 -0
- package/dist/docs/assets/quickstart.md.tVPiGK_L.js +35 -0
- package/dist/docs/assets/quickstart.md.tVPiGK_L.lean.js +1 -0
- package/dist/docs/assets/reference_agent-config.md.Bpd7HQwf.js +34 -0
- package/dist/docs/assets/reference_agent-config.md.Bpd7HQwf.lean.js +1 -0
- package/dist/docs/assets/reference_channels.md.D7JTR03W.js +53 -0
- package/dist/docs/assets/reference_channels.md.D7JTR03W.lean.js +1 -0
- package/dist/docs/assets/reference_cli.md.DA730zCu.js +33 -0
- package/dist/docs/assets/reference_cli.md.DA730zCu.lean.js +1 -0
- package/dist/docs/assets/reference_connections.md.C3vNH_DE.js +26 -0
- package/dist/docs/assets/reference_connections.md.C3vNH_DE.lean.js +1 -0
- package/dist/docs/assets/reference_hooks.md.BCEc3MyM.js +12 -0
- package/dist/docs/assets/reference_hooks.md.BCEc3MyM.lean.js +1 -0
- package/dist/docs/assets/reference_http-api.md.DBAahtdz.js +11 -0
- package/dist/docs/assets/reference_http-api.md.DBAahtdz.lean.js +1 -0
- package/dist/docs/assets/reference_instructions.md.BC05LEQ8.js +12 -0
- package/dist/docs/assets/reference_instructions.md.BC05LEQ8.lean.js +1 -0
- package/dist/docs/assets/reference_playground.md.CPZhfYaO.js +1 -0
- package/dist/docs/assets/reference_playground.md.CPZhfYaO.lean.js +1 -0
- package/dist/docs/assets/reference_project-layout.md.Bd_CKtNS.js +31 -0
- package/dist/docs/assets/reference_project-layout.md.Bd_CKtNS.lean.js +1 -0
- package/dist/docs/assets/reference_schedules.md.D7qijxLk.js +82 -0
- package/dist/docs/assets/reference_schedules.md.D7qijxLk.lean.js +1 -0
- package/dist/docs/assets/reference_sessions.md.DdjWabnN.js +8 -0
- package/dist/docs/assets/reference_sessions.md.DdjWabnN.lean.js +1 -0
- package/dist/docs/assets/reference_skills.md.VQnlBT3Q.js +15 -0
- package/dist/docs/assets/reference_skills.md.VQnlBT3Q.lean.js +1 -0
- package/dist/docs/assets/reference_subagents.md.CIRAVcPK.js +10 -0
- package/dist/docs/assets/reference_subagents.md.CIRAVcPK.lean.js +1 -0
- package/dist/docs/assets/reference_tools.md.DF5kwlt0.js +46 -0
- package/dist/docs/assets/reference_tools.md.DF5kwlt0.lean.js +1 -0
- package/dist/docs/assets/scaffolding-agents.md.CyYfWGdc.js +1 -0
- package/dist/docs/assets/scaffolding-agents.md.CyYfWGdc.lean.js +1 -0
- package/dist/docs/assets/style.Bj-IXa5W.css +1 -0
- package/dist/docs/assets/troubleshooting.md.DkovjS7h.js +1 -0
- package/dist/docs/assets/troubleshooting.md.DkovjS7h.lean.js +1 -0
- package/dist/docs/building-with-agents.html +37 -0
- package/dist/docs/concepts.html +28 -0
- package/dist/docs/deployment.html +38 -0
- package/dist/docs/evals.html +109 -0
- package/dist/docs/guides/agent-to-agent.html +34 -0
- package/dist/docs/guides/cloud-runtime.html +33 -0
- package/dist/docs/guides/github.html +44 -0
- package/dist/docs/guides/human-in-the-loop.html +52 -0
- package/dist/docs/guides/slack.html +61 -0
- package/dist/docs/guides/webhooks.html +74 -0
- package/dist/docs/hashmap.json +1 -0
- package/dist/docs/hillclimbing.html +28 -0
- package/dist/docs/index.html +44 -0
- package/dist/docs/quickstart.html +59 -0
- package/dist/docs/reference/agent-config.html +58 -0
- package/dist/docs/reference/channels.html +77 -0
- package/dist/docs/reference/cli.html +57 -0
- package/dist/docs/reference/connections.html +50 -0
- package/dist/docs/reference/hooks.html +36 -0
- package/dist/docs/reference/http-api.html +35 -0
- package/dist/docs/reference/instructions.html +36 -0
- package/dist/docs/reference/playground.html +25 -0
- package/dist/docs/reference/project-layout.html +55 -0
- package/dist/docs/reference/schedules.html +106 -0
- package/dist/docs/reference/sessions.html +32 -0
- package/dist/docs/reference/skills.html +39 -0
- package/dist/docs/reference/subagents.html +34 -0
- package/dist/docs/reference/tools.html +70 -0
- package/dist/docs/scaffolding-agents.html +25 -0
- package/dist/docs/troubleshooting.html +25 -0
- package/dist/docs/vp-icons.css +0 -0
- package/dist/evals.d.ts +312 -0
- package/dist/evals.d.ts.map +1 -0
- package/dist/evals.js +254 -0
- package/dist/hooks.d.ts +23 -0
- package/dist/hooks.d.ts.map +1 -0
- package/dist/hooks.js +23 -0
- package/dist/index.d.ts +71 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +101 -0
- package/dist/internal/ab-collector.d.ts +42 -0
- package/dist/internal/ab-collector.d.ts.map +1 -0
- package/dist/internal/ab-collector.js +153 -0
- package/dist/internal/ab-fold.d.ts +36 -0
- package/dist/internal/ab-fold.d.ts.map +1 -0
- package/dist/internal/ab-fold.js +171 -0
- package/dist/internal/ab-snapshot.d.ts +70 -0
- package/dist/internal/ab-snapshot.d.ts.map +1 -0
- package/dist/internal/ab-snapshot.js +208 -0
- package/dist/internal/approval-gate.d.ts +34 -0
- package/dist/internal/approval-gate.d.ts.map +1 -0
- package/dist/internal/approval-gate.js +85 -0
- package/dist/internal/auth.d.ts +8 -0
- package/dist/internal/auth.d.ts.map +1 -0
- package/dist/internal/auth.js +27 -0
- package/dist/internal/authored-alias-hooks.d.ts +31 -0
- package/dist/internal/authored-alias-hooks.d.ts.map +1 -0
- package/dist/internal/authored-alias-hooks.js +43 -0
- package/dist/internal/authored-loaders.d.ts +25 -0
- package/dist/internal/authored-loaders.d.ts.map +1 -0
- package/dist/internal/authored-loaders.js +129 -0
- package/dist/internal/bounded-int.d.ts +11 -0
- package/dist/internal/bounded-int.d.ts.map +1 -0
- package/dist/internal/bounded-int.js +13 -0
- package/dist/internal/brand.d.ts +6 -0
- package/dist/internal/brand.d.ts.map +1 -0
- package/dist/internal/brand.js +17 -0
- package/dist/internal/chat-client.d.ts +19 -0
- package/dist/internal/chat-client.d.ts.map +1 -0
- package/dist/internal/chat-client.js +327 -0
- package/dist/internal/cli-ax.d.ts +58 -0
- package/dist/internal/cli-ax.d.ts.map +1 -0
- package/dist/internal/cli-ax.js +345 -0
- package/dist/internal/cli-cursor.d.ts +20 -0
- package/dist/internal/cli-cursor.d.ts.map +1 -0
- package/dist/internal/cli-cursor.js +227 -0
- package/dist/internal/cli-github.d.ts +47 -0
- package/dist/internal/cli-github.d.ts.map +1 -0
- package/dist/internal/cli-github.js +644 -0
- package/dist/internal/cli-slack.d.ts +18 -0
- package/dist/internal/cli-slack.d.ts.map +1 -0
- package/dist/internal/cli-slack.js +144 -0
- package/dist/internal/cloud-merge.d.ts +23 -0
- package/dist/internal/cloud-merge.d.ts.map +1 -0
- package/dist/internal/cloud-merge.js +28 -0
- package/dist/internal/cron.d.ts +17 -0
- package/dist/internal/cron.d.ts.map +1 -0
- package/dist/internal/cron.js +60 -0
- package/dist/internal/cursor/account-mcp.d.ts +95 -0
- package/dist/internal/cursor/account-mcp.d.ts.map +1 -0
- package/dist/internal/cursor/account-mcp.js +342 -0
- package/dist/internal/cursor/backend-client.d.ts +118 -0
- package/dist/internal/cursor/backend-client.d.ts.map +1 -0
- package/dist/internal/cursor/backend-client.js +477 -0
- package/dist/internal/cursor/credentials.d.ts +112 -0
- package/dist/internal/cursor/credentials.d.ts.map +1 -0
- package/dist/internal/cursor/credentials.js +329 -0
- package/dist/internal/cursor-event-relay.d.ts +111 -0
- package/dist/internal/cursor-event-relay.d.ts.map +1 -0
- package/dist/internal/cursor-event-relay.js +181 -0
- package/dist/internal/cursor-relay-core.d.ts +113 -0
- package/dist/internal/cursor-relay-core.d.ts.map +1 -0
- package/dist/internal/cursor-relay-core.js +364 -0
- package/dist/internal/cursor-slack-relay.d.ts +94 -0
- package/dist/internal/cursor-slack-relay.d.ts.map +1 -0
- package/dist/internal/cursor-slack-relay.js +171 -0
- package/dist/internal/describe-error.d.ts +3 -0
- package/dist/internal/describe-error.d.ts.map +1 -0
- package/dist/internal/describe-error.js +4 -0
- package/dist/internal/dev-mode.d.ts +13 -0
- package/dist/internal/dev-mode.d.ts.map +1 -0
- package/dist/internal/dev-mode.js +17 -0
- package/dist/internal/discovery.d.ts +55 -0
- package/dist/internal/discovery.d.ts.map +1 -0
- package/dist/internal/discovery.js +1427 -0
- package/dist/internal/distribution.d.ts +47 -0
- package/dist/internal/distribution.d.ts.map +1 -0
- package/dist/internal/distribution.js +82 -0
- package/dist/internal/docs-site.d.ts +28 -0
- package/dist/internal/docs-site.d.ts.map +1 -0
- package/dist/internal/docs-site.js +169 -0
- package/dist/internal/duration.d.ts +8 -0
- package/dist/internal/duration.d.ts.map +1 -0
- package/dist/internal/duration.js +35 -0
- package/dist/internal/eval-run-store.d.ts +81 -0
- package/dist/internal/eval-run-store.d.ts.map +1 -0
- package/dist/internal/eval-run-store.js +396 -0
- package/dist/internal/eval-runner.d.ts +76 -0
- package/dist/internal/eval-runner.d.ts.map +1 -0
- package/dist/internal/eval-runner.js +336 -0
- package/dist/internal/event-log.d.ts +51 -0
- package/dist/internal/event-log.d.ts.map +1 -0
- package/dist/internal/event-log.js +167 -0
- package/dist/internal/event-mapper.d.ts +46 -0
- package/dist/internal/event-mapper.d.ts.map +1 -0
- package/dist/internal/event-mapper.js +226 -0
- package/dist/internal/frontmatter.d.ts +12 -0
- package/dist/internal/frontmatter.d.ts.map +1 -0
- package/dist/internal/frontmatter.js +61 -0
- package/dist/internal/github-fanout.d.ts +32 -0
- package/dist/internal/github-fanout.d.ts.map +1 -0
- package/dist/internal/github-fanout.js +122 -0
- package/dist/internal/handleAgentServeTrigger.d.ts +59 -0
- package/dist/internal/handleAgentServeTrigger.d.ts.map +1 -0
- package/dist/internal/handleAgentServeTrigger.js +115 -0
- package/dist/internal/host-platforms.d.ts +40 -0
- package/dist/internal/host-platforms.d.ts.map +1 -0
- package/dist/internal/host-platforms.js +113 -0
- package/dist/internal/http-channel.d.ts +54 -0
- package/dist/internal/http-channel.d.ts.map +1 -0
- package/dist/internal/http-channel.js +382 -0
- package/dist/internal/ids.d.ts +19 -0
- package/dist/internal/ids.d.ts.map +1 -0
- package/dist/internal/ids.js +34 -0
- package/dist/internal/init-project.d.ts +22 -0
- package/dist/internal/init-project.d.ts.map +1 -0
- package/dist/internal/init-project.js +125 -0
- package/dist/internal/json-dir-store.d.ts +32 -0
- package/dist/internal/json-dir-store.d.ts.map +1 -0
- package/dist/internal/json-dir-store.js +100 -0
- package/dist/internal/json-schema.d.ts +18 -0
- package/dist/internal/json-schema.d.ts.map +1 -0
- package/dist/internal/json-schema.js +53 -0
- package/dist/internal/log-ring.d.ts +23 -0
- package/dist/internal/log-ring.d.ts.map +1 -0
- package/dist/internal/log-ring.js +42 -0
- package/dist/internal/map-pool.d.ts +6 -0
- package/dist/internal/map-pool.d.ts.map +1 -0
- package/dist/internal/map-pool.js +41 -0
- package/dist/internal/mcp-endpoint.d.ts +59 -0
- package/dist/internal/mcp-endpoint.d.ts.map +1 -0
- package/dist/internal/mcp-endpoint.js +355 -0
- package/dist/internal/mcp-host.d.ts +28 -0
- package/dist/internal/mcp-host.d.ts.map +1 -0
- package/dist/internal/mcp-host.js +162 -0
- package/dist/internal/net.d.ts +5 -0
- package/dist/internal/net.d.ts.map +1 -0
- package/dist/internal/net.js +30 -0
- package/dist/internal/peer-connections.d.ts +44 -0
- package/dist/internal/peer-connections.d.ts.map +1 -0
- package/dist/internal/peer-connections.js +67 -0
- package/dist/internal/playground/static.d.ts +35 -0
- package/dist/internal/playground/static.d.ts.map +1 -0
- package/dist/internal/playground/static.js +162 -0
- package/dist/internal/playground/toolchain.d.ts +57 -0
- package/dist/internal/playground/toolchain.d.ts.map +1 -0
- package/dist/internal/playground/toolchain.js +226 -0
- package/dist/internal/reminder-runner.d.ts +62 -0
- package/dist/internal/reminder-runner.d.ts.map +1 -0
- package/dist/internal/reminder-runner.js +582 -0
- package/dist/internal/reminder-schedule.d.ts +22 -0
- package/dist/internal/reminder-schedule.d.ts.map +1 -0
- package/dist/internal/reminder-schedule.js +82 -0
- package/dist/internal/reminder-store.d.ts +58 -0
- package/dist/internal/reminder-store.d.ts.map +1 -0
- package/dist/internal/reminder-store.js +106 -0
- package/dist/internal/resolved-connections.d.ts +41 -0
- package/dist/internal/resolved-connections.d.ts.map +1 -0
- package/dist/internal/resolved-connections.js +73 -0
- package/dist/internal/review-comments.d.ts +50 -0
- package/dist/internal/review-comments.d.ts.map +1 -0
- package/dist/internal/review-comments.js +194 -0
- package/dist/internal/router.d.ts +33 -0
- package/dist/internal/router.d.ts.map +1 -0
- package/dist/internal/router.js +93 -0
- package/dist/internal/run-client.d.ts +49 -0
- package/dist/internal/run-client.d.ts.map +1 -0
- package/dist/internal/run-client.js +208 -0
- package/dist/internal/schedule-runner.d.ts +31 -0
- package/dist/internal/schedule-runner.d.ts.map +1 -0
- package/dist/internal/schedule-runner.js +126 -0
- package/dist/internal/sdk-runner.d.ts +41 -0
- package/dist/internal/sdk-runner.d.ts.map +1 -0
- package/dist/internal/sdk-runner.js +221 -0
- package/dist/internal/server.d.ts +25 -0
- package/dist/internal/server.d.ts.map +1 -0
- package/dist/internal/server.js +1374 -0
- package/dist/internal/session-engine.d.ts +287 -0
- package/dist/internal/session-engine.d.ts.map +1 -0
- package/dist/internal/session-engine.js +1377 -0
- package/dist/internal/session-store.d.ts +29 -0
- package/dist/internal/session-store.d.ts.map +1 -0
- package/dist/internal/session-store.js +140 -0
- package/dist/internal/session-urls.d.ts +10 -0
- package/dist/internal/session-urls.d.ts.map +1 -0
- package/dist/internal/session-urls.js +25 -0
- package/dist/internal/stream-progress.d.ts +14 -0
- package/dist/internal/stream-progress.d.ts.map +1 -0
- package/dist/internal/stream-progress.js +195 -0
- package/dist/internal/tool-result.d.ts +20 -0
- package/dist/internal/tool-result.d.ts.map +1 -0
- package/dist/internal/tool-result.js +45 -0
- package/dist/internal/trajectory.d.ts +56 -0
- package/dist/internal/trajectory.d.ts.map +1 -0
- package/dist/internal/trajectory.js +248 -0
- package/dist/internal/workspace.d.ts +42 -0
- package/dist/internal/workspace.d.ts.map +1 -0
- package/dist/internal/workspace.js +199 -0
- package/dist/playground/assets/cursor-icons-outline-oY2V_mvK.woff2 +0 -0
- package/dist/playground/assets/index-1K-hG-7p.css +1 -0
- package/dist/playground/assets/index-FlWjhg3x.js +79 -0
- package/dist/playground/index.html +17 -0
- package/dist/reminders.d.ts +23 -0
- package/dist/reminders.d.ts.map +1 -0
- package/dist/reminders.js +22 -0
- package/dist/schedules.d.ts +23 -0
- package/dist/schedules.d.ts.map +1 -0
- package/dist/schedules.js +26 -0
- package/dist/skills.d.ts +22 -0
- package/dist/skills.d.ts.map +1 -0
- package/dist/skills.js +22 -0
- package/dist/tools.d.ts +92 -0
- package/dist/tools.d.ts.map +1 -0
- package/dist/tools.js +68 -0
- package/dist/types.d.ts +1609 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +80 -0
- package/docs/README.md +174 -0
- package/docs/ab.md +355 -0
- package/docs/building-with-agents.md +129 -0
- package/docs/concepts.md +177 -0
- package/docs/deployment.md +218 -0
- package/docs/evals.md +383 -0
- package/docs/guides/agent-to-agent.md +118 -0
- package/docs/guides/cloud-runtime.md +122 -0
- package/docs/guides/github.md +172 -0
- package/docs/guides/human-in-the-loop.md +131 -0
- package/docs/guides/slack.md +245 -0
- package/docs/guides/webhooks.md +201 -0
- package/docs/hillclimbing.md +93 -0
- package/docs/quickstart.md +183 -0
- package/docs/reference/agent-config.md +154 -0
- package/docs/reference/channels.md +206 -0
- package/docs/reference/cli.md +257 -0
- package/docs/reference/connections.md +137 -0
- package/docs/reference/hooks.md +74 -0
- package/docs/reference/http-api.md +219 -0
- package/docs/reference/instructions.md +77 -0
- package/docs/reference/playground.md +67 -0
- package/docs/reference/project-layout.md +119 -0
- package/docs/reference/schedules.md +220 -0
- package/docs/reference/sessions.md +165 -0
- package/docs/reference/skills.md +79 -0
- package/docs/reference/subagents.md +74 -0
- package/docs/reference/tools.md +203 -0
- package/docs/scaffolding-agents.md +113 -0
- package/docs/troubleshooting.md +95 -0
- package/package.json +185 -0
- package/skills/ab/SKILL.md +139 -0
- package/skills/create-agent/SKILL.md +219 -0
- package/skills/debug/SKILL.md +71 -0
- package/skills/evals/SKILL.md +217 -0
- package/skills/framework-map/SKILL.md +142 -0
- package/skills/github/SKILL.md +144 -0
- package/skills/hillclimb/SKILL.md +162 -0
- package/skills/setup-slack/SKILL.md +180 -0
- package/src/ab.ts +675 -0
- package/src/bin/agent-serve.ts +949 -0
- package/src/channels/github/api.ts +374 -0
- package/src/channels/github/auth.ts +275 -0
- package/src/channels/github/binding.ts +223 -0
- package/src/channels/github/defaults.ts +111 -0
- package/src/channels/github/events.ts +72 -0
- package/src/channels/github/forward.ts +381 -0
- package/src/channels/github/github-channel.ts +2270 -0
- package/src/channels/github/index.ts +52 -0
- package/src/channels/github/replay.ts +387 -0
- package/src/channels/github/state.ts +95 -0
- package/src/channels/github/types.ts +490 -0
- package/src/channels/slack/api.ts +580 -0
- package/src/channels/slack/approvals.ts +198 -0
- package/src/channels/slack/assistant.ts +76 -0
- package/src/channels/slack/auth.ts +112 -0
- package/src/channels/slack/channel-watch.ts +219 -0
- package/src/channels/slack/constants.ts +30 -0
- package/src/channels/slack/credentials.ts +90 -0
- package/src/channels/slack/cursor-account.ts +166 -0
- package/src/channels/slack/defaults.ts +450 -0
- package/src/channels/slack/dispatch.ts +293 -0
- package/src/channels/slack/doctor.ts +135 -0
- package/src/channels/slack/event-id-dedupe.ts +30 -0
- package/src/channels/slack/inbound.ts +219 -0
- package/src/channels/slack/index.ts +45 -0
- package/src/channels/slack/init.ts +133 -0
- package/src/channels/slack/interactive.ts +194 -0
- package/src/channels/slack/links.ts +23 -0
- package/src/channels/slack/live-delivery.ts +201 -0
- package/src/channels/slack/log.ts +83 -0
- package/src/channels/slack/manifest.ts +179 -0
- package/src/channels/slack/pr-ref.ts +50 -0
- package/src/channels/slack/setup.ts +97 -0
- package/src/channels/slack/slack-channel.ts +374 -0
- package/src/channels/slack/socket-mode.ts +154 -0
- package/src/channels/slack/stream.ts +63 -0
- package/src/channels/slack/tool-approval-events.ts +136 -0
- package/src/channels/slack/types.ts +349 -0
- package/src/channels.ts +385 -0
- package/src/connections.ts +89 -0
- package/src/evals.ts +501 -0
- package/src/hooks.ts +33 -0
- package/src/index.ts +184 -0
- package/src/internal/ab-collector.ts +210 -0
- package/src/internal/ab-fold.ts +228 -0
- package/src/internal/ab-snapshot.ts +335 -0
- package/src/internal/approval-gate.ts +115 -0
- package/src/internal/auth.ts +39 -0
- package/src/internal/authored-alias-hooks.ts +69 -0
- package/src/internal/authored-loaders.ts +138 -0
- package/src/internal/bounded-int.ts +27 -0
- package/src/internal/brand.ts +29 -0
- package/src/internal/chat-client.ts +407 -0
- package/src/internal/cli-ax.ts +474 -0
- package/src/internal/cli-cursor.ts +275 -0
- package/src/internal/cli-github.ts +849 -0
- package/src/internal/cli-slack.ts +175 -0
- package/src/internal/cloud-merge.ts +41 -0
- package/src/internal/cron.ts +78 -0
- package/src/internal/cursor/account-mcp.ts +472 -0
- package/src/internal/cursor/backend-client.ts +614 -0
- package/src/internal/cursor/credentials.ts +401 -0
- package/src/internal/cursor-event-relay.ts +281 -0
- package/src/internal/cursor-relay-core.ts +444 -0
- package/src/internal/cursor-slack-relay.ts +242 -0
- package/src/internal/describe-error.ts +4 -0
- package/src/internal/dev-mode.ts +20 -0
- package/src/internal/discovery.ts +1709 -0
- package/src/internal/distribution.ts +97 -0
- package/src/internal/docs-site.ts +191 -0
- package/src/internal/duration.ts +39 -0
- package/src/internal/eval-run-store.ts +519 -0
- package/src/internal/eval-runner.ts +522 -0
- package/src/internal/event-log.ts +175 -0
- package/src/internal/event-mapper.ts +272 -0
- package/src/internal/frontmatter.ts +77 -0
- package/src/internal/github-fanout.ts +159 -0
- package/src/internal/handleAgentServeTrigger.ts +156 -0
- package/src/internal/host-platforms.ts +144 -0
- package/src/internal/http-channel.ts +546 -0
- package/src/internal/ids.ts +44 -0
- package/src/internal/init-project.ts +165 -0
- package/src/internal/json-dir-store.ts +109 -0
- package/src/internal/json-schema.ts +69 -0
- package/src/internal/log-ring.ts +59 -0
- package/src/internal/map-pool.ts +32 -0
- package/src/internal/mcp-endpoint.ts +518 -0
- package/src/internal/mcp-host.ts +211 -0
- package/src/internal/net.ts +31 -0
- package/src/internal/peer-connections.ts +100 -0
- package/src/internal/playground/static.ts +189 -0
- package/src/internal/playground/toolchain.ts +277 -0
- package/src/internal/reminder-runner.ts +756 -0
- package/src/internal/reminder-schedule.ts +106 -0
- package/src/internal/reminder-store.ts +145 -0
- package/src/internal/resolved-connections.ts +145 -0
- package/src/internal/review-comments.ts +268 -0
- package/src/internal/router.ts +145 -0
- package/src/internal/run-client.ts +320 -0
- package/src/internal/schedule-runner.ts +161 -0
- package/src/internal/sdk-runner.ts +315 -0
- package/src/internal/server.ts +1737 -0
- package/src/internal/session-engine.ts +1810 -0
- package/src/internal/session-store.ts +147 -0
- package/src/internal/session-urls.ts +40 -0
- package/src/internal/stream-progress.ts +254 -0
- package/src/internal/tool-result.ts +54 -0
- package/src/internal/trajectory.ts +306 -0
- package/src/internal/workspace.ts +223 -0
- package/src/reminders.ts +35 -0
- package/src/schedules.ts +37 -0
- package/src/skills.ts +27 -0
- package/src/tools.ts +127 -0
- package/src/types.ts +1848 -0
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Channels"
|
|
3
|
+
description: "The authoring reference for defineChannel, the built-in HTTP channel, route schemas, handler args, and the auth policies."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Channels
|
|
7
|
+
|
|
8
|
+
A channel is the surface an agent lives on. The built-in HTTP session
|
|
9
|
+
channel is always mounted. Custom channels declare their own routes
|
|
10
|
+
under `/v1/channels/<id>`. The Slack and GitHub packs are prebuilt
|
|
11
|
+
channels with platform transports. This page is the authoring reference;
|
|
12
|
+
for the walkthrough, see the [Webhooks guide](../guides/webhooks.md).
|
|
13
|
+
|
|
14
|
+
## The built-in HTTP channel
|
|
15
|
+
|
|
16
|
+
It's always mounted, under `/<slug>` in the default multi-agent layout:
|
|
17
|
+
session create, follow-up, stream, stop, the sessions list, approvals,
|
|
18
|
+
deterministic tool calls, health, and info. For the route-by-route
|
|
19
|
+
contract, see the [HTTP API reference](./http-api.md).
|
|
20
|
+
|
|
21
|
+
Author `agent/channels/http.ts` only to override its defaults:
|
|
22
|
+
|
|
23
|
+
```ts
|
|
24
|
+
import {
|
|
25
|
+
bearerAuth,
|
|
26
|
+
httpChannel,
|
|
27
|
+
localDevStrict,
|
|
28
|
+
} from "@cursor/july/channels";
|
|
29
|
+
|
|
30
|
+
export default httpChannel({
|
|
31
|
+
auth: [localDevStrict(), bearerAuth(process.env.AGENT_TOKEN ?? "")],
|
|
32
|
+
onMessage: (message, { auth }) =>
|
|
33
|
+
`[caller ${auth?.principalId ?? "anonymous"}] ${message}`,
|
|
34
|
+
});
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## Define a custom channel
|
|
38
|
+
|
|
39
|
+
Author `agent/channels/<id>.ts`. The filename is the channel id and the
|
|
40
|
+
route prefix:
|
|
41
|
+
|
|
42
|
+
```ts
|
|
43
|
+
import { defineChannel, POST } from "@cursor/july/channels";
|
|
44
|
+
import { z } from "zod";
|
|
45
|
+
|
|
46
|
+
export default defineChannel({
|
|
47
|
+
routes: [
|
|
48
|
+
POST("/review", {
|
|
49
|
+
description: "Review a pull request on this channel",
|
|
50
|
+
bodySchema: z.object({
|
|
51
|
+
message: z.string(),
|
|
52
|
+
prUrl: z.string().url(),
|
|
53
|
+
thread: z.string().optional(),
|
|
54
|
+
}),
|
|
55
|
+
handler: async (_req, { callTool, send, body }) => {
|
|
56
|
+
const prepared = await callTool("inspect_pr", {
|
|
57
|
+
prUrl: body.prUrl,
|
|
58
|
+
});
|
|
59
|
+
if (prepared.isError) {
|
|
60
|
+
return Response.json(
|
|
61
|
+
{ error: prepared.errorMessage ?? "Could not inspect pull request" },
|
|
62
|
+
{ status: 502 }
|
|
63
|
+
);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
const session = await send(
|
|
67
|
+
`${body.message}\n\nRead pr.json before answering.`,
|
|
68
|
+
{
|
|
69
|
+
continuationToken: body.thread ?? `pr:${body.prUrl}`,
|
|
70
|
+
workspaceFiles: {
|
|
71
|
+
"pr.json": JSON.stringify(prepared.result, null, 2) ?? "null",
|
|
72
|
+
},
|
|
73
|
+
}
|
|
74
|
+
);
|
|
75
|
+
return Response.json({ sessionId: session.id });
|
|
76
|
+
},
|
|
77
|
+
}),
|
|
78
|
+
],
|
|
79
|
+
events: {
|
|
80
|
+
"message.completed"(event, channel, ctx) {
|
|
81
|
+
// deliver the reply to the surface that owns this channel
|
|
82
|
+
},
|
|
83
|
+
},
|
|
84
|
+
// auth: [...], state: {...}, onStart(...), onStop(...)
|
|
85
|
+
});
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
This example assumes `agent/tools/inspect_pr.ts` exists. The handler
|
|
89
|
+
calls it before the model turn, so every review starts with validated PR
|
|
90
|
+
data. It also derives a stable conversation key from the PR URL and
|
|
91
|
+
writes the tool result to `pr.json`. Instructions can ask the model to
|
|
92
|
+
inspect a PR, but host code guarantees it.
|
|
93
|
+
|
|
94
|
+
## Route verbs and schemas
|
|
95
|
+
|
|
96
|
+
`GET`, `POST`, `PUT`, `PATCH`, and `DELETE` helpers build routes. Their
|
|
97
|
+
schemas are Zod, enforced at compile time:
|
|
98
|
+
|
|
99
|
+
| Verb | Required schema |
|
|
100
|
+
| ------------------------ | ------------------------------------- |
|
|
101
|
+
| `GET` | `querySchema` |
|
|
102
|
+
| `POST` / `PUT` / `PATCH` | `bodySchema` (optional `querySchema`) |
|
|
103
|
+
| `DELETE` | both optional |
|
|
104
|
+
|
|
105
|
+
Plain JSON Schema objects won't type-check; use `z.object({})` or
|
|
106
|
+
`z.unknown()` for intentionally open surfaces. The host validates before
|
|
107
|
+
the handler runs. Handlers receive typed `args.body` and `args.query`,
|
|
108
|
+
and empty POST bodies are coerced to `{}` first. Declared schemas are
|
|
109
|
+
projected on `GET /v1/info`, which powers the playground's **Try**
|
|
110
|
+
buttons and composer **slash commands**.
|
|
111
|
+
|
|
112
|
+
## Handler arguments
|
|
113
|
+
|
|
114
|
+
Handlers receive the Fetch `Request` and an args object:
|
|
115
|
+
|
|
116
|
+
| Member | What it is |
|
|
117
|
+
| ----------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
118
|
+
| `send(message, options?)` | Run a model turn on this channel; returns the session handle. Options: `continuationToken` (the conversation key), `workspaceFiles`, `workspaceDir`, `cloud` (attach cloud repos for this session), `auth` (defaults to the request principal), `sdkAgentId` (resume a specific SDK agent). |
|
|
119
|
+
| `getSession(sessionId)` | Look up an existing session on this channel |
|
|
120
|
+
| `receive(channelDefinition, input)` | Hand off to another channel (schedules use this) |
|
|
121
|
+
| `callTool(name, input, options?)` | Deterministic server-tool call ([Tools](./tools.md#call-a-tool-without-a-model-turn)) |
|
|
122
|
+
| `body`, `query`, `params` | Validated payloads and `:param` path segments |
|
|
123
|
+
| `auth` | The `AuthContext` resolved by this route's auth chain |
|
|
124
|
+
| `requestIp` | The TCP peer address |
|
|
125
|
+
| `host` | Shared services: `host.mcp`, `host.github`, `host.slack`, `host.reminders` |
|
|
126
|
+
| `waitUntil(promise)` | Background work that outlives the response |
|
|
127
|
+
| `sessionUrls(request, sessionId)` | Absolute playground + trace URLs for a session on this mount |
|
|
128
|
+
|
|
129
|
+
## Events
|
|
130
|
+
|
|
131
|
+
The `events` map subscribes the channel to stream events for the
|
|
132
|
+
sessions it owns. Keys are event types from the
|
|
133
|
+
[event vocabulary](./sessions.md#the-event-vocabulary), or `"*"`.
|
|
134
|
+
Handlers receive `(event, channel, ctx)`, where `channel.state` is the
|
|
135
|
+
per-session adapter state and `ctx` exposes session info and host
|
|
136
|
+
services. This is where a channel delivers replies back to its surface.
|
|
137
|
+
|
|
138
|
+
## State and lifecycle
|
|
139
|
+
|
|
140
|
+
`state` declares the starting per-session adapter state (JSON), persisted
|
|
141
|
+
on the session record. Routes and event handlers read and mutate it
|
|
142
|
+
through `channel.state`. `onStart(args)` runs when the channel mounts. It
|
|
143
|
+
receives `send`, `receive`, `callTool`, `host`, and friends; the Slack
|
|
144
|
+
pack opens its Socket Mode connection here. `onStop()` runs when the
|
|
145
|
+
server drains.
|
|
146
|
+
|
|
147
|
+
## Auth policies
|
|
148
|
+
|
|
149
|
+
Every route runs an auth-policy chain: the channel's `auth` array, or
|
|
150
|
+
`[localDevStrict()]` when unset. A policy is a function
|
|
151
|
+
`(request, info) => AuthContext | null` (async allowed); the first
|
|
152
|
+
non-null wins, and a request no policy admits gets `401`.
|
|
153
|
+
|
|
154
|
+
| Policy | Admits |
|
|
155
|
+
| ------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
156
|
+
| `localDevStrict()` | Direct loopback callers with no proxy-forwarding headers (`X-Forwarded-For`, `X-Real-IP`, `Forwarded`, and `X-Forwarded-Host` are all rejected, so tunnels and same-host reverse proxies don't silently re-expose the route), plus a loopback `Host` header, which rejects DNS-rebinding callers that reach 127.0.0.1 with a remote hostname. |
|
|
157
|
+
| `localDev()` | Like `localDevStrict()` but without the `Host` check. An explicit, weaker opt-in. |
|
|
158
|
+
| `loopbackOnly()` | A loopback TCP peer, ignoring forwarding headers; for dev relays that legitimately carry them, like `gh webhook forward`. |
|
|
159
|
+
| `bearerAuth(token)` | `Authorization: Bearer <token>`, compared in constant time. Also accepts a verifier function mapping a presented token to an `AuthContext`. |
|
|
160
|
+
| `allowAll()` | Everyone, as an `anonymous` principal. Only for surfaces protected upstream (an HMAC-verified webhook) or intentionally public. |
|
|
161
|
+
|
|
162
|
+
The resolved `AuthContext` (`{ authenticator, principalId,
|
|
163
|
+
principalType, attributes? }`) becomes the request principal. Sessions
|
|
164
|
+
bind to the principal that created them, and follow-up, stream, and list
|
|
165
|
+
routes enforce ownership (`403` otherwise).
|
|
166
|
+
|
|
167
|
+
Server flags interact with authored auth: `--bearer-token` swaps the
|
|
168
|
+
default `localDevStrict()` for `bearerAuth(...)` on channels that don't
|
|
169
|
+
author their own chain, and `--allow-anonymous` swaps it for
|
|
170
|
+
`allowAll()`. Authored `auth` arrays always win over both. A channel that
|
|
171
|
+
declares `[localDevStrict()]` stays loopback-only even on an
|
|
172
|
+
`--allow-anonymous` host.
|
|
173
|
+
|
|
174
|
+
## First class channels
|
|
175
|
+
|
|
176
|
+
**Slack** (`@cursor/july/channels/slack`): Socket Mode
|
|
177
|
+
transport, streaming replies, engagement rules, approval cards. Author
|
|
178
|
+
`agent/channels/slack.ts` with `slackChannel()`. Guide:
|
|
179
|
+
[Slack](../guides/slack.md).
|
|
180
|
+
|
|
181
|
+
**GitHub** (`@cursor/july/channels/github`): webhook dispatch
|
|
182
|
+
with signature verification, per-event hooks returning `{ auth }` (a
|
|
183
|
+
model turn), `{ task }` (host work), or `null`, and CLI tooling for
|
|
184
|
+
replay and live forwarding. Author `agent/channels/github.ts` with
|
|
185
|
+
`githubChannel()`. Guide: [GitHub](../guides/github.md).
|
|
186
|
+
|
|
187
|
+
For other platforms like Discord or Teams, use the authored
|
|
188
|
+
`defineChannel` webhook form.
|
|
189
|
+
|
|
190
|
+
## Continuation semantics
|
|
191
|
+
|
|
192
|
+
Channels own their continuation-token format. The built-in HTTP channel
|
|
193
|
+
mints opaque rotating tokens, Slack uses `channelId:threadTs`, and PR
|
|
194
|
+
automations use keys like `pr:owner/repo#N`. Same token, same durable
|
|
195
|
+
session; one active continuation per session; the HTTP channel returns
|
|
196
|
+
`409` for stale tokens. For the full session model, see
|
|
197
|
+
[Sessions](./sessions.md).
|
|
198
|
+
|
|
199
|
+
## What's next
|
|
200
|
+
|
|
201
|
+
Continue with these pages:
|
|
202
|
+
|
|
203
|
+
- [Webhooks guide](../guides/webhooks.md): the same API, walked through
|
|
204
|
+
- [HTTP API](./http-api.md): the built-in routes precisely
|
|
205
|
+
- [Sessions and streaming](./sessions.md): the events channels
|
|
206
|
+
subscribe to
|
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "CLI"
|
|
3
|
+
description: "Every agentkit command and the flags that matter, from serve and run to the slack and github packs."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# CLI reference
|
|
7
|
+
|
|
8
|
+
Run the CLI with Node 22.13+. `agentkit help` prints the
|
|
9
|
+
built-in summary, and most commands print their own usage when a
|
|
10
|
+
required argument is missing.
|
|
11
|
+
|
|
12
|
+
| Command | Description |
|
|
13
|
+
| ------------------------------------------------------- | ----------------------------------------------------- |
|
|
14
|
+
| [`serve`](#serve) | Serve agents over HTTP (multi-agent by default) |
|
|
15
|
+
| [`chat`](#chat) | Talk to a running server from the terminal |
|
|
16
|
+
| [`run`](#run) | One-shot turn on an ephemeral server; JSON trajectory |
|
|
17
|
+
| [`call`](#call) | Call a server tool directly, no model turn |
|
|
18
|
+
| [`eval`](#eval) | Run filesystem evals |
|
|
19
|
+
| [`trajectory`](#trajectory) | Summarize a saved events.ndjson |
|
|
20
|
+
| [`init`](#init) | Scaffold a project (or print the setup guide) |
|
|
21
|
+
| [`info`](#info) | Print the discovered agent surface |
|
|
22
|
+
| [`validate`](#validate) | Check the project; non-zero exit on errors |
|
|
23
|
+
| [`login` / `logout` / `whoami`](#login--logout--whoami) | Manage the host's Cursor credential |
|
|
24
|
+
| [`slack …`](#slack) | Slack pack: init, manifests, doctor |
|
|
25
|
+
| [`github …`](#github) | GitHub pack: forward, replay, events, doctor |
|
|
26
|
+
|
|
27
|
+
The flags shared across commands: `--dir <path>` (project root, default
|
|
28
|
+
`.`), `--json` (machine output where supported), `--url <baseUrl>`
|
|
29
|
+
(target a running server instead of starting one), `--bearer-token`
|
|
30
|
+
(require it on `serve`; send it from `chat`, `run`, `eval`, and `call`),
|
|
31
|
+
and `--state-root <path>` (durable state directory, default
|
|
32
|
+
`<dir>/.agentkit`).
|
|
33
|
+
|
|
34
|
+
## serve
|
|
35
|
+
|
|
36
|
+
`serve` hosts every agent under a directory, multi-agent by default.
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
agentkit serve [--dir <path>] [--port 3000] [--host 127.0.0.1] [--dev]
|
|
40
|
+
[--mode multi|single] [--api-key <key>]
|
|
41
|
+
[--state-root <path>] [--bearer-token <secret> | --allow-anonymous]
|
|
42
|
+
[--public-url <url>] [--no-schedules] [--no-playground]
|
|
43
|
+
[--no-docs] [--cursor-events --repo owner/name]
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
Serves every agent under `--dir`. A directory that is itself an agent
|
|
47
|
+
project mounts under its directory name; a directory of projects mounts
|
|
48
|
+
each child. The index lives at `/`, each agent at `/<slug>/v1/*` and
|
|
49
|
+
`/<slug>/playground`. On a TTY, press Enter to restart; it reloads
|
|
50
|
+
agent code.
|
|
51
|
+
|
|
52
|
+
| Flag | Meaning |
|
|
53
|
+
| ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
54
|
+
| `--dev` | Dev mode. Schedules and reminders never auto-fire (dispatch through `/v1/dev/...`), the playground session list widens (loopback), GitHub channels accept unsigned loopback deliveries, and Vite HMR starts when the toolchain is present. |
|
|
55
|
+
| `--mode` | `multi` (default: slugged routes plus an index) or `single` (one agent at the unslugged `/v1/*`). |
|
|
56
|
+
| `--api-key` | Cursor API key. Falls back to `CURSOR_API_KEY`, then the stored `login` credential. |
|
|
57
|
+
| `--bearer-token` | Require this bearer token on API routes; replaces the loopback-only default on channels without authored auth. Mutually exclusive with `--allow-anonymous`. |
|
|
58
|
+
| `--allow-anonymous` | Admit every HTTP caller as one `anonymous` principal. Trusted networks only. |
|
|
59
|
+
| `--public-url` | The base URL where this host is reachable from outside. Required for peer MCP connections on cloud-runtime turns. |
|
|
60
|
+
| `--no-schedules` | Disable the cron runner outside dev mode. |
|
|
61
|
+
| `--no-playground` | Skip the web playground (and its auto-build / HMR). |
|
|
62
|
+
| `--no-docs` | Skip the documentation site at `/docs` (and its auto-build). |
|
|
63
|
+
| `--cursor-events` | Pull SCM webhook events from Cursor's `/v0/scm-events` instead of receiving webhooks. Requires a signed-in host and `--repo` (repeatable). Offset state lives under `<state-root>/cursor-events/`. |
|
|
64
|
+
|
|
65
|
+
## chat
|
|
66
|
+
|
|
67
|
+
`chat` talks to a running server from the terminal.
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
agentkit chat --url http://127.0.0.1:3000/<slug> # interactive REPL
|
|
71
|
+
agentkit chat --url … --message "Is the PR ready to approve?" # one-shot
|
|
72
|
+
agentkit chat --url … --message "hello" --json # JSON trajectory
|
|
73
|
+
agentkit chat --url https://host --bearer-token "$TOKEN" # authed server
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
Streams the reply live: text, tool calls, and a per-turn usage footer.
|
|
77
|
+
`--json` requires `--message` and prints
|
|
78
|
+
`{ ok, sessionId, continuationToken, trajectory }`. `--text` prints a
|
|
79
|
+
compact dump, and `--no-color` forces plain output.
|
|
80
|
+
|
|
81
|
+
## run
|
|
82
|
+
|
|
83
|
+
`run` executes one turn on an ephemeral server and prints a JSON trajectory.
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
agentkit run --dir . --message "Is https://github.com/acme/checkout/pull/42 ready?"
|
|
87
|
+
agentkit run --dir . --message "first" --message "then this" # multi-turn
|
|
88
|
+
agentkit run --url http://127.0.0.1:3000/<slug> --message "…" # running server
|
|
89
|
+
agentkit run --dir . --message "…" --events /tmp/run.ndjson # custom trace path
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
The create-and-test loop in one command: start an ephemeral server
|
|
93
|
+
(port 0, temp state root outside the project), send the message(s), print a
|
|
94
|
+
JSON trajectory, and write an NDJSON trace (default
|
|
95
|
+
`<dir>/.agentkit/traces/<sessionId>.ndjson`). Progress streams to
|
|
96
|
+
stderr on a TTY.
|
|
97
|
+
|
|
98
|
+
| Flag | Meaning |
|
|
99
|
+
| ------------------------------------ | --------------------------------------------------------------------------------------------- |
|
|
100
|
+
| `--message` | The user message; repeatable for multi-turn. `--messages-file` takes a JSON array of strings. |
|
|
101
|
+
| `--session` / `--continuation-token` | Follow up an existing session on a running server. |
|
|
102
|
+
| `--events <file>` / `--no-events` | Override the trace path, or skip the trace. |
|
|
103
|
+
| `--text` | Compact text output instead of JSON. |
|
|
104
|
+
| `--timeout-ms` | Abort a hung turn. |
|
|
105
|
+
| `--no-stream` | Silence live progress on stderr. |
|
|
106
|
+
| `--slug` | Pick one agent when `--dir` mounts several. |
|
|
107
|
+
|
|
108
|
+
## call
|
|
109
|
+
|
|
110
|
+
`call` invokes a server tool directly, with no model turn.
|
|
111
|
+
|
|
112
|
+
```bash
|
|
113
|
+
agentkit call inspect_pr --dir . \
|
|
114
|
+
--input '{"prUrl":"https://github.com/acme/checkout/pull/42"}'
|
|
115
|
+
agentkit call inspect_pr --url http://127.0.0.1:3000/<slug> --input '{…}'
|
|
116
|
+
agentkit call inspect_pr --dir . --input '{…}' --session ses_…
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
Deterministic server-tool invocation through `POST /v1/tools/:toolName`:
|
|
120
|
+
schema-validated, in-process, no model turn, no API key. `--session`
|
|
121
|
+
runs it inside an existing session and records it on that session's
|
|
122
|
+
stream (serializing with model turns). See
|
|
123
|
+
[Tools](./tools.md#call-a-tool-without-a-model-turn).
|
|
124
|
+
|
|
125
|
+
## eval
|
|
126
|
+
|
|
127
|
+
`eval` runs the project's filesystem evals.
|
|
128
|
+
|
|
129
|
+
```bash
|
|
130
|
+
agentkit eval --dir . --list # discovered datapoints
|
|
131
|
+
agentkit eval --dir . # run all
|
|
132
|
+
agentkit eval --dir . builds/checkout # one datapoint
|
|
133
|
+
agentkit eval --dir . builds # every datapoint in the file
|
|
134
|
+
agentkit eval --dir . --tag smoke # by tag (repeatable)
|
|
135
|
+
agentkit eval --dir . --json # machine-readable results
|
|
136
|
+
agentkit eval --dir . --verbose # stream t.log lines + reply snippets
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
Runs `evals/**/*.eval.{ts,js}` on an ephemeral server, or against `--url`.
|
|
140
|
+
Select by exact case id, file id (a prefix), several of either, tags, or
|
|
141
|
+
nothing for all. See [Evals](../evals.md).
|
|
142
|
+
|
|
143
|
+
## trajectory
|
|
144
|
+
|
|
145
|
+
`trajectory` summarizes a saved event stream.
|
|
146
|
+
|
|
147
|
+
```bash
|
|
148
|
+
agentkit trajectory --events /tmp/run.ndjson [--text]
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
Turns any saved NDJSON event stream into the same trajectory JSON `run`
|
|
152
|
+
prints.
|
|
153
|
+
|
|
154
|
+
## init
|
|
155
|
+
|
|
156
|
+
`init` scaffolds a new project.
|
|
157
|
+
|
|
158
|
+
```bash
|
|
159
|
+
agentkit init ./my-agent # scaffold package.json + agent/ + a demo tool
|
|
160
|
+
agentkit init # no directory: print the setup guide
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
Refuses to overwrite existing files.
|
|
164
|
+
|
|
165
|
+
## info
|
|
166
|
+
|
|
167
|
+
`info` prints the discovered agent surface.
|
|
168
|
+
|
|
169
|
+
```bash
|
|
170
|
+
agentkit info --dir . [--json]
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
The discovered surface: model, instructions size, tools, skills, MCP
|
|
174
|
+
connections, subagents, channels and their routes, schedules, hooks, and
|
|
175
|
+
diagnostics. `--json` matches `GET /v1/info`; with multiple agents it
|
|
176
|
+
prints one entry per slug.
|
|
177
|
+
|
|
178
|
+
## validate
|
|
179
|
+
|
|
180
|
+
`validate` checks the project and sets the exit code.
|
|
181
|
+
|
|
182
|
+
```bash
|
|
183
|
+
agentkit validate --dir .
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
Prints diagnostics per agent and exits non-zero when any has
|
|
187
|
+
error-severity diagnostics (`serve` refuses to start in that state).
|
|
188
|
+
Warnings (cloud runtime combined with local-only capabilities, say) print
|
|
189
|
+
without failing it.
|
|
190
|
+
|
|
191
|
+
## login / logout / whoami
|
|
192
|
+
|
|
193
|
+
Three commands manage the host's Cursor credential.
|
|
194
|
+
|
|
195
|
+
```bash
|
|
196
|
+
agentkit login [--api-key <key>] [--key-name <name>]
|
|
197
|
+
agentkit whoami [--json]
|
|
198
|
+
agentkit logout
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
`login` signs the host in to Cursor: browser sign-in mints a named,
|
|
202
|
+
dashboard-revocable API key, and only the key is stored (the default
|
|
203
|
+
name is `agentkit (<hostname>)`). It powers inference, the cloud
|
|
204
|
+
runtime, and Cursor account MCP connections. `whoami` shows which credential
|
|
205
|
+
is active and why: explicit flag, then `CURSOR_API_KEY`, then the
|
|
206
|
+
stored login. `logout` removes the stored key.
|
|
207
|
+
|
|
208
|
+
Non-production backends: login and account RPCs honor
|
|
209
|
+
`CURSOR_API_BASE_URL` while the SDK harness honors `CURSOR_BACKEND_URL`.
|
|
210
|
+
Set both to the same URL, or keys minted on one backend are rejected by
|
|
211
|
+
the other.
|
|
212
|
+
|
|
213
|
+
## slack
|
|
214
|
+
|
|
215
|
+
The `slack` subcommands generate and verify the Slack side of a channel.
|
|
216
|
+
|
|
217
|
+
```bash
|
|
218
|
+
agentkit slack setup # guided checklist
|
|
219
|
+
agentkit slack init --dir . --name "My Agent" # channel + manifests + env.example
|
|
220
|
+
agentkit slack init --dir . --no-prefix # shared SLACK_* vars
|
|
221
|
+
agentkit slack init --dir . --channel-posts # + message.channels/groups events
|
|
222
|
+
agentkit slack manifest --env dev|prod|both # regenerate manifests
|
|
223
|
+
agentkit slack doctor --prefix MY_AGENT # token / connectivity checks
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
See the [Slack guide](../guides/slack.md).
|
|
227
|
+
|
|
228
|
+
## github
|
|
229
|
+
|
|
230
|
+
The `github` subcommands test webhook channels against real repositories.
|
|
231
|
+
|
|
232
|
+
```bash
|
|
233
|
+
agentkit github doctor [--install] # gh + cli/gh-webhook extension
|
|
234
|
+
agentkit github events --dir . [--json] # per-agent URL + event list
|
|
235
|
+
agentkit github forward --dir . [--repo owner/repo | --org ORG]
|
|
236
|
+
agentkit github replay <pr-url|owner/repo#N> --dir .
|
|
237
|
+
[--events a,b,c|'*'] [--action …] [--conclusion …] [--comment …]
|
|
238
|
+
[--context …] [--secret …] [--dry-run] [--out DIR]
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
`forward` wraps `gh webhook forward`: repo admin required, and blank
|
|
242
|
+
any env `GITHUB_TOKEN` / `GH_TOKEN` or deliveries 401. `replay`
|
|
243
|
+
synthesizes GitHub-shaped payloads from read access only, the
|
|
244
|
+
deterministic tier. `--slug` and `--channel` target one agent among
|
|
245
|
+
several. See the [GitHub guide](../guides/github.md).
|
|
246
|
+
|
|
247
|
+
## Environment variables
|
|
248
|
+
|
|
249
|
+
These are the most common environment variables the CLI and the
|
|
250
|
+
channel packs read.
|
|
251
|
+
|
|
252
|
+
| Variable | Meaning |
|
|
253
|
+
| ------------------------------------------------------------------------- | ---------------------------------------------------------------------------- |
|
|
254
|
+
| `CURSOR_API_KEY` | The Cursor credential, checked after `--api-key` and before the stored login |
|
|
255
|
+
| `GITHUB_APP_ID` / `GITHUB_APP_PRIVATE_KEY` / `GITHUB_APP_INSTALLATION_ID` | GitHub App auth for outbound API calls |
|
|
256
|
+
| `GITHUB_TOKEN` / `GH_TOKEN` | Token auth for outbound API calls; must be blank for `github forward` |
|
|
257
|
+
| `SLACK_BOT_TOKEN` / `SLACK_APP_TOKEN` | Slack tokens (single-agent); `<PREFIX>_SLACK_*` per agent otherwise |
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "MCP Connections"
|
|
3
|
+
description: "Pull in tools from MCP servers: remote, stdio, the signed-in Cursor account's connectors, and peer agents."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# MCP Connections
|
|
7
|
+
|
|
8
|
+
An MCP connection gives the agent tools from an MCP server. One file per
|
|
9
|
+
server under `agent/mcp-connections/`, and the filename becomes the server
|
|
10
|
+
name the model sees. An MCP connection default-exports `defineConnection`
|
|
11
|
+
from `@cursor/july/connections`, and the transport comes in
|
|
12
|
+
four shapes: remote HTTP, local stdio, the signed-in Cursor account's
|
|
13
|
+
connectors, and peer agents on the same host.
|
|
14
|
+
|
|
15
|
+
## Remote MCP server
|
|
16
|
+
|
|
17
|
+
Point an MCP connection at a remote server with a URL.
|
|
18
|
+
|
|
19
|
+
```ts
|
|
20
|
+
import { defineConnection } from "@cursor/july/connections";
|
|
21
|
+
|
|
22
|
+
export default defineConnection({
|
|
23
|
+
url: "https://mcp.linear.app/mcp",
|
|
24
|
+
headers: { authorization: `Bearer ${process.env.LINEAR_TOKEN}` },
|
|
25
|
+
});
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
Tokens come from env vars. Never hardcode them in the file.
|
|
29
|
+
|
|
30
|
+
## Local stdio MCP server
|
|
31
|
+
|
|
32
|
+
Run a local MCP server as a child process with `command`.
|
|
33
|
+
|
|
34
|
+
```ts
|
|
35
|
+
export default defineConnection({
|
|
36
|
+
command: "node",
|
|
37
|
+
args: ["--import", "tsx", "mcp/units-server.ts"],
|
|
38
|
+
// env, cwd
|
|
39
|
+
});
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
This suits small purpose-built servers, like a `units` converter
|
|
43
|
+
shipped next to the agent.
|
|
44
|
+
|
|
45
|
+
## Cursor account MCP connection
|
|
46
|
+
|
|
47
|
+
`{ cursorAccount: true }` exposes the MCP connectors the signed-in
|
|
48
|
+
Cursor account already authorized (dashboard → MCP): Linear, Notion,
|
|
49
|
+
Slack, and the rest, without any token configuration. Every tool executes on
|
|
50
|
+
the Cursor backend with the account's stored OAuth credentials, so raw
|
|
51
|
+
tokens never reach the serve host, session workspaces, or traces.
|
|
52
|
+
|
|
53
|
+
```ts
|
|
54
|
+
// agent/mcp-connections/cursor.ts
|
|
55
|
+
export default defineConnection({ cursorAccount: true, servers: ["Linear"] });
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
The host must be signed in (`agentkit login` or `CURSOR_API_KEY`);
|
|
59
|
+
`serve` fails fast at startup otherwise, and logs each connector's live
|
|
60
|
+
status (`connected`, `needsAuth`, `error`) as it starts. The optional
|
|
61
|
+
`servers` list restricts which connectors are exposed.
|
|
62
|
+
|
|
63
|
+
Local turns and host-side calls go through a loopback bridge guarded by
|
|
64
|
+
a per-startup secret. Cloud-runtime turns reach the same bridge through
|
|
65
|
+
the serve `--public-url`, so `servers` filters apply there too. A
|
|
66
|
+
cloud-capable agent that combines a `servers` filter with no
|
|
67
|
+
`--public-url` fails at startup rather than running unfiltered. Backend
|
|
68
|
+
execution covers the
|
|
69
|
+
account's HTTP/SSE servers. Stdio servers can't run server-side, so
|
|
70
|
+
author a `{ command }` MCP connection for those.
|
|
71
|
+
|
|
72
|
+
> [!CAUTION]
|
|
73
|
+
> Whoever can talk to the agent can drive these connectors, because they
|
|
74
|
+
> are ordinary agent tools. `serve` refuses to start when
|
|
75
|
+
> `--allow-anonymous` is combined with account MCP connections. Prefer
|
|
76
|
+
> `--bearer-token` on shared hosts.
|
|
77
|
+
|
|
78
|
+
## Peer MCP connection
|
|
79
|
+
|
|
80
|
+
`{ agent: "<slug>" }` addresses another agent mounted on the same serve
|
|
81
|
+
host. The model gets the peer's `ask` and `check` (and `call_tool`)
|
|
82
|
+
tools and can delegate work to it:
|
|
83
|
+
|
|
84
|
+
```ts
|
|
85
|
+
export default defineConnection({
|
|
86
|
+
agent: "weather-agent",
|
|
87
|
+
description: "Delegate weather questions to the weather agent.",
|
|
88
|
+
});
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
Unknown slugs and self-references fail `serve` at startup. Resolution
|
|
92
|
+
(loopback versus `--public-url`), loop caveats, and the delegation model
|
|
93
|
+
are in the [Agent-to-agent guide](../guides/agent-to-agent.md).
|
|
94
|
+
|
|
95
|
+
## Every MCP connection is available in three places
|
|
96
|
+
|
|
97
|
+
One authored MCP connection serves three consumers.
|
|
98
|
+
|
|
99
|
+
1. **Cursor agent:** Local or cloud turns see the MCP connection
|
|
100
|
+
through SDK `mcpServers`, and the model calls its tools directly.
|
|
101
|
+
2. **Server tools:** Deterministic host code composes MCP calls
|
|
102
|
+
through `ctx.host.mcp`:
|
|
103
|
+
|
|
104
|
+
```ts
|
|
105
|
+
export default defineTool({
|
|
106
|
+
description: "Search Linear issues.",
|
|
107
|
+
inputSchema: z.object({ query: z.string() }),
|
|
108
|
+
async execute({ query }, ctx) {
|
|
109
|
+
return ctx.host.mcp.callTool("linear", "list_issues", { query });
|
|
110
|
+
},
|
|
111
|
+
});
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
3. **Channel and schedule handlers:** Webhooks hit MCP servers with no
|
|
115
|
+
model turn at all, through `args.host.mcp`:
|
|
116
|
+
|
|
117
|
+
```ts
|
|
118
|
+
POST("/sync", {
|
|
119
|
+
bodySchema: z.object({}),
|
|
120
|
+
handler: async (_req, { host }) => {
|
|
121
|
+
const result = await host.mcp.callTool("linear", "list_issues", {});
|
|
122
|
+
return Response.json(result);
|
|
123
|
+
},
|
|
124
|
+
});
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
The host registry is small: `host.mcp.names()` lists MCP connection names,
|
|
128
|
+
and `listTools(name)` / `callTool(name, tool, args)` open the client
|
|
129
|
+
lazily on first use.
|
|
130
|
+
|
|
131
|
+
## What's next
|
|
132
|
+
|
|
133
|
+
Continue with these pages:
|
|
134
|
+
|
|
135
|
+
- [Agent-to-agent](../guides/agent-to-agent.md): peers in depth
|
|
136
|
+
- [Tools](./tools.md): authored tools that wrap MCP connections
|
|
137
|
+
- [Webhooks](../guides/webhooks.md): calling MCP connections from handlers
|