@cursor/july 0.1.109 → 0.1.112

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 (1166) hide show
  1. package/AGENTS.md +1 -1
  2. package/README.md +0 -15
  3. package/dist/bin/agent-serve.js +99 -67
  4. package/dist/channels/bitbucket/api.js +8 -8
  5. package/dist/channels/bitbucket/binding.js +4 -4
  6. package/dist/channels/bitbucket/bitbucket-channel.js +1 -1
  7. package/dist/channels/bitbucket/bitbucket-webhook.js +1 -1
  8. package/dist/channels/bitbucket/checks.d.ts.map +1 -1
  9. package/dist/channels/bitbucket/checks.js +1 -1
  10. package/dist/channels/bitbucket/cursor-account.js +1 -1
  11. package/dist/channels/bitbucket/events.js +1 -1
  12. package/dist/channels/change-monitors/change-monitors-channel.js +1 -1
  13. package/dist/channels/checks.d.ts.map +1 -1
  14. package/dist/channels/checks.js +2 -2
  15. package/dist/channels/deployments/deployments-channel.js +1 -1
  16. package/dist/channels/github/cursor-account.js +3 -3
  17. package/dist/channels/github/defaults.d.ts.map +1 -1
  18. package/dist/channels/github/defaults.js +5 -3
  19. package/dist/channels/github/events.js +1 -1
  20. package/dist/channels/github/forward.js +8 -8
  21. package/dist/channels/github/github-channel.d.ts +29 -19
  22. package/dist/channels/github/github-channel.d.ts.map +1 -1
  23. package/dist/channels/github/github-channel.js +46 -32
  24. package/dist/channels/github/progress.d.ts.map +1 -1
  25. package/dist/channels/github/progress.js +7 -2
  26. package/dist/channels/github/state.d.ts +6 -0
  27. package/dist/channels/github/state.d.ts.map +1 -1
  28. package/dist/channels/github/types.d.ts +6 -0
  29. package/dist/channels/github/types.d.ts.map +1 -1
  30. package/dist/channels/gitlab/binding.js +4 -4
  31. package/dist/channels/gitlab/checks.d.ts.map +1 -1
  32. package/dist/channels/gitlab/checks.js +1 -1
  33. package/dist/channels/gitlab/cursor-account.js +1 -1
  34. package/dist/channels/gitlab/events.js +1 -1
  35. package/dist/channels/gitlab/gitlab-channel.js +1 -1
  36. package/dist/channels/gitlab/gitlab-webhook.js +1 -1
  37. package/dist/channels/gitlab/replay.js +2 -2
  38. package/dist/channels/origin/binding.d.ts +2 -0
  39. package/dist/channels/origin/binding.d.ts.map +1 -1
  40. package/dist/channels/origin/binding.js +3 -3
  41. package/dist/channels/origin/checks.d.ts +19 -7
  42. package/dist/channels/origin/checks.d.ts.map +1 -1
  43. package/dist/channels/origin/checks.js +13 -9
  44. package/dist/channels/origin/cursor-account.js +1 -1
  45. package/dist/channels/origin/defaults.d.ts.map +1 -1
  46. package/dist/channels/origin/defaults.js +3 -1
  47. package/dist/channels/origin/events.js +1 -1
  48. package/dist/channels/origin/origin-channel.d.ts.map +1 -1
  49. package/dist/channels/origin/origin-channel.js +2 -1
  50. package/dist/channels/origin/origin-webhook.js +2 -2
  51. package/dist/channels/slack/agentic-delivery.d.ts +23 -0
  52. package/dist/channels/slack/agentic-delivery.d.ts.map +1 -0
  53. package/dist/channels/slack/agentic-delivery.js +560 -0
  54. package/dist/channels/slack/agentic-posted.d.ts +30 -0
  55. package/dist/channels/slack/agentic-posted.d.ts.map +1 -0
  56. package/dist/channels/slack/agentic-posted.js +102 -0
  57. package/dist/channels/slack/agentic-signals.d.ts +48 -0
  58. package/dist/channels/slack/agentic-signals.d.ts.map +1 -0
  59. package/dist/channels/slack/agentic-signals.js +204 -0
  60. package/dist/channels/slack/api.d.ts +20 -1
  61. package/dist/channels/slack/api.d.ts.map +1 -1
  62. package/dist/channels/slack/api.js +43 -11
  63. package/dist/channels/slack/approvals.js +1 -1
  64. package/dist/channels/slack/auth.d.ts.map +1 -1
  65. package/dist/channels/slack/auth.js +3 -1
  66. package/dist/channels/slack/blocks.js +3 -3
  67. package/dist/channels/slack/bot-mentions.d.ts.map +1 -1
  68. package/dist/channels/slack/bot-mentions.js +5 -5
  69. package/dist/channels/slack/channel-watch.js +1 -1
  70. package/dist/channels/slack/cli-project.js +3 -3
  71. package/dist/channels/slack/defaults.d.ts +3 -0
  72. package/dist/channels/slack/defaults.d.ts.map +1 -1
  73. package/dist/channels/slack/defaults.js +90 -29
  74. package/dist/channels/slack/dispatch.d.ts +44 -1
  75. package/dist/channels/slack/dispatch.d.ts.map +1 -1
  76. package/dist/channels/slack/dispatch.js +323 -107
  77. package/dist/channels/slack/doctor.js +1 -1
  78. package/dist/channels/slack/eval-directive.js +1 -1
  79. package/dist/channels/slack/external-policy.d.ts +2 -1
  80. package/dist/channels/slack/external-policy.d.ts.map +1 -1
  81. package/dist/channels/slack/external-policy.js +13 -2
  82. package/dist/channels/slack/footer.d.ts +30 -0
  83. package/dist/channels/slack/footer.d.ts.map +1 -0
  84. package/dist/channels/slack/footer.js +88 -0
  85. package/dist/channels/slack/index.d.ts +2 -0
  86. package/dist/channels/slack/index.d.ts.map +1 -1
  87. package/dist/channels/slack/index.js +2 -0
  88. package/dist/channels/slack/interactive.d.ts.map +1 -1
  89. package/dist/channels/slack/interactive.js +5 -3
  90. package/dist/channels/slack/live-delivery.d.ts +1 -1
  91. package/dist/channels/slack/live-delivery.d.ts.map +1 -1
  92. package/dist/channels/slack/live-delivery.js +20 -6
  93. package/dist/channels/slack/log.d.ts.map +1 -1
  94. package/dist/channels/slack/log.js +1 -1
  95. package/dist/channels/slack/manifest.js +1 -1
  96. package/dist/channels/slack/nudge-carrier.js +1 -1
  97. package/dist/channels/slack/nudge-store.js +2 -2
  98. package/dist/channels/slack/paint-start.d.ts +22 -0
  99. package/dist/channels/slack/paint-start.d.ts.map +1 -0
  100. package/dist/channels/slack/paint-start.js +91 -0
  101. package/dist/channels/slack/placeholder.d.ts +62 -0
  102. package/dist/channels/slack/placeholder.d.ts.map +1 -0
  103. package/dist/channels/slack/placeholder.js +268 -0
  104. package/dist/channels/slack/progress-delivery.d.ts.map +1 -1
  105. package/dist/channels/slack/progress-delivery.js +13 -4
  106. package/dist/channels/slack/reasoning-chip.d.ts +8 -0
  107. package/dist/channels/slack/reasoning-chip.d.ts.map +1 -0
  108. package/dist/channels/slack/reasoning-chip.js +30 -0
  109. package/dist/channels/slack/recording-sink.d.ts +29 -0
  110. package/dist/channels/slack/recording-sink.d.ts.map +1 -0
  111. package/dist/channels/slack/recording-sink.js +142 -0
  112. package/dist/channels/slack/reply-options.d.ts +8 -1
  113. package/dist/channels/slack/reply-options.d.ts.map +1 -1
  114. package/dist/channels/slack/reply-options.js +59 -14
  115. package/dist/channels/slack/setup.js +1 -1
  116. package/dist/channels/slack/slack-channel.d.ts +2 -2
  117. package/dist/channels/slack/slack-channel.d.ts.map +1 -1
  118. package/dist/channels/slack/slack-channel.js +58 -30
  119. package/dist/channels/slack/socket-mode.js +2 -2
  120. package/dist/channels/slack/thread-context.js +5 -5
  121. package/dist/channels/slack/tool-approval-events.d.ts +5 -0
  122. package/dist/channels/slack/tool-approval-events.d.ts.map +1 -1
  123. package/dist/channels/slack/tool-approval-events.js +50 -38
  124. package/dist/channels/slack/tool-cards.js +1 -1
  125. package/dist/channels/slack/tool-chip.d.ts +9 -0
  126. package/dist/channels/slack/tool-chip.d.ts.map +1 -0
  127. package/dist/channels/slack/tool-chip.js +25 -0
  128. package/dist/channels/slack/types.d.ts +49 -7
  129. package/dist/channels/slack/types.d.ts.map +1 -1
  130. package/dist/channels/slack/upload.d.ts +13 -0
  131. package/dist/channels/slack/upload.d.ts.map +1 -0
  132. package/dist/channels/slack/upload.js +135 -0
  133. package/dist/channels.d.ts +10 -14
  134. package/dist/channels.d.ts.map +1 -1
  135. package/dist/channels.js +9 -21
  136. package/dist/dashboard-session-url.d.ts +15 -0
  137. package/dist/dashboard-session-url.d.ts.map +1 -0
  138. package/dist/dashboard-session-url.js +25 -0
  139. package/dist/docs/404.html +3 -3
  140. package/dist/docs/architecture.svg +59 -0
  141. package/dist/docs/assets/app.DxTdhphC.js +309 -0
  142. package/dist/docs/assets/building-with-agents.md.BBCx0AUo.js +9 -0
  143. package/dist/docs/assets/building-with-agents.md.BBCx0AUo.lean.js +1 -0
  144. package/dist/docs/assets/chunks/@localSearchIndexroot.QmjDU6Jh.js +1 -0
  145. package/dist/docs/assets/chunks/{VPLocalSearchBox.CVQERt56.js → VPLocalSearchBox.CR3KTF0X.js} +2 -2
  146. package/dist/docs/assets/chunks/arc.CVVqBOdS.js +1 -0
  147. package/dist/docs/assets/chunks/architectureDiagram-Q4EWVU46.CJHGP4ki.js +36 -0
  148. package/dist/docs/assets/chunks/baseUniq.r7UVVRBP.js +1 -0
  149. package/dist/docs/assets/chunks/blockDiagram-DXYQGD6D.DKmMaTre.js +132 -0
  150. package/dist/docs/assets/chunks/c4Diagram-AHTNJAMY.DDJsntUO.js +10 -0
  151. package/dist/docs/assets/chunks/channel.BjpoSbz_.js +1 -0
  152. package/dist/docs/assets/chunks/chunk-4BX2VUAB.BK2rKt6W.js +1 -0
  153. package/dist/docs/assets/chunks/chunk-4TB4RGXK.DRLV8RnF.js +206 -0
  154. package/dist/docs/assets/chunks/chunk-55IACEB6.DaKjxtb7.js +1 -0
  155. package/dist/docs/assets/chunks/chunk-EDXVE4YY.C5sPCIT1.js +1 -0
  156. package/dist/docs/assets/chunks/chunk-FMBD7UC4.CSGWyNTB.js +15 -0
  157. package/dist/docs/assets/chunks/chunk-OYMX7WX6.D5tK9XEr.js +231 -0
  158. package/dist/docs/assets/chunks/chunk-QZHKN3VN.BeZGd1UZ.js +1 -0
  159. package/dist/docs/assets/chunks/chunk-YZCP3GAM.U_tfWwQR.js +1 -0
  160. package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.BgxOlMHw.js +1 -0
  161. package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.BgxOlMHw.js +1 -0
  162. package/dist/docs/assets/chunks/clone.DRuGBKZC.js +1 -0
  163. package/dist/docs/assets/chunks/cose-bilkent-S5V4N54A.DVeRXIb6.js +1 -0
  164. package/dist/docs/assets/chunks/cytoscape.esm.BQk4lpUV.js +331 -0
  165. package/dist/docs/assets/chunks/dagre-KV5264BT.BpKJAeRZ.js +4 -0
  166. package/dist/docs/assets/chunks/defaultLocale.C4B-KCzX.js +1 -0
  167. package/dist/docs/assets/chunks/diagram-5BDNPKRD.BQOtrd1Z.js +10 -0
  168. package/dist/docs/assets/chunks/diagram-G4DWMVQ6.CSDAhjPI.js +24 -0
  169. package/dist/docs/assets/chunks/diagram-MMDJMWI5.Dpztst2S.js +43 -0
  170. package/dist/docs/assets/chunks/diagram-TYMM5635.qJHRizHR.js +24 -0
  171. package/dist/docs/assets/chunks/erDiagram-SMLLAGMA.vbDotH3l.js +85 -0
  172. package/dist/docs/assets/chunks/flowDiagram-DWJPFMVM.CqS_ZQr4.js +162 -0
  173. package/dist/docs/assets/chunks/{framework.BCISBCiQ.js → framework.BNw1pucY.js} +6 -6
  174. package/dist/docs/assets/chunks/ganttDiagram-T4ZO3ILL.DTLdR4pN.js +292 -0
  175. package/dist/docs/assets/chunks/gitGraphDiagram-UUTBAWPF.D04lnbnr.js +106 -0
  176. package/dist/docs/assets/chunks/graph.BlfqLJsM.js +1 -0
  177. package/dist/docs/assets/chunks/infoDiagram-42DDH7IO.tAooImWA.js +2 -0
  178. package/dist/docs/assets/chunks/init.Gi6I4Gst.js +1 -0
  179. package/dist/docs/assets/chunks/ishikawaDiagram-UXIWVN3A.ClUsVqnJ.js +70 -0
  180. package/dist/docs/assets/chunks/journeyDiagram-VCZTEJTY.C3tUgyCg.js +139 -0
  181. package/dist/docs/assets/chunks/kanban-definition-6JOO6SKY.CtD9-QCe.js +89 -0
  182. package/dist/docs/assets/chunks/katex.DkKDou_j.js +257 -0
  183. package/dist/docs/assets/chunks/layout.D38U-LnT.js +1 -0
  184. package/dist/docs/assets/chunks/linear.BJmssyhN.js +1 -0
  185. package/dist/docs/assets/chunks/min.DNgXoouU.js +1 -0
  186. package/dist/docs/assets/chunks/mindmap-definition-QFDTVHPH.Dcp6cxeu.js +96 -0
  187. package/dist/docs/assets/chunks/ordinal.DBvzRdQf.js +1 -0
  188. package/dist/docs/assets/chunks/pieDiagram-DEJITSTG.CLDw6zIs.js +30 -0
  189. package/dist/docs/assets/chunks/quadrantDiagram-34T5L4WZ.CYaeeY4c.js +7 -0
  190. package/dist/docs/assets/chunks/requirementDiagram-MS252O5E.gMYuRpq2.js +84 -0
  191. package/dist/docs/assets/chunks/sankeyDiagram-XADWPNL6.CZqyHFbc.js +10 -0
  192. package/dist/docs/assets/chunks/sequenceDiagram-FGHM5R23.BTsCjUDN.js +157 -0
  193. package/dist/docs/assets/chunks/stateDiagram-FHFEXIEX.CftT9mLJ.js +1 -0
  194. package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.-43J68xB.js +1 -0
  195. package/dist/docs/assets/chunks/{theme.Dnsd3XOn.js → theme.B_7J9ZsV.js} +2 -2
  196. package/dist/docs/assets/chunks/timeline-definition-GMOUNBTQ.DbU3WUNw.js +120 -0
  197. package/dist/docs/assets/chunks/vennDiagram-DHZGUBPP.ixsq-q2u.js +34 -0
  198. package/dist/docs/assets/chunks/virtual_mermaid-config.DDnGl6nM.js +1 -0
  199. package/dist/docs/assets/chunks/wardley-RL74JXVD.WRXz-Dux.js +162 -0
  200. package/dist/docs/assets/chunks/wardleyDiagram-NUSXRM2D.C0ewvgbp.js +20 -0
  201. package/dist/docs/assets/chunks/xychartDiagram-5P7HB3ND.nAEhF4bO.js +7 -0
  202. package/dist/docs/assets/deployment.md.D2jQZuFx.js +32 -0
  203. package/dist/docs/assets/deployment.md.D2jQZuFx.lean.js +1 -0
  204. package/dist/docs/assets/evals.md.BYvfZ-PO.js +72 -0
  205. package/dist/docs/assets/evals.md.BYvfZ-PO.lean.js +1 -0
  206. package/dist/docs/assets/guides_agent-to-agent.md.8oDTfu-E.js +30 -0
  207. package/dist/docs/assets/guides_agent-to-agent.md.8oDTfu-E.lean.js +1 -0
  208. package/dist/docs/assets/guides_bitbucket.md.mpevW-VP.js +145 -0
  209. package/dist/docs/assets/guides_bitbucket.md.mpevW-VP.lean.js +1 -0
  210. package/dist/docs/assets/guides_cloud-agents.md.Cp1O3u-X.js +15 -0
  211. package/dist/docs/assets/guides_cloud-agents.md.Cp1O3u-X.lean.js +1 -0
  212. package/dist/docs/assets/guides_convert-automation.md.CqEyfP6Y.js +43 -0
  213. package/dist/docs/assets/guides_convert-automation.md.CqEyfP6Y.lean.js +1 -0
  214. package/dist/docs/assets/guides_github.md.BwpBp3ed.js +156 -0
  215. package/dist/docs/assets/guides_github.md.BwpBp3ed.lean.js +1 -0
  216. package/dist/docs/assets/guides_gitlab.md.DaEC3nMk.js +153 -0
  217. package/dist/docs/assets/guides_gitlab.md.DaEC3nMk.lean.js +1 -0
  218. package/dist/docs/assets/guides_grokbot-agents.md.CMhZNdEU.js +16 -0
  219. package/dist/docs/assets/guides_grokbot-agents.md.CMhZNdEU.lean.js +1 -0
  220. package/dist/docs/assets/guides_improve.md.Bnp4F99w.js +22 -0
  221. package/dist/docs/assets/guides_improve.md.Bnp4F99w.lean.js +1 -0
  222. package/dist/docs/assets/guides_mcp-oauth.md.bSFakfCY.js +50 -0
  223. package/dist/docs/assets/guides_mcp-oauth.md.bSFakfCY.lean.js +1 -0
  224. package/dist/docs/assets/guides_opentelemetry.md.BKDxQmmd.js +35 -0
  225. package/dist/docs/assets/guides_opentelemetry.md.BKDxQmmd.lean.js +1 -0
  226. package/dist/docs/assets/guides_slack.md.Bo96y42E.js +70 -0
  227. package/dist/docs/assets/guides_slack.md.Bo96y42E.lean.js +1 -0
  228. package/dist/docs/assets/guides_webhooks.md.1A72_VEE.js +92 -0
  229. package/dist/docs/assets/guides_webhooks.md.1A72_VEE.lean.js +1 -0
  230. package/dist/docs/assets/hillclimbing.md.D4E1o5Sa.js +7 -0
  231. package/dist/docs/assets/hillclimbing.md.D4E1o5Sa.lean.js +1 -0
  232. package/dist/docs/assets/index.md.C-t81M5J.js +17 -0
  233. package/dist/docs/assets/index.md.C-t81M5J.lean.js +1 -0
  234. package/dist/docs/assets/{quickstart.md.DdQOF7Y8.js → quickstart.md.DAvVhuuU.js} +30 -38
  235. package/dist/docs/assets/quickstart.md.DAvVhuuU.lean.js +1 -0
  236. package/dist/docs/assets/{reference_agent-config.md.CvoL6pof.js → reference_agent-config.md.DGPyw7ms.js} +1 -1
  237. package/dist/docs/assets/{reference_agent-config.md.CvoL6pof.lean.js → reference_agent-config.md.DGPyw7ms.lean.js} +1 -1
  238. package/dist/docs/assets/{reference_artifacts.md.Dior32Qw.js → reference_artifacts.md.Bu_4HmsD.js} +1 -1
  239. package/dist/docs/assets/{reference_artifacts.md.Dior32Qw.lean.js → reference_artifacts.md.Bu_4HmsD.lean.js} +1 -1
  240. package/dist/docs/assets/{reference_channels.md.CAo-iK4j.js → reference_channels.md.nFWbzAic.js} +2 -12
  241. package/dist/docs/assets/{reference_channels.md.CAo-iK4j.lean.js → reference_channels.md.nFWbzAic.lean.js} +1 -1
  242. package/dist/docs/assets/{reference_cli.md.Deg7849l.js → reference_cli.md.DLWDz9ij.js} +5 -3
  243. package/dist/docs/assets/{reference_cli.md.Deg7849l.lean.js → reference_cli.md.DLWDz9ij.lean.js} +1 -1
  244. package/dist/docs/assets/{reference_connections.md.BojkC6c5.js → reference_connections.md.CmyrlXfY.js} +4 -4
  245. package/dist/docs/assets/{reference_connections.md.BojkC6c5.lean.js → reference_connections.md.CmyrlXfY.lean.js} +1 -1
  246. package/dist/docs/assets/reference_evals.md.DNJzM_yf.js +57 -0
  247. package/dist/docs/assets/reference_evals.md.DNJzM_yf.lean.js +1 -0
  248. package/dist/docs/assets/reference_extensions.md.Ceq-qT8d.js +58 -0
  249. package/dist/docs/assets/reference_extensions.md.Ceq-qT8d.lean.js +1 -0
  250. package/dist/docs/assets/{reference_hooks.md.BlM_bOg6.js → reference_hooks.md.B7uzNENk.js} +3 -3
  251. package/dist/docs/assets/{reference_hooks.md.BlM_bOg6.lean.js → reference_hooks.md.B7uzNENk.lean.js} +1 -1
  252. package/dist/docs/assets/{reference_http-api.md.BwaCo-VO.js → reference_http-api.md.CduHavZ2.js} +3 -3
  253. package/dist/docs/assets/{reference_http-api.md.BwaCo-VO.lean.js → reference_http-api.md.CduHavZ2.lean.js} +1 -1
  254. package/dist/docs/assets/{reference_instructions.md.CR7XSsGk.js → reference_instructions.md.CU1My5My.js} +1 -1
  255. package/dist/docs/assets/{reference_instructions.md.CR7XSsGk.lean.js → reference_instructions.md.CU1My5My.lean.js} +1 -1
  256. package/dist/docs/assets/{reference_playground.md.DLnoaczX.js → reference_playground.md.Ch2d0Iqi.js} +1 -1
  257. package/dist/docs/assets/{reference_playground.md.DLnoaczX.lean.js → reference_playground.md.Ch2d0Iqi.lean.js} +1 -1
  258. package/dist/docs/assets/{reference_project-layout.md.BEU8MtQV.js → reference_project-layout.md.BGhgpy9V.js} +3 -3
  259. package/dist/docs/assets/{reference_project-layout.md.BEU8MtQV.lean.js → reference_project-layout.md.BGhgpy9V.lean.js} +1 -1
  260. package/dist/docs/assets/{reference_prompt.md.DnaD5dNK.js → reference_prompt.md.Ccp0R53H.js} +1 -1
  261. package/dist/docs/assets/{reference_prompt.md.DnaD5dNK.lean.js → reference_prompt.md.Ccp0R53H.lean.js} +1 -1
  262. package/dist/docs/assets/{reference_schedules.md.DI_JrHgq.js → reference_schedules.md.B2Nm6FaD.js} +1 -1
  263. package/dist/docs/assets/{reference_schedules.md.DI_JrHgq.lean.js → reference_schedules.md.B2Nm6FaD.lean.js} +1 -1
  264. package/dist/docs/assets/{reference_sessions.md.CyXV1MUw.js → reference_sessions.md.1_6Vyv7x.js} +1 -1
  265. package/dist/docs/assets/{reference_sessions.md.CyXV1MUw.lean.js → reference_sessions.md.1_6Vyv7x.lean.js} +1 -1
  266. package/dist/docs/assets/{reference_skills.md.l2ezAcaN.js → reference_skills.md.DjQkRefx.js} +1 -1
  267. package/dist/docs/assets/{reference_skills.md.l2ezAcaN.lean.js → reference_skills.md.DjQkRefx.lean.js} +1 -1
  268. package/dist/docs/assets/{reference_subagents.md.CfsIloPm.js → reference_subagents.md.BHsSMMyO.js} +2 -2
  269. package/dist/docs/assets/{reference_subagents.md.CfsIloPm.lean.js → reference_subagents.md.BHsSMMyO.lean.js} +1 -1
  270. package/dist/docs/assets/{reference_tools.md.aGrn99hP.js → reference_tools.md.BYzUTeVA.js} +4 -4
  271. package/dist/docs/assets/{reference_tools.md.aGrn99hP.lean.js → reference_tools.md.BYzUTeVA.lean.js} +1 -1
  272. package/dist/docs/assets/{style.DCD_zyg3.css → style.Cfo2vbik.css} +1 -1
  273. package/dist/docs/assets/{templates_agentic-owners.md.BZSH4N9z.js → templates_agentic-owners.md.9M575F5C.js} +1 -1
  274. package/dist/docs/assets/{templates_agentic-owners.md.BZSH4N9z.lean.js → templates_agentic-owners.md.9M575F5C.lean.js} +1 -1
  275. package/dist/docs/assets/{templates_pr-autofixer.md.Bds_XWcV.js → templates_pr-autofixer.md.ws0DDXDy.js} +1 -1
  276. package/dist/docs/assets/{templates_pr-autofixer.md.Bds_XWcV.lean.js → templates_pr-autofixer.md.ws0DDXDy.lean.js} +1 -1
  277. package/dist/docs/assets/{templates_security-reviewer.md.lshxbCLK.js → templates_security-reviewer.md.KEFYXzfK.js} +1 -1
  278. package/dist/docs/assets/{templates_security-reviewer.md.lshxbCLK.lean.js → templates_security-reviewer.md.KEFYXzfK.lean.js} +1 -1
  279. package/dist/docs/assets/templates_thermo-quality-review.md.VNJ_mohX.js +3 -0
  280. package/dist/docs/assets/templates_thermo-quality-review.md.VNJ_mohX.lean.js +1 -0
  281. package/dist/docs/assets/templates_thermo-review.md.Hi3zWOkP.js +3 -0
  282. package/dist/docs/assets/templates_thermo-review.md.Hi3zWOkP.lean.js +1 -0
  283. package/dist/docs/assets/{templates_triage.md.Co4UNzkZ.js → templates_triage.md.CVGe_FG6.js} +1 -1
  284. package/dist/docs/assets/{templates_triage.md.Co4UNzkZ.lean.js → templates_triage.md.CVGe_FG6.lean.js} +1 -1
  285. package/dist/docs/assets/troubleshooting.md.mnfFG2Em.js +1 -0
  286. package/dist/docs/assets/troubleshooting.md.mnfFG2Em.lean.js +1 -0
  287. package/dist/docs/building-with-agents.html +47 -18
  288. package/dist/docs/building-with-agents.md +94 -84
  289. package/dist/docs/deployment.html +62 -48
  290. package/dist/docs/deployment.md +117 -364
  291. package/dist/docs/evals.html +88 -194
  292. package/dist/docs/evals.md +146 -673
  293. package/dist/docs/guides/agent-to-agent.html +65 -12
  294. package/dist/docs/guides/agent-to-agent.md +125 -91
  295. package/dist/docs/guides/bitbucket.html +182 -14
  296. package/dist/docs/guides/bitbucket.md +249 -48
  297. package/dist/docs/guides/cloud-agents.html +49 -10
  298. package/dist/docs/guides/cloud-agents.md +123 -66
  299. package/dist/docs/guides/convert-automation.html +83 -19
  300. package/dist/docs/guides/convert-automation.md +156 -147
  301. package/dist/docs/guides/github.html +187 -62
  302. package/dist/docs/guides/github.md +260 -245
  303. package/dist/docs/guides/gitlab.html +187 -15
  304. package/dist/docs/guides/gitlab.md +249 -50
  305. package/dist/docs/guides/grokbot-agents.html +51 -11
  306. package/dist/docs/guides/grokbot-agents.md +116 -63
  307. package/dist/docs/guides/improve.html +51 -10
  308. package/dist/docs/guides/improve.md +111 -58
  309. package/dist/docs/guides/mcp-oauth.html +77 -22
  310. package/dist/docs/guides/mcp-oauth.md +111 -121
  311. package/dist/docs/guides/opentelemetry.html +72 -30
  312. package/dist/docs/guides/opentelemetry.md +105 -187
  313. package/dist/docs/guides/slack.html +89 -24
  314. package/dist/docs/guides/slack.md +170 -191
  315. package/dist/docs/guides/webhooks.html +100 -200
  316. package/dist/docs/guides/webhooks.md +154 -386
  317. package/dist/docs/hashmap.json +1 -1
  318. package/dist/docs/hillclimbing.html +47 -11
  319. package/dist/docs/hillclimbing.md +101 -55
  320. package/dist/docs/index.html +57 -12
  321. package/dist/docs/index.md +83 -150
  322. package/dist/docs/llms-full.txt +6244 -10784
  323. package/dist/docs/llms.txt +23 -46
  324. package/dist/docs/quickstart.html +70 -45
  325. package/dist/docs/quickstart.md +44 -105
  326. package/dist/docs/reference/agent-config.html +41 -8
  327. package/dist/docs/reference/artifacts.html +41 -8
  328. package/dist/docs/reference/channels.html +41 -18
  329. package/dist/docs/reference/channels.md +0 -16
  330. package/dist/docs/reference/cli.html +44 -9
  331. package/dist/docs/reference/cli.md +2 -16
  332. package/dist/docs/reference/connections.html +43 -10
  333. package/dist/docs/reference/connections.md +3 -5
  334. package/dist/docs/reference/evals.html +116 -0
  335. package/dist/docs/reference/evals.md +293 -0
  336. package/dist/docs/reference/extensions.html +83 -54
  337. package/dist/docs/reference/extensions.md +127 -199
  338. package/dist/docs/reference/hooks.html +42 -9
  339. package/dist/docs/reference/hooks.md +34 -36
  340. package/dist/docs/reference/http-api.html +42 -9
  341. package/dist/docs/reference/http-api.md +5 -5
  342. package/dist/docs/reference/instructions.html +41 -8
  343. package/dist/docs/reference/playground.html +40 -7
  344. package/dist/docs/reference/playground.md +2 -2
  345. package/dist/docs/reference/project-layout.html +42 -9
  346. package/dist/docs/reference/project-layout.md +3 -4
  347. package/dist/docs/reference/prompt.html +41 -8
  348. package/dist/docs/reference/schedules.html +41 -8
  349. package/dist/docs/reference/sessions.html +40 -7
  350. package/dist/docs/reference/sessions.md +5 -4
  351. package/dist/docs/reference/skills.html +41 -8
  352. package/dist/docs/reference/subagents.html +41 -8
  353. package/dist/docs/reference/subagents.md +2 -4
  354. package/dist/docs/reference/tools.html +43 -10
  355. package/dist/docs/reference/tools.md +2 -5
  356. package/dist/docs/templates/agentic-owners.html +41 -8
  357. package/dist/docs/templates/pr-autofixer.html +41 -8
  358. package/dist/docs/templates/security-reviewer.html +41 -8
  359. package/dist/docs/templates/thermo-quality-review.html +62 -0
  360. package/dist/docs/templates/thermo-quality-review.md +75 -0
  361. package/dist/docs/templates/thermo-review.html +62 -0
  362. package/dist/docs/templates/thermo-review.md +74 -0
  363. package/dist/docs/templates/triage.html +41 -8
  364. package/dist/docs/troubleshooting.html +41 -8
  365. package/dist/docs/troubleshooting.md +97 -67
  366. package/dist/evals/assertions.js +19 -19
  367. package/dist/evals/expect.js +1 -1
  368. package/dist/evals/judge.js +1 -1
  369. package/dist/evals/reporters.d.ts.map +1 -1
  370. package/dist/evals/reporters.js +8 -8
  371. package/dist/evals/run-facts.js +2 -2
  372. package/dist/evals.d.ts +1 -1
  373. package/dist/evals.d.ts.map +1 -1
  374. package/dist/evals.js +7 -7
  375. package/dist/extensions/cursor-cloud-agents/extension.js +1 -1
  376. package/dist/extensions/cursor-cloud-agents/lib/backend.js +3 -3
  377. package/dist/extensions/cursor-cloud-agents/lib/fleet.js +1 -1
  378. package/dist/extensions/cursor-cloud-agents/lib/repos.js +6 -6
  379. package/dist/extensions/cursor-cloud-agents/lib/transcript.d.ts.map +1 -1
  380. package/dist/extensions/cursor-cloud-agents/lib/transcript.js +2 -2
  381. package/dist/extensions/cursor-cloud-agents/skills/handoff.md +3 -7
  382. package/dist/extensions/cursor-cloud-agents/tools/list.js +1 -1
  383. package/dist/extensions/improve/extension.d.ts +3 -1
  384. package/dist/extensions/improve/extension.d.ts.map +1 -1
  385. package/dist/extensions/improve/extension.js +4 -2
  386. package/dist/extensions/improve/skills/yourself.js +2 -2
  387. package/dist/extensions/slack-communication/extension.d.ts +28 -0
  388. package/dist/extensions/slack-communication/extension.d.ts.map +1 -0
  389. package/dist/extensions/slack-communication/extension.js +32 -0
  390. package/dist/extensions/slack-communication/skills/slack-voice.d.ts +5 -0
  391. package/dist/extensions/slack-communication/skills/slack-voice.d.ts.map +1 -0
  392. package/dist/extensions/slack-communication/skills/slack-voice.js +54 -0
  393. package/dist/extensions/slack-communication/tools/delete-message.d.ts +4 -0
  394. package/dist/extensions/slack-communication/tools/delete-message.d.ts.map +1 -0
  395. package/dist/extensions/slack-communication/tools/delete-message.js +29 -0
  396. package/dist/extensions/slack-communication/tools/edit-message.d.ts +4 -0
  397. package/dist/extensions/slack-communication/tools/edit-message.d.ts.map +1 -0
  398. package/dist/extensions/slack-communication/tools/edit-message.js +37 -0
  399. package/dist/extensions/slack-communication/tools/post-card.d.ts +4 -0
  400. package/dist/extensions/slack-communication/tools/post-card.d.ts.map +1 -0
  401. package/dist/extensions/slack-communication/tools/post-card.js +25 -0
  402. package/dist/extensions/slack-communication/tools/post-file.d.ts +4 -0
  403. package/dist/extensions/slack-communication/tools/post-file.d.ts.map +1 -0
  404. package/dist/extensions/slack-communication/tools/post-file.js +76 -0
  405. package/dist/extensions/slack-communication/tools/post-update.d.ts +4 -0
  406. package/dist/extensions/slack-communication/tools/post-update.d.ts.map +1 -0
  407. package/dist/extensions/slack-communication/tools/post-update.js +36 -0
  408. package/dist/extensions/slack-communication/tools/react.d.ts +4 -0
  409. package/dist/extensions/slack-communication/tools/react.d.ts.map +1 -0
  410. package/dist/extensions/slack-communication/tools/react.js +27 -0
  411. package/dist/extensions/slack-communication/tools/set-status.d.ts +4 -0
  412. package/dist/extensions/slack-communication/tools/set-status.d.ts.map +1 -0
  413. package/dist/extensions/slack-communication/tools/set-status.js +18 -0
  414. package/dist/files-backends/cursor-hosted.d.ts +18 -6
  415. package/dist/files-backends/cursor-hosted.d.ts.map +1 -1
  416. package/dist/files-backends/cursor-hosted.js +357 -74
  417. package/dist/files-backends/local-fs.js +1 -1
  418. package/dist/files.d.ts +15 -0
  419. package/dist/files.d.ts.map +1 -1
  420. package/dist/filesystem.d.ts +46 -2
  421. package/dist/filesystem.d.ts.map +1 -1
  422. package/dist/filesystem.js +160 -113
  423. package/dist/index.d.ts +7 -10
  424. package/dist/index.d.ts.map +1 -1
  425. package/dist/index.js +5 -7
  426. package/dist/internal/advertise-tools.js +6 -6
  427. package/dist/internal/approval-gate.js +1 -1
  428. package/dist/internal/artifacts-store.js +3 -3
  429. package/dist/internal/as-of.js +2 -2
  430. package/dist/internal/authored-alias-hooks.js +1 -1
  431. package/dist/internal/builtin-tools/reminders.js +2 -2
  432. package/dist/internal/chat-client.js +5 -5
  433. package/dist/internal/cli-ax.d.ts +7 -0
  434. package/dist/internal/cli-ax.d.ts.map +1 -1
  435. package/dist/internal/cli-ax.js +140 -27
  436. package/dist/internal/cli-bitbucket.js +10 -10
  437. package/dist/internal/cli-convert-automation.js +2 -2
  438. package/dist/internal/cli-cursor.d.ts +3 -11
  439. package/dist/internal/cli-cursor.d.ts.map +1 -1
  440. package/dist/internal/cli-cursor.js +5 -10
  441. package/dist/internal/cli-deploy.d.ts +12 -2
  442. package/dist/internal/cli-deploy.d.ts.map +1 -1
  443. package/dist/internal/cli-deploy.js +328 -96
  444. package/dist/internal/cli-docs.js +5 -5
  445. package/dist/internal/cli-github.js +15 -16
  446. package/dist/internal/cli-gitlab.js +10 -10
  447. package/dist/internal/cli-manifest.js +1 -1
  448. package/dist/internal/cli-mcp-oauth.d.ts.map +1 -1
  449. package/dist/internal/cli-mcp-oauth.js +5 -5
  450. package/dist/internal/cli-mcp.js +3 -3
  451. package/dist/internal/cli-skills.js +2 -2
  452. package/dist/internal/cli-slack.js +5 -5
  453. package/dist/internal/cloud-turn-cost.js +1 -1
  454. package/dist/internal/continuation-identity.d.ts.map +1 -1
  455. package/dist/internal/continuation-identity.js +15 -9
  456. package/dist/internal/conversation-mirror.d.ts.map +1 -1
  457. package/dist/internal/conversation-mirror.js +33 -2
  458. package/dist/internal/convert-automation/convert-workflow.js +25 -24
  459. package/dist/internal/convert-automation/types.d.ts +8 -0
  460. package/dist/internal/convert-automation/types.d.ts.map +1 -1
  461. package/dist/internal/cursor/account-mcp.d.ts +2 -2
  462. package/dist/internal/cursor/account-mcp.d.ts.map +1 -1
  463. package/dist/internal/cursor/account-mcp.js +32 -27
  464. package/dist/internal/cursor/backend-client.d.ts +15 -10
  465. package/dist/internal/cursor/backend-client.d.ts.map +1 -1
  466. package/dist/internal/cursor/backend-client.js +17 -11
  467. package/dist/internal/cursor/credentials.js +1 -1
  468. package/dist/internal/cursor/hosted-store-secrets.d.ts +16 -0
  469. package/dist/internal/cursor/hosted-store-secrets.d.ts.map +1 -1
  470. package/dist/internal/cursor/hosted-store-secrets.js +25 -0
  471. package/dist/internal/cursor-account-mcp-auth.js +9 -9
  472. package/dist/internal/cursor-agent-template.d.ts +1 -1
  473. package/dist/internal/cursor-agent-template.d.ts.map +1 -1
  474. package/dist/internal/cursor-agent-template.js +2 -0
  475. package/dist/internal/cursor-deployment-relay.js +9 -9
  476. package/dist/internal/cursor-event-relay.js +10 -10
  477. package/dist/internal/cursor-relay-core.js +2 -2
  478. package/dist/internal/deploy-client.d.ts +106 -9
  479. package/dist/internal/deploy-client.d.ts.map +1 -1
  480. package/dist/internal/deploy-client.js +171 -23
  481. package/dist/internal/deploy-manifest.d.ts +13 -0
  482. package/dist/internal/deploy-manifest.d.ts.map +1 -1
  483. package/dist/internal/deploy-manifest.js +32 -16
  484. package/dist/internal/discovery/agent-config.d.ts +5 -0
  485. package/dist/internal/discovery/agent-config.d.ts.map +1 -1
  486. package/dist/internal/discovery/agent-config.js +27 -0
  487. package/dist/internal/discovery/agent.d.ts.map +1 -1
  488. package/dist/internal/discovery/agent.js +10 -8
  489. package/dist/internal/discovery/channels.js +4 -4
  490. package/dist/internal/discovery/connections.js +4 -4
  491. package/dist/internal/discovery/cursor-plugin.js +12 -12
  492. package/dist/internal/discovery/extension-overlay.js +3 -3
  493. package/dist/internal/discovery/extensions.js +6 -6
  494. package/dist/internal/discovery/info.js +9 -9
  495. package/dist/internal/discovery/instructions.js +1 -1
  496. package/dist/internal/discovery/project.d.ts.map +1 -1
  497. package/dist/internal/discovery/project.js +4 -4
  498. package/dist/internal/discovery/services.js +1 -1
  499. package/dist/internal/discovery/tools.js +1 -1
  500. package/dist/internal/docs-site.js +2 -2
  501. package/dist/internal/env-file.js +1 -1
  502. package/dist/internal/eval-run-store.d.ts.map +1 -1
  503. package/dist/internal/eval-run-store.js +7 -7
  504. package/dist/internal/eval-runner.js +14 -14
  505. package/dist/internal/evals-client.js +4 -4
  506. package/dist/internal/event-log.js +8 -8
  507. package/dist/internal/event-mapper.d.ts +18 -0
  508. package/dist/internal/event-mapper.d.ts.map +1 -1
  509. package/dist/internal/event-mapper.js +34 -2
  510. package/dist/internal/filesystem/format.d.ts.map +1 -1
  511. package/dist/internal/filesystem/format.js +6 -3
  512. package/dist/internal/filesystem/scratch.js +3 -3
  513. package/dist/internal/filesystem/tools.d.ts.map +1 -1
  514. package/dist/internal/filesystem/tools.js +7 -7
  515. package/dist/internal/filesystem/walk.d.ts +7 -4
  516. package/dist/internal/filesystem/walk.d.ts.map +1 -1
  517. package/dist/internal/filesystem/walk.js +35 -12
  518. package/dist/internal/framework-file-storage.d.ts +6 -2
  519. package/dist/internal/framework-file-storage.d.ts.map +1 -1
  520. package/dist/internal/framework-file-storage.js +91 -2
  521. package/dist/internal/framework-storage-selection.d.ts +0 -6
  522. package/dist/internal/framework-storage-selection.d.ts.map +1 -1
  523. package/dist/internal/framework-storage-selection.js +2 -11
  524. package/dist/internal/github-fanout.js +3 -3
  525. package/dist/internal/guest-network.js +4 -4
  526. package/dist/internal/host-files.js +1 -1
  527. package/dist/internal/host-kv.js +2 -2
  528. package/dist/internal/hosted-admission-adapter.d.ts +5 -0
  529. package/dist/internal/hosted-admission-adapter.d.ts.map +1 -1
  530. package/dist/internal/hosted-catch-protocol.d.ts.map +1 -1
  531. package/dist/internal/hosted-catch-protocol.js +2 -4
  532. package/dist/internal/hosted-catch.js +1 -1
  533. package/dist/internal/hosted-delivery-protocol.d.ts +46 -0
  534. package/dist/internal/hosted-delivery-protocol.d.ts.map +1 -1
  535. package/dist/internal/hosted-delivery-protocol.js +126 -9
  536. package/dist/internal/hosted-delivery.d.ts.map +1 -1
  537. package/dist/internal/hosted-delivery.js +209 -64
  538. package/dist/internal/hosted-execution-diag.js +3 -3
  539. package/dist/internal/hosted-execution-latency.d.ts +80 -0
  540. package/dist/internal/hosted-execution-latency.d.ts.map +1 -0
  541. package/dist/internal/hosted-execution-latency.js +220 -0
  542. package/dist/internal/hosting.d.ts +5 -5
  543. package/dist/internal/hosting.d.ts.map +1 -1
  544. package/dist/internal/hosting.js +5 -6
  545. package/dist/internal/http-channel-define.d.ts +11 -0
  546. package/dist/internal/http-channel-define.d.ts.map +1 -0
  547. package/dist/internal/http-channel-define.js +18 -0
  548. package/dist/internal/http-channel.d.ts +2 -3
  549. package/dist/internal/http-channel.d.ts.map +1 -1
  550. package/dist/internal/http-channel.js +3 -4
  551. package/dist/internal/http-control-plane-session.d.ts +7 -3
  552. package/dist/internal/http-control-plane-session.d.ts.map +1 -1
  553. package/dist/internal/http-control-plane-session.js +22 -10
  554. package/dist/internal/incoming-headers-to-fetch.d.ts +10 -0
  555. package/dist/internal/incoming-headers-to-fetch.d.ts.map +1 -0
  556. package/dist/internal/incoming-headers-to-fetch.js +41 -0
  557. package/dist/internal/init-interview.js +7 -7
  558. package/dist/internal/init-project.d.ts.map +1 -1
  559. package/dist/internal/init-project.js +18 -14
  560. package/dist/internal/init-scaffold.js +1 -1
  561. package/dist/internal/inline-stdio-mcp.js +2 -2
  562. package/dist/internal/install-cursor-skills.js +10 -10
  563. package/dist/internal/json-schema.js +1 -1
  564. package/dist/internal/local-control-plane.d.ts.map +1 -1
  565. package/dist/internal/local-control-plane.js +3 -3
  566. package/dist/internal/local-env.js +3 -3
  567. package/dist/internal/log-ring.js +1 -1
  568. package/dist/internal/logs-client.js +1 -1
  569. package/dist/internal/mcp-endpoint.js +8 -8
  570. package/dist/internal/mcp-host.js +4 -4
  571. package/dist/internal/mcp-oauth-on-demand.js +3 -3
  572. package/dist/internal/mcp-oauth.js +5 -5
  573. package/dist/internal/net.js +2 -2
  574. package/dist/internal/otel/config.js +3 -3
  575. package/dist/internal/otel/runtime.js +13 -13
  576. package/dist/internal/peer-connections.js +2 -2
  577. package/dist/internal/platform-schedule-sync.js +1 -1
  578. package/dist/internal/platform-timers.js +1 -1
  579. package/dist/internal/playground/static.js +2 -2
  580. package/dist/internal/playground/toolchain.js +2 -2
  581. package/dist/internal/playground-proxy.js +3 -3
  582. package/dist/internal/process-memory-telemetry.js +1 -1
  583. package/dist/internal/reminder-runner.d.ts.map +1 -1
  584. package/dist/internal/reminder-runner.js +7 -7
  585. package/dist/internal/reminder-store.js +1 -1
  586. package/dist/internal/request-error-status.d.ts.map +1 -1
  587. package/dist/internal/request-error-status.js +9 -0
  588. package/dist/internal/resolved-connections.js +8 -8
  589. package/dist/internal/result-output.d.ts +14 -2
  590. package/dist/internal/result-output.d.ts.map +1 -1
  591. package/dist/internal/result-output.js +45 -2
  592. package/dist/internal/router.js +4 -4
  593. package/dist/internal/run-client.js +2 -2
  594. package/dist/internal/schedule-runner.js +6 -6
  595. package/dist/internal/scm/pr-url.d.ts +3 -1
  596. package/dist/internal/scm/pr-url.d.ts.map +1 -1
  597. package/dist/internal/scm/pr-url.js +10 -2
  598. package/dist/internal/sdk-runner.d.ts.map +1 -1
  599. package/dist/internal/sdk-runner.js +14 -15
  600. package/dist/internal/serve-restart.js +1 -1
  601. package/dist/internal/server.d.ts.map +1 -1
  602. package/dist/internal/server.js +175 -126
  603. package/dist/internal/session-cost.js +3 -3
  604. package/dist/internal/session-engine.d.ts +34 -0
  605. package/dist/internal/session-engine.d.ts.map +1 -1
  606. package/dist/internal/session-engine.js +386 -184
  607. package/dist/internal/session-run-log.d.ts.map +1 -1
  608. package/dist/internal/session-run-log.js +4 -4
  609. package/dist/internal/session-store.d.ts +47 -3
  610. package/dist/internal/session-store.d.ts.map +1 -1
  611. package/dist/internal/session-store.js +198 -33
  612. package/dist/internal/sessions-client.js +3 -3
  613. package/dist/internal/skill-catalog.d.ts +28 -0
  614. package/dist/internal/skill-catalog.d.ts.map +1 -0
  615. package/dist/internal/skill-catalog.js +44 -0
  616. package/dist/internal/slack-thread-key.d.ts +7 -0
  617. package/dist/internal/slack-thread-key.d.ts.map +1 -0
  618. package/dist/internal/slack-thread-key.js +10 -0
  619. package/dist/internal/sleep.js +1 -1
  620. package/dist/internal/storage-coordinator.d.ts +17 -0
  621. package/dist/internal/storage-coordinator.d.ts.map +1 -1
  622. package/dist/internal/storage-coordinator.js +111 -11
  623. package/dist/internal/storage.d.ts +2 -0
  624. package/dist/internal/storage.d.ts.map +1 -0
  625. package/dist/internal/storage.js +1 -0
  626. package/dist/internal/store-mirror.js +4 -4
  627. package/dist/internal/terminal-style.js +2 -2
  628. package/dist/internal/tool-result.js +3 -3
  629. package/dist/internal/trajectory.js +7 -7
  630. package/dist/internal/turn-governor.js +2 -2
  631. package/dist/internal/turn-outbox.js +1 -1
  632. package/dist/internal/update-check.js +2 -2
  633. package/dist/internal/v2-hosting.d.ts +9 -0
  634. package/dist/internal/v2-hosting.d.ts.map +1 -1
  635. package/dist/internal/v2-hosting.js +10 -0
  636. package/dist/internal/workspace.d.ts +13 -10
  637. package/dist/internal/workspace.d.ts.map +1 -1
  638. package/dist/internal/workspace.js +17 -16
  639. package/dist/kv/memory-kv.d.ts +6 -4
  640. package/dist/kv/memory-kv.d.ts.map +1 -1
  641. package/dist/kv/memory-kv.js +9 -7
  642. package/dist/kv.d.ts +4 -7
  643. package/dist/kv.d.ts.map +1 -1
  644. package/dist/kv.js +4 -7
  645. package/dist/otel-public.d.ts +7 -0
  646. package/dist/otel-public.d.ts.map +1 -0
  647. package/dist/otel-public.js +5 -0
  648. package/dist/otel.d.ts +7 -2
  649. package/dist/otel.d.ts.map +1 -1
  650. package/dist/otel.js +7 -2
  651. package/dist/playground/assets/index-B1c1LeIf.js +67 -0
  652. package/dist/playground/assets/index-CK2LX3iD.css +1 -0
  653. package/dist/playground/index.html +2 -2
  654. package/dist/prompt.js +1 -1
  655. package/dist/result.d.ts +10 -4
  656. package/dist/result.d.ts.map +1 -1
  657. package/dist/result.js +9 -3
  658. package/dist/storage-backends/cursor-hosted-v2.js +2 -2
  659. package/dist/storage-backends/cursor-hosted.d.ts +5 -17
  660. package/dist/storage-backends/cursor-hosted.d.ts.map +1 -1
  661. package/dist/storage-backends/cursor-hosted.js +6 -20
  662. package/dist/storage-backends/file-kv.js +7 -7
  663. package/dist/storage.d.ts +20 -2
  664. package/dist/storage.d.ts.map +1 -1
  665. package/dist/storage.js +7 -6
  666. package/dist/types.d.ts +76 -11
  667. package/dist/types.d.ts.map +1 -1
  668. package/dist/types.js +12 -4
  669. package/docs/README.md +85 -152
  670. package/docs/building-with-agents.md +96 -86
  671. package/docs/deployment.md +118 -365
  672. package/docs/evals.md +147 -674
  673. package/docs/guides/agent-to-agent.md +126 -92
  674. package/docs/guides/bitbucket.md +250 -49
  675. package/docs/guides/cloud-agents.md +124 -67
  676. package/docs/guides/convert-automation.md +157 -148
  677. package/docs/guides/github.md +261 -246
  678. package/docs/guides/gitlab.md +250 -51
  679. package/docs/guides/grokbot-agents.md +117 -64
  680. package/docs/guides/improve.md +112 -59
  681. package/docs/guides/mcp-oauth.md +112 -122
  682. package/docs/guides/opentelemetry.md +106 -188
  683. package/docs/guides/slack.md +171 -192
  684. package/docs/guides/webhooks.md +155 -387
  685. package/docs/hillclimbing.md +102 -56
  686. package/docs/quickstart.md +45 -106
  687. package/docs/reference/channels.md +0 -16
  688. package/docs/reference/cli.md +2 -16
  689. package/docs/reference/connections.md +3 -5
  690. package/docs/reference/evals.md +298 -0
  691. package/docs/reference/extensions.md +128 -200
  692. package/docs/reference/hooks.md +34 -36
  693. package/docs/reference/http-api.md +5 -5
  694. package/docs/reference/playground.md +2 -2
  695. package/docs/reference/project-layout.md +3 -4
  696. package/docs/reference/sessions.md +5 -4
  697. package/docs/reference/subagents.md +2 -4
  698. package/docs/reference/tools.md +2 -5
  699. package/docs/templates/thermo-quality-review.md +80 -0
  700. package/docs/templates/thermo-review.md +79 -0
  701. package/docs/troubleshooting.md +98 -68
  702. package/package.json +55 -37
  703. package/skills/framework-map/SKILL.md +2 -2
  704. package/skills/github/SKILL.md +21 -13
  705. package/skills/otel/SKILL.md +8 -18
  706. package/src/bin/agent-serve.ts +115 -72
  707. package/src/channels/bitbucket/api.ts +8 -8
  708. package/src/channels/bitbucket/binding.ts +4 -4
  709. package/src/channels/bitbucket/bitbucket-channel.ts +1 -1
  710. package/src/channels/bitbucket/bitbucket-webhook.ts +1 -1
  711. package/src/channels/bitbucket/checks.ts +3 -4
  712. package/src/channels/bitbucket/cursor-account.ts +1 -1
  713. package/src/channels/bitbucket/events.ts +1 -1
  714. package/src/channels/change-monitors/change-monitors-channel.ts +2 -2
  715. package/src/channels/checks.ts +5 -4
  716. package/src/channels/deployments/deployments-channel.ts +1 -1
  717. package/src/channels/github/api.ts +1 -1
  718. package/src/channels/github/checks.ts +1 -1
  719. package/src/channels/github/cursor-account.ts +3 -3
  720. package/src/channels/github/defaults.ts +8 -4
  721. package/src/channels/github/events.ts +1 -1
  722. package/src/channels/github/forward.ts +8 -8
  723. package/src/channels/github/github-channel.ts +48 -21
  724. package/src/channels/github/progress.ts +7 -2
  725. package/src/channels/github/state.ts +6 -0
  726. package/src/channels/github/types.ts +6 -0
  727. package/src/channels/gitlab/binding.ts +4 -4
  728. package/src/channels/gitlab/checks.ts +3 -4
  729. package/src/channels/gitlab/cursor-account.ts +1 -1
  730. package/src/channels/gitlab/events.ts +1 -1
  731. package/src/channels/gitlab/gitlab-channel.ts +1 -1
  732. package/src/channels/gitlab/gitlab-webhook.ts +1 -1
  733. package/src/channels/gitlab/replay.ts +2 -2
  734. package/src/channels/origin/binding.ts +6 -3
  735. package/src/channels/origin/checks.ts +27 -17
  736. package/src/channels/origin/cursor-account.ts +1 -1
  737. package/src/channels/origin/defaults.ts +5 -1
  738. package/src/channels/origin/events.ts +1 -1
  739. package/src/channels/origin/origin-channel.ts +2 -1
  740. package/src/channels/origin/origin-webhook.ts +2 -2
  741. package/src/channels/slack/agentic-delivery.ts +661 -0
  742. package/src/channels/slack/agentic-posted.ts +148 -0
  743. package/src/channels/slack/agentic-signals.ts +248 -0
  744. package/src/channels/slack/api.ts +51 -11
  745. package/src/channels/slack/approvals.ts +1 -1
  746. package/src/channels/slack/attachments.ts +1 -1
  747. package/src/channels/slack/auth.ts +3 -1
  748. package/src/channels/slack/blocks.ts +3 -3
  749. package/src/channels/slack/bot-mentions.ts +5 -7
  750. package/src/channels/slack/channel-watch.ts +1 -1
  751. package/src/channels/slack/cli-project.ts +3 -3
  752. package/src/channels/slack/defaults.ts +109 -37
  753. package/src/channels/slack/dispatch.ts +419 -168
  754. package/src/channels/slack/doctor.ts +1 -1
  755. package/src/channels/slack/eval-directive.ts +1 -1
  756. package/src/channels/slack/external-policy.ts +15 -2
  757. package/src/channels/slack/footer.ts +108 -0
  758. package/src/channels/slack/index.ts +2 -0
  759. package/src/channels/slack/interactive.ts +4 -2
  760. package/src/channels/slack/live-delivery.ts +23 -7
  761. package/src/channels/slack/log.ts +1 -1
  762. package/src/channels/slack/manifest.ts +1 -1
  763. package/src/channels/slack/nudge-carrier.ts +1 -1
  764. package/src/channels/slack/nudge-store.ts +2 -2
  765. package/src/channels/slack/paint-start.ts +93 -0
  766. package/src/channels/slack/placeholder.ts +366 -0
  767. package/src/channels/slack/progress-delivery.ts +14 -1
  768. package/src/channels/slack/reasoning-chip.ts +48 -0
  769. package/src/channels/slack/recording-sink.ts +176 -0
  770. package/src/channels/slack/reply-options.ts +71 -15
  771. package/src/channels/slack/setup.ts +1 -1
  772. package/src/channels/slack/slack-channel.ts +81 -14
  773. package/src/channels/slack/socket-mode.ts +2 -2
  774. package/src/channels/slack/thread-context.ts +5 -5
  775. package/src/channels/slack/tool-approval-events.ts +54 -38
  776. package/src/channels/slack/tool-cards.ts +1 -1
  777. package/src/channels/slack/tool-chip.ts +36 -0
  778. package/src/channels/slack/types.ts +47 -7
  779. package/src/channels/slack/upload.ts +142 -0
  780. package/src/channels.ts +12 -30
  781. package/src/dashboard-session-url.ts +32 -0
  782. package/src/evals/assertions.ts +19 -19
  783. package/src/evals/expect.ts +1 -1
  784. package/src/evals/judge.ts +1 -1
  785. package/src/evals/reporters.ts +8 -9
  786. package/src/evals/run-facts.ts +2 -2
  787. package/src/evals.ts +7 -10
  788. package/src/extensions/cursor-cloud-agents/extension.ts +1 -1
  789. package/src/extensions/cursor-cloud-agents/lib/backend.ts +3 -3
  790. package/src/extensions/cursor-cloud-agents/lib/fleet.ts +1 -1
  791. package/src/extensions/cursor-cloud-agents/lib/repos.ts +3 -3
  792. package/src/extensions/cursor-cloud-agents/lib/transcript.ts +3 -4
  793. package/src/extensions/cursor-cloud-agents/skills/handoff.md +3 -7
  794. package/src/extensions/cursor-cloud-agents/tools/list.ts +1 -1
  795. package/src/extensions/improve/extension.ts +4 -2
  796. package/src/extensions/improve/skills/yourself.ts +2 -2
  797. package/src/extensions/slack-communication/evals/harness.ts +728 -0
  798. package/src/extensions/slack-communication/evals/slack-communication.eval.ts +953 -0
  799. package/src/extensions/slack-communication/evals/slack-placeholder.eval.ts +194 -0
  800. package/src/extensions/slack-communication/extension.ts +45 -0
  801. package/src/extensions/slack-communication/skills/slack-voice.ts +59 -0
  802. package/src/extensions/slack-communication/tools/delete-message.ts +34 -0
  803. package/src/extensions/slack-communication/tools/edit-message.ts +42 -0
  804. package/src/extensions/slack-communication/tools/post-card.ts +28 -0
  805. package/src/extensions/slack-communication/tools/post-file.ts +85 -0
  806. package/src/extensions/slack-communication/tools/post-update.ts +41 -0
  807. package/src/extensions/slack-communication/tools/react.ts +33 -0
  808. package/src/extensions/slack-communication/tools/set-status.ts +21 -0
  809. package/src/files-backends/cursor-hosted.ts +502 -98
  810. package/src/files-backends/local-fs.ts +1 -1
  811. package/src/files.ts +15 -0
  812. package/src/filesystem.ts +182 -81
  813. package/src/index.ts +7 -36
  814. package/src/internal/advertise-tools.ts +6 -6
  815. package/src/internal/approval-gate.ts +1 -1
  816. package/src/internal/artifacts-store.ts +3 -3
  817. package/src/internal/as-of.ts +2 -2
  818. package/src/internal/authored-alias-hooks.ts +1 -1
  819. package/src/internal/authored-loaders.ts +2 -3
  820. package/src/internal/builtin-tools/reminders.ts +2 -2
  821. package/src/internal/chat-client.ts +5 -5
  822. package/src/internal/cli-ax.ts +172 -29
  823. package/src/internal/cli-bitbucket.ts +11 -11
  824. package/src/internal/cli-convert-automation.ts +2 -2
  825. package/src/internal/cli-cursor.ts +5 -16
  826. package/src/internal/cli-deploy.ts +389 -104
  827. package/src/internal/cli-docs.ts +5 -5
  828. package/src/internal/cli-github.ts +16 -19
  829. package/src/internal/cli-gitlab.ts +11 -11
  830. package/src/internal/cli-manifest.ts +1 -1
  831. package/src/internal/cli-mcp-oauth.ts +5 -7
  832. package/src/internal/cli-mcp.ts +3 -3
  833. package/src/internal/cli-skills.ts +2 -2
  834. package/src/internal/cli-slack.ts +5 -5
  835. package/src/internal/cloud-turn-cost.ts +1 -1
  836. package/src/internal/continuation-identity.ts +14 -9
  837. package/src/internal/conversation-mirror.ts +36 -3
  838. package/src/internal/convert-automation/convert-workflow.ts +27 -27
  839. package/src/internal/convert-automation/types.ts +9 -0
  840. package/src/internal/cursor/account-mcp.ts +48 -31
  841. package/src/internal/cursor/backend-client.ts +28 -17
  842. package/src/internal/cursor/credentials.ts +1 -1
  843. package/src/internal/cursor/hosted-store-secrets.ts +34 -0
  844. package/src/internal/cursor-account-mcp-auth.ts +9 -9
  845. package/src/internal/cursor-agent-template.ts +2 -0
  846. package/src/internal/cursor-deployment-relay.ts +10 -10
  847. package/src/internal/cursor-event-relay.ts +10 -10
  848. package/src/internal/cursor-relay-core.ts +2 -2
  849. package/src/internal/deploy-client.ts +266 -24
  850. package/src/internal/deploy-manifest.ts +46 -8
  851. package/src/internal/discovery/agent-config.ts +34 -0
  852. package/src/internal/discovery/agent.ts +14 -6
  853. package/src/internal/discovery/channels.ts +4 -4
  854. package/src/internal/discovery/connections.ts +4 -4
  855. package/src/internal/discovery/cursor-plugin.ts +12 -12
  856. package/src/internal/discovery/extension-overlay.ts +3 -3
  857. package/src/internal/discovery/extensions.ts +6 -6
  858. package/src/internal/discovery/info.ts +9 -9
  859. package/src/internal/discovery/instructions.ts +1 -1
  860. package/src/internal/discovery/project.ts +4 -4
  861. package/src/internal/discovery/services.ts +1 -1
  862. package/src/internal/discovery/tools.ts +1 -1
  863. package/src/internal/docs-site.ts +2 -2
  864. package/src/internal/env-file.ts +2 -2
  865. package/src/internal/eval-run-store.ts +7 -9
  866. package/src/internal/eval-runner.ts +20 -20
  867. package/src/internal/evals-client.ts +6 -6
  868. package/src/internal/event-log.ts +10 -10
  869. package/src/internal/event-mapper.ts +37 -2
  870. package/src/internal/filesystem/format.ts +11 -12
  871. package/src/internal/filesystem/scratch.ts +3 -3
  872. package/src/internal/filesystem/tools.ts +8 -8
  873. package/src/internal/filesystem/walk.ts +61 -16
  874. package/src/internal/framework-file-storage.ts +104 -4
  875. package/src/internal/framework-storage-selection.ts +2 -12
  876. package/src/internal/github-fanout.ts +4 -4
  877. package/src/internal/guest-network.ts +4 -4
  878. package/src/internal/host-files.ts +1 -1
  879. package/src/internal/host-kv.ts +2 -2
  880. package/src/internal/hosted-admission-adapter.ts +5 -0
  881. package/src/internal/hosted-catch-protocol.ts +3 -5
  882. package/src/internal/hosted-catch.ts +1 -1
  883. package/src/internal/hosted-delivery-protocol.ts +189 -14
  884. package/src/internal/hosted-delivery.ts +294 -81
  885. package/src/internal/hosted-execution-diag.ts +3 -3
  886. package/src/internal/hosted-execution-latency.ts +334 -0
  887. package/src/internal/hosting.ts +5 -6
  888. package/src/internal/http-channel-define.ts +27 -0
  889. package/src/internal/http-channel.ts +3 -4
  890. package/src/internal/http-control-plane-session.ts +24 -11
  891. package/src/internal/incoming-headers-to-fetch.ts +54 -0
  892. package/src/internal/init-interview.ts +7 -7
  893. package/src/internal/init-project.ts +18 -16
  894. package/src/internal/init-scaffold.ts +1 -1
  895. package/src/internal/inline-stdio-mcp.ts +2 -2
  896. package/src/internal/install-cursor-skills.ts +11 -11
  897. package/src/internal/json-schema.ts +1 -1
  898. package/src/internal/local-control-plane.ts +4 -5
  899. package/src/internal/local-env.ts +3 -3
  900. package/src/internal/log-ring.ts +1 -1
  901. package/src/internal/logs-client.ts +1 -1
  902. package/src/internal/mcp-endpoint.ts +10 -10
  903. package/src/internal/mcp-host.ts +9 -9
  904. package/src/internal/mcp-oauth-on-demand.ts +3 -3
  905. package/src/internal/mcp-oauth.ts +5 -5
  906. package/src/internal/net.ts +2 -2
  907. package/src/internal/otel/config.ts +3 -3
  908. package/src/internal/otel/runtime.ts +14 -14
  909. package/src/internal/peer-connections.ts +2 -2
  910. package/src/internal/platform-schedule-sync.ts +1 -1
  911. package/src/internal/platform-timers.ts +1 -1
  912. package/src/internal/playground/static.ts +2 -2
  913. package/src/internal/playground/toolchain.ts +2 -2
  914. package/src/internal/playground-proxy.ts +3 -3
  915. package/src/internal/process-memory-telemetry.ts +1 -1
  916. package/src/internal/reminder-runner.ts +8 -10
  917. package/src/internal/reminder-store.ts +1 -1
  918. package/src/internal/request-error-status.ts +9 -0
  919. package/src/internal/resolved-connections.ts +8 -8
  920. package/src/internal/result-output.ts +62 -5
  921. package/src/internal/router.ts +4 -4
  922. package/src/internal/run-client.ts +2 -2
  923. package/src/internal/schedule-runner.ts +6 -6
  924. package/src/internal/scm/pr-url.ts +11 -2
  925. package/src/internal/sdk-runner.ts +14 -28
  926. package/src/internal/serve-restart.ts +1 -1
  927. package/src/internal/server.ts +201 -140
  928. package/src/internal/session-cost.ts +3 -3
  929. package/src/internal/session-engine.ts +516 -244
  930. package/src/internal/session-run-log.ts +4 -6
  931. package/src/internal/session-store.ts +213 -39
  932. package/src/internal/sessions-client.ts +3 -3
  933. package/src/internal/skill-catalog.ts +69 -0
  934. package/src/internal/slack-thread-key.ts +11 -0
  935. package/src/internal/sleep.ts +1 -1
  936. package/src/internal/storage-coordinator.ts +118 -21
  937. package/src/internal/storage.ts +1 -0
  938. package/src/internal/store-mirror.ts +4 -4
  939. package/src/internal/terminal-style.ts +2 -2
  940. package/src/internal/tool-result.ts +3 -3
  941. package/src/internal/trajectory.ts +7 -7
  942. package/src/internal/turn-governor.ts +2 -2
  943. package/src/internal/turn-outbox.ts +1 -1
  944. package/src/internal/update-check.ts +2 -2
  945. package/src/internal/v2-hosting.ts +14 -0
  946. package/src/internal/workspace.ts +17 -17
  947. package/src/kv/memory-kv.ts +9 -7
  948. package/src/kv.ts +4 -7
  949. package/src/otel-public.ts +24 -0
  950. package/src/otel.ts +7 -2
  951. package/src/prompt.ts +1 -1
  952. package/src/result.ts +10 -8
  953. package/src/storage-backends/cursor-hosted-v2.ts +2 -2
  954. package/src/storage-backends/cursor-hosted.ts +6 -23
  955. package/src/storage-backends/file-kv.ts +7 -7
  956. package/src/storage.ts +22 -7
  957. package/src/types.ts +91 -17
  958. package/templates/agentic-owners/agent/channels/github.ts +3 -6
  959. package/templates/agentic-owners/agent/lib/github.ts +5 -5
  960. package/templates/agentic-owners/agent/lib/owners/decision.ts +13 -10
  961. package/templates/agentic-owners/agent/lib/owners/handles.ts +2 -2
  962. package/templates/agentic-owners/agent/lib/owners/match.ts +3 -3
  963. package/templates/agentic-owners/agent/lib/owners/matching.ts +1 -1
  964. package/templates/agentic-owners/agent/lib/owners/parse.ts +4 -9
  965. package/templates/agentic-owners/agent/lib/owners/prompt.ts +1 -1
  966. package/templates/agentic-owners/agent/lib/review.ts +37 -30
  967. package/templates/agentic-owners/evals/owners.eval.ts +2 -2
  968. package/templates/agentic-owners/package.json +1 -1
  969. package/templates/agents-md/agent/lib/collect.ts +16 -10
  970. package/templates/agents-md/agent/lib/config.ts +1 -1
  971. package/templates/agents-md/agent/tools/apply_agents.ts +10 -8
  972. package/templates/agents-md/package.json +1 -1
  973. package/templates/code-wiki/agent/channels/github.ts +4 -7
  974. package/templates/code-wiki/agent/lib/repos.ts +1 -1
  975. package/templates/code-wiki/agent/tools/apply_wiki.ts +3 -4
  976. package/templates/code-wiki/package.json +1 -1
  977. package/templates/demo/agent/lib/collect.ts +6 -2
  978. package/templates/demo/agent/lib/repos.ts +1 -1
  979. package/templates/demo/agent/tools/record_demo.ts +1 -1
  980. package/templates/demo/evals/demo.eval.ts +1 -5
  981. package/templates/demo/package.json +1 -1
  982. package/templates/grokbot-agents/package.json +1 -1
  983. package/templates/pr-autofixer/agent/channels/github.ts +16 -13
  984. package/templates/pr-autofixer/agent/lib/merge-watch.ts +2 -4
  985. package/templates/pr-autofixer/agent/lib/repos.ts +2 -2
  986. package/templates/pr-autofixer/agent/lib/webhook-routing.ts +1 -1
  987. package/templates/pr-autofixer/package.json +1 -1
  988. package/templates/security-help/agent/lib/repos.ts +1 -1
  989. package/templates/security-help/package.json +1 -1
  990. package/templates/security-reviewer/agent/lib/repos.ts +1 -1
  991. package/templates/security-reviewer/agent/tools/post_findings.ts +1 -3
  992. package/templates/security-reviewer/package.json +1 -1
  993. package/templates/thermo-quality-review/README.md +35 -0
  994. package/templates/thermo-quality-review/agent/agent.ts +8 -0
  995. package/templates/thermo-quality-review/agent/channels/github.ts +42 -0
  996. package/templates/thermo-quality-review/agent/instructions.md +43 -0
  997. package/templates/thermo-quality-review/agent/tools/post_findings.ts +70 -0
  998. package/templates/thermo-quality-review/evals/evals.config.ts +5 -0
  999. package/templates/thermo-quality-review/evals/review.eval.ts +62 -0
  1000. package/templates/thermo-quality-review/package.json +18 -0
  1001. package/templates/thermo-quality-review/tsconfig.json +12 -0
  1002. package/templates/thermo-review/README.md +35 -0
  1003. package/templates/thermo-review/agent/agent.ts +8 -0
  1004. package/templates/thermo-review/agent/channels/github.ts +42 -0
  1005. package/templates/thermo-review/agent/instructions.md +40 -0
  1006. package/templates/thermo-review/agent/tools/post_findings.ts +70 -0
  1007. package/templates/thermo-review/evals/evals.config.ts +5 -0
  1008. package/templates/thermo-review/evals/review.eval.ts +53 -0
  1009. package/templates/thermo-review/package.json +18 -0
  1010. package/templates/thermo-review/tsconfig.json +12 -0
  1011. package/templates/triage/agent/lib/actuate.ts +26 -41
  1012. package/templates/triage/agent/lib/parse-queue-event.ts +2 -1
  1013. package/templates/triage/agent/lib/verify-webhook.ts +10 -5
  1014. package/templates/triage/agent/tools/record_triage.ts +1 -4
  1015. package/templates/triage/package.json +1 -1
  1016. package/dist/client.d.ts +0 -14
  1017. package/dist/client.d.ts.map +0 -1
  1018. package/dist/client.js +0 -12
  1019. package/dist/docs/assets/app.Cr-wVbnB.js +0 -1
  1020. package/dist/docs/assets/building-with-agents.md.D0KbSkJn.js +0 -13
  1021. package/dist/docs/assets/building-with-agents.md.D0KbSkJn.lean.js +0 -1
  1022. package/dist/docs/assets/chunks/@localSearchIndexroot.CFVQ4S17.js +0 -1
  1023. package/dist/docs/assets/concepts.md.B4o63Gul.js +0 -1
  1024. package/dist/docs/assets/concepts.md.B4o63Gul.lean.js +0 -1
  1025. package/dist/docs/assets/deployment.md.JenwuCCB.js +0 -51
  1026. package/dist/docs/assets/deployment.md.JenwuCCB.lean.js +0 -1
  1027. package/dist/docs/assets/evals.md.C7JLjoEP.js +0 -211
  1028. package/dist/docs/assets/evals.md.C7JLjoEP.lean.js +0 -1
  1029. package/dist/docs/assets/guides_agent-to-agent.md.BDb0t1QV.js +0 -10
  1030. package/dist/docs/assets/guides_agent-to-agent.md.BDb0t1QV.lean.js +0 -1
  1031. package/dist/docs/assets/guides_bitbucket.md.DZPzmUjU.js +0 -10
  1032. package/dist/docs/assets/guides_bitbucket.md.DZPzmUjU.lean.js +0 -1
  1033. package/dist/docs/assets/guides_cloud-agents.md.BsloyHdY.js +0 -9
  1034. package/dist/docs/assets/guides_cloud-agents.md.BsloyHdY.lean.js +0 -1
  1035. package/dist/docs/assets/guides_convert-automation.md.B4sjlodG.js +0 -12
  1036. package/dist/docs/assets/guides_convert-automation.md.B4sjlodG.lean.js +0 -1
  1037. package/dist/docs/assets/guides_github.md.TZaTZlfz.js +0 -64
  1038. package/dist/docs/assets/guides_github.md.TZaTZlfz.lean.js +0 -1
  1039. package/dist/docs/assets/guides_gitlab.md.BmqwQfdG.js +0 -14
  1040. package/dist/docs/assets/guides_gitlab.md.BmqwQfdG.lean.js +0 -1
  1041. package/dist/docs/assets/guides_grokbot-agents.md.DyV-WArv.js +0 -9
  1042. package/dist/docs/assets/guides_grokbot-agents.md.DyV-WArv.lean.js +0 -1
  1043. package/dist/docs/assets/guides_human-in-the-loop.md.By1G2T3_.js +0 -28
  1044. package/dist/docs/assets/guides_human-in-the-loop.md.By1G2T3_.lean.js +0 -1
  1045. package/dist/docs/assets/guides_improve.md.BGVk32bK.js +0 -14
  1046. package/dist/docs/assets/guides_improve.md.BGVk32bK.lean.js +0 -1
  1047. package/dist/docs/assets/guides_mcp-oauth.md.Dp6cDP7f.js +0 -28
  1048. package/dist/docs/assets/guides_mcp-oauth.md.Dp6cDP7f.lean.js +0 -1
  1049. package/dist/docs/assets/guides_opentelemetry.md.SCRMskno.js +0 -26
  1050. package/dist/docs/assets/guides_opentelemetry.md.SCRMskno.lean.js +0 -1
  1051. package/dist/docs/assets/guides_slack.md.D4RVMM4G.js +0 -38
  1052. package/dist/docs/assets/guides_slack.md.D4RVMM4G.lean.js +0 -1
  1053. package/dist/docs/assets/guides_webhooks.md.CJK484ex.js +0 -225
  1054. package/dist/docs/assets/guides_webhooks.md.CJK484ex.lean.js +0 -1
  1055. package/dist/docs/assets/hillclimbing.md.BOiVo1tf.js +0 -4
  1056. package/dist/docs/assets/hillclimbing.md.BOiVo1tf.lean.js +0 -1
  1057. package/dist/docs/assets/index.md.DD9Q2XuJ.js +0 -5
  1058. package/dist/docs/assets/index.md.DD9Q2XuJ.lean.js +0 -1
  1059. package/dist/docs/assets/quickstart.md.DdQOF7Y8.lean.js +0 -1
  1060. package/dist/docs/assets/reference_extensions.md.ZAVUyuEX.js +0 -62
  1061. package/dist/docs/assets/reference_extensions.md.ZAVUyuEX.lean.js +0 -1
  1062. package/dist/docs/assets/reference_result.md.BK5SxDrf.js +0 -19
  1063. package/dist/docs/assets/reference_result.md.BK5SxDrf.lean.js +0 -1
  1064. package/dist/docs/assets/scaffolding-agents.md.Kctn3OVb.js +0 -1
  1065. package/dist/docs/assets/scaffolding-agents.md.Kctn3OVb.lean.js +0 -1
  1066. package/dist/docs/assets/skills_create-agent.md.Q3h6Je-e.js +0 -8
  1067. package/dist/docs/assets/skills_create-agent.md.Q3h6Je-e.lean.js +0 -1
  1068. package/dist/docs/assets/skills_debug.md.CVjCXMFF.js +0 -1
  1069. package/dist/docs/assets/skills_debug.md.CVjCXMFF.lean.js +0 -1
  1070. package/dist/docs/assets/skills_deploy.md.CWqi_ZxW.js +0 -35
  1071. package/dist/docs/assets/skills_deploy.md.CWqi_ZxW.lean.js +0 -1
  1072. package/dist/docs/assets/skills_evals.md.DFxYPErF.js +0 -25
  1073. package/dist/docs/assets/skills_evals.md.DFxYPErF.lean.js +0 -1
  1074. package/dist/docs/assets/skills_framework-map.md.BxLSOhSY.js +0 -1
  1075. package/dist/docs/assets/skills_framework-map.md.BxLSOhSY.lean.js +0 -1
  1076. package/dist/docs/assets/skills_github.md.hgFX_oKY.js +0 -16
  1077. package/dist/docs/assets/skills_github.md.hgFX_oKY.lean.js +0 -1
  1078. package/dist/docs/assets/skills_hillclimb.md.B_zJerxA.js +0 -7
  1079. package/dist/docs/assets/skills_hillclimb.md.B_zJerxA.lean.js +0 -1
  1080. package/dist/docs/assets/skills_index.md.DL7EHaQ-.js +0 -1
  1081. package/dist/docs/assets/skills_index.md.DL7EHaQ-.lean.js +0 -1
  1082. package/dist/docs/assets/skills_mcp-auth.md.DGvFP3HE.js +0 -18
  1083. package/dist/docs/assets/skills_mcp-auth.md.DGvFP3HE.lean.js +0 -1
  1084. package/dist/docs/assets/skills_otel.md.B5Ddv1xH.js +0 -8
  1085. package/dist/docs/assets/skills_otel.md.B5Ddv1xH.lean.js +0 -1
  1086. package/dist/docs/assets/skills_setup-slack.md.BBgx8lUz.js +0 -20
  1087. package/dist/docs/assets/skills_setup-slack.md.BBgx8lUz.lean.js +0 -1
  1088. package/dist/docs/assets/storage.md.BUrhJ-Zz.js +0 -30
  1089. package/dist/docs/assets/storage.md.BUrhJ-Zz.lean.js +0 -1
  1090. package/dist/docs/assets/templates_agents-md.md.CXSMZljE.js +0 -2
  1091. package/dist/docs/assets/templates_agents-md.md.CXSMZljE.lean.js +0 -1
  1092. package/dist/docs/assets/templates_code-wiki.md.CDYZIBFN.js +0 -2
  1093. package/dist/docs/assets/templates_code-wiki.md.CDYZIBFN.lean.js +0 -1
  1094. package/dist/docs/assets/templates_demo.md.BeQX9V3H.js +0 -4
  1095. package/dist/docs/assets/templates_demo.md.BeQX9V3H.lean.js +0 -1
  1096. package/dist/docs/assets/templates_grokbot-agents.md.c1s6Flp9.js +0 -3
  1097. package/dist/docs/assets/templates_grokbot-agents.md.c1s6Flp9.lean.js +0 -1
  1098. package/dist/docs/assets/templates_security-help.md.C3Ny_Qr2.js +0 -4
  1099. package/dist/docs/assets/templates_security-help.md.C3Ny_Qr2.lean.js +0 -1
  1100. package/dist/docs/assets/troubleshooting.md.CYEAO9bM.js +0 -1
  1101. package/dist/docs/assets/troubleshooting.md.CYEAO9bM.lean.js +0 -1
  1102. package/dist/docs/concepts.html +0 -27
  1103. package/dist/docs/concepts.md +0 -166
  1104. package/dist/docs/design/filesystem.md +0 -376
  1105. package/dist/docs/design/runtime-abstraction.md +0 -1756
  1106. package/dist/docs/guides/human-in-the-loop.html +0 -54
  1107. package/dist/docs/guides/human-in-the-loop.md +0 -126
  1108. package/dist/docs/reference/result.html +0 -45
  1109. package/dist/docs/reference/result.md +0 -89
  1110. package/dist/docs/scaffolding-agents.html +0 -27
  1111. package/dist/docs/scaffolding-agents.md +0 -130
  1112. package/dist/docs/skills/create-agent.html +0 -34
  1113. package/dist/docs/skills/create-agent.md +0 -160
  1114. package/dist/docs/skills/debug.html +0 -27
  1115. package/dist/docs/skills/debug.md +0 -36
  1116. package/dist/docs/skills/deploy.html +0 -61
  1117. package/dist/docs/skills/deploy.md +0 -161
  1118. package/dist/docs/skills/evals.html +0 -51
  1119. package/dist/docs/skills/evals.md +0 -137
  1120. package/dist/docs/skills/framework-map.html +0 -27
  1121. package/dist/docs/skills/framework-map.md +0 -99
  1122. package/dist/docs/skills/github.html +0 -42
  1123. package/dist/docs/skills/github.md +0 -93
  1124. package/dist/docs/skills/hillclimb.html +0 -33
  1125. package/dist/docs/skills/hillclimb.md +0 -55
  1126. package/dist/docs/skills/index.html +0 -27
  1127. package/dist/docs/skills/index.md +0 -21
  1128. package/dist/docs/skills/mcp-auth.html +0 -44
  1129. package/dist/docs/skills/mcp-auth.md +0 -76
  1130. package/dist/docs/skills/otel.html +0 -34
  1131. package/dist/docs/skills/otel.md +0 -53
  1132. package/dist/docs/skills/setup-slack.html +0 -46
  1133. package/dist/docs/skills/setup-slack.md +0 -141
  1134. package/dist/docs/storage.html +0 -56
  1135. package/dist/docs/storage.md +0 -167
  1136. package/dist/docs/templates/agents-md.html +0 -28
  1137. package/dist/docs/templates/agents-md.md +0 -105
  1138. package/dist/docs/templates/code-wiki.html +0 -28
  1139. package/dist/docs/templates/code-wiki.md +0 -91
  1140. package/dist/docs/templates/demo.html +0 -30
  1141. package/dist/docs/templates/demo.md +0 -80
  1142. package/dist/docs/templates/grokbot-agents.html +0 -29
  1143. package/dist/docs/templates/grokbot-agents.md +0 -48
  1144. package/dist/docs/templates/security-help.html +0 -30
  1145. package/dist/docs/templates/security-help.md +0 -65
  1146. package/dist/internal/tenant-slack/relay.d.ts +0 -75
  1147. package/dist/internal/tenant-slack/relay.d.ts.map +0 -1
  1148. package/dist/internal/tenant-slack/relay.js +0 -148
  1149. package/dist/playground/assets/index-Bhxzrcf6.css +0 -1
  1150. package/dist/playground/assets/index-CqLX5uF3.js +0 -67
  1151. package/docs/concepts.md +0 -171
  1152. package/docs/design/filesystem.md +0 -376
  1153. package/docs/design/runtime-abstraction.md +0 -1756
  1154. package/docs/guides/human-in-the-loop.md +0 -131
  1155. package/docs/reference/result.md +0 -94
  1156. package/docs/scaffolding-agents.md +0 -135
  1157. package/docs/skills/index.md +0 -26
  1158. package/docs/storage.md +0 -172
  1159. package/docs/templates/agents-md.md +0 -110
  1160. package/docs/templates/code-wiki.md +0 -96
  1161. package/docs/templates/demo.md +0 -85
  1162. package/docs/templates/grokbot-agents.md +0 -53
  1163. package/docs/templates/security-help.md +0 -70
  1164. package/src/client.ts +0 -23
  1165. package/src/internal/tenant-slack/relay.ts +0 -203
  1166. package/templates/pr-autofixer/agent/storage.ts +0 -7
@@ -1,778 +1,251 @@
1
1
  # Evals
2
2
 
3
- An eval sends a fixed message to your agent and asserts over the
4
- trajectory it records: the turn completed, the right tool ran with the
5
- right input, the reply has the right shape. Evals are how you know a
6
- prompt tweak helped, a refactor didn't regress the agent, and last
7
- month's fix still holds.
8
-
9
- Nothing is mocked. The runner starts (or targets) a real agent server,
10
- drives sessions over the public API, and grades the events it gets
11
- back. The model runs and server tools execute, so
12
- [keep side effects out of eval sessions](#keep-side-effects-out-of-eval-sessions)
13
- before you point an eval at an agent that posts anywhere.
3
+ An eval sends a fixed input to the real agent and checks the resulting
4
+ trajectory: whether the turn succeeded, which tools ran, and what shape
5
+ the answer took. Use evals to protect behavior you already understand,
6
+ not to discover what the prompt should do.
14
7
 
15
- ## Evals, hooks, or hillclimbing?
8
+ Evals run real model turns and real tools. Guard external writes before
9
+ running a suite against an agent that can post, merge, or deploy.
16
10
 
17
- All three read the same session event stream. Pick by the question you
18
- are asking.
19
-
20
- | You want to | Use |
21
- | --- | --- |
22
- | Gate one fixed input's behavior, locally and in CI | Evals (this page) |
23
- | Observe every live session: metrics, audit, alerts | [Hooks](/docs/reference/hooks.md) |
24
- | Improve an agent one measured round at a time | [Hillclimbing](/docs/hillclimbing.md); each kept win lands an eval |
25
-
26
- [Hooks, channel events, or evals?](/docs/reference/hooks.md#hooks-channel-events-or-evals)
27
- has the side-by-side table.
28
-
29
- ### When not to write an eval
30
-
31
- - Test a server tool's own logic with
32
- `agent-sdk call <tool> --dir . --input '{...}'` or a unit test. No
33
- model turn, no credential.
34
- - Explore a prompt with `agent-sdk run --dir . --message "..."` and
35
- read the trajectory. Write the eval once you know which decision to
36
- gate.
37
- - Stop a bad turn while it runs with
38
- [`needsApproval`](/docs/reference/tools.md#gate-a-tool-on-human-approval)
39
- on the tool or [`defineResult`](/docs/reference/result.md). Evals grade
40
- after the fact.
41
-
42
- ## Write your first eval
43
-
44
- Evals live under the project-root `evals/` directory, a sibling of
45
- `agent/`. `agent/evals/` is silently ignored. Discovery loads every
46
- `.eval.ts` (or `.eval.js`) file under `evals/`, plus one config file.
47
-
48
- ```text
49
- my-agent/
50
- agent/
51
- agent.ts
52
- tools/inspect_pr.ts
53
- evals/
54
- evals.config.ts # required to run: maxConcurrency
55
- readiness.eval.ts # id: readiness
56
- prs.eval.ts # cases: prs/checkout, prs/search
57
- ```
11
+ ## Protect a tool decision
58
12
 
59
- An eval is a single `async test(t)`. You drive the agent with `t.send`
60
- and assert on the recorded run with the same `t`:
13
+ This smoke case asks for a PR verdict, requires the read-only inspection
14
+ tool, and fails if the agent tries to approve. The CLI reports all three
15
+ decisions together instead of stopping at the first miss.
61
16
 
62
17
  ```ts
63
18
  // evals/readiness.eval.ts
64
19
  import { defineEval, includes } from "@cursor/july/evals";
65
20
 
66
21
  export default defineEval({
67
- description: "Inspects a PR without approving it.",
68
22
  tags: ["smoke"],
69
- timeoutMs: 120_000,
70
23
  async test(t) {
71
24
  await t.send(
72
25
  "Is https://github.com/acme/checkout/pull/42 ready to approve?"
73
26
  );
27
+
74
28
  t.succeeded();
75
29
  t.calledTool("inspect_pr");
76
30
  t.notCalledTool("approve_pr");
77
- t.check(t.reply, includes(/ready|approve/i));
31
+ t.check(t.reply, includes(/ready|blocked|approve/i));
78
32
  },
79
33
  });
80
34
  ```
81
35
 
36
+ Evals live in the project-root `evals/` directory, beside `agent/`.
37
+ Add the required concurrency config once:
38
+
82
39
  ```ts
83
40
  // evals/evals.config.ts
84
41
  import { defineEvalConfig } from "@cursor/july/evals";
85
42
 
86
- export default defineEvalConfig({ maxConcurrency: 20 });
43
+ export default defineEvalConfig({
44
+ maxConcurrency: 20,
45
+ });
87
46
  ```
88
47
 
89
- Run it under Node 22.13 or newer (never Bun) with a Cursor credential
90
- in place; see [Credentials](#credentials):
91
-
92
48
  ```bash
93
49
  agent-sdk eval --dir . --list
94
- agent-sdk eval --dir . readiness
95
- ```
96
-
97
- ```text
98
- PASS readiness (14.2s) — Inspects a PR without approving it.
99
- ✓ succeeded
100
- ✓ calledTool(inspect_pr)
101
- ✓ notCalledTool(approve_pr)
102
- ✓ check(includes)
103
-
104
- 1 passed, 0 failed, 1 total
105
- artifacts: <project state directory>/evals/2026-09-11T15-02-11-402Z
106
- ```
107
-
108
- Every local run writes each case's assertions, inputs, tool calls, and
109
- `t.log` lines under that artifacts directory. Open
110
- `evals/<case-id>.json` there when a case fails; see
111
- [Where results land](#where-results-land).
112
-
113
- ## Name cases by path
114
-
115
- The file path is the eval's identity, so you don't author an id.
116
- `evals/builds/api.eval.ts` becomes `builds/api`. An `index` filename
117
- collapses to its directory: `evals/builds/index.eval.ts` becomes
118
- `builds`.
119
-
120
- One file can hold several datapoints through `cases`. Provide either
121
- `test` or `cases`, not both. Each case id becomes `<fileId>/<case.id>`:
122
-
123
- ```ts
124
- // evals/prs.eval.ts: prs/checkout, prs/search
125
- export default defineEval({
126
- tags: ["smoke", "prs"],
127
- cases: [
128
- {
129
- id: "checkout",
130
- description: "Checkout PR readiness.",
131
- async test(t) {
132
- await t.send(
133
- "Is https://github.com/acme/checkout/pull/42 ready to approve?"
134
- );
135
- t.succeeded();
136
- t.calledTool("inspect_pr");
137
- },
138
- },
139
- {
140
- id: "search",
141
- async test(t) {
142
- await t.send(
143
- "Check https://github.com/acme/search/pull/7 before approval."
144
- );
145
- t.succeeded();
146
- t.calledTool("inspect_pr");
147
- },
148
- },
149
- ],
150
- });
151
- ```
152
-
153
- Case ids are single path segments, unique within the file. A case can
154
- set its own `description`, `tags`, `timeoutMs`, `iterations`, `judge`,
155
- `reporters`, and `metadata`. A case-level value replaces the file-level
156
- one for that datapoint, except `metadata`, which merges with case keys
157
- winning, and `reporters`, which adds to the file's list. `metadata` is
158
- free-form data carried onto the result and every reporter.
159
-
160
- A file may instead export an array of `defineEval` calls to fan out
161
- over a dataset. Ids are then the file id plus a zero-padded index
162
- (`sql/0000`, `sql/0001`, ...); see [Load a dataset](#load-a-dataset).
163
- Prefer `cases` when datapoints are hand-written and deserve stable
164
- names.
165
-
166
- ### Iterations
167
-
168
- `iterations` (file or case, default `1`, cap `100`) runs a datapoint
169
- repeatedly. Discovery expands `iterations: 3` on case `nyc` to runnable
170
- ids `weather/nyc/1`, `weather/nyc/2`, and `weather/nyc/3`. The filter
171
- `weather/nyc` still selects all three. Each expanded case exposes
172
- `t.iteration` and `t.iterations`.
173
-
174
- `maxConcurrency` counts authored datapoints, not expanded iterations.
175
- Iterations of one datapoint share a concurrency slot and run in
176
- sequence, so a suite of 11 cases with 3 iterations each and
177
- `maxConcurrency: 20` has at most 11 cases in flight.
178
-
179
- ## Drive the agent with `t.send`
180
-
181
- `t.send(message, options?)` runs one turn and waits for it to settle:
182
- complete, park on an approval request, or fail. Several sends in one
183
- case share the session, which is how you write multi-turn evals.
184
-
185
- Each send resolves to a turn result: `message` (the assistant text),
186
- `sessionId`, `events`, `toolCalls` (tool names in order), `ok`, and
187
- `index`. The turn carries the same assertion vocabulary as `t`, scoped
188
- to that turn, so you can grade an intermediate turn before the next
189
- send overwrites `t.reply`. `turn.expectOk()` throws when the turn
190
- failed, for later steps that depend on it.
191
-
192
- Read the whole case with `t.reply` (last assistant text), `t.events`
193
- (every event so far), `t.turns` (settled turns, oldest first), and
194
- `t.sessionId`. `t.signal` aborts when the case hits its timeout; pass
195
- it to your own async work.
196
-
197
- Three options apply on the first send only, because they shape session
198
- creation:
199
-
200
- | Option | Effect |
201
- | --- | --- |
202
- | `workspaceFiles` | `{ path: contents }` seeded into the local session workspace. Prefer this over machine-local paths |
203
- | `workspaceDir` | Absolute harness cwd for the local runtime |
204
- | `cloud` | Per-session cloud options merged over the agent's static `cloud` config. Pin a fixture repo here for cloud evals instead of on the agent's default `cloud.repos`. On the cloud runtime, seeded files reach the agent as described under [Where does a turn run?](/docs/concepts.md#where-does-a-turn-run) |
205
-
206
- ```ts
207
- await t.send("Review pr/diff.patch and post findings.", {
208
- workspaceFiles: {
209
- "pr/diff.patch": [
210
- "diff --git a/app/routes/search.ts b/app/routes/search.ts",
211
- "+res.send(`<h1>Results for ${req.query.q}</h1>`);",
212
- ].join("\n"),
213
- },
214
- });
215
- ```
216
-
217
- ## Assert over the trajectory
218
-
219
- Assertions record; they never throw. One run reports every failure
220
- instead of dying on the first. Assertions on `t` read the whole run.
221
- Assertions on a turn read only that turn.
222
-
223
- | Gate | Checks |
224
- | --- | --- |
225
- | `t.succeeded()` | the run did not fail and is not parked on an unanswered approval |
226
- | `t.parked()` | the run cleanly parked on an unanswered approval request |
227
- | `t.messageIncludes(token)` | the joined assistant text matches a string or `RegExp` |
228
- | `t.calledTool(name, matcher?)` | a matching call to `name` happened |
229
- | `t.notCalledTool(name)` | no request for `name`, in any lifecycle state |
230
- | `t.loadedSkill(name)` | the agent opened `skills/<name>/SKILL.md` (read, grep, or shell `cat`) |
231
- | `t.toolOrder(names)` | tool requests appear in this relative order; extra calls allowed |
232
- | `t.usedNoTools()` | no tool calls at all |
233
- | `t.maxToolCalls(max)` | at most `max` tool calls |
234
- | `t.noFailedActions()` | no tool call reported an error |
235
- | `t.calledSubagent(name, matcher?)` | a matching subagent delegation happened |
236
- | `t.taggedArtifact(kind?, predicate?)` | at least one [artifact](/docs/reference/artifacts.md) was tagged |
237
- | `t.event(type, matcher?)` | at least one matching [event](/docs/reference/sessions.md#which-events-can-i-stream) of `type` |
238
- | `t.notEvent(type, matcher?)` | no matching event of `type` |
239
- | `t.eventOrder(matchers)` | matching event groups occur in this relative order |
240
- | `t.eventsSatisfy(label, predicate)` | your predicate over the typed event stream |
241
- | `t.check(value, expectation)` | any value, against a [builder](#grade-values-with-expectation-builders) |
242
- | `t.score(name, value)` | a 0-1 score you computed; soft until you add a bar |
243
-
244
- Three more assertions gate and return the matched fact. They stop the
245
- test body when nothing matches, without a duplicate execution error.
246
- `t.requireToolCall(name, matcher?)` returns the call so later code can
247
- read its `input` and `output`. `t.requireInputRequest(filter?)` returns
248
- the single pending approval request. `await t.require(value, expectation)`
249
- does the same for a value check.
250
-
251
- A case with no assertions passes when at least one turn completed. Add
252
- `t.succeeded()` and behavior gates anyway. They make the contract
253
- visible in review.
254
-
255
- ### What good cases assert
256
-
257
- Gate decisions and shape, not prose. Model wording varies run to run.
258
- Tool choice, tool avoidance, and output structure are the stable
259
- contract.
260
-
261
- 1. `t.succeeded()`: always, first.
262
- 2. The tool decision: `calledTool` for the intended path,
263
- `notCalledTool` for the likely wrong alternative. The pair is
264
- stronger than either alone.
265
- 3. Output shape: a regex for the contract (`/ready|blocked/i`, a JSON
266
- marker, a findings-block fence), never exact sentences.
267
- 4. For structured output, parse `t.reply` and check fields with
268
- `matches` or `satisfies` instead of substring-matching JSON.
269
-
270
- The common failure modes: asserting exact phrasing, packing more than
271
- about five gates into one case (split it), and cases that depend on
272
- live external state that drifts (pin the input).
273
-
274
- ### Narrow tool assertions with matchers
275
-
276
- With no matcher, `calledTool` is request-based: a requested call counts
277
- even before its result arrives. A matcher narrows it:
278
-
279
- ```ts
280
- t.calledTool("inspect_pr", { status: "completed" });
281
- t.calledTool("apply_agents", { input: { verdict: "update" } });
282
- t.calledTool("bash", { input: { command: /^gh pr view/ }, count: 1 });
283
- t.calledTool("read_file", {
284
- output: (value) => String(value).includes("TODO"),
285
- });
50
+ agent-sdk eval --dir . --tag smoke
286
51
  ```
287
52
 
288
- `input`, `output`, and `count` accept a literal, a `RegExp`, or a
289
- predicate. Object literals partial-deep-match, so `{ verdict: "update" }`
290
- matches arguments that also carry other keys. `status` is one of
291
- `completed`, `failed`, `pending`, or `rejected` (a human denied the
292
- approval). `calledSubagent` takes `{ output, status, count, callId }`.
293
- `event`, `notEvent`, and `eventOrder` take `{ data, count }`.
294
-
295
- ### Grade values with expectation builders
53
+ ## Check answer shape or quality
296
54
 
297
- `t.check(value, expectation)` grades any value: `t.reply`, a parsed
298
- JSON field, a tool's output.
299
-
300
- | Builder | Checks | Severity |
301
- | --- | --- | --- |
302
- | `includes(string \| RegExp)` | substring or match; structured values are stringified first | gate |
303
- | `equals(value)` | deep equality | gate |
304
- | `matches(schema)` | a Standard Schema (Zod, Valibot, ...) or anything with `safeParse` | gate |
305
- | `similarity(expected)` | normalized text similarity, 0-1 | soft |
306
- | `satisfies(predicate, label)` | your predicate; `label` is the failure detail | gate |
55
+ Prefer a deterministic shape check when the output has a contract. The
56
+ failure tells you which field was wrong, and the case remains stable
57
+ when the model changes its wording.
307
58
 
308
59
  ```ts
309
- import { matches, satisfies } from "@cursor/july/evals";
60
+ import { matches } from "@cursor/july/evals";
310
61
  import { z } from "zod";
311
62
 
312
63
  const verdict = JSON.parse(t.reply ?? "{}");
313
64
  t.check(
314
65
  verdict,
315
- matches(z.object({ ready: z.boolean(), blockers: z.array(z.string()) }))
316
- );
317
- t.check(
318
- verdict.blockers.length,
319
- satisfies((n) => (n as number) <= 3, "at most 3 blockers")
66
+ matches(
67
+ z.object({
68
+ ready: z.boolean(),
69
+ blockers: z.array(z.string()),
70
+ })
71
+ )
320
72
  );
321
73
  ```
322
74
 
323
- `normalizedSimilarity(actual, expected)` returns the same 0-1 score as
324
- `similarity`, for use with `t.score`.
325
-
326
- ### Record without gating
327
-
328
- - `t.metric(name, value)` records a structured score or label. It shows
329
- on the CLI result, the playground case card, JUnit output, and
330
- artifacts.
331
- - `t.log(message)` records a debug line, streamed under `--verbose`.
332
- - `t.skip(reason)` ends the case as skipped. Skipped cases report
333
- separately and never change the exit code. Call it before sending
334
- messages.
335
-
336
- ## Gates, soft scores, and verdicts
337
-
338
- Every assertion returns a handle, so severity rides on the assertion
339
- instead of a separate thresholds map:
75
+ Use a judge when correctness depends on meaning that a schema, regex, or
76
+ known value cannot capture:
340
77
 
341
78
  ```ts
342
- t.succeeded(); // gate (default)
343
- t.calledTool("get_weather").soft(); // tracked, never fails
344
- t.check(t.reply, similarity("Sunny, 72°F")).atLeast(0.8); // soft, with a bar
345
- t.judge.closedQA("cites a source").gate(0.8); // promoted to a gate
79
+ t.judge
80
+ .factuality("The lint step failed on src/sidebar.ts.")
81
+ .atLeast(0.8);
346
82
  ```
347
83
 
348
- - `.gate(threshold?)` is hard. A miss fails the case and `eval` exits 1.
349
- - `.soft(threshold?)` is tracked. With no threshold it never fails.
350
- - `.atLeast(threshold)` is soft with a bar. A miss marks the case
351
- `scored`.
352
-
353
- Each case ends with one verdict:
84
+ Judge checks are tracked scores until you give them a hard gate.
85
+ Configure the judge model in `evals.config.ts`. The
86
+ [Evals reference](/docs/reference/evals.md#judges) owns grader options and
87
+ severity rules.
354
88
 
355
- | Verdict | Meaning | Exit code |
356
- | --- | --- | --- |
357
- | `passed` | every gate passed and no soft bar was missed | 0 |
358
- | `failed` | a gate failed, or the test body threw | 1 |
359
- | `scored` | only soft bars were missed | 0, or 1 under `--strict` |
360
- | `skipped` | `t.skip(reason)`, or a judge with no credentials | 0 |
89
+ ## Test a conversation or approval
361
90
 
362
- The CLI prints soft misses as `~` and gate misses as `✗`. Start a new
363
- benchmark with `t.score("recall", recall)` and `.atLeast()` so its
364
- number reports for a while without blocking merges. Add `--strict`
365
- once the bars are trustworthy.
366
-
367
- ## Judge free-form output
368
-
369
- When wording matters and no regex captures it, `t.judge` grades with an
370
- LLM. The graders are `factuality(expected)`, `summarizes(expected)`,
371
- `closedQA(criteria)`, and `sql(expected)`. Each scores `t.reply` by
372
- default; pass `{ on }` to grade another value.
91
+ Several `t.send` calls in one case share a session. Assertions on a
92
+ returned turn inspect only that turn, while assertions on `t` inspect
93
+ the whole conversation.
373
94
 
374
95
  ```ts
375
- const summary = await t.send("Why did CI fail on PR 42?");
376
- t.judge.factuality("The lint step failed on src/sidebar.ts.").atLeast(0.7);
377
- t.judge.closedQA("names the failing step", { on: summary.message }).gate(1);
378
- ```
379
-
380
- Judge assertions are soft by default, so a judge never fails a build
381
- until you give it a bar with `.atLeast()` or promote it with `.gate()`.
382
- The recorded detail names the choice the judge made and its rationale.
383
-
384
- The judge model comes from `defineEvalConfig({ judge })`,
385
- `defineEval({ judge })`, a case-level `judge`, or a per-call
386
- `{ model }`. The nearest one wins. A judge call with no model
387
- configured fails the case. A judge that cannot reach a model (no
388
- credential) ends the case as `skipped`, unless a deterministic gate
389
- already failed.
96
+ const first = await t.send("Inspect PR 42.");
97
+ first.calledTool("inspect_pr");
390
98
 
391
- For a domain-specific judge whose verdict is not a single score,
392
- `t.judge.model(prompt)` sends a raw prompt to the same model and
393
- returns the reply. Record the parsed result with `t.score` or
394
- `t.check`. Anything derived from the agent under test is untrusted
395
- input to your prompt: wrap it with `fenceUntrusted` and include
396
- `EVAL_JUDGE_INJECTION_GUARD`, as the built-in graders do.
397
-
398
- ```ts
399
- import {
400
- EVAL_JUDGE_INJECTION_GUARD,
401
- fenceUntrusted,
402
- } from "@cursor/july/evals";
403
-
404
- const gold = ["XSS in search.ts", "open redirect in login.ts"];
405
- const reply = await t.judge.model(
406
- [
407
- "For each GOLD finding, answer whether SUBMISSION reports it.",
408
- "Reply with one line per finding: <index> YES|NO.",
409
- EVAL_JUDGE_INJECTION_GUARD,
410
- fenceUntrusted("GOLD", gold.map((g, i) => `${i + 1}. ${g}`).join("\n")),
411
- fenceUntrusted("SUBMISSION", t.reply ?? ""),
412
- ].join("\n\n")
413
- );
414
- const hits = reply.match(/\bYES\b/g)?.length ?? 0;
415
- t.score("recall", hits / gold.length).atLeast(0.5);
99
+ const followUp = await t.send("Now summarize only the blockers.");
100
+ followUp.usedNoTools();
101
+ t.check(followUp.message, includes(/blocker/i));
102
+ t.succeeded();
416
103
  ```
417
104
 
418
- ## Keep side effects out of eval sessions
419
-
420
- Eval sessions run the real agent, tools included. A reviewer that
421
- comments on GitHub or posts to Slack will do so from an eval unless
422
- the tool checks the session's purpose. Eval sessions carry
423
- `purpose: "eval"`; live traffic carries `"live"`. Branch on it in the
424
- tool, hook, or result handler that actuates:
105
+ For a tool that requires approval, the expected result is a parked turn
106
+ instead of a completed one:
425
107
 
426
108
  ```ts
427
- // agent/tools/post_findings.ts
428
- async execute({ findings }, ctx) {
429
- if (ctx.session.purpose === "eval") {
430
- return { posted: false, reason: "eval", count: findings.length };
431
- }
432
- // post the review
433
- }
434
- ```
435
-
436
- Return a shaped result instead of throwing, so the eval can still
437
- assert `t.calledTool("post_findings", { input: ... })` on the decision.
438
- The same check belongs in [hooks](/docs/reference/hooks.md) that meter or
439
- page and in [`defineResult`](/docs/reference/result.md) commits.
440
-
441
- ## Worked examples
442
-
443
- ### Multi-turn: grade each turn
444
-
445
- ```ts
446
- // evals/intro.eval.ts
447
- import { defineEval, includes, satisfies } from "@cursor/july/evals";
448
-
449
- export default defineEval({
450
- description: "Introduces itself once; a repeat mention gets a short ack.",
451
- async test(t) {
452
- const intro = await t.send("Meet Jenny! @Jenny introduce yourself.");
453
- intro.expectOk();
454
- t.check(intro.message, includes(/jenny/i));
455
-
456
- const repeat = await t.send("Meet, @Jenny!");
457
- t.succeeded();
458
- repeat.usedNoTools();
459
- t.check(
460
- repeat.message,
461
- satisfies((r) => (r as string).trim().length <= 280, "short ack")
462
- );
463
- t.check(
464
- repeat.message,
465
- satisfies((r) => !/what i can do/i.test(r as string), "no second intro")
466
- );
467
- },
109
+ await t.send("Apply the approved policy update.");
110
+ t.parked();
111
+ t.calledTool("apply_policy", {
112
+ input: { verdict: "update" },
468
113
  });
469
114
  ```
470
115
 
471
- `t.succeeded()` grades the whole session. `repeat.usedNoTools()` and the
472
- checks on `repeat.message` read only the second turn, even though
473
- `t.reply` now holds its text.
116
+ Pair an approval case with a safe branch that calls
117
+ `t.notCalledTool("apply_policy")`, so both sides of the decision stay
118
+ protected.
474
119
 
475
- ### Approvals: assert the parked decision
120
+ ## Pin realistic inputs
476
121
 
477
- For a tool with `needsApproval`, the turn parks instead of finishing.
478
- Gate on `t.parked()` and on the arguments the model chose:
122
+ A useful eval changes only when the agent changes. Freeze canonical chat
123
+ prompts, seed workspace evidence directly, and save webhook payloads
124
+ instead of depending on a developer's checkout or live external state.
479
125
 
480
126
  ```ts
481
- // evals/agents.eval.ts (one case; RULE and SLACK are fixture strings)
482
- {
483
- id: "update-rule",
484
- description: "A repeated billing rule parks the AGENTS.md write.",
485
- async test(t) {
486
- await t.send("Weekly AGENTS.md review. Read week/ and call apply_agents once.", {
487
- workspaceFiles: {
488
- "week/prs.md": RULE,
489
- "week/slack.md": SLACK,
490
- "week/tree/AGENTS.md.txt": "# API\n\nKeep handlers thin.\n",
491
- },
492
- });
493
- t.parked();
494
- t.calledTool("apply_agents", { input: { verdict: "update" } });
127
+ await t.send("Review pr/diff.patch and report blockers.", {
128
+ workspaceFiles: {
129
+ "pr/diff.patch": [
130
+ "diff --git a/app/routes/search.ts b/app/routes/search.ts",
131
+ "+res.send(`<h1>Results for ${req.query.q}</h1>`);",
132
+ ].join("\n"),
495
133
  },
496
- },
497
- ```
498
-
499
- `t.parked()` and `t.succeeded()` are exclusive: a parked run is a clean
500
- stop on an unanswered approval, not a completed one. Pair the parked
501
- case with a sibling that expects `verdict: "skip"` and `t.succeeded()`,
502
- so both branches stay pinned.
503
-
504
- ## Pin fixtures
505
-
506
- A fixed input is what makes an eval repeatable. Pick the fixture by the
507
- surface under test.
508
-
509
- | Agent surface | Fixture |
510
- | --- | --- |
511
- | Chat or domain assistant | One canonical prompt string, chosen once and frozen |
512
- | Tool-heavy | Run `agent-sdk call <tool>` first to pin what the tool returns, then freeze the prompt that triggers it |
513
- | GitHub webhook | `agent-sdk github replay <pr> --events '*' --dry-run --out fixtures/github` snapshots real payloads for offline replay ([GitHub guide](/docs/guides/github.md#test-with-github-replay)) |
514
- | PR reviewer with host preparation | Diff, metadata, and gold labels pinned to commit SHAs; keep any live PR matrix small |
515
- | Workspace-dependent | `workspaceFiles` on the first `t.send`, never developer-machine paths |
516
-
517
- Tag the fast, reliably passing core `smoke` and run `--tag smoke` in
518
- the inner loop. Leave slow or drift-prone cases untagged for explicit
519
- runs.
520
-
521
- ### Materialize API-backed fixtures
522
-
523
- An input that only points at external data (a pull request URL, a
524
- snapshot id, a pair of commit SHAs) is not self-contained. Fetch it once
525
- and commit the rendered fixture before you expand the suite:
526
-
527
- 1. Save the diff, metadata, and labels under `fixtures/` at pinned
528
- revisions.
529
- 2. Seed those files with `workspaceFiles`, or read them from the
530
- fixture directory.
531
- 3. Assert decisions and output shape against the saved evidence.
532
- 4. Keep a small `smoke` subset for any remaining live checks.
533
-
534
- `maxConcurrency` limits parallel datapoints, not the model or API
535
- fan-out inside one datapoint. Materialized fixtures keep a large suite
536
- from exhausting provider and GitHub rate limits.
537
-
538
- ### Load a dataset
539
-
540
- Read committed fixtures with `loadJson`, `loadJsonl`, and `loadYaml`
541
- from `@cursor/july/evals/loaders`. Relative paths resolve against the
542
- project root the runner discovered, not the cwd the CLI ran from. Eval
543
- files are ES modules, so top-level `await` can load a dataset and fan
544
- one file out over it:
545
-
546
- ```ts
547
- // evals/sql.eval.ts: sql/0000, sql/0001, ...
548
- import { defineEval, equals } from "@cursor/july/evals";
549
- import { loadYaml } from "@cursor/july/evals/loaders";
550
-
551
- const rows = await loadYaml<{ task: string; prompt: string; sql: string }[]>(
552
- "evals/data/cases.yaml"
553
- );
554
-
555
- export default rows.map((row) =>
556
- defineEval({
557
- description: row.task,
558
- async test(t) {
559
- await t.send(row.prompt);
560
- t.succeeded();
561
- t.check(t.reply, equals(row.sql));
562
- },
563
- })
564
- );
565
- ```
566
-
567
- ## Configure eval runs
568
-
569
- `evals/evals.config.ts` (or `.js`) holds project-wide defaults. It must
570
- set `maxConcurrency`. Each case issues real model requests, so
571
- concurrency is hard-capped at 200; the templates use 10.
572
- `eval --list` works without the file. Running a case does not.
573
-
574
- ```ts
575
- import { defineEvalConfig } from "@cursor/july/evals";
576
-
577
- export default defineEvalConfig({
578
- maxConcurrency: 20,
579
- timeoutMs: 180_000,
580
- judge: { model: "gpt-5.4-mini" },
581
134
  });
582
135
  ```
583
136
 
584
- | Option | Default | Meaning |
585
- | --- | --- | --- |
586
- | `maxConcurrency` | required | Datapoints in flight at once, 1-200 |
587
- | `timeoutMs` | `180_000` | Per-case timeout. Precedence: case or file `timeoutMs`, then `--timeout-ms`, then this value |
588
- | `judge` | unset | Default judge model for `t.judge.*` |
589
- | `reporters` | unset | Destinations that observe every case; `--skip-report` suppresses them |
590
- | `maxPlaygroundRuns` | `20` | Batches kept in playground history (cap 500). Counts `--prod` and `--url` batches, not the default local run |
591
-
592
- Reporters ship results somewhere; the runner still does the grading.
593
- `JUnit({ filePath, suiteName? })` writes JUnit XML and
594
- `Artifacts({ dir })` writes per-case files, both from
595
- `@cursor/july/evals/reporters`. A custom reporter is an object with any
596
- of `onRunStart`, `onEvalComplete`, and `onRunComplete`. A reporter that
597
- throws is logged and never fails the run. CI usually attaches the
598
- built-in two with `--junit` and `--artifacts` instead of `reporters`,
599
- so output paths stay with the pipeline, not the eval author.
600
-
601
- Playground batches survive restarts when the project has
602
- [storage](/docs/storage.md#eval-table). Otherwise they live in process
603
- memory until `serve` exits.
604
-
605
- ## Run evals from the CLI
137
+ For GitHub agents, snapshot a PR into committed fixtures:
606
138
 
607
139
  ```bash
608
- agent-sdk eval --dir . --list # discover only
609
- agent-sdk eval --dir . # run all
610
- agent-sdk eval --dir . builds/checkout # one datapoint
611
- agent-sdk eval --dir . builds search # several ids or prefixes
612
- agent-sdk eval --dir . --tag smoke --tag pull-request # any matching tag
613
- agent-sdk eval --dir . --verbose # t.log lines + reply snippets
614
- agent-sdk eval --dir . --timeout-ms 300000 # override the per-case timeout
140
+ agent-sdk github replay acme/checkout#42 \
141
+ --events '*' \
142
+ --dry-run \
143
+ --out fixtures/github
615
144
  ```
616
145
 
617
- Id filters use OR semantics. Each filter selects an exact id and its
618
- descendants: `builds` selects `builds`, `builds/checkout`, and every
619
- other case below that path. Repeated tags also use OR. With both ids
620
- and tags, a case must match both groups.
146
+ Keep a small, fast `smoke` set for every change. Put larger datasets and
147
+ drift-prone live cases behind an explicit selection. See
148
+ [Datasets and fixtures](/docs/reference/evals.md#datasets-and-fixtures) for
149
+ loaders and case expansion.
621
150
 
622
- By default `eval` boots a throwaway server with its own state root, so
623
- cases don't inherit your checkout's `AGENTS.md` and session state stays
624
- out of the project. Artifacts still land in the project state
625
- directory; see [Where results land](#where-results-land). `--slug`
626
- picks the target in a multi-agent directory.
151
+ ## Run and debug a regression suite
627
152
 
628
- `--url` runs the batch on a running server instead, the same way
629
- `--prod` does: that server discovers its own `evals/`, results land in
630
- its playground history, and the local-only flags (`--junit`,
631
- `--artifacts`, `--max-concurrency`, `--skip-report`) do not apply. See
632
- [Run evals in the playground or on a deployment](#run-evals-in-the-playground-or-on-a-deployment).
153
+ Run one case while iterating, then the smoke suite before review. A
154
+ failure artifact records the input, assertions, tool calls, and final
155
+ text, making it the first place to look before changing the prompt.
633
156
 
634
157
  ```bash
635
- agent-sdk eval --url http://127.0.0.1:3000/weather-agent \
636
- --bearer-token "$AGENT_TOKEN"
158
+ agent-sdk eval --dir . readiness
159
+ agent-sdk eval --dir . --tag smoke
160
+ agent-sdk eval --dir . --json
637
161
  ```
638
162
 
639
- See [CLI: eval](/docs/reference/cli.md#eval) for every flag.
640
-
641
- ### Credentials
642
-
643
- Model turns need a
644
- [Cursor credential](/docs/reference/cli.md#environment-variables):
645
- `CURSOR_API_KEY`, `CURSOR_SERVICE_ACCOUNT_KEY`, or a saved
646
- `agent-sdk login`. The judge uses the same one. `eval --list` needs
647
- none.
163
+ By default, results land under `evals/<stamp>/` in the project state
164
+ directory. Open `evals/<case-id>.json` inside that run directory for the
165
+ failed case. This artifact location is independent of `--state-root`;
166
+ pass `--artifacts <dir>` to choose another destination.
648
167
 
649
- ### Where results land
650
-
651
- Every local run writes artifacts to a timestamped directory under
652
- `evals/` in the project state directory, whatever `--state-root` says.
653
- `--artifacts <dir>` chooses the path and `--no-artifacts` skips them.
654
- The directory holds `summary.json`,
655
- `results.jsonl`, and `evals/<case-id>.json` with every assertion, the
656
- inputs, tool calls with arguments and output, the final text, and
657
- `t.log` lines. Start there when a case fails. `--out <file>` also
658
- writes the full results JSON to a path of your choice.
659
-
660
- The artifact does not include the session's event stream. Pass
661
- `--state-root <path>` to keep the ephemeral server's
662
- [session data](/docs/reference/sessions.md#where-does-the-agent-sdk-store-session-data)
663
- on disk when you need the raw events.
168
+ Model turns need a credential. Resolution checks `CURSOR_API_KEY`,
169
+ `CURSOR_API_KEY_FILE`, `CURSOR_SERVICE_ACCOUNT_KEY`, then a saved
170
+ `agent-sdk login`. `eval --list` only discovers cases and needs none.
664
171
 
665
172
  ## Run evals in CI
666
173
 
667
- Run the suite non-interactively, write JUnit for the CI annotations,
668
- and fail the job on a red gate:
174
+ Write machine-readable output and JUnit annotations, then let a failed
175
+ gate fail the job:
669
176
 
670
177
  ```bash
671
- # CURSOR_API_KEY comes from the CI secret store
178
+ # CURSOR_API_KEY comes from the CI secret store.
672
179
  agent-sdk eval --dir . --json --no-stream \
673
180
  --junit reports/evals.xml \
674
181
  --artifacts reports/evals \
675
182
  > reports/evals.json
676
183
  ```
677
184
 
678
- The exit code follows the
679
- [verdict table](#gates-soft-scores-and-verdicts); `2` means nothing
680
- matched the selection. `--max-concurrency` overrides the project
681
- setting, for example to run lower on a shared runner.
682
-
683
- The JSON on stdout carries the totals and one result per case:
684
-
685
- ```json
686
- {
687
- "ok": true,
688
- "passed": 1,
689
- "failed": 0,
690
- "scored": 0,
691
- "skipped": 0,
692
- "strict": false,
693
- "artifactsDir": "/work/my-agent/reports/evals",
694
- "results": [
695
- {
696
- "id": "readiness",
697
- "verdict": "passed",
698
- "ok": true,
699
- "assertions": [
700
- { "name": "succeeded", "passed": true },
701
- { "name": "calledTool(inspect_pr)", "passed": true }
702
- ],
703
- "sessionId": "ses_123",
704
- "inputs": ["Is https://github.com/acme/checkout/pull/42 ready to approve?"],
705
- "toolCalls": [{ "toolName": "inspect_pr", "isError": false }],
706
- "metrics": {},
707
- "logs": [],
708
- "durationMs": 12340
709
- }
710
- ]
711
- }
712
- ```
185
+ Run `--tag smoke` on pull requests and the full suite on a schedule when
186
+ cost or latency makes every-push coverage impractical. Use soft scores
187
+ for a new probabilistic benchmark until its threshold is trustworthy.
713
188
 
714
- Each result can also include `description`, `finalText`, `tools`,
715
- `error`, `skipReason`, `metadata`, `tags`, and tool `args` and `output`.
716
- A soft miss shows as `"severity": "soft"` with `score` and `threshold`
717
- on the assertion. This shape lets CI report the failed assertion
718
- without parsing terminal text.
189
+ The [CLI reference](/docs/reference/cli.md#eval) covers selectors, hosted
190
+ runs, exit codes, and JSON output.
719
191
 
720
- Keep CI green without weakening gates:
721
-
722
- - Run `--tag smoke` on every push and the full suite on a schedule.
723
- - For probabilistic behavior, use `iterations` and a soft bar instead
724
- of one hard gate.
192
+ ## Keep side effects out of eval sessions
725
193
 
726
- ## Run evals in the playground or on a deployment
194
+ Eval sessions carry `purpose: "eval"`. Check it at the deterministic
195
+ write boundary and return the decision without performing the external
196
+ action:
727
197
 
728
- Start the server, open the playground, and choose **Evals**. Run every
729
- case or one case, watch progress, and open the resulting session trace.
730
- Playground runs target the live server instead of an ephemeral one, so
731
- their sessions appear in the session list. One batch runs at a time.
198
+ ```ts
199
+ async execute({ findings }, ctx) {
200
+ if (ctx.session.purpose === "eval") {
201
+ return {
202
+ posted: false,
203
+ reason: "eval",
204
+ count: findings.length,
205
+ };
206
+ }
732
207
 
733
- ```bash
734
- agent-sdk serve --dir .
208
+ return await postFindings(findings);
209
+ }
735
210
  ```
736
211
 
737
- `--prod` (or `--url`) starts the same server-side batch on the team's
738
- hosted deployment (or the server you name), so results land in that
739
- server's playground history:
212
+ This preserves the tool call in the trajectory, so the eval can still
213
+ assert that the agent chose to post.
740
214
 
741
- ```bash
742
- agent-sdk eval --prod --slug vulnerability-scanner --tag deepsec
743
- # Eval ID: <evalId>
744
- # Playground: <deployment>/playground?view=evals&evalRunId=<evalId>
745
- agent-sdk eval status <evalId> --prod --slug vulnerability-scanner
746
- agent-sdk eval cancel <evalId> --prod --slug vulnerability-scanner
747
- ```
215
+ ## Evals, hooks, or hillclimbing?
748
216
 
749
- The CLI prints the Eval ID as soon as the batch is accepted. Pass
750
- `--no-wait` to return right away and poll with `eval status` later; it
751
- exits `3` while the batch is still running. Hosted history follows
752
- `maxPlaygroundRuns` and the persistence rule under
753
- [Configure eval runs](#configure-eval-runs). The HTTP surface is under
754
- [Playground eval routes](/docs/reference/http-api.md#playground-eval-routes).
217
+ Use an eval to gate one fixed input. Use a
218
+ [hook](/docs/reference/hooks.md) to observe every live session for metrics,
219
+ auditing, or alerts. Use [hillclimbing](/docs/hillclimbing.md) to decide
220
+ which source change improves a fixed set of inputs; every kept
221
+ hillclimb change should add an eval.
755
222
 
756
- ## Keep improvements with regression evals
223
+ ## Gates and scores
757
224
 
758
- Every [hillclimb](/docs/hillclimbing.md) round that keeps a change must
759
- land an eval that would have failed before the change. If you can't
760
- express the improvement as a gate (a `calledTool` shift, a bounded
761
- `maxToolCalls`, an output-shape check), the improvement is unverified,
762
- and it'll regress silently.
225
+ `t.succeeded()`, tool assertions, and deterministic checks are hard
226
+ gates by default. A failed gate fails the case. `.soft()` records a
227
+ measurement without blocking, while `.atLeast(threshold)` records a
228
+ score and marks a miss as `scored`.
229
+
230
+ Start with decisions and output shape: the intended tool, the tempting
231
+ wrong tool, and one structural check. Exact prose is rarely a stable
232
+ contract.
233
+
234
+ ## Keep improvements with regression evals
763
235
 
764
- The rule cuts the other way too: never weaken an existing gate to make
765
- a round pass. That's the freeze line moving, and it turns your
766
- regression suite into a list of checks that no longer protect anything.
236
+ Every kept improvement needs an eval that would have failed before the
237
+ change. A tool-choice gate, bounded `maxToolCalls`, or output-shape check
238
+ turns the improvement into a durable contract.
767
239
 
768
- ## What's next
240
+ Never weaken an existing gate to make a new implementation pass. That
241
+ moves the freeze line instead of proving the change.
769
242
 
770
- Continue with these pages:
243
+ ## Related
771
244
 
772
- - [Hillclimbing](/docs/hillclimbing.md): the loop evals make trustworthy
773
- - [Building agents with agents](/docs/building-with-agents.md): have a
774
- coding agent write the first suite
775
- - [GitHub guide](/docs/guides/github.md): deterministic webhook fixtures
776
- with `github replay`
777
- - [Sessions and streaming](/docs/reference/sessions.md): the events
778
- `t.events` contains
245
+ - [Evals reference](/docs/reference/evals.md): complete authoring and runner
246
+ contracts
247
+ - [`skills/evals/SKILL.md`](https://github.com/cursor/cursor/blob/main/packages/agent-serve/skills/evals/SKILL.md): author and seed
248
+ cases with a coding agent
249
+ - [Hillclimbing](/docs/hillclimbing.md): measure a change and lock the win
250
+ - [Sessions](/docs/reference/sessions.md): events available to trajectory
251
+ assertions