@cursor/bdk 0.2.13 → 0.2.15

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 (322) hide show
  1. package/AGENTS.md +51 -52
  2. package/README.md +1 -1
  3. package/dist/bin/agent-sdk.js +0 -0
  4. package/dist/bin/agent-serve.js +0 -0
  5. package/dist/channels/slack/attachments.d.ts +2 -0
  6. package/dist/channels/slack/attachments.d.ts.map +1 -1
  7. package/dist/channels/slack/attachments.js +17 -5
  8. package/dist/channels/slack/channel-watch.d.ts +4 -2
  9. package/dist/channels/slack/channel-watch.d.ts.map +1 -1
  10. package/dist/channels/slack/channel-watch.js +4 -2
  11. package/dist/channels/slack/slack-channel.d.ts.map +1 -1
  12. package/dist/channels/slack/slack-channel.js +4 -2
  13. package/dist/channels/slack/types.d.ts +6 -4
  14. package/dist/channels/slack/types.d.ts.map +1 -1
  15. package/dist/connections.d.ts +29 -0
  16. package/dist/connections.d.ts.map +1 -1
  17. package/dist/connections.js +54 -0
  18. package/dist/docs/404.html +2 -2
  19. package/dist/docs/assets/{app.CaLG1pPt.js → app.CRMxF0qX.js} +4 -4
  20. package/dist/docs/assets/{building-with-agents.md.Df87rAe1.js → building-with-agents.md.Bi9CQ-bR.js} +3 -3
  21. package/dist/docs/assets/{building-with-agents.md.Df87rAe1.lean.js → building-with-agents.md.Bi9CQ-bR.lean.js} +1 -1
  22. package/dist/docs/assets/chunks/@localSearchIndexroot.BZwvb2LN.js +1 -0
  23. package/dist/docs/assets/chunks/{VPLocalSearchBox.YsP_2wqD.js → VPLocalSearchBox.C4BiQe53.js} +1 -1
  24. package/dist/docs/assets/chunks/{arc.C2j9hR7c.js → arc.D1TA2Mxn.js} +1 -1
  25. package/dist/docs/assets/chunks/{architectureDiagram-Q4EWVU46.C5qkGp7y.js → architectureDiagram-Q4EWVU46.CA-hBJCN.js} +1 -1
  26. package/dist/docs/assets/chunks/{baseUniq.U6GgTHOD.js → baseUniq.CzsSgiab.js} +1 -1
  27. package/dist/docs/assets/chunks/{blockDiagram-DXYQGD6D.D51mJop2.js → blockDiagram-DXYQGD6D.sxrH_f0l.js} +1 -1
  28. package/dist/docs/assets/chunks/{c4Diagram-AHTNJAMY.w1d6QxV7.js → c4Diagram-AHTNJAMY.D_Z3mqAl.js} +1 -1
  29. package/dist/docs/assets/chunks/channel.D7DtboxW.js +1 -0
  30. package/dist/docs/assets/chunks/{chunk-4BX2VUAB.B_A815un.js → chunk-4BX2VUAB.BS6_uTUf.js} +1 -1
  31. package/dist/docs/assets/chunks/{chunk-4TB4RGXK.DMrm-ZCb.js → chunk-4TB4RGXK.D-URAeTU.js} +1 -1
  32. package/dist/docs/assets/chunks/{chunk-55IACEB6.8qw6Xdal.js → chunk-55IACEB6.b4SZc5kO.js} +1 -1
  33. package/dist/docs/assets/chunks/{chunk-EDXVE4YY.Cq_nHODn.js → chunk-EDXVE4YY.DLKEEDkN.js} +1 -1
  34. package/dist/docs/assets/chunks/{chunk-FMBD7UC4.B67ohCYn.js → chunk-FMBD7UC4.3SyQHgpY.js} +1 -1
  35. package/dist/docs/assets/chunks/{chunk-OYMX7WX6.Bo8rQI8F.js → chunk-OYMX7WX6.DBKKaFeS.js} +1 -1
  36. package/dist/docs/assets/chunks/{chunk-QZHKN3VN.BERUMfE9.js → chunk-QZHKN3VN.BhCYeR7H.js} +1 -1
  37. package/dist/docs/assets/chunks/{chunk-YZCP3GAM.DWG2tXIX.js → chunk-YZCP3GAM.Cpg0VgI7.js} +1 -1
  38. package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.irslOV8B.js +1 -0
  39. package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.irslOV8B.js +1 -0
  40. package/dist/docs/assets/chunks/clone.DosLeDYL.js +1 -0
  41. package/dist/docs/assets/chunks/{cose-bilkent-S5V4N54A.tezXBs9b.js → cose-bilkent-S5V4N54A.4q0YNZN6.js} +1 -1
  42. package/dist/docs/assets/chunks/{dagre-KV5264BT.aSbEUwT7.js → dagre-KV5264BT.Bk_CcQPr.js} +1 -1
  43. package/dist/docs/assets/chunks/{diagram-5BDNPKRD.vnT6aJ57.js → diagram-5BDNPKRD.CgreoM_Z.js} +1 -1
  44. package/dist/docs/assets/chunks/{diagram-G4DWMVQ6.hGYdrDa2.js → diagram-G4DWMVQ6.DlZGpm6W.js} +1 -1
  45. package/dist/docs/assets/chunks/{diagram-MMDJMWI5.CmdSUP6L.js → diagram-MMDJMWI5.BxtXxgIR.js} +1 -1
  46. package/dist/docs/assets/chunks/{diagram-TYMM5635.BbAnLEBB.js → diagram-TYMM5635.DSzlJp2D.js} +1 -1
  47. package/dist/docs/assets/chunks/{erDiagram-SMLLAGMA.H40W4HWE.js → erDiagram-SMLLAGMA.BN1YUmEV.js} +1 -1
  48. package/dist/docs/assets/chunks/{flowDiagram-DWJPFMVM.BFMtUSv-.js → flowDiagram-DWJPFMVM.B61NGNYu.js} +1 -1
  49. package/dist/docs/assets/chunks/{ganttDiagram-T4ZO3ILL.CbYiu7Dt.js → ganttDiagram-T4ZO3ILL.DR-tto3M.js} +1 -1
  50. package/dist/docs/assets/chunks/{gitGraphDiagram-UUTBAWPF.Cyc5mzZD.js → gitGraphDiagram-UUTBAWPF.CBPs2W_2.js} +1 -1
  51. package/dist/docs/assets/chunks/{graph.BRptDG1H.js → graph.DmlaqzCE.js} +1 -1
  52. package/dist/docs/assets/chunks/{infoDiagram-42DDH7IO.Bz6KCA3a.js → infoDiagram-42DDH7IO.obPv-fFg.js} +1 -1
  53. package/dist/docs/assets/chunks/{ishikawaDiagram-UXIWVN3A.DDJ_7_Fq.js → ishikawaDiagram-UXIWVN3A.CXHTUcM3.js} +1 -1
  54. package/dist/docs/assets/chunks/{journeyDiagram-VCZTEJTY.D0t_ltlb.js → journeyDiagram-VCZTEJTY.BoVHerYZ.js} +1 -1
  55. package/dist/docs/assets/chunks/{kanban-definition-6JOO6SKY.DyyNsMfi.js → kanban-definition-6JOO6SKY.CfYmPHZg.js} +1 -1
  56. package/dist/docs/assets/chunks/{layout.Cbxq-Rhp.js → layout.621UdAhB.js} +1 -1
  57. package/dist/docs/assets/chunks/{linear.DxGYL0MP.js → linear.Cz_zRKjr.js} +1 -1
  58. package/dist/docs/assets/chunks/{min.DA5KL8wu.js → min.ON4GjCH7.js} +1 -1
  59. package/dist/docs/assets/chunks/{mindmap-definition-QFDTVHPH.Bc72Utls.js → mindmap-definition-QFDTVHPH.DLPMLJlv.js} +1 -1
  60. package/dist/docs/assets/chunks/{pieDiagram-DEJITSTG.BtpHnIB_.js → pieDiagram-DEJITSTG.BFp11AYt.js} +1 -1
  61. package/dist/docs/assets/chunks/{quadrantDiagram-34T5L4WZ.Cx4oCSRR.js → quadrantDiagram-34T5L4WZ.ChX7xo6B.js} +1 -1
  62. package/dist/docs/assets/chunks/{requirementDiagram-MS252O5E.BC0hXWlW.js → requirementDiagram-MS252O5E.DbKtHG_Q.js} +1 -1
  63. package/dist/docs/assets/chunks/{sankeyDiagram-XADWPNL6.Dg8T1SEp.js → sankeyDiagram-XADWPNL6.Spw8tv-7.js} +1 -1
  64. package/dist/docs/assets/chunks/{sequenceDiagram-FGHM5R23.CWSdHYAF.js → sequenceDiagram-FGHM5R23.BYso9LlE.js} +1 -1
  65. package/dist/docs/assets/chunks/{stateDiagram-FHFEXIEX.0MVPRI28.js → stateDiagram-FHFEXIEX.D8l54jqW.js} +1 -1
  66. package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.CAYMmzGj.js +1 -0
  67. package/dist/docs/assets/chunks/{theme.DO1avLBn.js → theme.m_Ethbkv.js} +2 -2
  68. package/dist/docs/assets/chunks/{timeline-definition-GMOUNBTQ.BuRinAVi.js → timeline-definition-GMOUNBTQ.BLdhhyy9.js} +1 -1
  69. package/dist/docs/assets/chunks/{vennDiagram-DHZGUBPP.DXf0PCoJ.js → vennDiagram-DHZGUBPP.CyGT2F_P.js} +1 -1
  70. package/dist/docs/assets/chunks/wardley-RL74JXVD.C5JJS3bh.js +162 -0
  71. package/dist/docs/assets/chunks/{wardleyDiagram-NUSXRM2D.T4ThngYV.js → wardleyDiagram-NUSXRM2D.p_Sz9p1i.js} +1 -1
  72. package/dist/docs/assets/chunks/{xychartDiagram-5P7HB3ND.b4pZF3D5.js → xychartDiagram-5P7HB3ND.DtXsNUaf.js} +1 -1
  73. package/dist/docs/assets/deployment.md.hKKN9I4c.js +31 -0
  74. package/dist/docs/assets/{deployment.md.BYuEcDBv.lean.js → deployment.md.hKKN9I4c.lean.js} +1 -1
  75. package/dist/docs/assets/{evals.md.C851kViu.js → evals.md.CHR34K1Y.js} +3 -7
  76. package/dist/docs/assets/{evals.md.C851kViu.lean.js → evals.md.CHR34K1Y.lean.js} +1 -1
  77. package/dist/docs/assets/guides_cloud-agents.md.CBK7W0-O.js +9 -0
  78. package/dist/docs/assets/guides_cloud-agents.md.CBK7W0-O.lean.js +1 -0
  79. package/dist/docs/assets/guides_grokbot-agents.md.BwAykJ7U.js +15 -0
  80. package/dist/docs/assets/{guides_grokbot-agents.md.tD1smFhU.lean.js → guides_grokbot-agents.md.BwAykJ7U.lean.js} +1 -1
  81. package/dist/docs/assets/{guides_hooks.md.5Ce3NXxZ.js → guides_hooks.md.B_bKG1oA.js} +1 -1
  82. package/dist/docs/assets/{guides_improve.md.CRrYq22s.js → guides_improve.md.CZKVt1cT.js} +2 -3
  83. package/dist/docs/assets/{guides_improve.md.CRrYq22s.lean.js → guides_improve.md.CZKVt1cT.lean.js} +1 -1
  84. package/dist/docs/assets/{guides_mcp-oauth.md.DR3zhC9r.js → guides_mcp-oauth.md.BM_eFC0L.js} +3 -15
  85. package/dist/docs/assets/guides_mcp-oauth.md.BM_eFC0L.lean.js +1 -0
  86. package/dist/docs/assets/{guides_webhooks.md.BBvAm_VF.js → guides_webhooks.md.Cpdc3BDX.js} +13 -12
  87. package/dist/docs/assets/{guides_webhooks.md.BBvAm_VF.lean.js → guides_webhooks.md.Cpdc3BDX.lean.js} +1 -1
  88. package/dist/docs/assets/{index.md.Dxxr7pFa.js → index.md.BIBHIQtU.js} +1 -1
  89. package/dist/docs/assets/{quickstart.md.BK5gjHM2.js → quickstart.md.CduLGBAB.js} +1 -1
  90. package/dist/docs/assets/reference_channels.md.DYg0CLud.js +22 -0
  91. package/dist/docs/assets/{reference_channels.md.LbNIJBwd.lean.js → reference_channels.md.DYg0CLud.lean.js} +1 -1
  92. package/dist/docs/assets/{reference_cli.md.dYCAL2lB.js → reference_cli.md.BYNIHwbi.js} +15 -12
  93. package/dist/docs/assets/{reference_cli.md.dYCAL2lB.lean.js → reference_cli.md.BYNIHwbi.lean.js} +1 -1
  94. package/dist/docs/assets/{reference_connections.md.DLrgAd5f.js → reference_connections.md.CxbLpaaP.js} +4 -5
  95. package/dist/docs/assets/{reference_connections.md.DLrgAd5f.lean.js → reference_connections.md.CxbLpaaP.lean.js} +1 -1
  96. package/dist/docs/assets/{reference_evals.md.D5i8PuXJ.js → reference_evals.md.if--BLd0.js} +1 -1
  97. package/dist/docs/assets/{reference_hooks.md.B-eGa2km.js → reference_hooks.md.DbJC8mcZ.js} +1 -1
  98. package/dist/docs/assets/reference_http-api.md.CrqhTv6S.js +11 -0
  99. package/dist/docs/assets/{reference_http-api.md.DbFNOubV.lean.js → reference_http-api.md.CrqhTv6S.lean.js} +1 -1
  100. package/dist/docs/assets/reference_playground.md.q4MI-0td.js +1 -0
  101. package/dist/docs/assets/reference_playground.md.q4MI-0td.lean.js +1 -0
  102. package/dist/docs/assets/{reference_schedules.md.BuJ8fgMa.js → reference_schedules.md.03Ryy9ca.js} +5 -5
  103. package/dist/docs/assets/{reference_schedules.md.BuJ8fgMa.lean.js → reference_schedules.md.03Ryy9ca.lean.js} +1 -1
  104. package/dist/docs/assets/reference_sessions.md.C_uzIWuy.js +1 -0
  105. package/dist/docs/assets/{reference_skills.md.C0guGcH0.js → reference_skills.md.Ckddg6KX.js} +4 -4
  106. package/dist/docs/assets/{reference_tools.md.DzIY9JzY.js → reference_tools.md.08XR7lIl.js} +3 -14
  107. package/dist/docs/assets/reference_tools.md.08XR7lIl.lean.js +1 -0
  108. package/dist/docs/assets/{templates_grokbot-agents.md.2sydjFiO.js → templates_grokbot-agents.md.DgpPEs7B.js} +1 -1
  109. package/dist/docs/assets/troubleshooting.md.PCafNCb5.js +1 -0
  110. package/dist/docs/assets/{troubleshooting.md.x-GBa7wN.lean.js → troubleshooting.md.PCafNCb5.lean.js} +1 -1
  111. package/dist/docs/building-with-agents.html +37 -37
  112. package/dist/docs/building-with-agents.md +5 -5
  113. package/dist/docs/deployment.html +43 -41
  114. package/dist/docs/deployment.md +70 -33
  115. package/dist/docs/evals.html +38 -42
  116. package/dist/docs/evals.md +1 -16
  117. package/dist/docs/guides/agent-to-agent.html +35 -35
  118. package/dist/docs/guides/bitbucket.html +35 -35
  119. package/dist/docs/guides/cloud-agents.html +38 -39
  120. package/dist/docs/guides/cloud-agents.md +2 -8
  121. package/dist/docs/guides/convert-automation.html +35 -35
  122. package/dist/docs/guides/github.html +35 -35
  123. package/dist/docs/guides/gitlab.html +35 -35
  124. package/dist/docs/guides/grokbot-agents.html +37 -38
  125. package/dist/docs/guides/grokbot-agents.md +9 -13
  126. package/dist/docs/guides/hooks.html +37 -37
  127. package/dist/docs/guides/hooks.md +0 -1
  128. package/dist/docs/guides/improve.html +37 -38
  129. package/dist/docs/guides/improve.md +4 -6
  130. package/dist/docs/guides/jev.html +35 -35
  131. package/dist/docs/guides/mcp-oauth.html +39 -51
  132. package/dist/docs/guides/mcp-oauth.md +17 -40
  133. package/dist/docs/guides/migrate.html +35 -35
  134. package/dist/docs/guides/opentelemetry.html +35 -35
  135. package/dist/docs/guides/slack.html +35 -35
  136. package/dist/docs/guides/webhooks.html +47 -46
  137. package/dist/docs/guides/webhooks.md +35 -18
  138. package/dist/docs/hashmap.json +1 -1
  139. package/dist/docs/hillclimbing.html +35 -35
  140. package/dist/docs/index.html +36 -36
  141. package/dist/docs/index.md +1 -1
  142. package/dist/docs/llms-full.txt +347 -269
  143. package/dist/docs/llms.txt +4 -4
  144. package/dist/docs/quickstart.html +37 -37
  145. package/dist/docs/quickstart.md +2 -2
  146. package/dist/docs/reference/agent-config.html +35 -35
  147. package/dist/docs/reference/artifacts.html +35 -35
  148. package/dist/docs/reference/channels.html +42 -43
  149. package/dist/docs/reference/channels.md +29 -13
  150. package/dist/docs/reference/cli.html +49 -46
  151. package/dist/docs/reference/cli.md +113 -40
  152. package/dist/docs/reference/connections.html +39 -40
  153. package/dist/docs/reference/connections.md +6 -5
  154. package/dist/docs/reference/evals.html +37 -37
  155. package/dist/docs/reference/evals.md +2 -4
  156. package/dist/docs/reference/extensions.html +35 -35
  157. package/dist/docs/reference/hooks.html +37 -37
  158. package/dist/docs/reference/hooks.md +0 -1
  159. package/dist/docs/reference/http-api.html +38 -38
  160. package/dist/docs/reference/http-api.md +7 -17
  161. package/dist/docs/reference/instructions.html +35 -35
  162. package/dist/docs/reference/playground.html +37 -37
  163. package/dist/docs/reference/playground.md +1 -4
  164. package/dist/docs/reference/project-layout.html +35 -35
  165. package/dist/docs/reference/prompt.html +35 -35
  166. package/dist/docs/reference/schedules.html +39 -39
  167. package/dist/docs/reference/schedules.md +26 -3
  168. package/dist/docs/reference/sessions.html +36 -36
  169. package/dist/docs/reference/sessions.md +1 -2
  170. package/dist/docs/reference/skills.html +39 -39
  171. package/dist/docs/reference/skills.md +1 -1
  172. package/dist/docs/reference/subagents.html +35 -35
  173. package/dist/docs/reference/tools.html +39 -50
  174. package/dist/docs/reference/tools.md +2 -28
  175. package/dist/docs/templates/agentic-owners.html +35 -35
  176. package/dist/docs/templates/grokbot-agents.html +37 -37
  177. package/dist/docs/templates/grokbot-agents.md +1 -1
  178. package/dist/docs/templates/security-reviewer.html +35 -35
  179. package/dist/docs/templates/thermo-quality-review.html +35 -35
  180. package/dist/docs/templates/thermo-review.html +35 -35
  181. package/dist/docs/templates/triage.html +35 -35
  182. package/dist/docs/troubleshooting.html +36 -36
  183. package/dist/docs/troubleshooting.md +12 -7
  184. package/dist/executors.d.ts +11 -0
  185. package/dist/executors.d.ts.map +1 -0
  186. package/dist/executors.js +21 -0
  187. package/dist/extensions/cursor-cloud-agents/extension.d.ts +6 -2
  188. package/dist/extensions/cursor-cloud-agents/extension.d.ts.map +1 -1
  189. package/dist/extensions/cursor-cloud-agents/extension.js +5 -1
  190. package/dist/extensions/cursor-cloud-agents/lib/channels.d.ts.map +1 -1
  191. package/dist/extensions/cursor-cloud-agents/lib/channels.js +5 -1
  192. package/dist/extensions/cursor-cloud-agents/lib/launch-agent.d.ts +21 -4
  193. package/dist/extensions/cursor-cloud-agents/lib/launch-agent.d.ts.map +1 -1
  194. package/dist/extensions/cursor-cloud-agents/lib/launch-agent.js +26 -5
  195. package/dist/files.d.ts +1 -0
  196. package/dist/files.d.ts.map +1 -1
  197. package/dist/files.js +3 -1
  198. package/dist/filesystem.d.ts +10 -0
  199. package/dist/filesystem.d.ts.map +1 -1
  200. package/dist/filesystem.js +128 -0
  201. package/dist/index.d.ts +1 -1
  202. package/dist/index.d.ts.map +1 -1
  203. package/dist/index.js +1 -1
  204. package/dist/internal/cli-deploy.d.ts.map +1 -1
  205. package/dist/internal/cli-deploy.js +17 -0
  206. package/dist/internal/continuation-identity.js +1 -1
  207. package/dist/internal/conversation-mirror.d.ts +11 -0
  208. package/dist/internal/conversation-mirror.d.ts.map +1 -1
  209. package/dist/internal/conversation-mirror.js +198 -125
  210. package/dist/internal/conversation-pack.d.ts +29 -0
  211. package/dist/internal/conversation-pack.d.ts.map +1 -0
  212. package/dist/internal/conversation-pack.js +96 -0
  213. package/dist/internal/deploy-client.d.ts +2 -0
  214. package/dist/internal/deploy-client.d.ts.map +1 -1
  215. package/dist/internal/deploy-client.js +4 -0
  216. package/dist/internal/discovery/agent-config.d.ts +6 -0
  217. package/dist/internal/discovery/agent-config.d.ts.map +1 -1
  218. package/dist/internal/discovery/agent-config.js +19 -0
  219. package/dist/internal/discovery/agent.d.ts.map +1 -1
  220. package/dist/internal/discovery/agent.js +2 -1
  221. package/dist/internal/hosted-catch-protocol.d.ts +2 -0
  222. package/dist/internal/hosted-catch-protocol.d.ts.map +1 -1
  223. package/dist/internal/hosted-catch-protocol.js +2 -0
  224. package/dist/internal/hosted-catch.d.ts +2 -3
  225. package/dist/internal/hosted-catch.d.ts.map +1 -1
  226. package/dist/internal/hosted-catch.js +2 -3
  227. package/dist/internal/hosted-delivery.d.ts.map +1 -1
  228. package/dist/internal/hosted-delivery.js +22 -12
  229. package/dist/internal/hosted-execution-flush.d.ts +6 -3
  230. package/dist/internal/hosted-execution-flush.d.ts.map +1 -1
  231. package/dist/internal/hosted-execution-flush.js +28 -31
  232. package/dist/internal/peer-connections.d.ts +6 -2
  233. package/dist/internal/peer-connections.d.ts.map +1 -1
  234. package/dist/internal/peer-connections.js +23 -19
  235. package/dist/internal/sdk-runner.d.ts.map +1 -1
  236. package/dist/internal/sdk-runner.js +13 -2
  237. package/dist/internal/server.d.ts.map +1 -1
  238. package/dist/internal/server.js +6 -5
  239. package/dist/internal/session-engine.d.ts.map +1 -1
  240. package/dist/internal/session-engine.js +4 -0
  241. package/dist/internal/session-run-log.d.ts.map +1 -1
  242. package/dist/internal/session-run-log.js +26 -11
  243. package/dist/internal/turn-cost.d.ts +2 -2
  244. package/dist/internal/turn-cost.d.ts.map +1 -1
  245. package/dist/internal/turn-cost.js +17 -3
  246. package/dist/playground/assets/index-BVYWBxLU.css +1 -0
  247. package/dist/playground/assets/{index-DIiKbZ25.js → index-DCsq6f_I.js} +45 -45
  248. package/dist/playground/index.html +2 -2
  249. package/dist/types.d.ts +18 -0
  250. package/dist/types.d.ts.map +1 -1
  251. package/docs/README.md +1 -1
  252. package/docs/building-with-agents.md +5 -5
  253. package/docs/deployment.md +70 -33
  254. package/docs/evals.md +1 -16
  255. package/docs/guides/cloud-agents.md +3 -9
  256. package/docs/guides/grokbot-agents.md +10 -14
  257. package/docs/guides/hooks.md +0 -1
  258. package/docs/guides/improve.md +4 -6
  259. package/docs/guides/mcp-oauth.md +18 -41
  260. package/docs/guides/webhooks.md +35 -18
  261. package/docs/quickstart.md +2 -2
  262. package/docs/reference/channels.md +29 -13
  263. package/docs/reference/cli.md +113 -40
  264. package/docs/reference/connections.md +6 -5
  265. package/docs/reference/evals.md +2 -4
  266. package/docs/reference/hooks.md +0 -1
  267. package/docs/reference/http-api.md +7 -17
  268. package/docs/reference/playground.md +2 -5
  269. package/docs/reference/schedules.md +26 -3
  270. package/docs/reference/sessions.md +1 -2
  271. package/docs/reference/skills.md +1 -1
  272. package/docs/reference/tools.md +3 -29
  273. package/docs/templates/grokbot-agents.md +1 -1
  274. package/docs/troubleshooting.md +12 -7
  275. package/package.json +43 -32
  276. package/skills/create-agent/SKILL.md +9 -6
  277. package/skills/debug/SKILL.md +3 -4
  278. package/skills/evals/SKILL.md +2 -2
  279. package/skills/framework-map/SKILL.md +10 -10
  280. package/skills/mcp-auth/SKILL.md +10 -34
  281. package/skills/migrate-v2/SKILL.md +13 -9
  282. package/skills/setup-slack/SKILL.md +0 -13
  283. package/templates/agents-md/README.md +3 -3
  284. package/templates/agents-md/bot/channels/queue.ts +3 -8
  285. package/templates/agents-md/bot/instructions.md +1 -2
  286. package/templates/agents-md/bot/tools/apply_agents.ts +0 -1
  287. package/templates/agents-md/evals/agents.eval.ts +2 -2
  288. package/templates/demo/bot/channels/queue.ts +5 -15
  289. package/templates/grokbot-agents/.gitignore +4 -0
  290. package/templates/pr-autofixer/bot/channels/drive.ts +3 -16
  291. package/templates/security-help/.gitignore +4 -0
  292. package/templates/triage/bot/channels/queue.ts +11 -22
  293. package/templates/triage/bot/channels/webhook.ts +3 -6
  294. package/templates/triage/bot/lib/parse-queue-event.ts +0 -6
  295. package/dist/docs/assets/chunks/@localSearchIndexroot.DvlKuIO-.js +0 -1
  296. package/dist/docs/assets/chunks/channel.BRSFxCcD.js +0 -1
  297. package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.Cmtm6WkN.js +0 -1
  298. package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.Cmtm6WkN.js +0 -1
  299. package/dist/docs/assets/chunks/clone.JMC96Eo6.js +0 -1
  300. package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.N4Am6sXd.js +0 -1
  301. package/dist/docs/assets/chunks/wardley-RL74JXVD._eATmGtu.js +0 -162
  302. package/dist/docs/assets/deployment.md.BYuEcDBv.js +0 -29
  303. package/dist/docs/assets/guides_cloud-agents.md.CWJjS9No.js +0 -10
  304. package/dist/docs/assets/guides_cloud-agents.md.CWJjS9No.lean.js +0 -1
  305. package/dist/docs/assets/guides_grokbot-agents.md.tD1smFhU.js +0 -16
  306. package/dist/docs/assets/guides_mcp-oauth.md.DR3zhC9r.lean.js +0 -1
  307. package/dist/docs/assets/reference_channels.md.LbNIJBwd.js +0 -23
  308. package/dist/docs/assets/reference_http-api.md.DbFNOubV.js +0 -11
  309. package/dist/docs/assets/reference_playground.md.1hx0gcIu.js +0 -1
  310. package/dist/docs/assets/reference_playground.md.1hx0gcIu.lean.js +0 -1
  311. package/dist/docs/assets/reference_sessions.md.CyM7ARz1.js +0 -1
  312. package/dist/docs/assets/reference_tools.md.DzIY9JzY.lean.js +0 -1
  313. package/dist/docs/assets/troubleshooting.md.x-GBa7wN.js +0 -1
  314. package/dist/playground/assets/index-CzttDc-d.css +0 -1
  315. /package/dist/docs/assets/{guides_hooks.md.5Ce3NXxZ.lean.js → guides_hooks.md.B_bKG1oA.lean.js} +0 -0
  316. /package/dist/docs/assets/{index.md.Dxxr7pFa.lean.js → index.md.BIBHIQtU.lean.js} +0 -0
  317. /package/dist/docs/assets/{quickstart.md.BK5gjHM2.lean.js → quickstart.md.CduLGBAB.lean.js} +0 -0
  318. /package/dist/docs/assets/{reference_evals.md.D5i8PuXJ.lean.js → reference_evals.md.if--BLd0.lean.js} +0 -0
  319. /package/dist/docs/assets/{reference_hooks.md.B-eGa2km.lean.js → reference_hooks.md.DbJC8mcZ.lean.js} +0 -0
  320. /package/dist/docs/assets/{reference_sessions.md.CyM7ARz1.lean.js → reference_sessions.md.C_uzIWuy.lean.js} +0 -0
  321. /package/dist/docs/assets/{reference_skills.md.C0guGcH0.lean.js → reference_skills.md.Ckddg6KX.lean.js} +0 -0
  322. /package/dist/docs/assets/{templates_grokbot-agents.md.2sydjFiO.lean.js → templates_grokbot-agents.md.DgpPEs7B.lean.js} +0 -0
@@ -48,6 +48,18 @@ The source repository must be available through the team's repository
48
48
  integration, and a nested `--path` must contain an installable BDK
49
49
  project.
50
50
 
51
+ ### Privacy Mode
52
+
53
+ A hosted deployment stores a snapshot of its source repository, along
54
+ with the sessions, KV, files, and logs the agent creates for your team.
55
+ Whether you can deploy depends on the privacy setting that applies to
56
+ you, which is your team's setting when the team enforces one:
57
+
58
+ | Privacy setting | Managed hosting |
59
+ | --- | --- |
60
+ | Privacy Mode | Available. Cursor stores deployment data the same way it does without Privacy Mode, and the agent's model requests get the same Privacy Mode handling as your other Cursor requests. |
61
+ | Privacy Mode (Legacy) | Not available. `deploy` fails, because this setting doesn't let Cursor store code. |
62
+
51
63
  ## Add egress and secrets
52
64
 
53
65
  Declare the external hosts and secret names the agent needs. Mounted
@@ -95,54 +107,80 @@ platform can verify each delivery's signature before any compute starts.
95
107
  Enter egress hosts without schemes or paths. An HTTPS host needs no port;
96
108
  add one, as `clickhouse.example.com:9440`, only for a protocol the proxy
97
109
  reads no hostname from. The
98
- [Host MCP OAuth guide](/docs/guides/mcp-oauth.md) owns the extra secret and
99
- egress steps for OAuth-backed MCP servers.
110
+ [Host MCP OAuth guide](/docs/guides/mcp-oauth.md) covers OAuth-backed MCP
111
+ servers on a hosted agent.
100
112
 
101
113
  ## Use the hosted agent
102
114
 
103
115
  ### Verify a hosted turn
104
116
 
105
- Start a turn on the deployment:
117
+ After `deploy` reports `running`, message the deployment from the CLI:
106
118
 
107
- ```text
119
+ ```bash
108
120
  bdk run --prod --slug weather-agent \
109
121
  --message "Forecast for Paris"
110
122
  ```
111
123
 
112
- The command returns as soon as the deployment accepts the turn, so the output
113
- has a `deliveryId` but no `sessionId` yet. That's expected, with or without
114
- `--dry-run`. Open the deployment from **Deployed Agents** in the
115
- [dashboard](https://cursor.com/dashboard) and select **Sessions** to find the
116
- new session's `ses_...` ID.
124
+ The command returns as soon as the deployment accepts the turn, so its
125
+ output has a `deliveryId` and `workflowId` but no `sessionId` yet; the
126
+ session is created when the turn starts. Add `--dry-run` to check a
127
+ deployment without side effects: read tools run and write tools are
128
+ stubbed.
117
129
 
118
- Check the session from the CLI:
130
+ Find the new session in the deployment's recent output, which prints a
131
+ `==> ses_... (http) <==` header for each session, or open the deployment
132
+ from **Deployed Agents** in the [dashboard](https://cursor.com/dashboard)
133
+ and select **Sessions**:
119
134
 
120
- ```text
135
+ ```bash
136
+ bdk logs --prod --once --slug weather-agent
137
+ ```
138
+
139
+ Then follow the turn:
140
+
141
+ ```bash
121
142
  bdk session ses_... --prod --slug weather-agent
122
143
  ```
123
144
 
124
- While the turn runs, the command reports how many events have arrived and
125
- prints `Turn running; runs may lag behind events.` Rerun it until the latest
126
- run shows a final status such as `finished`. High-effort turns can take about
127
- eight minutes, and runs can stay empty until the turn ends, so a growing event
128
- count is the progress signal. Escalate only when no new events arrive for about
129
- two to three minutes.
145
+ The command lists each hosted run with its status and log lines. While
146
+ the turn is still working, it reports how many events have arrived and
147
+ prints `Turn running; runs may lag behind events.` Rerun it until the
148
+ latest run shows a final status such as `finished`. A high-effort turn
149
+ can take several minutes, and its run can show no logs until it ends, so
150
+ a growing event count is the progress signal.
130
151
 
131
- Hosted deployments don't support `bdk call` or `bdk sessions`, so use
132
- `bdk run --prod` and `bdk session` instead. Dashboard links to a single session
133
- may not open yet, so confirm the result with `bdk session`.
152
+ To continue the same conversation, pass `--session ses_...` to
153
+ `run --prod`. `bdk playground --prod --slug weather-agent --session ses_...`
154
+ opens the session in the dashboard playground. Hosted deployments don't
155
+ support `bdk chat`, `call`, `sessions`, `cost`, or `mcp`; use
156
+ `run --prod`, `logs --prod`, and `session --prod` instead.
134
157
 
135
- ### Call the hosted HTTP API
158
+ ### Send work to the deployment
136
159
 
137
- External HTTP clients use the stable alias URL and send the alias token
138
- on every request:
160
+ A hosted agent wakes from its channels: Slack mentions and DMs, SCM
161
+ events, and custom channel routes. External HTTP clients call a custom
162
+ route on the stable alias URL and send the alias token on every
163
+ request:
139
164
 
140
165
  ```bash
141
- curl "$AGENT_ALIAS_URL/v1/health" \
142
- -H "X-Agent-Alias-Token: $AGENT_ALIAS_TOKEN"
166
+ curl -X POST "$AGENT_ALIAS_URL/v1/channels/tickets/ticket" \
167
+ -H "X-Agent-Alias-Token: $AGENT_ALIAS_TOKEN" \
168
+ -H 'content-type: application/json' \
169
+ -d '{"ticketId":"ENG-142","message":"CSV export returns 500"}'
143
170
  ```
144
171
 
145
- The first deploy prints this token once. Store it outside terminal
172
+ The deployment answers `202 Accepted` with an empty body as soon as the
173
+ request arrives, then runs the route's handler, so the caller never
174
+ receives a session ID or a result. Deliver results from the channel, as
175
+ described in [Route responses](/docs/reference/channels.md#route-responses).
176
+
177
+ To confirm the work started, find the new session with
178
+ `bdk logs --prod` and follow it with `bdk session --prod`, as in
179
+ [Verify a hosted turn](#verify-a-hosted-turn).
180
+
181
+ ### Protect the alias token
182
+
183
+ The first deploy prints the alias token once. Store it outside terminal
146
184
  transcripts; it cannot be retrieved later. If it is lost or exposed,
147
185
  `bdk rotate-token weather-agent` replaces it and invalidates the
148
186
  old value.
@@ -180,9 +218,8 @@ across normal runtime replacements. Files written elsewhere on the
180
218
  runtime's local filesystem are disposable; use `ctx.host.kv` or
181
219
  `ctx.host.files` for durable application state.
182
220
 
183
- Parked approvals and in-memory reminder handlers do not survive a
184
- restart. Run the turn again or recreate the reminder after a
185
- replacement.
221
+ On architecture v2, the default, reminders take a prompt or a named
222
+ handler. See [Reminders](/docs/reference/schedules.md#reminders).
186
223
 
187
224
  ## Self-host securely
188
225
 
@@ -224,8 +261,8 @@ per-caller and channel-specific auth.
224
261
 
225
262
  ## Observability
226
263
 
227
- Use `bdk session <sessionId> --prod` for a hosted session's runs and logs,
228
- [OpenTelemetry](/docs/guides/opentelemetry.md) for traces and metrics, and
264
+ Use `bdk logs --prod` and `bdk session <sessionId> --prod` for a hosted
265
+ session's runs and logs, [OpenTelemetry](/docs/guides/opentelemetry.md) for traces and metrics, and
229
266
  [session traces](/docs/reference/sessions.md#inspect-a-saved-event-stream)
230
267
  for a local conversation.
231
268
 
@@ -238,7 +275,7 @@ for a local conversation.
238
275
  - [GitHub](/docs/guides/github.md): Cursor-event repositories and direct
239
276
  webhook delivery
240
277
  - [Slack](/docs/guides/slack.md): provision a dedicated hosted Slack app
241
- - [Host MCP OAuth](/docs/guides/mcp-oauth.md): persist OAuth credentials
242
- across hosted replacements
278
+ - [Host MCP OAuth](/docs/guides/mcp-oauth.md): reach OAuth-backed MCP
279
+ servers from a hosted agent
243
280
  - [Troubleshooting](/docs/troubleshooting.md): diagnose failed or stale
244
281
  deployments
@@ -9,51 +9,51 @@
9
9
  <link rel="preload stylesheet" href="/docs/assets/style.Dwls12uf.css" as="style">
10
10
  <link rel="preload stylesheet" href="/docs/vp-icons.css" as="style">
11
11
 
12
- <script type="module" src="/docs/assets/app.CaLG1pPt.js"></script>
12
+ <script type="module" src="/docs/assets/app.CRMxF0qX.js"></script>
13
13
  <link rel="preload" href="/docs/assets/inter-roman-latin.Di8DUHzh.woff2" as="font" type="font/woff2" crossorigin="">
14
14
  <link rel="modulepreload" href="/docs/assets/chunks/framework.BNw1pucY.js">
15
- <link rel="modulepreload" href="/docs/assets/chunks/theme.DO1avLBn.js">
15
+ <link rel="modulepreload" href="/docs/assets/chunks/theme.m_Ethbkv.js">
16
16
  <link rel="modulepreload" href="/docs/assets/chunks/katex.DkKDou_j.js">
17
- <link rel="modulepreload" href="/docs/assets/chunks/dagre-KV5264BT.aSbEUwT7.js">
18
- <link rel="modulepreload" href="/docs/assets/chunks/cose-bilkent-S5V4N54A.tezXBs9b.js">
19
- <link rel="modulepreload" href="/docs/assets/chunks/c4Diagram-AHTNJAMY.w1d6QxV7.js">
20
- <link rel="modulepreload" href="/docs/assets/chunks/flowDiagram-DWJPFMVM.BFMtUSv-.js">
21
- <link rel="modulepreload" href="/docs/assets/chunks/erDiagram-SMLLAGMA.H40W4HWE.js">
22
- <link rel="modulepreload" href="/docs/assets/chunks/gitGraphDiagram-UUTBAWPF.Cyc5mzZD.js">
23
- <link rel="modulepreload" href="/docs/assets/chunks/ganttDiagram-T4ZO3ILL.CbYiu7Dt.js">
24
- <link rel="modulepreload" href="/docs/assets/chunks/infoDiagram-42DDH7IO.Bz6KCA3a.js">
25
- <link rel="modulepreload" href="/docs/assets/chunks/pieDiagram-DEJITSTG.BtpHnIB_.js">
26
- <link rel="modulepreload" href="/docs/assets/chunks/quadrantDiagram-34T5L4WZ.Cx4oCSRR.js">
27
- <link rel="modulepreload" href="/docs/assets/chunks/xychartDiagram-5P7HB3ND.b4pZF3D5.js">
28
- <link rel="modulepreload" href="/docs/assets/chunks/requirementDiagram-MS252O5E.BC0hXWlW.js">
29
- <link rel="modulepreload" href="/docs/assets/chunks/sequenceDiagram-FGHM5R23.CWSdHYAF.js">
30
- <link rel="modulepreload" href="/docs/assets/chunks/classDiagram-6PBFFD2Q.Cmtm6WkN.js">
31
- <link rel="modulepreload" href="/docs/assets/chunks/classDiagram-v2-HSJHXN6E.Cmtm6WkN.js">
32
- <link rel="modulepreload" href="/docs/assets/chunks/stateDiagram-FHFEXIEX.0MVPRI28.js">
33
- <link rel="modulepreload" href="/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.N4Am6sXd.js">
34
- <link rel="modulepreload" href="/docs/assets/chunks/journeyDiagram-VCZTEJTY.D0t_ltlb.js">
35
- <link rel="modulepreload" href="/docs/assets/chunks/timeline-definition-GMOUNBTQ.BuRinAVi.js">
36
- <link rel="modulepreload" href="/docs/assets/chunks/mindmap-definition-QFDTVHPH.Bc72Utls.js">
37
- <link rel="modulepreload" href="/docs/assets/chunks/kanban-definition-6JOO6SKY.DyyNsMfi.js">
38
- <link rel="modulepreload" href="/docs/assets/chunks/sankeyDiagram-XADWPNL6.Dg8T1SEp.js">
39
- <link rel="modulepreload" href="/docs/assets/chunks/diagram-TYMM5635.BbAnLEBB.js">
40
- <link rel="modulepreload" href="/docs/assets/chunks/diagram-MMDJMWI5.CmdSUP6L.js">
41
- <link rel="modulepreload" href="/docs/assets/chunks/blockDiagram-DXYQGD6D.D51mJop2.js">
42
- <link rel="modulepreload" href="/docs/assets/chunks/diagram-5BDNPKRD.vnT6aJ57.js">
43
- <link rel="modulepreload" href="/docs/assets/chunks/architectureDiagram-Q4EWVU46.C5qkGp7y.js">
44
- <link rel="modulepreload" href="/docs/assets/chunks/ishikawaDiagram-UXIWVN3A.DDJ_7_Fq.js">
45
- <link rel="modulepreload" href="/docs/assets/chunks/vennDiagram-DHZGUBPP.DXf0PCoJ.js">
46
- <link rel="modulepreload" href="/docs/assets/chunks/diagram-G4DWMVQ6.hGYdrDa2.js">
47
- <link rel="modulepreload" href="/docs/assets/chunks/wardleyDiagram-NUSXRM2D.T4ThngYV.js">
17
+ <link rel="modulepreload" href="/docs/assets/chunks/dagre-KV5264BT.Bk_CcQPr.js">
18
+ <link rel="modulepreload" href="/docs/assets/chunks/cose-bilkent-S5V4N54A.4q0YNZN6.js">
19
+ <link rel="modulepreload" href="/docs/assets/chunks/c4Diagram-AHTNJAMY.D_Z3mqAl.js">
20
+ <link rel="modulepreload" href="/docs/assets/chunks/flowDiagram-DWJPFMVM.B61NGNYu.js">
21
+ <link rel="modulepreload" href="/docs/assets/chunks/erDiagram-SMLLAGMA.BN1YUmEV.js">
22
+ <link rel="modulepreload" href="/docs/assets/chunks/gitGraphDiagram-UUTBAWPF.CBPs2W_2.js">
23
+ <link rel="modulepreload" href="/docs/assets/chunks/ganttDiagram-T4ZO3ILL.DR-tto3M.js">
24
+ <link rel="modulepreload" href="/docs/assets/chunks/infoDiagram-42DDH7IO.obPv-fFg.js">
25
+ <link rel="modulepreload" href="/docs/assets/chunks/pieDiagram-DEJITSTG.BFp11AYt.js">
26
+ <link rel="modulepreload" href="/docs/assets/chunks/quadrantDiagram-34T5L4WZ.ChX7xo6B.js">
27
+ <link rel="modulepreload" href="/docs/assets/chunks/xychartDiagram-5P7HB3ND.DtXsNUaf.js">
28
+ <link rel="modulepreload" href="/docs/assets/chunks/requirementDiagram-MS252O5E.DbKtHG_Q.js">
29
+ <link rel="modulepreload" href="/docs/assets/chunks/sequenceDiagram-FGHM5R23.BYso9LlE.js">
30
+ <link rel="modulepreload" href="/docs/assets/chunks/classDiagram-6PBFFD2Q.irslOV8B.js">
31
+ <link rel="modulepreload" href="/docs/assets/chunks/classDiagram-v2-HSJHXN6E.irslOV8B.js">
32
+ <link rel="modulepreload" href="/docs/assets/chunks/stateDiagram-FHFEXIEX.D8l54jqW.js">
33
+ <link rel="modulepreload" href="/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.CAYMmzGj.js">
34
+ <link rel="modulepreload" href="/docs/assets/chunks/journeyDiagram-VCZTEJTY.BoVHerYZ.js">
35
+ <link rel="modulepreload" href="/docs/assets/chunks/timeline-definition-GMOUNBTQ.BLdhhyy9.js">
36
+ <link rel="modulepreload" href="/docs/assets/chunks/mindmap-definition-QFDTVHPH.DLPMLJlv.js">
37
+ <link rel="modulepreload" href="/docs/assets/chunks/kanban-definition-6JOO6SKY.CfYmPHZg.js">
38
+ <link rel="modulepreload" href="/docs/assets/chunks/sankeyDiagram-XADWPNL6.Spw8tv-7.js">
39
+ <link rel="modulepreload" href="/docs/assets/chunks/diagram-TYMM5635.DSzlJp2D.js">
40
+ <link rel="modulepreload" href="/docs/assets/chunks/diagram-MMDJMWI5.BxtXxgIR.js">
41
+ <link rel="modulepreload" href="/docs/assets/chunks/blockDiagram-DXYQGD6D.sxrH_f0l.js">
42
+ <link rel="modulepreload" href="/docs/assets/chunks/diagram-5BDNPKRD.CgreoM_Z.js">
43
+ <link rel="modulepreload" href="/docs/assets/chunks/architectureDiagram-Q4EWVU46.CA-hBJCN.js">
44
+ <link rel="modulepreload" href="/docs/assets/chunks/ishikawaDiagram-UXIWVN3A.CXHTUcM3.js">
45
+ <link rel="modulepreload" href="/docs/assets/chunks/vennDiagram-DHZGUBPP.CyGT2F_P.js">
46
+ <link rel="modulepreload" href="/docs/assets/chunks/diagram-G4DWMVQ6.DlZGpm6W.js">
47
+ <link rel="modulepreload" href="/docs/assets/chunks/wardleyDiagram-NUSXRM2D.p_Sz9p1i.js">
48
48
  <link rel="modulepreload" href="/docs/assets/chunks/virtual_mermaid-config.DDnGl6nM.js">
49
- <link rel="modulepreload" href="/docs/assets/evals.md.C851kViu.lean.js">
49
+ <link rel="modulepreload" href="/docs/assets/evals.md.CHR34K1Y.lean.js">
50
50
  <script id="check-dark-mode">(()=>{const e=localStorage.getItem("vitepress-theme-appearance")||"auto",a=window.matchMedia("(prefers-color-scheme: dark)").matches;(!e||e==="auto"?a:e==="dark")&&document.documentElement.classList.add("dark")})();</script>
51
51
  <script id="check-mac-os">document.documentElement.classList.toggle("mac",/Mac|iPhone|iPod|iPad/i.test(navigator.platform));</script>
52
52
  <link rel="alternate" type="text/plain" href="/docs/llms.txt">
53
53
  <link rel="alternate" type="text/markdown" href="/docs/evals.md">
54
54
  </head>
55
55
  <body>
56
- <div id="app"><div class="Layout" data-v-5ebc75e4><!--[--><!--]--><!--[--><span tabindex="-1" data-v-7de63af3></span><a href="#VPContent" class="VPSkipLink visually-hidden" data-v-7de63af3>Skip to content</a><!--]--><!----><header class="VPNav" data-v-5ebc75e4 data-v-e8579816><div class="VPNavBar" data-v-e8579816 data-v-bbf4446f><div class="wrapper" data-v-bbf4446f><div class="container" data-v-bbf4446f><div class="title" data-v-bbf4446f><div class="VPNavBarTitle has-sidebar" data-v-bbf4446f data-v-ebd5f04e><a class="title" href="/docs/" data-v-ebd5f04e><!--[--><!--]--><!----><span data-v-ebd5f04e>Grok Bot Development Kit (BDK)</span><!--[--><!--[--><!--[--><!--[--><span class="bdk-version" title="BDK 0.2.13 (@cursor/bdk package)" data-v-d89e5038>0.2.13</span><!--]--><!--]--><!--]--><!--]--></a></div></div><div class="content" data-v-bbf4446f><div class="content-body" data-v-bbf4446f><!--[--><!--]--><div class="VPNavBarSearch search" data-v-bbf4446f><!--[--><!----><div id="local-search"><button type="button" class="DocSearch DocSearch-Button" aria-label="Search"><span class="DocSearch-Button-Container"><span class="vp-icon DocSearch-Search-Icon"></span><span class="DocSearch-Button-Placeholder">Search</span></span><span class="DocSearch-Button-Keys"><kbd class="DocSearch-Button-Key"></kbd><kbd class="DocSearch-Button-Key">K</kbd></span></button></div><!--]--></div><nav aria-labelledby="main-nav-aria-label" class="VPNavBarMenu menu" data-v-bbf4446f data-v-7fa90d1c><span id="main-nav-aria-label" class="visually-hidden" data-v-7fa90d1c> Main Navigation </span><!--[--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/docs/quickstart.html" tabindex="0" data-v-7fa90d1c data-v-8d7ed182><!--[--><span data-v-8d7ed182>Quickstart</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/docs/guides/mcp-oauth.html" tabindex="0" data-v-7fa90d1c data-v-8d7ed182><!--[--><span data-v-8d7ed182>Guides</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/docs/guides/github.html" tabindex="0" data-v-7fa90d1c data-v-8d7ed182><!--[--><span data-v-8d7ed182>Integrations</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/docs/templates/security-reviewer.html" tabindex="0" data-v-7fa90d1c data-v-8d7ed182><!--[--><span data-v-8d7ed182>Templates</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/docs/reference/project-layout.html" tabindex="0" data-v-7fa90d1c data-v-8d7ed182><!--[--><span data-v-8d7ed182>Reference</span><!--]--></a><!--]--><!--]--></nav><!----><div class="VPNavBarAppearance appearance" data-v-bbf4446f data-v-6a44a4fa><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-6a44a4fa data-v-b541f24b data-v-a48af969><span class="check" data-v-a48af969><span class="icon" data-v-a48af969><!--[--><span class="vpi-sun sun" data-v-b541f24b></span><span class="vpi-moon moon" data-v-b541f24b></span><!--]--></span></span></button></div><!----><div class="VPFlyout VPNavBarExtra extra" data-v-bbf4446f data-v-8d21ceac data-v-269c0ea1><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="extra navigation" data-v-269c0ea1><span class="vpi-more-horizontal icon" data-v-269c0ea1></span></button><div class="menu" data-v-269c0ea1><div class="VPMenu" data-v-269c0ea1 data-v-ab92b832><!----><!--[--><!--[--><!----><div class="group" data-v-8d21ceac><div class="item appearance" data-v-8d21ceac><p class="label" data-v-8d21ceac>Appearance</p><div class="appearance-action" data-v-8d21ceac><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-8d21ceac data-v-b541f24b data-v-a48af969><span class="check" data-v-a48af969><span class="icon" data-v-a48af969><!--[--><span class="vpi-sun sun" data-v-b541f24b></span><span class="vpi-moon moon" data-v-b541f24b></span><!--]--></span></span></button></div></div></div><!----><!--]--><!--]--></div></div></div><!--[--><!--]--><button type="button" class="VPNavBarHamburger hamburger" aria-label="mobile navigation" aria-expanded="false" aria-controls="VPNavScreen" data-v-bbf4446f data-v-efff335d><span class="container" data-v-efff335d><span class="top" data-v-efff335d></span><span class="middle" data-v-efff335d></span><span class="bottom" data-v-efff335d></span></span></button></div></div></div></div><div class="divider" data-v-bbf4446f><div class="divider-line" data-v-bbf4446f></div></div></div><!----></header><div class="VPLocalNav has-sidebar empty" data-v-5ebc75e4 data-v-636a9279><div class="container" data-v-636a9279><button class="menu" aria-expanded="false" aria-controls="VPSidebarNav" data-v-636a9279><span class="vpi-align-left menu-icon" data-v-636a9279></span><span class="menu-text" data-v-636a9279>Menu</span></button><div class="VPLocalNavOutlineDropdown" style="--vp-vh:0px;" data-v-636a9279 data-v-ae38d8b4><button data-v-ae38d8b4>Return to top</button><!----></div></div></div><aside class="VPSidebar" data-v-5ebc75e4 data-v-f102723c><div class="curtain" data-v-f102723c></div><nav class="nav" id="VPSidebarNav" aria-labelledby="sidebar-aria-label" tabindex="-1" data-v-f102723c><span class="visually-hidden" id="sidebar-aria-label" data-v-f102723c> Sidebar Navigation </span><!--[--><!--]--><!--[--><div class="no-transition group" data-v-9c447dd5><section class="VPSidebarItem level-0" data-v-9c447dd5 data-v-8ccd545c><div class="item" role="button" tabindex="0" data-v-8ccd545c><div class="indicator" data-v-8ccd545c></div><h2 class="text" data-v-8ccd545c>Getting started</h2><!----></div><div class="items" data-v-8ccd545c><!--[--><div class="VPSidebarItem level-1 is-link" data-v-8ccd545c><div class="item" data-v-8ccd545c><div class="indicator" data-v-8ccd545c></div><a class="VPLink link link" href="/docs/" data-v-8ccd545c><!--[--><p class="text" data-v-8ccd545c>Overview</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-8ccd545c><div class="item" data-v-8ccd545c><div class="indicator" data-v-8ccd545c></div><a class="VPLink link link" href="/docs/quickstart.html" data-v-8ccd545c><!--[--><p class="text" data-v-8ccd545c>Building your first agent</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-9c447dd5><section class="VPSidebarItem level-0 collapsible" data-v-9c447dd5 data-v-8ccd545c><div class="item" role="button" tabindex="0" data-v-8ccd545c><div class="indicator" data-v-8ccd545c></div><h2 class="text" data-v-8ccd545c>Integrations</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-8ccd545c><span class="vpi-chevron-right caret-icon" data-v-8ccd545c></span></div></div><div class="items" data-v-8ccd545c><!--[--><div class="VPSidebarItem level-1 is-link" data-v-8ccd545c><div class="item" data-v-8ccd545c><div class="indicator" data-v-8ccd545c></div><a class="VPLink link link" href="/docs/guides/github.html" data-v-8ccd545c><!--[--><p class="text" data-v-8ccd545c>GitHub</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-8ccd545c><div class="item" data-v-8ccd545c><div class="indicator" data-v-8ccd545c></div><a class="VPLink link link" href="/docs/guides/slack.html" data-v-8ccd545c><!--[--><p class="text" data-v-8ccd545c>Slack</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-8ccd545c><div class="item" data-v-8ccd545c><div class="indicator" data-v-8ccd545c></div><a class="VPLink link link" href="/docs/guides/webhooks.html" data-v-8ccd545c><!--[--><p class="text" data-v-8ccd545c>Webhooks</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-8ccd545c><div class="item" data-v-8ccd545c><div class="indicator" data-v-8ccd545c></div><a class="VPLink link link" href="/docs/guides/convert-automation.html" data-v-8ccd545c><!--[--><p class="text" data-v-8ccd545c>Cursor Automations</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-8ccd545c><div class="item" data-v-8ccd545c><div class="indicator" data-v-8ccd545c></div><a class="VPLink link link" href="/docs/guides/opentelemetry.html" data-v-8ccd545c><!--[--><p class="text" data-v-8ccd545c>OpenTelemetry</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-8ccd545c><div class="item" data-v-8ccd545c><div class="indicator" data-v-8ccd545c></div><a class="VPLink link link" href="/docs/guides/gitlab.html" data-v-8ccd545c><!--[--><p class="text" data-v-8ccd545c>GitLab</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-8ccd545c><div class="item" data-v-8ccd545c><div class="indicator" data-v-8ccd545c></div><a class="VPLink link link" href="/docs/guides/bitbucket.html" data-v-8ccd545c><!--[--><p class="text" data-v-8ccd545c>Bitbucket</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-9c447dd5><section class="VPSidebarItem level-0 collapsible" data-v-9c447dd5 data-v-8ccd545c><div class="item" role="button" tabindex="0" data-v-8ccd545c><div class="indicator" data-v-8ccd545c></div><h2 class="text" data-v-8ccd545c>Extensions</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-8ccd545c><span class="vpi-chevron-right caret-icon" data-v-8ccd545c></span></div></div><div class="items" data-v-8ccd545c><!--[--><div class="VPSidebarItem level-1 is-link" data-v-8ccd545c><div class="item" data-v-8ccd545c><div class="indicator" data-v-8ccd545c></div><a class="VPLink link link" href="/docs/reference/extensions.html" data-v-8ccd545c><!--[--><p class="text" data-v-8ccd545c>Overview</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-8ccd545c><div class="item" data-v-8ccd545c><div class="indicator" data-v-8ccd545c></div><a class="VPLink link link" href="/docs/guides/cloud-agents.html" data-v-8ccd545c><!--[--><p class="text" data-v-8ccd545c>Cloud agents</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-8ccd545c><div class="item" data-v-8ccd545c><div class="indicator" data-v-8ccd545c></div><a class="VPLink link link" href="/docs/guides/grokbot-agents.html" data-v-8ccd545c><!--[--><p class="text" data-v-8ccd545c>Grok Bot agents</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-8ccd545c><div class="item" data-v-8ccd545c><div class="indicator" data-v-8ccd545c></div><a class="VPLink link link" href="/docs/guides/improve.html" data-v-8ccd545c><!--[--><p class="text" data-v-8ccd545c>Self-improvement</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-8ccd545c><div class="item" data-v-8ccd545c><div class="indicator" data-v-8ccd545c></div><a class="VPLink link link" href="/docs/guides/jev.html" data-v-8ccd545c><!--[--><p class="text" data-v-8ccd545c>Jev</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-9c447dd5><section class="VPSidebarItem level-0 collapsible has-active" data-v-9c447dd5 data-v-8ccd545c><div class="item" role="button" tabindex="0" data-v-8ccd545c><div class="indicator" data-v-8ccd545c></div><h2 class="text" data-v-8ccd545c>Guides</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-8ccd545c><span class="vpi-chevron-right caret-icon" data-v-8ccd545c></span></div></div><div class="items" data-v-8ccd545c><!--[--><div class="VPSidebarItem level-1 is-link" data-v-8ccd545c><div class="item" data-v-8ccd545c><div class="indicator" data-v-8ccd545c></div><a class="VPLink link link" href="/docs/guides/mcp-oauth.html" data-v-8ccd545c><!--[--><p class="text" data-v-8ccd545c>MCP</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-8ccd545c><div class="item" data-v-8ccd545c><div class="indicator" data-v-8ccd545c></div><a class="VPLink link link" href="/docs/guides/hooks.html" data-v-8ccd545c><!--[--><p class="text" data-v-8ccd545c>Hooks</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-8ccd545c><div class="item" data-v-8ccd545c><div class="indicator" data-v-8ccd545c></div><a class="VPLink link link" href="/docs/guides/agent-to-agent.html" data-v-8ccd545c><!--[--><p class="text" data-v-8ccd545c>Peer agents</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-8ccd545c><div class="item" data-v-8ccd545c><div class="indicator" data-v-8ccd545c></div><a class="VPLink link link" href="/docs/deployment.html" data-v-8ccd545c><!--[--><p class="text" data-v-8ccd545c>Deployment</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-8ccd545c><div class="item" data-v-8ccd545c><div class="indicator" data-v-8ccd545c></div><a class="VPLink link link" href="/docs/guides/migrate.html" data-v-8ccd545c><!--[--><p class="text" data-v-8ccd545c>Early-alpha migration</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-8ccd545c><div class="item" data-v-8ccd545c><div class="indicator" data-v-8ccd545c></div><a class="VPLink link link" href="/docs/evals.html" data-v-8ccd545c><!--[--><p class="text" data-v-8ccd545c>Evals</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-8ccd545c><div class="item" data-v-8ccd545c><div class="indicator" data-v-8ccd545c></div><a class="VPLink link link" href="/docs/hillclimbing.html" data-v-8ccd545c><!--[--><p class="text" data-v-8ccd545c>Hillclimbing</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-8ccd545c><div class="item" data-v-8ccd545c><div class="indicator" data-v-8ccd545c></div><a class="VPLink link link" href="/docs/building-with-agents.html" data-v-8ccd545c><!--[--><p class="text" data-v-8ccd545c>Build with a coding agent</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-8ccd545c><div class="item" data-v-8ccd545c><div class="indicator" data-v-8ccd545c></div><a class="VPLink link link" href="/docs/troubleshooting.html" data-v-8ccd545c><!--[--><p class="text" data-v-8ccd545c>Troubleshooting</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-9c447dd5><section class="VPSidebarItem level-0 collapsible" data-v-9c447dd5 data-v-8ccd545c><div class="item" role="button" tabindex="0" data-v-8ccd545c><div class="indicator" data-v-8ccd545c></div><h2 class="text" data-v-8ccd545c>Templates</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-8ccd545c><span class="vpi-chevron-right caret-icon" data-v-8ccd545c></span></div></div><div class="items" data-v-8ccd545c><!--[--><div class="VPSidebarItem level-1 is-link" data-v-8ccd545c><div class="item" data-v-8ccd545c><div class="indicator" data-v-8ccd545c></div><a class="VPLink link link" href="/docs/templates/grokbot-agents.html" data-v-8ccd545c><!--[--><p class="text" data-v-8ccd545c>Grok Bot agents</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-8ccd545c><div class="item" data-v-8ccd545c><div class="indicator" data-v-8ccd545c></div><a class="VPLink link link" href="/docs/templates/security-reviewer.html" data-v-8ccd545c><!--[--><p class="text" data-v-8ccd545c>Security reviewer</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-8ccd545c><div class="item" data-v-8ccd545c><div class="indicator" data-v-8ccd545c></div><a class="VPLink link link" href="/docs/templates/thermo-review.html" data-v-8ccd545c><!--[--><p class="text" data-v-8ccd545c>Thermo review</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-8ccd545c><div class="item" data-v-8ccd545c><div class="indicator" data-v-8ccd545c></div><a class="VPLink link link" href="/docs/templates/thermo-quality-review.html" data-v-8ccd545c><!--[--><p class="text" data-v-8ccd545c>Thermo quality review</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-8ccd545c><div class="item" data-v-8ccd545c><div class="indicator" data-v-8ccd545c></div><a class="VPLink link link" href="/docs/templates/agentic-owners.html" data-v-8ccd545c><!--[--><p class="text" data-v-8ccd545c>Agentic Approver</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-8ccd545c><div class="item" data-v-8ccd545c><div class="indicator" data-v-8ccd545c></div><a class="VPLink link link" href="/docs/templates/triage.html" data-v-8ccd545c><!--[--><p class="text" data-v-8ccd545c>Triage agent</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-9c447dd5><section class="VPSidebarItem level-0 collapsible" data-v-9c447dd5 data-v-8ccd545c><div class="item" role="button" tabindex="0" data-v-8ccd545c><div class="indicator" data-v-8ccd545c></div><h2 class="text" data-v-8ccd545c>Reference</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-8ccd545c><span class="vpi-chevron-right caret-icon" data-v-8ccd545c></span></div></div><div class="items" data-v-8ccd545c><!--[--><div class="VPSidebarItem level-1 is-link" data-v-8ccd545c><div class="item" data-v-8ccd545c><div class="indicator" data-v-8ccd545c></div><a class="VPLink link link" href="/docs/reference/project-layout.html" data-v-8ccd545c><!--[--><p class="text" data-v-8ccd545c>Project layout</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-8ccd545c><div class="item" data-v-8ccd545c><div class="indicator" data-v-8ccd545c></div><a class="VPLink link link" href="/docs/reference/agent-config.html" data-v-8ccd545c><!--[--><p class="text" data-v-8ccd545c>Agent config</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-8ccd545c><div class="item" data-v-8ccd545c><div class="indicator" data-v-8ccd545c></div><a class="VPLink link link" href="/docs/reference/instructions.html" data-v-8ccd545c><!--[--><p class="text" data-v-8ccd545c>Instructions</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-8ccd545c><div class="item" data-v-8ccd545c><div class="indicator" data-v-8ccd545c></div><a class="VPLink link link" href="/docs/reference/tools.html" data-v-8ccd545c><!--[--><p class="text" data-v-8ccd545c>Tools</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-8ccd545c><div class="item" data-v-8ccd545c><div class="indicator" data-v-8ccd545c></div><a class="VPLink link link" href="/docs/reference/prompt.html" data-v-8ccd545c><!--[--><p class="text" data-v-8ccd545c>prompt</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-8ccd545c><div class="item" data-v-8ccd545c><div class="indicator" data-v-8ccd545c></div><a class="VPLink link link" href="/docs/reference/skills.html" data-v-8ccd545c><!--[--><p class="text" data-v-8ccd545c>Skills</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-8ccd545c><div class="item" data-v-8ccd545c><div class="indicator" data-v-8ccd545c></div><a class="VPLink link link" href="/docs/reference/connections.html" data-v-8ccd545c><!--[--><p class="text" data-v-8ccd545c>MCP Connections</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-8ccd545c><div class="item" data-v-8ccd545c><div class="indicator" data-v-8ccd545c></div><a class="VPLink link link" href="/docs/reference/subagents.html" data-v-8ccd545c><!--[--><p class="text" data-v-8ccd545c>Subagents</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-8ccd545c><div class="item" data-v-8ccd545c><div class="indicator" data-v-8ccd545c></div><a class="VPLink link link" href="/docs/reference/channels.html" data-v-8ccd545c><!--[--><p class="text" data-v-8ccd545c>Channels</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-8ccd545c><div class="item" data-v-8ccd545c><div class="indicator" data-v-8ccd545c></div><a class="VPLink link link" href="/docs/reference/schedules.html" data-v-8ccd545c><!--[--><p class="text" data-v-8ccd545c>Schedules & reminders</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-8ccd545c><div class="item" data-v-8ccd545c><div class="indicator" data-v-8ccd545c></div><a class="VPLink link link" href="/docs/reference/hooks.html" data-v-8ccd545c><!--[--><p class="text" data-v-8ccd545c>Hooks</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-8ccd545c><div class="item" data-v-8ccd545c><div class="indicator" data-v-8ccd545c></div><a class="VPLink link link" href="/docs/reference/evals.html" data-v-8ccd545c><!--[--><p class="text" data-v-8ccd545c>Evals</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-8ccd545c><div class="item" data-v-8ccd545c><div class="indicator" data-v-8ccd545c></div><a class="VPLink link link" href="/docs/reference/artifacts.html" data-v-8ccd545c><!--[--><p class="text" data-v-8ccd545c>Artifacts</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-8ccd545c><div class="item" data-v-8ccd545c><div class="indicator" data-v-8ccd545c></div><a class="VPLink link link" href="/docs/reference/sessions.html" data-v-8ccd545c><!--[--><p class="text" data-v-8ccd545c>Sessions & streaming</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-8ccd545c><div class="item" data-v-8ccd545c><div class="indicator" data-v-8ccd545c></div><a class="VPLink link link" href="/docs/reference/playground.html" data-v-8ccd545c><!--[--><p class="text" data-v-8ccd545c>Playground</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-8ccd545c><div class="item" data-v-8ccd545c><div class="indicator" data-v-8ccd545c></div><a class="VPLink link link" href="/docs/reference/cli.html" data-v-8ccd545c><!--[--><p class="text" data-v-8ccd545c>CLI</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-8ccd545c><div class="item" data-v-8ccd545c><div class="indicator" data-v-8ccd545c></div><a class="VPLink link link" href="/docs/reference/http-api.html" data-v-8ccd545c><!--[--><p class="text" data-v-8ccd545c>HTTP API</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><!--]--><!--[--><!--]--></nav></aside><div class="VPContent has-sidebar" id="VPContent" data-v-5ebc75e4 data-v-4ab733be><div class="VPDoc has-sidebar has-aside" data-v-4ab733be data-v-4e7466dc><!--[--><!--]--><div class="container" data-v-4e7466dc><div class="aside" data-v-4e7466dc><div class="aside-curtain" data-v-4e7466dc></div><div class="aside-container" data-v-4e7466dc><div class="aside-content" data-v-4e7466dc><div class="VPDocAside" data-v-4e7466dc data-v-4f3f9a30><!--[--><!--]--><!--[--><!--]--><nav aria-labelledby="doc-outline-aria-label" class="VPDocAsideOutline" data-v-4f3f9a30 data-v-aacbb3fc><div class="content" data-v-aacbb3fc><div class="outline-marker" data-v-aacbb3fc></div><div aria-level="2" class="outline-title" id="doc-outline-aria-label" role="heading" data-v-aacbb3fc>On this page</div><ul class="VPDocOutlineItem root" data-v-aacbb3fc data-v-0ffefe2a><!--[--><!--]--></ul></div></nav><!--[--><!--]--><div class="spacer" data-v-4f3f9a30></div><!--[--><!--]--><!----><!--[--><!--]--><!--[--><!--]--></div></div></div></div><div class="content" data-v-4e7466dc><div class="content-container" data-v-4e7466dc><!--[--><!--]--><main class="main" data-v-4e7466dc><div style="position:relative;" class="vp-doc _docs_evals" data-v-4e7466dc><div><h1 id="evals" tabindex="-1">Evals <a class="header-anchor" href="#evals" aria-label="Permalink to &quot;Evals&quot;">​</a></h1><p>An eval sends a fixed input to the real agent and checks the resulting trajectory: whether the turn succeeded, which tools ran, and what shape the answer took. Use evals to protect behavior you already understand, not to discover what the prompt should do.</p><p>Evals run real model turns and real tools. Guard external writes before running a suite against an agent that can post, merge, or deploy.</p><h2 id="protect-a-tool-decision" tabindex="-1">Protect a tool decision <a class="header-anchor" href="#protect-a-tool-decision" aria-label="Permalink to &quot;Protect a tool decision&quot;">​</a></h2><p>This smoke case asks for a PR verdict, requires the read-only inspection tool, and fails if the agent tries to approve. The CLI reports all three decisions together instead of stopping at the first miss.</p><p>Use the <a href="./guides/jev.html">Jev extension</a> when host code needs a typed choice, score, or boolean before it writes.</p><div class="language-ts vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">ts</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">// evals/readiness.eval.ts</span></span>
56
+ <div id="app"><div class="Layout" data-v-5ebc75e4><!--[--><!--]--><!--[--><span tabindex="-1" data-v-7de63af3></span><a href="#VPContent" class="VPSkipLink visually-hidden" data-v-7de63af3>Skip to content</a><!--]--><!----><header class="VPNav" data-v-5ebc75e4 data-v-e8579816><div class="VPNavBar" data-v-e8579816 data-v-bbf4446f><div class="wrapper" data-v-bbf4446f><div class="container" data-v-bbf4446f><div class="title" data-v-bbf4446f><div class="VPNavBarTitle has-sidebar" data-v-bbf4446f data-v-ebd5f04e><a class="title" href="/docs/" data-v-ebd5f04e><!--[--><!--]--><!----><span data-v-ebd5f04e>Grok Bot Development Kit (BDK)</span><!--[--><!--[--><!--[--><!--[--><span class="bdk-version" title="BDK 0.2.15 (@cursor/bdk package)" data-v-d89e5038>0.2.15</span><!--]--><!--]--><!--]--><!--]--></a></div></div><div class="content" data-v-bbf4446f><div class="content-body" data-v-bbf4446f><!--[--><!--]--><div class="VPNavBarSearch search" data-v-bbf4446f><!--[--><!----><div id="local-search"><button type="button" class="DocSearch DocSearch-Button" aria-label="Search"><span class="DocSearch-Button-Container"><span class="vp-icon DocSearch-Search-Icon"></span><span class="DocSearch-Button-Placeholder">Search</span></span><span class="DocSearch-Button-Keys"><kbd class="DocSearch-Button-Key"></kbd><kbd class="DocSearch-Button-Key">K</kbd></span></button></div><!--]--></div><nav aria-labelledby="main-nav-aria-label" class="VPNavBarMenu menu" data-v-bbf4446f data-v-7fa90d1c><span id="main-nav-aria-label" class="visually-hidden" data-v-7fa90d1c> Main Navigation </span><!--[--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/docs/quickstart.html" tabindex="0" data-v-7fa90d1c data-v-8d7ed182><!--[--><span data-v-8d7ed182>Quickstart</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/docs/guides/mcp-oauth.html" tabindex="0" data-v-7fa90d1c data-v-8d7ed182><!--[--><span data-v-8d7ed182>Guides</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/docs/guides/github.html" tabindex="0" data-v-7fa90d1c data-v-8d7ed182><!--[--><span data-v-8d7ed182>Integrations</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/docs/templates/security-reviewer.html" tabindex="0" data-v-7fa90d1c data-v-8d7ed182><!--[--><span data-v-8d7ed182>Templates</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/docs/reference/project-layout.html" tabindex="0" data-v-7fa90d1c data-v-8d7ed182><!--[--><span data-v-8d7ed182>Reference</span><!--]--></a><!--]--><!--]--></nav><!----><div class="VPNavBarAppearance appearance" data-v-bbf4446f data-v-6a44a4fa><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-6a44a4fa data-v-b541f24b data-v-a48af969><span class="check" data-v-a48af969><span class="icon" data-v-a48af969><!--[--><span class="vpi-sun sun" data-v-b541f24b></span><span class="vpi-moon moon" data-v-b541f24b></span><!--]--></span></span></button></div><!----><div class="VPFlyout VPNavBarExtra extra" data-v-bbf4446f data-v-8d21ceac data-v-269c0ea1><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="extra navigation" data-v-269c0ea1><span class="vpi-more-horizontal icon" data-v-269c0ea1></span></button><div class="menu" data-v-269c0ea1><div class="VPMenu" data-v-269c0ea1 data-v-ab92b832><!----><!--[--><!--[--><!----><div class="group" data-v-8d21ceac><div class="item appearance" data-v-8d21ceac><p class="label" data-v-8d21ceac>Appearance</p><div class="appearance-action" data-v-8d21ceac><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-8d21ceac data-v-b541f24b data-v-a48af969><span class="check" data-v-a48af969><span class="icon" data-v-a48af969><!--[--><span class="vpi-sun sun" data-v-b541f24b></span><span class="vpi-moon moon" data-v-b541f24b></span><!--]--></span></span></button></div></div></div><!----><!--]--><!--]--></div></div></div><!--[--><!--]--><button type="button" class="VPNavBarHamburger hamburger" aria-label="mobile navigation" aria-expanded="false" aria-controls="VPNavScreen" data-v-bbf4446f data-v-efff335d><span class="container" data-v-efff335d><span class="top" data-v-efff335d></span><span class="middle" data-v-efff335d></span><span class="bottom" data-v-efff335d></span></span></button></div></div></div></div><div class="divider" data-v-bbf4446f><div class="divider-line" data-v-bbf4446f></div></div></div><!----></header><div class="VPLocalNav has-sidebar empty" data-v-5ebc75e4 data-v-636a9279><div class="container" data-v-636a9279><button class="menu" aria-expanded="false" aria-controls="VPSidebarNav" data-v-636a9279><span class="vpi-align-left menu-icon" data-v-636a9279></span><span class="menu-text" data-v-636a9279>Menu</span></button><div class="VPLocalNavOutlineDropdown" style="--vp-vh:0px;" data-v-636a9279 data-v-ae38d8b4><button data-v-ae38d8b4>Return to top</button><!----></div></div></div><aside class="VPSidebar" data-v-5ebc75e4 data-v-f102723c><div class="curtain" data-v-f102723c></div><nav class="nav" id="VPSidebarNav" aria-labelledby="sidebar-aria-label" tabindex="-1" data-v-f102723c><span class="visually-hidden" id="sidebar-aria-label" data-v-f102723c> Sidebar Navigation </span><!--[--><!--]--><!--[--><div class="no-transition group" data-v-9c447dd5><section class="VPSidebarItem level-0" data-v-9c447dd5 data-v-8ccd545c><div class="item" role="button" tabindex="0" data-v-8ccd545c><div class="indicator" data-v-8ccd545c></div><h2 class="text" data-v-8ccd545c>Getting started</h2><!----></div><div class="items" data-v-8ccd545c><!--[--><div class="VPSidebarItem level-1 is-link" data-v-8ccd545c><div class="item" data-v-8ccd545c><div class="indicator" data-v-8ccd545c></div><a class="VPLink link link" href="/docs/" data-v-8ccd545c><!--[--><p class="text" data-v-8ccd545c>Overview</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-8ccd545c><div class="item" data-v-8ccd545c><div class="indicator" data-v-8ccd545c></div><a class="VPLink link link" href="/docs/quickstart.html" data-v-8ccd545c><!--[--><p class="text" data-v-8ccd545c>Building your first agent</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-9c447dd5><section class="VPSidebarItem level-0 collapsible" data-v-9c447dd5 data-v-8ccd545c><div class="item" role="button" tabindex="0" data-v-8ccd545c><div class="indicator" data-v-8ccd545c></div><h2 class="text" data-v-8ccd545c>Integrations</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-8ccd545c><span class="vpi-chevron-right caret-icon" data-v-8ccd545c></span></div></div><div class="items" data-v-8ccd545c><!--[--><div class="VPSidebarItem level-1 is-link" data-v-8ccd545c><div class="item" data-v-8ccd545c><div class="indicator" data-v-8ccd545c></div><a class="VPLink link link" href="/docs/guides/github.html" data-v-8ccd545c><!--[--><p class="text" data-v-8ccd545c>GitHub</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-8ccd545c><div class="item" data-v-8ccd545c><div class="indicator" data-v-8ccd545c></div><a class="VPLink link link" href="/docs/guides/slack.html" data-v-8ccd545c><!--[--><p class="text" data-v-8ccd545c>Slack</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-8ccd545c><div class="item" data-v-8ccd545c><div class="indicator" data-v-8ccd545c></div><a class="VPLink link link" href="/docs/guides/webhooks.html" data-v-8ccd545c><!--[--><p class="text" data-v-8ccd545c>Webhooks</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-8ccd545c><div class="item" data-v-8ccd545c><div class="indicator" data-v-8ccd545c></div><a class="VPLink link link" href="/docs/guides/convert-automation.html" data-v-8ccd545c><!--[--><p class="text" data-v-8ccd545c>Cursor Automations</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-8ccd545c><div class="item" data-v-8ccd545c><div class="indicator" data-v-8ccd545c></div><a class="VPLink link link" href="/docs/guides/opentelemetry.html" data-v-8ccd545c><!--[--><p class="text" data-v-8ccd545c>OpenTelemetry</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-8ccd545c><div class="item" data-v-8ccd545c><div class="indicator" data-v-8ccd545c></div><a class="VPLink link link" href="/docs/guides/gitlab.html" data-v-8ccd545c><!--[--><p class="text" data-v-8ccd545c>GitLab</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-8ccd545c><div class="item" data-v-8ccd545c><div class="indicator" data-v-8ccd545c></div><a class="VPLink link link" href="/docs/guides/bitbucket.html" data-v-8ccd545c><!--[--><p class="text" data-v-8ccd545c>Bitbucket</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-9c447dd5><section class="VPSidebarItem level-0 collapsible" data-v-9c447dd5 data-v-8ccd545c><div class="item" role="button" tabindex="0" data-v-8ccd545c><div class="indicator" data-v-8ccd545c></div><h2 class="text" data-v-8ccd545c>Extensions</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-8ccd545c><span class="vpi-chevron-right caret-icon" data-v-8ccd545c></span></div></div><div class="items" data-v-8ccd545c><!--[--><div class="VPSidebarItem level-1 is-link" data-v-8ccd545c><div class="item" data-v-8ccd545c><div class="indicator" data-v-8ccd545c></div><a class="VPLink link link" href="/docs/reference/extensions.html" data-v-8ccd545c><!--[--><p class="text" data-v-8ccd545c>Overview</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-8ccd545c><div class="item" data-v-8ccd545c><div class="indicator" data-v-8ccd545c></div><a class="VPLink link link" href="/docs/guides/cloud-agents.html" data-v-8ccd545c><!--[--><p class="text" data-v-8ccd545c>Cloud agents</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-8ccd545c><div class="item" data-v-8ccd545c><div class="indicator" data-v-8ccd545c></div><a class="VPLink link link" href="/docs/guides/grokbot-agents.html" data-v-8ccd545c><!--[--><p class="text" data-v-8ccd545c>Grok Bot agents</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-8ccd545c><div class="item" data-v-8ccd545c><div class="indicator" data-v-8ccd545c></div><a class="VPLink link link" href="/docs/guides/improve.html" data-v-8ccd545c><!--[--><p class="text" data-v-8ccd545c>Self-improvement</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-8ccd545c><div class="item" data-v-8ccd545c><div class="indicator" data-v-8ccd545c></div><a class="VPLink link link" href="/docs/guides/jev.html" data-v-8ccd545c><!--[--><p class="text" data-v-8ccd545c>Jev</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-9c447dd5><section class="VPSidebarItem level-0 collapsible has-active" data-v-9c447dd5 data-v-8ccd545c><div class="item" role="button" tabindex="0" data-v-8ccd545c><div class="indicator" data-v-8ccd545c></div><h2 class="text" data-v-8ccd545c>Guides</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-8ccd545c><span class="vpi-chevron-right caret-icon" data-v-8ccd545c></span></div></div><div class="items" data-v-8ccd545c><!--[--><div class="VPSidebarItem level-1 is-link" data-v-8ccd545c><div class="item" data-v-8ccd545c><div class="indicator" data-v-8ccd545c></div><a class="VPLink link link" href="/docs/guides/mcp-oauth.html" data-v-8ccd545c><!--[--><p class="text" data-v-8ccd545c>MCP</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-8ccd545c><div class="item" data-v-8ccd545c><div class="indicator" data-v-8ccd545c></div><a class="VPLink link link" href="/docs/guides/hooks.html" data-v-8ccd545c><!--[--><p class="text" data-v-8ccd545c>Hooks</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-8ccd545c><div class="item" data-v-8ccd545c><div class="indicator" data-v-8ccd545c></div><a class="VPLink link link" href="/docs/guides/agent-to-agent.html" data-v-8ccd545c><!--[--><p class="text" data-v-8ccd545c>Peer agents</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-8ccd545c><div class="item" data-v-8ccd545c><div class="indicator" data-v-8ccd545c></div><a class="VPLink link link" href="/docs/deployment.html" data-v-8ccd545c><!--[--><p class="text" data-v-8ccd545c>Deployment</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-8ccd545c><div class="item" data-v-8ccd545c><div class="indicator" data-v-8ccd545c></div><a class="VPLink link link" href="/docs/guides/migrate.html" data-v-8ccd545c><!--[--><p class="text" data-v-8ccd545c>Early-alpha migration</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-8ccd545c><div class="item" data-v-8ccd545c><div class="indicator" data-v-8ccd545c></div><a class="VPLink link link" href="/docs/evals.html" data-v-8ccd545c><!--[--><p class="text" data-v-8ccd545c>Evals</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-8ccd545c><div class="item" data-v-8ccd545c><div class="indicator" data-v-8ccd545c></div><a class="VPLink link link" href="/docs/hillclimbing.html" data-v-8ccd545c><!--[--><p class="text" data-v-8ccd545c>Hillclimbing</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-8ccd545c><div class="item" data-v-8ccd545c><div class="indicator" data-v-8ccd545c></div><a class="VPLink link link" href="/docs/building-with-agents.html" data-v-8ccd545c><!--[--><p class="text" data-v-8ccd545c>Build with a coding agent</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-8ccd545c><div class="item" data-v-8ccd545c><div class="indicator" data-v-8ccd545c></div><a class="VPLink link link" href="/docs/troubleshooting.html" data-v-8ccd545c><!--[--><p class="text" data-v-8ccd545c>Troubleshooting</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-9c447dd5><section class="VPSidebarItem level-0 collapsible" data-v-9c447dd5 data-v-8ccd545c><div class="item" role="button" tabindex="0" data-v-8ccd545c><div class="indicator" data-v-8ccd545c></div><h2 class="text" data-v-8ccd545c>Templates</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-8ccd545c><span class="vpi-chevron-right caret-icon" data-v-8ccd545c></span></div></div><div class="items" data-v-8ccd545c><!--[--><div class="VPSidebarItem level-1 is-link" data-v-8ccd545c><div class="item" data-v-8ccd545c><div class="indicator" data-v-8ccd545c></div><a class="VPLink link link" href="/docs/templates/grokbot-agents.html" data-v-8ccd545c><!--[--><p class="text" data-v-8ccd545c>Grok Bot agents</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-8ccd545c><div class="item" data-v-8ccd545c><div class="indicator" data-v-8ccd545c></div><a class="VPLink link link" href="/docs/templates/security-reviewer.html" data-v-8ccd545c><!--[--><p class="text" data-v-8ccd545c>Security reviewer</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-8ccd545c><div class="item" data-v-8ccd545c><div class="indicator" data-v-8ccd545c></div><a class="VPLink link link" href="/docs/templates/thermo-review.html" data-v-8ccd545c><!--[--><p class="text" data-v-8ccd545c>Thermo review</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-8ccd545c><div class="item" data-v-8ccd545c><div class="indicator" data-v-8ccd545c></div><a class="VPLink link link" href="/docs/templates/thermo-quality-review.html" data-v-8ccd545c><!--[--><p class="text" data-v-8ccd545c>Thermo quality review</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-8ccd545c><div class="item" data-v-8ccd545c><div class="indicator" data-v-8ccd545c></div><a class="VPLink link link" href="/docs/templates/agentic-owners.html" data-v-8ccd545c><!--[--><p class="text" data-v-8ccd545c>Agentic Approver</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-8ccd545c><div class="item" data-v-8ccd545c><div class="indicator" data-v-8ccd545c></div><a class="VPLink link link" href="/docs/templates/triage.html" data-v-8ccd545c><!--[--><p class="text" data-v-8ccd545c>Triage agent</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-9c447dd5><section class="VPSidebarItem level-0 collapsible" data-v-9c447dd5 data-v-8ccd545c><div class="item" role="button" tabindex="0" data-v-8ccd545c><div class="indicator" data-v-8ccd545c></div><h2 class="text" data-v-8ccd545c>Reference</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-8ccd545c><span class="vpi-chevron-right caret-icon" data-v-8ccd545c></span></div></div><div class="items" data-v-8ccd545c><!--[--><div class="VPSidebarItem level-1 is-link" data-v-8ccd545c><div class="item" data-v-8ccd545c><div class="indicator" data-v-8ccd545c></div><a class="VPLink link link" href="/docs/reference/project-layout.html" data-v-8ccd545c><!--[--><p class="text" data-v-8ccd545c>Project layout</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-8ccd545c><div class="item" data-v-8ccd545c><div class="indicator" data-v-8ccd545c></div><a class="VPLink link link" href="/docs/reference/agent-config.html" data-v-8ccd545c><!--[--><p class="text" data-v-8ccd545c>Agent config</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-8ccd545c><div class="item" data-v-8ccd545c><div class="indicator" data-v-8ccd545c></div><a class="VPLink link link" href="/docs/reference/instructions.html" data-v-8ccd545c><!--[--><p class="text" data-v-8ccd545c>Instructions</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-8ccd545c><div class="item" data-v-8ccd545c><div class="indicator" data-v-8ccd545c></div><a class="VPLink link link" href="/docs/reference/tools.html" data-v-8ccd545c><!--[--><p class="text" data-v-8ccd545c>Tools</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-8ccd545c><div class="item" data-v-8ccd545c><div class="indicator" data-v-8ccd545c></div><a class="VPLink link link" href="/docs/reference/prompt.html" data-v-8ccd545c><!--[--><p class="text" data-v-8ccd545c>prompt</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-8ccd545c><div class="item" data-v-8ccd545c><div class="indicator" data-v-8ccd545c></div><a class="VPLink link link" href="/docs/reference/skills.html" data-v-8ccd545c><!--[--><p class="text" data-v-8ccd545c>Skills</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-8ccd545c><div class="item" data-v-8ccd545c><div class="indicator" data-v-8ccd545c></div><a class="VPLink link link" href="/docs/reference/connections.html" data-v-8ccd545c><!--[--><p class="text" data-v-8ccd545c>MCP Connections</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-8ccd545c><div class="item" data-v-8ccd545c><div class="indicator" data-v-8ccd545c></div><a class="VPLink link link" href="/docs/reference/subagents.html" data-v-8ccd545c><!--[--><p class="text" data-v-8ccd545c>Subagents</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-8ccd545c><div class="item" data-v-8ccd545c><div class="indicator" data-v-8ccd545c></div><a class="VPLink link link" href="/docs/reference/channels.html" data-v-8ccd545c><!--[--><p class="text" data-v-8ccd545c>Channels</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-8ccd545c><div class="item" data-v-8ccd545c><div class="indicator" data-v-8ccd545c></div><a class="VPLink link link" href="/docs/reference/schedules.html" data-v-8ccd545c><!--[--><p class="text" data-v-8ccd545c>Schedules & reminders</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-8ccd545c><div class="item" data-v-8ccd545c><div class="indicator" data-v-8ccd545c></div><a class="VPLink link link" href="/docs/reference/hooks.html" data-v-8ccd545c><!--[--><p class="text" data-v-8ccd545c>Hooks</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-8ccd545c><div class="item" data-v-8ccd545c><div class="indicator" data-v-8ccd545c></div><a class="VPLink link link" href="/docs/reference/evals.html" data-v-8ccd545c><!--[--><p class="text" data-v-8ccd545c>Evals</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-8ccd545c><div class="item" data-v-8ccd545c><div class="indicator" data-v-8ccd545c></div><a class="VPLink link link" href="/docs/reference/artifacts.html" data-v-8ccd545c><!--[--><p class="text" data-v-8ccd545c>Artifacts</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-8ccd545c><div class="item" data-v-8ccd545c><div class="indicator" data-v-8ccd545c></div><a class="VPLink link link" href="/docs/reference/sessions.html" data-v-8ccd545c><!--[--><p class="text" data-v-8ccd545c>Sessions & streaming</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-8ccd545c><div class="item" data-v-8ccd545c><div class="indicator" data-v-8ccd545c></div><a class="VPLink link link" href="/docs/reference/playground.html" data-v-8ccd545c><!--[--><p class="text" data-v-8ccd545c>Playground</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-8ccd545c><div class="item" data-v-8ccd545c><div class="indicator" data-v-8ccd545c></div><a class="VPLink link link" href="/docs/reference/cli.html" data-v-8ccd545c><!--[--><p class="text" data-v-8ccd545c>CLI</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-8ccd545c><div class="item" data-v-8ccd545c><div class="indicator" data-v-8ccd545c></div><a class="VPLink link link" href="/docs/reference/http-api.html" data-v-8ccd545c><!--[--><p class="text" data-v-8ccd545c>HTTP API</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><!--]--><!--[--><!--]--></nav></aside><div class="VPContent has-sidebar" id="VPContent" data-v-5ebc75e4 data-v-4ab733be><div class="VPDoc has-sidebar has-aside" data-v-4ab733be data-v-4e7466dc><!--[--><!--]--><div class="container" data-v-4e7466dc><div class="aside" data-v-4e7466dc><div class="aside-curtain" data-v-4e7466dc></div><div class="aside-container" data-v-4e7466dc><div class="aside-content" data-v-4e7466dc><div class="VPDocAside" data-v-4e7466dc data-v-4f3f9a30><!--[--><!--]--><!--[--><!--]--><nav aria-labelledby="doc-outline-aria-label" class="VPDocAsideOutline" data-v-4f3f9a30 data-v-aacbb3fc><div class="content" data-v-aacbb3fc><div class="outline-marker" data-v-aacbb3fc></div><div aria-level="2" class="outline-title" id="doc-outline-aria-label" role="heading" data-v-aacbb3fc>On this page</div><ul class="VPDocOutlineItem root" data-v-aacbb3fc data-v-0ffefe2a><!--[--><!--]--></ul></div></nav><!--[--><!--]--><div class="spacer" data-v-4f3f9a30></div><!--[--><!--]--><!----><!--[--><!--]--><!--[--><!--]--></div></div></div></div><div class="content" data-v-4e7466dc><div class="content-container" data-v-4e7466dc><!--[--><!--]--><main class="main" data-v-4e7466dc><div style="position:relative;" class="vp-doc _docs_evals" data-v-4e7466dc><div><h1 id="evals" tabindex="-1">Evals <a class="header-anchor" href="#evals" aria-label="Permalink to &quot;Evals&quot;">​</a></h1><p>An eval sends a fixed input to the real agent and checks the resulting trajectory: whether the turn succeeded, which tools ran, and what shape the answer took. Use evals to protect behavior you already understand, not to discover what the prompt should do.</p><p>Evals run real model turns and real tools. Guard external writes before running a suite against an agent that can post, merge, or deploy.</p><h2 id="protect-a-tool-decision" tabindex="-1">Protect a tool decision <a class="header-anchor" href="#protect-a-tool-decision" aria-label="Permalink to &quot;Protect a tool decision&quot;">​</a></h2><p>This smoke case asks for a PR verdict, requires the read-only inspection tool, and fails if the agent tries to approve. The CLI reports all three decisions together instead of stopping at the first miss.</p><p>Use the <a href="./guides/jev.html">Jev extension</a> when host code needs a typed choice, score, or boolean before it writes.</p><div class="language-ts vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">ts</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">// evals/readiness.eval.ts</span></span>
57
57
  <span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">import</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> { defineEval, includes } </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">from</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &quot;@cursor/bdk/evals&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span>
58
58
  <span class="line"></span>
59
59
  <span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">export</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> default</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> defineEval</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">({</span></span>
@@ -88,17 +88,13 @@
88
88
  <span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> )</span></span>
89
89
  <span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">);</span></span></code></pre></div><p>Use a judge when correctness depends on meaning that a schema, regex, or known value cannot capture:</p><div class="language-ts vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">ts</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">t.judge</span></span>
90
90
  <span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> .</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">factuality</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;The lint step failed on src/sidebar.ts.&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">)</span></span>
91
- <span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> .</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">atLeast</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">0.8</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">);</span></span></code></pre></div><p>Judge checks are tracked scores until you give them a hard gate. Configure the judge model in <code>evals.config.ts</code>. The <a href="./reference/evals.html#judges">Evals reference</a> owns grader options and severity rules.</p><h2 id="test-a-conversation-or-approval" tabindex="-1">Test a conversation or approval <a class="header-anchor" href="#test-a-conversation-or-approval" aria-label="Permalink to &quot;Test a conversation or approval&quot;">​</a></h2><p>Several <code>t.send</code> calls in one case share a session. Assertions on a returned turn inspect only that turn, while assertions on <code>t</code> inspect the whole conversation.</p><div class="language-ts vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">ts</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">const</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> first</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> =</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> await</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> t.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">send</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;Inspect PR 42.&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">);</span></span>
91
+ <span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> .</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">atLeast</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">0.8</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">);</span></span></code></pre></div><p>Judge checks are tracked scores until you give them a hard gate. Configure the judge model in <code>evals.config.ts</code>. The <a href="./reference/evals.html#judges">Evals reference</a> owns grader options and severity rules.</p><h2 id="test-a-conversation" tabindex="-1">Test a conversation <a class="header-anchor" href="#test-a-conversation" aria-label="Permalink to &quot;Test a conversation&quot;">​</a></h2><p>Several <code>t.send</code> calls in one case share a session. Assertions on a returned turn inspect only that turn, while assertions on <code>t</code> inspect the whole conversation.</p><div class="language-ts vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">ts</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">const</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> first</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> =</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> await</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> t.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">send</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;Inspect PR 42.&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">);</span></span>
92
92
  <span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">first.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">calledTool</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;inspect_pr&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">);</span></span>
93
93
  <span class="line"></span>
94
94
  <span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">const</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> followUp</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> =</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> await</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> t.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">send</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;Now summarize only the blockers.&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">);</span></span>
95
95
  <span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">followUp.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">usedNoTools</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">();</span></span>
96
96
  <span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">t.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">check</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(followUp.message, </span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">includes</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">/</span><span style="--shiki-light:#032F62;--shiki-dark:#DBEDFF;">blocker</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">/</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">i</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">));</span></span>
97
- <span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">t.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">succeeded</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">();</span></span></code></pre></div><p>For a tool that requires approval, the expected result is a parked turn instead of a completed one:</p><div class="language-ts vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">ts</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">await</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> t.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">send</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;Apply the approved policy update.&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">);</span></span>
98
- <span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">t.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">parked</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">();</span></span>
99
- <span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">t.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">calledTool</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;apply_policy&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, {</span></span>
100
- <span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> input: { verdict: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;update&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> },</span></span>
101
- <span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">});</span></span></code></pre></div><p>Pair an approval case with a safe branch that calls <code>t.notCalledTool(&quot;apply_policy&quot;)</code>, so both sides of the decision stay protected.</p><h2 id="pin-realistic-inputs" tabindex="-1">Pin realistic inputs <a class="header-anchor" href="#pin-realistic-inputs" aria-label="Permalink to &quot;Pin realistic inputs&quot;">​</a></h2><p>A useful eval changes only when the agent changes. Freeze canonical chat prompts, seed workspace evidence directly, and save webhook payloads instead of depending on a developer&#39;s checkout or live external state.</p><div class="language-ts vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">ts</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">await</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> t.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">send</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;Review pr/diff.patch and report blockers.&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, {</span></span>
97
+ <span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">t.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">succeeded</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">();</span></span></code></pre></div><h2 id="pin-realistic-inputs" tabindex="-1">Pin realistic inputs <a class="header-anchor" href="#pin-realistic-inputs" aria-label="Permalink to &quot;Pin realistic inputs&quot;">​</a></h2><p>A useful eval changes only when the agent changes. Freeze canonical chat prompts, seed workspace evidence directly, and save webhook payloads instead of depending on a developer&#39;s checkout or live external state.</p><div class="language-ts vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">ts</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">await</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> t.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">send</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;Review pr/diff.patch and report blockers.&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, {</span></span>
102
98
  <span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> workspaceFiles: {</span></span>
103
99
  <span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &quot;pr/diff.patch&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: [</span></span>
104
100
  <span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &quot;diff --git a/app/routes/search.ts b/app/routes/search.ts&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
@@ -125,7 +121,7 @@
125
121
  <span class="line"></span>
126
122
  <span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> return</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> await</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> postFindings</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(findings);</span></span>
127
123
  <span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div><p>This preserves the tool call in the trajectory, so the eval can still assert that the agent chose to post.</p><h2 id="evals-hooks-or-hillclimbing" tabindex="-1">Evals, hooks, or hillclimbing? <a class="header-anchor" href="#evals-hooks-or-hillclimbing" aria-label="Permalink to &quot;Evals, hooks, or hillclimbing?&quot;">​</a></h2><p>Use an eval to gate one fixed input. Use a <a href="./reference/hooks.html">hook</a> to observe every live session for metrics, auditing, or alerts. Use <a href="./hillclimbing.html">hillclimbing</a> to decide which source change improves a fixed set of inputs; every kept hillclimb change should add an eval.</p><h2 id="gates-and-scores" tabindex="-1">Gates and scores <a class="header-anchor" href="#gates-and-scores" aria-label="Permalink to &quot;Gates and scores&quot;">​</a></h2><p><code>t.succeeded()</code>, tool assertions, and deterministic checks are hard gates by default. A failed gate fails the case. <code>.soft()</code> records a measurement without blocking, while <code>.atLeast(threshold)</code> records a score and marks a miss as <code>scored</code>.</p><p>Start with decisions and output shape: the intended tool, the tempting wrong tool, and one structural check. Exact prose is rarely a stable contract.</p><h2 id="keep-improvements-with-regression-evals" tabindex="-1">Keep improvements with regression evals <a class="header-anchor" href="#keep-improvements-with-regression-evals" aria-label="Permalink to &quot;Keep improvements with regression evals&quot;">​</a></h2><p>Every kept improvement needs an eval that would have failed before the change. A tool-choice gate, bounded <code>maxToolCalls</code>, or output-shape check turns the improvement into a durable contract.</p><p>Never weaken an existing gate to make a new implementation pass. That moves the freeze line instead of proving the change.</p><h2 id="related" tabindex="-1">Related <a class="header-anchor" href="#related" aria-label="Permalink to &quot;Related&quot;">​</a></h2><ul><li><a href="./reference/evals.html">Evals reference</a>: complete authoring and runner contracts</li><li><a href="./../skills/evals/SKILL.html"><code>skills/evals/SKILL.md</code></a>: author and seed cases with a coding agent</li><li><a href="./hillclimbing.html">Hillclimbing</a>: measure a change and lock the win</li><li><a href="./reference/sessions.html">Sessions</a>: events available to trajectory assertions</li></ul></div></div></main><footer class="VPDocFooter" data-v-4e7466dc data-v-5e6607d6><!--[--><!--]--><!----><nav class="prev-next" aria-labelledby="doc-footer-aria-label" data-v-5e6607d6><span class="visually-hidden" id="doc-footer-aria-label" data-v-5e6607d6>Pager</span><div class="pager" data-v-5e6607d6><a class="VPLink link pager-link prev" href="/docs/guides/migrate.html" data-v-5e6607d6><!--[--><span class="desc" data-v-5e6607d6>Previous page</span><span class="title" data-v-5e6607d6>Early-alpha migration</span><!--]--></a></div><div class="pager" data-v-5e6607d6><a class="VPLink link pager-link next" href="/docs/hillclimbing.html" data-v-5e6607d6><!--[--><span class="desc" data-v-5e6607d6>Next page</span><span class="title" data-v-5e6607d6>Hillclimbing</span><!--]--></a></div></nav></footer><!--[--><!--]--></div></div></div><!--[--><!--]--></div></div><!----><!--[--><!--]--></div></div>
128
- <script>window.__VP_HASH_MAP__=JSON.parse("{\"building-with-agents.md\":\"Df87rAe1\",\"deployment.md\":\"BYuEcDBv\",\"evals.md\":\"C851kViu\",\"guides_agent-to-agent.md\":\"Cps5NiCV\",\"guides_bitbucket.md\":\"CKUayYtD\",\"guides_cloud-agents.md\":\"CWJjS9No\",\"guides_convert-automation.md\":\"DMEX9nF-\",\"guides_github.md\":\"TuNiZAOQ\",\"guides_gitlab.md\":\"CtNI4fSH\",\"guides_grokbot-agents.md\":\"tD1smFhU\",\"guides_hooks.md\":\"5Ce3NXxZ\",\"guides_improve.md\":\"CRrYq22s\",\"guides_jev.md\":\"D7XH4JH3\",\"guides_mcp-oauth.md\":\"DR3zhC9r\",\"guides_migrate.md\":\"sCAvvlC6\",\"guides_opentelemetry.md\":\"jcPNrQbH\",\"guides_slack.md\":\"Bn-WupSE\",\"guides_webhooks.md\":\"BBvAm_VF\",\"hillclimbing.md\":\"Dxvd-0gT\",\"index.md\":\"Dxxr7pFa\",\"quickstart.md\":\"BK5gjHM2\",\"reference_agent-config.md\":\"DrtLxWgR\",\"reference_artifacts.md\":\"DLV9MZES\",\"reference_channels.md\":\"LbNIJBwd\",\"reference_cli.md\":\"dYCAL2lB\",\"reference_connections.md\":\"DLrgAd5f\",\"reference_evals.md\":\"D5i8PuXJ\",\"reference_extensions.md\":\"OUacPetl\",\"reference_hooks.md\":\"B-eGa2km\",\"reference_http-api.md\":\"DbFNOubV\",\"reference_instructions.md\":\"DrcHZXig\",\"reference_playground.md\":\"1hx0gcIu\",\"reference_project-layout.md\":\"C2JMRh7p\",\"reference_prompt.md\":\"DqPh71XN\",\"reference_schedules.md\":\"BuJ8fgMa\",\"reference_sessions.md\":\"CyM7ARz1\",\"reference_skills.md\":\"C0guGcH0\",\"reference_subagents.md\":\"gmPt5J-M\",\"reference_tools.md\":\"DzIY9JzY\",\"templates_agentic-owners.md\":\"CvmABtia\",\"templates_grokbot-agents.md\":\"2sydjFiO\",\"templates_security-reviewer.md\":\"Gh6EF9Us\",\"templates_thermo-quality-review.md\":\"B77UyTrX\",\"templates_thermo-review.md\":\"DRJ7mC5U\",\"templates_triage.md\":\"CNN6b0JZ\",\"troubleshooting.md\":\"x-GBa7wN\"}");window.__VP_SITE_DATA__=JSON.parse("{\"lang\":\"en-US\",\"dir\":\"ltr\",\"title\":\"Grok Bot Development Kit (BDK)\",\"description\":\"Build and serve bots and agents from versioned Markdown and TypeScript.\",\"base\":\"/docs/\",\"head\":[],\"router\":{\"prefetchLinks\":true},\"appearance\":true,\"themeConfig\":{\"sdkVersion\":\"0.2.13\",\"nav\":[{\"text\":\"Quickstart\",\"link\":\"/quickstart\"},{\"text\":\"Guides\",\"link\":\"/guides/mcp-oauth\"},{\"text\":\"Integrations\",\"link\":\"/guides/github\"},{\"text\":\"Templates\",\"link\":\"/templates/security-reviewer\"},{\"text\":\"Reference\",\"link\":\"/reference/project-layout\"}],\"search\":{\"provider\":\"local\"},\"outline\":{\"level\":[2,3]},\"sidebar\":[{\"text\":\"Getting started\",\"items\":[{\"text\":\"Overview\",\"link\":\"/\"},{\"text\":\"Building your first agent\",\"link\":\"/quickstart\"}]},{\"text\":\"Integrations\",\"collapsed\":false,\"items\":[{\"text\":\"GitHub\",\"link\":\"/guides/github\"},{\"text\":\"Slack\",\"link\":\"/guides/slack\"},{\"text\":\"Webhooks\",\"link\":\"/guides/webhooks\"},{\"text\":\"Cursor Automations\",\"link\":\"/guides/convert-automation\"},{\"text\":\"OpenTelemetry\",\"link\":\"/guides/opentelemetry\"},{\"text\":\"GitLab\",\"link\":\"/guides/gitlab\"},{\"text\":\"Bitbucket\",\"link\":\"/guides/bitbucket\"}]},{\"text\":\"Extensions\",\"collapsed\":false,\"items\":[{\"text\":\"Overview\",\"link\":\"/reference/extensions\"},{\"text\":\"Cloud agents\",\"link\":\"/guides/cloud-agents\"},{\"text\":\"Grok Bot agents\",\"link\":\"/guides/grokbot-agents\"},{\"text\":\"Self-improvement\",\"link\":\"/guides/improve\"},{\"text\":\"Jev\",\"link\":\"/guides/jev\"}]},{\"text\":\"Guides\",\"collapsed\":false,\"items\":[{\"text\":\"MCP\",\"link\":\"/guides/mcp-oauth\"},{\"text\":\"Hooks\",\"link\":\"/guides/hooks\"},{\"text\":\"Peer agents\",\"link\":\"/guides/agent-to-agent\"},{\"text\":\"Deployment\",\"link\":\"/deployment\"},{\"text\":\"Early-alpha migration\",\"link\":\"/guides/migrate\"},{\"text\":\"Evals\",\"link\":\"/evals\"},{\"text\":\"Hillclimbing\",\"link\":\"/hillclimbing\"},{\"text\":\"Build with a coding agent\",\"link\":\"/building-with-agents\"},{\"text\":\"Troubleshooting\",\"link\":\"/troubleshooting\"}]},{\"text\":\"Templates\",\"collapsed\":false,\"items\":[{\"text\":\"Grok Bot agents\",\"link\":\"/templates/grokbot-agents\"},{\"text\":\"Security reviewer\",\"link\":\"/templates/security-reviewer\"},{\"text\":\"Thermo review\",\"link\":\"/templates/thermo-review\"},{\"text\":\"Thermo quality review\",\"link\":\"/templates/thermo-quality-review\"},{\"text\":\"Agentic Approver\",\"link\":\"/templates/agentic-owners\"},{\"text\":\"Triage agent\",\"link\":\"/templates/triage\"}]},{\"text\":\"Reference\",\"collapsed\":false,\"items\":[{\"text\":\"Project layout\",\"link\":\"/reference/project-layout\"},{\"text\":\"Agent config\",\"link\":\"/reference/agent-config\"},{\"text\":\"Instructions\",\"link\":\"/reference/instructions\"},{\"text\":\"Tools\",\"link\":\"/reference/tools\"},{\"text\":\"prompt\",\"link\":\"/reference/prompt\"},{\"text\":\"Skills\",\"link\":\"/reference/skills\"},{\"text\":\"MCP Connections\",\"link\":\"/reference/connections\"},{\"text\":\"Subagents\",\"link\":\"/reference/subagents\"},{\"text\":\"Channels\",\"link\":\"/reference/channels\"},{\"text\":\"Schedules & reminders\",\"link\":\"/reference/schedules\"},{\"text\":\"Hooks\",\"link\":\"/reference/hooks\"},{\"text\":\"Evals\",\"link\":\"/reference/evals\"},{\"text\":\"Artifacts\",\"link\":\"/reference/artifacts\"},{\"text\":\"Sessions & streaming\",\"link\":\"/reference/sessions\"},{\"text\":\"Playground\",\"link\":\"/reference/playground\"},{\"text\":\"CLI\",\"link\":\"/reference/cli\"},{\"text\":\"HTTP API\",\"link\":\"/reference/http-api\"}]}]},\"locales\":{},\"scrollOffset\":134,\"cleanUrls\":false}");</script>
124
+ <script>window.__VP_HASH_MAP__=JSON.parse("{\"building-with-agents.md\":\"Bi9CQ-bR\",\"deployment.md\":\"hKKN9I4c\",\"evals.md\":\"CHR34K1Y\",\"guides_agent-to-agent.md\":\"Cps5NiCV\",\"guides_bitbucket.md\":\"CKUayYtD\",\"guides_cloud-agents.md\":\"CBK7W0-O\",\"guides_convert-automation.md\":\"DMEX9nF-\",\"guides_github.md\":\"TuNiZAOQ\",\"guides_gitlab.md\":\"CtNI4fSH\",\"guides_grokbot-agents.md\":\"BwAykJ7U\",\"guides_hooks.md\":\"B_bKG1oA\",\"guides_improve.md\":\"CZKVt1cT\",\"guides_jev.md\":\"D7XH4JH3\",\"guides_mcp-oauth.md\":\"BM_eFC0L\",\"guides_migrate.md\":\"sCAvvlC6\",\"guides_opentelemetry.md\":\"jcPNrQbH\",\"guides_slack.md\":\"Bn-WupSE\",\"guides_webhooks.md\":\"Cpdc3BDX\",\"hillclimbing.md\":\"Dxvd-0gT\",\"index.md\":\"BIBHIQtU\",\"quickstart.md\":\"CduLGBAB\",\"reference_agent-config.md\":\"DrtLxWgR\",\"reference_artifacts.md\":\"DLV9MZES\",\"reference_channels.md\":\"DYg0CLud\",\"reference_cli.md\":\"BYNIHwbi\",\"reference_connections.md\":\"CxbLpaaP\",\"reference_evals.md\":\"if--BLd0\",\"reference_extensions.md\":\"OUacPetl\",\"reference_hooks.md\":\"DbJC8mcZ\",\"reference_http-api.md\":\"CrqhTv6S\",\"reference_instructions.md\":\"DrcHZXig\",\"reference_playground.md\":\"q4MI-0td\",\"reference_project-layout.md\":\"C2JMRh7p\",\"reference_prompt.md\":\"DqPh71XN\",\"reference_schedules.md\":\"03Ryy9ca\",\"reference_sessions.md\":\"C_uzIWuy\",\"reference_skills.md\":\"Ckddg6KX\",\"reference_subagents.md\":\"gmPt5J-M\",\"reference_tools.md\":\"08XR7lIl\",\"templates_agentic-owners.md\":\"CvmABtia\",\"templates_grokbot-agents.md\":\"DgpPEs7B\",\"templates_security-reviewer.md\":\"Gh6EF9Us\",\"templates_thermo-quality-review.md\":\"B77UyTrX\",\"templates_thermo-review.md\":\"DRJ7mC5U\",\"templates_triage.md\":\"CNN6b0JZ\",\"troubleshooting.md\":\"PCafNCb5\"}");window.__VP_SITE_DATA__=JSON.parse("{\"lang\":\"en-US\",\"dir\":\"ltr\",\"title\":\"Grok Bot Development Kit (BDK)\",\"description\":\"Build and serve bots and agents from versioned Markdown and TypeScript.\",\"base\":\"/docs/\",\"head\":[],\"router\":{\"prefetchLinks\":true},\"appearance\":true,\"themeConfig\":{\"sdkVersion\":\"0.2.15\",\"nav\":[{\"text\":\"Quickstart\",\"link\":\"/quickstart\"},{\"text\":\"Guides\",\"link\":\"/guides/mcp-oauth\"},{\"text\":\"Integrations\",\"link\":\"/guides/github\"},{\"text\":\"Templates\",\"link\":\"/templates/security-reviewer\"},{\"text\":\"Reference\",\"link\":\"/reference/project-layout\"}],\"search\":{\"provider\":\"local\"},\"outline\":{\"level\":[2,3]},\"sidebar\":[{\"text\":\"Getting started\",\"items\":[{\"text\":\"Overview\",\"link\":\"/\"},{\"text\":\"Building your first agent\",\"link\":\"/quickstart\"}]},{\"text\":\"Integrations\",\"collapsed\":false,\"items\":[{\"text\":\"GitHub\",\"link\":\"/guides/github\"},{\"text\":\"Slack\",\"link\":\"/guides/slack\"},{\"text\":\"Webhooks\",\"link\":\"/guides/webhooks\"},{\"text\":\"Cursor Automations\",\"link\":\"/guides/convert-automation\"},{\"text\":\"OpenTelemetry\",\"link\":\"/guides/opentelemetry\"},{\"text\":\"GitLab\",\"link\":\"/guides/gitlab\"},{\"text\":\"Bitbucket\",\"link\":\"/guides/bitbucket\"}]},{\"text\":\"Extensions\",\"collapsed\":false,\"items\":[{\"text\":\"Overview\",\"link\":\"/reference/extensions\"},{\"text\":\"Cloud agents\",\"link\":\"/guides/cloud-agents\"},{\"text\":\"Grok Bot agents\",\"link\":\"/guides/grokbot-agents\"},{\"text\":\"Self-improvement\",\"link\":\"/guides/improve\"},{\"text\":\"Jev\",\"link\":\"/guides/jev\"}]},{\"text\":\"Guides\",\"collapsed\":false,\"items\":[{\"text\":\"MCP\",\"link\":\"/guides/mcp-oauth\"},{\"text\":\"Hooks\",\"link\":\"/guides/hooks\"},{\"text\":\"Peer agents\",\"link\":\"/guides/agent-to-agent\"},{\"text\":\"Deployment\",\"link\":\"/deployment\"},{\"text\":\"Early-alpha migration\",\"link\":\"/guides/migrate\"},{\"text\":\"Evals\",\"link\":\"/evals\"},{\"text\":\"Hillclimbing\",\"link\":\"/hillclimbing\"},{\"text\":\"Build with a coding agent\",\"link\":\"/building-with-agents\"},{\"text\":\"Troubleshooting\",\"link\":\"/troubleshooting\"}]},{\"text\":\"Templates\",\"collapsed\":false,\"items\":[{\"text\":\"Grok Bot agents\",\"link\":\"/templates/grokbot-agents\"},{\"text\":\"Security reviewer\",\"link\":\"/templates/security-reviewer\"},{\"text\":\"Thermo review\",\"link\":\"/templates/thermo-review\"},{\"text\":\"Thermo quality review\",\"link\":\"/templates/thermo-quality-review\"},{\"text\":\"Agentic Approver\",\"link\":\"/templates/agentic-owners\"},{\"text\":\"Triage agent\",\"link\":\"/templates/triage\"}]},{\"text\":\"Reference\",\"collapsed\":false,\"items\":[{\"text\":\"Project layout\",\"link\":\"/reference/project-layout\"},{\"text\":\"Agent config\",\"link\":\"/reference/agent-config\"},{\"text\":\"Instructions\",\"link\":\"/reference/instructions\"},{\"text\":\"Tools\",\"link\":\"/reference/tools\"},{\"text\":\"prompt\",\"link\":\"/reference/prompt\"},{\"text\":\"Skills\",\"link\":\"/reference/skills\"},{\"text\":\"MCP Connections\",\"link\":\"/reference/connections\"},{\"text\":\"Subagents\",\"link\":\"/reference/subagents\"},{\"text\":\"Channels\",\"link\":\"/reference/channels\"},{\"text\":\"Schedules & reminders\",\"link\":\"/reference/schedules\"},{\"text\":\"Hooks\",\"link\":\"/reference/hooks\"},{\"text\":\"Evals\",\"link\":\"/reference/evals\"},{\"text\":\"Artifacts\",\"link\":\"/reference/artifacts\"},{\"text\":\"Sessions & streaming\",\"link\":\"/reference/sessions\"},{\"text\":\"Playground\",\"link\":\"/reference/playground\"},{\"text\":\"CLI\",\"link\":\"/reference/cli\"},{\"text\":\"HTTP API\",\"link\":\"/reference/http-api\"}]}]},\"locales\":{},\"scrollOffset\":134,\"cleanUrls\":false}");</script>
129
125
 
130
126
  </body>
131
127
  </html>
@@ -89,7 +89,7 @@ Configure the judge model in `evals.config.ts`. The
89
89
  [Evals reference](/docs/reference/evals.md#judges) owns grader options and
90
90
  severity rules.
91
91
 
92
- ## Test a conversation or approval
92
+ ## Test a conversation
93
93
 
94
94
  Several `t.send` calls in one case share a session. Assertions on a
95
95
  returned turn inspect only that turn, while assertions on `t` inspect
@@ -105,21 +105,6 @@ t.check(followUp.message, includes(/blocker/i));
105
105
  t.succeeded();
106
106
  ```
107
107
 
108
- For a tool that requires approval, the expected result is a parked turn
109
- instead of a completed one:
110
-
111
- ```ts
112
- await t.send("Apply the approved policy update.");
113
- t.parked();
114
- t.calledTool("apply_policy", {
115
- input: { verdict: "update" },
116
- });
117
- ```
118
-
119
- Pair an approval case with a safe branch that calls
120
- `t.notCalledTool("apply_policy")`, so both sides of the decision stay
121
- protected.
122
-
123
108
  ## Pin realistic inputs
124
109
 
125
110
  A useful eval changes only when the agent changes. Freeze canonical chat