@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,19 +1,15 @@
1
1
  ---
2
2
  title: "Jev"
3
- description: "Use typed Jev decisions to filter review findings, route pull requests, and gate software-factory writes."
3
+ description: "Use typed Jev decisions to filter findings, route pull requests, and gate review actions."
4
4
  ---
5
5
 
6
6
  # Use Jev in review tools
7
7
 
8
- Use Jev for narrow decisions where your software factory needs a typed
9
- answer, not another paragraph. A review agent can filter speculative
10
- findings, classify pull request risk, choose a reviewer, or decide
11
- whether a merge needs a documentation follow-up. Jev returns a choice,
12
- score, or probability; your TypeScript decides what happens next.
13
-
14
- Ask one question per judgment. If an approval depends on risk, test
15
- coverage, and the size of the change, ask three questions in one call
16
- and combine the answers in code.
8
+ Use Jev when a review workflow needs a typed decision instead of prose.
9
+ A review agent can filter speculative findings, classify pull request
10
+ risk, choose a reviewer, or decide whether a merge needs a documentation
11
+ follow-up. Jev returns a choice, score, or probability; your TypeScript
12
+ decides what happens next.
17
13
 
18
14
  Set `TYPESAFE_API_KEY`. The default model is `jev-latest`.
19
15
 
@@ -26,11 +22,12 @@ export default jev();
26
22
 
27
23
  ## Start only the review turns you need
28
24
 
29
- You can call Jev from a channel hook before a model turn starts. When a
30
- pull request opens, this hook reads its title, labels, and filenames,
31
- then asks whether the change needs security review. A high probability
32
- starts the review. Otherwise the hook returns `null`, so the agent does
33
- not run and nothing is posted to GitHub.
25
+ Call Jev from a channel hook before a model turn starts. When a pull
26
+ request opens or becomes ready for review, this hook sends its title,
27
+ body, labels, and filenames to Jev to decide whether the change needs
28
+ security review. A result that clears the threshold starts the review
29
+ turn; otherwise, the hook returns `null`, so the agent doesn't run or
30
+ post to GitHub.
34
31
 
35
32
  ```ts
36
33
  // agent/channels/github.ts
@@ -86,8 +83,7 @@ export default githubChannel({
86
83
  });
87
84
  ```
88
85
 
89
- Only pull request metadata goes to Jev here. The review turn still reads
90
- the diff itself.
86
+ Jev receives only the pull request metadata shown here, not the diff.
91
87
 
92
88
  ## Filter findings before you post them
93
89
 
@@ -192,8 +188,8 @@ approval event.
192
188
 
193
189
  After a pull request merges, a code-wiki agent can ask whether the
194
190
  change introduced a durable fact that belongs in the docs. A low
195
- probability means no follow-up. A high probability opens a documentation
196
- pull request instead of turning every merge into churn.
191
+ probability skips the follow-up, while a high probability opens a
192
+ documentation pull request.
197
193
 
198
194
  ```ts
199
195
  import { above, decide } from "@cursor/july/extensions/jev";
@@ -218,14 +214,14 @@ return openDocsPullRequest({ title, summary });
218
214
 
219
215
  ## Write tools with Jev
220
216
 
221
- `decide` is a regular async host function. Call it from a channel hook,
222
- server tool, or router. It returns the answer map directly. `evaluate`
223
- makes the same request and returns `{ answers }`.
217
+ Call `decide` from a channel hook, server tool, or router when you want
218
+ the answer map directly. Use `evaluate` when you want `{ answers }`.
224
219
 
225
220
  Use a boolean for a yes-or-no gate, a choice for a closed set such as
226
- risk tiers or owners, and a score for an ordered rubric. `above` checks
227
- a boolean probability or score. `needsHuman` checks whether a boolean
228
- or the selected choice clears your confidence bar.
221
+ risk tiers or owners, and a score for an ordered rubric. `above` returns
222
+ `true` when a boolean probability or score meets the threshold.
223
+ `needsHuman` returns `true` when a boolean probability or the selected
224
+ choice's probability falls below the confidence threshold.
229
225
 
230
226
  Keep the questions atomic and combine them in TypeScript. For example,
231
227
  ask separately whether a finding is real, whether its impact is
@@ -235,8 +231,8 @@ rule that decides whether all three are enough to post.
235
231
  ## Let the agent ask Jev
236
232
 
237
233
  Mounting the extension adds a read-only harness tool named
238
- `<namespace>__evaluate`. With the default `jev` filename, the model sees
239
- `jev__evaluate`.
234
+ `<namespace>__evaluate`. With the `agent/extensions/jev.ts` mount shown
235
+ earlier, the model sees `jev__evaluate`.
240
236
 
241
237
  The tool accepts one state and a list of boolean, choice, or score
242
238
  questions. It returns `{ answers }` and never posts, approves, or opens
@@ -278,59 +274,6 @@ export default jev({
278
274
  the exported helpers, so project tools can still import `decide`,
279
275
  `above`, and `needsHuman`.
280
276
 
281
- ## Jev and trajectory evals
282
-
283
- An eval checks a whole turn: the agent called the read, and it stayed
284
- off approve. `decide` is the one call inside the tool, before GitHub.
285
- Use the [Evals guide](../evals.md) when you want the turn to keep
286
- behaving. Use `decide` when the tool itself needs a tier or a yes.
287
-
288
- ## Test without the live API
289
-
290
- Pass `fetch` and `apiKey` and the same `decide` path runs in a test.
291
-
292
- ```ts
293
- import { decide } from "@cursor/july/extensions/jev";
294
-
295
- const answers = await decide({
296
- state: {
297
- title: "Skip the refund auth check",
298
- summary: "acme/checkout#42 drops the session check on POST /refunds.",
299
- },
300
- questions: {
301
- risk: {
302
- type: "choice",
303
- instructions: "What risk tier is this pull request?",
304
- criteria: {
305
- "very-low": "docs, formatting, or a mechanical rename",
306
- low: "a local change with tests and no new trust boundary",
307
- medium: "auth, billing, or a behavior change callers depend on",
308
- high: "a likely exploit, data loss, or a broken public contract",
309
- },
310
- },
311
- },
312
- apiKey: "sk-test",
313
- fetch: async () =>
314
- new Response(
315
- JSON.stringify({
316
- answers: {
317
- risk: {
318
- type: "choice",
319
- choice: "high",
320
- probabilities: {
321
- "very-low": 0.02,
322
- low: 0.05,
323
- medium: 0.18,
324
- high: 0.75,
325
- },
326
- },
327
- },
328
- }),
329
- { status: 200 }
330
- ),
331
- });
332
- ```
333
-
334
277
  ## Practices
335
278
 
336
279
  - Pass the pull request title, a short summary, and the draft finding.
@@ -127,6 +127,13 @@ export default slackChannel({
127
127
  When you create the app, pass `--channel-posts` and invite the bot to
128
128
  every channel in the allowlist.
129
129
 
130
+ On Cursor-managed hosting the same watch runs at admission for each
131
+ delivery. `debounceMs` is ignored there: the control plane answers every
132
+ delivery immediately, and edits arrive as separate deliveries that are
133
+ dropped at the edge. Channel ids match without any Slack call; `#name`
134
+ entries are resolved once per pod with the bot token and need the
135
+ `channels:read` scope.
136
+
130
137
  ## Control who can message
131
138
 
132
139
  By default, people outside your workspace get no reply. This matters
@@ -3,11 +3,11 @@ title: "Agent config"
3
3
  description: "defineAgent at agent/agent.ts: the model, the local and cloud runtimes, and serving programmatically."
4
4
  ---
5
5
 
6
- # Agent config (`agent/agent.ts`)
6
+ # Agent config
7
7
 
8
- `agent/agent.ts` default-exports `defineAgent(config)`: which model runs
9
- the agent, where turns execute, and runtime-specific defaults.
10
- Everything is optional on the root agent.
8
+ `agent/agent.ts` default-exports `defineAgent(config)`, which sets the
9
+ model, execution runtime, and runtime-specific defaults. Every root
10
+ config field is optional.
11
11
 
12
12
  ```ts
13
13
  import { defineAgent } from "@cursor/july";
@@ -27,9 +27,7 @@ export default defineAgent({
27
27
  });
28
28
  ```
29
29
 
30
- ## Fields on `defineAgent`
31
-
32
- `defineAgent` accepts these fields.
30
+ ## Agent fields
33
31
 
34
32
  | Field | Type | Meaning |
35
33
  | --- | --- | --- |
@@ -38,14 +36,14 @@ export default defineAgent({
38
36
  | `description` | string | What the agent is for. Required on subagents; the parent model reads it to decide when to delegate. Documentation-only on the root. |
39
37
  | `instructions` | string | Inline instructions. Prefer `instructions.md`; this exists for subagents and generated configs. |
40
38
  | `runtime` | `"local"` or `"cloud"` | Where turns execute. Default `"local"`. |
41
- | `cloud` | object | Cloud agent defaults: repos, env, envVars, forwarded to the Cursor SDK. Used when `runtime` is `"cloud"`, and as the base merged under per-session `cloud` send options. |
39
+ | `cloud` | object | Cloud agent defaults: repos, env, envVars. Used when `runtime` is `"cloud"`, and as the base merged under per-session `cloud` send options. |
42
40
  | `local` | `{ cwd?, workspaceDir?, sandbox? }` | Local harness defaults; ignored for cloud turns. See [Local options](#local-options). |
43
- | `hosting` | `{ egressDomains?, secretNames? }` | Managed-hosting declarations read by `agent-sdk deploy`: the pod's egress allowlist and the secret names the agent expects. Ignored by local serving. |
44
- | `concurrency` | `{ maxRunningTurns? }` | Engine-wide turn admission limit. See [Concurrency](#concurrency). |
41
+ | `hosting` | `{ egressDomains?, secretNames? }` | `agent-sdk deploy` declarations for allowed egress domains and expected secret names. Ignored by local serving. |
42
+ | `concurrency` | `{ maxRunningTurns? }` | Agent-wide turn admission limit. See [Concurrency](#concurrency). |
45
43
  | `builtinTools` | `{ reminders? }` | Framework-provided model-facing tools, opted in per capability. See [Built-in tools](#built-in-tools). |
46
- | `tools` | `ToolName[]` | Allowlist of built-in harness tools offered to the model. Unset = the model's full standard toolset. See [Allowlist built-in harness tools](#allowlist-built-in-harness-tools). |
44
+ | `tools` | `ToolName[]` | Allowlist of built-in harness tools offered to the model. Unset = the model's full standard toolset. See [Harness tools](#harness-tools). |
47
45
 
48
- ## Choose a model
46
+ ## Model
49
47
 
50
48
  `model` is a Cursor model id string, or `{ id, params }`. Effort and
51
49
  speed are params, not id suffixes. The SDK rejects suffix-style ids
@@ -67,24 +65,17 @@ A plain string works when you don't need params:
67
65
  model: "composer-2.5",
68
66
  ```
69
67
 
70
- ## Choose a runtime
68
+ ## Runtime
71
69
 
72
- `runtime: "local"` (the default) runs turns on the Cursor SDK harness on
73
- this machine. Server tools, skills, sandbox seeds, and tool approvals
74
- all apply.
70
+ `runtime: "local"` (the default) runs turns on this machine. Server
71
+ tools, skills, sandbox seeds, and tool approvals all apply.
75
72
 
76
- `runtime: "cloud"` runs turns on Cursor cloud agents (`bc-…` ids). Pass
77
- a `cloud` block with the repos the VM carries. Server tools stay
78
- reachable over authenticated HTTP MCP back to the serve host when
79
- `--public-url` or `--cloud-tools-url` is set (omitted with a warning
80
- otherwise), and instructions and agent-tool catalogs are prepended to
81
- the first prompt, because the local session workspace is not the cloud
82
- VM.
73
+ `runtime: "cloud"` runs turns on Cursor cloud agents. Pass a `cloud`
74
+ block with the repositories the VM needs. See [Tools](./tools.md) for
75
+ server- and agent-tool behavior on cloud turns.
83
76
 
84
- `validate` warns when `runtime: "cloud"` is combined with agent tools
85
- (they are described on the first prompt instead of written to the VM),
86
- when skills or sandbox seeds are present (they sync onto an Agent Store
87
- rather than the session workspace), and when the `cloud` block is
77
+ `validate` warns when `runtime: "cloud"` is combined with agent tools,
78
+ when skills or sandbox seeds are present, and when the `cloud` block is
88
79
  missing.
89
80
 
90
81
  ## Local options
@@ -93,18 +84,15 @@ missing.
93
84
 
94
85
  `local.workspaceDir` points every session at one shared harness cwd,
95
86
  for agents that work inside an existing checkout. It takes precedence
96
- over `cwd`, and a per-send `workspaceDir` still wins over both. The SDK
97
- keys its local executor (rules, skills, MCP, ignore mappings) on the
98
- harness cwd, so a shared directory resolves the workspace once per
99
- serve process instead of once per session. The trade: sessions share a
100
- working tree, so a file one turn writes is visible to the next.
87
+ over `cwd`, and a per-send `workspaceDir` still wins over both.
88
+ Sessions share a working tree, so a file one turn writes is visible to
89
+ the next.
101
90
 
102
91
  `local.sandbox` runs the harness inside Cursor's local sandbox. It's
103
- off by default, matching the SDK: shell then auto-approves and inherits
104
- the serve process environment, including any credentials the host
105
- holds. Turn it on for agents whose turns read untrusted input (webhook
106
- payloads, PR diffs, inbound chat); it's a real tool boundary rather
107
- than a prompt-level one.
92
+ off by default: shell then auto-approves and inherits the serve process
93
+ environment, including any credentials the host holds. Turn it on for
94
+ agents whose turns read untrusted input (webhook payloads, PR diffs,
95
+ inbound chat); it's a tool boundary, not a prompt-level one.
108
96
 
109
97
  ### Local cwd
110
98
 
@@ -120,13 +108,12 @@ does not leak rules, skills, or MCP servers into the turn. A standalone git
120
108
  root keeps the in-project session workspace. Point `cwd` at a checkout only
121
109
  when the agent should inherit that tree.
122
110
 
123
- ## Allowlist built-in harness tools
111
+ ## Harness tools
124
112
 
125
113
  Use `tools` to limit which built-in Cursor harness tools the model can
126
114
  call. Omit it to keep the standard toolset. When you set it, the model
127
115
  gets only the tools you list. An empty list disables all native
128
- built-in tools. Because this field is an allowlist, new platform tools
129
- stay disabled until you add them.
116
+ built-in tools. New platform tools stay disabled until you add them.
130
117
 
131
118
  ```ts
132
119
  export default defineAgent({
@@ -137,12 +124,13 @@ export default defineAgent({
137
124
  });
138
125
  ```
139
126
 
140
- The Agent SDK always adds `"mcp"` to a configured allowlist. Authored
141
- server tools in `agent/tools/` use MCP to reach the model. MCP can also
142
- expose declared connections and servers from the harness directory's
143
- ambient `.cursor` config. To exclude a checkout's MCP servers, point
144
- `local.cwd` outside the checkout. See [Local cwd](#local-cwd).
145
- `local.sandbox` makes MCP tool calls fail closed.
127
+ The Agent SDK always adds `"mcp"` to a configured allowlist, because
128
+ authored server tools in `agent/tools/` reach the model over MCP. MCP
129
+ can also expose declared connections and servers from the harness
130
+ directory's ambient `.cursor` config. To exclude a checkout's MCP
131
+ servers, point `local.cwd` outside the checkout. See
132
+ [Local cwd](#local-cwd). `local.sandbox` makes MCP tool calls fail
133
+ closed.
146
134
 
147
135
  Use the SDK's public tool names, including `"shell"`, `"read"`,
148
136
  `"edit"`, `"grep"`, `"glob"`, `"ls"`, and `"task"`. Unknown names
@@ -159,8 +147,7 @@ Two names have broader effects:
159
147
  Tool allowlists work only with the local runtime. A
160
148
  `runtime: "cloud"` agent that sets `tools` fails at serve startup.
161
149
  The Agent SDK also refuses per-send cloud sessions from a hybrid agent
162
- with an allowlist. It won't run those sessions with unrestricted tool
163
- access.
150
+ with an allowlist.
164
151
 
165
152
  The allowlist controls which tools the model can call. It does not
166
153
  isolate the serve host. For agents that process untrusted input, also
@@ -168,10 +155,10 @@ set `local: { sandbox: true }`.
168
155
 
169
156
  ## Cloud options
170
157
 
171
- Cloud agent defaults forwarded to the Cursor SDK: `repos` (each
172
- `{ url, startingRef? }`), environment selection, `envVars`, and the
173
- rest. A local agent uses the same block as the base config when a
174
- channel opens a cloud-attached session per send (the `cloud` option on
158
+ The `cloud` block sets default repositories (each
159
+ `{ url, startingRef? }`), environment selection, and `envVars`. A local
160
+ agent uses the same block as the base config when a channel opens a
161
+ cloud-attached session per send (the `cloud` option on
175
162
  [`send`](./channels.md#handler-arguments)).
176
163
 
177
164
  ## Concurrency
@@ -194,9 +181,8 @@ export default defineAgent({
194
181
  ## Built-in tools
195
182
 
196
183
  `builtinTools` opts into framework-provided model-facing tools. Each
197
- enabled capability materializes as ordinary server tools at discovery
198
- time, so turns, direct calls, `info`, and the playground treat them
199
- like authored tools. Authored tools with the same name win, with a
184
+ enabled capability shows up as ordinary server tools, so turns, direct
185
+ calls, `info`, and the playground treat them like authored tools. Authored tools with the same name win, with a
200
186
  warning, and like all server tools they run on the local runtime.
201
187
 
202
188
  `builtinTools: { reminders: true }` adds three tools bound to the
@@ -205,22 +191,6 @@ current conversation over `host.reminders`: `reminders_create`,
205
191
  continuation key can't arm reminders. See
206
192
  [Schedules and reminders](./schedules.md#reminders).
207
193
 
208
- ## Generate instructions
209
-
210
- When the system prompt must be computed, author `agent/instructions.ts`
211
- instead of markdown:
212
-
213
- ```ts
214
- import { defineInstructions } from "@cursor/july";
215
-
216
- export default defineInstructions({
217
- markdown: `You are the on-call assistant for ${process.env.TEAM_NAME}.`,
218
- });
219
- ```
220
-
221
- The directory form and the runtime mapping are in
222
- [Instructions](./instructions.md).
223
-
224
194
  ## Serve programmatically
225
195
 
226
196
  `serve(dirOrProject, options)` embeds the server in your own process:
@@ -230,7 +200,7 @@ import { serve } from "@cursor/july";
230
200
 
231
201
  const handle = await serve("./my-agent", {
232
202
  port: 3000,
233
- apiKey: process.env.CURSOR_API_KEY, // optional; see credential order
203
+ apiKey: process.env.CURSOR_API_KEY,
234
204
  });
235
205
  console.log(`listening on ${handle.url}`);
236
206
  // handle.callTool(...), handle.dispatchSchedule("heartbeat"),
@@ -239,17 +209,14 @@ console.log(`listening on ${handle.url}`);
239
209
 
240
210
  Host settings match the documented [CLI](./cli.md) `serve` flags.
241
211
  `serve()` also accepts `discovery` (project-loading options) and
242
- `mode: "single" | "multi"`. The Cursor credential resolves in one order
243
- everywhere: explicit `apiKey`, then `CURSOR_API_KEY`, then
244
- `CURSOR_API_KEY_FILE` (hosted default `/run/cursor/secrets/CURSOR_API_KEY`
245
- when unset), then `CURSOR_SERVICE_ACCOUNT_KEY`, then the key stored by
246
- `agent-sdk login`. On a host that has both the service-account key and a
247
- bind file, the file principal wins.
248
-
249
- ## What's next
212
+ `mode: "single" | "multi"`. Pass `apiKey` or use the same Cursor
213
+ credential as the CLI: `CURSOR_API_KEY`, `CURSOR_API_KEY_FILE`,
214
+ `CURSOR_SERVICE_ACCOUNT_KEY`, or `agent-sdk login`.
250
215
 
251
- Continue with these pages:
216
+ ## Related
252
217
 
253
218
  - [Instructions](./instructions.md): the required half of a minimal
254
219
  agent
255
220
  - [CLI](./cli.md): the `serve` flags `serve()` accepts
221
+ - [Sessions](./sessions.md): workspaces, identifiers, and turn admission
222
+ - [Schedules](./schedules.md): reminder tools opted in here
@@ -1,17 +1,16 @@
1
1
  ---
2
2
  title: "Artifacts"
3
- description: "Tag durable outputs (reviewed PRs, reports) so they persist across sessions, stream as events, and list over HTTP."
3
+ description: "Declare, tag, list, stream, and download durable agent outputs."
4
4
  ---
5
5
 
6
6
  # Artifacts
7
7
 
8
- An artifact marks a durable output the agent produced: a reviewed PR
9
- URL, a generated report, a decision record. Sessions come and go;
10
- artifacts persist across them, capped and listable, so the people
11
- supervising an agent see what it shipped without replaying event
12
- streams.
8
+ Artifacts are durable outputs such as reviewed pull requests, reports,
9
+ or decision records. An artifact kind defines the data it accepts, and
10
+ the artifacts API tags or updates records by key. Records persist across
11
+ sessions and can be listed, streamed, or downloaded.
13
12
 
14
- ## Declare kinds
13
+ ## Artifact kinds
15
14
 
16
15
  Author `agent/artifacts.ts` with `defineArtifacts` from
17
16
  `@cursor/july/artifacts`:
@@ -32,26 +31,21 @@ export default defineArtifacts({
32
31
  });
33
32
  ```
34
33
 
35
- `defineArtifacts` accepts three fields. `kinds` declares the artifact
36
- kinds: with kinds declared, `tag` accepts only these; with none, any
37
- kind string is accepted freeform. Each kind's `description` says what it
38
- holds and doubles as the model-facing prompt for `tag_artifact`. An
39
- optional Zod `schema` validates payloads before they persist (the parsed
40
- output is stored, so defaults and coercions apply). `agentTool` exposes
41
- the model-facing `tag_artifact` tool generated from the kinds registry;
42
- it requires at least one declared kind. `max` is the retention cap,
43
- default 1000: on insert past the cap, the oldest-updated artifact is
44
- evicted.
45
-
46
- ## Tag from host code
47
-
48
- Every handler surface carries `ctx.artifacts` (or `args.artifacts`),
49
- an `ArtifactsApi` with `tag` and `list`: tools, hooks, channel route
50
- handlers and `onStart`, schedule `run` handlers, and reminder `run`
51
- handlers. Tool and hook facades are session-bound, so `tag` auto-fills
52
- the `sessionId` (and `turnId` when known). Channel, schedule, and
53
- reminder facades are unbound; pass `sessionId` in the tag input to
54
- attribute one.
34
+ | Option | Contract |
35
+ | --- | --- |
36
+ | `kinds` | Map of accepted kind names to a non-empty `description` and optional Zod `schema` |
37
+ | `agentTool` | Expose `tag_artifact` to the model; requires at least one declared kind |
38
+ | `max` | Positive retention cap; defaults to `1000` and evicts the oldest-updated record |
39
+
40
+ With declared kinds, `tag` rejects any other kind. With no registry, it
41
+ accepts free-form kind names and defaults an omitted kind to
42
+ `"artifact"`. A kind's schema validates `data`, and the parsed value is
43
+ stored, including schema defaults and coercions.
44
+
45
+ ## Tag artifacts from host code
46
+
47
+ Tools, hooks, channel handlers, channel `onStart`, schedules, and
48
+ reminders receive an `ArtifactsApi` with `tag` and `list`.
55
49
 
56
50
  ```ts
57
51
  await ctx.artifacts.tag({
@@ -62,56 +56,63 @@ await ctx.artifacts.tag({
62
56
  });
63
57
  ```
64
58
 
65
- `key` is the upsert handle: tagging the same key again replaces the
66
- record instead of creating a new one, so re-reviewing a PR updates one
67
- row. A `contents` payload (string or bytes, with an optional
68
- `contentType`) attaches a file or blob served at
69
- `GET /v1/artifacts/:id/content`; re-tagging a keyed artifact without
70
- `contents` keeps the existing payload.
71
-
72
- ## Let the model tag
59
+ | Tag field | Contract |
60
+ | --- | --- |
61
+ | `data` | Required JSON data, validated when the kind has a schema |
62
+ | `kind` | Declared or free-form kind |
63
+ | `key` | Agent-wide upsert key; the same key updates one record across kinds |
64
+ | `title` | Optional display title |
65
+ | `contents` | String or bytes served by the content route |
66
+ | `contentType` | MIME type for `contents` |
67
+ | `sessionId`, `turnId` | Attribute the artifact to a session or turn |
68
+ | `source` | `"host"` or `"model"`; defaults to `"host"` |
69
+
70
+ Tool, hook, result, and channel-event contexts are session-bound, so
71
+ they fill `sessionId` and the current `turnId`. Channel routes,
72
+ `onStart`, schedules, and reminders receive an unbound facade; pass
73
+ `sessionId` to attribute an artifact.
74
+
75
+ Re-tagging a key without `contents` keeps its file or blob when the
76
+ `sessionId` stays the same. Rebinding the key to another session without
77
+ new contents removes the previous payload. `tag` returns the stored
78
+ `ArtifactRecord`.
79
+
80
+ | Record field | Contract |
81
+ | --- | --- |
82
+ | `id` | Stable ID derived from `key`, or a generated ID when no key is set |
83
+ | `kind`, `data` | Validated kind and JSON payload |
84
+ | `key`, `title` | Optional upsert key and display title |
85
+ | `content` | Optional `{ size, contentType? }` metadata |
86
+ | `sessionId`, `turnId` | Optional session attribution |
87
+ | `source` | `"host"` or `"model"` |
88
+ | `createdAt`, `updatedAt` | ISO-8601 timestamps |
89
+
90
+ ## Expose `tag_artifact` to the model
73
91
 
74
92
  With `agentTool: true`, the `tag_artifact` server tool materializes from
75
- the kinds registry. Its description tells the model to tag notable
76
- outputs and lists each kind with its description, and its input schema
77
- is a discriminated union over the declared kinds, so a schema'd kind is
78
- validated exactly like a host-side tag. An authored tool named
79
- `tag_artifact` shadows the built-in, with a warning.
80
-
81
- ## Observe and list
93
+ the kinds registry. Its input accepts the declared kinds and validates
94
+ their data with the same schemas as host-side tagging. The kind
95
+ descriptions tell the model which output each one represents.
82
96
 
83
- Tagging emits an `artifact.tagged` event on the attributed session's
84
- stream, carrying the record: `id`, `kind`, `key`, `title`, `data`, and
85
- `source` (`"host"` for host code, `"model"` for `tag_artifact`). Hooks,
86
- channel `events`, and evals see it like any other
87
- [stream event](./sessions.md#which-events-can-i-stream).
97
+ An authored tool named `tag_artifact` takes precedence over the generated
98
+ tool.
88
99
 
89
- Over HTTP:
100
+ ## List artifacts
90
101
 
91
- ```bash
92
- curl 'http://127.0.0.1:3000/<slug>/v1/artifacts?kind=reviewed-pr&limit=20'
93
- curl 'http://127.0.0.1:3000/<slug>/v1/artifacts/<id>/content'
94
- ```
102
+ `list({ kind?, sessionId? })` returns matching records newest-updated
103
+ first. HTTP callers can list records and download content through the
104
+ [artifact routes](./http-api.md#list-and-download-artifacts).
95
105
 
96
- `GET /v1/artifacts` returns records newest-updated first, filterable by
97
- `kind` and `sessionId`. Session ownership applies, same as
98
- `/v1/sessions`. The playground renders tagged artifacts too.
99
-
100
- ## Gate evals on tagging
101
-
102
- `t.taggedArtifact(kind?, predicate?)` gates an eval on at least one
103
- artifact tagged during the test turn, optionally of one kind and
104
- matching a predicate over the record:
105
-
106
- ```ts
107
- t.taggedArtifact("reviewed-pr", (record) => record.source === "model");
108
- ```
106
+ ## Stream artifact tags
109
107
 
110
- ## What's next
108
+ Tagging an artifact with a `sessionId` emits `artifact.tagged` on that
109
+ session. Its event data contains `id`, `kind`, `key`, `title`, `data`,
110
+ and `source`. See [Stream events](./sessions.md#stream-events) for the
111
+ event envelope.
111
112
 
112
- Continue with these pages:
113
+ ## Related
113
114
 
114
- - [Sessions and streaming](./sessions.md): the `artifact.tagged` event
115
- in the full vocabulary
116
- - [Tools](./tools.md): the `ctx` that carries `artifacts`
117
- - [Evals](../evals.md): the assertions `taggedArtifact` sits beside
115
+ - [Sessions](./sessions.md)
116
+ - [Tools](./tools.md)
117
+ - [Evals](./evals.md)
118
+ - [HTTP API](./http-api.md)