@cursor/july 0.1.94 → 0.1.96

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.
Files changed (332) hide show
  1. package/AGENTS.md +3 -4
  2. package/dist/channels/deployments/types.d.ts +1 -1
  3. package/dist/channels/deployments/types.d.ts.map +1 -1
  4. package/dist/channels/deployments/types.js +1 -0
  5. package/dist/channels/github/github-channel.d.ts.map +1 -1
  6. package/dist/channels/github/github-channel.js +14 -2
  7. package/dist/channels/github/types.d.ts +18 -3
  8. package/dist/channels/github/types.d.ts.map +1 -1
  9. package/dist/channels/origin/api.d.ts +59 -13
  10. package/dist/channels/origin/api.d.ts.map +1 -1
  11. package/dist/channels/origin/api.js +168 -27
  12. package/dist/channels/origin/binding.d.ts +2 -2
  13. package/dist/channels/origin/checks.d.ts +6 -6
  14. package/dist/channels/origin/checks.js +6 -6
  15. package/dist/channels/origin/cursor-account.d.ts +5 -3
  16. package/dist/channels/origin/cursor-account.d.ts.map +1 -1
  17. package/dist/channels/origin/cursor-account.js +5 -3
  18. package/dist/channels/origin/origin-channel.d.ts.map +1 -1
  19. package/dist/channels/origin/origin-channel.js +11 -3
  20. package/dist/channels/origin/origin-webhook.d.ts +11 -1
  21. package/dist/channels/origin/origin-webhook.d.ts.map +1 -1
  22. package/dist/channels/origin/origin-webhook.js +23 -3
  23. package/dist/channels/origin/types.d.ts +8 -0
  24. package/dist/channels/origin/types.d.ts.map +1 -1
  25. package/dist/channels/slack/api.d.ts +9 -0
  26. package/dist/channels/slack/api.d.ts.map +1 -1
  27. package/dist/channels/slack/api.js +36 -5
  28. package/dist/channels/slack/defaults.d.ts.map +1 -1
  29. package/dist/channels/slack/defaults.js +17 -46
  30. package/dist/channels/slack/dispatch.d.ts +7 -1
  31. package/dist/channels/slack/dispatch.d.ts.map +1 -1
  32. package/dist/channels/slack/dispatch.js +47 -23
  33. package/dist/channels/slack/inbound.d.ts +8 -0
  34. package/dist/channels/slack/inbound.d.ts.map +1 -1
  35. package/dist/channels/slack/inbound.js +32 -0
  36. package/dist/channels/slack/live-delivery.d.ts +26 -29
  37. package/dist/channels/slack/live-delivery.d.ts.map +1 -1
  38. package/dist/channels/slack/live-delivery.js +172 -73
  39. package/dist/channels/slack/manifest.d.ts.map +1 -1
  40. package/dist/channels/slack/manifest.js +5 -1
  41. package/dist/channels/slack/nudge-carrier.d.ts +2 -0
  42. package/dist/channels/slack/nudge-carrier.d.ts.map +1 -1
  43. package/dist/channels/slack/nudge-carrier.js +48 -1
  44. package/dist/channels/slack/pr-ref.d.ts +7 -1
  45. package/dist/channels/slack/pr-ref.d.ts.map +1 -1
  46. package/dist/channels/slack/pr-ref.js +42 -23
  47. package/dist/channels/slack/slack-channel.d.ts.map +1 -1
  48. package/dist/channels/slack/slack-channel.js +2 -2
  49. package/dist/docs/404.html +2 -2
  50. package/dist/docs/ab.html +4 -4
  51. package/dist/docs/assets/{app.CFDEas4I.js → app.jXleCmOc.js} +1 -1
  52. package/dist/docs/assets/chunks/@localSearchIndexroot.DFoGuETX.js +1 -0
  53. package/dist/docs/assets/chunks/{VPLocalSearchBox.B1IIYpYS.js → VPLocalSearchBox.8LhyglIT.js} +1 -1
  54. package/dist/docs/assets/chunks/{theme.Ct4NSiLm.js → theme.9ged-pr2.js} +2 -2
  55. package/dist/docs/assets/index.md.CI93Ltlb.js +5 -0
  56. package/dist/docs/assets/{index.md.DRakGHFe.lean.js → index.md.CI93Ltlb.lean.js} +1 -1
  57. package/dist/docs/assets/{reference_cli.md.Cw6_ICYG.js → reference_cli.md.CCnG-nJx.js} +4 -2
  58. package/dist/docs/assets/{reference_cli.md.Cw6_ICYG.lean.js → reference_cli.md.CCnG-nJx.lean.js} +1 -1
  59. package/dist/docs/assets/{reference_skills.md.8son6Hjm.js → reference_skills.md.BFW9retM.js} +3 -3
  60. package/dist/docs/assets/{templates_agentic-owners.md.DqtPdm6f.js → templates_agentic-owners.md.BZSH4N9z.js} +1 -1
  61. package/dist/docs/assets/templates_code-wiki.md.CDYZIBFN.js +2 -0
  62. package/dist/docs/assets/templates_code-wiki.md.CDYZIBFN.lean.js +1 -0
  63. package/dist/docs/assets/{templates_demo.md.DhFcWN6j.js → templates_demo.md.BeQX9V3H.js} +1 -1
  64. package/dist/docs/assets/{templates_pr-autofixer.md.DU7dQpor.js → templates_pr-autofixer.md.x5zl6-GT.js} +2 -2
  65. package/dist/docs/assets/{templates_pr-autofixer.md.DU7dQpor.lean.js → templates_pr-autofixer.md.x5zl6-GT.lean.js} +1 -1
  66. package/dist/docs/assets/templates_security-help.md.C3Ny_Qr2.js +4 -0
  67. package/dist/docs/assets/templates_security-help.md.C3Ny_Qr2.lean.js +1 -0
  68. package/dist/docs/assets/{templates_security-reviewer.md.CTa7u_l1.js → templates_security-reviewer.md.lshxbCLK.js} +2 -2
  69. package/dist/docs/assets/{templates_security-reviewer.md.CTa7u_l1.lean.js → templates_security-reviewer.md.lshxbCLK.lean.js} +1 -1
  70. package/dist/docs/assets/{templates_triage.md.CVlpctKS.js → templates_triage.md.Co4UNzkZ.js} +3 -3
  71. package/dist/docs/assets/{templates_triage.md.CVlpctKS.lean.js → templates_triage.md.Co4UNzkZ.lean.js} +1 -1
  72. package/dist/docs/building-with-agents.html +4 -4
  73. package/dist/docs/concepts.html +4 -4
  74. package/dist/docs/deployment.html +4 -4
  75. package/dist/docs/evals.html +4 -4
  76. package/dist/docs/guides/agent-to-agent.html +4 -4
  77. package/dist/docs/guides/cloud-runtime.html +4 -4
  78. package/dist/docs/guides/convert-automation.html +4 -4
  79. package/dist/docs/guides/github.html +4 -4
  80. package/dist/docs/guides/human-in-the-loop.html +4 -4
  81. package/dist/docs/guides/mcp-oauth.html +4 -4
  82. package/dist/docs/guides/opentelemetry.html +4 -4
  83. package/dist/docs/guides/slack.html +4 -4
  84. package/dist/docs/guides/webhooks.html +4 -4
  85. package/dist/docs/hashmap.json +1 -1
  86. package/dist/docs/hillclimbing.html +4 -4
  87. package/dist/docs/index.html +6 -6
  88. package/dist/docs/index.md +5 -1
  89. package/dist/docs/llms-full.txt +189 -26
  90. package/dist/docs/llms.txt +2 -0
  91. package/dist/docs/quickstart.html +4 -4
  92. package/dist/docs/reference/agent-config.html +4 -4
  93. package/dist/docs/reference/artifacts.html +4 -4
  94. package/dist/docs/reference/channels.html +4 -4
  95. package/dist/docs/reference/cli.html +8 -6
  96. package/dist/docs/reference/cli.md +4 -1
  97. package/dist/docs/reference/connections.html +4 -4
  98. package/dist/docs/reference/hooks.html +4 -4
  99. package/dist/docs/reference/http-api.html +4 -4
  100. package/dist/docs/reference/instructions.html +4 -4
  101. package/dist/docs/reference/playground.html +4 -4
  102. package/dist/docs/reference/project-layout.html +4 -4
  103. package/dist/docs/reference/prompt.html +4 -4
  104. package/dist/docs/reference/schedules.html +4 -4
  105. package/dist/docs/reference/sessions.html +4 -4
  106. package/dist/docs/reference/skills.html +7 -7
  107. package/dist/docs/reference/subagents.html +4 -4
  108. package/dist/docs/reference/tools.html +4 -4
  109. package/dist/docs/scaffolding-agents.html +4 -4
  110. package/dist/docs/storage.html +4 -4
  111. package/dist/docs/templates/agentic-owners.html +7 -7
  112. package/dist/docs/templates/agentic-owners.md +1 -1
  113. package/dist/docs/templates/code-wiki.html +28 -0
  114. package/dist/docs/templates/code-wiki.md +91 -0
  115. package/dist/docs/templates/demo.html +6 -6
  116. package/dist/docs/templates/demo.md +3 -2
  117. package/dist/docs/templates/pr-autofixer.html +6 -6
  118. package/dist/docs/templates/pr-autofixer.md +7 -13
  119. package/dist/docs/templates/security-help.html +30 -0
  120. package/dist/docs/templates/security-help.md +65 -0
  121. package/dist/docs/templates/security-reviewer.html +6 -6
  122. package/dist/docs/templates/security-reviewer.md +1 -2
  123. package/dist/docs/templates/triage.html +7 -7
  124. package/dist/docs/templates/triage.md +2 -6
  125. package/dist/docs/troubleshooting.html +4 -4
  126. package/dist/files-backends/cursor-hosted.d.ts +26 -0
  127. package/dist/files-backends/cursor-hosted.d.ts.map +1 -1
  128. package/dist/files-backends/cursor-hosted.js +32 -4
  129. package/dist/files.d.ts +2 -0
  130. package/dist/files.d.ts.map +1 -1
  131. package/dist/files.js +5 -0
  132. package/dist/internal/advertise-tools.d.ts +2 -0
  133. package/dist/internal/advertise-tools.d.ts.map +1 -1
  134. package/dist/internal/advertise-tools.js +15 -1
  135. package/dist/internal/bounded.d.ts +7 -0
  136. package/dist/internal/bounded.d.ts.map +1 -0
  137. package/dist/internal/bounded.js +32 -0
  138. package/dist/internal/cli-deploy.d.ts.map +1 -1
  139. package/dist/internal/cli-deploy.js +142 -7
  140. package/dist/internal/conversation-mirror.d.ts +85 -0
  141. package/dist/internal/conversation-mirror.d.ts.map +1 -0
  142. package/dist/internal/conversation-mirror.js +312 -0
  143. package/dist/internal/cursor/backend-client.d.ts.map +1 -1
  144. package/dist/internal/cursor/backend-client.js +22 -48
  145. package/dist/internal/cursor/session-token.d.ts +45 -0
  146. package/dist/internal/cursor/session-token.d.ts.map +1 -0
  147. package/dist/internal/cursor/session-token.js +99 -0
  148. package/dist/internal/cursor-agent-template.d.ts +1 -1
  149. package/dist/internal/cursor-agent-template.d.ts.map +1 -1
  150. package/dist/internal/cursor-agent-template.js +1 -0
  151. package/dist/internal/deferred-channel-session.d.ts +20 -0
  152. package/dist/internal/deferred-channel-session.d.ts.map +1 -0
  153. package/dist/internal/deferred-channel-session.js +62 -0
  154. package/dist/internal/deploy-client.d.ts +13 -1
  155. package/dist/internal/deploy-client.d.ts.map +1 -1
  156. package/dist/internal/deploy-client.js +11 -1
  157. package/dist/internal/deploy-manifest.d.ts.map +1 -1
  158. package/dist/internal/deploy-manifest.js +11 -5
  159. package/dist/internal/discovery.d.ts.map +1 -1
  160. package/dist/internal/discovery.js +22 -2
  161. package/dist/internal/framework-file-storage.d.ts +61 -0
  162. package/dist/internal/framework-file-storage.d.ts.map +1 -0
  163. package/dist/internal/framework-file-storage.js +204 -0
  164. package/dist/internal/framework-storage-selection.d.ts +38 -16
  165. package/dist/internal/framework-storage-selection.d.ts.map +1 -1
  166. package/dist/internal/framework-storage-selection.js +78 -17
  167. package/dist/internal/hosted-admission-context.d.ts +20 -0
  168. package/dist/internal/hosted-admission-context.d.ts.map +1 -0
  169. package/dist/internal/hosted-admission-context.js +31 -0
  170. package/dist/internal/hosted-delivery-protocol.d.ts +5 -0
  171. package/dist/internal/hosted-delivery-protocol.d.ts.map +1 -1
  172. package/dist/internal/hosted-delivery-protocol.js +33 -1
  173. package/dist/internal/hosted-delivery.d.ts +11 -2
  174. package/dist/internal/hosted-delivery.d.ts.map +1 -1
  175. package/dist/internal/hosted-delivery.js +79 -35
  176. package/dist/internal/hosted-managed-automation.d.ts +30 -0
  177. package/dist/internal/hosted-managed-automation.d.ts.map +1 -0
  178. package/dist/internal/hosted-managed-automation.js +58 -0
  179. package/dist/internal/init-project.d.ts.map +1 -1
  180. package/dist/internal/init-project.js +2 -0
  181. package/dist/internal/install-cursor-skills.d.ts.map +1 -1
  182. package/dist/internal/install-cursor-skills.js +1 -3
  183. package/dist/internal/managed-delivery.d.ts +80 -0
  184. package/dist/internal/managed-delivery.d.ts.map +1 -0
  185. package/dist/internal/managed-delivery.js +86 -0
  186. package/dist/internal/review-comments.d.ts.map +1 -1
  187. package/dist/internal/review-comments.js +10 -98
  188. package/dist/internal/runtime-dispatch-runner.d.ts +5 -1
  189. package/dist/internal/runtime-dispatch-runner.d.ts.map +1 -1
  190. package/dist/internal/runtime-dispatch-runner.js +7 -0
  191. package/dist/internal/scm/pr-url.d.ts +14 -0
  192. package/dist/internal/scm/pr-url.d.ts.map +1 -0
  193. package/dist/internal/scm/pr-url.js +65 -0
  194. package/dist/internal/sdk-runner.d.ts +25 -0
  195. package/dist/internal/sdk-runner.d.ts.map +1 -1
  196. package/dist/internal/sdk-runner.js +70 -0
  197. package/dist/internal/server.d.ts.map +1 -1
  198. package/dist/internal/server.js +11 -2
  199. package/dist/internal/session-engine.d.ts +13 -0
  200. package/dist/internal/session-engine.d.ts.map +1 -1
  201. package/dist/internal/session-engine.js +71 -3
  202. package/dist/internal/steering.d.ts +15 -0
  203. package/dist/internal/steering.d.ts.map +1 -0
  204. package/dist/internal/steering.js +18 -0
  205. package/dist/playground/assets/index-B1DDvBeC.css +1 -0
  206. package/dist/playground/assets/{index-B3JCyigB.js → index-Cx9CclK_.js} +47 -47
  207. package/dist/playground/index.html +2 -2
  208. package/dist/storage-backends/cursor-hosted.d.ts +8 -0
  209. package/dist/storage-backends/cursor-hosted.d.ts.map +1 -1
  210. package/dist/storage-backends/cursor-hosted.js +4 -3
  211. package/dist/types.d.ts +2 -1
  212. package/dist/types.d.ts.map +1 -1
  213. package/docs/README.md +5 -1
  214. package/docs/reference/cli.md +4 -1
  215. package/docs/templates/agentic-owners.md +1 -1
  216. package/docs/templates/code-wiki.md +96 -0
  217. package/docs/templates/demo.md +3 -2
  218. package/docs/templates/pr-autofixer.md +7 -13
  219. package/docs/templates/security-help.md +70 -0
  220. package/docs/templates/security-reviewer.md +1 -2
  221. package/docs/templates/triage.md +2 -6
  222. package/package.json +2 -2
  223. package/skills/ab/SKILL.md +13 -97
  224. package/skills/create-agent/SKILL.md +123 -223
  225. package/skills/debug/SKILL.md +34 -68
  226. package/skills/evals/SKILL.md +55 -180
  227. package/skills/framework-map/SKILL.md +83 -145
  228. package/skills/github/SKILL.md +53 -111
  229. package/skills/hillclimb/SKILL.md +40 -163
  230. package/skills/mcp-auth/SKILL.md +48 -107
  231. package/skills/otel/SKILL.md +22 -68
  232. package/skills/setup-slack/SKILL.md +77 -208
  233. package/src/channels/deployments/types.ts +1 -0
  234. package/src/channels/github/github-channel.ts +23 -8
  235. package/src/channels/github/types.ts +19 -2
  236. package/src/channels/origin/api.ts +242 -30
  237. package/src/channels/origin/binding.ts +2 -2
  238. package/src/channels/origin/checks.ts +6 -6
  239. package/src/channels/origin/cursor-account.ts +5 -3
  240. package/src/channels/origin/origin-channel.ts +13 -1
  241. package/src/channels/origin/origin-webhook.ts +27 -3
  242. package/src/channels/origin/types.ts +8 -0
  243. package/src/channels/slack/api.ts +41 -5
  244. package/src/channels/slack/defaults.ts +15 -49
  245. package/src/channels/slack/dispatch.ts +56 -22
  246. package/src/channels/slack/inbound.ts +43 -0
  247. package/src/channels/slack/live-delivery.ts +235 -114
  248. package/src/channels/slack/manifest.ts +5 -1
  249. package/src/channels/slack/nudge-carrier.ts +48 -1
  250. package/src/channels/slack/pr-ref.ts +56 -25
  251. package/src/channels/slack/slack-channel.ts +2 -0
  252. package/src/files-backends/cursor-hosted.ts +41 -2
  253. package/src/files.ts +11 -0
  254. package/src/internal/advertise-tools.ts +18 -2
  255. package/src/internal/bounded.ts +28 -0
  256. package/src/internal/cli-deploy.ts +183 -7
  257. package/src/internal/conversation-mirror.ts +406 -0
  258. package/src/internal/cursor/backend-client.ts +34 -58
  259. package/src/internal/cursor/session-token.ts +115 -0
  260. package/src/internal/cursor-agent-template.ts +1 -0
  261. package/src/internal/deferred-channel-session.ts +61 -0
  262. package/src/internal/deploy-client.ts +24 -1
  263. package/src/internal/deploy-manifest.ts +10 -5
  264. package/src/internal/discovery.ts +25 -2
  265. package/src/internal/framework-file-storage.ts +222 -0
  266. package/src/internal/framework-storage-selection.ts +101 -19
  267. package/src/internal/hosted-admission-context.ts +37 -0
  268. package/src/internal/hosted-delivery-protocol.ts +44 -1
  269. package/src/internal/hosted-delivery.ts +105 -40
  270. package/src/internal/hosted-managed-automation.ts +72 -0
  271. package/src/internal/init-project.ts +2 -0
  272. package/src/internal/install-cursor-skills.ts +1 -4
  273. package/src/internal/managed-delivery.ts +125 -0
  274. package/src/internal/review-comments.ts +10 -113
  275. package/src/internal/runtime-dispatch-runner.ts +10 -0
  276. package/src/internal/scm/pr-url.ts +95 -0
  277. package/src/internal/sdk-runner.ts +103 -0
  278. package/src/internal/server.ts +12 -0
  279. package/src/internal/session-engine.ts +76 -4
  280. package/src/internal/steering.ts +17 -0
  281. package/src/storage-backends/cursor-hosted.ts +10 -1
  282. package/src/types.ts +2 -1
  283. package/templates/agentic-owners/README.md +1 -1
  284. package/templates/agentic-owners/agent/agent.ts +0 -10
  285. package/templates/agentic-owners/agent/channels/github.ts +5 -14
  286. package/templates/agentic-owners/agent/lib/config.ts +0 -8
  287. package/templates/agentic-owners/agent/lib/review.ts +2 -15
  288. package/templates/agentic-owners/agent/tools/record_review.ts +2 -4
  289. package/templates/code-wiki/README.md +34 -0
  290. package/templates/code-wiki/agent/agent.ts +8 -0
  291. package/templates/code-wiki/agent/channels/github.ts +144 -0
  292. package/templates/code-wiki/agent/instructions.md +39 -0
  293. package/templates/code-wiki/agent/lib/repos.ts +5 -0
  294. package/templates/code-wiki/agent/lib/wiki.ts +22 -0
  295. package/templates/code-wiki/agent/tools/apply_wiki.ts +219 -0
  296. package/templates/code-wiki/evals/evals.config.ts +5 -0
  297. package/templates/code-wiki/evals/wiki.eval.ts +132 -0
  298. package/templates/code-wiki/init.json +25 -0
  299. package/templates/code-wiki/package.json +18 -0
  300. package/templates/code-wiki/tsconfig.json +12 -0
  301. package/templates/demo/agent/agent.ts +0 -10
  302. package/templates/pr-autofixer/README.md +0 -2
  303. package/templates/pr-autofixer/agent/agent.ts +0 -11
  304. package/templates/pr-autofixer/agent/channels/slack.ts +0 -7
  305. package/templates/pr-autofixer/agent/lib/pr-state.ts +5 -17
  306. package/templates/pr-autofixer/agent/lib/repos.ts +0 -1
  307. package/templates/security-help/README.md +2 -2
  308. package/templates/security-help/agent/agent.ts +1 -2
  309. package/templates/security-help/agent/channels/slack.ts +0 -3
  310. package/templates/security-help/agent/instructions.md +9 -10
  311. package/templates/security-help/agent/skills/access-request.md +1 -1
  312. package/templates/security-help/agent/skills/faq.md +31 -0
  313. package/templates/security-help/agent/skills/security-playbooks.md +1 -1
  314. package/templates/security-help/package.json +1 -2
  315. package/templates/security-reviewer/agent/agent.ts +0 -10
  316. package/templates/triage/agent/agent.ts +0 -10
  317. package/templates/triage/agent/channels/queue.ts +1 -1
  318. package/templates/triage/agent/channels/webhook.ts +1 -3
  319. package/dist/docs/assets/chunks/@localSearchIndexroot.DU3U2Ij2.js +0 -1
  320. package/dist/docs/assets/index.md.DRakGHFe.js +0 -5
  321. package/dist/internal/deployment-scm-event-stream.d.ts +0 -116
  322. package/dist/internal/deployment-scm-event-stream.d.ts.map +0 -1
  323. package/dist/internal/deployment-scm-event-stream.js +0 -474
  324. package/dist/playground/assets/index-D9N7-q97.css +0 -1
  325. package/src/internal/deployment-scm-event-stream.ts +0 -593
  326. package/templates/security-help/agent/knowledge/faq/approvals.md +0 -5
  327. package/templates/security-help/agent/knowledge/faq/channels.md +0 -6
  328. package/templates/security-help/agent/knowledge/faq/phishing.md +0 -10
  329. package/templates/security-help/agent/skills/security-first-pass.md +0 -15
  330. /package/dist/docs/assets/{reference_skills.md.8son6Hjm.lean.js → reference_skills.md.BFW9retM.lean.js} +0 -0
  331. /package/dist/docs/assets/{templates_agentic-owners.md.DqtPdm6f.lean.js → templates_agentic-owners.md.BZSH4N9z.lean.js} +0 -0
  332. /package/dist/docs/assets/{templates_demo.md.DhFcWN6j.lean.js → templates_demo.md.BeQX9V3H.lean.js} +0 -0
@@ -1,165 +1,103 @@
1
1
  ---
2
2
  name: agentsdk-framework-map
3
3
  description: >-
4
- Orientation for @cursor/july folder structure, local vs cloud
5
- runtimes, sessions, state layout, and invariants (Node not Bun, root
6
- evals/, typecheck after tsx). Use when creating, editing, or running
7
- Agent SDK projects with agent/agent.ts and agent/instructions.md.
4
+ Orient on Agent SDK layout, local vs cloud runtime, sessions, and
5
+ invariants (Node not Bun, root evals/, typecheck after tsx). Use
6
+ when creating, editing, or running a project with agent/agent.ts.
8
7
  ---
9
8
 
10
9
  # Agent SDK framework map
11
10
 
12
- `@cursor/july` serves agents defined as ordinary files: markdown
13
- for prose, TypeScript for typed behavior, under an `agent/` directory. The
14
- framework discovers the files, compiles a manifest, and serves the agent
15
- over HTTP/Slack/GitHub channels, with the Cursor SDK + harness as the
16
- execution engine. Ground truth is the package `README.md` (full reference)
17
- and `AGENTS.md` (coding-agent loop) — this skill is the map, not the spec.
18
-
19
- Public docs index: `node_modules/@cursor/july/dist/docs/llms.txt`. A running
20
- host serves the same index at `/docs/llms.txt`.
21
-
22
- Run the CLI as `agent-sdk <cmd>`. In the everysphere monorepo there is no
23
- installed bin use:
24
-
25
- ```bash
26
- cd packages/agent-serve
27
- pnpm exec tsx src/bin/agent-serve.ts <cmd> ...
28
- ```
29
-
30
- ## Hard invariants (violating these wastes hours)
31
-
32
- 1. **Node 22+, never Bun.** Bun's HTTP/2 client corrupts harness
33
- tool-result streams (`NGHTTP2_FRAME_SIZE_ERROR`): every built-in
34
- read/grep the model makes fails and turns degrade into 8-minute retry
35
- loops. All package mise tasks already use tsx.
36
- 2. **Evals live at the project root `evals/`**, never `agent/evals/` (that
37
- path is silently ignored).
38
- 3. **tsx strips types without checking them.** `validate`/`run` passing
39
- does not mean the code typechecks — run the repo's TypeScript check
40
- (in everysphere: `dev check typecheck packages/agent-serve/... --timeout 120`)
41
- before shipping. Classic miss: a tool `execute` return that fails
42
- `ToolExecuteResult` — returns must be JSON-shaped, so use object
43
- literals or `type` aliases, not `interface` types.
44
- 4. **Harness cwd in a nested git repo.** Discovery defaults `local.cwd` to
45
- `~/.cache/agent-serve/<dir>` so ancestor `AGENTS.md` / `.cursor` / IDE
46
- MCP do not leak into playground turns. Set cwd at a checkout only when
47
- the agent must inherit that tree. Attached MCP is invisible by name
48
- until `advertiseTools: true`.
49
- 5. **A model turn needs `CURSOR_API_KEY`.** Everything structural
50
- (`validate`, `info`, `call`, `serve` bring-up) works without one.
11
+ `@cursor/july` discovers files under `agent/` and serves the agent
12
+ over HTTP, Slack, and GitHub. Markdown is prose. TypeScript is typed
13
+ behavior. Ground truth: package `README.md` and `AGENTS.md`.
14
+
15
+ CLI is `agent-sdk` (Node, never Bun).
16
+
17
+ Public docs: `node_modules/@cursor/july/dist/docs/llms.txt` or
18
+ `/docs/llms.txt` on a running host.
19
+
20
+ ## Invariants
21
+
22
+ 1. **Node 22.13+, never Bun.** Bun corrupts harness tool-result
23
+ streams (`NGHTTP2_FRAME_SIZE_ERROR`).
24
+ 2. **Evals live at project-root `evals/`.** `agent/evals/` is ignored.
25
+ 3. **tsx does not typecheck.** Tool `execute` must return JSON-shaped
26
+ values: object literals or `type` aliases, not `interface` types.
27
+ 4. **Nested git checkouts.** Discovery sets `local.cwd` to a
28
+ per-project cache directory under `~/.cache`. Point cwd at a
29
+ checkout only when the agent must inherit that tree.
30
+ 5. **Attached MCP is nameless** until `advertiseTools: true`.
31
+ 6. **Model turns need `CURSOR_API_KEY`.** `validate`, `info`, `call`,
32
+ and `serve` bring-up do not.
51
33
 
52
34
  ## Folder structure
53
35
 
54
- One file per concept; the path is the identity. Full details for each
55
- path live under README "Folder structure".
36
+ Path is identity. Full list: README "Folder structure".
56
37
 
57
- | Path | What it is |
38
+ | Path | Role |
58
39
  | --- | --- |
59
- | `agent/agent.ts` | `defineAgent({ model?, runtime?, cloud?, local? })`; model defaults to `grok-4.5` with `effort=high`, `fast=true` |
60
- | `agent/instructions.md` | Always-on system prompt (required; `.ts`/dir forms exist) |
61
- | `agent/tools/<name>.ts` | One typed tool; filename = tool name. `execution: "server"` (in-process, default) or `"agent"` (script that runs where the agent runs) |
62
- | `agent/skills/*` | SKILL.md-convention procedures, loaded on demand |
63
- | `agent/mcp-connections/<name>.ts` | MCP servers. Do not name an account connection `cursor.ts`. `advertiseTools: true` for named tools on local turns. `{ tools }` authors TypeScript the Agent SDK packages as stdio MCP. |
64
- | `agent/host-connections/<name>.ts` | Privileged MCP for `ctx.host.mcp` and `mcp oauth`. The model never sees them. |
65
- | `agent/subagents/<id>/` | Child agent dir (`description` required; per-subagent tools/skills/MCP connections ignored for now) |
66
- | `agent/channels/*.ts` | HTTP surfaces beyond the built-in session API; `slack.ts` / `github.ts` use the platform packs |
67
- | `agent/hooks/*.ts` | Observe-only event subscribers (never fatal) |
68
- | `agent/ab.ts` or `agent/ab/*.ts` | Live A/B metrics (`defineAB`); sticky `split` + `onSample` |
69
- | `agent/ab.config.ts` | Optional A/B `maxPlaygroundSessions` / `persistSamples` / `persistSnapshots` |
70
- | `agent/otel.ts` | OpenTelemetry export (`defineOtel`); also `OTEL_EXPORTER_OTLP_*` env |
71
- | `agent/schedules/*` | Cron-driven runs (UTC, 5-field; never auto-fire under `--dev`) |
72
- | `agent/sandbox/workspace/` | Files seeded into each session workspace (local runtime only) |
73
- | `agent/lib/` | Import-only shared code, never discovered |
74
- | `evals/**/*.eval.ts` | Filesystem evals; case id = path under `evals/` |
75
-
76
- ## Local vs cloud runtime
77
-
78
- `runtime: "local"` (default) runs turns on the Cursor SDK local harness on
79
- the serve host; `runtime: "cloud"` runs them on Cursor cloud agents
80
- (`bc-...` ids, needs `cloud: { repos: [...] }`).
40
+ | `agent/agent.ts` | `defineAgent({ model?, runtime?, cloud?, local? })` |
41
+ | `agent/instructions.md` | Always-on system prompt (required) |
42
+ | `agent/tools/<name>.ts` | One tool. `execution: "server"` or `"agent"` |
43
+ | `agent/skills/*` | On-demand procedures |
44
+ | `agent/mcp-connections/<name>.ts` | MCP. Never name an account file `cursor.ts`. `advertiseTools: true` for named local tools |
45
+ | `agent/host-connections/<name>.ts` | Privileged MCP for `ctx.host.mcp` / `mcp oauth` |
46
+ | `agent/subagents/<id>/` | Child agent (`description` required) |
47
+ | `agent/channels/*.ts` | Slack / GitHub / custom HTTP |
48
+ | `agent/hooks/*.ts` | Observe-only |
49
+ | `agent/ab.ts` or `agent/ab/*.ts` | Live A/B (`defineAB`) |
50
+ | `agent/otel.ts` | OpenTelemetry (`defineOtel`) |
51
+ | `agent/schedules/*` | Cron. Never auto-fire under `--dev` |
52
+ | `agent/sandbox/workspace/` | Session seed files (local only) |
53
+ | `agent/lib/` | Import-only. Never discovered |
54
+ | `evals/**/*.eval.ts` | Case id is the path under `evals/` |
55
+
56
+ ## Local vs cloud
57
+
58
+ `runtime: "local"` (default) runs on the serve host.
59
+ `runtime: "cloud"` needs `cloud: { repos: [...] }`.
81
60
 
82
61
  | Capability | local | cloud |
83
62
  | --- | --- | --- |
84
- | Server tools (`execution: "server"`) | yes | yes on managed hosting; self-hosted needs `--public-url` |
63
+ | Server tools | yes | yes on managed hosting; self-hosted needs `--public-url` |
85
64
  | Tool approvals | yes | no |
86
- | Agent tools (`execution: "agent"` scripts) | yes | yes |
87
- | Skills | yes | yes |
65
+ | Agent tools / skills | yes | yes |
88
66
  | sandbox seeds | yes | no |
89
- | Instructions | `AGENTS.md` in session workspace | prepended to first prompt |
90
- | Checkout of a repo/PR | you arrange it | the VM carries it |
91
-
92
- Rule of thumb: per-PR worktrees on the serve host die at
93
- "hundreds of engineers issuing PRs" — when the job needs a repo checkout at
94
- scale, use cloud and keep the host to routing, briefs, and bookkeeping.
95
- `validate` warns when cloud is combined with local-only capabilities.
96
-
97
- ## Sessions, tokens, streams
98
-
99
- Two handles, two owners:
100
-
101
- - **continuationToken:** credential for continuing a conversation. HTTP
102
- follow-ups rotate it; stale tokens get `409`.
103
- - **sessionId** runtime-owned handle for streaming/inspection
104
- (`GET /v1/session/:id/stream?startIndex=N`, durable NDJSON replay).
105
-
106
- A follow-up to a busy HTTP/MCP session **interrupts the in-flight turn**
107
- and waits for it to settle before the new turn sends. Slack uses
108
- **coalesce** instead (enqueue + boundary drain; see
109
- `docs/reference/sessions.md`). `POST /v1/session/:id/stop` interrupts
110
- without sending. Session-bound deterministic tool calls are rejected with
111
- `409 session_busy` while a turn runs.
112
-
113
- Key built-in routes (each agent, under `/<slug>` in multi-agent mode):
114
- `POST /v1/session`, `POST /v1/session/:id`, `GET /v1/session/:id/stream`,
115
- `GET /v1/sessions`, `POST /v1/tools/:toolName` (deterministic call),
116
- `GET/POST /v1/session/:id/approvals[/:callId]`, `GET /v1/info`,
117
- `GET /v1/health`, and in dev `POST /v1/dev/schedules/:id`,
118
- `POST /v1/dev/reminders/:id`.
119
-
120
- ## State layout
121
-
122
- ```
123
- <project>/.agent-serve/ # or <stateRoot>/<slug>/ under serve
124
- sessions/<id>/session.json # metadata
125
- sessions/<id>/events.ndjson # durable stream (replayable)
126
- sessions/<id>/workspace/ # the harness cwd for that session
127
- traces/<sessionId>.ndjson # written by `run`
128
- runner/ # SDK conversation store
129
- ```
130
-
131
- Delete a session directory to forget a conversation.
67
+ | Checkout | you arrange it | the VM carries it |
68
+
69
+ Use cloud when the job needs a checkout at scale. `validate` warns
70
+ when cloud is combined with local-only capabilities.
71
+
72
+ ## Sessions
73
+
74
+ - **continuationToken** continues a conversation. HTTP follow-ups
75
+ rotate it. Stale tokens return `409`.
76
+ - **sessionId** is the inspect handle
77
+ (`GET /v1/session/:id/stream?startIndex=N`).
78
+
79
+ A follow-up to a busy HTTP/MCP session interrupts the in-flight
80
+ turn. Slack coalesces. Routes: `docs/reference/http-api.md`.
81
+ Session files live under the project state directory
82
+ (`--state-root`).
132
83
 
133
84
  ## Where logic belongs
134
85
 
135
- The model is the engine; TypeScript is the boundary layer. Code earns its
136
- place on the deterministic path for side-effect gates and actuation,
137
- idempotency/dedupe of external writes, auth/secrets, evidence seeding, and
138
- hard caps at API boundaries. Formatting, summarizing, classification,
139
- wording, and composing human-facing output belong to the model, under an
140
- output contract in instructions/skills — prose lives in `.md` files, not TS
141
- string builders. When `agent/lib/` + `tools/` dwarf instructions + skills,
142
- you are usually looking at a service with a vestigial model turn, or at
143
- framework gaps patched agent-side that should be fixed upstream. The
144
- budget table and smells: `create-agent/SKILL.md` § "The deterministic-path
145
- budget".
146
-
147
- ## The loop
148
-
149
- Edit inspect → run → assert. Canonical commands and flags live in
150
- `AGENTS.md` (`validate` / `info` / `call` / `run` / `eval` / `serve`).
151
- Serve only your agent's directory during bring-up — mounting a parent
152
- folder mounts every sibling agent too.
153
-
154
- ## Where to go next
155
-
156
- - Scaffolding → `packages/agent-serve/skills/create-agent/SKILL.md`
157
- - Evals → `packages/agent-serve/skills/evals/SKILL.md`
158
- - Live A/B metrics → `packages/agent-serve/skills/ab/SKILL.md`
159
- - OpenTelemetry → `packages/agent-serve/skills/otel/SKILL.md`
160
- - GitHub webhooks → `packages/agent-serve/skills/github/SKILL.md`
161
- - Slack → `packages/agent-serve/skills/setup-slack/SKILL.md`
162
- - Host MCP OAuth → `packages/agent-serve/skills/mcp-auth/SKILL.md`
163
- - Local triage → `packages/agent-serve/skills/debug/SKILL.md`
164
- - Measured improvement → `packages/agent-serve/skills/hillclimb/SKILL.md`
165
- - Dogfood / deploy → `packages/agent-serve/skills/operate/SKILL.md`
86
+ Code: side-effect gates, write dedupe, auth, evidence seeding, hard
87
+ API caps. Model: formatting, summarizing, classification, replies.
88
+ Budget: `skills/create-agent/SKILL.md`.
89
+
90
+ Loop: `validate` / `info` / `call` / `run` / `eval` / `serve`. Serve
91
+ only this agent's directory.
92
+
93
+ | Task | Skill |
94
+ | --- | --- |
95
+ | Scaffold | `skills/create-agent/SKILL.md` |
96
+ | Evals | `skills/evals/SKILL.md` |
97
+ | Live A/B | `skills/ab/SKILL.md` |
98
+ | OpenTelemetry | `skills/otel/SKILL.md` |
99
+ | GitHub | `skills/github/SKILL.md` |
100
+ | Slack | `skills/setup-slack/SKILL.md` |
101
+ | Host MCP OAuth | `skills/mcp-auth/SKILL.md` |
102
+ | Local triage | `skills/debug/SKILL.md` |
103
+ | Measured improvement | `skills/hillclimb/SKILL.md` |
@@ -1,28 +1,26 @@
1
1
  ---
2
2
  name: agentsdk-github
3
3
  description: >-
4
- Build and test GitHub-webhook-driven Agent SDK agents: githubChannel
5
- hooks (auth turn vs host task), signature modes, and testing tiers
6
- (fixtures, github replay, github forward, serve --cursor-events). Use
7
- when wiring GitHub events, replaying PR webhooks, or debugging delivery.
4
+ Build and test GitHub-driven Agent SDK agents: githubChannel hooks
5
+ (auth turn vs host task), cursorAccount / --cursor-events, and
6
+ local test tiers (fixtures, replay, forward). Use when wiring
7
+ GitHub events or debugging delivery.
8
8
  ---
9
9
 
10
10
  # GitHub channels in the Agent SDK
11
11
 
12
- Public docs index: `node_modules/@cursor/july/dist/docs/llms.txt`. A running
13
- host serves the same index at `/docs/llms.txt`.
12
+ Author `agent/channels/github.ts`. Production wakes:
13
+ `cursorAccount` + `serve --cursor-events`. No public webhook URL.
14
+ Use the HTTP route for fixtures, replay, and hosts that already
15
+ terminate GitHub webhooks.
14
16
 
15
- Author `agent/channels/github.ts` with `githubChannel()` from
16
- `@cursor/july/channels/github`. It mounts
17
- `POST /<slug>/v1/channels/github` and publishes the events it dispatches on
18
- (derived from declared hooks, or pinned via `webhookEvents`) so the CLI can
19
- auto-derive forwarding.
17
+ Guide: `docs/guides/github.md`.
20
18
 
21
19
  ```ts
22
20
  import { defaultGitHubAuth, githubChannel } from "@cursor/july/channels/github";
23
21
 
24
22
  export default githubChannel({
25
- botName: "my-agent", // or GITHUB_APP_SLUG; used to ignore self-comments
23
+ botName: "my-agent",
26
24
  cursorAccount: { repos: ["owner/repo"] }, // permissions?: "read" | "pr-write" | "contents-write"
27
25
 
28
26
  onPullRequest: (ctx, pr) =>
@@ -33,39 +31,44 @@ export default githubChannel({
33
31
  ```
34
32
 
35
33
  Hooks: `onPullRequest`, `onComment`, `onIssue`, `onCheckSuite`,
36
- `onCheckRun`, `onWorkflowRun`, `onStatus`, plus catch-all `onEvent` and
37
- lifecycle `onStart`/`onStop`. Each hook returns one of:
34
+ `onCheckRun`, `onWorkflowRun`, `onStatus`, plus `onEvent` and
35
+ `onStart`/`onStop`.
38
36
 
39
37
  | Return | Meaning |
40
38
  | --- | --- |
41
- | `{ auth }` | Start/continue a **model turn** as that actor (a chat session exists; shows in the playground) |
42
- | `{ task }` | **Host-side work**, 202-ACKed immediately so it can run past GitHub's ~10s delivery timeout (no chat session) |
43
- | `null` | Skip this delivery |
44
-
45
- Use `{ task }` for deterministic pipelines (a security reviewer can run its
46
- whole review loop this way and report via commit status); use `{ auth }` when
47
- the model should reason about the event.
48
-
49
- ## Auth modes
50
-
51
- - **`cursorAccount`** the signed-in Cursor principal supplies both the SCM
52
- event stream and a short-lived, repo-scoped GitHub credential. It works in
53
- local dev (`agent-sdk login`) and hosted deployments (`CURSOR_API_KEY`).
54
- `ctx.github`, `ctx.host.github`, and child `gh` commands share the lease.
55
- Use `{ repos: ["owner/repo"] }`, or `true` with `serve --cursor-events
56
- --repo owner/repo`. One host credential covers up to 20 repositories under
57
- one GitHub owner; it cannot span owners.
58
- - **Secret set** → route auth is `allowAll()` + `X-Hub-Signature-256`
59
- verification before parsing; the HMAC becomes the request principal.
60
- - **No secret** `localDevStrict()` (loopback only) except under
61
- `serve --dev`, which admits **unsigned loopback** deliveries so fixtures
62
- and forwarding work with zero config.
63
- - Non-dev targets always need the secret; keep the same value on the
64
- server and whatever signs deliveries.
65
-
66
- ## Testing tiers pick deliberately
67
-
68
- ### 1. Saved fixtures (offline, free)
39
+ | `{ auth }` | Model turn. Session shows in the playground. `workspaceFiles` can be a function. |
40
+ | `{ task }` | Host work. No chat session. Use when the work can outlive a webhook timeout. |
41
+ | `null` | Skip |
42
+
43
+ To keep repo scope in deploy config, use `cursorAccount: true`
44
+ and pass `--repo owner/name` at serve / `--cursor-events-repo`
45
+ at deploy. Repos must share one GitHub owner.
46
+
47
+ ## Event sources
48
+
49
+ | Source | When |
50
+ | --- | --- |
51
+ | `cursorAccount` + `serve --cursor-events` | Preferred. Signed-in host (`agent-sdk login` / `CURSOR_API_KEY`). Repos from the channel and from repeatable `--repo owner/name`. Cap 20, one GitHub owner |
52
+ | HTTP `POST /<slug>/v1/channels/github` with a webhook secret | `allowAll()` + `X-Hub-Signature-256` |
53
+ | HTTP, no secret | Loopback only. `serve --dev` also admits unsigned loopback (fixtures / forward) |
54
+
55
+ `permissions`: `"read"` inspect; `"pr-write"` (default) comments /
56
+ PR writes; `"contents-write"` push or merge-box checks.
57
+ `progress.commitStatus` needs check-write; see the GitHub guide.
58
+ Set `checks: true` when channel code posts its own Checks API
59
+ runs through `ctx.github.createCheck`. The flag grants access.
60
+ It does not post a check.
61
+
62
+ Without `cursorAccount`, outbound calls prefer App installation
63
+ tokens (`GITHUB_APP_ID` + `GITHUB_APP_PRIVATE_KEY`). Local tests
64
+ can use `GITHUB_TOKEN` / `gh auth login`.
65
+
66
+ The Cursor stream is metadata, not full webhook bodies. Re-read
67
+ the PR from GitHub.
68
+
69
+ ## Test locally
70
+
71
+ 1. **Fixtures** (offline, `--dev`, no signature):
69
72
 
70
73
  ```bash
71
74
  curl -s -X POST http://127.0.0.1:3000/<slug>/v1/channels/github \
@@ -74,87 +77,26 @@ curl -s -X POST http://127.0.0.1:3000/<slug>/v1/channels/github \
74
77
  -d @fixtures/github/pull_request.synchronize.json
75
78
  ```
76
79
 
77
- No signature needed against `--dev`. Snapshot fixtures with replay's
78
- `--dry-run --out` (below) instead of hand-writing payloads.
79
-
80
- ### 2. `github replay` — deterministic, read-only (the hillclimbing tier)
81
-
82
- Reads a real PR via `gh api` (**pull access is enough** — `GITHUB_TOKEN`
83
- is fine here), synthesizes GitHub-shaped payloads, signs them when a secret
84
- is configured, and POSTs them at the channel. Fully deterministic.
80
+ 2. **Replay** (hillclimb tier; pull access is enough):
85
81
 
86
82
  ```bash
87
- agent-sdk github replay https://github.com/owner/repo/pull/123 --dir <project>
88
- agent-sdk github replay owner/repo#123 --dir <project> --events '*' --conclusion failure
83
+ agent-sdk github replay owner/repo#123 --dir <project>
89
84
  agent-sdk github replay owner/repo#123 --dir <project> --events '*' --dry-run --out fixtures/github
90
85
  ```
91
86
 
92
- `--events` defaults to `pull_request` (`'*'` = the channel's declared
93
- set); `--action` / `--conclusion` / `--comment` / `--context` shape each
94
- event; `--secret` or `GITHUB_WEBHOOK_SECRET` signs.
95
-
96
- ### 3. `github forward` — live deliveries (needs repo admin)
97
-
98
- Wraps `gh webhook forward`: registers a real webhook and relays deliveries
99
- to loopback. URL + events auto-derived; repo inferred from the git remote.
87
+ 3. **Forward** (live; repo admin). One forwarder per repo. Blank
88
+ `GITHUB_TOKEN`/`GH_TOKEN` or every delivery 401s:
100
89
 
101
90
  ```bash
102
- agent-sdk github doctor --install # one-time: gh + cli/gh-webhook
103
- agent-sdk github events --dir <parent> --json # what would be forwarded
91
+ agent-sdk github doctor --install
104
92
  GITHUB_TOKEN= GH_TOKEN= agent-sdk github forward --dir <project>
105
93
  ```
106
94
 
107
- Traps, in order of hours lost:
108
-
109
- 1. **`GITHUB_TOKEN`/`GH_TOKEN` in the env → every delivery 401s** while
110
- hook creation still succeeds. The relay authenticates with the gh CLI
111
- login and rejects env tokens. Blank them for the command. `doctor` and
112
- `forward` warn about this.
113
- 2. **One forwarder per repo** (GitHub limit). Point one
114
- `forward --dir <parent>` at a folder of agents and it fans out each raw,
115
- still-signed delivery to every channel whose event set matches; N
116
- separate forwarders collide with `Hook already exists`.
117
- 3. Requires **admin** on the repo (org owner for `--org`) — if you lack
118
- it, use replay.
119
- 4. Best-effort dev relay: deliveries while the process is down are lost.
120
-
121
- `--repo owner/repo` / `--org ORG` override the target, `--events` narrows,
122
- `--url` points at a tunnel, `--slug` / `--channel` target one agent.
123
-
124
- ### 4. `serve --cursor-events` — pull from Cursor (`/v0/scm-events`)
95
+ 4. **Cursor pull** (same as production):
125
96
 
126
97
  ```bash
127
98
  agent-sdk serve --dir <project> --cursor-events --repo owner/repo
128
99
  ```
129
100
 
130
- Reads the stream as the host's Cursor user, so it **requires sign-in**
131
- (`agent-sdk login` / `CURSOR_API_KEY`) `serve` refuses to start signed
132
- out instead of running a relay that can never receive events. No public URL
133
- or repo admin. Registers before consuming; offset + consumer id under
134
- `<state-root>/cursor-events/`. `CURSOR_API_BASE_URL` for a non-default
135
- backend. Each event includes the verified webhook payload when the API
136
- stored it.
137
-
138
- ## Production-shaped channel patterns
139
-
140
- Steal these when an agent must survive real webhook volume — each one
141
- against its measured load signal, not as a starter kit. Debounce needs
142
- event bursts you have seen; persisted buffers need wakes you cannot afford
143
- to drop; affinity stores need cross-channel resume you actually do.
144
- Preinstalling all of them is how a channel file hits 400 lines before the
145
- first real delivery.
146
-
147
- - **Debounce per PR** (~3s, latest event wins) and re-buffer while CI
148
- settles; skip a flush when a turn for that PR is already in flight.
149
- - **Persist the buffer before ACKing** the webhook in `host.kv`, then
150
- restore it on channel start. A restart must not drop buffered wakes.
151
- - **Stable continuation key** `pr:owner/repo#N` so every wake resumes the
152
- PR's session. Cross-channel resume needs an affinity store mapping PR →
153
- SDK agent id (write it from an `agent.bound` hook with `ctx.host.kv`).
154
- - **Discard payload details in wake prompts** — send a generic "re-check
155
- the PR" refresh; the agent re-reads ground truth instead of trusting a
156
- stale payload.
157
- - **Cancel PR-scoped reminders on `pull_request.closed`.**
158
- - No repo allowlist means the channel wakes for whatever deliveries
159
- reach it — decide explicitly what repos an agent may act on, and
160
- remember each wake spends real model budget.
101
+ Volume, debounce, and `progress.commitStatus` / `progress.banner`
102
+ live in `docs/guides/github.md`. Do not preinstall them.