@cursor/july 0.1.111 → 0.1.113

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 (441) hide show
  1. package/README.md +4 -0
  2. package/dist/bin/agent-serve.js +20 -4
  3. package/dist/channels/checks.d.ts +10 -0
  4. package/dist/channels/checks.d.ts.map +1 -1
  5. package/dist/channels/github/github-channel.d.ts +29 -19
  6. package/dist/channels/github/github-channel.d.ts.map +1 -1
  7. package/dist/channels/github/github-channel.js +29 -19
  8. package/dist/channels/origin/checks.d.ts +1 -1
  9. package/dist/channels/origin/checks.d.ts.map +1 -1
  10. package/dist/channels/slack/agentic-delivery.d.ts.map +1 -1
  11. package/dist/channels/slack/agentic-delivery.js +2 -0
  12. package/dist/channels/slack/dispatch.d.ts +11 -1
  13. package/dist/channels/slack/dispatch.d.ts.map +1 -1
  14. package/dist/channels/slack/dispatch.js +146 -39
  15. package/dist/channels/slack/placeholder.d.ts +26 -0
  16. package/dist/channels/slack/placeholder.d.ts.map +1 -1
  17. package/dist/channels/slack/placeholder.js +28 -0
  18. package/dist/channels/slack/slack-channel.d.ts.map +1 -1
  19. package/dist/channels/slack/slack-channel.js +9 -16
  20. package/dist/docs/404.html +2 -2
  21. package/dist/docs/assets/{app.Drol6mi6.js → app.CAeK13eM.js} +4 -4
  22. package/dist/docs/assets/building-with-agents.md.BBCx0AUo.js +9 -0
  23. package/dist/docs/assets/building-with-agents.md.BBCx0AUo.lean.js +1 -0
  24. package/dist/docs/assets/chunks/@localSearchIndexroot.Ck9E52Ls.js +1 -0
  25. package/dist/docs/assets/chunks/{VPLocalSearchBox.CdqoBZJX.js → VPLocalSearchBox.C9LbPHod.js} +1 -1
  26. package/dist/docs/assets/chunks/{arc.BVX3ycTn.js → arc.CmMq2zmS.js} +1 -1
  27. package/dist/docs/assets/chunks/{architectureDiagram-Q4EWVU46.CcChnMxX.js → architectureDiagram-Q4EWVU46.CCXB8Uj5.js} +1 -1
  28. package/dist/docs/assets/chunks/{baseUniq.xwtXO-yt.js → baseUniq.CyQo6eLe.js} +1 -1
  29. package/dist/docs/assets/chunks/{blockDiagram-DXYQGD6D.CijZ_taK.js → blockDiagram-DXYQGD6D.JYq6w91N.js} +1 -1
  30. package/dist/docs/assets/chunks/{c4Diagram-AHTNJAMY.0FBvwBvK.js → c4Diagram-AHTNJAMY.BRV8GPJJ.js} +1 -1
  31. package/dist/docs/assets/chunks/channel.BHiYmnZ4.js +1 -0
  32. package/dist/docs/assets/chunks/{chunk-4BX2VUAB.CELMmMDA.js → chunk-4BX2VUAB.Bv4ooYQR.js} +1 -1
  33. package/dist/docs/assets/chunks/{chunk-4TB4RGXK.C4bhFtSm.js → chunk-4TB4RGXK.t4JtKPcj.js} +1 -1
  34. package/dist/docs/assets/chunks/{chunk-55IACEB6.ZnQ9gRRQ.js → chunk-55IACEB6.34lCHj9Y.js} +1 -1
  35. package/dist/docs/assets/chunks/{chunk-EDXVE4YY.DPlmglG-.js → chunk-EDXVE4YY.BSwrPNrt.js} +1 -1
  36. package/dist/docs/assets/chunks/{chunk-FMBD7UC4.BrUk8pff.js → chunk-FMBD7UC4.Beeun-R-.js} +1 -1
  37. package/dist/docs/assets/chunks/{chunk-OYMX7WX6.CcmWIncu.js → chunk-OYMX7WX6.BUUFUcJc.js} +1 -1
  38. package/dist/docs/assets/chunks/{chunk-QZHKN3VN.D65-cs8I.js → chunk-QZHKN3VN.B2XjHzN_.js} +1 -1
  39. package/dist/docs/assets/chunks/{chunk-YZCP3GAM.qoXZpG9F.js → chunk-YZCP3GAM.CLYG8znk.js} +1 -1
  40. package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.Degh8l90.js +1 -0
  41. package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.Degh8l90.js +1 -0
  42. package/dist/docs/assets/chunks/clone.BIywbczV.js +1 -0
  43. package/dist/docs/assets/chunks/{cose-bilkent-S5V4N54A.8rYtqudO.js → cose-bilkent-S5V4N54A.DVEa6fZp.js} +1 -1
  44. package/dist/docs/assets/chunks/{dagre-KV5264BT.DrRP1fOh.js → dagre-KV5264BT.C9PZQK-S.js} +1 -1
  45. package/dist/docs/assets/chunks/{diagram-5BDNPKRD.DHj_xA2_.js → diagram-5BDNPKRD.DoN0uv3Y.js} +1 -1
  46. package/dist/docs/assets/chunks/{diagram-G4DWMVQ6.Bz_6nAKj.js → diagram-G4DWMVQ6.Czv3duqx.js} +1 -1
  47. package/dist/docs/assets/chunks/{diagram-MMDJMWI5.BWA0xSW9.js → diagram-MMDJMWI5.BinJ5kWb.js} +1 -1
  48. package/dist/docs/assets/chunks/{diagram-TYMM5635.CpTJLNJI.js → diagram-TYMM5635.DW326M4K.js} +1 -1
  49. package/dist/docs/assets/chunks/{erDiagram-SMLLAGMA.-7AWWSrP.js → erDiagram-SMLLAGMA.U2pR_OA7.js} +1 -1
  50. package/dist/docs/assets/chunks/{flowDiagram-DWJPFMVM.BTnQ742_.js → flowDiagram-DWJPFMVM.ByWJXeYK.js} +1 -1
  51. package/dist/docs/assets/chunks/framework.BNw1pucY.js +19 -0
  52. package/dist/docs/assets/chunks/{ganttDiagram-T4ZO3ILL.B5_HiiQ5.js → ganttDiagram-T4ZO3ILL.OquF0Rtg.js} +1 -1
  53. package/dist/docs/assets/chunks/{gitGraphDiagram-UUTBAWPF.CZcNTFZd.js → gitGraphDiagram-UUTBAWPF.Bpn01P7X.js} +1 -1
  54. package/dist/docs/assets/chunks/{graph.V2GLaab4.js → graph.CNRB6ETL.js} +1 -1
  55. package/dist/docs/assets/chunks/{infoDiagram-42DDH7IO.7pZOkCCU.js → infoDiagram-42DDH7IO.CqhknMWi.js} +1 -1
  56. package/dist/docs/assets/chunks/{ishikawaDiagram-UXIWVN3A.DSMo3Qa3.js → ishikawaDiagram-UXIWVN3A.C6xpR2af.js} +1 -1
  57. package/dist/docs/assets/chunks/{journeyDiagram-VCZTEJTY.BNEgWN1S.js → journeyDiagram-VCZTEJTY.Cg5f7oB3.js} +1 -1
  58. package/dist/docs/assets/chunks/{kanban-definition-6JOO6SKY.B-4d4tC7.js → kanban-definition-6JOO6SKY.Cx9YTwlU.js} +1 -1
  59. package/dist/docs/assets/chunks/{layout.Dvbn9nSb.js → layout.ljS-wFtK.js} +1 -1
  60. package/dist/docs/assets/chunks/{linear.D2GM4p4b.js → linear.jSxNrsFC.js} +1 -1
  61. package/dist/docs/assets/chunks/{min.DVBtLK-B.js → min.Cum8AlQw.js} +1 -1
  62. package/dist/docs/assets/chunks/{mindmap-definition-QFDTVHPH.CnJRI55x.js → mindmap-definition-QFDTVHPH.BLiysLpe.js} +1 -1
  63. package/dist/docs/assets/chunks/{pieDiagram-DEJITSTG.CtoaTFlA.js → pieDiagram-DEJITSTG.BoIDyuKF.js} +1 -1
  64. package/dist/docs/assets/chunks/{quadrantDiagram-34T5L4WZ.DtT24_vN.js → quadrantDiagram-34T5L4WZ.DLkpDytR.js} +1 -1
  65. package/dist/docs/assets/chunks/{requirementDiagram-MS252O5E.CjSO4o8f.js → requirementDiagram-MS252O5E.DqTVqSu2.js} +1 -1
  66. package/dist/docs/assets/chunks/{sankeyDiagram-XADWPNL6.-wWiIVWa.js → sankeyDiagram-XADWPNL6.CG_6FF7j.js} +1 -1
  67. package/dist/docs/assets/chunks/{sequenceDiagram-FGHM5R23.DSk8s4gX.js → sequenceDiagram-FGHM5R23.BIp9602K.js} +1 -1
  68. package/dist/docs/assets/chunks/{stateDiagram-FHFEXIEX.BFKAsdkN.js → stateDiagram-FHFEXIEX.COSXsD9I.js} +1 -1
  69. package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.qrxrbFsX.js +1 -0
  70. package/dist/docs/assets/chunks/{theme.C0MctGaz.js → theme.CXJ7PNwy.js} +2 -2
  71. package/dist/docs/assets/chunks/{timeline-definition-GMOUNBTQ.TUNJbAFe.js → timeline-definition-GMOUNBTQ.CXdVqkLq.js} +1 -1
  72. package/dist/docs/assets/chunks/{vennDiagram-DHZGUBPP.C-RGNnk4.js → vennDiagram-DHZGUBPP.CZxGuc4r.js} +1 -1
  73. package/dist/docs/assets/chunks/{wardley-RL74JXVD.g5efOWmT.js → wardley-RL74JXVD.3oVgfqQk.js} +1 -1
  74. package/dist/docs/assets/chunks/{wardleyDiagram-NUSXRM2D.DH4zt73Y.js → wardleyDiagram-NUSXRM2D.6_irCgGJ.js} +1 -1
  75. package/dist/docs/assets/chunks/{xychartDiagram-5P7HB3ND.B-3k6bF6.js → xychartDiagram-5P7HB3ND.TRPe92m3.js} +1 -1
  76. package/dist/docs/assets/deployment.md.D2jQZuFx.js +32 -0
  77. package/dist/docs/assets/deployment.md.D2jQZuFx.lean.js +1 -0
  78. package/dist/docs/assets/evals.md.D3Y3Aixt.js +72 -0
  79. package/dist/docs/assets/evals.md.D3Y3Aixt.lean.js +1 -0
  80. package/dist/docs/assets/guides_agent-to-agent.md.CD4T5FIl.js +41 -0
  81. package/dist/docs/assets/guides_agent-to-agent.md.CD4T5FIl.lean.js +1 -0
  82. package/dist/docs/assets/guides_bitbucket.md.mpevW-VP.js +145 -0
  83. package/dist/docs/assets/guides_bitbucket.md.mpevW-VP.lean.js +1 -0
  84. package/dist/docs/assets/guides_cloud-agents.md.Cp1O3u-X.js +15 -0
  85. package/dist/docs/assets/guides_cloud-agents.md.Cp1O3u-X.lean.js +1 -0
  86. package/dist/docs/assets/guides_convert-automation.md.CqEyfP6Y.js +43 -0
  87. package/dist/docs/assets/guides_convert-automation.md.CqEyfP6Y.lean.js +1 -0
  88. package/dist/docs/assets/guides_github.md.BwpBp3ed.js +156 -0
  89. package/dist/docs/assets/guides_github.md.BwpBp3ed.lean.js +1 -0
  90. package/dist/docs/assets/guides_gitlab.md.DaEC3nMk.js +153 -0
  91. package/dist/docs/assets/guides_gitlab.md.DaEC3nMk.lean.js +1 -0
  92. package/dist/docs/assets/guides_grokbot-agents.md.CMhZNdEU.js +16 -0
  93. package/dist/docs/assets/guides_grokbot-agents.md.CMhZNdEU.lean.js +1 -0
  94. package/dist/docs/assets/guides_improve.md.Bnp4F99w.js +22 -0
  95. package/dist/docs/assets/guides_improve.md.Bnp4F99w.lean.js +1 -0
  96. package/dist/docs/assets/guides_jev.md.F5fAkkfN.js +189 -0
  97. package/dist/docs/assets/guides_jev.md.F5fAkkfN.lean.js +1 -0
  98. package/dist/docs/assets/guides_mcp-oauth.md.bSFakfCY.js +50 -0
  99. package/dist/docs/assets/guides_mcp-oauth.md.bSFakfCY.lean.js +1 -0
  100. package/dist/docs/assets/guides_opentelemetry.md.BKDxQmmd.js +35 -0
  101. package/dist/docs/assets/guides_opentelemetry.md.BKDxQmmd.lean.js +1 -0
  102. package/dist/docs/assets/guides_slack.md.Bo96y42E.js +70 -0
  103. package/dist/docs/assets/guides_slack.md.Bo96y42E.lean.js +1 -0
  104. package/dist/docs/assets/guides_webhooks.md.1A72_VEE.js +92 -0
  105. package/dist/docs/assets/guides_webhooks.md.1A72_VEE.lean.js +1 -0
  106. package/dist/docs/assets/hillclimbing.md.D4E1o5Sa.js +7 -0
  107. package/dist/docs/assets/hillclimbing.md.D4E1o5Sa.lean.js +1 -0
  108. package/dist/docs/assets/{index.md.BFVyY2KT.js → index.md.C-t81M5J.js} +2 -2
  109. package/dist/docs/assets/{index.md.BFVyY2KT.lean.js → index.md.C-t81M5J.lean.js} +1 -1
  110. package/dist/docs/assets/{quickstart.md.D3MjSZN-.js → quickstart.md.DAvVhuuU.js} +1 -1
  111. package/dist/docs/assets/{quickstart.md.D3MjSZN-.lean.js → quickstart.md.DAvVhuuU.lean.js} +1 -1
  112. package/dist/docs/assets/{reference_agent-config.md.CfVA-LZJ.js → reference_agent-config.md.DGPyw7ms.js} +1 -1
  113. package/dist/docs/assets/{reference_agent-config.md.CfVA-LZJ.lean.js → reference_agent-config.md.DGPyw7ms.lean.js} +1 -1
  114. package/dist/docs/assets/{reference_artifacts.md.Vf7qyIZ-.js → reference_artifacts.md.Bu_4HmsD.js} +1 -1
  115. package/dist/docs/assets/{reference_artifacts.md.Vf7qyIZ-.lean.js → reference_artifacts.md.Bu_4HmsD.lean.js} +1 -1
  116. package/dist/docs/assets/{reference_channels.md.icqLKcTc.js → reference_channels.md.nFWbzAic.js} +1 -1
  117. package/dist/docs/assets/{reference_channels.md.icqLKcTc.lean.js → reference_channels.md.nFWbzAic.lean.js} +1 -1
  118. package/dist/docs/assets/{reference_cli.md.B2dBL6L8.js → reference_cli.md.DLWDz9ij.js} +3 -1
  119. package/dist/docs/assets/{reference_cli.md.B2dBL6L8.lean.js → reference_cli.md.DLWDz9ij.lean.js} +1 -1
  120. package/dist/docs/assets/{reference_connections.md.Cb3U_c8n.js → reference_connections.md.Je9dMsdd.js} +2 -2
  121. package/dist/docs/assets/{reference_connections.md.Cb3U_c8n.lean.js → reference_connections.md.Je9dMsdd.lean.js} +1 -1
  122. package/dist/docs/assets/reference_evals.md.DNJzM_yf.js +57 -0
  123. package/dist/docs/assets/reference_evals.md.DNJzM_yf.lean.js +1 -0
  124. package/dist/docs/assets/reference_extensions.md.Cv5aLCz_.js +58 -0
  125. package/dist/docs/assets/reference_extensions.md.Cv5aLCz_.lean.js +1 -0
  126. package/dist/docs/assets/{reference_hooks.md.CZuynAxj.js → reference_hooks.md.B7uzNENk.js} +2 -2
  127. package/dist/docs/assets/{reference_hooks.md.CZuynAxj.lean.js → reference_hooks.md.B7uzNENk.lean.js} +1 -1
  128. package/dist/docs/assets/{reference_http-api.md.DTKcYE6L.js → reference_http-api.md.CduHavZ2.js} +1 -1
  129. package/dist/docs/assets/{reference_http-api.md.DTKcYE6L.lean.js → reference_http-api.md.CduHavZ2.lean.js} +1 -1
  130. package/dist/docs/assets/{reference_instructions.md.D7gkckK-.js → reference_instructions.md.CU1My5My.js} +1 -1
  131. package/dist/docs/assets/{reference_instructions.md.D7gkckK-.lean.js → reference_instructions.md.CU1My5My.lean.js} +1 -1
  132. package/dist/docs/assets/{reference_playground.md.D2YExv5K.js → reference_playground.md.Ch2d0Iqi.js} +1 -1
  133. package/dist/docs/assets/{reference_playground.md.D2YExv5K.lean.js → reference_playground.md.Ch2d0Iqi.lean.js} +1 -1
  134. package/dist/docs/assets/{reference_project-layout.md.DPxbUJyt.js → reference_project-layout.md.BGhgpy9V.js} +1 -1
  135. package/dist/docs/assets/{reference_project-layout.md.DPxbUJyt.lean.js → reference_project-layout.md.BGhgpy9V.lean.js} +1 -1
  136. package/dist/docs/assets/{reference_prompt.md.BQ5uAv1F.js → reference_prompt.md.Ccp0R53H.js} +1 -1
  137. package/dist/docs/assets/{reference_prompt.md.BQ5uAv1F.lean.js → reference_prompt.md.Ccp0R53H.lean.js} +1 -1
  138. package/dist/docs/assets/{reference_schedules.md.BasfZWO-.js → reference_schedules.md.B2Nm6FaD.js} +1 -1
  139. package/dist/docs/assets/{reference_schedules.md.BasfZWO-.lean.js → reference_schedules.md.B2Nm6FaD.lean.js} +1 -1
  140. package/dist/docs/assets/{reference_sessions.md.YKvIsWAx.js → reference_sessions.md.1_6Vyv7x.js} +1 -1
  141. package/dist/docs/assets/{reference_sessions.md.YKvIsWAx.lean.js → reference_sessions.md.1_6Vyv7x.lean.js} +1 -1
  142. package/dist/docs/assets/{reference_skills.md.rNgpsGd0.js → reference_skills.md.DjQkRefx.js} +1 -1
  143. package/dist/docs/assets/{reference_skills.md.rNgpsGd0.lean.js → reference_skills.md.DjQkRefx.lean.js} +1 -1
  144. package/dist/docs/assets/{reference_subagents.md.e5qitjJt.js → reference_subagents.md.Dl16gcBj.js} +2 -2
  145. package/dist/docs/assets/{reference_subagents.md.e5qitjJt.lean.js → reference_subagents.md.Dl16gcBj.lean.js} +1 -1
  146. package/dist/docs/assets/{reference_tools.md.BdCO2aHZ.js → reference_tools.md.B1dH1lpa.js} +3 -3
  147. package/dist/docs/assets/{reference_tools.md.BdCO2aHZ.lean.js → reference_tools.md.B1dH1lpa.lean.js} +1 -1
  148. package/dist/docs/assets/{templates_agentic-owners.md.Da_AGDlH.js → templates_agentic-owners.md.9M575F5C.js} +1 -1
  149. package/dist/docs/assets/{templates_agentic-owners.md.Da_AGDlH.lean.js → templates_agentic-owners.md.9M575F5C.lean.js} +1 -1
  150. package/dist/docs/assets/{templates_pr-autofixer.md.DqxocIGh.js → templates_pr-autofixer.md.ws0DDXDy.js} +1 -1
  151. package/dist/docs/assets/{templates_pr-autofixer.md.DqxocIGh.lean.js → templates_pr-autofixer.md.ws0DDXDy.lean.js} +1 -1
  152. package/dist/docs/assets/{templates_security-reviewer.md.Bhnvd8VE.js → templates_security-reviewer.md.KEFYXzfK.js} +1 -1
  153. package/dist/docs/assets/{templates_security-reviewer.md.Bhnvd8VE.lean.js → templates_security-reviewer.md.KEFYXzfK.lean.js} +1 -1
  154. package/dist/docs/assets/templates_thermo-quality-review.md.VNJ_mohX.js +3 -0
  155. package/dist/docs/assets/templates_thermo-quality-review.md.VNJ_mohX.lean.js +1 -0
  156. package/dist/docs/assets/templates_thermo-review.md.Hi3zWOkP.js +3 -0
  157. package/dist/docs/assets/templates_thermo-review.md.Hi3zWOkP.lean.js +1 -0
  158. package/dist/docs/assets/{templates_triage.md.BdBWO9Ic.js → templates_triage.md.CVGe_FG6.js} +1 -1
  159. package/dist/docs/assets/{templates_triage.md.BdBWO9Ic.lean.js → templates_triage.md.CVGe_FG6.lean.js} +1 -1
  160. package/dist/docs/assets/troubleshooting.md.mnfFG2Em.js +1 -0
  161. package/dist/docs/assets/troubleshooting.md.mnfFG2Em.lean.js +1 -0
  162. package/dist/docs/building-with-agents.html +44 -48
  163. package/dist/docs/building-with-agents.md +94 -82
  164. package/dist/docs/deployment.html +59 -78
  165. package/dist/docs/deployment.md +117 -363
  166. package/dist/docs/evals.html +85 -224
  167. package/dist/docs/evals.md +149 -673
  168. package/dist/docs/guides/agent-to-agent.html +74 -47
  169. package/dist/docs/guides/agent-to-agent.md +128 -46
  170. package/dist/docs/guides/bitbucket.html +179 -44
  171. package/dist/docs/guides/bitbucket.md +249 -48
  172. package/dist/docs/guides/cloud-agents.html +46 -40
  173. package/dist/docs/guides/cloud-agents.md +119 -66
  174. package/dist/docs/guides/convert-automation.html +80 -49
  175. package/dist/docs/guides/convert-automation.md +156 -147
  176. package/dist/docs/guides/github.html +184 -92
  177. package/dist/docs/guides/github.md +260 -245
  178. package/dist/docs/guides/gitlab.html +184 -45
  179. package/dist/docs/guides/gitlab.md +249 -50
  180. package/dist/docs/guides/grokbot-agents.html +48 -41
  181. package/dist/docs/guides/grokbot-agents.md +99 -53
  182. package/dist/docs/guides/improve.html +48 -40
  183. package/dist/docs/guides/improve.md +111 -58
  184. package/dist/docs/guides/jev.html +248 -0
  185. package/dist/docs/guides/jev.md +348 -0
  186. package/dist/docs/guides/mcp-oauth.html +74 -52
  187. package/dist/docs/guides/mcp-oauth.md +111 -121
  188. package/dist/docs/guides/opentelemetry.html +63 -54
  189. package/dist/docs/guides/opentelemetry.md +96 -165
  190. package/dist/docs/guides/slack.html +83 -59
  191. package/dist/docs/guides/slack.md +157 -227
  192. package/dist/docs/guides/webhooks.html +97 -230
  193. package/dist/docs/guides/webhooks.md +154 -385
  194. package/dist/docs/hashmap.json +1 -1
  195. package/dist/docs/hillclimbing.html +44 -38
  196. package/dist/docs/hillclimbing.md +101 -55
  197. package/dist/docs/index.html +38 -38
  198. package/dist/docs/index.md +2 -0
  199. package/dist/docs/llms-full.txt +3490 -3146
  200. package/dist/docs/llms.txt +22 -18
  201. package/dist/docs/quickstart.html +37 -37
  202. package/dist/docs/reference/agent-config.html +37 -37
  203. package/dist/docs/reference/artifacts.html +38 -38
  204. package/dist/docs/reference/channels.html +37 -37
  205. package/dist/docs/reference/cli.html +39 -37
  206. package/dist/docs/reference/cli.md +2 -0
  207. package/dist/docs/reference/connections.html +38 -38
  208. package/dist/docs/reference/connections.md +1 -1
  209. package/dist/docs/reference/evals.html +116 -0
  210. package/dist/docs/reference/evals.md +293 -0
  211. package/dist/docs/reference/extensions.html +80 -84
  212. package/dist/docs/reference/extensions.md +131 -202
  213. package/dist/docs/reference/hooks.html +39 -39
  214. package/dist/docs/reference/hooks.md +34 -34
  215. package/dist/docs/reference/http-api.html +37 -37
  216. package/dist/docs/reference/instructions.html +37 -37
  217. package/dist/docs/reference/playground.html +37 -37
  218. package/dist/docs/reference/project-layout.html +37 -37
  219. package/dist/docs/reference/prompt.html +37 -37
  220. package/dist/docs/reference/schedules.html +37 -37
  221. package/dist/docs/reference/sessions.html +37 -37
  222. package/dist/docs/reference/skills.html +37 -37
  223. package/dist/docs/reference/subagents.html +38 -38
  224. package/dist/docs/reference/subagents.md +1 -1
  225. package/dist/docs/reference/tools.html +38 -38
  226. package/dist/docs/reference/tools.md +4 -0
  227. package/dist/docs/templates/agentic-owners.html +38 -38
  228. package/dist/docs/templates/pr-autofixer.html +37 -37
  229. package/dist/docs/templates/security-reviewer.html +38 -38
  230. package/dist/docs/templates/thermo-quality-review.html +62 -0
  231. package/dist/docs/templates/thermo-quality-review.md +75 -0
  232. package/dist/docs/templates/thermo-review.html +62 -0
  233. package/dist/docs/templates/thermo-review.md +74 -0
  234. package/dist/docs/templates/triage.html +37 -37
  235. package/dist/docs/troubleshooting.html +38 -38
  236. package/dist/docs/troubleshooting.md +97 -66
  237. package/dist/extensions/cursor-cloud-agents/skills/handoff.md +3 -7
  238. package/dist/extensions/improve/extension.d.ts +3 -1
  239. package/dist/extensions/improve/extension.d.ts.map +1 -1
  240. package/dist/extensions/improve/extension.js +4 -2
  241. package/dist/extensions/improve/skills/yourself.js +1 -1
  242. package/dist/extensions/jev/extension.d.ts +43 -0
  243. package/dist/extensions/jev/extension.d.ts.map +1 -0
  244. package/dist/extensions/jev/extension.js +47 -0
  245. package/dist/extensions/jev/lib/evaluate.d.ts +101 -0
  246. package/dist/extensions/jev/lib/evaluate.d.ts.map +1 -0
  247. package/dist/extensions/jev/lib/evaluate.js +167 -0
  248. package/dist/extensions/jev/skills/gated-write.md +25 -0
  249. package/dist/extensions/jev/skills/questions.md +33 -0
  250. package/dist/extensions/jev/tools/evaluate.d.ts +4 -0
  251. package/dist/extensions/jev/tools/evaluate.d.ts.map +1 -0
  252. package/dist/extensions/jev/tools/evaluate.js +88 -0
  253. package/dist/extensions.d.ts +1 -1
  254. package/dist/extensions.d.ts.map +1 -1
  255. package/dist/extensions.js +2 -0
  256. package/dist/filesystem.d.ts +46 -2
  257. package/dist/filesystem.d.ts.map +1 -1
  258. package/dist/filesystem.js +149 -102
  259. package/dist/index.d.ts +2 -2
  260. package/dist/index.d.ts.map +1 -1
  261. package/dist/index.js +1 -1
  262. package/dist/internal/advertise-tools.d.ts.map +1 -1
  263. package/dist/internal/advertise-tools.js +6 -0
  264. package/dist/internal/cli-ax.d.ts +6 -0
  265. package/dist/internal/cli-ax.d.ts.map +1 -1
  266. package/dist/internal/cli-ax.js +72 -14
  267. package/dist/internal/continuation-identity.d.ts.map +1 -1
  268. package/dist/internal/continuation-identity.js +1 -0
  269. package/dist/internal/cursor-agent-template.d.ts +1 -1
  270. package/dist/internal/cursor-agent-template.d.ts.map +1 -1
  271. package/dist/internal/cursor-agent-template.js +2 -0
  272. package/dist/internal/discovery/connections.d.ts.map +1 -1
  273. package/dist/internal/discovery/connections.js +18 -0
  274. package/dist/internal/discovery/extensions.d.ts.map +1 -1
  275. package/dist/internal/discovery/extensions.js +8 -4
  276. package/dist/internal/discovery/info.d.ts.map +1 -1
  277. package/dist/internal/discovery/info.js +1 -0
  278. package/dist/internal/filesystem/tools.d.ts.map +1 -1
  279. package/dist/internal/filesystem/tools.js +2 -2
  280. package/dist/internal/filesystem/walk.d.ts +7 -4
  281. package/dist/internal/filesystem/walk.d.ts.map +1 -1
  282. package/dist/internal/filesystem/walk.js +34 -11
  283. package/dist/internal/hosted-admission-adapter.d.ts +3 -0
  284. package/dist/internal/hosted-admission-adapter.d.ts.map +1 -1
  285. package/dist/internal/hosted-delivery-protocol.d.ts +20 -0
  286. package/dist/internal/hosted-delivery-protocol.d.ts.map +1 -1
  287. package/dist/internal/hosted-delivery-protocol.js +51 -1
  288. package/dist/internal/hosted-delivery.d.ts.map +1 -1
  289. package/dist/internal/hosted-delivery.js +23 -25
  290. package/dist/internal/hosted-execution-diag.d.ts +12 -4
  291. package/dist/internal/hosted-execution-diag.d.ts.map +1 -1
  292. package/dist/internal/hosted-execution-diag.js +26 -4
  293. package/dist/internal/hosted-execution-flush.d.ts +1 -0
  294. package/dist/internal/hosted-execution-flush.d.ts.map +1 -1
  295. package/dist/internal/hosted-execution-flush.js +4 -2
  296. package/dist/internal/init-project.d.ts.map +1 -1
  297. package/dist/internal/init-project.js +4 -0
  298. package/dist/internal/server.d.ts.map +1 -1
  299. package/dist/internal/server.js +111 -48
  300. package/dist/internal/session-engine.d.ts +4 -1
  301. package/dist/internal/session-engine.d.ts.map +1 -1
  302. package/dist/internal/session-engine.js +39 -9
  303. package/dist/internal/skill-catalog.d.ts +28 -0
  304. package/dist/internal/skill-catalog.d.ts.map +1 -0
  305. package/dist/internal/skill-catalog.js +44 -0
  306. package/dist/playground/assets/index-DSMAewbx.css +1 -0
  307. package/dist/playground/assets/index-De_lpFxE.js +67 -0
  308. package/dist/playground/index.html +2 -2
  309. package/dist/types.d.ts +32 -3
  310. package/dist/types.d.ts.map +1 -1
  311. package/docs/README.md +2 -0
  312. package/docs/building-with-agents.md +96 -84
  313. package/docs/deployment.md +118 -364
  314. package/docs/evals.md +149 -673
  315. package/docs/guides/agent-to-agent.md +130 -48
  316. package/docs/guides/bitbucket.md +250 -49
  317. package/docs/guides/cloud-agents.md +119 -67
  318. package/docs/guides/convert-automation.md +157 -148
  319. package/docs/guides/github.md +261 -246
  320. package/docs/guides/gitlab.md +250 -51
  321. package/docs/guides/grokbot-agents.md +100 -55
  322. package/docs/guides/improve.md +112 -59
  323. package/docs/guides/jev.md +353 -0
  324. package/docs/guides/mcp-oauth.md +112 -122
  325. package/docs/guides/opentelemetry.md +97 -166
  326. package/docs/guides/slack.md +158 -228
  327. package/docs/guides/webhooks.md +155 -386
  328. package/docs/hillclimbing.md +102 -56
  329. package/docs/reference/cli.md +2 -0
  330. package/docs/reference/connections.md +1 -1
  331. package/docs/reference/evals.md +298 -0
  332. package/docs/reference/extensions.md +132 -203
  333. package/docs/reference/hooks.md +34 -34
  334. package/docs/reference/subagents.md +1 -1
  335. package/docs/reference/tools.md +4 -0
  336. package/docs/templates/thermo-quality-review.md +80 -0
  337. package/docs/templates/thermo-review.md +79 -0
  338. package/docs/troubleshooting.md +98 -67
  339. package/package.json +8 -1
  340. package/skills/github/SKILL.md +21 -13
  341. package/src/bin/agent-serve.ts +24 -3
  342. package/src/channels/checks.ts +8 -0
  343. package/src/channels/github/github-channel.ts +29 -19
  344. package/src/channels/origin/checks.ts +3 -1
  345. package/src/channels/slack/agentic-delivery.ts +2 -0
  346. package/src/channels/slack/dispatch.ts +131 -4
  347. package/src/channels/slack/placeholder.ts +51 -0
  348. package/src/channels/slack/slack-channel.ts +9 -2
  349. package/src/extensions/cursor-cloud-agents/skills/handoff.md +3 -7
  350. package/src/extensions/improve/extension.ts +4 -2
  351. package/src/extensions/improve/skills/yourself.ts +1 -1
  352. package/src/extensions/jev/extension.ts +95 -0
  353. package/src/extensions/jev/lib/evaluate.ts +289 -0
  354. package/src/extensions/jev/skills/gated-write.md +25 -0
  355. package/src/extensions/jev/skills/questions.md +33 -0
  356. package/src/extensions/jev/tools/evaluate.ts +90 -0
  357. package/src/extensions.ts +2 -0
  358. package/src/filesystem.ts +168 -65
  359. package/src/index.ts +3 -0
  360. package/src/internal/advertise-tools.ts +6 -0
  361. package/src/internal/cli-ax.ts +88 -15
  362. package/src/internal/continuation-identity.ts +1 -0
  363. package/src/internal/cursor-agent-template.ts +2 -0
  364. package/src/internal/discovery/connections.ts +21 -0
  365. package/src/internal/discovery/extensions.ts +12 -4
  366. package/src/internal/discovery/info.ts +1 -0
  367. package/src/internal/filesystem/tools.ts +2 -0
  368. package/src/internal/filesystem/walk.ts +60 -15
  369. package/src/internal/hosted-admission-adapter.ts +3 -0
  370. package/src/internal/hosted-delivery-protocol.ts +82 -1
  371. package/src/internal/hosted-delivery.ts +23 -0
  372. package/src/internal/hosted-execution-diag.ts +33 -4
  373. package/src/internal/hosted-execution-flush.ts +4 -0
  374. package/src/internal/init-project.ts +4 -0
  375. package/src/internal/server.ts +130 -53
  376. package/src/internal/session-engine.ts +46 -8
  377. package/src/internal/skill-catalog.ts +69 -0
  378. package/src/types.ts +33 -3
  379. package/templates/thermo-quality-review/README.md +35 -0
  380. package/templates/thermo-quality-review/agent/agent.ts +8 -0
  381. package/templates/thermo-quality-review/agent/channels/github.ts +42 -0
  382. package/templates/thermo-quality-review/agent/instructions.md +43 -0
  383. package/templates/thermo-quality-review/agent/tools/post_findings.ts +70 -0
  384. package/templates/thermo-quality-review/evals/evals.config.ts +5 -0
  385. package/templates/thermo-quality-review/evals/review.eval.ts +62 -0
  386. package/templates/thermo-quality-review/package.json +18 -0
  387. package/templates/thermo-quality-review/tsconfig.json +12 -0
  388. package/templates/thermo-review/README.md +35 -0
  389. package/templates/thermo-review/agent/agent.ts +8 -0
  390. package/templates/thermo-review/agent/channels/github.ts +42 -0
  391. package/templates/thermo-review/agent/instructions.md +40 -0
  392. package/templates/thermo-review/agent/tools/post_findings.ts +70 -0
  393. package/templates/thermo-review/evals/evals.config.ts +5 -0
  394. package/templates/thermo-review/evals/review.eval.ts +53 -0
  395. package/templates/thermo-review/package.json +18 -0
  396. package/templates/thermo-review/tsconfig.json +12 -0
  397. package/dist/docs/assets/building-with-agents.md.CEGVXkmO.js +0 -13
  398. package/dist/docs/assets/building-with-agents.md.CEGVXkmO.lean.js +0 -1
  399. package/dist/docs/assets/chunks/@localSearchIndexroot.DtXk1hy-.js +0 -1
  400. package/dist/docs/assets/chunks/channel.Bkv1N-gK.js +0 -1
  401. package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.CZDco1o8.js +0 -1
  402. package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.CZDco1o8.js +0 -1
  403. package/dist/docs/assets/chunks/clone.YSt_40_s.js +0 -1
  404. package/dist/docs/assets/chunks/framework.dypDpWZ3.js +0 -19
  405. package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.C4CLm481.js +0 -1
  406. package/dist/docs/assets/deployment.md.Dm4Qo3hp.js +0 -51
  407. package/dist/docs/assets/deployment.md.Dm4Qo3hp.lean.js +0 -1
  408. package/dist/docs/assets/evals.md.BLDRt5LH.js +0 -211
  409. package/dist/docs/assets/evals.md.BLDRt5LH.lean.js +0 -1
  410. package/dist/docs/assets/guides_agent-to-agent.md.BI0xclmy.js +0 -14
  411. package/dist/docs/assets/guides_agent-to-agent.md.BI0xclmy.lean.js +0 -1
  412. package/dist/docs/assets/guides_bitbucket.md.CTpCl__f.js +0 -10
  413. package/dist/docs/assets/guides_bitbucket.md.CTpCl__f.lean.js +0 -1
  414. package/dist/docs/assets/guides_cloud-agents.md.lSE_l7lH.js +0 -9
  415. package/dist/docs/assets/guides_cloud-agents.md.lSE_l7lH.lean.js +0 -1
  416. package/dist/docs/assets/guides_convert-automation.md.Ck6Cr68A.js +0 -12
  417. package/dist/docs/assets/guides_convert-automation.md.Ck6Cr68A.lean.js +0 -1
  418. package/dist/docs/assets/guides_github.md.D6ER29dG.js +0 -64
  419. package/dist/docs/assets/guides_github.md.D6ER29dG.lean.js +0 -1
  420. package/dist/docs/assets/guides_gitlab.md.P-TjBnS5.js +0 -14
  421. package/dist/docs/assets/guides_gitlab.md.P-TjBnS5.lean.js +0 -1
  422. package/dist/docs/assets/guides_grokbot-agents.md.WBZIOvkz.js +0 -9
  423. package/dist/docs/assets/guides_grokbot-agents.md.WBZIOvkz.lean.js +0 -1
  424. package/dist/docs/assets/guides_improve.md.BKaDuKKK.js +0 -14
  425. package/dist/docs/assets/guides_improve.md.BKaDuKKK.lean.js +0 -1
  426. package/dist/docs/assets/guides_mcp-oauth.md.DMNMpXtO.js +0 -28
  427. package/dist/docs/assets/guides_mcp-oauth.md.DMNMpXtO.lean.js +0 -1
  428. package/dist/docs/assets/guides_opentelemetry.md._CRfDyzH.js +0 -26
  429. package/dist/docs/assets/guides_opentelemetry.md._CRfDyzH.lean.js +0 -1
  430. package/dist/docs/assets/guides_slack.md.DdT8rmsj.js +0 -46
  431. package/dist/docs/assets/guides_slack.md.DdT8rmsj.lean.js +0 -1
  432. package/dist/docs/assets/guides_webhooks.md.aQW10HRe.js +0 -225
  433. package/dist/docs/assets/guides_webhooks.md.aQW10HRe.lean.js +0 -1
  434. package/dist/docs/assets/hillclimbing.md.Dq4kkVIL.js +0 -1
  435. package/dist/docs/assets/hillclimbing.md.Dq4kkVIL.lean.js +0 -1
  436. package/dist/docs/assets/reference_extensions.md.wlFD3cUR.js +0 -62
  437. package/dist/docs/assets/reference_extensions.md.wlFD3cUR.lean.js +0 -1
  438. package/dist/docs/assets/troubleshooting.md.BcgNoYtJ.js +0 -1
  439. package/dist/docs/assets/troubleshooting.md.BcgNoYtJ.lean.js +0 -1
  440. package/dist/playground/assets/index-BLlKgZtI.css +0 -1
  441. package/dist/playground/assets/index-CDS5p9sR.js +0 -67
@@ -1,212 +1,167 @@
1
1
  ---
2
2
  title: "Extensions"
3
- description: "Mount a package of agent contributions or a Cursor plugin under a namespace with one file, adjust what it contributes, and author your own as a directory laid out like agent/."
3
+ description: "Mount a namespaced package of tools, skills, connections, and other agent capabilities, then inspect or override what it adds."
4
4
  ---
5
5
 
6
6
  # Extensions
7
7
 
8
- An extension packages the same contributions an agent authors under
9
- `agent/` and installs them as one unit. You mount it with a single file
10
- under `agent/extensions/`, and its contributions join the agent under a
11
- namespace. The package updates like any other dependency; nothing is
12
- copied into your project. A Cursor plugin mounts the same way; see
13
- [Mount a Cursor plugin](#mount-a-cursor-plugin).
8
+ An extension packages capabilities that would otherwise live under
9
+ `agent/`: tools, skills, instructions, connections, hooks, channels,
10
+ schedules, subagents, artifacts, and workspace seeds. One mount file
11
+ adds them under a namespace without copying their source into your
12
+ project.
14
13
 
15
- Extensions are native to the Agent SDK. Slot files use the `@cursor/july`
16
- helpers, so a package built on another agent framework fails
17
- `agent-sdk validate` until you rewrite it onto `@cursor/july`.
14
+ Extensions and Cursor plugins execute as trusted host code. A namespace
15
+ prevents name collisions; it does not sandbox the package or limit its
16
+ side effects. Review the package before mounting it.
18
17
 
19
18
  ## Mount an extension
20
19
 
21
- Install the package, then add one file. The filename is the namespace.
20
+ Install the package and add one file under `agent/extensions/`. The
21
+ filename becomes the namespace, so this mount contributes names such as
22
+ `ci__failed_jobs` and `ci__triage`.
22
23
 
23
24
  ```ts
24
25
  // agent/extensions/ci.ts
25
26
  import ci from "@acme/ci-triage";
26
27
 
27
- export default ci({ org: "acme", token: process.env.BUILDKITE_TOKEN! });
28
+ export default ci({
29
+ org: "acme",
30
+ token: process.env.BUILDKITE_TOKEN,
31
+ });
28
32
  ```
29
33
 
30
- Every contribution is exposed as `<namespace>__<name>`. A `failed_jobs`
31
- tool from this mount runs in the agent as `ci__failed_jobs`, and a
32
- `triage` skill loads as `ci__triage`. `agent-sdk info` lists each mount
33
- with what it contributed, and `GET /v1/info` returns the same under
34
- `extensions`.
34
+ The extension validates its configuration while the project loads.
35
+ Missing or mistyped settings fail `agent-sdk validate` before a turn
36
+ can call the contributed code.
35
37
 
36
- Pass the configuration the extension asks for. The extension validates it
37
- when the agent loads, so a missing or mistyped field fails
38
- `agent-sdk validate` instead of a tool call later.
38
+ Extension instructions are appended to the agent's prompt. The root
39
+ agent still needs its own `agent/instructions.md`.
39
40
 
40
- Namespaces follow the tool-name rule, and `__` is reserved: an authored
41
- `agent/tools/ci__failed_jobs.ts` fails discovery, so nothing outside a
42
- mount can pose as one of its tools.
41
+ ## See what the extension added
43
42
 
44
- ## What an extension can contribute
43
+ Run discovery after mounting or upgrading an extension:
45
44
 
46
- An extension tree uses the same slots as [`agent/`](./project-layout.md).
47
- Each shareable contribution lands on the agent under the mount's
48
- namespace:
45
+ ```bash
46
+ agent-sdk validate --dir .
47
+ agent-sdk info --dir . --json
48
+ ```
49
49
 
50
- | Path | Becomes |
51
- | --- | --- |
52
- | `tools/<name>.ts` | tool `<ns>__<name>` |
53
- | `skills/<name>` | skill `<ns>__<name>` |
54
- | `mcp-connections/<name>.ts` | connection `<ns>__<name>` |
55
- | `host-connections/<name>.ts` | host connection `<ns>__<name>` |
56
- | `hooks/<name>.ts` | hook `<ns>__<name>` |
57
- | `channels/<name>.ts` | channel `<ns>__<name>` |
58
- | `schedules/<name>` | schedule `<ns>__<name>` |
59
- | `subagents/<id>/` | subagent `<ns>__<id>` |
60
- | `instructions.md` / `.ts` / dir | appended to the agent's system prompt |
61
- | `sandbox/workspace/**` | seeded into each local session workspace |
62
- | `artifacts.ts` | artifact kinds `<ns>__<kind>` |
63
-
64
- The root agent still needs its own `instructions.md`. Extension
65
- instructions are extra fragments, not a substitute.
66
-
67
- The built-in HTTP session channel stays on the agent. An extension
68
- authors `defineChannel` only; a file named `http.ts` becomes `<ns>__http`.
69
-
70
- These stay on the agent that mounts the extension. Each is a singleton
71
- or is outside discovery:
72
-
73
- | Path | Why it stays on the agent |
74
- | --- | --- |
75
- | `agent.ts` | One `defineAgent` runtime per agent |
76
- | `storage.ts` | One `host.kv` / `host.files` backend |
77
- | `otel.ts` | One OTLP exporter |
78
- | `playground/` | Custom chips are a Vite glob of the agent tree, not a discovery walk |
79
- | `extensions/` | Nested mounts are not loaded |
80
- | `sandbox.ts` | Custom sandbox backends stay on the agent |
81
-
82
- `agent-sdk validate` warns when a tree carries those paths.
50
+ `info` lists each mount and its namespaced tools, skills, connections,
51
+ hooks, channels, schedules, subagents, and artifact kinds. The same
52
+ data appears under `extensions` in `GET /v1/info`.
53
+
54
+ Names inside the extension stay short. A tool authored as
55
+ `tools/failed_jobs.ts` appears to the mounting agent as
56
+ `<namespace>__failed_jobs`. The `__` separator is reserved, so root
57
+ contributions cannot impersonate a mounted one.
83
58
 
84
59
  ## Adjust a mounted extension
85
60
 
86
- To replace or remove a contribution, mount the extension as a directory
87
- and overlay the slot you want to change.
61
+ Mount as a directory when you need to replace or remove one
62
+ contribution. Keep the package mount in `extension.ts`, then overlay the
63
+ extension's short name beneath it.
88
64
 
89
65
  ```text
90
66
  agent/extensions/ci/
91
- ├── extension.ts # the mount: export default ci({ ... })
92
- ├── tools/
93
- │ ├── job_log.ts # replaces ci__job_log with your own defineTool
94
- │ └── retry_job.ts # export default disableTool() removes ci__retry_job
95
- ├── hooks/
96
- │ └── audit.ts # export default disableHook() removes ci__audit
97
- └── skills/
98
- └── triage.ts # export default disableSkill() removes ci__triage
67
+ extension.ts
68
+ tools/
69
+ job_log.ts
70
+ retry_job.ts
99
71
  ```
100
72
 
101
- Use the extension's own names inside the directory, without the
102
- namespace. A file with a name the extension doesn't contribute adds a
103
- new contribution under the namespace. Each helper comes from
104
- `@cursor/july/extensions` and fails discovery when it names a
105
- contribution the extension doesn't have, so a typo can't silently keep
106
- it alive.
107
-
108
- | Slot | Helper |
109
- | --- | --- |
110
- | `tools/<name>.ts` | `disableTool()` |
111
- | `mcp-connections/<name>.ts` / `host-connections/<name>.ts` | `disableConnection()` |
112
- | `skills/<name>.ts` | `disableSkill()` |
113
- | `hooks/<name>.ts` | `disableHook()` |
114
- | `channels/<name>.ts` | `disableChannel()` |
115
- | `schedules/<name>.ts` | `disableSchedule()` |
116
- | `subagents/<id>.ts` | `disableSubagent()` |
117
- | `instructions.ts` | `disableInstructions()` |
118
- | `artifacts.ts` | `disableArtifacts()` |
119
-
120
- `disable()` is the same brand as the slot helpers above and works in
121
- any of those files.
122
-
123
- A Cursor plugin mount overlays its MCP servers the same way; see below.
73
+ ```ts
74
+ // agent/extensions/ci/tools/job_log.ts
75
+ import { defineTool } from "@cursor/july/tools";
76
+ import {
77
+ jobLogInput,
78
+ readRedactedLog,
79
+ } from "../../../lib/ci.js";
80
+
81
+ export default defineTool({
82
+ description: "Read a redacted CI log.",
83
+ inputSchema: jobLogInput,
84
+ execute: readRedactedLog,
85
+ });
86
+ ```
87
+
88
+ ```ts
89
+ // agent/extensions/ci/tools/retry_job.ts
90
+ import { disableTool } from "@cursor/july/extensions";
91
+
92
+ export default disableTool();
93
+ ```
94
+
95
+ The first file replaces `ci__job_log`; the second removes
96
+ `ci__retry_job`. Use the matching `disable*` helper for another slot, or
97
+ generic `disable()` when the file location already identifies it.
98
+ Validation fails when an overlay names a contribution the package does
99
+ not provide.
124
100
 
125
101
  ## Mount a Cursor plugin
126
102
 
127
- A Cursor plugin is a directory with `.cursor-plugin/plugin.json` (or
128
- `.claude-plugin/plugin.json`, or `plugin.json`) and any of `skills/`,
129
- `commands/`, `agents/`, and `mcp.json`. Copy the plugin into your project
130
- and mount it with `cursorPlugin`. The filename is the namespace, as with
131
- any extension.
103
+ `cursorPlugin()` adapts a vendored Cursor or Claude plugin into the same
104
+ namespace model. Skills, commands, agents, and MCP servers become Agent
105
+ SDK skills, subagents, and connections.
132
106
 
133
107
  ```ts
134
108
  // agent/extensions/notion.ts
135
109
  import { cursorPlugin } from "@cursor/july/extensions";
136
110
 
137
111
  export default cursorPlugin({
138
- path: "plugins/notion-workspace", // relative to the project root
139
- variables: { NOTION_TOKEN: process.env.NOTION_TOKEN! },
112
+ path: "plugins/notion-workspace",
113
+ variables: {
114
+ NOTION_TOKEN: process.env.NOTION_TOKEN,
115
+ },
140
116
  });
141
117
  ```
142
118
 
143
- The plugin joins the agent under that namespace:
144
-
145
- | Plugin content | Becomes |
146
- | --- | --- |
147
- | `skills/<name>/SKILL.md` | skill `notion__<name>` |
148
- | `commands/<name>.md` | skill `notion__<name>`, since a command is a procedure the model runs on request |
149
- | `agents/<name>.md` | subagent `notion__<name>` |
150
- | MCP servers in `mcp.json` or the manifest | connection `notion__<server>` |
151
-
152
- `variables` fills the `${NAME}` placeholders the plugin's MCP config
153
- declares; names you leave out come from the environment by exact name. A
154
- placeholder nothing fills fails `agent-sdk validate`, so a server never
155
- attaches half configured. A server that declares an OAuth client
156
- authorizes through [host MCP OAuth](../guides/mcp-oauth.md) as
157
- `agent-sdk mcp oauth notion__<server>`; its secret names collapse the
158
- namespace separator, so `notion__notion` stores `MCP_OAUTH_NOTION_NOTION_*`.
159
- A server that lists `enabledTools` mounts as an advertised connection with
160
- that allowlist and requires the local runtime; `agent-sdk validate` fails
161
- otherwise.
162
-
163
- Mounting a plugin trusts it like authored code: its servers run the
164
- commands and read the environment variables its config names. Review a
165
- plugin before you vendor it.
166
-
167
- Plugin rules and hooks are not mounted; `agent-sdk validate` warns when a
168
- plugin carries them. To drop or reconfigure one of the plugin's servers,
169
- mount as a directory and overlay `mcp-connections/<server>.ts`. An
170
- overlaid server is never read from the plugin, so it needs no variables.
119
+ `path` is relative to the project root. `variables` fills placeholders
120
+ declared by the plugin's MCP configuration; unresolved placeholders
121
+ fail validation instead of mounting a partial server.
171
122
 
172
- ```text
173
- agent/extensions/cloudflare/
174
- ├── extension.ts # export default cursorPlugin({ path: "plugins/cloudflare" })
175
- └── mcp-connections/
176
- ├── cloudflare-docs.ts # replaces cloudflare__cloudflare-docs with your defineConnection
177
- └── cloudflare-bindings.ts # export default disableConnection() drops it
178
- ```
123
+ Plugin rules and hooks are not mounted. Overlay a generated
124
+ `mcp-connections/<server>.ts` file to replace or disable one plugin
125
+ server. OAuth-backed plugin servers use
126
+ [Host MCP OAuth](../guides/mcp-oauth.md); transport and tool-filter
127
+ details live in [MCP connections](./connections.md).
128
+
129
+ ## What an extension can contain
130
+
131
+ Share capabilities that can safely join another agent under a
132
+ namespace:
179
133
 
180
- `disableConnection()` comes from `@cursor/july/extensions` and fails
181
- discovery when it names a server the plugin doesn't declare.
134
+ - Instructions, tools, skills, MCP and host connections
135
+ - Hooks, channels, schedules, and subagents
136
+ - Artifact kinds and local workspace seed files
137
+
138
+ Agent-wide configuration does not compose through a mount.
139
+ `agent.ts`, storage, OpenTelemetry, playground code, custom sandbox
140
+ backends, and nested extensions are ignored in an extension package;
141
+ `agent-sdk validate` reports unsupported paths.
182
142
 
183
143
  ## Build an extension
184
144
 
185
- An extension is a directory laid out like `agent/`. `extension.ts`
186
- declares it; the slots in [What an extension can contribute](#what-an-extension-can-contribute)
187
- use the same authoring forms as the rest of this reference.
145
+ Lay out the package like the shareable part of `agent/`. The root
146
+ `extension.ts` supplies a description and validates any settings the
147
+ consumer must provide.
188
148
 
189
149
  ```text
190
150
  @acme/ci-triage/
191
- ├── package.json
192
- ├── extension.ts # defineExtension
193
- ├── tools/
194
- │ ├── failed_jobs.ts
195
- │ ├── job_log.ts
196
- │ └── retry_job.ts
197
- ├── skills/
198
- │ └── triage.md
199
- ├── hooks/
200
- │ └── audit.ts
201
- ├── mcp-connections/
202
- │ └── buildkite.ts
203
- └── lib/
204
- └── buildkite.ts # shared code, never discovered
151
+ package.json
152
+ extension.ts
153
+ instructions.md
154
+ tools/
155
+ failed_jobs.ts
156
+ job_log.ts
157
+ skills/
158
+ triage.md
159
+ hooks/
160
+ audit.ts
161
+ lib/
162
+ buildkite.ts
205
163
  ```
206
164
 
207
- Declare the extension with its root and, when consumers must configure
208
- it, a schema for their settings.
209
-
210
165
  ```ts
211
166
  // extension.ts
212
167
  import { defineExtension } from "@cursor/july/extensions";
@@ -214,7 +169,7 @@ import { z } from "zod";
214
169
 
215
170
  export default defineExtension({
216
171
  root: import.meta.dirname,
217
- description: "Investigate failing CI builds on Buildkite.",
172
+ description: "Investigate failing Buildkite jobs.",
218
173
  config: z.object({
219
174
  org: z.string(),
220
175
  token: z.string(),
@@ -223,48 +178,22 @@ export default defineExtension({
223
178
  });
224
179
  ```
225
180
 
226
- The default export is what consumers call to mount the extension, and it
227
- is also how your own modules read the consumer's settings. Import it and
228
- read `extension.config`; the value is validated and has defaults applied.
229
-
230
- ```ts
231
- // tools/job_log.ts
232
- import { defineTool } from "@cursor/july/tools";
233
- import { z } from "zod";
234
- import extension from "../extension.js";
235
- import { jobLogTail } from "../lib/buildkite.js";
236
-
237
- export default defineTool({
238
- description: "Read the tail of a CI job's log.",
239
- effect: "read",
240
- inputSchema: z.object({ pipeline: z.string(), build: z.number(), job: z.string() }),
241
- async execute({ pipeline, build, job }) {
242
- const { org, token, logTailLines } = extension.config;
243
- return jobLogTail({ org, token, pipeline, build, job, lines: logTailLines });
244
- },
245
- });
246
- ```
247
-
248
- Because the consumer picks the namespace, have skills and tool
249
- descriptions refer to sibling tools by their short names and say they
250
- appear under the mount's namespace (`<namespace>__job_log`).
251
-
252
- Publish the built `extension.js` as the package entry point with the
253
- slot directories beside it. `root` is read from the built file, so copy
254
- `skills/*.md` and `instructions.md` into the build output or author them
255
- as `.ts`.
256
-
257
- ## What's next
258
-
259
- Continue with these pages:
260
-
261
- - [Cursor cloud agents](../guides/cloud-agents.md): the extension that
262
- lets an agent launch and steer cloud agents
263
- - [Cursor Grok Bot agents](../guides/grokbot-agents.md): the extension
264
- that lets an agent talk to Grok Bot agents
265
- - [Self-improvement](../guides/improve.md): the extension that lets an
266
- agent change its own source through a cloud agent and a pull request
267
- - [Tools](./tools.md): the tool contract extensions contribute to
268
- - [Skills](./skills.md): the skill forms an extension can carry
269
- - [Project layout](./project-layout.md): where `agent/extensions/` sits
270
- in the tree
181
+ Modules inside the package import this definition and read
182
+ `extension.config`, which is already validated and has defaults
183
+ applied. Publish the built entry point with its slot directories and
184
+ prose assets beside it.
185
+
186
+ The [Project layout](./project-layout.md) owns each contribution's
187
+ authoring contract. Keep extension instructions and tool descriptions
188
+ namespace-neutral because the consumer chooses the final prefix.
189
+
190
+ ## Related
191
+
192
+ - [Cloud agents](../guides/cloud-agents.md): delegate repository work
193
+ through an extension
194
+ - [Grok Bot agents](../guides/grokbot-agents.md): consult named bots
195
+ - [Jev](../guides/jev.md): typed answers, then gated writes
196
+ - [Self-improvement](../guides/improve.md): propose source changes
197
+ through pull requests
198
+ - [Project layout](./project-layout.md): contribution slots
199
+ - [Tools](./tools.md) and [Skills](./skills.md): capability contracts
@@ -73,31 +73,31 @@ stream envelope `{ type, index, sessionId, turnId?, at, data }`, with
73
73
 
74
74
  The payloads hooks read most often:
75
75
 
76
- | Event | `event.data` |
77
- | --- | --- |
78
- | `message.received` | `{ text }` |
79
- | `turn.completed` | `{ result?, usage?, cost? }`. `usage` has `inputTokens`, `outputTokens`, `cacheReadTokens`, `cacheWriteTokens`, and optional `reasoningTokens`. `cost` has `totalUsd` and the `model` it was priced against |
80
- | `turn.failed` | `{ message }` |
81
- | `actions.requested` | `{ calls: [{ callId, toolName, args? }] }`. A call with `parentCallId` belongs to a subagent |
82
- | `action.result` | `{ callId, toolName, output?, isError, stubbed? }`. `stubbed` means a dry-run session answered a write without running it |
76
+ | Event | `event.data` |
77
+ | ------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
78
+ | `message.received` | `{ text }` |
79
+ | `turn.completed` | `{ result?, usage?, cost? }`. `usage` has `inputTokens`, `outputTokens`, `cacheReadTokens`, `cacheWriteTokens`, and optional `reasoningTokens`. `cost` has `totalUsd` and the `model` it was priced against |
80
+ | `turn.failed` | `{ message }` |
81
+ | `actions.requested` | `{ calls: [{ callId, toolName, args? }] }`. A call with `parentCallId` belongs to a subagent |
82
+ | `action.result` | `{ callId, toolName, output?, isError, stubbed? }`. `stubbed` means a dry-run session answered a write without running it |
83
83
 
84
84
  The types are `SessionEvent`, `SessionEventType`, and `HookContext`,
85
85
  exported from `@cursor/july`.
86
86
 
87
87
  ## Handler context
88
88
 
89
- | Member | What it is |
90
- | --- | --- |
91
- | `ctx.session` | Read-only session info: `id`, `channelId`, `mode` (`chat` or `task`), `purpose` (`live` or `eval`), `auth`, plus `title` and `sdkAgentId` when set |
92
- | `ctx.agent` | `{ name }` of the agent the event belongs to |
93
- | `ctx.channel` | `{ id, continuationToken }`. The token is `null` when the session can't take follow-ups |
94
- | `ctx.host.kv` | Durable JSON, shared by every session of the agent; the storage backend decides whether it survives a hosted replace. Prefix keys with `ctx.session.id` for per-session state |
95
- | `ctx.host.files` | Durable files, bound to this session. Pass `{ scope: "deployment" }` for agent-wide files |
96
- | `ctx.host.otel` | Counters, histograms, and tags, attributed to this session |
97
- | `ctx.host.mcp`, `ctx.host.github`, `ctx.host.slack` | The same shared clients tools get |
98
- | `ctx.host.reminders` | Per-session [reminders](./schedules.md), the same API tools get |
99
- | `ctx.artifacts` | Session-bound [artifacts](./artifacts.md) facade: `tag` fills in `sessionId` and `turnId` |
100
- | `ctx.stateRoot` | Absolute path of the local state root. It resets when a hosted deployment is replaced; keep derived state in `kv` or `files` |
89
+ | Member | What it is |
90
+ | --------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
91
+ | `ctx.session` | Read-only session info: `id`, `channelId`, `mode` (`chat` or `task`), `purpose` (`live` or `eval`), `auth`, plus `title` and `sdkAgentId` when set |
92
+ | `ctx.agent` | `{ name }` of the agent the event belongs to |
93
+ | `ctx.channel` | `{ id, continuationToken }`. The token is `null` when the session can't take follow-ups |
94
+ | `ctx.host.kv` | Durable JSON, shared by every session of the agent; the storage backend decides whether it survives a hosted replace. Prefix keys with `ctx.session.id` for per-session state |
95
+ | `ctx.host.files` | Durable files, bound to this session. Pass `{ scope: "deployment" }` for agent-wide files |
96
+ | `ctx.host.otel` | Counters, histograms, and tags, attributed to this session |
97
+ | `ctx.host.mcp`, `ctx.host.github`, `ctx.host.slack` | The same shared clients tools get |
98
+ | `ctx.host.reminders` | Per-session [reminders](./schedules.md), the same API tools get |
99
+ | `ctx.artifacts` | Session-bound [artifacts](./artifacts.md) facade: `tag` fills in `sessionId` and `turnId` |
100
+ | `ctx.stateRoot` | Absolute path of the local state root. It resets when a hosted deployment is replaced; keep derived state in `kv` or `files` |
101
101
 
102
102
  ## When hooks run
103
103
 
@@ -123,24 +123,24 @@ the hook's copy is the source of truth.
123
123
 
124
124
  All of them consume the same stream, for different jobs:
125
125
 
126
- | | Hooks | Channel `events` | Evals |
127
- | --- | --- | --- | --- |
128
- | Scope | every session of the agent | sessions the channel owns | one test turn |
129
- | Job | observe: audit, metrics, mirrors, derived state | deliver: replies back to the channel's surface | assert: gates over the trajectory |
130
- | Context | `ctx.host`, `ctx.artifacts`, session info | `channel.state`, `setContinuationToken`, `ctx.host`, session info | the `t` assertion helpers |
131
- | Can affect the run | no | yes, it owns the surface | n/a |
132
- | Authored at | `agent/hooks/*.ts` | channel config | `evals/**/*.eval.ts` |
126
+ | | Hooks | Channel `events` | Evals |
127
+ | ------------------ | ----------------------------------------------- | ----------------------------------------------------------------- | --------------------------------- |
128
+ | Scope | every session of the agent | sessions the channel owns | one test turn |
129
+ | Job | observe: audit, metrics, mirrors, derived state | deliver: replies back to the channel's surface | assert: gates over the trajectory |
130
+ | Context | `ctx.host`, `ctx.artifacts`, session info | `channel.state`, `setContinuationToken`, `ctx.host`, session info | the `t` assertion helpers |
131
+ | Can affect the run | no | yes, it owns the surface | n/a |
132
+ | Authored at | `agent/hooks/*.ts` | channel config | `evals/**/*.eval.ts` |
133
133
 
134
134
  ## When not to use a hook
135
135
 
136
- | You want to | Use instead |
137
- | --- | --- |
138
- | Add context before the model runs | The channel's `send` message and `workspaceFiles`, `instructions.md`, skills, or `sandbox/workspace/` seed files |
139
- | Reply on Slack, comment on a PR, or post any other delivery | The channel's `events` map, or the Slack and GitHub packs |
140
- | Show PR progress (merge-box check, sticky banner) | `githubChannel({ progress: { commitStatus, banner } })`; see [Show PR progress](../guides/github.md#show-pr-progress) |
141
- | Block, approve, or rewrite a tool call | [`needsApproval`](./tools.md#gate-a-tool-on-human-approval) on the tool |
142
- | Act on the final assistant text, reject it for a same-turn repair, or fail a bad turn | `defineResult` |
143
- | Gate a change on behavior | [Evals](../evals.md) |
136
+ | You want to | Use instead |
137
+ | ------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- |
138
+ | Add context before the model runs | The channel's `send` message and `workspaceFiles`, `instructions.md`, skills, or `sandbox/workspace/` seed files |
139
+ | Reply on Slack, comment on a PR, or post any other delivery | The channel's `events` map, or the Slack and GitHub packs |
140
+ | Show PR progress (merge-box check, sticky banner) | `githubChannel({ progress: { commitStatus, banner } })`; see the [PR autofixer](../templates/pr-autofixer.md) |
141
+ | Block, approve, or rewrite a tool call | [`needsApproval`](./tools.md#gate-a-tool-on-human-approval) on the tool |
142
+ | Act on the final assistant text, reject it for a same-turn repair, or fail a bad turn | `defineResult` |
143
+ | Gate a change on behavior | [Evals](../evals.md) |
144
144
 
145
145
  ## Patterns
146
146
 
@@ -54,7 +54,7 @@ subagent."
54
54
  Subagents split one job into roles inside a single agent. When the
55
55
  specialist is independently useful, with its own tools, sessions, and
56
56
  playground, make it a full agent. See
57
- [Agent-to-agent](../guides/agent-to-agent.md#peer-or-subagent).
57
+ [Peer agents](../guides/agent-to-agent.md#peer-or-subagent).
58
58
 
59
59
  ## Patterns
60
60
 
@@ -42,6 +42,10 @@ code that runs it. With a Zod `inputSchema`, the input is validated before
42
42
  `execute` runs and the input type is inferred. A plain JSON Schema
43
43
  object is forwarded as-is and the input arrives as raw JSON.
44
44
 
45
+ A server tool can call `decide` from
46
+ [`@cursor/july/extensions/jev`](../guides/jev.md) for a risk tier or a
47
+ finding gate without a second model turn.
48
+
45
49
  For multi-line descriptions, reminder prompts, and error messages, use
46
50
  [`prompt`](./prompt.md) so the string can sit indented with the surrounding
47
51
  TypeScript:
@@ -0,0 +1,80 @@
1
+ ---
2
+ title: "Review pull requests for structural code quality"
3
+ description: "Scaffold the agent, deploy it, and open a PR."
4
+ ---
5
+
6
+ # Review pull requests for structural code quality
7
+
8
+ This agent reads a pull request diff and posts one review comment. It
9
+ reports missing abstractions, spaghetti branches, feature logic
10
+ leaking into shared paths, and files pushed past 1,000 lines. Style
11
+ nits and behavior disputes stay out.
12
+
13
+ This template is one model turn: read the diff, then post one comment.
14
+
15
+ ## Scaffold
16
+
17
+ ```bash
18
+ npx @cursor/july init ./thermo-quality-review --template thermo-quality-review
19
+ cd thermo-quality-review
20
+ ```
21
+
22
+ ## Deploy
23
+
24
+ Sign in once, then deploy from a pushed checkout:
25
+
26
+ ```bash
27
+ agent-sdk login
28
+ agent-sdk deploy --cursor-events-repo acme/api
29
+ ```
30
+
31
+ Repeat `--cursor-events-repo` for each repo. Every repo must share one
32
+ owner. The deployment watches those repos through your team's Cursor
33
+ GitHub connection and reviews each opened PR. No webhook or local
34
+ server.
35
+
36
+ Change repos later without redeploying:
37
+
38
+ ```bash
39
+ agent-sdk event-repos thermo-quality-review --repo acme/api --repo acme/web
40
+ ```
41
+
42
+ ## Try it locally
43
+
44
+ Skip the deploy while you iterate. Start the relay for one repo:
45
+
46
+ ```bash
47
+ agent-sdk dev --cursor-events --repo acme/api
48
+ ```
49
+
50
+ Open a PR, or replay a known one without pushing:
51
+
52
+ ```bash
53
+ agent-sdk github replay https://github.com/acme/api/pull/12 --dir .
54
+ ```
55
+
56
+ `replay` needs pull access. Draft PRs are ignored. The channel writes
57
+ `pr/diff.patch`, then starts a model turn. The model calls
58
+ `post_findings` once. Chat replies stay in the playground.
59
+ `post_findings` writes the GitHub comment.
60
+
61
+ Connect GitHub in Cursor first (Settings or
62
+ [cursor.com/dashboard](https://cursor.com/dashboard)) so the relay and
63
+ API calls use your account. See the [GitHub guide](../guides/github.md).
64
+
65
+ ## Evals
66
+
67
+ Two smoke cases: one spaghetti-branch fixture and one clean fix. They
68
+ need no GitHub access.
69
+
70
+ ```bash
71
+ agent-sdk eval
72
+ ```
73
+
74
+ Eval sessions skip the GitHub write.
75
+
76
+ ## What to edit
77
+
78
+ - `agent/instructions.md`: what counts as a finding and the comment
79
+ shape
80
+ - `evals/review.eval.ts`: smoke cases