@cursor/july 0.1.113 → 0.2.0

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 (278) hide show
  1. package/dist/channels/slack/inbound.d.ts +7 -0
  2. package/dist/channels/slack/inbound.d.ts.map +1 -1
  3. package/dist/channels/slack/inbound.js +23 -0
  4. package/dist/channels/slack/slack-channel.d.ts.map +1 -1
  5. package/dist/channels/slack/slack-channel.js +83 -4
  6. package/dist/docs/404.html +2 -2
  7. package/dist/docs/assets/{app.CAeK13eM.js → app.9eAtsjAM.js} +4 -4
  8. package/dist/docs/assets/chunks/@localSearchIndexroot.DjNBgxTF.js +1 -0
  9. package/dist/docs/assets/chunks/{VPLocalSearchBox.C9LbPHod.js → VPLocalSearchBox.C9s69nxj.js} +1 -1
  10. package/dist/docs/assets/chunks/{arc.CmMq2zmS.js → arc.DmWDRaF-.js} +1 -1
  11. package/dist/docs/assets/chunks/{architectureDiagram-Q4EWVU46.CCXB8Uj5.js → architectureDiagram-Q4EWVU46.BE1Wj4f3.js} +1 -1
  12. package/dist/docs/assets/chunks/{baseUniq.CyQo6eLe.js → baseUniq.pmEZGnWu.js} +1 -1
  13. package/dist/docs/assets/chunks/{blockDiagram-DXYQGD6D.JYq6w91N.js → blockDiagram-DXYQGD6D.D6mM-5XN.js} +1 -1
  14. package/dist/docs/assets/chunks/{c4Diagram-AHTNJAMY.BRV8GPJJ.js → c4Diagram-AHTNJAMY.ZQYTPC1b.js} +1 -1
  15. package/dist/docs/assets/chunks/channel.BNF8VK-B.js +1 -0
  16. package/dist/docs/assets/chunks/{chunk-4BX2VUAB.Bv4ooYQR.js → chunk-4BX2VUAB.CKJ7gaK8.js} +1 -1
  17. package/dist/docs/assets/chunks/{chunk-4TB4RGXK.t4JtKPcj.js → chunk-4TB4RGXK.CL61HnvB.js} +1 -1
  18. package/dist/docs/assets/chunks/{chunk-55IACEB6.34lCHj9Y.js → chunk-55IACEB6.DsA4XA1m.js} +1 -1
  19. package/dist/docs/assets/chunks/{chunk-EDXVE4YY.BSwrPNrt.js → chunk-EDXVE4YY.BODHCHFW.js} +1 -1
  20. package/dist/docs/assets/chunks/{chunk-FMBD7UC4.Beeun-R-.js → chunk-FMBD7UC4.D6NBaZTa.js} +1 -1
  21. package/dist/docs/assets/chunks/{chunk-OYMX7WX6.BUUFUcJc.js → chunk-OYMX7WX6.BLPuqFXg.js} +1 -1
  22. package/dist/docs/assets/chunks/{chunk-QZHKN3VN.B2XjHzN_.js → chunk-QZHKN3VN.BFs_ML8Z.js} +1 -1
  23. package/dist/docs/assets/chunks/{chunk-YZCP3GAM.CLYG8znk.js → chunk-YZCP3GAM.BDjuFyZv.js} +1 -1
  24. package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.iViHzfrK.js +1 -0
  25. package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.iViHzfrK.js +1 -0
  26. package/dist/docs/assets/chunks/clone.CJoR2BBM.js +1 -0
  27. package/dist/docs/assets/chunks/{cose-bilkent-S5V4N54A.DVEa6fZp.js → cose-bilkent-S5V4N54A.D85HNEsi.js} +1 -1
  28. package/dist/docs/assets/chunks/{dagre-KV5264BT.C9PZQK-S.js → dagre-KV5264BT.V463KlSF.js} +1 -1
  29. package/dist/docs/assets/chunks/{diagram-5BDNPKRD.DoN0uv3Y.js → diagram-5BDNPKRD.DhBDu1ab.js} +1 -1
  30. package/dist/docs/assets/chunks/{diagram-G4DWMVQ6.Czv3duqx.js → diagram-G4DWMVQ6.v6sC68zl.js} +1 -1
  31. package/dist/docs/assets/chunks/{diagram-MMDJMWI5.BinJ5kWb.js → diagram-MMDJMWI5.DhHsdXYv.js} +1 -1
  32. package/dist/docs/assets/chunks/{diagram-TYMM5635.DW326M4K.js → diagram-TYMM5635.BPWNSFZc.js} +1 -1
  33. package/dist/docs/assets/chunks/{erDiagram-SMLLAGMA.U2pR_OA7.js → erDiagram-SMLLAGMA.Cq0wTMPL.js} +1 -1
  34. package/dist/docs/assets/chunks/{flowDiagram-DWJPFMVM.ByWJXeYK.js → flowDiagram-DWJPFMVM.MveMtucC.js} +1 -1
  35. package/dist/docs/assets/chunks/{ganttDiagram-T4ZO3ILL.OquF0Rtg.js → ganttDiagram-T4ZO3ILL.BzKfGUSf.js} +1 -1
  36. package/dist/docs/assets/chunks/{gitGraphDiagram-UUTBAWPF.Bpn01P7X.js → gitGraphDiagram-UUTBAWPF.OToXTSW_.js} +1 -1
  37. package/dist/docs/assets/chunks/{graph.CNRB6ETL.js → graph.D82tam-l.js} +1 -1
  38. package/dist/docs/assets/chunks/{infoDiagram-42DDH7IO.CqhknMWi.js → infoDiagram-42DDH7IO.DzFlRmcE.js} +1 -1
  39. package/dist/docs/assets/chunks/{ishikawaDiagram-UXIWVN3A.C6xpR2af.js → ishikawaDiagram-UXIWVN3A.CVPRJiKe.js} +1 -1
  40. package/dist/docs/assets/chunks/{journeyDiagram-VCZTEJTY.Cg5f7oB3.js → journeyDiagram-VCZTEJTY.CQvNTfQC.js} +1 -1
  41. package/dist/docs/assets/chunks/{kanban-definition-6JOO6SKY.Cx9YTwlU.js → kanban-definition-6JOO6SKY.BwywywUl.js} +1 -1
  42. package/dist/docs/assets/chunks/{layout.ljS-wFtK.js → layout.C4BkPPba.js} +1 -1
  43. package/dist/docs/assets/chunks/{linear.jSxNrsFC.js → linear.FoSfGKD4.js} +1 -1
  44. package/dist/docs/assets/chunks/{min.Cum8AlQw.js → min.yLh8jqfl.js} +1 -1
  45. package/dist/docs/assets/chunks/{mindmap-definition-QFDTVHPH.BLiysLpe.js → mindmap-definition-QFDTVHPH.C9Dq2_CN.js} +1 -1
  46. package/dist/docs/assets/chunks/{pieDiagram-DEJITSTG.BoIDyuKF.js → pieDiagram-DEJITSTG.CiGyBcES.js} +1 -1
  47. package/dist/docs/assets/chunks/{quadrantDiagram-34T5L4WZ.DLkpDytR.js → quadrantDiagram-34T5L4WZ.1FWea9nj.js} +1 -1
  48. package/dist/docs/assets/chunks/{requirementDiagram-MS252O5E.DqTVqSu2.js → requirementDiagram-MS252O5E.B1q7ntiV.js} +1 -1
  49. package/dist/docs/assets/chunks/{sankeyDiagram-XADWPNL6.CG_6FF7j.js → sankeyDiagram-XADWPNL6.Cpr4oU_k.js} +1 -1
  50. package/dist/docs/assets/chunks/{sequenceDiagram-FGHM5R23.BIp9602K.js → sequenceDiagram-FGHM5R23.CUK68STn.js} +1 -1
  51. package/dist/docs/assets/chunks/{stateDiagram-FHFEXIEX.COSXsD9I.js → stateDiagram-FHFEXIEX.zU0yL2m4.js} +1 -1
  52. package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.nV8Nl-td.js +1 -0
  53. package/dist/docs/assets/chunks/{theme.CXJ7PNwy.js → theme.DhnKd0CD.js} +2 -2
  54. package/dist/docs/assets/chunks/{timeline-definition-GMOUNBTQ.CXdVqkLq.js → timeline-definition-GMOUNBTQ.CNYoXo3F.js} +1 -1
  55. package/dist/docs/assets/chunks/{vennDiagram-DHZGUBPP.CZxGuc4r.js → vennDiagram-DHZGUBPP.DFWH3G9s.js} +1 -1
  56. package/dist/docs/assets/chunks/{wardley-RL74JXVD.3oVgfqQk.js → wardley-RL74JXVD.Do4PwzeN.js} +1 -1
  57. package/dist/docs/assets/chunks/{wardleyDiagram-NUSXRM2D.6_irCgGJ.js → wardleyDiagram-NUSXRM2D.7WLkqM7s.js} +1 -1
  58. package/dist/docs/assets/chunks/{xychartDiagram-5P7HB3ND.TRPe92m3.js → xychartDiagram-5P7HB3ND.-SyUNgWw.js} +1 -1
  59. package/dist/docs/assets/{deployment.md.D2jQZuFx.js → deployment.md.D2YX7u_I.js} +1 -1
  60. package/dist/docs/assets/{guides_agent-to-agent.md.CD4T5FIl.js → guides_agent-to-agent.md.C6kPY8nu.js} +2 -2
  61. package/dist/docs/assets/{guides_cloud-agents.md.Cp1O3u-X.js → guides_cloud-agents.md.BPJqTZjT.js} +1 -1
  62. package/dist/docs/assets/{guides_grokbot-agents.md.CMhZNdEU.js → guides_grokbot-agents.md.CzV715v8.js} +1 -1
  63. package/dist/docs/assets/guides_hooks.md.BT9GLwEp.js +50 -0
  64. package/dist/docs/assets/guides_hooks.md.BT9GLwEp.lean.js +1 -0
  65. package/dist/docs/assets/{guides_jev.md.F5fAkkfN.js → guides_jev.md.DeSCqMaO.js} +6 -44
  66. package/dist/docs/assets/guides_jev.md.DeSCqMaO.lean.js +1 -0
  67. package/dist/docs/assets/{guides_slack.md.Bo96y42E.js → guides_slack.md.DVjNyqq5.js} +3 -3
  68. package/dist/docs/assets/{guides_slack.md.Bo96y42E.lean.js → guides_slack.md.DVjNyqq5.lean.js} +1 -1
  69. package/dist/docs/assets/reference_agent-config.md.BRxAlnRy.js +36 -0
  70. package/dist/docs/assets/{reference_agent-config.md.DGPyw7ms.lean.js → reference_agent-config.md.BRxAlnRy.lean.js} +1 -1
  71. package/dist/docs/assets/reference_artifacts.md.KRX0sAdt.js +18 -0
  72. package/dist/docs/assets/reference_artifacts.md.KRX0sAdt.lean.js +1 -0
  73. package/dist/docs/assets/reference_channels.md.DZr14vm7.js +23 -0
  74. package/dist/docs/assets/reference_channels.md.DZr14vm7.lean.js +1 -0
  75. package/dist/docs/assets/reference_cli.md.BvnQM8wd.js +97 -0
  76. package/dist/docs/assets/reference_cli.md.BvnQM8wd.lean.js +1 -0
  77. package/dist/docs/assets/{reference_connections.md.Je9dMsdd.js → reference_connections.md.DJGUCxrr.js} +18 -30
  78. package/dist/docs/assets/{reference_connections.md.Je9dMsdd.lean.js → reference_connections.md.DJGUCxrr.lean.js} +1 -1
  79. package/dist/docs/assets/{reference_evals.md.DNJzM_yf.js → reference_evals.md.C6umwNC6.js} +6 -7
  80. package/dist/docs/assets/reference_evals.md.C6umwNC6.lean.js +1 -0
  81. package/dist/docs/assets/{reference_extensions.md.Cv5aLCz_.js → reference_extensions.md.DbNYu-DP.js} +3 -3
  82. package/dist/docs/assets/{reference_extensions.md.Cv5aLCz_.lean.js → reference_extensions.md.DbNYu-DP.lean.js} +1 -1
  83. package/dist/docs/assets/reference_hooks.md.BfOkhTU0.js +45 -0
  84. package/dist/docs/assets/{reference_hooks.md.B7uzNENk.lean.js → reference_hooks.md.BfOkhTU0.lean.js} +1 -1
  85. package/dist/docs/assets/reference_http-api.md.DdwtBeCj.js +11 -0
  86. package/dist/docs/assets/{reference_http-api.md.CduHavZ2.lean.js → reference_http-api.md.DdwtBeCj.lean.js} +1 -1
  87. package/dist/docs/assets/reference_instructions.md.B2mcIzT6.js +14 -0
  88. package/dist/docs/assets/reference_instructions.md.B2mcIzT6.lean.js +1 -0
  89. package/dist/docs/assets/reference_playground.md.CyrQD_n3.js +1 -0
  90. package/dist/docs/assets/reference_playground.md.CyrQD_n3.lean.js +1 -0
  91. package/dist/docs/assets/reference_project-layout.md.BEMzxAkq.js +19 -0
  92. package/dist/docs/assets/{reference_project-layout.md.BGhgpy9V.lean.js → reference_project-layout.md.BEMzxAkq.lean.js} +1 -1
  93. package/dist/docs/assets/reference_prompt.md.BFrqjHFL.js +9 -0
  94. package/dist/docs/assets/reference_prompt.md.BFrqjHFL.lean.js +1 -0
  95. package/dist/docs/assets/reference_schedules.md.BB9N3tRR.js +47 -0
  96. package/dist/docs/assets/reference_schedules.md.BB9N3tRR.lean.js +1 -0
  97. package/dist/docs/assets/reference_sessions.md.BBp-GIt-.js +1 -0
  98. package/dist/docs/assets/{reference_sessions.md.1_6Vyv7x.lean.js → reference_sessions.md.BBp-GIt-.lean.js} +1 -1
  99. package/dist/docs/assets/reference_skills.md.BVmi3UJ_.js +15 -0
  100. package/dist/docs/assets/{reference_skills.md.DjQkRefx.lean.js → reference_skills.md.BVmi3UJ_.lean.js} +1 -1
  101. package/dist/docs/assets/reference_subagents.md.DRoRy2Uj.js +10 -0
  102. package/dist/docs/assets/{reference_subagents.md.Dl16gcBj.lean.js → reference_subagents.md.DRoRy2Uj.lean.js} +1 -1
  103. package/dist/docs/assets/{reference_tools.md.B1dH1lpa.js → reference_tools.md.CgocLDX1.js} +9 -6
  104. package/dist/docs/assets/{reference_tools.md.B1dH1lpa.lean.js → reference_tools.md.CgocLDX1.lean.js} +1 -1
  105. package/dist/docs/assets/troubleshooting.md.HY95rCCz.js +1 -0
  106. package/dist/docs/building-with-agents.html +35 -35
  107. package/dist/docs/deployment.html +37 -37
  108. package/dist/docs/deployment.md +1 -1
  109. package/dist/docs/evals.html +35 -35
  110. package/dist/docs/guides/agent-to-agent.html +38 -38
  111. package/dist/docs/guides/agent-to-agent.md +11 -12
  112. package/dist/docs/guides/bitbucket.html +35 -35
  113. package/dist/docs/guides/cloud-agents.html +36 -36
  114. package/dist/docs/guides/cloud-agents.md +1 -1
  115. package/dist/docs/guides/convert-automation.html +35 -35
  116. package/dist/docs/guides/github.html +35 -35
  117. package/dist/docs/guides/gitlab.html +35 -35
  118. package/dist/docs/guides/grokbot-agents.html +37 -37
  119. package/dist/docs/guides/grokbot-agents.md +1 -1
  120. package/dist/docs/guides/hooks.html +109 -0
  121. package/dist/docs/guides/hooks.md +111 -0
  122. package/dist/docs/guides/improve.html +35 -35
  123. package/dist/docs/guides/jev.html +42 -80
  124. package/dist/docs/guides/jev.md +22 -79
  125. package/dist/docs/guides/mcp-oauth.html +36 -36
  126. package/dist/docs/guides/opentelemetry.html +35 -35
  127. package/dist/docs/guides/slack.html +37 -37
  128. package/dist/docs/guides/slack.md +7 -0
  129. package/dist/docs/guides/webhooks.html +35 -35
  130. package/dist/docs/hashmap.json +1 -1
  131. package/dist/docs/hillclimbing.html +35 -35
  132. package/dist/docs/index.html +35 -35
  133. package/dist/docs/llms-full.txt +1683 -2054
  134. package/dist/docs/llms.txt +9 -8
  135. package/dist/docs/quickstart.html +35 -35
  136. package/dist/docs/reference/agent-config.html +42 -46
  137. package/dist/docs/reference/agent-config.md +48 -81
  138. package/dist/docs/reference/artifacts.html +39 -40
  139. package/dist/docs/reference/artifacts.md +71 -70
  140. package/dist/docs/reference/channels.html +41 -61
  141. package/dist/docs/reference/channels.md +134 -201
  142. package/dist/docs/reference/cli.html +127 -125
  143. package/dist/docs/reference/cli.md +685 -753
  144. package/dist/docs/reference/connections.html +54 -66
  145. package/dist/docs/reference/connections.md +92 -128
  146. package/dist/docs/reference/evals.html +42 -43
  147. package/dist/docs/reference/evals.md +42 -50
  148. package/dist/docs/reference/extensions.html +38 -38
  149. package/dist/docs/reference/extensions.md +9 -13
  150. package/dist/docs/reference/hooks.html +39 -67
  151. package/dist/docs/reference/hooks.md +72 -146
  152. package/dist/docs/reference/http-api.html +39 -39
  153. package/dist/docs/reference/http-api.md +137 -161
  154. package/dist/docs/reference/instructions.html +39 -39
  155. package/dist/docs/reference/instructions.md +21 -36
  156. package/dist/docs/reference/playground.html +36 -36
  157. package/dist/docs/reference/playground.md +26 -43
  158. package/dist/docs/reference/project-layout.html +38 -38
  159. package/dist/docs/reference/project-layout.md +12 -17
  160. package/dist/docs/reference/prompt.html +42 -42
  161. package/dist/docs/reference/prompt.md +18 -13
  162. package/dist/docs/reference/schedules.html +56 -91
  163. package/dist/docs/reference/schedules.md +52 -99
  164. package/dist/docs/reference/sessions.html +36 -36
  165. package/dist/docs/reference/sessions.md +36 -40
  166. package/dist/docs/reference/skills.html +38 -38
  167. package/dist/docs/reference/skills.md +15 -26
  168. package/dist/docs/reference/subagents.html +38 -38
  169. package/dist/docs/reference/subagents.md +20 -30
  170. package/dist/docs/reference/tools.html +44 -41
  171. package/dist/docs/reference/tools.md +45 -64
  172. package/dist/docs/templates/agentic-owners.html +35 -35
  173. package/dist/docs/templates/pr-autofixer.html +35 -35
  174. package/dist/docs/templates/security-reviewer.html +35 -35
  175. package/dist/docs/templates/thermo-quality-review.html +35 -35
  176. package/dist/docs/templates/thermo-review.html +35 -35
  177. package/dist/docs/templates/triage.html +35 -35
  178. package/dist/docs/troubleshooting.html +36 -36
  179. package/dist/docs/troubleshooting.md +1 -1
  180. package/dist/internal/cli-deploy.d.ts.map +1 -1
  181. package/dist/internal/cli-deploy.js +9 -1
  182. package/dist/internal/deploy-client.d.ts +6 -0
  183. package/dist/internal/deploy-client.d.ts.map +1 -1
  184. package/dist/internal/deploy-client.js +3 -0
  185. package/dist/internal/discovery/agent-config.d.ts +3 -1
  186. package/dist/internal/discovery/agent-config.d.ts.map +1 -1
  187. package/dist/internal/discovery/agent-config.js +7 -4
  188. package/dist/internal/framework-storage-selection.d.ts +1 -1
  189. package/dist/internal/framework-storage-selection.d.ts.map +1 -1
  190. package/dist/internal/platform-timers.d.ts.map +1 -1
  191. package/dist/internal/platform-timers.js +20 -2
  192. package/dist/internal/reminder-runner.d.ts +79 -1
  193. package/dist/internal/reminder-runner.d.ts.map +1 -1
  194. package/dist/internal/reminder-runner.js +276 -44
  195. package/dist/internal/server.d.ts.map +1 -1
  196. package/dist/internal/server.js +7 -0
  197. package/dist/memory.d.ts +4 -0
  198. package/dist/memory.d.ts.map +1 -1
  199. package/dist/memory.js +28 -4
  200. package/dist/playground/assets/index-DLwnR9ys.css +1 -0
  201. package/dist/playground/index.html +2 -2
  202. package/dist/types.d.ts +16 -9
  203. package/dist/types.d.ts.map +1 -1
  204. package/docs/deployment.md +1 -1
  205. package/docs/guides/agent-to-agent.md +11 -12
  206. package/docs/guides/cloud-agents.md +1 -1
  207. package/docs/guides/grokbot-agents.md +1 -1
  208. package/docs/guides/hooks.md +116 -0
  209. package/docs/guides/jev.md +23 -80
  210. package/docs/guides/slack.md +7 -0
  211. package/docs/reference/agent-config.md +48 -81
  212. package/docs/reference/artifacts.md +72 -71
  213. package/docs/reference/channels.md +135 -202
  214. package/docs/reference/cli.md +686 -754
  215. package/docs/reference/connections.md +93 -129
  216. package/docs/reference/evals.md +43 -51
  217. package/docs/reference/extensions.md +9 -13
  218. package/docs/reference/hooks.md +72 -146
  219. package/docs/reference/http-api.md +137 -161
  220. package/docs/reference/instructions.md +22 -37
  221. package/docs/reference/playground.md +26 -43
  222. package/docs/reference/project-layout.md +12 -17
  223. package/docs/reference/prompt.md +20 -15
  224. package/docs/reference/schedules.md +52 -99
  225. package/docs/reference/sessions.md +36 -40
  226. package/docs/reference/skills.md +15 -26
  227. package/docs/reference/subagents.md +20 -30
  228. package/docs/reference/tools.md +45 -64
  229. package/docs/troubleshooting.md +1 -1
  230. package/package.json +1 -1
  231. package/src/channels/slack/inbound.ts +24 -0
  232. package/src/channels/slack/slack-channel.ts +123 -1
  233. package/src/internal/cli-deploy.ts +12 -1
  234. package/src/internal/deploy-client.ts +9 -0
  235. package/src/internal/discovery/agent-config.ts +8 -6
  236. package/src/internal/framework-storage-selection.ts +1 -1
  237. package/src/internal/platform-timers.ts +24 -2
  238. package/src/internal/reminder-runner.ts +426 -63
  239. package/src/internal/server.ts +8 -0
  240. package/src/memory.ts +37 -3
  241. package/src/types.ts +16 -9
  242. package/dist/docs/assets/chunks/@localSearchIndexroot.Ck9E52Ls.js +0 -1
  243. package/dist/docs/assets/chunks/channel.BHiYmnZ4.js +0 -1
  244. package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.Degh8l90.js +0 -1
  245. package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.Degh8l90.js +0 -1
  246. package/dist/docs/assets/chunks/clone.BIywbczV.js +0 -1
  247. package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.qrxrbFsX.js +0 -1
  248. package/dist/docs/assets/guides_jev.md.F5fAkkfN.lean.js +0 -1
  249. package/dist/docs/assets/reference_agent-config.md.DGPyw7ms.js +0 -40
  250. package/dist/docs/assets/reference_artifacts.md.Bu_4HmsD.js +0 -19
  251. package/dist/docs/assets/reference_artifacts.md.Bu_4HmsD.lean.js +0 -1
  252. package/dist/docs/assets/reference_channels.md.nFWbzAic.js +0 -43
  253. package/dist/docs/assets/reference_channels.md.nFWbzAic.lean.js +0 -1
  254. package/dist/docs/assets/reference_cli.md.DLWDz9ij.js +0 -95
  255. package/dist/docs/assets/reference_cli.md.DLWDz9ij.lean.js +0 -1
  256. package/dist/docs/assets/reference_evals.md.DNJzM_yf.lean.js +0 -1
  257. package/dist/docs/assets/reference_hooks.md.B7uzNENk.js +0 -73
  258. package/dist/docs/assets/reference_http-api.md.CduHavZ2.js +0 -11
  259. package/dist/docs/assets/reference_instructions.md.CU1My5My.js +0 -14
  260. package/dist/docs/assets/reference_instructions.md.CU1My5My.lean.js +0 -1
  261. package/dist/docs/assets/reference_playground.md.Ch2d0Iqi.js +0 -1
  262. package/dist/docs/assets/reference_playground.md.Ch2d0Iqi.lean.js +0 -1
  263. package/dist/docs/assets/reference_project-layout.md.BGhgpy9V.js +0 -19
  264. package/dist/docs/assets/reference_prompt.md.Ccp0R53H.js +0 -1
  265. package/dist/docs/assets/reference_prompt.md.Ccp0R53H.lean.js +0 -1
  266. package/dist/docs/assets/reference_schedules.md.B2Nm6FaD.js +0 -82
  267. package/dist/docs/assets/reference_schedules.md.B2Nm6FaD.lean.js +0 -1
  268. package/dist/docs/assets/reference_sessions.md.1_6Vyv7x.js +0 -1
  269. package/dist/docs/assets/reference_skills.md.DjQkRefx.js +0 -15
  270. package/dist/docs/assets/reference_subagents.md.Dl16gcBj.js +0 -10
  271. package/dist/docs/assets/troubleshooting.md.mnfFG2Em.js +0 -1
  272. package/dist/playground/assets/index-DSMAewbx.css +0 -1
  273. /package/dist/docs/assets/{deployment.md.D2jQZuFx.lean.js → deployment.md.D2YX7u_I.lean.js} +0 -0
  274. /package/dist/docs/assets/{guides_agent-to-agent.md.CD4T5FIl.lean.js → guides_agent-to-agent.md.C6kPY8nu.lean.js} +0 -0
  275. /package/dist/docs/assets/{guides_cloud-agents.md.Cp1O3u-X.lean.js → guides_cloud-agents.md.BPJqTZjT.lean.js} +0 -0
  276. /package/dist/docs/assets/{guides_grokbot-agents.md.CMhZNdEU.lean.js → guides_grokbot-agents.md.CzV715v8.lean.js} +0 -0
  277. /package/dist/docs/assets/{troubleshooting.md.mnfFG2Em.lean.js → troubleshooting.md.HY95rCCz.lean.js} +0 -0
  278. /package/dist/playground/assets/{index-De_lpFxE.js → index-CX6oTKwz.js} +0 -0
@@ -1,551 +1,507 @@
1
1
  ---
2
2
  title: "CLI"
3
- description: "Commands and common flags for local development, running servers, and Cursor-managed hosting."
3
+ description: "Look up Agent SDK commands, targets, flags, outputs, and exit status."
4
4
  ---
5
5
 
6
- # CLI reference
7
-
8
- `@cursor/july` installs one command, `agent-sdk`; `npx @cursor/july <cmd>`
9
- runs it. Run the CLI with Node 22.13 or newer. Don't run it with Bun; Bun
10
- corrupts tool-result streams from the Cursor SDK.
11
-
12
- `agent-sdk help` prints the built-in summary. The Slack and GitHub packs
13
- also provide `agent-sdk slack help` and `agent-sdk github help`.
14
-
15
- | Command | Description |
16
- | ------------------------------------------------------- | -------------------------------------------------------------- |
17
- | [`serve`](#serve) | Serve agents over HTTP |
18
- | [`dev`](#dev) | Start local development with `serve --dev` |
19
- | [`chat`](#chat) | Talk to a running agent |
20
- | [`resume`](#resume) | Reattach chat to a previous session |
21
- | [`logs`](#logs) | Follow local or hosted logs |
22
- | [`sessions`](#sessions) | List sessions on a running agent |
23
- | [`session`](#session) | Inspect one session |
24
- | [`cost`](#cost) | Report per-session token usage and estimated cost |
25
- | [`playground`](#playground) | Open the local or hosted playground |
26
- | [`docs`](#docs) | Serve the shipped documentation site locally |
27
- | [`run`](#run) | Run one or more turns locally, remotely, or on a hosted agent |
28
- | [`call`](#call) | Call a server tool without a model turn |
29
- | [`eval`](#eval) | Run filesystem evals |
30
- | [`trajectory`](#trajectory) | Summarize a saved event stream |
31
- | [`init`](#init) | Scaffold a project, or print the setup guide |
32
- | [`convert-automation`](#convert-automation) | Export a Cursor Automation into an agent project |
33
- | [`install-skills`](#install-skills) | Refresh coding-agent skills (`npm install` already copies them) |
34
- | [`info`](#info) | Print the discovered agent surface |
35
- | [`validate`](#validate) | Check a project and fail on errors |
36
- | [`login` / `logout` / `whoami`](#login-logout-whoami) | Manage the host's Cursor credential |
37
- | `version` | Print the installed version and exit (also `--version` / `-V`) |
38
- | [`update`](#update) | Upgrade the installed CLI |
39
- | [`deploy`](#deploy) | Deploy one or more agents to Cursor managed hosting |
40
- | [`deployments`](#deployments) | List hosted deployments |
41
- | [`deployment`](#deployment) | Inspect one hosted deployment |
42
- | [`stop`](#stop) | Stop a hosted deployment |
43
- | [`delete`](#delete) | Delete a hosted deployment |
44
- | [`rotate-token`](#rotate-token) | Replace a deployment's alias token |
45
- | [`secrets`](#secrets) | Manage deployment secrets |
46
- | [`mcp`](#mcp) | Proxy the agent's MCP endpoint over stdio; `mcp install` writes `~/.cursor/mcp.json` |
47
- | [`mcp oauth`](#mcp-oauth) | Authorize host MCP OAuth; optional `--store` to deployment secrets |
48
- | [`slack ...`](#slack) | Provision, set up, and check Slack channels |
49
- | [`github ...`](#github) | Forward, replay, and inspect GitHub webhook channels |
50
-
51
- ## Choose a target
52
-
53
- Request-sending commands support three target types.
54
-
55
- | Target | How to select it | Commands |
6
+ # CLI
7
+
8
+ `@cursor/july` provides the `agent-sdk` command for developing, inspecting,
9
+ testing, and deploying Agent SDK projects. Run it with Node 22.13 or newer;
10
+ Bun isn't supported. Commands exit nonzero when validation or a synchronous
11
+ request fails; asynchronous commands can exit `0` once work is accepted.
12
+
13
+ Use `npx @cursor/july <command>` to run the CLI without a global install.
14
+ `agent-sdk help` prints top-level help; the Slack, GitHub, GitLab, and
15
+ Bitbucket command packs provide their own `help` subcommands.
16
+
17
+ ## Command catalog
18
+
19
+ ### Development commands
20
+
21
+ | Command | Contract |
22
+ | --- | --- |
23
+ | `help`, `--help`, `-h` | Print top-level help |
24
+ | [`serve`](#serve) | Serve one or more agents over HTTP |
25
+ | [`dev`](#dev) | Serve agents with local-development behavior |
26
+ | [`docs`](#docs) | Serve the documentation bundled with `@cursor/july` |
27
+ | [`init`](#init) | Scaffold an Agent SDK project |
28
+ | [`convert-automation`](#convert-automation) | Export a Cursor Automation into a project |
29
+ | [`install-skills`](#install-skills) | Refresh the bundled coding-agent skills |
30
+ | [`info`](#info) | Print the discovered project surface |
31
+ | [`validate`](#validate) | Check project diagnostics and set the exit status |
32
+ | [`manifest`](#manifest) | Print deployment metadata as JSON |
33
+ | [`version`](#version) | Print the installed package version |
34
+ | [`update`](#update) | Upgrade the installed CLI |
35
+ | [`login`](#login-logout-whoami) | Sign the host in to Cursor |
36
+ | [`logout`](#login-logout-whoami) | Remove the stored Cursor credential |
37
+ | [`whoami`](#login-logout-whoami) | Show the active Cursor credential |
38
+
39
+ ### Session and eval commands
40
+
41
+ | Command | Contract |
42
+ | --- | --- |
43
+ | [`chat`](#chat) | Talk to a running agent |
44
+ | [`resume`](#resume) | Reattach chat to a previous session |
45
+ | [`run`](#run) | Start or continue work on a local, running, or managed agent |
46
+ | [`call`](#call) | Call a server tool without a model turn |
47
+ | [`skill`](#skill) | Read an authored skill without a model turn |
48
+ | [`logs`](#logs) | Follow or dump agent logs |
49
+ | [`sessions`](#sessions) | List sessions |
50
+ | [`session`](#session) | Inspect a session or start a managed session turn |
51
+ | [`cost`](#cost) | Report token usage and estimated cost |
52
+ | [`playground`](#playground) | Open an agent's playground |
53
+ | [`trajectory`](#trajectory) | Summarize a saved event stream |
54
+ | [`eval`](#eval) | List, run, inspect, or cancel evals |
55
+
56
+ ### Managed hosting commands
57
+
58
+ | Command | Contract |
59
+ | --- | --- |
60
+ | [`deploy`](#deploy) | Deploy one or more agents |
61
+ | [`deployments`](#deployments) | List deployments |
62
+ | [`deployment`](#deployment) | Inspect one deployment |
63
+ | [`stop`](#stop) | Stop a deployment |
64
+ | [`cancel-runs`](#cancel-runs) | Cancel active runs and reminder wakes |
65
+ | [`event-repos`](#event-repos) | Replace a managed application's event repositories |
66
+ | [`upgrade`](#upgrade) | Move a managed application to a release |
67
+ | [`delete`](#delete) | Delete a deployment |
68
+ | [`rotate-token`](#rotate-token) | Replace a deployment's alias token |
69
+ | [`secrets`](#secrets) | Set, list, or remove deployment secrets |
70
+
71
+ ### Connection and channel commands
72
+
73
+ | Command | Contract |
74
+ | --- | --- |
75
+ | [`mcp`](#mcp) | Proxy an agent's MCP endpoint over stdio |
76
+ | [`mcp install`](#mcp) | Add the agent to an MCP client config |
77
+ | [`mcp oauth`](#mcp-oauth) | Authorize an MCP connection |
78
+ | [`slack`](#slack) | Provision and check Slack channel apps |
79
+ | [`github`](#github) | Forward, replay, and inspect GitHub webhooks |
80
+ | [`gitlab`](#gitlab) | Replay and inspect GitLab webhooks |
81
+ | [`bitbucket`](#bitbucket) | Replay and inspect Bitbucket webhooks |
82
+
83
+ ## Targets {#choose-a-target}
84
+
85
+ Commands that send requests support these targets:
86
+
87
+ | Target | Selection | Commands |
56
88
  | --- | --- | --- |
57
- | Ephemeral local server | Omit `--url` and `--prod` | `run`, `call`, `eval` |
58
- | Running server | Pass `--url <baseUrl>`, unless the command uses the localhost default described next | `chat`, `resume`, `logs`, `sessions`, `session`, `cost`, `playground`, `run`, `call`, `eval`, `mcp` |
59
- | Cursor managed hosting | Pass `--prod` | `chat`, `resume`, `logs`, `sessions`, `session`, `cost`, `playground`, `run`, `call`, `eval`, `mcp` |
60
-
61
- `chat`, `logs`, `sessions`, `session`, `cost`, and `playground` default to
62
- `http://127.0.0.1:3000`. A `--url` must include the agent slug for a
63
- multi-agent server, such as `http://127.0.0.1:3000/pr-approver`.
64
- `--slug` doesn't change an explicit URL. `mcp` has no default target;
65
- pass `--url` or `--prod`.
66
-
67
- With `--prod`, `--slug` selects the deployment and `--team` selects the
68
- Cursor team. The slug defaults to the `--dir` basename. The team
69
- defaults to the signed-in account's team. `--url` and `--prod` are
70
- mutually exclusive.
71
-
72
- Use `--bearer-token <token>` when a running server requires bearer
73
- authentication. Hosted commands use your Cursor credential to request
74
- short-lived engine access. `--api-key` overrides the Cursor credential
75
- for `login`, `serve`, hosted targets, and managed-hosting commands.
76
- `--state-root` applies to `serve` and ephemeral `run`, `call`, and
77
- `eval` servers. Running and hosted targets ignore it.
78
-
79
- For ephemeral `run`, `call`, and `eval` commands, omitting `--slug`
80
- selects an unslugged root mount when one exists. Otherwise, the Agent SDK
81
- selects the first discovered agent.
82
-
83
- ## serve
84
-
85
- `serve` hosts every agent under `--dir` in multi-agent mode by default.
86
-
87
- ```bash
88
- agent-sdk serve [--dir <path>] [--port 3000] [--host 127.0.0.1] [--dev]
89
- [--mode multi|single] [--api-key <key>]
90
- [--state-root <path>] [--bearer-token <secret> | --allow-anonymous]
91
- [--allow-anonymous-cursor-github]
92
- [--allow-anonymous-cursor-account-mcp]
93
- [--public-url <url>] [--cloud-tools-url <url>]
94
- [--no-schedules] [--no-playground]
95
- [--no-docs] [--cursor-events --repo owner/name]...
96
- ```
97
-
98
- If `--dir` is an agent project, it mounts under its directory name. If
99
- it contains agent projects, each child mounts separately. The index
100
- lives at `/`. Each agent is available at `/<slug>/v1/*` and
101
- `/<slug>/playground`. On a TTY, press Enter to restart.
102
- Unless `--state-root` is set, each mount uses a state directory under
103
- the agent project. Slugged mounts get a subdirectory named for the slug.
104
-
105
- | Flag | Meaning |
89
+ | Ephemeral local server | Omit `--url` and `--prod` | `run`, `call`, `skill`, `eval` |
90
+ | Running server | Pass `--url <baseUrl>` | `chat`, `resume`, `run`, `call`, `skill`, `eval`, `logs`, `sessions`, `session`, `cost`, `playground`, `mcp` |
91
+ | Default local server | Omit `--url` and `--prod`; uses `http://127.0.0.1:3000` | `chat`, `resume`, `logs`, `sessions`, `session`, `cost`, `playground` |
92
+ | Hosted deployment | Pass `--prod` | `chat`, `resume`, `run`, `call`, `skill`, `eval`, `logs`, `sessions`, `session`, `cost`, `playground`, `mcp` |
93
+ | Managed application | Pass `--prod` | `run`, `session` |
94
+
95
+ An explicit `--url` must include the slug for a multi-agent server, such as
96
+ `http://127.0.0.1:3000/pr-approver`. `--slug` never changes an explicit URL.
97
+ `--url` and `--prod` are mutually exclusive.
98
+
99
+ | Option | Contract |
100
+ | --- | --- |
101
+ | `--dir <path>` | Select the project root. The default is the current directory. |
102
+ | `--url <baseUrl>` | Use a running agent instead of local project discovery. |
103
+ | `--prod` | Use a hosted deployment or managed application. Command support depends on the target type as listed above. |
104
+ | `--slug <slug>` | Select an agent from a multi-agent project or a hosted resource. Under `--prod`, the default is the `--dir` basename. |
105
+ | `--team <id>` | Select a Cursor team. The signed-in account's team is the default. |
106
+ | `--api-key <key>` | Override the Cursor credential for commands that authenticate with Cursor. |
107
+ | `--bearer-token <token>` | Authenticate to a running server with a bearer token. |
108
+ | `--state-root <path>` | Select local state for `serve` and ephemeral `run`, `call`, `skill`, and `eval` targets. Running and `--prod` targets ignore it. |
109
+ | `--json` | Request machine-readable output when the command supports it. `run` already defaults to JSON. |
110
+
111
+ ## Local servers
112
+
113
+ ### Serve agents {#serve}
114
+
115
+ `serve` mounts every project discovered under `--dir`:
116
+
117
+ ```bash
118
+ agent-sdk serve [--dir <path>] [--port <n>] [--host <host>]
119
+ [--mode multi|single] [--dev] [--api-key <key>]
120
+ [--state-root <path>]
121
+ [--bearer-token <secret> | --allow-anonymous]
122
+ [--allow-anonymous-cursor-github]
123
+ [--allow-anonymous-cursor-account-mcp]
124
+ [--public-url <url>] [--cloud-tools-url <url>]
125
+ [--no-schedules] [--no-playground] [--no-docs]
126
+ [--cursor-events --repo <owner/name>]...
127
+ ```
128
+
129
+ | Option | Contract |
106
130
  | --- | --- |
107
- | `--port` | Listen on this port. `0` selects an available port. The default is `3000`. When the default is taken, serve tries the next free port and prints a notice; an explicit `--port` fails with a next-port hint instead. |
108
- | `--host` | Bind this host. The default is loopback-only `127.0.0.1`. |
109
- | `--dev` | Disable automatic schedule and reminder firing, admit unsigned loopback GitHub deliveries, and widen playground session access on loopback. |
110
- | `--mode` | Use `multi` for slugged routes and an index, or `single` for one agent at the unslugged `/v1/*`. The default is `multi`. |
111
- | `--api-key` | Use this Cursor API key. Otherwise the command uses `CURSOR_API_KEY`, then `CURSOR_API_KEY_FILE` (hosted default `/run/cursor/secrets/CURSOR_API_KEY` when unset), then `CURSOR_SERVICE_ACCOUNT_KEY`, then the stored login. |
112
- | `--state-root` | Store sessions, streams, workspaces, and channel state here. Keep durable production state outside the agent repository. |
113
- | `--bearer-token` | Require this bearer token on routes without authored auth. Mutually exclusive with `--allow-anonymous`. |
114
- | `--allow-anonymous` | Admit every caller as one `anonymous` principal. Use only behind a trusted network boundary. |
115
- | `--allow-anonymous-cursor-github` | Allow anonymous callers to drive sessions holding a Cursor account's repo-scoped GitHub credential. Use only behind an authenticating proxy. |
116
- | `--allow-anonymous-cursor-account-mcp` | Allow anonymous callers to drive Cursor account MCP connectors (`defineConnection({ cursorAccount: true })`). Use only behind an authenticating proxy (hosted alias token counts). |
117
- | `--public-url` | Set the externally reachable host URL. Cloud-runtime peer connections need it to call back into this server. |
118
- | `--cloud-tools-url` | Authenticated HTTP MCP URL for this deployment's direct server-tool endpoint. Hosted deployments configure it automatically. |
119
- | `--no-schedules` | Disable the cron runner outside dev mode. |
120
- | `--no-playground` | Skip the web playground. |
131
+ | `--port <n>` | Listen on this port. The default is `3000`; `0` selects an available port. When an omitted default is occupied, the CLI selects the next port. An occupied explicit port fails with a next-port hint. |
132
+ | `--host <host>` | Bind this host. The default is loopback-only `127.0.0.1`. |
133
+ | `--mode multi` | Mount projects at `/<slug>/v1/*` and `/<slug>/playground`, with an index at `/`. This is the default. |
134
+ | `--mode single` | Mount one project at `/v1/*` and `/playground`. |
135
+ | `--dev` | Disable automatic schedule and reminder firing, admit unsigned loopback GitHub deliveries, and enable local playground access. |
136
+ | `--state-root <path>` | Store local sessions, streams, workspaces, and channel state here. Keep durable state outside a repository whose rules shouldn't reach agent workspaces. |
137
+ | `--bearer-token <secret>` | Require this token on routes without authored authentication. Mutually exclusive with `--allow-anonymous`. |
138
+ | `--allow-anonymous` | Admit callers as one anonymous principal. Use it only behind a trusted network boundary. |
139
+ | `--allow-anonymous-cursor-github` | Let anonymous callers use sessions with a Cursor account's repository-scoped GitHub credential. Requires an authenticating proxy. |
140
+ | `--allow-anonymous-cursor-account-mcp` | Let anonymous callers use Cursor account MCP connections. Requires an authenticating proxy. |
141
+ | `--public-url <url>` | Publish the externally reachable host URL for peer-agent callbacks. |
142
+ | `--cloud-tools-url <url>` | Publish the authenticated server-tool MCP URL used by cloud turns. Managed hosting sets it automatically. |
143
+ | `--no-schedules` | Disable schedule firing outside dev mode. |
144
+ | `--no-playground` | Skip the playground. |
121
145
  | `--no-docs` | Skip the documentation site at `/docs`. |
122
- | `--cursor-events` | Pull SCM events from Cursor in addition to authored webhook routes. Requires a signed-in host. Pass repeatable `--repo owner/name` values; repos declared by `githubChannel({ cursorAccount })` also enable it. |
146
+ | `--cursor-events` | Receive SCM events through Cursor. Requires sign-in and one or more repeatable `--repo owner/name` values. |
123
147
 
124
- Multi-agent slugs must start with a letter or digit, then contain only
125
- letters, digits, `_`, or `-`. The reserved slugs are `v1`, `playground`,
126
- and `docs`.
148
+ Multi-agent slugs start with a letter or digit and contain only letters,
149
+ digits, `_`, or `-`. The reserved slugs are `v1`, `playground`, and `docs`.
127
150
 
128
- ## dev
151
+ ### Develop locally {#dev}
129
152
 
130
- `dev` is the local-development shortcut for `serve --dev`. Pass the
131
- agent folder as a positional path, or run it from inside the project:
153
+ `dev` is `serve --dev` with an optional positional project path:
132
154
 
133
155
  ```bash
134
156
  agent-sdk dev
135
- agent-sdk dev ./sdk-pr-reviewer
136
157
  agent-sdk dev ./sdk-pr-reviewer --port 3000
137
158
  ```
138
159
 
139
- `dev` accepts the same flags as [`serve`](#serve). You can use `--dir`
140
- instead of the positional path.
141
- Dev mode is always on: schedules and reminders wait for manual dispatch,
142
- and GitHub accepts unsigned loopback deliveries. Prefer this over
143
- `serve --dev` while iterating. Pass at most one positional path. Don't
144
- combine a positional path with a different `--dir`.
145
-
146
- ## chat
160
+ It accepts every `serve` option. Pass at most one positional path, and don't
161
+ combine it with a different `--dir`.
147
162
 
148
- `chat` talks to a running agent from the terminal. It never starts a
149
- server.
163
+ ### Serve the docs {#docs}
150
164
 
151
165
  ```bash
152
- agent-sdk chat --url http://127.0.0.1:3000/pr-approver
153
- agent-sdk chat --message "Is the PR ready to approve?"
154
- agent-sdk chat --message "Inspect PR 42" --json
155
- agent-sdk chat --prod --slug pr-approver --team 123
166
+ npx @cursor/july docs
167
+ agent-sdk docs [--port <n>] [--host 127.0.0.1] [--print]
156
168
  ```
157
169
 
158
- `chat` streams text, tool calls, and a per-turn usage footer.
159
- On a TTY, `--message` seeds the interactive REPL. With non-TTY input,
160
- `--message` runs one turn and exits; without it, `chat` reads
161
- newline-delimited messages until EOF. `--json` requires `--message`,
162
- runs one turn, and prints
163
- `{ ok, sessionId, continuationToken, trajectory }`. `--text` prints a
164
- compact trajectory when combined with `--json`. `--no-color` forces
165
- plain interactive output.
170
+ `docs` serves the bundled documentation without an agent project. It uses an
171
+ available loopback port by default and stays open until Ctrl-C. `--print`
172
+ prints the URL without opening a browser.
166
173
 
167
- Use `--session <id>` to reattach a stored session. The command looks up
168
- its continuation token when you omit `--continuation-token`. Use
169
- `--resume` to select the most recently updated session with a
170
- continuation token.
174
+ ## Sessions and turns
171
175
 
172
- ## resume
176
+ ### Chat with an agent {#chat}
173
177
 
174
- `resume` is the direct way to reattach the chat REPL.
178
+ `chat` connects to a running server and never starts an ephemeral one:
175
179
 
176
180
  ```bash
177
- agent-sdk resume ses_123 --url http://127.0.0.1:3000/pr-approver
178
- agent-sdk resume --url http://127.0.0.1:3000/pr-approver
179
- agent-sdk resume ses_123 --prod --team 123 --slug pr-approver
180
- agent-sdk resume ses_123 --message "Continue the review" --json
181
+ agent-sdk chat [--url <baseUrl> | --prod] [--message <text>]
182
+ [--session <id> | --resume] [--continuation-token <token>]
183
+ [--slug <slug>] [--team <id>] [--json] [--text] [--no-color]
181
184
  ```
182
185
 
183
- Pass a session ID to select it. Omit the ID to select the most recently
184
- updated followable session from `/v1/sessions`. The command looks up a
185
- missing continuation token, replays the transcript, and accepts
186
- follow-ups. `resume --json` requires `--message`. The same operation is
187
- available as `chat --session <id>` or `chat --resume`.
186
+ | Input mode | Behavior |
187
+ | --- | --- |
188
+ | TTY without `--message` | Open an interactive REPL. |
189
+ | TTY with `--message` | Send the message, then keep the REPL open. |
190
+ | Non-TTY with `--message` | Send one turn and exit. |
191
+ | Non-TTY without `--message` | Read newline-delimited messages until EOF. |
192
+ | `--json --message <text>` | Send one turn and print `{ ok, sessionId, continuationToken, trajectory }`. |
193
+ | `--json --text --message <text>` | Print a compact trajectory instead of JSON. |
194
+
195
+ Use `--session <id>` to reattach a stored session. If you omit
196
+ `--continuation-token`, the CLI looks it up from the target's session list.
197
+ `--resume` selects the most recently updated session with a continuation
198
+ token. An explicit session ID takes precedence.
188
199
 
189
- ## logs
200
+ ### Resume a session {#resume}
190
201
 
191
- `logs` follows the local or hosted log buffer.
202
+ `resume` provides the same reattachment contract as `chat --session`:
192
203
 
193
204
  ```bash
194
- agent-sdk logs [--url http://127.0.0.1:3000] [--once] [--json]
195
- agent-sdk logs --prod [--slug <slug>] [--team <id>] [--once] [--json]
205
+ agent-sdk resume [sessionId] [--url <baseUrl> | --prod]
206
+ [--message <text>] [--json] [--text]
207
+ [--continuation-token <token>] [--slug <slug>] [--team <id>]
196
208
  ```
197
209
 
198
- Local mode reads `/v1/logs` from the running server. Hosted mode reports
199
- deploy progress until the deployment is running or degraded, then
200
- follows reachable runtime logs.
201
- The command follows until Ctrl-C by default. `--once` prints the current
202
- buffer and exits. `--json` emits newline-delimited JSON events.
210
+ Omit the session ID to select the most recently updated followable session.
211
+ The command replays the transcript before accepting follow-ups.
212
+ `resume --json` requires `--message`.
203
213
 
204
- ## sessions
214
+ ### Run turns {#run}
205
215
 
206
- `sessions` lists sessions on a running or hosted agent.
216
+ `run` sends messages to an ephemeral, running, or `--prod` target:
207
217
 
208
218
  ```bash
209
- agent-sdk sessions [--url <baseUrl> | --prod] [--slug <slug>]
210
- [--team <id>] [--bearer-token <token>] [--json]
219
+ agent-sdk run [--dir <path>] [--message <text>]...
220
+ [--messages-file <path>] [--url <baseUrl> | --prod]
221
+ [--session <id>] [--continuation-token <token>]
222
+ [--events <file> | --no-events] [--text]
223
+ [--timeout-ms <n>] [--no-stream] [--slug <slug>] [--team <id>]
224
+ [--dry-run] [--as-of <instant>] [--component <key>]
211
225
  ```
212
226
 
213
- Text output shows session ID, channel, mode, turn count, running status,
214
- and update time. `--json` prints full session summaries in
215
- `{ sessions }`, including continuation tokens.
227
+ | Option | Contract |
228
+ | --- | --- |
229
+ | `--message <text>` | Send a user message. Repeat it for a multi-turn local or `--url` run. Managed starts accept one message. |
230
+ | `--messages-file <path>` | Read a JSON array of strings. File messages run before repeated `--message` values. |
231
+ | `--session <id>` | Continue a session. Managed session starts accept a hosted `ses_...` ID. |
232
+ | `--continuation-token <token>` | Continue the session selected by `--session` on a running server. Managed session starts use `--session` instead. |
233
+ | `--events <file>` | Write the raw NDJSON stream to this path. |
234
+ | `--no-events` | Skip the NDJSON trace. |
235
+ | `--text` | Print a compact trajectory instead of JSON. |
236
+ | `--timeout-ms <n>` | Stop waiting after a positive number of milliseconds. There is no default timeout. |
237
+ | `--no-stream` | Hide live tool and reply progress on stderr. |
238
+ | `--dry-run` | Mark a managed session turn as non-mutating. |
239
+ | `--as-of <instant>` | Freeze a managed session's clock at a timezone-bearing ISO-8601 instant. |
240
+ | `--component <key>` | Select a managed application's component instead of its default. |
241
+
242
+ For local and running-server targets, JSON output contains `ok`, `sessionId`,
243
+ `continuationToken`, `trace`, `playgroundUrl`, `playgroundHint`, `visualize`,
244
+ and `trajectory`. The `trace` value gives the saved path when event output is
245
+ enabled. A managed session start confirms acceptance; a continuation also
246
+ returns `sessionId`. Managed starts return before the turn finishes and ignore
247
+ `--events`, `--no-events`, `--text`, `--timeout-ms`, and `--no-stream`.
248
+ A successful managed start exits `0` on acceptance, before its turn outcome is
249
+ known. A fresh start doesn't return `sessionId` synchronously.
216
250
 
217
- ## session
251
+ ### Call a tool {#call}
218
252
 
219
- `session` inspects the event stream for one session.
253
+ `call` invokes a server tool without a model turn:
220
254
 
221
255
  ```bash
222
- agent-sdk session <sessionId> [--url <baseUrl> | --prod]
223
- [--slug <slug>] [--team <id>]
224
- [--json | --text | --events] [--out <file.ndjson>]
256
+ agent-sdk call <tool> [--input <json>]
257
+ [--dir <path> | --url <baseUrl> | --prod]
258
+ [--session <id>] [--slug <slug>] [--team <id>]
225
259
  ```
226
260
 
227
- By default, `session` prints a compact trajectory. `--text` selects the
228
- same format. `--json` prints the trajectory object. `--events` prints
229
- `{ sessionId, events }` with the raw event list. You can't combine
230
- `--events` and `--json`. `--out <file.ndjson>` writes the raw NDJSON
231
- trace to a file instead of printing. The file uses the same format as
232
- `run --events` and the playground download. Use
233
- [`resume`](#resume) to continue the conversation.
261
+ `--input` accepts JSON and defaults to `{}`. `--session` uses the session
262
+ workspace and records the call on its event stream. The command prints the
263
+ server's JSON response and succeeds only when the HTTP response succeeds with
264
+ `ok: true`.
265
+
266
+ See [Tools](./tools.md#call-a-tool-without-a-model-turn) for validation,
267
+ busy-session behavior, and error codes.
234
268
 
235
- ## cost
269
+ ### Read a skill {#skill}
236
270
 
237
- `cost` reports token usage and estimated cost.
271
+ `skill` reads an authored skill without a model turn:
238
272
 
239
273
  ```bash
240
- agent-sdk cost [sessionId] [--url <baseUrl> | --prod]
241
- [--slug <slug>] [--team <id>] [--json]
274
+ agent-sdk skill <name> [--dir <path> | --url <baseUrl> | --prod]
275
+ [--slug <slug>] [--team <id>] [--text]
242
276
  ```
243
277
 
244
- With a session ID, `cost` prints per-turn token usage and estimated
245
- cost for that session. Without one, it prints one row per session on
246
- the target plus a total. Costs are the engine's recorded estimates from
247
- `turn.completed` events; turns persisted before cost tracking count as
248
- unpriced. `--json` prints the underlying report, or `{ sessions }` when
249
- aggregating. Like `session`, the command supports `--dir`,
250
- `--bearer-token`, and the `--url`/`--prod` targets, and defaults to the
251
- local server.
252
-
253
- ## playground
278
+ The default output is the server's JSON response. `--text` prints the rendered
279
+ `SKILL.md` content.
254
280
 
255
- `playground` opens an agent's web playground.
281
+ ### List sessions {#sessions}
256
282
 
257
283
  ```bash
258
- agent-sdk playground [--url <baseUrl> | --prod] [--session <id>]
259
- [--slug <slug>] [--team <id>]
260
- [--bearer-token <token>] [--print]
284
+ agent-sdk sessions [--url <baseUrl> | --prod]
285
+ [--slug <slug>] [--team <id>] [--bearer-token <token>] [--json]
261
286
  ```
262
287
 
263
- `--session` opens a deep link to one session. `--print` prints the URL
264
- without opening a browser.
288
+ Text output shows the session ID, channel, mode, turn count, running status,
289
+ and update time. `--json` prints `{ sessions }`, including continuation
290
+ tokens.
265
291
 
266
- For an unauthenticated local URL, `playground` opens the browser and
267
- exits. `--prod` and `--bearer-token` start a loopback proxy to inject
268
- browser-inaccessible credentials. The proxy stays open until Ctrl-C,
269
- including when you pass `--print`.
292
+ ### Inspect a session {#session}
270
293
 
271
- ## docs
294
+ ```bash
295
+ agent-sdk session <sessionId> [--url <baseUrl> | --prod]
296
+ [--slug <slug>] [--team <id>]
297
+ [--json | --text | --events] [--out <file.ndjson>]
298
+
299
+ agent-sdk session --prod [<sessionId>] --slug <slug> --message <text>
300
+ [--dry-run] [--as-of <instant>] [--component <key>]
301
+ ```
302
+
303
+ | Option | Contract |
304
+ | --- | --- |
305
+ | No output option | Print a compact trajectory. |
306
+ | `--text` | Select the compact trajectory explicitly. |
307
+ | `--json` | Print the trajectory object. |
308
+ | `--events` | Print `{ sessionId, events }` with the raw event list. |
309
+ | `--out <file.ndjson>` | Write the raw NDJSON trace instead of printing it. |
310
+ | `--prod --message <text>` | Start a managed session or continue the supplied managed session ID. |
272
311
 
273
- `docs` serves the documentation shipped inside `@cursor/july` and opens
274
- it in a browser. You don't need an agent project.
312
+ `--events` and `--json` are mutually exclusive. Managed sessions without an
313
+ event trajectory return hosted execution status and logs in text or JSON;
314
+ `--events` and `--out` require an event trajectory. Use [`resume`](#resume) to
315
+ continue a conversational session.
316
+
317
+ ### Follow logs {#logs}
275
318
 
276
319
  ```bash
277
- npx @cursor/july docs
278
- agent-sdk docs [--port <n>] [--host 127.0.0.1] [--print]
320
+ agent-sdk logs [--url <baseUrl> | --prod]
321
+ [--slug <slug>] [--team <id>] [--once] [--json]
279
322
  ```
280
323
 
281
- The site is the same documentation mounted at `/docs` on a running
282
- `serve` host. `docs` starts a loopback-only static server (default port
283
- is an ephemeral port) and keeps it open until Ctrl-C. `--print` prints
284
- the URL without opening a browser.
285
-
286
- ## run
324
+ The command follows logs until Ctrl-C. `--once` prints the current buffer and
325
+ exits; `--json` emits newline-delimited JSON events. A hosted deployment
326
+ reports deployment progress before runtime logs become available.
287
327
 
288
- `run` sends one or more turns and prints a JSON result.
328
+ ### Report costs {#cost}
289
329
 
290
330
  ```bash
291
- agent-sdk run --dir . --message "Is https://github.com/acme/checkout/pull/42 ready?"
292
- agent-sdk run --dir . --message "Inspect PR 42" --message "Summarize the risks"
293
- agent-sdk run --url http://127.0.0.1:3000/pr-approver --message "Inspect PR 42"
294
- agent-sdk run --prod --slug pr-approver --team 123 --message "Inspect PR 42"
295
- agent-sdk run --dir . --messages-file ./prompts.json
331
+ agent-sdk cost [sessionId] [--url <baseUrl> | --prod]
332
+ [--slug <slug>] [--team <id>] [--json]
296
333
  ```
297
334
 
298
- Without `--url` or `--prod`, the command starts an ephemeral server on
299
- an available port. Its state root is a temporary directory outside the
300
- project unless you pass `--state-root`. The command closes the server
301
- after the turns finish.
335
+ With a session ID, `cost` prints per-turn token usage and estimated cost.
336
+ Without one, it prints one row per session and a total. Turns saved before
337
+ cost tracking appear as unpriced. `--json` prints the underlying report or
338
+ `{ sessions }` for an aggregate.
302
339
 
303
- | Flag | Meaning |
304
- | --- | --- |
305
- | `--message <text>` | Send a user message. Repeat the flag for a multi-turn run. |
306
- | `--messages-file <path>` | Read a JSON array of strings. File messages run before repeated `--message` values. |
307
- | `--session <id>` | Follow up an existing session. Unlike `chat`, `run` doesn't look up a missing continuation token. |
308
- | `--continuation-token <token>` | Continue the existing session selected by `--session`. |
309
- | `--events <file>` | Write the raw NDJSON event stream to this path. |
310
- | `--no-events` | Don't write an event stream. |
311
- | `--text` | Print a compact trajectory instead of the JSON result. |
312
- | `--timeout-ms <n>` | Abort the turn after a positive number of milliseconds. There is no default timeout. |
313
- | `--no-stream` | Hide live tool and reply progress on stderr. Progress is on by default when stderr is a TTY. |
314
- | `--slug <slug>` | Pick one agent when local discovery mounts several agents. With `--prod`, select the hosted deployment. |
315
-
316
- The default trace path is
317
- `<state-root>/traces/<sessionId>.ndjson`. JSON output contains
318
- `ok`, `sessionId`, `continuationToken`, `trace`, `playgroundUrl`,
319
- `playgroundHint`, `visualize`, and `trajectory`. The command exits
320
- non-zero when the trajectory fails.
321
-
322
- ## call
323
-
324
- `call` invokes a server tool directly, with no model turn.
325
-
326
- ```bash
327
- agent-sdk call inspect_pr --dir . \
328
- --input '{"prUrl":"https://github.com/acme/checkout/pull/42"}'
329
- agent-sdk call inspect_pr --url http://127.0.0.1:3000/pr-approver \
330
- --input '{"prUrl":"https://github.com/acme/checkout/pull/42"}'
331
- agent-sdk call refresh_cache --url http://127.0.0.1:3000/pr-approver \
332
- --session ses_123
333
- agent-sdk call inspect_pr --prod --slug pr-approver --team 123 --input '{}'
334
- ```
335
-
336
- `call` sends `POST /v1/tools/:toolName` and runs the tool in the serving
337
- process without a model turn. `--input` accepts any valid JSON and
338
- defaults to `{}`. Tools with a Zod input schema validate and transform
339
- the value before execution. A local call needs no inference credential.
340
- A hosted call still needs Cursor credentials to reach the deployment.
341
-
342
- `--session` runs the tool inside an existing session and records it on
343
- the event stream. If a model turn is active or pending, a read-effect
344
- tool runs alongside it and a write-effect tool gets `session_busy`;
345
- retry after the turn finishes. The command
346
- prints the server's JSON response and exits non-zero unless the HTTP
347
- response succeeds with `ok: true`. See
348
- [Tools](./tools.md#call-a-tool-without-a-model-turn).
349
-
350
- ## eval
351
-
352
- `eval` runs the project's filesystem evals.
353
-
354
- ```bash
355
- agent-sdk eval --dir . --list # discovered datapoints
356
- agent-sdk eval --dir . # run all
357
- agent-sdk eval --dir . builds/checkout # one datapoint
358
- agent-sdk eval --dir . builds # every datapoint in the file
359
- agent-sdk eval --dir . --tag smoke # by tag (repeatable)
360
- agent-sdk eval --dir . --json # machine-readable results
361
- agent-sdk eval --dir . --verbose # stream t.log lines + reply snippets
362
- agent-sdk eval --prod --slug pr-approver --team 123
363
- # prints Eval ID immediately on --prod/--url; then:
364
- agent-sdk eval status <evalId> --prod --slug pr-approver
365
- agent-sdk eval cancel <evalId> --prod --slug pr-approver
366
- ```
367
-
368
- `eval` runs `evals/**/*.eval.{ts,js}` on an ephemeral server. With
369
- `--prod` or `--url`, the target server runs its own evals as a
370
- server-side batch. Select one or more exact case IDs, file ID prefixes,
371
- or tags.
372
- Omit selectors to run all cases. Repeated `--tag` flags use OR matching.
373
-
374
- An eval run requires `evals/evals.config.{ts,js}` with `maxConcurrency`
375
- between 1 and 200. Timeout priority is the case's `timeoutMs`, the CLI's
376
- `--timeout-ms`, the config's `timeoutMs`, then 180 seconds.
377
-
378
- | Flag | Meaning |
379
- | --- | --- |
380
- | `--list` | Print discovered cases without running. `--list --json` prints them as an array. |
381
- | `--tag <tag>` | Run cases with this tag. Repeated flags use OR matching. |
382
- | `--json` | Print `{ ok, passed, failed, scored, skipped, strict, results }`; see [Run evals in CI](../evals.md#run-evals-in-ci) for the result shape. |
383
- | `--verbose` | Stream `t.log` lines and reply snippets. |
384
- | `--no-stream` | Hide live progress on stderr. |
385
- | `--strict` | Exit `1` when a scored case misses a soft threshold. |
386
- | `--max-concurrency <n>` | Override `maxConcurrency` from `evals.config.ts`. |
387
- | `--junit <path>` | Write JUnit XML for CI annotations. |
388
- | `--artifacts <dir>` | Write run artifacts here. The default is a timestamped directory under `evals/` in the project state directory (not affected by `--state-root`). |
389
- | `--no-artifacts` | Skip run artifacts. |
390
- | `--skip-report` | Ignore reporters from `evals.config.ts` and eval files. |
391
- | `--out <path>` | Also write the full results JSON to this path (also for `eval status <evalId>`). |
392
- | `--no-wait` | Return with the Eval ID as soon as a `--prod` or `--url` batch is accepted. |
393
- | `--timeout-ms <n>` | Per-case timeout override. |
340
+ ### Open the playground {#playground}
394
341
 
395
- Failed cases exit `1`. A scored case also exits `1` under `--strict`.
396
- No matching cases exit `2`. `eval status` exits `3` while the remote batch
397
- is still running.
342
+ ```bash
343
+ agent-sdk playground [--url <baseUrl> | --prod] [--session <id>]
344
+ [--slug <slug>] [--team <id>] [--bearer-token <token>] [--print]
345
+ ```
398
346
 
399
- ## trajectory
347
+ The command prints the playground URL and opens it unless `--print` is set.
348
+ `--session` opens a deep link. A running target with credentials that a
349
+ browser can't send starts a loopback proxy and stays open until Ctrl-C.
400
350
 
401
- `trajectory` summarizes a saved event stream.
351
+ ### Inspect a trajectory {#trajectory}
402
352
 
403
353
  ```bash
404
- agent-sdk trajectory --events /tmp/run.ndjson [--text]
354
+ agent-sdk trajectory --events <file.ndjson> [--text]
405
355
  ```
406
356
 
407
- `trajectory` converts a saved NDJSON stream into the trajectory JSON
408
- returned by `run`. `--text` prints the compact view. The command exits
409
- non-zero when the reconstructed trajectory failed.
357
+ The command converts an NDJSON stream into the trajectory JSON returned by
358
+ `run`. `--text` prints the compact view.
410
359
 
411
- ## init
360
+ ## Evals
412
361
 
413
- `init` scaffolds a new project.
362
+ ### Run evals {#eval}
363
+
364
+ `eval` discovers `evals/**/*.eval.{ts,js}` and runs selected cases:
414
365
 
415
366
  ```bash
416
- agent-sdk init ./my-agent # scaffold package.json, tsconfig.json, agent/ + a demo tool
417
- agent-sdk init ./my-demo --template demo # record a PR walkthrough
418
- agent-sdk init ./grokbot --template grokbot-agents # talk to Grok Bot agents
419
- agent-sdk init ./code-wiki --template code-wiki # keep wiki pages current after merge
420
- agent-sdk init ./agents-md --template agents-md # keep AGENTS.md current from last week's PRs and Slack
421
- agent-sdk init ./my-reviewer --template security-reviewer # review PRs for security bugs
422
- agent-sdk init ./thermo-review --template thermo-review # review PRs for bugs and breakage
423
- agent-sdk init ./thermo-quality --template thermo-quality-review # review PRs for code quality
424
- agent-sdk init ./security-help --template security-help # answer security questions in Slack
425
- agent-sdk init ./my-triage --template triage-linear # comment on Linear issues
426
- agent-sdk init ./my-triage --template triage-jira # comment on Jira issues
427
- agent-sdk init ./my-owners --template agentic-owners # review PRs via owners policies
428
- agent-sdk init ./pr-autofixer --template pr-autofixer # fix PRs on a cloud VM
429
- agent-sdk init ./pr-autofixer --template pr-autofixer \
430
- --var repos=acme/widgets,acme/api --json
431
- agent-sdk init ./my-agent --json # machine-readable summary for tooling
432
- agent-sdk init # no directory: print the setup guide
367
+ agent-sdk eval [--dir <path>] [evalId...]
368
+ [--list] [--tag <tag>]... [--json] [--verbose]
369
+ [--timeout-ms <n>] [--strict] [--max-concurrency <n>]
370
+ [--junit <path>] [--artifacts <dir> | --no-artifacts]
371
+ [--skip-report] [--out <file.json>] [--no-stream]
372
+ [--url <baseUrl> | --prod] [--no-wait]
373
+ [--slug <slug>] [--team <id>]
433
374
  ```
434
375
 
435
- `init` leaves existing files unchanged and labels each one `create` or
436
- `exist`. It prints the project path, then runs `npm install` so
437
- `@cursor/july` resolves for `dev` and `run`.
376
+ Select an exact case such as `weather/nyc`, a file prefix such as `weather`,
377
+ several IDs, or no IDs for every case. Repeat `--tag` for OR matching.
378
+ Projects must provide `evals/evals.config.{ts,js}` with `maxConcurrency`
379
+ between 1 and 200.
438
380
 
439
- Templates may ship `init.json`. On a TTY, `init` asks those questions
440
- before writing files. `code-wiki`, `pr-autofixer`, `security-help`, and
441
- `agents-md` ask for GitHub repos. `agents-md` also asks for Slack
442
- channels. `grokbot-agents` asks for Grok Bot names. Repeat
443
- `--var id=value` to answer without a prompt.
444
- `--json` and non-TTY hosts skip the interview unless `--var` is set.
381
+ | Option | Contract |
382
+ | --- | --- |
383
+ | `--list` | List matching cases without running them. `--list --json` prints an array. |
384
+ | `--tag <tag>` | Select a tag. Repeat the option for OR matching. |
385
+ | `--json` | Print `{ ok, passed, failed, scored, skipped, strict, results }`. |
386
+ | `--verbose` | Stream `t.log` lines and reply snippets. |
387
+ | `--no-stream` | Hide live progress on stderr. |
388
+ | `--strict` | Treat a scored case below its soft threshold as a failure. |
389
+ | `--max-concurrency <n>` | Override `maxConcurrency` from the eval config for an ephemeral local run. |
390
+ | `--timeout-ms <n>` | Override the per-case timeout. A case timeout takes precedence, followed by this option, the config timeout, and the 180-second default. |
391
+ | `--junit <path>` | Write JUnit XML for an ephemeral local run. |
392
+ | `--artifacts <dir>` | Select the artifact directory for an ephemeral local run. The default is a timestamped directory under the project's state directory. |
393
+ | `--no-artifacts` | Skip artifacts for an ephemeral local run. |
394
+ | `--skip-report` | Ignore reporters from eval files and the eval config during an ephemeral local run. |
395
+ | `--out <file.json>` | Also write the full result JSON. |
396
+ | `--no-wait` | Return after a running server or hosted deployment accepts the batch. |
445
397
 
446
- On a TTY, `init` also asks whether to refresh the coding-agent skills in
447
- `~/.cursor/skills/agentsdk/`. Installing `@cursor/july` already copies
448
- them via postinstall (with `alwaysApply: true` so Cursor injects the
449
- bodies), so this prompt is a chance to overwrite with the package
450
- version. The prompt is skipped for `--json` and non-interactive hosts.
398
+ A running server or hosted deployment prints its Eval ID when it accepts the
399
+ batch.
400
+ Use these commands to inspect or cancel it:
451
401
 
452
- If the host isn't signed in, `init` runs `agent-sdk login` and waits for
453
- the browser flow. It then prints the `cd`, `agent-sdk login`, and
454
- `agent-sdk dev` steps still needed.
402
+ ```bash
403
+ agent-sdk eval status [evalId] --prod [--slug <slug>] [--team <id>]
404
+ agent-sdk eval status [evalId] --url <baseUrl>
405
+ agent-sdk eval cancel <evalId> --prod [--slug <slug>] [--team <id>]
406
+ agent-sdk eval cancel <evalId> --url <baseUrl>
407
+ ```
455
408
 
456
- With `--json`, `init` still installs dependencies but never blocks on
457
- login or skill installation. It prints `{ ok, directory, template, created,
458
- skipped, installed, installError, cliOnPath, cliLinkError, next }`. The
459
- `next` list includes `login` when the host is unsigned.
409
+ `eval status` without an ID lists recent remote runs. `eval status --out`
410
+ requires an ID. The `status` and `cancel` subcommands require `--url` or
411
+ `--prod`.
460
412
 
461
- ## convert-automation
413
+ ## Projects
462
414
 
463
- `convert-automation` exports a Cursor Automation into an agent project.
415
+ ### Scaffold a project {#init}
464
416
 
465
417
  ```bash
466
- agent-sdk convert-automation <url> [--dir <path>] [--json]
418
+ agent-sdk init [directory] [--template <name>] [--var id=value]... [--json]
467
419
  ```
468
420
 
469
- `<url>` is the dashboard URL (`…/automations/<uuid>` or
470
- `…/custom-agents/<uuid>`) or a bare UUID. The command fetches the
471
- Automation with your Cursor credentials. It writes converted files to
472
- `--dir`, which defaults to `./<automation-name>`, adds missing `init`
473
- scaffold files, and runs `npm install`. File generation does not
474
- overwrite existing paths. The install may still update lockfiles or run
475
- lifecycle scripts from an existing `package.json`.
421
+ Without a directory, `init` prints the setup guide and changes no files. With
422
+ a directory, it preserves existing scaffold files, adds missing files,
423
+ installs dependencies, and tries to put `agent-sdk` on `PATH`.
424
+
425
+ | Option | Contract |
426
+ | --- | --- |
427
+ | `--template <name>` | Use a bundled template: `agentic-owners`, `agents-md`, `code-wiki`, `demo`, `grokbot-agents`, `pr-autofixer`, `security-help`, `security-reviewer`, `thermo-quality-review`, `thermo-review`, `triage-jira`, or `triage-linear`. |
428
+ | `--var id=value` | Answer a template question without a prompt. Repeat for multiple answers. |
429
+ | `--json` | Skip interactive login and skill prompts, then print `{ ok, directory, template, created, skipped, installed, installError, cliOnPath, cliLinkError, next }`. `ok` reflects dependency installation. |
476
430
 
477
- MCP servers convert to Cursor-account connections resolved at runtime.
478
- The project contains their names, not server URLs or credentials.
479
- Local runs use the signed-in account. Hosted deployments use a separate
480
- service account; authorize each generated connection with
481
- [`mcp oauth`](#mcp-oauth) after the first deploy. Review the generated
482
- project, then run `validate` and `dev`.
431
+ On a TTY, templates with questions run their interview before writing files.
432
+ `init` also offers to refresh the bundled coding-agent skills and starts login
433
+ when the host has no Cursor credential.
483
434
 
484
- Warnings do not change the exit status. Bad arguments, authentication
485
- failures, fetch failures, and file write failures return a nonzero exit
486
- code.
435
+ ### Convert an Automation {#convert-automation}
436
+
437
+ ```bash
438
+ agent-sdk convert-automation <url-or-uuid> [--dir <path>] [--json]
439
+ ```
440
+
441
+ The input can be a Cursor Automation dashboard URL or its UUID. The output
442
+ directory defaults to `./<automation-name>`. Generated files don't overwrite
443
+ existing paths, and missing scaffold files are added. The following
444
+ `npm install` can update lockfiles and run lifecycle scripts from an existing
445
+ `package.json`.
487
446
 
488
447
  `--json` prints
489
448
  `{ ok, directory, files, warnings, setupSteps, installed, installError, mcpConnections }`.
490
- On failure it prints `{ ok: false, error }` and still writes the prose
491
- error to stderr.
492
-
493
- The [Convert a Cursor Automation](../guides/convert-automation.md) guide
494
- covers generated files and behavior the converter cannot reproduce.
449
+ Conversion warnings and dependency-install failures remain visible in this
450
+ output without failing a completed file conversion. Invalid input,
451
+ authentication, export, and file-write failures exit nonzero.
495
452
 
496
- ## install-skills
453
+ See [Convert a Cursor Automation](../guides/convert-automation.md) for the
454
+ generated project and features that need manual review.
497
455
 
498
- `install-skills` copies the package's coding-agent skills into
499
- `~/.cursor/skills/agentsdk/` with `alwaysApply: true` so Cursor loads
500
- them as global rules. Installing `@cursor/july` already does this in
501
- postinstall (`npm install`, `npx`, a version bump). Use this command
502
- to refresh without reinstalling the package, or from a monorepo
503
- source checkout (postinstall skips that tree).
456
+ ### Install coding-agent skills {#install-skills}
504
457
 
505
458
  ```bash
506
459
  agent-sdk install-skills [--print] [--json]
507
460
  ```
508
461
 
509
- Running the command is the confirmation: it never prompts, and it
510
- overwrites the installed skills with the version bundled in the
511
- package. `init` offers the same refresh once, interactively. `--print`
512
- previews the skills, the removals, and the install path without writing
513
- anything. `--json` prints
462
+ The command replaces the installed Agent SDK skills under
463
+ `~/.cursor/skills/agentsdk/` with the package copy and removes stale bundled
464
+ skills. `--print` previews the change. `--json` prints
514
465
  `{ ok, dryRun, directory, firstInstall, skills, removed }`.
515
466
 
516
- Set `CURSOR_JULY_SKIP_SKILL_INSTALL=1` to skip the postinstall copy.
517
- `CURSOR_JULY_SKILLS_HOME` overrides the `~/.cursor/skills` directory.
467
+ Package installation already performs this copy. Set
468
+ `CURSOR_JULY_SKIP_SKILL_INSTALL=1` to skip that install hook, or set
469
+ `CURSOR_JULY_SKILLS_HOME` to choose another skills directory.
518
470
 
519
- ## info
520
-
521
- `info` prints the discovered agent surface.
471
+ ### Inspect a project {#info}
522
472
 
523
473
  ```bash
524
- agent-sdk info --dir . [--json]
474
+ agent-sdk info [--dir <path>] [--json]
525
475
  ```
526
476
 
527
- `info` reports the model, instruction size, tools, skills, MCP
528
- connections, subagents, channel routes, schedules, hooks, and
529
- diagnostics. Text output summarizes each mounted agent. `--json` prints
530
- `{ agents: [{ slug, ...projectInfo }] }`, with one entry per mounted
531
- slug. Use `validate`, not `info --json`, when a script needs an error
532
- exit status.
477
+ Text output lists the model, instructions, tools, skills, extensions,
478
+ connections, subagents, channels, schedules, hooks, hosting settings, and
479
+ diagnostics. For one unslugged project, `--json` prints its project info
480
+ object. For slugged or multi-agent discovery, it prints `{ agents }`.
481
+
482
+ ### Validate a project {#validate}
533
483
 
534
- ## validate
484
+ ```bash
485
+ agent-sdk validate [--dir <path>]
486
+ ```
535
487
 
536
- `validate` checks the project and sets the exit code.
488
+ `validate` prints every discovered project's diagnostics and exits nonzero
489
+ when any diagnostic has error severity. Use it instead of `info --json` when a
490
+ script needs validation status.
491
+
492
+ ### Print a deployment manifest {#manifest}
537
493
 
538
494
  ```bash
539
- agent-sdk validate --dir .
495
+ agent-sdk manifest [--dir <path>] [--json]
540
496
  ```
541
497
 
542
- `validate` prints diagnostics for each agent and exits non-zero when any
543
- diagnostic has error severity. `serve` also refuses to start when errors
544
- are present. Warnings don't change the exit status.
498
+ `manifest` validates one project and prints its deployment metadata without a
499
+ network request. Default output is indented JSON; `--json` prints one compact
500
+ line.
545
501
 
546
- ## login / logout / whoami
502
+ ## Credentials and versions
547
503
 
548
- Three commands manage the host's Cursor credential.
504
+ ### Manage credentials {#login-logout-whoami}
549
505
 
550
506
  ```bash
551
507
  agent-sdk login [--api-key <key>] [--key-name <name>]
@@ -553,418 +509,394 @@ agent-sdk whoami [--json]
553
509
  agent-sdk logout
554
510
  ```
555
511
 
556
- `login` signs the host in to Cursor: browser sign-in mints a named,
557
- dashboard-revocable API key, and only the key is stored (the default
558
- name is `<invoked command> (<hostname>)`). It powers inference, the cloud
559
- runtime, and Cursor account MCP connections. `--key-name` changes the
560
- name of a browser-minted key. `login --api-key` validates and stores a
561
- key you already created.
512
+ | Command | Contract |
513
+ | --- | --- |
514
+ | `login` | Use a supplied API key, or open browser sign-in and store the resulting dashboard-revocable key in the CLI config directory. `--key-name` labels a browser-created key. |
515
+ | `whoami` | Show the active credential and its source. `--json` returns the same identity as JSON. |
516
+ | `logout` | Remove the stored credential file. It doesn't revoke the API key; revoke the key in the Cursor dashboard. |
562
517
 
563
- `whoami` shows which credential is active and why. An explicit key
564
- wins, then `CURSOR_API_KEY`, then `CURSOR_API_KEY_FILE` (hosted default
565
- `/run/cursor/secrets/CURSOR_API_KEY` when unset), then
566
- `CURSOR_SERVICE_ACCOUNT_KEY`, then the stored login. A host that has
567
- both the service-account key and a bind file authenticates as the file
568
- principal. `logout` removes the local credential file but doesn't
569
- revoke the API key. Revoke it in the Cursor dashboard when it should
570
- stop working.
518
+ ### Print the version {#version}
571
519
 
572
- Login and account RPCs honor `CURSOR_API_BASE_URL`. The SDK harness
573
- honors `CURSOR_BACKEND_URL`. Set both to the same URL, or keys minted
574
- on one host are rejected by the other.
520
+ ```bash
521
+ agent-sdk version [--json]
522
+ agent-sdk --version
523
+ agent-sdk -V
524
+ ```
575
525
 
576
- ## update
526
+ Text output is the version number. `--json` prints
527
+ `{ name, version }`.
577
528
 
578
- `update` upgrades an installed copy to the latest published version.
529
+ ### Update the CLI {#update}
579
530
 
580
531
  ```bash
581
532
  agent-sdk update
582
533
  ```
583
534
 
584
- The command checks npm's `latest` tag, detects how the Agent SDK was installed,
585
- and runs the matching npm, pnpm, Yarn, or Bun upgrade command. It handles
586
- global installs and project dependencies. It doesn't prompt before
587
- running the package-manager command.
588
-
589
- Source checkouts, `npx` or `pnpm dlx` caches, and unknown install layouts
590
- aren't changed. The command prints a manual upgrade hint instead.
535
+ `update` checks npm's `latest` tag and upgrades a recognized global or project
536
+ install with its package manager. If it can't identify an installed copy, it
537
+ prints a manual upgrade command instead.
591
538
 
592
- Published installs also check for a newer version at most once every 24
593
- hours and print an update warning on stderr. Source checkouts, CI, and
594
- commands with an explicit `--json` flag skip this automatic check.
539
+ Published installs check for updates at most once every 24 hours. Set
540
+ `AGENT_SERVE_NO_UPDATE_CHECK`, `NO_UPDATE_NOTIFIER`, or `CI` to disable the
541
+ automatic warning.
595
542
 
596
- ## deploy
543
+ ## Managed hosting
597
544
 
598
- `deploy` sends one or more agents to Cursor managed hosting.
545
+ ### Deploy agents {#deploy}
599
546
 
600
547
  ```bash
601
548
  agent-sdk deploy [--dir <path>] [--slug <slug> | --all] [--team <id>]
602
- [--repo <https-url>] [--ref <git-ref>] [--path <agent-path>]
603
- [--cursor-events-repo owner/name]...
604
- [--allow-domain <domain>]...
605
- [--no-wait] [--json]
606
- ```
607
-
608
- Managed hosting requires team membership and the team's cloud-agent
609
- entitlement. A team service-account API key with agent access can
610
- deploy. `--team` defaults to the signed-in account's team.
611
-
612
- For a single project, the slug defaults to a normalized version of the
613
- directory name. Deployment slugs contain lowercase letters, digits, `_`,
614
- or `-`, with a maximum of 64 characters. For a directory with several
615
- agents, select one with `--slug`, deploy all with `--all`, or choose from
616
- the TTY prompt. Non-interactive callers must pass `--slug` or `--all`.
617
- If `--dir` contains no agent project or child agents, `deploy` requires
618
- `--slug` (or a slug derived from the directory name) and an https git
619
- repository URL (`--repo`, or inferred from `origin` when `--dir` is an
620
- agent project). `--all` fails when there is no agent project.
621
-
622
- The command infers `--repo`, `--ref`, and `--path` from the current Git
623
- checkout when possible. Explicit flags take precedence. `--repo` must
624
- use HTTPS. Repeat `--cursor-events-repo` to select SCM event sources.
625
- Repeat `--allow-domain` to add engine egress domains; these values are
626
- combined with `hosting.egressDomains` from the agent config. Egress
627
- domains apply only to repository-backed deployments. Each domain must
628
- be a lowercase hostname with at least two labels and an alphabetic
629
- top-level domain. One leading `*.` wildcard is allowed. A deployment
630
- can declare at most 20 domains.
631
-
632
- By default, the command polls every three seconds for up to ten minutes
633
- and succeeds only when the deployment reaches `running`. `--no-wait`
634
- returns after the deployment request is accepted. Multi-agent deploys
635
- run sequentially. When several agents are selected, `--path` is ignored
636
- and each project infers its own path. A single-target `--json` run
637
- prints one object; a multi-target run prints an array.
638
-
639
- The first deployment can return an alias token. It appears once in text
640
- or JSON output and can't be retrieved later. Store it as a secret. Send
641
- it as `X-Agent-Alias-Token` when calling the stable alias URL, or use it
642
- to sign in to the hosted playground.
643
-
644
- See [Deployment](../deployment.md) for the hosting security model and
645
- state layout.
646
-
647
- ## deployments
648
-
649
- `deployments` lists the selected team's deployments.
549
+ [--repo <https-url>] [--ref <git-ref>] [--path <agent-path>]
550
+ [--cursor-events-repo <owner/name>]...
551
+ [--allow-domain <domain>]... [--no-wait] [--json]
552
+ ```
553
+
554
+ Managed hosting requires a team with agent hosting enabled. A team
555
+ service-account API key with agent access can deploy.
556
+
557
+ | Option | Contract |
558
+ | --- | --- |
559
+ | `--slug <slug>` | Select one project and set its deployment slug. |
560
+ | `--all` | Deploy every child project under a multi-agent `--dir`. Mutually exclusive with `--slug`. |
561
+ | `--team <id>` | Select the Cursor team. |
562
+ | `--repo <https-url>` | Set the source repository. The CLI infers it from the current checkout when possible. HTTPS is required. |
563
+ | `--ref <git-ref>` | Set the source Git ref. The CLI infers the current branch when possible. |
564
+ | `--path <agent-path>` | Set the project path relative to the repository root. |
565
+ | `--cursor-events-repo <owner/name>` | Add a repository whose SCM events reach the deployment. Repeat for multiple repositories. |
566
+ | `--allow-domain <domain>` | Add an egress hostname. Repeat for multiple domains; values are combined with `hosting.egressDomains`. |
567
+ | `--no-wait` | Return after the deployment request is accepted. |
568
+ | `--json` | Print one object for one target or an array for multiple targets. |
569
+
570
+ Deployment slugs contain lowercase letters, digits, `_`, or `-`, start with a
571
+ letter or digit, and have at most 64 characters. Egress entries are lowercase
572
+ hostnames with an alphabetic top-level domain; one leading `*.` wildcard is
573
+ allowed, with at most 20 entries.
574
+
575
+ By default, `deploy` waits until the deployment is running and exits nonzero
576
+ if it reaches a failed state. A first deployment can return an alias token
577
+ once. Store it as a secret and send it as `X-Agent-Alias-Token` when calling
578
+ the stable alias URL.
579
+
580
+ ### List deployments {#deployments}
650
581
 
651
582
  ```bash
652
583
  agent-sdk deployments [--team <id>] [--json]
653
584
  ```
654
585
 
655
- Text output shows each slug, status, deployment kind, and
656
- update time. `--json` prints `{ deployments }`.
586
+ Text output shows slug, status, generation, kind, and update time. `--json`
587
+ prints `{ deployments }` and may also include `applications`. An empty list
588
+ succeeds.
657
589
 
658
- ## deployment
659
-
660
- `deployment` prints the full status of one deployment.
590
+ ### Inspect a deployment {#deployment}
661
591
 
662
592
  ```bash
663
593
  agent-sdk deployment <slug> [--team <id>] [--json]
664
594
  ```
665
595
 
666
- Text output includes status, kind, alias, source, egress
667
- domains, secret names, engine state, and the last error when present.
668
- `--json` returns the full API response. It can include short-lived
669
- `engineAccess.headers`, so handle JSON output as a credential.
596
+ Text output includes status, source, routes, secret names, egress domains, and
597
+ the latest error. `--json` can include short-lived access headers, so handle
598
+ its output as a credential.
599
+
600
+ ### Stop a deployment {#stop}
601
+
602
+ ```bash
603
+ agent-sdk stop <slug> [--team <id>] [--no-wait] [--cancel-runs] [--json]
604
+ ```
670
605
 
671
- ## stop
606
+ The command waits for `stopped` by default. `--no-wait` returns after the
607
+ request is accepted. `--cancel-runs` also requests cancellation of active
608
+ runs and reminder wakes for a managed application. Other deployment types
609
+ reject this option.
672
610
 
673
- `stop` shuts down a deployment.
611
+ ### Cancel active runs {#cancel-runs}
674
612
 
675
613
  ```bash
676
- agent-sdk stop <slug> [--team <id>] [--no-wait] [--json]
614
+ agent-sdk cancel-runs <slug> [--team <id>] [--json]
677
615
  ```
678
616
 
679
- The command polls for up to ten minutes until the status reaches
680
- `stopped`. `--no-wait` returns after the stop request is accepted.
617
+ The command requests cancellation for a managed application's active runs and
618
+ reminder wakes. Other deployment types reject it. For a multi-tenant
619
+ application, this cancels every install; use `stop --cancel-runs` for
620
+ install-local cancellation. It exits nonzero if any cancellation request fails
621
+ to start.
622
+
623
+ ### Replace event repositories {#event-repos}
624
+
625
+ ```bash
626
+ agent-sdk event-repos <slug> [--repo <owner/name>]...
627
+ [--team <id>] [--json]
628
+ ```
681
629
 
682
- ## delete
630
+ The supplied repositories replace the managed application's complete event
631
+ repository list; they aren't merged with the previous list. Omit `--repo` to
632
+ clear the list.
683
633
 
684
- `delete` removes a hosted deployment. You can delete a deployment that
685
- still runs. The command frees the slug. A later deploy can use the same
686
- name. Spend stays on the archived service account.
634
+ ### Upgrade a managed application {#upgrade}
687
635
 
688
636
  ```bash
689
- agent-sdk delete <slug> [--team <id>] [--no-wait] [--json]
637
+ agent-sdk upgrade <slug> [--release <id-or-version>]
638
+ [--team <id>] [--json]
690
639
  ```
691
640
 
692
- The command waits until the deployment is gone. `--no-wait` returns after
693
- the delete request is accepted. Architecture v2 slugs use the Agent SDK
694
- control plane. Architecture v1 slugs use the Agent Serve control plane.
641
+ `--release` accepts a release ID or version. Omit it to select the newest
642
+ ready release. `--json` prints `{ releaseId }`.
643
+
644
+ ### Delete a deployment {#delete}
695
645
 
696
- ## rotate-token
646
+ ```bash
647
+ agent-sdk delete <slug> [--team <id>] [--no-wait] [--json]
648
+ ```
697
649
 
698
- `rotate-token` replaces the alias token used by callers and the hosted
699
- playground.
650
+ `delete` removes the deployment and frees its slug. It waits until the
651
+ deployment is gone unless `--no-wait` is set.
652
+
653
+ ### Rotate an alias token {#rotate-token}
700
654
 
701
655
  ```bash
702
656
  agent-sdk rotate-token <slug> [--team <id>] [--json]
703
657
  ```
704
658
 
705
- The old token stops working immediately. The replacement is shown once.
659
+ The old token stops working immediately. The replacement appears once;
706
660
  `--json` prints `{ aliasToken }`.
707
661
 
708
- ## mcp
709
-
710
- `mcp` proxies an agent's MCP endpoint over stdio for MCP clients that
711
- spawn local servers, such as Cursor.
662
+ ### Manage deployment secrets {#secrets}
712
663
 
713
664
  ```bash
714
- agent-sdk mcp --prod [--slug <slug>] [--team <id>]
715
- agent-sdk mcp --url <baseUrl> [--bearer-token <token>]
716
- agent-sdk mcp install [--prod | --url <baseUrl>] [--name <serverName>]
717
- [--print] [--json] [--remote]
665
+ agent-sdk secrets set <slug> NAME [NAME2 ...]
666
+ [--team <id>] [--from-argv] [--json]
667
+ agent-sdk secrets list <slug> [--team <id>] [--json]
668
+ agent-sdk secrets unset <slug> NAME [--team <id>] [--json]
718
669
  ```
719
670
 
720
- The bare command reads newline-delimited JSON-RPC on stdin and forwards
721
- one POST per message to `<target>/v1/mcp`. It requires `--prod` or
722
- `--url`. With `--prod`, it resolves the hosted deployment through the
723
- signed-in Cursor account and re-mints short-lived engine credentials as
724
- they expire, so no durable secret lands in a config file. stdout is
725
- reserved for the MCP wire; logging goes to stderr.
671
+ Pass secret names to `set`. On a TTY, the CLI prompts for hidden values; with
672
+ piped input, provide one line per name. It rejects `NAME=VALUE` arguments
673
+ unless `--from-argv` is set because command-line values can enter shell
674
+ history and captured terminals.
675
+
676
+ Names use `UPPER_SNAKE_CASE`, start with a letter, and contain at most 64
677
+ characters. Names beginning with `CURSOR_` are reserved. Values contain at
678
+ most 4096 bytes, and each deployment holds at most 32 secrets.
679
+
680
+ `list` returns names and creation times, never values. JSON output is
681
+ `{ secretNames }` for `set`, `{ secrets }` for `list`, and `{ removed }` for
682
+ `unset`. Changes are available to subsequent hosted work.
726
683
 
727
- `mcp install` writes the matching entry into `~/.cursor/mcp.json` so
728
- the agent shows up as an MCP server in Cursor. `--name` overrides the
729
- server name (the default is the slug, or a name derived from `--url`).
730
- `--print` prints the entry instead of writing the file, and `--json`
731
- prints a machine-readable result. `--remote` (with `--prod`) writes a
732
- remote HTTP entry pointing at the stable Cursor MCP gateway instead of
733
- the local stdio proxy, for MCP hosts that can't spawn stdio servers.
734
- The remote entry carries your API key in plain text, so treat the file
735
- as a credential.
684
+ ## MCP connections
736
685
 
737
- ## mcp oauth
686
+ ### Connect an MCP client {#mcp}
687
+
688
+ ```bash
689
+ agent-sdk mcp --prod [--slug <slug>] [--team <id>]
690
+ agent-sdk mcp --url <baseUrl> [--bearer-token <token>]
738
691
 
739
- `mcp oauth` authorizes a `defineConnection({ url, oauth: true })` or
740
- `defineConnection({ cursorAccount: true })` connection.
692
+ agent-sdk mcp install --prod [--slug <slug>] [--team <id>]
693
+ [--name <server-name>] [--print] [--json] [--remote]
694
+ agent-sdk mcp install --url <baseUrl> [--bearer-token <token>]
695
+ [--name <server-name>] [--print] [--json]
696
+ ```
741
697
 
742
- URL connections run a browser PKCE flow. Tokens are written to
743
- `mcp-auth.json` under the CLI config directory (override with
744
- `AGENT_SERVE_CONFIG_DIR`). Pass `--store` to upsert matching
745
- `MCP_OAUTH_<CONNECTION>_*` secrets on the hosted deployment.
746
- `--store` is the path for the next deploy. Hosted Connect lets the
747
- current process retry.
698
+ | Command | Contract |
699
+ | --- | --- |
700
+ | `mcp` | Read newline-delimited JSON-RPC from stdin and proxy it to the selected agent's MCP endpoint. stdout is reserved for MCP messages. A target is required. |
701
+ | `mcp install` | Add the selected agent to `~/.cursor/mcp.json`. `--name` sets the server name, `--print` previews the entry, and `--json` prints a machine-readable result. A `--url` entry with `--bearer-token` contains that token; handle printed and written copies as credentials. |
702
+ | `mcp install --remote --prod` | Write a remote HTTP entry for clients that can't spawn a stdio process. The entry contains the API key in plain text and must be handled as a credential. |
748
703
 
749
- Cursor-account connections authorize the hosted deployment's service
750
- account through the Cursor backend's connector consent flow. Those
751
- tokens live on the Cursor backend, so `--store` isn't needed; the
752
- command prints a note when you pass it anyway.
704
+ ### Authorize MCP OAuth {#mcp-oauth}
753
705
 
754
706
  ```bash
755
- agent-sdk mcp oauth <connection> [--dir .] [--store] [--slug <slug>] [--team <id>]
707
+ agent-sdk mcp oauth <connection> [--dir <path>] [--store]
708
+ [--slug <slug>] [--team <id>]
756
709
  ```
757
710
 
758
711
  `<connection>` is the basename under `agent/mcp-connections/` or
759
712
  `agent/host-connections/`.
760
- `--slug` defaults to the `--dir` basename. `--team` defaults to the
761
- signed-in account's team. You need `agent-sdk login` (or `--api-key`)
762
- before `--store`.
763
713
 
764
- Secret names are `MCP_OAUTH_<NAME>_ACCESS_TOKEN`,
765
- `_REFRESH_TOKEN`, and `_CLIENT_ID` (`<NAME>` is the connection id in
766
- upper snake case). Declare them in `hosting.secretNames` so deploy
767
- validation expects them. Secrets apply on the next deploy.
714
+ | Connection | Result |
715
+ | --- | --- |
716
+ | `defineConnection({ url, oauth: true })` | Open a browser PKCE flow and save tokens in `mcp-auth.json` under the CLI config directory. `--store` also sets the matching deployment secrets. |
717
+ | `defineConnection({ cursorAccount: true })` | Authorize the managed deployment's service account through Cursor. `--store` isn't needed. |
768
718
 
769
- Tokens are bound to the connection's resource URL. Changing the URL
770
- invalidates the local entry; run `mcp oauth` again.
719
+ Stored secret names are `MCP_OAUTH_<NAME>_ACCESS_TOKEN`,
720
+ `MCP_OAUTH_<NAME>_REFRESH_TOKEN`, and `MCP_OAUTH_<NAME>_CLIENT_ID`. Declare
721
+ them in `hosting.secretNames`. URL-connection tokens are bound to the resource
722
+ URL; authorize again after changing it.
771
723
 
772
- See the [Host MCP OAuth guide](../guides/mcp-oauth.md).
724
+ See [Host MCP OAuth](../guides/mcp-oauth.md) for the full setup flow.
773
725
 
774
- ## secrets
726
+ ## Channel helpers
775
727
 
776
- `secrets` manages environment secrets for a deployment.
728
+ ### Configure Slack {#slack}
777
729
 
778
730
  ```bash
779
- agent-sdk secrets set <slug> NAME [NAME2 ...] [--team <id>] [--json]
780
- agent-sdk secrets list <slug> [--team <id>] [--json]
781
- agent-sdk secrets unset <slug> NAME [--team <id>] [--json]
731
+ agent-sdk slack setup
732
+ agent-sdk slack create [--dir <path>] [--name <name>] [--prod]
733
+ [--slack-team <id>] [--team <id>] [--icon <url-or-file>]
734
+ [--prefix <prefix> | --no-prefix] [--channel-posts] [--json]
735
+ agent-sdk slack destroy [--dir <path>] [--prod]
736
+ [--slack-team <id>] [--team <id>] [--json]
737
+ agent-sdk slack icon <url-or-file> [--dir <path>] [--prod]
738
+ [--slack-team <id>] [--team <id>] [--json]
739
+ agent-sdk slack init --manual [--dir <path>] [--name <name>]
740
+ [--prefix <prefix> | --no-prefix] [--channel-posts]
741
+ [--install | --no-install] [--slack-team <id>] [--prod]
742
+ agent-sdk slack manifest [--dir <path>] [--name <name>]
743
+ [--env dev|prod|both] [--channel-posts] [--print]
744
+ agent-sdk slack doctor [--dir <path>]
745
+ [--prefix <prefix> | --no-prefix] [--channel <id>]... [--json]
782
746
  ```
783
747
 
784
- Pass names only. On a TTY, `secrets set` prompts for each value with
785
- hidden input (nothing echoes). When stdin is piped, provide one line per
786
- name. Values never print on stdout.
748
+ | Subcommand | Contract |
749
+ | --- | --- |
750
+ | `setup` | Print the setup choices without changing files. |
751
+ | `create` | Open the signed-in Cursor dashboard wizard, write the resulting token pair to `.env.local`, and run `doctor`. The development app is the default; `--prod` selects production. A second create overwrites the live app manifest. |
752
+ | `destroy` | Delete the provisioned app. Existing local token entries remain but stop working. |
753
+ | `icon` | Set an HTTPS or local PNG, JPG, or GIF icon of at most 512 KB. |
754
+ | `init --manual` | Write the channel, manifests, Slack CLI project, and setup files for a manually managed app. |
755
+ | `manifest` | Generate Slack manifests. `--env` defaults to `both`; with `--print`, select one environment when you need one JSON document. |
756
+ | `doctor` | Check both tokens, Socket Mode connectivity, Slack authentication, and any repeatable `--channel` values. |
757
+
758
+ The default token prefix is the project directory name normalized to upper
759
+ snake case. `--no-prefix` uses `SLACK_BOT_TOKEN` and `SLACK_APP_TOKEN`.
760
+ Channel-post subscriptions are off by default; `--channel-posts` adds message
761
+ events for public and private channels as required by
762
+ `engagement.channelPosts`.
763
+ Multi-agent servers need one token pair per agent.
764
+
765
+ See [Slack](../guides/slack.md) for app consent and manual setup.
787
766
 
788
- Do not put values on the command line. `NAME=VALUE` in argv shows up in
789
- shell history and in agent-captured terminals. The CLI refuses that form
790
- unless you pass `--from-argv` (still warns). Prefer a file redirect when
791
- a human is not at the prompt:
767
+ ### Test GitHub webhooks {#github}
792
768
 
793
769
  ```bash
794
- agent-sdk secrets set weather-agent WEATHER_API_KEY < ./weather-api-key.txt
770
+ agent-sdk github forward [--dir <path>] [--slug <slug>] [--channel <id>]
771
+ [--repo owner/repo | --org <org>] [--events a,b,c]
772
+ [--url <url>] [--host <host>] [--port <n>]
773
+ [--secret <secret>] [--install]
774
+ agent-sdk github replay <pr-url-or-owner/repo#N>
775
+ [--events a,b,c | '*'] [--action <action>] [--conclusion <result>]
776
+ [--comment <body>] [--context <name>] [--dir <path>]
777
+ [--slug <slug>] [--channel <id>] [--url <url>]
778
+ [--secret <secret>] [--dry-run] [--out <dir>] [--json]
779
+ agent-sdk github events [--dir <path>] [--host <host>] [--port <n>] [--json]
780
+ agent-sdk github doctor [--install] [--json]
795
781
  ```
796
782
 
797
- Secret names use `UPPER_SNAKE_CASE`, start with a letter, and contain at
798
- most 64 characters. Names beginning with `CURSOR_` are reserved. Values
799
- can contain at most 4096 bytes, and one deployment can hold 32 secrets.
783
+ | Subcommand | Contract |
784
+ | --- | --- |
785
+ | `forward` | Forward live deliveries with `gh webhook forward`. The CLI derives URLs and events from discovered channels and can fan out to several matches. |
786
+ | `replay` | Read a pull request, synthesize selected webhook payloads, and post them to matching channels. The default event is `pull_request`; `'*'` selects the channel's supported declared events. |
787
+ | `events` | List discovered channel URLs and event sets. No channels is a successful empty result. |
788
+ | `doctor` | Check the GitHub CLI, its login, and the pinned webhook extension. `--install` installs or repairs the extension. |
800
789
 
801
- `secrets list` returns names and creation times, never values. Secret
802
- changes reach the engine on its next deploy. `secrets set` upserts the
803
- named secrets without deleting others.
790
+ Replay supports `pull_request`, `issue_comment`,
791
+ `pull_request_review_comment`, `check_run`, `check_suite`, `workflow_run`, and
792
+ `status`. `--dry-run` prints without posting. `--out` writes fixtures and
793
+ still posts unless combined with `--dry-run`.
804
794
 
805
- JSON output is `{ secretNames }` for `set`, `{ secrets }` for `list`,
806
- and `{ removed }` for `unset`.
795
+ Forwarding requires repository admin access, or organization owner access for
796
+ `--org`. It uses the GitHub CLI's stored login; unset `GITHUB_TOKEN` and
797
+ `GH_TOKEN` before forwarding. Replay needs only pull-request read access.
807
798
 
808
- ## slack
799
+ See [GitHub](../guides/github.md) for channel setup and live delivery.
809
800
 
810
- The `slack` pack provisions, generates, and checks Socket Mode channel
811
- setup.
801
+ ### Test GitLab webhooks {#gitlab}
812
802
 
813
803
  ```bash
814
- agent-sdk slack setup
815
- agent-sdk slack create [--dir <path>] [--name <name>] [--prod]
816
- [--slack-team <T…>] [--team <id>]
817
- [--icon <https-url-or-file>]
818
- [--prefix <prefix> | --no-prefix]
819
- [--channel-posts] [--json]
820
- agent-sdk slack destroy [--dir <path>] [--prod] [--slack-team <T…>]
821
- [--team <id>] [--json]
822
- agent-sdk slack icon <https-url-or-file> [--dir <path>] [--prod]
823
- [--slack-team <T…>] [--team <id>] [--json]
824
- agent-sdk slack init --manual [--dir <path>] [--name <name>]
825
- [--prefix <prefix> | --no-prefix] [--channel-posts]
826
- [--install | --no-install] [--slack-team <T…>] [--prod]
827
- agent-sdk slack manifest [--dir <path>] [--name <name>]
828
- [--env dev|prod|both] [--channel-posts] [--print]
829
- agent-sdk slack doctor [--dir <path>] [--prefix <prefix> | --no-prefix] [--json]
830
- ```
831
-
832
- `slack setup` prints the two-product chooser plus the `--manual` setup
833
- checklist. It doesn't change files.
834
-
835
- `slack create` opens the signed-in Cursor dashboard wizard. Finish Slack
836
- consent and the bot name there. The CLI writes the token pair into
837
- `<dir>/.env.local` and runs `doctor`. It requires a signed-in host
838
- (`agent-sdk login` or `CURSOR_API_KEY`). A team service-account key
839
- cannot create Slack apps. `--prod` provisions the production app; the
840
- default is the development app. `--name` / `--icon`
841
- / `--channel-posts` prefill the wizard. A second create for the same
842
- slug and env overwrites the live Slack app. If Slack needs a workspace
843
- admin's approval, the wizard waits; keep the CLI running, open Slack's
844
- **Request approval** page (the CLI prints the link), and click **Retry**
845
- after the admin approves. Token values never print.
846
-
847
- `slack destroy` deletes the provisioned app for the selected
848
- environment. Tokens already written to `.env.local` stay in place and
849
- stop working.
850
-
851
- `slack icon` sets the provisioned app's icon from an https image URL or
852
- a local png, jpg, or gif file of at most 512KB.
853
-
854
- `slack init` without `--manual` exits non-zero and writes no files. Use
855
- `slack create` for the dashboard wizard. `slack init --manual` writes
856
- the channel file, development and production manifests, a Slack CLI
857
- `.slack/` project (hook + manifests, committed with the repo). When
858
- Slack CLI is logged in, it installs the app. Otherwise `next` asks
859
- you to install it. `--install` requires that install. `--no-install`
860
- skips it. `--prod` selects the deployed app.
861
- `--slack-team` picks the workspace. Slack CLI keeps install tokens in
862
- that process; copy `xoxb` and mint `xapp` (`connections:write`) into
863
- `.env.local`. Tokens that appear in `.env` during that install are
864
- copied onto the prefixed names. Paste `.slack/manifest.dev.json` at
865
- api.slack.com when the Slack CLI is missing. Do not run
866
- `slack deploy`. The command refuses to overwrite the channel file.
867
- It updates the Slack CLI hook and manifests when `.slack/` already
868
- exists. If a collision occurs, it exits non-zero; files created
869
- earlier in the run remain. The token prefix defaults to the directory
870
- basename normalized to uppercase snake case.
871
- Explicit `--prefix` values use the same normalization. For example,
872
- `pr-approver` becomes `PR_APPROVER_SLACK_BOT_TOKEN`. `--no-prefix`
873
- uses shared `SLACK_BOT_TOKEN` and `SLACK_APP_TOKEN`.
874
- `--channel-posts` subscribes the manifests to channel-post events.
875
- The command always prints a JSON summary.
876
-
877
- `slack manifest` regenerates selected manifest files. `--env` defaults
878
- to `both`, and `--name` defaults to the directory name. `--print` writes
879
- the manifest JSON to stdout instead of changing files. With the default
880
- `--env both`, it prints development JSON, a `--- prod ---` separator,
881
- then production JSON.
882
-
883
- `slack doctor` checks both tokens, Socket Mode connectivity, and
884
- Slack's `auth.test`. It exits non-zero when any check fails.
885
-
886
- See the [Slack guide](../guides/slack.md).
887
-
888
- ## github
889
-
890
- The `github` pack discovers `githubChannel()` definitions and sends live
891
- or synthesized deliveries to them.
804
+ agent-sdk gitlab replay <mr-url-or-group/project!N>
805
+ [--events a,b,c | '*'] [--action <action>]
806
+ [--conclusion <status>] [--comment <body>]
807
+ [--dir <path>] [--slug <slug>] [--channel <id>]
808
+ [--url <url>] [--host <host>] [--port <n>]
809
+ [--secret <secret>] [--dry-run] [--out <dir>] [--json]
810
+ agent-sdk gitlab events [--dir <path>] [--host <host>] [--port <n>] [--json]
811
+ agent-sdk gitlab forward [--dir <path>] [--host <host>] [--port <n>]
812
+ ```
813
+
814
+ | Subcommand | Contract |
815
+ | --- | --- |
816
+ | `replay` | Read a merge request, synthesize selected webhook payloads, and post them to matching channels. The default event is `merge_request`; `'*'` selects the channel's declared events. |
817
+ | `events` | List discovered GitLab channel URLs and object kinds. |
818
+ | `forward` | Print the public-hook and tunnel recipe for live deliveries. |
819
+
820
+ Replay supports `merge_request`, `note`, `pipeline`, and `push`. It requires
821
+ `GITLAB_TOKEN` with project read access. `--secret` defaults to
822
+ `GITLAB_WEBHOOK_SECRET`; `--dry-run` and `--out` follow the GitHub replay
823
+ contract.
824
+
825
+ See [GitLab](../guides/gitlab.md) for channel setup and self-managed hosts.
826
+
827
+ ### Test Bitbucket webhooks {#bitbucket}
892
828
 
893
829
  ```bash
894
- agent-sdk github doctor [--install] [--json]
895
- agent-sdk github events [--dir <path>] [--host <host>] [--port <n>] [--json]
896
- agent-sdk github forward [--dir <path>] [--slug <slug>] [--channel <id>]
897
- [--repo owner/repo | --org <org>] [--events a,b,c] [--url <url>]
898
- [--host <host>] [--port <n>] [--secret <secret>] [--install]
899
- agent-sdk github replay <pr-url|owner/repo#N> --dir .
900
- [--events a,b,c|'*'] [--action <action>] [--conclusion <result>]
901
- [--comment <body>] [--context <name>] [--slug <slug>] [--channel <id>]
902
- [--host <host>] [--port <n>] [--url <url>] [--secret <secret>]
903
- [--dry-run] [--out <dir>] [--json]
904
- ```
905
-
906
- `github events` prints each discovered channel's delivery URL and event
907
- set. When it finds no channels, it returns an empty result and exits
908
- successfully.
909
-
910
- `github forward` wraps `gh webhook forward`. It infers the repository
911
- from the Git remote when you omit `--repo` and `--org`. URLs and events
912
- come from the discovered channels; `--events` overrides the event set.
913
- Use `--slug` or `--channel` to narrow discovery when several channels
914
- match. Otherwise, one local proxy fans deliveries out to every match.
915
- `--url` targets one channel. For `forward`, pass `--events` when no
916
- matched channel can supply the event set.
917
-
918
- Repository forwarding needs repo-admin access. Organization forwarding
919
- needs org-owner access. The relay authenticates with the GitHub CLI's
920
- stored login. A `GITHUB_TOKEN` or `GH_TOKEN` environment override can
921
- make delivery requests return `401`, even when hook creation succeeds.
922
- Unset those variables before forwarding.
923
-
924
- Pass `--secret` or set `GITHUB_WEBHOOK_SECRET` to sign deliveries.
925
- `serve --dev` accepts unsigned loopback deliveries. A non-dev target
926
- requires the same secret on both sides.
927
-
928
- `github replay` needs read access, not admin access. It reads the pull
929
- request through `gh api`, builds GitHub webhook payloads, and posts them
930
- to the selected channels. Supported events are `pull_request`,
931
- `issue_comment`, `pull_request_review_comment`, `check_run`,
932
- `check_suite`, `workflow_run`, and `status`. The default is
933
- `pull_request` with action `synchronize`. Comment events need
934
- `--comment`.
935
-
936
- Use `--events '*'` to replay every supported event declared by the
937
- channel. `--dry-run` prints payloads without posting them. `--out`
938
- writes fixture files but still posts unless you also pass `--dry-run`.
939
-
940
- `github doctor` checks `gh`, its login, and the pinned
941
- `cli/gh-webhook` extension. `--install` installs or repairs the
942
- extension. An environment-token override is a warning and doesn't make
943
- `github doctor` fail.
944
-
945
- See the [GitHub guide](../guides/github.md).
830
+ agent-sdk bitbucket replay <pr-url-or-workspace/repo#N>
831
+ [--events a,b,c | '*'] [--comment <body>]
832
+ [--dir <path>] [--slug <slug>] [--channel <id>]
833
+ [--url <url>] [--host <host>] [--port <n>]
834
+ [--secret <secret>] [--dry-run] [--out <dir>] [--json]
835
+ agent-sdk bitbucket events [--dir <path>] [--host <host>] [--port <n>] [--json]
836
+ agent-sdk bitbucket forward [--dir <path>] [--host <host>] [--port <n>]
837
+ ```
838
+
839
+ | Subcommand | Contract |
840
+ | --- | --- |
841
+ | `replay` | Read a pull request, synthesize webhook payloads in the host's Cloud or Data Center format, and post them to matching channels. |
842
+ | `events` | List discovered Bitbucket channel URLs and event keys. |
843
+ | `forward` | Print the repository-hook and tunnel recipe for live deliveries. |
844
+
845
+ Replay supports `pullrequest:created`, `pullrequest:updated`,
846
+ `pullrequest:comment_created`, and `repo:push`, along with their supported Data
847
+ Center forms. It requires `BITBUCKET_TOKEN` with pull-request read access.
848
+ `--secret` defaults to `BITBUCKET_WEBHOOK_SECRET`; `--dry-run` and `--out`
849
+ follow the GitHub replay contract.
850
+
851
+ See [Bitbucket](../guides/bitbucket.md) for Cloud and Data Center setup.
946
852
 
947
853
  ## Environment variables
948
854
 
949
- These environment variables affect the CLI and its channel packs.
855
+ Credential resolution follows this order: `--api-key`, `CURSOR_API_KEY`,
856
+ `CURSOR_API_KEY_FILE`, `CURSOR_SERVICE_ACCOUNT_KEY`, then the stored login.
950
857
 
951
- | Variable | Meaning |
858
+ | Variable | Contract |
859
+ | --- | --- |
860
+ | `CURSOR_API_KEY` | Cursor credential. |
861
+ | `CURSOR_API_KEY_FILE` | Path to a Cursor credential file. |
862
+ | `CURSOR_SERVICE_ACCOUNT_KEY` | Team service-account credential used after the API key and key-file sources. |
863
+ | `CURSOR_API_BASE_URL` | Backend for login, account, deployment, and event commands. |
864
+ | `CURSOR_BACKEND_URL` | Backend for Agent SDK turns. Set it with `CURSOR_API_BASE_URL` when using a non-default backend. |
865
+ | `AGENT_SERVE_CONFIG_DIR` | Override the CLI config directory for stored credentials and update state. |
866
+ | `AGENT_SERVE_NO_UPDATE_CHECK`, `NO_UPDATE_NOTIFIER`, `CI` | Disable published-version checks when set to a non-empty value other than `0`. |
867
+ | `CURSOR_JULY_SKIP_SKILL_INSTALL` | Skip the package install hook that refreshes coding-agent skills. |
868
+ | `CURSOR_JULY_SKILLS_HOME` | Override the coding-agent skills directory. |
869
+ | `GITHUB_WEBHOOK_SECRET` | Default signature secret for GitHub forwarding and replay. |
870
+ | `GITHUB_APP_ID`, `GITHUB_APP_PRIVATE_KEY`, `GITHUB_APP_INSTALLATION_ID` | GitHub App credentials for outbound API calls. |
871
+ | `GITHUB_TOKEN`, `GH_TOKEN` | Token credentials for outbound GitHub calls. Unset both for `github forward`. |
872
+ | `GITLAB_TOKEN` | Token for GitLab API reads and direct channel calls. |
873
+ | `GITLAB_API_BASE_URL` | Override the GitLab REST base URL for self-managed hosts. |
874
+ | `GITLAB_WEBHOOK_SECRET` | Default GitLab webhook token for replay and channel verification. |
875
+ | `BITBUCKET_TOKEN` | Token for Bitbucket API reads and direct channel calls. |
876
+ | `BITBUCKET_API_BASE_URL` | Override the Bitbucket Data Center REST base URL. |
877
+ | `BITBUCKET_WEBHOOK_SECRET` | Default Bitbucket signing secret for replay and channel verification. |
878
+ | `SLACK_BOT_TOKEN`, `SLACK_APP_TOKEN` | Slack tokens for one agent. Multi-agent servers use `<PREFIX>_SLACK_BOT_TOKEN` and `<PREFIX>_SLACK_APP_TOKEN`. |
879
+
880
+ ## Exit status
881
+
882
+ | Command | Nonzero contract |
952
883
  | --- | --- |
953
- | `CURSOR_API_KEY` | Cursor credential. It takes precedence over `CURSOR_API_KEY_FILE`, `CURSOR_SERVICE_ACCOUNT_KEY`, and the stored login. |
954
- | `CURSOR_API_KEY_FILE` | Path to a Cursor credential file. Used when `CURSOR_API_KEY` is unset. When this variable is unset, the hosted default `/run/cursor/secrets/CURSOR_API_KEY` is tried. A present file takes precedence over `CURSOR_SERVICE_ACCOUNT_KEY` and the stored login. |
955
- | `CURSOR_SERVICE_ACCOUNT_KEY` | Team service-account credential. Used when `CURSOR_API_KEY` and `CURSOR_API_KEY_FILE` (including the hosted default path) are unset. It takes precedence over the stored login. |
956
- | `CURSOR_API_BASE_URL` | Backend used by login, account, deployment, and event-relay RPCs. |
957
- | `CURSOR_BACKEND_URL` | Backend used by the Cursor SDK harness. |
958
- | `AGENT_SERVE_CONFIG_DIR` | Directory for stored credentials and update-check state. Defaults to the CLI config directory under `~/.config`. |
959
- | `AGENT_SERVE_NO_UPDATE_CHECK` / `NO_UPDATE_NOTIFIER` | Disable the automatic published-version check when set to a non-empty value other than `0`. |
960
- | `CI` | Disable the automatic published-version check when set. |
961
- | `GITHUB_WEBHOOK_SECRET` | Default signing secret for GitHub forwarding and replay. |
962
- | `GITHUB_APP_ID` / `GITHUB_APP_PRIVATE_KEY` / `GITHUB_APP_INSTALLATION_ID` | GitHub App authentication for outbound API calls. |
963
- | `GITHUB_TOKEN` / `GH_TOKEN` | Token authentication for outbound API calls. Unset both for `github forward`. |
964
- | `SLACK_BOT_TOKEN` / `SLACK_APP_TOKEN` | Slack tokens for one agent. Use `<PREFIX>_SLACK_BOT_TOKEN` and `<PREFIX>_SLACK_APP_TOKEN` for each agent on a multi-agent host. |
965
-
966
- ## What's next
967
-
968
- - [Project layout](./project-layout.md): files the CLI discovers
969
- - [HTTP API](./http-api.md): routes used by `chat`, `call`, and other clients
970
- - [Deployment](../deployment.md): production auth, state, and operations
884
+ | No command | Print help and exit `1`. Explicit `help`, `--help`, and `-h` exit `0`. |
885
+ | `run` | For local and running-server trajectories, exit `1` when the trajectory fails. |
886
+ | `call` | Exit `1` unless the response succeeds with `ok: true`. |
887
+ | `skill` | Exit `2` when the name is missing and `1` when the request fails. |
888
+ | `trajectory` | Exit `1` when the reconstructed trajectory failed. |
889
+ | `eval` | Exit `1` for failed cases, or scored cases below threshold with `--strict`; exit `2` for invalid eval options or an execution with no matching cases. An empty `--list` succeeds. |
890
+ | `eval status` | Exit `3` while the batch runs, `1` when it failed or was cancelled, and `2` for invalid usage. |
891
+ | `chat`, `session` | Exit `2` for documented option conflicts or missing required input. |
892
+ | `validate` | Exit `1` when any project diagnostic has error severity. |
893
+ | `convert-automation` | Exit `1` for invalid input, authentication, export, or file-write failure. Warnings and dependency-install failure don't change a successful conversion exit. |
894
+ | Other commands | Exit nonzero when validation, authentication, a request, or the requested operation fails. |
895
+
896
+ ## Related
897
+
898
+ - [Project layout](./project-layout.md)
899
+ - [Sessions, events, and streaming](./sessions.md)
900
+ - [Evals](./evals.md)
901
+ - [HTTP API](./http-api.md)
902
+ - [Deployment](../deployment.md)