@cursor/july 0.1.107 → 0.1.109

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 (523) hide show
  1. package/AGENTS.md +2 -6
  2. package/README.md +13 -11
  3. package/dist/bin/agent-serve.js +30 -8
  4. package/dist/channels/bitbucket/api.d.ts +41 -0
  5. package/dist/channels/bitbucket/api.d.ts.map +1 -1
  6. package/dist/channels/bitbucket/api.js +260 -0
  7. package/dist/channels/bitbucket/binding.d.ts +4 -0
  8. package/dist/channels/bitbucket/binding.d.ts.map +1 -1
  9. package/dist/channels/bitbucket/binding.js +16 -0
  10. package/dist/channels/bitbucket/index.d.ts +1 -1
  11. package/dist/channels/bitbucket/index.d.ts.map +1 -1
  12. package/dist/channels/bitbucket/index.js +1 -1
  13. package/dist/channels/github/github-channel.js +8 -5
  14. package/dist/channels/github/types.d.ts +5 -1
  15. package/dist/channels/github/types.d.ts.map +1 -1
  16. package/dist/channels/gitlab/api.d.ts +27 -0
  17. package/dist/channels/gitlab/api.d.ts.map +1 -1
  18. package/dist/channels/gitlab/api.js +88 -0
  19. package/dist/channels/gitlab/binding.d.ts +5 -0
  20. package/dist/channels/gitlab/binding.d.ts.map +1 -1
  21. package/dist/channels/gitlab/binding.js +10 -0
  22. package/dist/channels/gitlab/index.d.ts +1 -1
  23. package/dist/channels/gitlab/index.d.ts.map +1 -1
  24. package/dist/channels/gitlab/index.js +1 -1
  25. package/dist/channels/origin/origin-channel.d.ts.map +1 -1
  26. package/dist/channels/origin/origin-channel.js +27 -13
  27. package/dist/channels/origin/types.d.ts +5 -1
  28. package/dist/channels/origin/types.d.ts.map +1 -1
  29. package/dist/channels/slack/dispatch.d.ts +10 -0
  30. package/dist/channels/slack/dispatch.d.ts.map +1 -1
  31. package/dist/channels/slack/dispatch.js +20 -3
  32. package/dist/channels/slack/slack-channel.d.ts +12 -5
  33. package/dist/channels/slack/slack-channel.d.ts.map +1 -1
  34. package/dist/channels/slack/slack-channel.js +59 -8
  35. package/dist/channels.d.ts +45 -0
  36. package/dist/channels.d.ts.map +1 -1
  37. package/dist/channels.js +106 -7
  38. package/dist/connections.d.ts +2 -1
  39. package/dist/connections.d.ts.map +1 -1
  40. package/dist/connections.js +2 -1
  41. package/dist/docs/404.html +2 -2
  42. package/dist/docs/assets/{app.CtuckIiL.js → app.Cr-wVbnB.js} +1 -1
  43. package/dist/docs/assets/{building-with-agents.md.CUSWxlP_.js → building-with-agents.md.D0KbSkJn.js} +2 -2
  44. package/dist/docs/assets/{building-with-agents.md.CUSWxlP_.lean.js → building-with-agents.md.D0KbSkJn.lean.js} +1 -1
  45. package/dist/docs/assets/chunks/@localSearchIndexroot.CFVQ4S17.js +1 -0
  46. package/dist/docs/assets/chunks/{VPLocalSearchBox.Bkkhnu8K.js → VPLocalSearchBox.CVQERt56.js} +1 -1
  47. package/dist/docs/assets/chunks/{theme.DhpIe0Pa.js → theme.Dnsd3XOn.js} +2 -2
  48. package/dist/docs/assets/concepts.md.B4o63Gul.js +1 -0
  49. package/dist/docs/assets/{deployment.md.MFPKqsqI.js → deployment.md.JenwuCCB.js} +4 -4
  50. package/dist/docs/assets/{deployment.md.MFPKqsqI.lean.js → deployment.md.JenwuCCB.lean.js} +1 -1
  51. package/dist/docs/assets/evals.md.C7JLjoEP.js +211 -0
  52. package/dist/docs/assets/evals.md.C7JLjoEP.lean.js +1 -0
  53. package/dist/docs/assets/guides_bitbucket.md.DZPzmUjU.js +10 -0
  54. package/dist/docs/assets/guides_bitbucket.md.DZPzmUjU.lean.js +1 -0
  55. package/dist/docs/assets/guides_cloud-agents.md.BsloyHdY.js +9 -0
  56. package/dist/docs/assets/{guides_cloud-agents.md.DS8RIjwx.lean.js → guides_cloud-agents.md.BsloyHdY.lean.js} +1 -1
  57. package/dist/docs/assets/{guides_github.md.c0gdGJ-D.js → guides_github.md.TZaTZlfz.js} +13 -3
  58. package/dist/docs/assets/{guides_github.md.c0gdGJ-D.lean.js → guides_github.md.TZaTZlfz.lean.js} +1 -1
  59. package/dist/docs/assets/guides_gitlab.md.BmqwQfdG.js +14 -0
  60. package/dist/docs/assets/guides_gitlab.md.BmqwQfdG.lean.js +1 -0
  61. package/dist/docs/assets/{guides_grokbot-agents.md.DVqdhBKb.js → guides_grokbot-agents.md.DyV-WArv.js} +1 -1
  62. package/dist/docs/assets/guides_improve.md.BGVk32bK.js +14 -0
  63. package/dist/docs/assets/guides_improve.md.BGVk32bK.lean.js +1 -0
  64. package/dist/docs/assets/{guides_slack.md.9oHPye9o.js → guides_slack.md.D4RVMM4G.js} +3 -3
  65. package/dist/docs/assets/{guides_slack.md.9oHPye9o.lean.js → guides_slack.md.D4RVMM4G.lean.js} +1 -1
  66. package/dist/docs/assets/{guides_webhooks.md.DKdA43Qm.js → guides_webhooks.md.CJK484ex.js} +2 -2
  67. package/dist/docs/assets/{hillclimbing.md.CpTGTCle.js → hillclimbing.md.BOiVo1tf.js} +1 -1
  68. package/dist/docs/assets/index.md.DD9Q2XuJ.js +5 -0
  69. package/dist/docs/assets/{index.md.BW_6tOgR.lean.js → index.md.DD9Q2XuJ.lean.js} +1 -1
  70. package/dist/docs/assets/{reference_agent-config.md.CHNpiyp4.js → reference_agent-config.md.CvoL6pof.js} +1 -1
  71. package/dist/docs/assets/{reference_channels.md.D-qTqwcq.js → reference_channels.md.CAo-iK4j.js} +2 -2
  72. package/dist/docs/assets/{reference_channels.md.D-qTqwcq.lean.js → reference_channels.md.CAo-iK4j.lean.js} +1 -1
  73. package/dist/docs/assets/{reference_cli.md.Dm67hd2D.js → reference_cli.md.Deg7849l.js} +7 -7
  74. package/dist/docs/assets/{reference_cli.md.Dm67hd2D.lean.js → reference_cli.md.Deg7849l.lean.js} +1 -1
  75. package/dist/docs/assets/{reference_connections.md.Di6jJAXF.js → reference_connections.md.BojkC6c5.js} +1 -1
  76. package/dist/docs/assets/{reference_extensions.md.CGmMLblt.js → reference_extensions.md.ZAVUyuEX.js} +3 -3
  77. package/dist/docs/assets/{reference_hooks.md.Ddt5DdgJ.js → reference_hooks.md.BlM_bOg6.js} +3 -3
  78. package/dist/docs/assets/{reference_hooks.md.Ddt5DdgJ.lean.js → reference_hooks.md.BlM_bOg6.lean.js} +1 -1
  79. package/dist/docs/assets/{reference_http-api.md.oySXBO8o.js → reference_http-api.md.BwaCo-VO.js} +1 -1
  80. package/dist/docs/assets/{reference_playground.md.4myJPxrf.js → reference_playground.md.DLnoaczX.js} +1 -1
  81. package/dist/docs/assets/{reference_playground.md.4myJPxrf.lean.js → reference_playground.md.DLnoaczX.lean.js} +1 -1
  82. package/dist/docs/assets/{reference_project-layout.md.DuBu9a96.js → reference_project-layout.md.BEU8MtQV.js} +3 -3
  83. package/dist/docs/assets/{reference_project-layout.md.DuBu9a96.lean.js → reference_project-layout.md.BEU8MtQV.lean.js} +1 -1
  84. package/dist/docs/assets/reference_sessions.md.CyXV1MUw.js +1 -0
  85. package/dist/docs/assets/{scaffolding-agents.md.em43xlY1.js → scaffolding-agents.md.Kctn3OVb.js} +1 -1
  86. package/dist/docs/assets/{skills_create-agent.md.BVoWPcan.js → skills_create-agent.md.Q3h6Je-e.js} +1 -1
  87. package/dist/docs/assets/{skills_debug.md.CDbPhHfg.js → skills_debug.md.CVjCXMFF.js} +1 -1
  88. package/dist/docs/assets/{skills_debug.md.CDbPhHfg.lean.js → skills_debug.md.CVjCXMFF.lean.js} +1 -1
  89. package/dist/docs/assets/skills_deploy.md.CWqi_ZxW.js +35 -0
  90. package/dist/docs/assets/skills_deploy.md.CWqi_ZxW.lean.js +1 -0
  91. package/dist/docs/assets/skills_evals.md.DFxYPErF.js +25 -0
  92. package/dist/docs/assets/skills_evals.md.DFxYPErF.lean.js +1 -0
  93. package/dist/docs/assets/skills_framework-map.md.BxLSOhSY.js +1 -0
  94. package/dist/docs/assets/{skills_framework-map.md.haibFyoB.lean.js → skills_framework-map.md.BxLSOhSY.lean.js} +1 -1
  95. package/dist/docs/assets/{skills_github.md.D0JahM8c.js → skills_github.md.hgFX_oKY.js} +1 -1
  96. package/dist/docs/assets/skills_index.md.DL7EHaQ-.js +1 -0
  97. package/dist/docs/assets/skills_index.md.DL7EHaQ-.lean.js +1 -0
  98. package/dist/docs/assets/{storage.md.BOHeqk2M.js → storage.md.BUrhJ-Zz.js} +4 -4
  99. package/dist/docs/assets/{storage.md.BOHeqk2M.lean.js → storage.md.BUrhJ-Zz.lean.js} +1 -1
  100. package/dist/docs/assets/troubleshooting.md.CYEAO9bM.js +1 -0
  101. package/dist/docs/building-with-agents.html +5 -5
  102. package/dist/docs/building-with-agents.md +3 -2
  103. package/dist/docs/concepts.html +5 -5
  104. package/dist/docs/concepts.md +2 -4
  105. package/dist/docs/deployment.html +7 -7
  106. package/dist/docs/deployment.md +7 -2
  107. package/dist/docs/evals.html +161 -35
  108. package/dist/docs/evals.md +612 -296
  109. package/dist/docs/guides/agent-to-agent.html +4 -4
  110. package/dist/docs/guides/bitbucket.html +36 -0
  111. package/dist/docs/guides/bitbucket.md +84 -0
  112. package/dist/docs/guides/cloud-agents.html +6 -6
  113. package/dist/docs/guides/cloud-agents.md +4 -3
  114. package/dist/docs/guides/convert-automation.html +4 -4
  115. package/dist/docs/guides/github.html +17 -7
  116. package/dist/docs/guides/github.md +33 -1
  117. package/dist/docs/guides/gitlab.html +40 -0
  118. package/dist/docs/guides/gitlab.md +92 -0
  119. package/dist/docs/guides/grokbot-agents.html +6 -6
  120. package/dist/docs/guides/grokbot-agents.md +2 -2
  121. package/dist/docs/guides/human-in-the-loop.html +4 -4
  122. package/dist/docs/guides/improve.html +40 -0
  123. package/dist/docs/guides/improve.md +91 -0
  124. package/dist/docs/guides/mcp-oauth.html +4 -4
  125. package/dist/docs/guides/opentelemetry.html +5 -5
  126. package/dist/docs/guides/slack.html +7 -7
  127. package/dist/docs/guides/slack.md +2 -1
  128. package/dist/docs/guides/webhooks.html +6 -6
  129. package/dist/docs/guides/webhooks.md +4 -2
  130. package/dist/docs/hashmap.json +1 -1
  131. package/dist/docs/hillclimbing.html +6 -6
  132. package/dist/docs/hillclimbing.md +2 -2
  133. package/dist/docs/index.html +6 -6
  134. package/dist/docs/index.md +14 -6
  135. package/dist/docs/llms-full.txt +1274 -814
  136. package/dist/docs/llms.txt +7 -5
  137. package/dist/docs/quickstart.html +4 -4
  138. package/dist/docs/reference/agent-config.html +6 -6
  139. package/dist/docs/reference/agent-config.md +5 -2
  140. package/dist/docs/reference/artifacts.html +4 -4
  141. package/dist/docs/reference/channels.html +6 -6
  142. package/dist/docs/reference/channels.md +16 -3
  143. package/dist/docs/reference/cli.html +11 -11
  144. package/dist/docs/reference/cli.md +24 -15
  145. package/dist/docs/reference/connections.html +6 -6
  146. package/dist/docs/reference/connections.md +2 -1
  147. package/dist/docs/reference/extensions.html +8 -8
  148. package/dist/docs/reference/extensions.md +2 -3
  149. package/dist/docs/reference/hooks.html +7 -7
  150. package/dist/docs/reference/hooks.md +9 -12
  151. package/dist/docs/reference/http-api.html +6 -6
  152. package/dist/docs/reference/http-api.md +2 -3
  153. package/dist/docs/reference/instructions.html +4 -4
  154. package/dist/docs/reference/playground.html +5 -5
  155. package/dist/docs/reference/playground.md +0 -4
  156. package/dist/docs/reference/project-layout.html +7 -7
  157. package/dist/docs/reference/project-layout.md +1 -8
  158. package/dist/docs/reference/prompt.html +4 -4
  159. package/dist/docs/reference/result.html +4 -4
  160. package/dist/docs/reference/schedules.html +4 -4
  161. package/dist/docs/reference/sessions.html +5 -5
  162. package/dist/docs/reference/sessions.md +1 -2
  163. package/dist/docs/reference/skills.html +4 -4
  164. package/dist/docs/reference/subagents.html +4 -4
  165. package/dist/docs/reference/tools.html +4 -4
  166. package/dist/docs/scaffolding-agents.html +5 -5
  167. package/dist/docs/scaffolding-agents.md +2 -1
  168. package/dist/docs/skills/create-agent.html +6 -6
  169. package/dist/docs/skills/create-agent.md +1 -1
  170. package/dist/docs/skills/debug.html +5 -5
  171. package/dist/docs/skills/debug.md +1 -1
  172. package/dist/docs/skills/deploy.html +61 -0
  173. package/dist/docs/skills/deploy.md +161 -0
  174. package/dist/docs/skills/evals.html +8 -8
  175. package/dist/docs/skills/evals.md +44 -6
  176. package/dist/docs/skills/framework-map.html +5 -5
  177. package/dist/docs/skills/framework-map.md +5 -4
  178. package/dist/docs/skills/github.html +6 -6
  179. package/dist/docs/skills/github.md +1 -1
  180. package/dist/docs/skills/hillclimb.html +4 -4
  181. package/dist/docs/skills/index.html +6 -6
  182. package/dist/docs/skills/index.md +1 -1
  183. package/dist/docs/skills/mcp-auth.html +4 -4
  184. package/dist/docs/skills/otel.html +4 -4
  185. package/dist/docs/skills/setup-slack.html +4 -4
  186. package/dist/docs/storage.html +8 -8
  187. package/dist/docs/storage.md +15 -24
  188. package/dist/docs/templates/agentic-owners.html +4 -4
  189. package/dist/docs/templates/agents-md.html +4 -4
  190. package/dist/docs/templates/code-wiki.html +4 -4
  191. package/dist/docs/templates/demo.html +4 -4
  192. package/dist/docs/templates/grokbot-agents.html +4 -4
  193. package/dist/docs/templates/pr-autofixer.html +4 -4
  194. package/dist/docs/templates/security-help.html +4 -4
  195. package/dist/docs/templates/security-reviewer.html +4 -4
  196. package/dist/docs/templates/triage.html +4 -4
  197. package/dist/docs/troubleshooting.html +5 -5
  198. package/dist/docs/troubleshooting.md +1 -1
  199. package/dist/extensions/improve/extension.d.ts +46 -0
  200. package/dist/extensions/improve/extension.d.ts.map +1 -0
  201. package/dist/extensions/improve/extension.js +41 -0
  202. package/dist/extensions/improve/skills/yourself.d.ts +4 -0
  203. package/dist/extensions/improve/skills/yourself.d.ts.map +1 -0
  204. package/dist/extensions/improve/skills/yourself.js +43 -0
  205. package/dist/extensions.d.ts +2 -3
  206. package/dist/extensions.d.ts.map +1 -1
  207. package/dist/extensions.js +2 -5
  208. package/dist/index.d.ts +2 -3
  209. package/dist/index.d.ts.map +1 -1
  210. package/dist/index.js +1 -2
  211. package/dist/internal/authored-alias-hooks.d.ts +5 -0
  212. package/dist/internal/authored-alias-hooks.d.ts.map +1 -1
  213. package/dist/internal/authored-alias-hooks.js +17 -0
  214. package/dist/internal/authored-loaders.d.ts +4 -0
  215. package/dist/internal/authored-loaders.d.ts.map +1 -1
  216. package/dist/internal/authored-loaders.js +21 -2
  217. package/dist/internal/builtin-tools/artifacts.d.ts.map +1 -1
  218. package/dist/internal/builtin-tools/artifacts.js +2 -3
  219. package/dist/internal/channel-route-dispatch.d.ts +13 -0
  220. package/dist/internal/channel-route-dispatch.d.ts.map +1 -0
  221. package/dist/internal/channel-route-dispatch.js +62 -0
  222. package/dist/internal/channel-state.d.ts +17 -0
  223. package/dist/internal/channel-state.d.ts.map +1 -0
  224. package/dist/internal/channel-state.js +78 -0
  225. package/dist/internal/cli-ax.d.ts +8 -2
  226. package/dist/internal/cli-ax.d.ts.map +1 -1
  227. package/dist/internal/cli-ax.js +100 -3
  228. package/dist/internal/cli-cursor.d.ts.map +1 -1
  229. package/dist/internal/cli-cursor.js +2 -0
  230. package/dist/internal/cli-deploy.d.ts.map +1 -1
  231. package/dist/internal/cli-deploy.js +38 -14
  232. package/dist/internal/cli-mcp-oauth.d.ts.map +1 -1
  233. package/dist/internal/cli-mcp-oauth.js +15 -0
  234. package/dist/internal/cli-mcp.d.ts.map +1 -1
  235. package/dist/internal/cli-mcp.js +12 -0
  236. package/dist/internal/cli-slack.d.ts.map +1 -1
  237. package/dist/internal/cli-slack.js +8 -2
  238. package/dist/internal/continuation-channel.d.ts.map +1 -1
  239. package/dist/internal/continuation-channel.js +2 -2
  240. package/dist/internal/continuation-identity.js +8 -3
  241. package/dist/internal/cursor/credentials.d.ts +8 -2
  242. package/dist/internal/cursor/credentials.d.ts.map +1 -1
  243. package/dist/internal/cursor/credentials.js +27 -5
  244. package/dist/internal/deploy-client.d.ts +27 -0
  245. package/dist/internal/deploy-client.d.ts.map +1 -1
  246. package/dist/internal/deploy-client.js +32 -0
  247. package/dist/internal/deploy-manifest.d.ts +23 -0
  248. package/dist/internal/deploy-manifest.d.ts.map +1 -1
  249. package/dist/internal/deploy-manifest.js +84 -1
  250. package/dist/internal/describe-error.d.ts +1 -0
  251. package/dist/internal/describe-error.d.ts.map +1 -1
  252. package/dist/internal/describe-error.js +25 -0
  253. package/dist/internal/discovery/agent.d.ts +1 -1
  254. package/dist/internal/discovery/agent.d.ts.map +1 -1
  255. package/dist/internal/discovery/agent.js +0 -5
  256. package/dist/internal/discovery/extension-overlay.d.ts +1 -2
  257. package/dist/internal/discovery/extension-overlay.d.ts.map +1 -1
  258. package/dist/internal/discovery/extension-overlay.js +0 -14
  259. package/dist/internal/discovery/extensions.d.ts +1 -2
  260. package/dist/internal/discovery/extensions.d.ts.map +1 -1
  261. package/dist/internal/discovery/extensions.js +4 -22
  262. package/dist/internal/discovery/info.d.ts.map +1 -1
  263. package/dist/internal/discovery/info.js +42 -24
  264. package/dist/internal/discovery/modules.js +0 -1
  265. package/dist/internal/discovery/project.d.ts.map +1 -1
  266. package/dist/internal/discovery/project.js +0 -16
  267. package/dist/internal/eval-runner.js +0 -1
  268. package/dist/internal/framework-file-storage.d.ts +4 -5
  269. package/dist/internal/framework-file-storage.d.ts.map +1 -1
  270. package/dist/internal/framework-file-storage.js +4 -5
  271. package/dist/internal/framework-storage-selection.d.ts +2 -2
  272. package/dist/internal/framework-storage-selection.js +2 -2
  273. package/dist/internal/guest-network.d.ts +4 -10
  274. package/dist/internal/guest-network.d.ts.map +1 -1
  275. package/dist/internal/guest-network.js +42 -26
  276. package/dist/internal/hosted-admission-adapter.d.ts +2 -0
  277. package/dist/internal/hosted-admission-adapter.d.ts.map +1 -1
  278. package/dist/internal/hosted-catch-protocol.d.ts +51 -0
  279. package/dist/internal/hosted-catch-protocol.d.ts.map +1 -0
  280. package/dist/internal/hosted-catch-protocol.js +103 -0
  281. package/dist/internal/hosted-catch.d.ts +40 -0
  282. package/dist/internal/hosted-catch.d.ts.map +1 -0
  283. package/dist/internal/hosted-catch.js +149 -0
  284. package/dist/internal/hosted-delivery-protocol.d.ts +41 -0
  285. package/dist/internal/hosted-delivery-protocol.d.ts.map +1 -1
  286. package/dist/internal/hosted-delivery-protocol.js +249 -0
  287. package/dist/internal/hosted-delivery.d.ts +10 -1
  288. package/dist/internal/hosted-delivery.d.ts.map +1 -1
  289. package/dist/internal/hosted-delivery.js +100 -22
  290. package/dist/internal/hosted-execution-diag.d.ts +4 -1
  291. package/dist/internal/hosted-execution-diag.d.ts.map +1 -1
  292. package/dist/internal/hosted-execution-diag.js +13 -4
  293. package/dist/internal/hosted-execution-flush.d.ts +3 -0
  294. package/dist/internal/hosted-execution-flush.d.ts.map +1 -1
  295. package/dist/internal/hosted-execution-flush.js +2 -4
  296. package/dist/internal/http-control-plane-session.d.ts +30 -0
  297. package/dist/internal/http-control-plane-session.d.ts.map +1 -0
  298. package/dist/internal/http-control-plane-session.js +83 -0
  299. package/dist/internal/init-scaffold.d.ts.map +1 -1
  300. package/dist/internal/init-scaffold.js +1 -2
  301. package/dist/internal/install-cursor-skills.d.ts +5 -2
  302. package/dist/internal/install-cursor-skills.d.ts.map +1 -1
  303. package/dist/internal/install-cursor-skills.js +25 -5
  304. package/dist/internal/legacy-command-guard.d.ts +22 -0
  305. package/dist/internal/legacy-command-guard.d.ts.map +1 -0
  306. package/dist/internal/legacy-command-guard.js +51 -0
  307. package/dist/internal/platform-timers.d.ts +7 -0
  308. package/dist/internal/platform-timers.d.ts.map +1 -1
  309. package/dist/internal/platform-timers.js +139 -0
  310. package/dist/internal/reminder-control-plane-protocol.d.ts +2 -0
  311. package/dist/internal/reminder-control-plane-protocol.d.ts.map +1 -1
  312. package/dist/internal/reminder-control-plane-protocol.js +9 -2
  313. package/dist/internal/reminder-runner.d.ts +8 -0
  314. package/dist/internal/reminder-runner.d.ts.map +1 -1
  315. package/dist/internal/reminder-runner.js +36 -9
  316. package/dist/internal/resolve-prod-target.d.ts +2 -0
  317. package/dist/internal/resolve-prod-target.d.ts.map +1 -1
  318. package/dist/internal/resolve-prod-target.js +13 -0
  319. package/dist/internal/run-client.d.ts +1 -1
  320. package/dist/internal/sdk-runner.d.ts.map +1 -1
  321. package/dist/internal/sdk-runner.js +5 -4
  322. package/dist/internal/server.d.ts.map +1 -1
  323. package/dist/internal/server.js +57 -70
  324. package/dist/internal/session-engine.d.ts +7 -41
  325. package/dist/internal/session-engine.d.ts.map +1 -1
  326. package/dist/internal/session-engine.js +110 -227
  327. package/dist/internal/storage-coordinator.d.ts +5 -19
  328. package/dist/internal/storage-coordinator.d.ts.map +1 -1
  329. package/dist/internal/storage-coordinator.js +3 -62
  330. package/dist/internal/storage-roles.d.ts +4 -9
  331. package/dist/internal/storage-roles.d.ts.map +1 -1
  332. package/dist/internal/storage-roles.js +2 -2
  333. package/dist/playground/assets/index-Bhxzrcf6.css +1 -0
  334. package/dist/playground/assets/index-CqLX5uF3.js +67 -0
  335. package/dist/playground/index.html +2 -2
  336. package/dist/storage-backends/cursor-hosted-v2.d.ts +4 -5
  337. package/dist/storage-backends/cursor-hosted-v2.d.ts.map +1 -1
  338. package/dist/storage-backends/cursor-hosted-v2.js +4 -5
  339. package/dist/storage-backends/cursor-hosted.d.ts +7 -2
  340. package/dist/storage-backends/cursor-hosted.d.ts.map +1 -1
  341. package/dist/storage-backends/cursor-hosted.js +29 -31
  342. package/dist/storage-backends/file-kv.d.ts +9 -12
  343. package/dist/storage-backends/file-kv.d.ts.map +1 -1
  344. package/dist/storage-backends/file-kv.js +11 -47
  345. package/dist/storage-protocol.d.ts +3 -11
  346. package/dist/storage-protocol.d.ts.map +1 -1
  347. package/dist/storage-protocol.js +3 -11
  348. package/dist/storage.d.ts +8 -36
  349. package/dist/storage.d.ts.map +1 -1
  350. package/dist/storage.js +8 -44
  351. package/dist/types.d.ts +53 -62
  352. package/dist/types.d.ts.map +1 -1
  353. package/docs/README.md +14 -6
  354. package/docs/building-with-agents.md +3 -2
  355. package/docs/concepts.md +2 -4
  356. package/docs/deployment.md +7 -2
  357. package/docs/evals.md +613 -297
  358. package/docs/guides/bitbucket.md +89 -0
  359. package/docs/guides/cloud-agents.md +4 -3
  360. package/docs/guides/github.md +33 -1
  361. package/docs/guides/gitlab.md +97 -0
  362. package/docs/guides/grokbot-agents.md +2 -2
  363. package/docs/guides/improve.md +96 -0
  364. package/docs/guides/slack.md +2 -1
  365. package/docs/guides/webhooks.md +4 -2
  366. package/docs/hillclimbing.md +2 -2
  367. package/docs/reference/agent-config.md +5 -2
  368. package/docs/reference/channels.md +16 -3
  369. package/docs/reference/cli.md +24 -15
  370. package/docs/reference/connections.md +2 -1
  371. package/docs/reference/extensions.md +2 -3
  372. package/docs/reference/hooks.md +9 -12
  373. package/docs/reference/http-api.md +2 -3
  374. package/docs/reference/playground.md +0 -4
  375. package/docs/reference/project-layout.md +1 -8
  376. package/docs/reference/sessions.md +1 -2
  377. package/docs/scaffolding-agents.md +2 -1
  378. package/docs/skills/index.md +2 -2
  379. package/docs/storage.md +15 -24
  380. package/docs/troubleshooting.md +1 -1
  381. package/package.json +8 -7
  382. package/skills/create-agent/SKILL.md +1 -1
  383. package/skills/debug/SKILL.md +1 -1
  384. package/skills/deploy/SKILL.md +169 -0
  385. package/skills/evals/SKILL.md +45 -8
  386. package/skills/framework-map/SKILL.md +5 -4
  387. package/skills/github/SKILL.md +1 -1
  388. package/src/bin/agent-serve.ts +27 -2
  389. package/src/channels/bitbucket/api.ts +341 -0
  390. package/src/channels/bitbucket/binding.ts +25 -0
  391. package/src/channels/bitbucket/index.ts +2 -0
  392. package/src/channels/github/github-channel.ts +8 -8
  393. package/src/channels/github/types.ts +5 -0
  394. package/src/channels/gitlab/api.ts +123 -0
  395. package/src/channels/gitlab/binding.ts +12 -0
  396. package/src/channels/gitlab/index.ts +1 -0
  397. package/src/channels/origin/origin-channel.ts +29 -13
  398. package/src/channels/origin/types.ts +5 -0
  399. package/src/channels/slack/dispatch.ts +30 -0
  400. package/src/channels/slack/slack-channel.ts +69 -7
  401. package/src/channels.ts +157 -10
  402. package/src/connections.ts +2 -1
  403. package/src/extensions/improve/extension.ts +70 -0
  404. package/src/extensions/improve/skills/yourself.ts +50 -0
  405. package/src/extensions.ts +2 -6
  406. package/src/index.ts +0 -3
  407. package/src/internal/authored-alias-hooks.ts +32 -0
  408. package/src/internal/authored-loaders.ts +26 -2
  409. package/src/internal/builtin-tools/artifacts.ts +2 -3
  410. package/src/internal/channel-route-dispatch.ts +66 -0
  411. package/src/internal/channel-state.ts +96 -0
  412. package/src/internal/cli-ax.ts +111 -3
  413. package/src/internal/cli-cursor.ts +4 -1
  414. package/src/internal/cli-deploy.ts +50 -10
  415. package/src/internal/cli-mcp-oauth.ts +18 -0
  416. package/src/internal/cli-mcp.ts +11 -0
  417. package/src/internal/cli-slack.ts +15 -2
  418. package/src/internal/continuation-channel.ts +2 -1
  419. package/src/internal/continuation-identity.ts +10 -2
  420. package/src/internal/cursor/credentials.ts +35 -7
  421. package/src/internal/deploy-client.ts +54 -0
  422. package/src/internal/deploy-manifest.ts +115 -1
  423. package/src/internal/describe-error.ts +28 -0
  424. package/src/internal/discovery/agent.ts +1 -7
  425. package/src/internal/discovery/extension-overlay.ts +0 -18
  426. package/src/internal/discovery/extensions.ts +2 -26
  427. package/src/internal/discovery/info.ts +3 -13
  428. package/src/internal/discovery/modules.ts +0 -1
  429. package/src/internal/discovery/project.ts +0 -16
  430. package/src/internal/eval-runner.ts +0 -1
  431. package/src/internal/framework-file-storage.ts +4 -5
  432. package/src/internal/framework-storage-selection.ts +2 -2
  433. package/src/internal/guest-network.ts +43 -29
  434. package/src/internal/hosted-admission-adapter.ts +2 -0
  435. package/src/internal/hosted-catch-protocol.ts +130 -0
  436. package/src/internal/hosted-catch.ts +192 -0
  437. package/src/internal/hosted-delivery-protocol.ts +387 -0
  438. package/src/internal/hosted-delivery.ts +155 -22
  439. package/src/internal/hosted-execution-diag.ts +21 -3
  440. package/src/internal/hosted-execution-flush.ts +6 -3
  441. package/src/internal/http-control-plane-session.ts +104 -0
  442. package/src/internal/init-scaffold.ts +1 -2
  443. package/src/internal/install-cursor-skills.ts +38 -5
  444. package/src/internal/legacy-command-guard.ts +59 -0
  445. package/src/internal/platform-timers.ts +191 -0
  446. package/src/internal/reminder-control-plane-protocol.ts +15 -2
  447. package/src/internal/reminder-runner.ts +60 -9
  448. package/src/internal/resolve-prod-target.ts +15 -0
  449. package/src/internal/run-client.ts +1 -1
  450. package/src/internal/sdk-runner.ts +3 -2
  451. package/src/internal/server.ts +89 -95
  452. package/src/internal/session-engine.ts +155 -285
  453. package/src/internal/storage-coordinator.ts +5 -76
  454. package/src/internal/storage-roles.ts +4 -9
  455. package/src/storage-backends/cursor-hosted-v2.ts +4 -7
  456. package/src/storage-backends/cursor-hosted.ts +40 -38
  457. package/src/storage-backends/file-kv.ts +10 -51
  458. package/src/storage-protocol.ts +3 -17
  459. package/src/storage.ts +10 -101
  460. package/src/types.ts +58 -62
  461. package/templates/demo/README.md +10 -6
  462. package/templates/demo/agent/channels/github.ts +2 -0
  463. package/templates/demo/agent/channels/queue.ts +6 -2
  464. package/templates/demo/agent/lib/repos.ts +5 -0
  465. package/templates/demo/init.json +25 -0
  466. package/dist/ab.d.ts +0 -209
  467. package/dist/ab.d.ts.map +0 -1
  468. package/dist/ab.js +0 -246
  469. package/dist/docs/ab.html +0 -80
  470. package/dist/docs/ab.md +0 -332
  471. package/dist/docs/assets/ab.md.mlVgqvSk.js +0 -54
  472. package/dist/docs/assets/ab.md.mlVgqvSk.lean.js +0 -1
  473. package/dist/docs/assets/chunks/@localSearchIndexroot.DXXZxiMv.js +0 -1
  474. package/dist/docs/assets/concepts.md.DgEcZOfT.js +0 -1
  475. package/dist/docs/assets/evals.md.CbMoebP1.js +0 -85
  476. package/dist/docs/assets/evals.md.CbMoebP1.lean.js +0 -1
  477. package/dist/docs/assets/guides_cloud-agents.md.DS8RIjwx.js +0 -9
  478. package/dist/docs/assets/index.md.BW_6tOgR.js +0 -5
  479. package/dist/docs/assets/reference_sessions.md.CueyOHSL.js +0 -1
  480. package/dist/docs/assets/skills_ab.md.CsFNatVx.js +0 -26
  481. package/dist/docs/assets/skills_ab.md.CsFNatVx.lean.js +0 -1
  482. package/dist/docs/assets/skills_evals.md.723kpUmA.js +0 -25
  483. package/dist/docs/assets/skills_evals.md.723kpUmA.lean.js +0 -1
  484. package/dist/docs/assets/skills_framework-map.md.haibFyoB.js +0 -1
  485. package/dist/docs/assets/skills_index.md.DKwIxzGg.js +0 -1
  486. package/dist/docs/assets/skills_index.md.DKwIxzGg.lean.js +0 -1
  487. package/dist/docs/assets/troubleshooting.md.Cus_YZga.js +0 -1
  488. package/dist/docs/skills/ab.html +0 -52
  489. package/dist/docs/skills/ab.md +0 -50
  490. package/dist/internal/ab-collector.d.ts +0 -44
  491. package/dist/internal/ab-collector.d.ts.map +0 -1
  492. package/dist/internal/ab-collector.js +0 -142
  493. package/dist/internal/ab-fold.d.ts +0 -36
  494. package/dist/internal/ab-fold.d.ts.map +0 -1
  495. package/dist/internal/ab-fold.js +0 -175
  496. package/dist/internal/ab-snapshot.d.ts +0 -68
  497. package/dist/internal/ab-snapshot.d.ts.map +0 -1
  498. package/dist/internal/ab-snapshot.js +0 -208
  499. package/dist/internal/discovery/ab.d.ts +0 -9
  500. package/dist/internal/discovery/ab.d.ts.map +0 -1
  501. package/dist/internal/discovery/ab.js +0 -113
  502. package/dist/playground/assets/index-Bq2HpEQB.js +0 -67
  503. package/dist/playground/assets/index-CZKKNlmb.css +0 -1
  504. package/docs/ab.md +0 -337
  505. package/skills/ab/SKILL.md +0 -58
  506. package/src/ab.ts +0 -430
  507. package/src/internal/ab-collector.ts +0 -200
  508. package/src/internal/ab-fold.ts +0 -232
  509. package/src/internal/ab-snapshot.ts +0 -331
  510. package/src/internal/discovery/ab.ts +0 -131
  511. /package/dist/docs/assets/{concepts.md.DgEcZOfT.lean.js → concepts.md.B4o63Gul.lean.js} +0 -0
  512. /package/dist/docs/assets/{guides_grokbot-agents.md.DVqdhBKb.lean.js → guides_grokbot-agents.md.DyV-WArv.lean.js} +0 -0
  513. /package/dist/docs/assets/{guides_webhooks.md.DKdA43Qm.lean.js → guides_webhooks.md.CJK484ex.lean.js} +0 -0
  514. /package/dist/docs/assets/{hillclimbing.md.CpTGTCle.lean.js → hillclimbing.md.BOiVo1tf.lean.js} +0 -0
  515. /package/dist/docs/assets/{reference_agent-config.md.CHNpiyp4.lean.js → reference_agent-config.md.CvoL6pof.lean.js} +0 -0
  516. /package/dist/docs/assets/{reference_connections.md.Di6jJAXF.lean.js → reference_connections.md.BojkC6c5.lean.js} +0 -0
  517. /package/dist/docs/assets/{reference_extensions.md.CGmMLblt.lean.js → reference_extensions.md.ZAVUyuEX.lean.js} +0 -0
  518. /package/dist/docs/assets/{reference_http-api.md.oySXBO8o.lean.js → reference_http-api.md.BwaCo-VO.lean.js} +0 -0
  519. /package/dist/docs/assets/{reference_sessions.md.CueyOHSL.lean.js → reference_sessions.md.CyXV1MUw.lean.js} +0 -0
  520. /package/dist/docs/assets/{scaffolding-agents.md.em43xlY1.lean.js → scaffolding-agents.md.Kctn3OVb.lean.js} +0 -0
  521. /package/dist/docs/assets/{skills_create-agent.md.BVoWPcan.lean.js → skills_create-agent.md.Q3h6Je-e.lean.js} +0 -0
  522. /package/dist/docs/assets/{skills_github.md.D0JahM8c.lean.js → skills_github.md.hgFX_oKY.lean.js} +0 -0
  523. /package/dist/docs/assets/{troubleshooting.md.Cus_YZga.lean.js → troubleshooting.md.CYEAO9bM.lean.js} +0 -0
@@ -0,0 +1,89 @@
1
+ ---
2
+ title: "Bitbucket"
3
+ description: "Wake your agent from pull requests, comments, and pushes on Bitbucket Cloud or Bitbucket Data Center."
4
+ ---
5
+
6
+ # Bitbucket agents
7
+
8
+ Use `bitbucketChannel()` for Bitbucket Cloud and Bitbucket Data Center. The
9
+ channel detects the source from each signed payload and normalizes Data Center
10
+ events to the Bitbucket Cloud event vocabulary.
11
+
12
+ ## Define the channel
13
+
14
+ Author `agent/channels/bitbucket.ts`:
15
+
16
+ ```ts
17
+ import { bitbucketChannel } from "@cursor/july/channels/bitbucket";
18
+
19
+ export default bitbucketChannel({});
20
+ ```
21
+
22
+ Without `onPullRequest`, new pull requests start turns. Data Center updates
23
+ also start turns when the source branch has new commits. Comments and pushes
24
+ are opt-in through `onPullRequestComment` and `onPush`. Use `onEvent` for
25
+ other event types. Set `webhookEvents` when managed event delivery must
26
+ subscribe to an event that only `onEvent` handles.
27
+
28
+ Filter comment hooks by author before starting a turn. This prevents comments
29
+ posted by the agent from triggering another turn.
30
+
31
+ `ctx.bitbucket.api` can read pull requests, post comments, and create build
32
+ statuses. See the [Channels reference](../reference/channels.md) for hook
33
+ return values and session behavior.
34
+
35
+ ## Connect Bitbucket
36
+
37
+ Set a repository hook secret and API token:
38
+
39
+ ```bash
40
+ BITBUCKET_WEBHOOK_SECRET=...
41
+ BITBUCKET_TOKEN=...
42
+ ```
43
+
44
+ Add a repository webhook for
45
+ `https://<your-host>/<slug>/v1/channels/bitbucket`. Use the same secret on
46
+ both sides. The channel verifies the `X-Hub-Signature` HMAC before it parses
47
+ the payload.
48
+
49
+ Bitbucket Cloud uses its 2.0 API by default. Data Center also needs its REST
50
+ API base:
51
+
52
+ ```ts
53
+ export default bitbucketChannel({
54
+ apiBaseUrl: "https://bitbucket.example.com/rest/api/1.0",
55
+ repos: ["PLATFORM/api"],
56
+ });
57
+ ```
58
+
59
+ You can set `BITBUCKET_API_BASE_URL` instead.
60
+
61
+ ## Test locally
62
+
63
+ Start the agent, then replay a pull request you can read:
64
+
65
+ ```bash
66
+ agent-sdk dev
67
+ agent-sdk bitbucket replay \
68
+ https://bitbucket.example.com/projects/PLATFORM/repos/api/pull-requests/42
69
+ ```
70
+
71
+ Replay supports Bitbucket Cloud and Data Center URLs. `BITBUCKET_TOKEN` needs
72
+ pull request read access. The command reads the pull request, creates a payload
73
+ in the matching dialect, and sends it through the same channel route. Use
74
+ `--events '*'` to replay the supported events declared by the channel. Use
75
+ `--dry-run --out fixtures/bitbucket` to save fixtures.
76
+
77
+ ```bash
78
+ agent-sdk bitbucket events --dir .
79
+ agent-sdk bitbucket forward --dir .
80
+ ```
81
+
82
+ `forward` prints the repository-hook and HTTPS tunnel setup for live
83
+ deliveries.
84
+
85
+ ## Related
86
+
87
+ - [Channels reference](../reference/channels.md)
88
+ - [Webhooks and custom channels](./webhooks.md)
89
+ - [Evals](../evals.md)
@@ -34,9 +34,10 @@ export default cursorCloudAgents({
34
34
  });
35
35
  ```
36
36
 
37
- Launches run under the host's signed-in account (`agent-sdk login` or
38
- `CURSOR_API_KEY`) and spend its cloud-agent budget. Name the
39
- repositories the agent may target, and keep approval on when you can't.
37
+ Launches run under the host's signed-in account (`agent-sdk login`,
38
+ `CURSOR_API_KEY`, or `CURSOR_SERVICE_ACCOUNT_KEY`) and spend its
39
+ cloud-agent budget. Name the repositories the agent may target, and
40
+ keep approval on when you can't.
40
41
 
41
42
  Mount it on an agent that runs on the local runtime; that is where
42
43
  launches park for approval. On the cloud runtime approvals don't
@@ -18,7 +18,8 @@ The companion skill for coding agents is
18
18
  Connect GitHub in Cursor for the repositories you care about (Settings or
19
19
  [cursor.com/dashboard](https://cursor.com/dashboard)). That gives your
20
20
  account access and lets Cursor receive the repo's webhooks. Sign the host
21
- in (`agent-sdk login` or `CURSOR_API_KEY`), then opt the channel into the
21
+ in (`agent-sdk login`, `CURSOR_API_KEY`, or
22
+ `CURSOR_SERVICE_ACCOUNT_KEY`), then opt the channel into the
22
23
  Cursor account connection:
23
24
 
24
25
  ```ts
@@ -78,6 +79,37 @@ snapshot in the wake.
78
79
  This is the preferred production path: no public URL, no repo admin
79
80
  webhook, and no inbound network for GitHub deliveries.
80
81
 
82
+ ## Connect GitHub Enterprise Server
83
+
84
+ GitHub Enterprise Server uses the same `githubChannel()` hooks and normalized
85
+ events. Connect it through the direct webhook route. Set the REST API base and
86
+ credentials for your server:
87
+
88
+ ```ts
89
+ export default githubChannel({
90
+ api: {
91
+ apiBaseUrl: "https://github.example.com/api/v3",
92
+ },
93
+ credentials: {
94
+ token: () => process.env.GITHUB_TOKEN,
95
+ webhookSecret: () => process.env.GITHUB_WEBHOOK_SECRET,
96
+ },
97
+ onPullRequest: (ctx, pr) =>
98
+ pr.action === "opened" ? { auth: defaultGitHubAuth(ctx) } : null,
99
+ });
100
+ ```
101
+
102
+ Add a repository webhook for
103
+ `https://<your-host>/<slug>/v1/channels/github`. Use the same webhook secret
104
+ on the server and in `GITHUB_WEBHOOK_SECRET`. The channel verifies
105
+ `X-Hub-Signature-256` before it parses the payload.
106
+
107
+ Cursor account event pull, `github replay`, and `github forward` target
108
+ GitHub.com. Test Enterprise Server integrations by posting saved webhook
109
+ fixtures to a local `--dev` server. Leave `GITHUB_WEBHOOK_SECRET` unset for
110
+ this local test so the channel admits unsigned loopback deliveries. Use a real
111
+ delivery from your server so the fixture matches its version.
112
+
81
113
  ## Define the channel
82
114
 
83
115
  Author `agent/channels/github.ts` with `githubChannel()` from
@@ -0,0 +1,97 @@
1
+ ---
2
+ title: "GitLab"
3
+ description: "Wake your agent from GitLab merge requests, notes, pipelines, and pushes on GitLab.com or self-managed GitLab."
4
+ ---
5
+
6
+ # GitLab agents
7
+
8
+ Use `gitlabChannel()` for GitLab.com and self-managed GitLab. The channel
9
+ verifies project hooks, normalizes their payloads, and gives each hook a
10
+ project-bound `ctx.gitlab` API client.
11
+
12
+ ## Define the channel
13
+
14
+ Author `agent/channels/gitlab.ts`:
15
+
16
+ ```ts
17
+ import { gitlabChannel } from "@cursor/july/channels/gitlab";
18
+
19
+ export default gitlabChannel({});
20
+ ```
21
+
22
+ Without `onMergeRequest`, new and reopened merge requests start turns.
23
+ Updates start turns only when they include new commits. Notes, pushes, and
24
+ pipelines are opt-in through `onNote`, `onPush`, and `onPipeline`.
25
+ Use `onEvent` for other GitLab event types. Set `webhookEvents` when managed
26
+ event delivery must subscribe to an event that only `onEvent` handles.
27
+
28
+ Filter note hooks by author before starting a turn. This prevents comments
29
+ posted by the agent from triggering another turn.
30
+
31
+ `ctx.gitlab` can call the project REST API and create commit statuses. See the
32
+ [Channels reference](../reference/channels.md) for hook return values and
33
+ session behavior.
34
+
35
+ ## Connect GitLab
36
+
37
+ On Cursor-managed hosting, use the signed-in Cursor account:
38
+
39
+ ```ts
40
+ export default gitlabChannel({
41
+ cursorAccount: {
42
+ projects: ["acme/platform"],
43
+ },
44
+ });
45
+ ```
46
+
47
+ For direct webhooks, set a project hook secret and API token:
48
+
49
+ ```bash
50
+ GITLAB_WEBHOOK_SECRET=...
51
+ GITLAB_TOKEN=...
52
+ ```
53
+
54
+ Add a project webhook for
55
+ `https://<your-host>/<slug>/v1/channels/gitlab`. Use the same value for the
56
+ GitLab secret token and `GITLAB_WEBHOOK_SECRET`. The channel checks
57
+ `X-Gitlab-Token` before it parses the payload.
58
+
59
+ Self-managed GitLab also needs its REST API base:
60
+
61
+ ```ts
62
+ export default gitlabChannel({
63
+ apiBaseUrl: "https://gitlab.example.com/api/v4",
64
+ projects: ["acme/platform"],
65
+ });
66
+ ```
67
+
68
+ You can set `GITLAB_API_BASE_URL` instead.
69
+
70
+ ## Test locally
71
+
72
+ Start the agent, then replay a merge request you can read:
73
+
74
+ ```bash
75
+ agent-sdk dev
76
+ agent-sdk gitlab replay \
77
+ https://gitlab.example.com/acme/platform/-/merge_requests/42
78
+ ```
79
+
80
+ `GITLAB_TOKEN` needs API read access. Replay reads the merge request,
81
+ creates GitLab-shaped payloads, and sends them through the same channel route.
82
+ Use `--events '*'` to replay the supported events declared by the channel.
83
+ Use `--dry-run --out fixtures/gitlab` to save fixtures.
84
+
85
+ ```bash
86
+ agent-sdk gitlab events --dir .
87
+ agent-sdk gitlab forward --dir .
88
+ ```
89
+
90
+ GitLab has no local webhook relay. `forward` prints the project-hook and HTTPS
91
+ tunnel setup for live deliveries.
92
+
93
+ ## Related
94
+
95
+ - [Channels reference](../reference/channels.md)
96
+ - [Webhooks and custom channels](./webhooks.md)
97
+ - [Evals](../evals.md)
@@ -32,8 +32,8 @@ export default cursorGrokBotAgents({
32
32
 
33
33
  `agents` is the allowlist. List every Grok Bot the model may talk to;
34
34
  a name outside the list is refused. Calls run under the host's
35
- signed-in account (`agent-sdk login` or `CURSOR_API_KEY`). Keep
36
- approval on when you can't.
35
+ signed-in account (`agent-sdk login`, `CURSOR_API_KEY`, or
36
+ `CURSOR_SERVICE_ACCOUNT_KEY`). Keep approval on when you can't.
37
37
 
38
38
  Start from the [Grok Bot agents template](../templates/grokbot-agents.md)
39
39
  when you want a project that already mounts this.
@@ -0,0 +1,96 @@
1
+ ---
2
+ title: "Self-improvement"
3
+ description: "Mount improve so an agent can change its own instructions, skills, and tools through a pull request a one-off cloud agent opens."
4
+ ---
5
+
6
+ # Self-improvement
7
+
8
+ The `improve` extension lets an agent change how it behaves by changing
9
+ its own source. Someone asks it to answer more briefly, to stop reaching
10
+ for a tool, or to learn a procedure. The agent writes a brief, a one-off
11
+ Cursor cloud agent makes the change on a branch and opens a pull
12
+ request, and the agent reports that pull request. Nothing changes until
13
+ a person reviews it and deploys.
14
+
15
+ The tree the agent runs from is never edited; nothing changed there
16
+ survives a deploy. The pull request is the only path.
17
+
18
+ ## Mount it
19
+
20
+ The extension ships with `@cursor/july`. It relies on a
21
+ [`cursor-cloud-agents`](./cloud-agents.md) mount beside it, with the
22
+ agent's own repository among its `cloud.repos`.
23
+
24
+ ```ts
25
+ // agent/extensions/cloud.ts
26
+ import cursorCloudAgents from "@cursor/july/extensions/cursor-cloud-agents";
27
+
28
+ export default cursorCloudAgents({
29
+ cloud: {
30
+ repos: [{ url: "https://github.com/acme/agents", startingRef: "main" }],
31
+ },
32
+ });
33
+ ```
34
+
35
+ ```ts
36
+ // agent/extensions/improve.ts
37
+ import improve from "@cursor/july/extensions/improve";
38
+
39
+ export default improve({
40
+ repo: "https://github.com/acme/agents",
41
+ path: "agents/concierge",
42
+ });
43
+ ```
44
+
45
+ `repo` is the repository that holds the agent's source and `path` is
46
+ the agent's directory in it, the same values `agent-sdk deploy --repo`
47
+ and `--path` take. Mount it as `improve`: the skill then reads
48
+ `improve__yourself`, which is what a person asks for.
49
+
50
+ An agent on the
51
+ [cloud runtime](../reference/agent-config.md#choose-a-runtime) already
52
+ runs each turn on a VM with the repository checked out. It mounts
53
+ `improve` alone, and the skill has it branch in that checkout instead of
54
+ launching a second agent.
55
+
56
+ ## What the agent does
57
+
58
+ With the extension mounted, "change how you work" becomes a procedure:
59
+
60
+ - **Locate the change.** The skill maps the ask onto the Agent SDK tree:
61
+ instructions for the always-on prompt, a skill for a procedure, a tool
62
+ for behavior that must be right every time, `agent.ts` for the model.
63
+ - **Brief a cloud agent.** The agent writes a self-contained brief: who
64
+ is asking and why, the repository, ref, and path, the files it expects
65
+ to change, your notes about the tree, and the rules. Follow the
66
+ repository's conventions, keep the diff to the change, run the
67
+ repository's checks, open a pull request against the deployed ref,
68
+ never merge.
69
+ - **Follow up and report.** It gives the person the cloud agent's URL,
70
+ checks on the run, reads the pull request before repeating its claims,
71
+ and reports the pull request, not the delegation. It says the change
72
+ takes effect at the next deploy, never that it has changed already.
73
+
74
+ Ask it directly. "Improve yourself: stop opening with a summary" is
75
+ enough.
76
+
77
+ ## Configure it
78
+
79
+ | Option | What it controls |
80
+ | --- | --- |
81
+ | `repo` | The repository holding the agent's source. One of the cloud mount's `cloud.repos`. |
82
+ | `path` | The agent's directory in the repository, as `agent-sdk deploy --path` names it. |
83
+ | `ref` | The ref the deployment tracks. Branches start there and pull requests target it. Defaults to `main`. |
84
+ | `notes` | What a coding agent must know about this tree beyond the standard layout: a house skill format, a manifest that forces a reinstall, a pull request convention. Copied into every brief. |
85
+ | `deploy` | Who deploys a merged change and when it is live. Defaults to "It takes effect at the next deploy." |
86
+
87
+ ## What's next
88
+
89
+ Continue with these pages:
90
+
91
+ - [Cursor cloud agents](./cloud-agents.md): the mount that does the
92
+ coding, and how to gate its launches
93
+ - [Extensions](../reference/extensions.md): how mounts, namespaces, and
94
+ overrides work
95
+ - [Deployment](../deployment.md): how a merged change reaches the
96
+ running agent
@@ -148,7 +148,8 @@ agent-sdk slack create --dir .
148
148
  agent-sdk slack create --dir . --prod
149
149
  ```
150
150
 
151
- Sign in first (`agent-sdk login` or `CURSOR_API_KEY`). Finish **Add
151
+ Sign in first (`agent-sdk login` or `CURSOR_API_KEY`). A team
152
+ service-account key cannot create Slack apps. Finish **Add
152
153
  Slack to this agent** as the same Cursor account. Then run
153
154
  `agent-sdk slack doctor --prefix MY_AGENT` and serve:
154
155
 
@@ -9,7 +9,8 @@ A custom channel gives the agent its own HTTP surface. You get routes
9
9
  with validated payloads, sessions keyed to something in your domain (a
10
10
  thread, a ticket, a PR), and replies delivered back to the caller. The
11
11
  [Slack](./slack.md) and [GitHub](./github.md) packs build on this
12
- mechanism. This page is the mechanism itself.
12
+ mechanism. The [GitLab](./gitlab.md) and [Bitbucket](./bitbucket.md) packs
13
+ use it too. This page is the mechanism itself.
13
14
 
14
15
  ## What you already have
15
16
 
@@ -463,6 +464,7 @@ from any PR you can read. See the [GitHub guide](./github.md).
463
464
  Continue with these pages:
464
465
 
465
466
  - [Channels reference](../reference/channels.md): the full authoring API
466
- - [GitHub](./github.md) and [Slack](./slack.md): the packaged channels
467
+ - [GitHub](./github.md), [GitLab](./gitlab.md),
468
+ [Bitbucket](./bitbucket.md), and [Slack](./slack.md): the packaged channels
467
469
  - [Sessions and streaming](../reference/sessions.md): events your
468
470
  channel can subscribe to
@@ -72,9 +72,9 @@ Pin the input first. A moving fixture is noise. For GitHub agents, use `agent-sd
72
72
 
73
73
  ## How do I lock a hillclimb improvement with an eval?
74
74
 
75
- Every kept change needs an eval that would have failed before the change: a tool-choice gate, an `action.result` count bound, or an output-shape check. Run `agent-sdk eval --dir . --json` between rounds. Never weaken an existing gate to pass the round.
75
+ Every kept change needs an eval that would have failed before the change: a tool-choice gate, a `maxToolCalls` bound, or an output-shape check. Run `agent-sdk eval --dir . --json` between rounds. Never weaken an existing gate to pass the round.
76
76
 
77
- Details live in [Evals](./evals.md). The evals skill will author the case with you.
77
+ Details live in [Keep improvements with regression evals](./evals.md#keep-improvements-with-regression-evals). The evals skill will author the case with you.
78
78
 
79
79
  ## What habits help hillclimbing stay reliable?
80
80
 
@@ -240,8 +240,11 @@ console.log(`listening on ${handle.url}`);
240
240
  Host settings match the documented [CLI](./cli.md) `serve` flags.
241
241
  `serve()` also accepts `discovery` (project-loading options) and
242
242
  `mode: "single" | "multi"`. The Cursor credential resolves in one order
243
- everywhere: explicit `apiKey`, then `CURSOR_API_KEY`, then the key
244
- stored by `agent-sdk login`.
243
+ everywhere: explicit `apiKey`, then `CURSOR_API_KEY`, then
244
+ `CURSOR_API_KEY_FILE` (hosted default `/run/cursor/secrets/CURSOR_API_KEY`
245
+ when unset), then `CURSOR_SERVICE_ACCOUNT_KEY`, then the key stored by
246
+ `agent-sdk login`. On a host that has both the service-account key and a
247
+ bind file, the file principal wins.
245
248
 
246
249
  ## What's next
247
250
 
@@ -8,7 +8,8 @@ description: "The authoring reference for defineChannel, the built-in HTTP chann
8
8
  A channel is the surface an agent lives on. The built-in HTTP session
9
9
  channel is always mounted. Custom channels declare their own routes
10
10
  under `/v1/channels/<id>`. The Slack and GitHub packs are prebuilt
11
- channels with platform transports. This page is the authoring reference;
11
+ channels with platform transports. GitLab and Bitbucket packs cover their
12
+ hosted and self-managed products. This page is the authoring reference;
12
13
  for the walkthrough, see the [Webhooks guide](../guides/webhooks.md).
13
14
 
14
15
  ## Built-in HTTP channel
@@ -134,7 +135,7 @@ Handlers receive the Fetch `Request` and an args object:
134
135
  `workspaceFiles`, `workspaceDir`, `cloud` (attach cloud repos for this
135
136
  session), `auth` (defaults to the request principal), `state` (starting
136
137
  channel state for new sessions), `title` (session display title), and
137
- `purpose` (`"eval"` skips sticky A/B enrollment).
138
+ `purpose` (`"eval"` marks the session as regression traffic).
138
139
 
139
140
  ## Events
140
141
 
@@ -215,7 +216,19 @@ model turn), `{ task }` (host work), or `null`, and CLI tooling for
215
216
  replay and live forwarding. Author `agent/channels/github.ts` with
216
217
  `githubChannel()`. Opt-in `progress.commitStatus` and `progress.banner`
217
218
  converge a merge-box check and sticky PR comment from default stream
218
- events. Guide: [GitHub](../guides/github.md).
219
+ events. Supports GitHub.com and GitHub Enterprise Server. Guide:
220
+ [GitHub](../guides/github.md).
221
+
222
+ **GitLab** (`@cursor/july/channels/gitlab`): verified project hooks for
223
+ merge requests, notes, pipelines, pushes, and custom event types. Supports
224
+ GitLab.com and self-managed GitLab. Author `agent/channels/gitlab.ts` with
225
+ `gitlabChannel()`. Guide: [GitLab](../guides/gitlab.md).
226
+
227
+ **Bitbucket** (`@cursor/july/channels/bitbucket`): verified repository hooks
228
+ for pull requests, comments, pushes, and custom event types. Supports
229
+ Bitbucket Cloud and Bitbucket Data Center through one normalized hook API.
230
+ Author `agent/channels/bitbucket.ts` with `bitbucketChannel()`. Guide:
231
+ [Bitbucket](../guides/bitbucket.md).
219
232
 
220
233
  **Deployments** (`@cursor/july/channels/deployments`): pull deploy
221
234
  events. Declare `events` and handle each one in `onEvent`. Each event
@@ -109,7 +109,7 @@ the agent project. Slugged mounts get a subdirectory named for the slug.
109
109
  | `--host` | Bind this host. The default is loopback-only `127.0.0.1`. |
110
110
  | `--dev` | Disable automatic schedule and reminder firing, admit unsigned loopback GitHub deliveries, and widen playground session access on loopback. |
111
111
  | `--mode` | Use `multi` for slugged routes and an index, or `single` for one agent at the unslugged `/v1/*`. The default is `multi`. |
112
- | `--api-key` | Use this Cursor API key. The command falls back to `CURSOR_API_KEY`, then the stored login. |
112
+ | `--api-key` | Use this Cursor API key. Otherwise the command uses `CURSOR_API_KEY`, then `CURSOR_API_KEY_FILE` (hosted default `/run/cursor/secrets/CURSOR_API_KEY` when unset), then `CURSOR_SERVICE_ACCOUNT_KEY`, then the stored login. |
113
113
  | `--state-root` | Store sessions, streams, workspaces, and channel state here. Keep durable production state outside the agent repository. |
114
114
  | `--bearer-token` | Require this bearer token on routes without authored auth. Mutually exclusive with `--allow-anonymous`. |
115
115
  | `--allow-anonymous` | Admit every caller as one `anonymous` principal. Use only behind a trusted network boundary. |
@@ -366,8 +366,10 @@ agent-sdk eval status <evalId> --prod --slug pr-approver
366
366
  agent-sdk eval cancel <evalId> --prod --slug pr-approver
367
367
  ```
368
368
 
369
- `eval` runs `evals/**/*.eval.{ts,js}` on an ephemeral server or against
370
- `--url`. Select one or more exact case IDs, file ID prefixes, or tags.
369
+ `eval` runs `evals/**/*.eval.{ts,js}` on an ephemeral server. With
370
+ `--prod` or `--url`, the target server runs its own evals as a
371
+ server-side batch. Select one or more exact case IDs, file ID prefixes,
372
+ or tags.
371
373
  Omit selectors to run all cases. Repeated `--tag` flags use OR matching.
372
374
 
373
375
  An eval run requires `evals/evals.config.{ts,js}` with `maxConcurrency`
@@ -378,13 +380,13 @@ between 1 and 200. Timeout priority is the case's `timeoutMs`, the CLI's
378
380
  | --- | --- |
379
381
  | `--list` | Print discovered cases without running. `--list --json` prints them as an array. |
380
382
  | `--tag <tag>` | Run cases with this tag. Repeated flags use OR matching. |
381
- | `--json` | Print `{ ok, passed, failed, results }`. |
383
+ | `--json` | Print `{ ok, passed, failed, scored, skipped, strict, results }`; see [Run evals in CI](../evals.md#run-evals-in-ci) for the result shape. |
382
384
  | `--verbose` | Stream `t.log` lines and reply snippets. |
383
385
  | `--no-stream` | Hide live progress on stderr. |
384
386
  | `--strict` | Exit `1` when a scored case misses a soft threshold. |
385
387
  | `--max-concurrency <n>` | Override `maxConcurrency` from `evals.config.ts`. |
386
388
  | `--junit <path>` | Write JUnit XML for CI annotations. |
387
- | `--artifacts <dir>` | Write run artifacts here. The default is a timestamped directory under `<state-root>/evals/`. |
389
+ | `--artifacts <dir>` | Write run artifacts here. The default is a timestamped directory under `evals/` in the project state directory (not affected by `--state-root`). |
388
390
  | `--no-artifacts` | Skip run artifacts. |
389
391
  | `--skip-report` | Ignore reporters from `evals.config.ts` and eval files. |
390
392
  | `--out <path>` | Also write the full results JSON to this path (also for `eval status <evalId>`). |
@@ -557,10 +559,14 @@ runtime, and Cursor account MCP connections. `--key-name` changes the
557
559
  name of a browser-minted key. `login --api-key` validates and stores a
558
560
  key you already created.
559
561
 
560
- `whoami` shows which credential is active and why. `CURSOR_API_KEY`
561
- takes precedence over the stored login. `logout` removes the local
562
- credential file but doesn't revoke the API key. Revoke it in the Cursor
563
- dashboard when it should stop working.
562
+ `whoami` shows which credential is active and why. An explicit key
563
+ wins, then `CURSOR_API_KEY`, then `CURSOR_API_KEY_FILE` (hosted default
564
+ `/run/cursor/secrets/CURSOR_API_KEY` when unset), then
565
+ `CURSOR_SERVICE_ACCOUNT_KEY`, then the stored login. A host that has
566
+ both the service-account key and a bind file authenticates as the file
567
+ principal. `logout` removes the local credential file but doesn't
568
+ revoke the API key. Revoke it in the Cursor dashboard when it should
569
+ stop working.
564
570
 
565
571
  Login and account RPCs honor `CURSOR_API_BASE_URL`. The SDK harness
566
572
  honors `CURSOR_BACKEND_URL`. Set both to the same URL, or keys minted
@@ -598,9 +604,9 @@ agent-sdk deploy [--dir <path>] [--slug <slug> | --all] [--team <id>]
598
604
  [--no-wait] [--json]
599
605
  ```
600
606
 
601
- Managed hosting requires team-admin permission and the team's
602
- cloud-agent entitlement. `--team` defaults to the signed-in account's
603
- team.
607
+ Managed hosting requires team membership and the team's cloud-agent
608
+ entitlement. A team service-account API key with agent access can
609
+ deploy. `--team` defaults to the signed-in account's team.
604
610
 
605
611
  For a single project, the slug defaults to a normalized version of the
606
612
  directory name. Deployment slugs contain lowercase letters, digits, `_`,
@@ -843,8 +849,9 @@ checklist. It doesn't change files.
843
849
  `slack create` opens the signed-in Cursor dashboard wizard. Finish Slack
844
850
  consent and the bot name there. The CLI writes the token pair into
845
851
  `<dir>/.env.local` and runs `doctor`. It requires a signed-in host
846
- (`agent-sdk login` or `CURSOR_API_KEY`). `--prod` provisions the
847
- production app; the default is the development app. `--name` / `--icon`
852
+ (`agent-sdk login` or `CURSOR_API_KEY`). A team service-account key
853
+ cannot create Slack apps. `--prod` provisions the production app; the
854
+ default is the development app. `--name` / `--icon`
848
855
  / `--channel-posts` prefill the wizard. A second create for the same
849
856
  slug and env overwrites the live Slack app. If Slack needs a workspace
850
857
  admin's approval, the wizard waits; keep the CLI running, open Slack's
@@ -957,7 +964,9 @@ These environment variables affect the CLI and its channel packs.
957
964
 
958
965
  | Variable | Meaning |
959
966
  | --- | --- |
960
- | `CURSOR_API_KEY` | Cursor credential. It takes precedence over the stored login. |
967
+ | `CURSOR_API_KEY` | Cursor credential. It takes precedence over `CURSOR_API_KEY_FILE`, `CURSOR_SERVICE_ACCOUNT_KEY`, and the stored login. |
968
+ | `CURSOR_API_KEY_FILE` | Path to a Cursor credential file. Used when `CURSOR_API_KEY` is unset. When this variable is unset, the hosted default `/run/cursor/secrets/CURSOR_API_KEY` is tried. A present file takes precedence over `CURSOR_SERVICE_ACCOUNT_KEY` and the stored login. |
969
+ | `CURSOR_SERVICE_ACCOUNT_KEY` | Team service-account credential. Used when `CURSOR_API_KEY` and `CURSOR_API_KEY_FILE` (including the hosted default path) are unset. It takes precedence over the stored login. |
961
970
  | `CURSOR_API_BASE_URL` | Backend used by login, account, deployment, and event-relay RPCs. |
962
971
  | `CURSOR_BACKEND_URL` | Backend used by the Cursor SDK harness. |
963
972
  | `AGENT_SERVE_CONFIG_DIR` | Directory for stored credentials and update-check state. Defaults to the CLI config directory under `~/.config`. |
@@ -224,7 +224,8 @@ Name the file `account.ts`. `cursor.ts` collides with the IDE `cursor`
224
224
  MCP namespace. `advertiseTools: true` puts connector tools on local
225
225
  turns by name. Without it they sit behind harness meta-tools.
226
226
 
227
- The host must be signed in (`agent-sdk login` or `CURSOR_API_KEY`).
227
+ The host must be signed in (`agent-sdk login`, `CURSOR_API_KEY`, or
228
+ `CURSOR_SERVICE_ACCOUNT_KEY`).
228
229
  `serve` fails fast at startup otherwise, and logs each connector's live
229
230
  status (`connected`, `needsAuth`, `error`) as it starts.
230
231
 
@@ -59,7 +59,6 @@ namespace:
59
59
  | `subagents/<id>/` | subagent `<ns>__<id>` |
60
60
  | `instructions.md` / `.ts` / dir | appended to the agent's system prompt |
61
61
  | `sandbox/workspace/**` | seeded into each local session workspace |
62
- | `ab.ts` / `ab/<name>.ts` | A/B experiment `<ns>__<name>` |
63
62
  | `artifacts.ts` | artifact kinds `<ns>__<kind>` |
64
63
 
65
64
  The root agent still needs its own `instructions.md`. Extension
@@ -76,7 +75,6 @@ or is outside discovery:
76
75
  | `agent.ts` | One `defineAgent` runtime per agent |
77
76
  | `storage.ts` | One `host.kv` / `host.files` backend |
78
77
  | `otel.ts` | One OTLP exporter |
79
- | `ab.config.ts` | One experiment-platform config; `ab.ts` / `ab/` still merge |
80
78
  | `playground/` | Custom chips are a Vite glob of the agent tree, not a discovery walk |
81
79
  | `extensions/` | Nested mounts are not loaded |
82
80
  | `sandbox.ts` | Custom sandbox backends stay on the agent |
@@ -117,7 +115,6 @@ it alive.
117
115
  | `schedules/<name>.ts` | `disableSchedule()` |
118
116
  | `subagents/<id>.ts` | `disableSubagent()` |
119
117
  | `instructions.ts` | `disableInstructions()` |
120
- | `ab.ts` / `ab/<name>.ts` | `disableAB()` |
121
118
  | `artifacts.ts` | `disableArtifacts()` |
122
119
 
123
120
  `disable()` is the same brand as the slot helpers above and works in
@@ -265,6 +262,8 @@ Continue with these pages:
265
262
  lets an agent launch and steer cloud agents
266
263
  - [Cursor Grok Bot agents](../guides/grokbot-agents.md): the extension
267
264
  that lets an agent talk to Grok Bot agents
265
+ - [Self-improvement](../guides/improve.md): the extension that lets an
266
+ agent change its own source through a cloud agent and a pull request
268
267
  - [Tools](./tools.md): the tool contract extensions contribute to
269
268
  - [Skills](./skills.md): the skill forms an extension can carry
270
269
  - [Project layout](./project-layout.md): where `agent/extensions/` sits
@@ -88,7 +88,7 @@ exported from `@cursor/july`.
88
88
 
89
89
  | Member | What it is |
90
90
  | --- | --- |
91
- | `ctx.session` | Read-only session info: `id`, `channelId`, `mode` (`chat` or `task`), `purpose` (`live` or `eval`), `auth`, plus `title`, `sdkAgentId`, and `abs` when set |
91
+ | `ctx.session` | Read-only session info: `id`, `channelId`, `mode` (`chat` or `task`), `purpose` (`live` or `eval`), `auth`, plus `title` and `sdkAgentId` when set |
92
92
  | `ctx.agent` | `{ name }` of the agent the event belongs to |
93
93
  | `ctx.channel` | `{ id, continuationToken }`. The token is `null` when the session can't take follow-ups |
94
94
  | `ctx.host.kv` | Durable JSON, shared by every session of the agent; the [storage backend](../storage.md#author-kv-ctx-host-kv) decides whether it survives a hosted replace. Prefix keys with `ctx.session.id` for per-session state |
@@ -119,17 +119,17 @@ Each event reaches a hook at most once. A restart doesn't replay the log
119
119
  into hooks, so a mirror needs no dedupe, and the event log rather than
120
120
  the hook's copy is the source of truth.
121
121
 
122
- ## Hooks, channel events, evals, or A/B?
122
+ ## Hooks, channel events, or evals?
123
123
 
124
124
  All of them consume the same stream, for different jobs:
125
125
 
126
- | | Hooks | Channel `events` | Evals | A/B (`defineAB`) |
127
- | --- | --- | --- | --- | --- |
128
- | Scope | every session of the agent | sessions the channel owns | one test turn | every live session; enrollment at creation, metrics on each turn |
129
- | Job | observe: audit, metrics, mirrors, derived state | deliver: replies back to the channel's surface | assert: gates over the trajectory | compare: sticky arms, then fold the stream into `onSample` metrics |
130
- | Context | `ctx.host`, `ctx.artifacts`, session info | `channel.state`, `setContinuationToken`, `ctx.host`, session info | the `t` assertion helpers | per-session samples in `onSample` |
131
- | Can affect the run | no | yes, it owns the surface | n/a | yes through arm instructions or `session.abs`; collection is observe-only |
132
- | Authored at | `agent/hooks/*.ts` | channel config | `evals/**/*.eval.ts` | [`agent/ab.ts` or `agent/ab/*.ts`](../ab.md) |
126
+ | | Hooks | Channel `events` | Evals |
127
+ | --- | --- | --- | --- |
128
+ | Scope | every session of the agent | sessions the channel owns | one test turn |
129
+ | Job | observe: audit, metrics, mirrors, derived state | deliver: replies back to the channel's surface | assert: gates over the trajectory |
130
+ | Context | `ctx.host`, `ctx.artifacts`, session info | `channel.state`, `setContinuationToken`, `ctx.host`, session info | the `t` assertion helpers |
131
+ | Can affect the run | no | yes, it owns the surface | n/a |
132
+ | Authored at | `agent/hooks/*.ts` | channel config | `evals/**/*.eval.ts` |
133
133
 
134
134
  ## When not to use a hook
135
135
 
@@ -141,7 +141,6 @@ All of them consume the same stream, for different jobs:
141
141
  | Block, approve, or rewrite a tool call | [`needsApproval`](./tools.md#gate-a-tool-on-human-approval) on the tool |
142
142
  | Act on the final assistant text, or fail a bad turn | [`defineResult`](./result.md) |
143
143
  | Gate a change on behavior | [Evals](../evals.md) |
144
- | Compare two prompts on live traffic | [`defineAB`](../ab.md) |
145
144
 
146
145
  ## Patterns
147
146
 
@@ -267,5 +266,3 @@ Continue with these pages:
267
266
  - [Deployment](../deployment.md#observability): runtime logs and export
268
267
  paths
269
268
  - [Channels](./channels.md#events): the delivery-side counterpart
270
- - [Live A/B metrics](../ab.md): sticky variants over the same event
271
- stream