@cursor/july 0.1.108 → 0.1.111

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