@cursor/july 0.1.1

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 (623) hide show
  1. package/AGENTS.md +290 -0
  2. package/LICENSE.md +3 -0
  3. package/README.md +1233 -0
  4. package/dist/ab.d.ts +290 -0
  5. package/dist/ab.d.ts.map +1 -0
  6. package/dist/ab.js +386 -0
  7. package/dist/bin/agent-serve.d.ts +15 -0
  8. package/dist/bin/agent-serve.d.ts.map +1 -0
  9. package/dist/bin/agent-serve.js +754 -0
  10. package/dist/channels/github/api.d.ts +101 -0
  11. package/dist/channels/github/api.d.ts.map +1 -0
  12. package/dist/channels/github/api.js +229 -0
  13. package/dist/channels/github/auth.d.ts +67 -0
  14. package/dist/channels/github/auth.d.ts.map +1 -0
  15. package/dist/channels/github/auth.js +239 -0
  16. package/dist/channels/github/binding.d.ts +73 -0
  17. package/dist/channels/github/binding.d.ts.map +1 -0
  18. package/dist/channels/github/binding.js +114 -0
  19. package/dist/channels/github/defaults.d.ts +24 -0
  20. package/dist/channels/github/defaults.d.ts.map +1 -0
  21. package/dist/channels/github/defaults.js +100 -0
  22. package/dist/channels/github/events.d.ts +18 -0
  23. package/dist/channels/github/events.d.ts.map +1 -0
  24. package/dist/channels/github/events.js +59 -0
  25. package/dist/channels/github/forward.d.ts +137 -0
  26. package/dist/channels/github/forward.d.ts.map +1 -0
  27. package/dist/channels/github/forward.js +271 -0
  28. package/dist/channels/github/github-channel.d.ts +127 -0
  29. package/dist/channels/github/github-channel.d.ts.map +1 -0
  30. package/dist/channels/github/github-channel.js +1688 -0
  31. package/dist/channels/github/index.d.ts +52 -0
  32. package/dist/channels/github/index.d.ts.map +1 -0
  33. package/dist/channels/github/index.js +51 -0
  34. package/dist/channels/github/replay.d.ts +115 -0
  35. package/dist/channels/github/replay.d.ts.map +1 -0
  36. package/dist/channels/github/replay.js +282 -0
  37. package/dist/channels/github/state.d.ts +26 -0
  38. package/dist/channels/github/state.d.ts.map +1 -0
  39. package/dist/channels/github/state.js +50 -0
  40. package/dist/channels/github/types.d.ts +385 -0
  41. package/dist/channels/github/types.d.ts.map +1 -0
  42. package/dist/channels/github/types.js +1 -0
  43. package/dist/channels/slack/api.d.ts +117 -0
  44. package/dist/channels/slack/api.d.ts.map +1 -0
  45. package/dist/channels/slack/api.js +437 -0
  46. package/dist/channels/slack/approvals.d.ts +32 -0
  47. package/dist/channels/slack/approvals.d.ts.map +1 -0
  48. package/dist/channels/slack/approvals.js +157 -0
  49. package/dist/channels/slack/assistant.d.ts +23 -0
  50. package/dist/channels/slack/assistant.d.ts.map +1 -0
  51. package/dist/channels/slack/assistant.js +67 -0
  52. package/dist/channels/slack/auth.d.ts +40 -0
  53. package/dist/channels/slack/auth.d.ts.map +1 -0
  54. package/dist/channels/slack/auth.js +71 -0
  55. package/dist/channels/slack/channel-watch.d.ts +46 -0
  56. package/dist/channels/slack/channel-watch.d.ts.map +1 -0
  57. package/dist/channels/slack/channel-watch.js +180 -0
  58. package/dist/channels/slack/constants.d.ts +17 -0
  59. package/dist/channels/slack/constants.d.ts.map +1 -0
  60. package/dist/channels/slack/constants.js +27 -0
  61. package/dist/channels/slack/credentials.d.ts +35 -0
  62. package/dist/channels/slack/credentials.d.ts.map +1 -0
  63. package/dist/channels/slack/credentials.js +88 -0
  64. package/dist/channels/slack/cursor-account.d.ts +76 -0
  65. package/dist/channels/slack/cursor-account.d.ts.map +1 -0
  66. package/dist/channels/slack/cursor-account.js +88 -0
  67. package/dist/channels/slack/defaults.d.ts +32 -0
  68. package/dist/channels/slack/defaults.d.ts.map +1 -0
  69. package/dist/channels/slack/defaults.js +380 -0
  70. package/dist/channels/slack/dispatch.d.ts +43 -0
  71. package/dist/channels/slack/dispatch.d.ts.map +1 -0
  72. package/dist/channels/slack/dispatch.js +185 -0
  73. package/dist/channels/slack/doctor.d.ts +24 -0
  74. package/dist/channels/slack/doctor.d.ts.map +1 -0
  75. package/dist/channels/slack/doctor.js +115 -0
  76. package/dist/channels/slack/event-id-dedupe.d.ts +10 -0
  77. package/dist/channels/slack/event-id-dedupe.d.ts.map +1 -0
  78. package/dist/channels/slack/event-id-dedupe.js +23 -0
  79. package/dist/channels/slack/inbound.d.ts +41 -0
  80. package/dist/channels/slack/inbound.d.ts.map +1 -0
  81. package/dist/channels/slack/inbound.js +166 -0
  82. package/dist/channels/slack/index.d.ts +45 -0
  83. package/dist/channels/slack/index.d.ts.map +1 -0
  84. package/dist/channels/slack/index.js +44 -0
  85. package/dist/channels/slack/init.d.ts +32 -0
  86. package/dist/channels/slack/init.d.ts.map +1 -0
  87. package/dist/channels/slack/init.js +82 -0
  88. package/dist/channels/slack/interactive.d.ts +19 -0
  89. package/dist/channels/slack/interactive.d.ts.map +1 -0
  90. package/dist/channels/slack/interactive.js +142 -0
  91. package/dist/channels/slack/links.d.ts +10 -0
  92. package/dist/channels/slack/links.d.ts.map +1 -0
  93. package/dist/channels/slack/links.js +19 -0
  94. package/dist/channels/slack/live-delivery.d.ts +75 -0
  95. package/dist/channels/slack/live-delivery.d.ts.map +1 -0
  96. package/dist/channels/slack/live-delivery.js +143 -0
  97. package/dist/channels/slack/log.d.ts +25 -0
  98. package/dist/channels/slack/log.d.ts.map +1 -0
  99. package/dist/channels/slack/log.js +47 -0
  100. package/dist/channels/slack/manifest.d.ts +57 -0
  101. package/dist/channels/slack/manifest.d.ts.map +1 -0
  102. package/dist/channels/slack/manifest.js +110 -0
  103. package/dist/channels/slack/pr-ref.d.ts +18 -0
  104. package/dist/channels/slack/pr-ref.d.ts.map +1 -0
  105. package/dist/channels/slack/pr-ref.js +36 -0
  106. package/dist/channels/slack/setup.d.ts +14 -0
  107. package/dist/channels/slack/setup.d.ts.map +1 -0
  108. package/dist/channels/slack/setup.js +86 -0
  109. package/dist/channels/slack/slack-channel.d.ts +15 -0
  110. package/dist/channels/slack/slack-channel.d.ts.map +1 -0
  111. package/dist/channels/slack/slack-channel.js +281 -0
  112. package/dist/channels/slack/socket-mode.d.ts +26 -0
  113. package/dist/channels/slack/socket-mode.d.ts.map +1 -0
  114. package/dist/channels/slack/socket-mode.js +116 -0
  115. package/dist/channels/slack/stream.d.ts +26 -0
  116. package/dist/channels/slack/stream.d.ts.map +1 -0
  117. package/dist/channels/slack/stream.js +39 -0
  118. package/dist/channels/slack/tool-approval-events.d.ts +33 -0
  119. package/dist/channels/slack/tool-approval-events.d.ts.map +1 -0
  120. package/dist/channels/slack/tool-approval-events.js +129 -0
  121. package/dist/channels/slack/types.d.ts +326 -0
  122. package/dist/channels/slack/types.d.ts.map +1 -0
  123. package/dist/channels/slack/types.js +4 -0
  124. package/dist/channels.d.ts +116 -0
  125. package/dist/channels.d.ts.map +1 -0
  126. package/dist/channels.js +294 -0
  127. package/dist/connections.d.ts +75 -0
  128. package/dist/connections.d.ts.map +1 -0
  129. package/dist/connections.js +75 -0
  130. package/dist/docs/404.html +22 -0
  131. package/dist/docs/ab.html +87 -0
  132. package/dist/docs/assets/ab.md.COdXkces.js +63 -0
  133. package/dist/docs/assets/ab.md.COdXkces.lean.js +1 -0
  134. package/dist/docs/assets/app.DqfFEmJd.js +1 -0
  135. package/dist/docs/assets/building-with-agents.md.CJCtZCyi.js +13 -0
  136. package/dist/docs/assets/building-with-agents.md.CJCtZCyi.lean.js +1 -0
  137. package/dist/docs/assets/chunks/@localSearchIndexroot.CcVk1uKq.js +1 -0
  138. package/dist/docs/assets/chunks/VPLocalSearchBox.BaLEdS15.js +9 -0
  139. package/dist/docs/assets/chunks/framework.CAZyNGu9.js +19 -0
  140. package/dist/docs/assets/chunks/theme.CZRvu_0q.js +2 -0
  141. package/dist/docs/assets/concepts.md.Cfb9b-k1.js +4 -0
  142. package/dist/docs/assets/concepts.md.Cfb9b-k1.lean.js +1 -0
  143. package/dist/docs/assets/deployment.md.Dx1TYNk5.js +14 -0
  144. package/dist/docs/assets/deployment.md.Dx1TYNk5.lean.js +1 -0
  145. package/dist/docs/assets/evals.md.DPZ_MAnI.js +85 -0
  146. package/dist/docs/assets/evals.md.DPZ_MAnI.lean.js +1 -0
  147. package/dist/docs/assets/guides_agent-to-agent.md.CrtrsySy.js +10 -0
  148. package/dist/docs/assets/guides_agent-to-agent.md.CrtrsySy.lean.js +1 -0
  149. package/dist/docs/assets/guides_cloud-runtime.md.CYlNMTNp.js +9 -0
  150. package/dist/docs/assets/guides_cloud-runtime.md.CYlNMTNp.lean.js +1 -0
  151. package/dist/docs/assets/guides_github.md.DwbKhCeS.js +20 -0
  152. package/dist/docs/assets/guides_github.md.DwbKhCeS.lean.js +1 -0
  153. package/dist/docs/assets/guides_human-in-the-loop.md.Dvuctx7s.js +28 -0
  154. package/dist/docs/assets/guides_human-in-the-loop.md.Dvuctx7s.lean.js +1 -0
  155. package/dist/docs/assets/guides_slack.md.bv41fHfW.js +37 -0
  156. package/dist/docs/assets/guides_slack.md.bv41fHfW.lean.js +1 -0
  157. package/dist/docs/assets/guides_webhooks.md.hFTik3lf.js +50 -0
  158. package/dist/docs/assets/guides_webhooks.md.hFTik3lf.lean.js +1 -0
  159. package/dist/docs/assets/hillclimbing.md.DHNast08.js +4 -0
  160. package/dist/docs/assets/hillclimbing.md.DHNast08.lean.js +1 -0
  161. package/dist/docs/assets/index.md.BPKcj5AI.js +20 -0
  162. package/dist/docs/assets/index.md.BPKcj5AI.lean.js +1 -0
  163. package/dist/docs/assets/inter-italic-cyrillic-ext.r48I6akx.woff2 +0 -0
  164. package/dist/docs/assets/inter-italic-cyrillic.By2_1cv3.woff2 +0 -0
  165. package/dist/docs/assets/inter-italic-greek-ext.1u6EdAuj.woff2 +0 -0
  166. package/dist/docs/assets/inter-italic-greek.DJ8dCoTZ.woff2 +0 -0
  167. package/dist/docs/assets/inter-italic-latin-ext.CN1xVJS-.woff2 +0 -0
  168. package/dist/docs/assets/inter-italic-latin.C2AdPX0b.woff2 +0 -0
  169. package/dist/docs/assets/inter-italic-vietnamese.BSbpV94h.woff2 +0 -0
  170. package/dist/docs/assets/inter-roman-cyrillic-ext.BBPuwvHQ.woff2 +0 -0
  171. package/dist/docs/assets/inter-roman-cyrillic.C5lxZ8CY.woff2 +0 -0
  172. package/dist/docs/assets/inter-roman-greek-ext.CqjqNYQ-.woff2 +0 -0
  173. package/dist/docs/assets/inter-roman-greek.BBVDIX6e.woff2 +0 -0
  174. package/dist/docs/assets/inter-roman-latin-ext.4ZJIpNVo.woff2 +0 -0
  175. package/dist/docs/assets/inter-roman-latin.Di8DUHzh.woff2 +0 -0
  176. package/dist/docs/assets/inter-roman-vietnamese.BjW4sHH5.woff2 +0 -0
  177. package/dist/docs/assets/quickstart.md.tVPiGK_L.js +35 -0
  178. package/dist/docs/assets/quickstart.md.tVPiGK_L.lean.js +1 -0
  179. package/dist/docs/assets/reference_agent-config.md.Bpd7HQwf.js +34 -0
  180. package/dist/docs/assets/reference_agent-config.md.Bpd7HQwf.lean.js +1 -0
  181. package/dist/docs/assets/reference_channels.md.D7JTR03W.js +53 -0
  182. package/dist/docs/assets/reference_channels.md.D7JTR03W.lean.js +1 -0
  183. package/dist/docs/assets/reference_cli.md.DA730zCu.js +33 -0
  184. package/dist/docs/assets/reference_cli.md.DA730zCu.lean.js +1 -0
  185. package/dist/docs/assets/reference_connections.md.C3vNH_DE.js +26 -0
  186. package/dist/docs/assets/reference_connections.md.C3vNH_DE.lean.js +1 -0
  187. package/dist/docs/assets/reference_hooks.md.BCEc3MyM.js +12 -0
  188. package/dist/docs/assets/reference_hooks.md.BCEc3MyM.lean.js +1 -0
  189. package/dist/docs/assets/reference_http-api.md.DBAahtdz.js +11 -0
  190. package/dist/docs/assets/reference_http-api.md.DBAahtdz.lean.js +1 -0
  191. package/dist/docs/assets/reference_instructions.md.BC05LEQ8.js +12 -0
  192. package/dist/docs/assets/reference_instructions.md.BC05LEQ8.lean.js +1 -0
  193. package/dist/docs/assets/reference_playground.md.CPZhfYaO.js +1 -0
  194. package/dist/docs/assets/reference_playground.md.CPZhfYaO.lean.js +1 -0
  195. package/dist/docs/assets/reference_project-layout.md.Bd_CKtNS.js +31 -0
  196. package/dist/docs/assets/reference_project-layout.md.Bd_CKtNS.lean.js +1 -0
  197. package/dist/docs/assets/reference_schedules.md.D7qijxLk.js +82 -0
  198. package/dist/docs/assets/reference_schedules.md.D7qijxLk.lean.js +1 -0
  199. package/dist/docs/assets/reference_sessions.md.DdjWabnN.js +8 -0
  200. package/dist/docs/assets/reference_sessions.md.DdjWabnN.lean.js +1 -0
  201. package/dist/docs/assets/reference_skills.md.VQnlBT3Q.js +15 -0
  202. package/dist/docs/assets/reference_skills.md.VQnlBT3Q.lean.js +1 -0
  203. package/dist/docs/assets/reference_subagents.md.CIRAVcPK.js +10 -0
  204. package/dist/docs/assets/reference_subagents.md.CIRAVcPK.lean.js +1 -0
  205. package/dist/docs/assets/reference_tools.md.DF5kwlt0.js +46 -0
  206. package/dist/docs/assets/reference_tools.md.DF5kwlt0.lean.js +1 -0
  207. package/dist/docs/assets/scaffolding-agents.md.CyYfWGdc.js +1 -0
  208. package/dist/docs/assets/scaffolding-agents.md.CyYfWGdc.lean.js +1 -0
  209. package/dist/docs/assets/style.Bj-IXa5W.css +1 -0
  210. package/dist/docs/assets/troubleshooting.md.DkovjS7h.js +1 -0
  211. package/dist/docs/assets/troubleshooting.md.DkovjS7h.lean.js +1 -0
  212. package/dist/docs/building-with-agents.html +37 -0
  213. package/dist/docs/concepts.html +28 -0
  214. package/dist/docs/deployment.html +38 -0
  215. package/dist/docs/evals.html +109 -0
  216. package/dist/docs/guides/agent-to-agent.html +34 -0
  217. package/dist/docs/guides/cloud-runtime.html +33 -0
  218. package/dist/docs/guides/github.html +44 -0
  219. package/dist/docs/guides/human-in-the-loop.html +52 -0
  220. package/dist/docs/guides/slack.html +61 -0
  221. package/dist/docs/guides/webhooks.html +74 -0
  222. package/dist/docs/hashmap.json +1 -0
  223. package/dist/docs/hillclimbing.html +28 -0
  224. package/dist/docs/index.html +44 -0
  225. package/dist/docs/quickstart.html +59 -0
  226. package/dist/docs/reference/agent-config.html +58 -0
  227. package/dist/docs/reference/channels.html +77 -0
  228. package/dist/docs/reference/cli.html +57 -0
  229. package/dist/docs/reference/connections.html +50 -0
  230. package/dist/docs/reference/hooks.html +36 -0
  231. package/dist/docs/reference/http-api.html +35 -0
  232. package/dist/docs/reference/instructions.html +36 -0
  233. package/dist/docs/reference/playground.html +25 -0
  234. package/dist/docs/reference/project-layout.html +55 -0
  235. package/dist/docs/reference/schedules.html +106 -0
  236. package/dist/docs/reference/sessions.html +32 -0
  237. package/dist/docs/reference/skills.html +39 -0
  238. package/dist/docs/reference/subagents.html +34 -0
  239. package/dist/docs/reference/tools.html +70 -0
  240. package/dist/docs/scaffolding-agents.html +25 -0
  241. package/dist/docs/troubleshooting.html +25 -0
  242. package/dist/docs/vp-icons.css +0 -0
  243. package/dist/evals.d.ts +312 -0
  244. package/dist/evals.d.ts.map +1 -0
  245. package/dist/evals.js +254 -0
  246. package/dist/hooks.d.ts +23 -0
  247. package/dist/hooks.d.ts.map +1 -0
  248. package/dist/hooks.js +23 -0
  249. package/dist/index.d.ts +71 -0
  250. package/dist/index.d.ts.map +1 -0
  251. package/dist/index.js +101 -0
  252. package/dist/internal/ab-collector.d.ts +42 -0
  253. package/dist/internal/ab-collector.d.ts.map +1 -0
  254. package/dist/internal/ab-collector.js +153 -0
  255. package/dist/internal/ab-fold.d.ts +36 -0
  256. package/dist/internal/ab-fold.d.ts.map +1 -0
  257. package/dist/internal/ab-fold.js +171 -0
  258. package/dist/internal/ab-snapshot.d.ts +70 -0
  259. package/dist/internal/ab-snapshot.d.ts.map +1 -0
  260. package/dist/internal/ab-snapshot.js +208 -0
  261. package/dist/internal/approval-gate.d.ts +34 -0
  262. package/dist/internal/approval-gate.d.ts.map +1 -0
  263. package/dist/internal/approval-gate.js +85 -0
  264. package/dist/internal/auth.d.ts +8 -0
  265. package/dist/internal/auth.d.ts.map +1 -0
  266. package/dist/internal/auth.js +27 -0
  267. package/dist/internal/authored-alias-hooks.d.ts +31 -0
  268. package/dist/internal/authored-alias-hooks.d.ts.map +1 -0
  269. package/dist/internal/authored-alias-hooks.js +43 -0
  270. package/dist/internal/authored-loaders.d.ts +25 -0
  271. package/dist/internal/authored-loaders.d.ts.map +1 -0
  272. package/dist/internal/authored-loaders.js +129 -0
  273. package/dist/internal/bounded-int.d.ts +11 -0
  274. package/dist/internal/bounded-int.d.ts.map +1 -0
  275. package/dist/internal/bounded-int.js +13 -0
  276. package/dist/internal/brand.d.ts +6 -0
  277. package/dist/internal/brand.d.ts.map +1 -0
  278. package/dist/internal/brand.js +17 -0
  279. package/dist/internal/chat-client.d.ts +19 -0
  280. package/dist/internal/chat-client.d.ts.map +1 -0
  281. package/dist/internal/chat-client.js +327 -0
  282. package/dist/internal/cli-ax.d.ts +58 -0
  283. package/dist/internal/cli-ax.d.ts.map +1 -0
  284. package/dist/internal/cli-ax.js +345 -0
  285. package/dist/internal/cli-cursor.d.ts +20 -0
  286. package/dist/internal/cli-cursor.d.ts.map +1 -0
  287. package/dist/internal/cli-cursor.js +227 -0
  288. package/dist/internal/cli-github.d.ts +47 -0
  289. package/dist/internal/cli-github.d.ts.map +1 -0
  290. package/dist/internal/cli-github.js +644 -0
  291. package/dist/internal/cli-slack.d.ts +18 -0
  292. package/dist/internal/cli-slack.d.ts.map +1 -0
  293. package/dist/internal/cli-slack.js +144 -0
  294. package/dist/internal/cloud-merge.d.ts +23 -0
  295. package/dist/internal/cloud-merge.d.ts.map +1 -0
  296. package/dist/internal/cloud-merge.js +28 -0
  297. package/dist/internal/cron.d.ts +17 -0
  298. package/dist/internal/cron.d.ts.map +1 -0
  299. package/dist/internal/cron.js +60 -0
  300. package/dist/internal/cursor/account-mcp.d.ts +95 -0
  301. package/dist/internal/cursor/account-mcp.d.ts.map +1 -0
  302. package/dist/internal/cursor/account-mcp.js +342 -0
  303. package/dist/internal/cursor/backend-client.d.ts +118 -0
  304. package/dist/internal/cursor/backend-client.d.ts.map +1 -0
  305. package/dist/internal/cursor/backend-client.js +477 -0
  306. package/dist/internal/cursor/credentials.d.ts +112 -0
  307. package/dist/internal/cursor/credentials.d.ts.map +1 -0
  308. package/dist/internal/cursor/credentials.js +329 -0
  309. package/dist/internal/cursor-event-relay.d.ts +111 -0
  310. package/dist/internal/cursor-event-relay.d.ts.map +1 -0
  311. package/dist/internal/cursor-event-relay.js +181 -0
  312. package/dist/internal/cursor-relay-core.d.ts +113 -0
  313. package/dist/internal/cursor-relay-core.d.ts.map +1 -0
  314. package/dist/internal/cursor-relay-core.js +364 -0
  315. package/dist/internal/cursor-slack-relay.d.ts +94 -0
  316. package/dist/internal/cursor-slack-relay.d.ts.map +1 -0
  317. package/dist/internal/cursor-slack-relay.js +171 -0
  318. package/dist/internal/describe-error.d.ts +3 -0
  319. package/dist/internal/describe-error.d.ts.map +1 -0
  320. package/dist/internal/describe-error.js +4 -0
  321. package/dist/internal/dev-mode.d.ts +13 -0
  322. package/dist/internal/dev-mode.d.ts.map +1 -0
  323. package/dist/internal/dev-mode.js +17 -0
  324. package/dist/internal/discovery.d.ts +55 -0
  325. package/dist/internal/discovery.d.ts.map +1 -0
  326. package/dist/internal/discovery.js +1427 -0
  327. package/dist/internal/distribution.d.ts +47 -0
  328. package/dist/internal/distribution.d.ts.map +1 -0
  329. package/dist/internal/distribution.js +82 -0
  330. package/dist/internal/docs-site.d.ts +28 -0
  331. package/dist/internal/docs-site.d.ts.map +1 -0
  332. package/dist/internal/docs-site.js +169 -0
  333. package/dist/internal/duration.d.ts +8 -0
  334. package/dist/internal/duration.d.ts.map +1 -0
  335. package/dist/internal/duration.js +35 -0
  336. package/dist/internal/eval-run-store.d.ts +81 -0
  337. package/dist/internal/eval-run-store.d.ts.map +1 -0
  338. package/dist/internal/eval-run-store.js +396 -0
  339. package/dist/internal/eval-runner.d.ts +76 -0
  340. package/dist/internal/eval-runner.d.ts.map +1 -0
  341. package/dist/internal/eval-runner.js +336 -0
  342. package/dist/internal/event-log.d.ts +51 -0
  343. package/dist/internal/event-log.d.ts.map +1 -0
  344. package/dist/internal/event-log.js +167 -0
  345. package/dist/internal/event-mapper.d.ts +46 -0
  346. package/dist/internal/event-mapper.d.ts.map +1 -0
  347. package/dist/internal/event-mapper.js +226 -0
  348. package/dist/internal/frontmatter.d.ts +12 -0
  349. package/dist/internal/frontmatter.d.ts.map +1 -0
  350. package/dist/internal/frontmatter.js +61 -0
  351. package/dist/internal/github-fanout.d.ts +32 -0
  352. package/dist/internal/github-fanout.d.ts.map +1 -0
  353. package/dist/internal/github-fanout.js +122 -0
  354. package/dist/internal/handleAgentServeTrigger.d.ts +59 -0
  355. package/dist/internal/handleAgentServeTrigger.d.ts.map +1 -0
  356. package/dist/internal/handleAgentServeTrigger.js +115 -0
  357. package/dist/internal/host-platforms.d.ts +40 -0
  358. package/dist/internal/host-platforms.d.ts.map +1 -0
  359. package/dist/internal/host-platforms.js +113 -0
  360. package/dist/internal/http-channel.d.ts +54 -0
  361. package/dist/internal/http-channel.d.ts.map +1 -0
  362. package/dist/internal/http-channel.js +382 -0
  363. package/dist/internal/ids.d.ts +19 -0
  364. package/dist/internal/ids.d.ts.map +1 -0
  365. package/dist/internal/ids.js +34 -0
  366. package/dist/internal/init-project.d.ts +22 -0
  367. package/dist/internal/init-project.d.ts.map +1 -0
  368. package/dist/internal/init-project.js +125 -0
  369. package/dist/internal/json-dir-store.d.ts +32 -0
  370. package/dist/internal/json-dir-store.d.ts.map +1 -0
  371. package/dist/internal/json-dir-store.js +100 -0
  372. package/dist/internal/json-schema.d.ts +18 -0
  373. package/dist/internal/json-schema.d.ts.map +1 -0
  374. package/dist/internal/json-schema.js +53 -0
  375. package/dist/internal/log-ring.d.ts +23 -0
  376. package/dist/internal/log-ring.d.ts.map +1 -0
  377. package/dist/internal/log-ring.js +42 -0
  378. package/dist/internal/map-pool.d.ts +6 -0
  379. package/dist/internal/map-pool.d.ts.map +1 -0
  380. package/dist/internal/map-pool.js +41 -0
  381. package/dist/internal/mcp-endpoint.d.ts +59 -0
  382. package/dist/internal/mcp-endpoint.d.ts.map +1 -0
  383. package/dist/internal/mcp-endpoint.js +355 -0
  384. package/dist/internal/mcp-host.d.ts +28 -0
  385. package/dist/internal/mcp-host.d.ts.map +1 -0
  386. package/dist/internal/mcp-host.js +162 -0
  387. package/dist/internal/net.d.ts +5 -0
  388. package/dist/internal/net.d.ts.map +1 -0
  389. package/dist/internal/net.js +30 -0
  390. package/dist/internal/peer-connections.d.ts +44 -0
  391. package/dist/internal/peer-connections.d.ts.map +1 -0
  392. package/dist/internal/peer-connections.js +67 -0
  393. package/dist/internal/playground/static.d.ts +35 -0
  394. package/dist/internal/playground/static.d.ts.map +1 -0
  395. package/dist/internal/playground/static.js +162 -0
  396. package/dist/internal/playground/toolchain.d.ts +57 -0
  397. package/dist/internal/playground/toolchain.d.ts.map +1 -0
  398. package/dist/internal/playground/toolchain.js +226 -0
  399. package/dist/internal/reminder-runner.d.ts +62 -0
  400. package/dist/internal/reminder-runner.d.ts.map +1 -0
  401. package/dist/internal/reminder-runner.js +582 -0
  402. package/dist/internal/reminder-schedule.d.ts +22 -0
  403. package/dist/internal/reminder-schedule.d.ts.map +1 -0
  404. package/dist/internal/reminder-schedule.js +82 -0
  405. package/dist/internal/reminder-store.d.ts +58 -0
  406. package/dist/internal/reminder-store.d.ts.map +1 -0
  407. package/dist/internal/reminder-store.js +106 -0
  408. package/dist/internal/resolved-connections.d.ts +41 -0
  409. package/dist/internal/resolved-connections.d.ts.map +1 -0
  410. package/dist/internal/resolved-connections.js +73 -0
  411. package/dist/internal/review-comments.d.ts +50 -0
  412. package/dist/internal/review-comments.d.ts.map +1 -0
  413. package/dist/internal/review-comments.js +194 -0
  414. package/dist/internal/router.d.ts +33 -0
  415. package/dist/internal/router.d.ts.map +1 -0
  416. package/dist/internal/router.js +93 -0
  417. package/dist/internal/run-client.d.ts +49 -0
  418. package/dist/internal/run-client.d.ts.map +1 -0
  419. package/dist/internal/run-client.js +208 -0
  420. package/dist/internal/schedule-runner.d.ts +31 -0
  421. package/dist/internal/schedule-runner.d.ts.map +1 -0
  422. package/dist/internal/schedule-runner.js +126 -0
  423. package/dist/internal/sdk-runner.d.ts +41 -0
  424. package/dist/internal/sdk-runner.d.ts.map +1 -0
  425. package/dist/internal/sdk-runner.js +221 -0
  426. package/dist/internal/server.d.ts +25 -0
  427. package/dist/internal/server.d.ts.map +1 -0
  428. package/dist/internal/server.js +1374 -0
  429. package/dist/internal/session-engine.d.ts +287 -0
  430. package/dist/internal/session-engine.d.ts.map +1 -0
  431. package/dist/internal/session-engine.js +1377 -0
  432. package/dist/internal/session-store.d.ts +29 -0
  433. package/dist/internal/session-store.d.ts.map +1 -0
  434. package/dist/internal/session-store.js +140 -0
  435. package/dist/internal/session-urls.d.ts +10 -0
  436. package/dist/internal/session-urls.d.ts.map +1 -0
  437. package/dist/internal/session-urls.js +25 -0
  438. package/dist/internal/stream-progress.d.ts +14 -0
  439. package/dist/internal/stream-progress.d.ts.map +1 -0
  440. package/dist/internal/stream-progress.js +195 -0
  441. package/dist/internal/tool-result.d.ts +20 -0
  442. package/dist/internal/tool-result.d.ts.map +1 -0
  443. package/dist/internal/tool-result.js +45 -0
  444. package/dist/internal/trajectory.d.ts +56 -0
  445. package/dist/internal/trajectory.d.ts.map +1 -0
  446. package/dist/internal/trajectory.js +248 -0
  447. package/dist/internal/workspace.d.ts +42 -0
  448. package/dist/internal/workspace.d.ts.map +1 -0
  449. package/dist/internal/workspace.js +199 -0
  450. package/dist/playground/assets/cursor-icons-outline-oY2V_mvK.woff2 +0 -0
  451. package/dist/playground/assets/index-1K-hG-7p.css +1 -0
  452. package/dist/playground/assets/index-FlWjhg3x.js +79 -0
  453. package/dist/playground/index.html +17 -0
  454. package/dist/reminders.d.ts +23 -0
  455. package/dist/reminders.d.ts.map +1 -0
  456. package/dist/reminders.js +22 -0
  457. package/dist/schedules.d.ts +23 -0
  458. package/dist/schedules.d.ts.map +1 -0
  459. package/dist/schedules.js +26 -0
  460. package/dist/skills.d.ts +22 -0
  461. package/dist/skills.d.ts.map +1 -0
  462. package/dist/skills.js +22 -0
  463. package/dist/tools.d.ts +92 -0
  464. package/dist/tools.d.ts.map +1 -0
  465. package/dist/tools.js +68 -0
  466. package/dist/types.d.ts +1609 -0
  467. package/dist/types.d.ts.map +1 -0
  468. package/dist/types.js +80 -0
  469. package/docs/README.md +174 -0
  470. package/docs/ab.md +355 -0
  471. package/docs/building-with-agents.md +129 -0
  472. package/docs/concepts.md +177 -0
  473. package/docs/deployment.md +218 -0
  474. package/docs/evals.md +383 -0
  475. package/docs/guides/agent-to-agent.md +118 -0
  476. package/docs/guides/cloud-runtime.md +122 -0
  477. package/docs/guides/github.md +172 -0
  478. package/docs/guides/human-in-the-loop.md +131 -0
  479. package/docs/guides/slack.md +245 -0
  480. package/docs/guides/webhooks.md +201 -0
  481. package/docs/hillclimbing.md +93 -0
  482. package/docs/quickstart.md +183 -0
  483. package/docs/reference/agent-config.md +154 -0
  484. package/docs/reference/channels.md +206 -0
  485. package/docs/reference/cli.md +257 -0
  486. package/docs/reference/connections.md +137 -0
  487. package/docs/reference/hooks.md +74 -0
  488. package/docs/reference/http-api.md +219 -0
  489. package/docs/reference/instructions.md +77 -0
  490. package/docs/reference/playground.md +67 -0
  491. package/docs/reference/project-layout.md +119 -0
  492. package/docs/reference/schedules.md +220 -0
  493. package/docs/reference/sessions.md +165 -0
  494. package/docs/reference/skills.md +79 -0
  495. package/docs/reference/subagents.md +74 -0
  496. package/docs/reference/tools.md +203 -0
  497. package/docs/scaffolding-agents.md +113 -0
  498. package/docs/troubleshooting.md +95 -0
  499. package/package.json +185 -0
  500. package/skills/ab/SKILL.md +139 -0
  501. package/skills/create-agent/SKILL.md +219 -0
  502. package/skills/debug/SKILL.md +71 -0
  503. package/skills/evals/SKILL.md +217 -0
  504. package/skills/framework-map/SKILL.md +142 -0
  505. package/skills/github/SKILL.md +144 -0
  506. package/skills/hillclimb/SKILL.md +162 -0
  507. package/skills/setup-slack/SKILL.md +180 -0
  508. package/src/ab.ts +675 -0
  509. package/src/bin/agent-serve.ts +949 -0
  510. package/src/channels/github/api.ts +374 -0
  511. package/src/channels/github/auth.ts +275 -0
  512. package/src/channels/github/binding.ts +223 -0
  513. package/src/channels/github/defaults.ts +111 -0
  514. package/src/channels/github/events.ts +72 -0
  515. package/src/channels/github/forward.ts +381 -0
  516. package/src/channels/github/github-channel.ts +2270 -0
  517. package/src/channels/github/index.ts +52 -0
  518. package/src/channels/github/replay.ts +387 -0
  519. package/src/channels/github/state.ts +95 -0
  520. package/src/channels/github/types.ts +490 -0
  521. package/src/channels/slack/api.ts +580 -0
  522. package/src/channels/slack/approvals.ts +198 -0
  523. package/src/channels/slack/assistant.ts +76 -0
  524. package/src/channels/slack/auth.ts +112 -0
  525. package/src/channels/slack/channel-watch.ts +219 -0
  526. package/src/channels/slack/constants.ts +30 -0
  527. package/src/channels/slack/credentials.ts +90 -0
  528. package/src/channels/slack/cursor-account.ts +166 -0
  529. package/src/channels/slack/defaults.ts +450 -0
  530. package/src/channels/slack/dispatch.ts +293 -0
  531. package/src/channels/slack/doctor.ts +135 -0
  532. package/src/channels/slack/event-id-dedupe.ts +30 -0
  533. package/src/channels/slack/inbound.ts +219 -0
  534. package/src/channels/slack/index.ts +45 -0
  535. package/src/channels/slack/init.ts +133 -0
  536. package/src/channels/slack/interactive.ts +194 -0
  537. package/src/channels/slack/links.ts +23 -0
  538. package/src/channels/slack/live-delivery.ts +201 -0
  539. package/src/channels/slack/log.ts +83 -0
  540. package/src/channels/slack/manifest.ts +179 -0
  541. package/src/channels/slack/pr-ref.ts +50 -0
  542. package/src/channels/slack/setup.ts +97 -0
  543. package/src/channels/slack/slack-channel.ts +374 -0
  544. package/src/channels/slack/socket-mode.ts +154 -0
  545. package/src/channels/slack/stream.ts +63 -0
  546. package/src/channels/slack/tool-approval-events.ts +136 -0
  547. package/src/channels/slack/types.ts +349 -0
  548. package/src/channels.ts +385 -0
  549. package/src/connections.ts +89 -0
  550. package/src/evals.ts +501 -0
  551. package/src/hooks.ts +33 -0
  552. package/src/index.ts +184 -0
  553. package/src/internal/ab-collector.ts +210 -0
  554. package/src/internal/ab-fold.ts +228 -0
  555. package/src/internal/ab-snapshot.ts +335 -0
  556. package/src/internal/approval-gate.ts +115 -0
  557. package/src/internal/auth.ts +39 -0
  558. package/src/internal/authored-alias-hooks.ts +69 -0
  559. package/src/internal/authored-loaders.ts +138 -0
  560. package/src/internal/bounded-int.ts +27 -0
  561. package/src/internal/brand.ts +29 -0
  562. package/src/internal/chat-client.ts +407 -0
  563. package/src/internal/cli-ax.ts +474 -0
  564. package/src/internal/cli-cursor.ts +275 -0
  565. package/src/internal/cli-github.ts +849 -0
  566. package/src/internal/cli-slack.ts +175 -0
  567. package/src/internal/cloud-merge.ts +41 -0
  568. package/src/internal/cron.ts +78 -0
  569. package/src/internal/cursor/account-mcp.ts +472 -0
  570. package/src/internal/cursor/backend-client.ts +614 -0
  571. package/src/internal/cursor/credentials.ts +401 -0
  572. package/src/internal/cursor-event-relay.ts +281 -0
  573. package/src/internal/cursor-relay-core.ts +444 -0
  574. package/src/internal/cursor-slack-relay.ts +242 -0
  575. package/src/internal/describe-error.ts +4 -0
  576. package/src/internal/dev-mode.ts +20 -0
  577. package/src/internal/discovery.ts +1709 -0
  578. package/src/internal/distribution.ts +97 -0
  579. package/src/internal/docs-site.ts +191 -0
  580. package/src/internal/duration.ts +39 -0
  581. package/src/internal/eval-run-store.ts +519 -0
  582. package/src/internal/eval-runner.ts +522 -0
  583. package/src/internal/event-log.ts +175 -0
  584. package/src/internal/event-mapper.ts +272 -0
  585. package/src/internal/frontmatter.ts +77 -0
  586. package/src/internal/github-fanout.ts +159 -0
  587. package/src/internal/handleAgentServeTrigger.ts +156 -0
  588. package/src/internal/host-platforms.ts +144 -0
  589. package/src/internal/http-channel.ts +546 -0
  590. package/src/internal/ids.ts +44 -0
  591. package/src/internal/init-project.ts +165 -0
  592. package/src/internal/json-dir-store.ts +109 -0
  593. package/src/internal/json-schema.ts +69 -0
  594. package/src/internal/log-ring.ts +59 -0
  595. package/src/internal/map-pool.ts +32 -0
  596. package/src/internal/mcp-endpoint.ts +518 -0
  597. package/src/internal/mcp-host.ts +211 -0
  598. package/src/internal/net.ts +31 -0
  599. package/src/internal/peer-connections.ts +100 -0
  600. package/src/internal/playground/static.ts +189 -0
  601. package/src/internal/playground/toolchain.ts +277 -0
  602. package/src/internal/reminder-runner.ts +756 -0
  603. package/src/internal/reminder-schedule.ts +106 -0
  604. package/src/internal/reminder-store.ts +145 -0
  605. package/src/internal/resolved-connections.ts +145 -0
  606. package/src/internal/review-comments.ts +268 -0
  607. package/src/internal/router.ts +145 -0
  608. package/src/internal/run-client.ts +320 -0
  609. package/src/internal/schedule-runner.ts +161 -0
  610. package/src/internal/sdk-runner.ts +315 -0
  611. package/src/internal/server.ts +1737 -0
  612. package/src/internal/session-engine.ts +1810 -0
  613. package/src/internal/session-store.ts +147 -0
  614. package/src/internal/session-urls.ts +40 -0
  615. package/src/internal/stream-progress.ts +254 -0
  616. package/src/internal/tool-result.ts +54 -0
  617. package/src/internal/trajectory.ts +306 -0
  618. package/src/internal/workspace.ts +223 -0
  619. package/src/reminders.ts +35 -0
  620. package/src/schedules.ts +37 -0
  621. package/src/skills.ts +27 -0
  622. package/src/tools.ts +127 -0
  623. package/src/types.ts +1848 -0
@@ -0,0 +1,203 @@
1
+ ---
2
+ title: "Tools"
3
+ description: "Define typed actions the model can call, gate the sensitive ones on approval, and call any server tool without a model turn."
4
+ ---
5
+
6
+ # Tools
7
+
8
+ A tool is a typed action the model can call: hit an API, run a query,
9
+ write a file. Each file in `agent/tools/` defines one tool, and the
10
+ filename becomes the tool name the model sees. Tools come in two
11
+ execution flavors: server tools run in-process on the serve host, and
12
+ agent tools run as scripts where the agent runs. Every server tool can
13
+ also be called directly, with no model turn.
14
+
15
+ ## Define a server tool
16
+
17
+ By default, `execute` runs in-process on the serving host with full
18
+ access to `process.env` and your `agent/lib/` code. Server tools require
19
+ the `local` runtime.
20
+
21
+ ```ts
22
+ // agent/tools/inspect_pr.ts
23
+ import { defineTool } from "@cursor/july/tools";
24
+ import { z } from "zod";
25
+
26
+ export default defineTool({
27
+ description: "Inspect a pull request before approval.",
28
+ // execution: "server" is the default
29
+ inputSchema: z.object({ prUrl: z.string().url() }),
30
+ async execute({ prUrl }, ctx) {
31
+ return { prUrl, checks: ["unit", "lint"], ready: true };
32
+ },
33
+ });
34
+ ```
35
+
36
+ A tool definition needs a filename slug (the model-facing name), a
37
+ `description` written for the model, an optional `inputSchema`, and the
38
+ code that runs it. With a Zod `inputSchema`, the input is validated before
39
+ `execute` runs and the input type is inferred. A plain JSON Schema
40
+ object is forwarded as-is and the input arrives as raw JSON.
41
+
42
+ ### The `ctx` parameter
43
+
44
+ `execute` receives a `ctx` with the runtime accessors:
45
+
46
+ | Member | What it is |
47
+ | --- | --- |
48
+ | `ctx.toolCallId` | The call id, matching the `actions.requested` / `action.result` stream events |
49
+ | `ctx.session` | Read-only session info: id, channel, mode, auth |
50
+ | `ctx.workspaceDir` | The session's workspace directory |
51
+ | `ctx.host.mcp` | Authored MCP connections: `names()`, `listTools(name)`, `callTool(name, tool, args)` |
52
+ | `ctx.host.github` / `ctx.host.slack` | Shared host clients when those packs are configured |
53
+
54
+ ### Return values
55
+
56
+ `execute` may return a string (passed to the model verbatim), a
57
+ JSON-shaped value (serialized), or the envelope
58
+ `{ content: [...], isError? }` for rich results. Returns must be
59
+ JSON-shaped: use object literals or `type` aliases. An `interface` type
60
+ fails assignability (no index signature), and tsx won't catch it. Your
61
+ typecheck will.
62
+
63
+ Throwing inside `execute` reports an error result to the model
64
+ (`isError: true`). The turn and the server keep running.
65
+
66
+ ## Define an agent tool
67
+
68
+ Set `execution: "agent"` and the tool materializes as a shell script
69
+ that runs where the Cursor agent runs: the local harness workspace or
70
+ the cloud VM. The script receives JSON arguments on stdin and prints its
71
+ result on stdout. This is the only tool flavor available to
72
+ `runtime: "cloud"` agents.
73
+
74
+ ```ts
75
+ import { defineTool } from "@cursor/july/tools";
76
+ import { z } from "zod";
77
+
78
+ export default defineTool({
79
+ description: "Echo a message from the agent workspace.",
80
+ execution: "agent",
81
+ inputSchema: z.object({ message: z.string() }),
82
+ script: `#!/usr/bin/env bash
83
+ set -euo pipefail
84
+ message=$(python3 -c 'import json,sys; print(json.load(sys.stdin)["message"])')
85
+ printf '%s\\n' "$message"
86
+ `,
87
+ });
88
+ ```
89
+
90
+ On the local runtime, scripts land under `.agentkit/tools/` in the
91
+ session workspace with a catalog in `AGENTS.md`. On cloud, the catalog
92
+ and script bodies travel on the first prompt.
93
+
94
+ ## Gate a tool on human approval
95
+
96
+ A server tool can require a person to sign off before it runs. Set
97
+ `needsApproval` to `true`, or to a predicate over the validated input:
98
+
99
+ ```ts
100
+ export default defineTool({
101
+ description: "Promote a verified build to an environment.",
102
+ needsApproval: true, // or: (input) => input.environment === "production"
103
+ inputSchema: z.object({
104
+ service: z.string(),
105
+ buildId: z.string(),
106
+ environment: z.string(),
107
+ }),
108
+ async execute({ service, buildId, environment }) {
109
+ return { promoted: true, service, buildId, environment };
110
+ },
111
+ });
112
+ ```
113
+
114
+ The call parks, the turn stays running, and the stream emits
115
+ `action.approval_requested` until someone resolves it from the
116
+ playground, `POST /v1/session/:id/approvals/:callId`, or Slack
117
+ Approve/Deny cards. Approvals exist for server tools on the local
118
+ runtime only, and parked calls don't survive a host restart. The full
119
+ lifecycle is in [Human-in-the-loop](../guides/human-in-the-loop.md).
120
+
121
+ ## Call a tool without a model turn
122
+
123
+ Server tools can be called deterministically. You pick the tool and the
124
+ input. Validation and execution behave exactly as they would for a
125
+ model-initiated call, and no Cursor API key is needed.
126
+
127
+ Over HTTP, with the same auth chain as the session API:
128
+
129
+ ```bash
130
+ curl -X POST http://127.0.0.1:3000/<slug>/v1/tools/inspect_pr \
131
+ -H 'content-type: application/json' \
132
+ -d '{"input":{"prUrl":"https://github.com/acme/checkout/pull/42"}}'
133
+ # {"ok":true,"toolName":"inspect_pr","callId":"tool_inspect_pr_…",
134
+ # "isError":false,"result":{…},"durationMs":12}
135
+ ```
136
+
137
+ From the CLI, which starts an ephemeral server unless `--url` targets
138
+ a running one:
139
+
140
+ ```bash
141
+ agentkit call inspect_pr --dir . \
142
+ --input '{"prUrl":"https://github.com/acme/checkout/pull/42"}'
143
+ agentkit call inspect_pr \
144
+ --url http://127.0.0.1:3000/<slug> \
145
+ --input '{"prUrl":"https://github.com/acme/checkout/pull/42"}'
146
+ ```
147
+
148
+ Programmatically, `callTool(toolName, input, options?)` is available on
149
+ the serve handle, on channel route handlers and `onStart` args, and on
150
+ schedule `run` handlers, so a channel can mix deterministic calls with
151
+ model turns, fetching PR metadata deterministically and then `send()`ing
152
+ the review prompt:
153
+
154
+ ```ts
155
+ const outcome = await handle.callTool("inspect_pr", {
156
+ prUrl: "https://github.com/acme/checkout/pull/42",
157
+ });
158
+ // { toolName, callId, isError, result, durationMs }
159
+ ```
160
+
161
+ By default the call runs against an ephemeral scratch workspace under
162
+ `<stateRoot>/tool-calls/<callId>`, materialized like a session workspace
163
+ and removed when the call returns. Pass a `sessionId` (a body field over
164
+ HTTP, `--session` on the CLI, `options.sessionId` programmatically) to
165
+ run inside an existing session instead: the tool sees that session's
166
+ workspace, and the call is recorded on the session's event stream under
167
+ a per-call `turnId`, visible in the playground and trajectories like
168
+ any model-initiated call. Session-bound calls serialize with model
169
+ turns and return `409 session_busy` while a turn runs.
170
+
171
+ The error semantics match the model path. Unknown tools are rejected
172
+ with the available names, agent-execution tools cannot be called on the
173
+ host (`400`), schema-invalid input is a `400` before the tool body runs
174
+ (Zod validates; plain JSON Schema passes through unvalidated), and a
175
+ tool body that throws reports `isError: true` in the same envelope the
176
+ model would see.
177
+
178
+ ## Design habits
179
+
180
+ Keep one decision per tool. Small tools with crisp descriptions beat
181
+ multi-purpose tools with mode flags. The model chooses better and evals
182
+ gate cleaner.
183
+
184
+ Put deterministic policy in tool code, not model judgment. A PR-approval
185
+ tool should re-read the live PR inside the tool before acting, so a
186
+ spoofed payload can't steer it.
187
+
188
+ Test tools with `call` before blaming prompts. If the tool's output is
189
+ wrong, no instruction change fixes it.
190
+
191
+ And gate side effects: `needsApproval` for the calls that need a
192
+ person's sign-off, and dry-run defaults flipped by an env var for
193
+ anything destructive.
194
+
195
+ ## What's next
196
+
197
+ Continue with these pages:
198
+
199
+ - [Human-in-the-loop](../guides/human-in-the-loop.md): the approval
200
+ lifecycle in full
201
+ - [MCP connections](./connections.md): tools that come from MCP servers
202
+ instead
203
+ - [Evals](../evals.md): gating tool decisions with `calledTool`
@@ -0,0 +1,113 @@
1
+ ---
2
+ title: "Scaffold an agent with Cursor"
3
+ description: "Use the bundled create-agent skill to plan, build, and verify a new agent."
4
+ ---
5
+
6
+ # Scaffold an agent with Cursor
7
+
8
+ Turn an idea into a verified agent while Cursor guides you through each
9
+ decision.
10
+
11
+ ## What does the create-agent skill do?
12
+
13
+ The bundled
14
+ [`create-agent` skill](../skills/create-agent/SKILL.md) turns your goal
15
+ into a small working project. Have Cursor read that file and follow it
16
+ (monorepo path: `packages/agent-serve/skills/create-agent/SKILL.md`).
17
+
18
+ Cursor will:
19
+
20
+ - Ask only for choices missing from your prompt
21
+ - Recommend defaults based on what you want to build
22
+ - Show you the plan and file tree before writing files
23
+ - Create the agent after you confirm the plan
24
+ - Run structural checks, a real turn, and a smoke eval
25
+
26
+ Use this skill for a new agent. Use
27
+ [`hillclimb`](./hillclimbing.md) (`skills/hillclimb/SKILL.md`) when an
28
+ existing agent works but needs better results.
29
+
30
+ ## How do I start a guided scaffold?
31
+
32
+ Describe the outcome and any constraints you already know:
33
+
34
+ > Build a local weather agent for the playground. Give it one tool for
35
+ > current conditions and add a smoke eval. Guide me through the remaining
36
+ > decisions.
37
+
38
+ More detail means fewer questions. Include a channel, runtime, model, or
39
+ required integration when those choices are fixed.
40
+
41
+ ## Which choices will Cursor ask me to make?
42
+
43
+ Cursor fills gaps in two short rounds:
44
+
45
+ - **Identity:** purpose, project name, and location
46
+ - **Runtime:** local or cloud
47
+ - **Model:** the default model or another Cursor model
48
+ - **Channels:** playground and HTTP, Slack, GitHub, a webhook, or a
49
+ schedule
50
+ - **MCP connections:** remote or local MCP servers
51
+ - **Capabilities:** tools, skills, subagents, hooks, seed files,
52
+ approvals, and evals
53
+
54
+ Questions adapt to your goal. A playground chat agent won't get
55
+ cloud-repository questions. A local agent won't get cloud setup
56
+ questions.
57
+
58
+ ## What happens before Cursor writes files?
59
+
60
+ Cursor shows one plan with the choices it made and the folders it will
61
+ create. Choose **Scaffold it** to continue or **Adjust something** to
62
+ change the plan.
63
+
64
+ No files change before you approve this step.
65
+
66
+ ## What will Cursor create?
67
+
68
+ A first version usually includes:
69
+
70
+ - `agent/agent.ts` for the model and runtime
71
+ - `agent/instructions.md` for the always-on prompt
72
+ - One or two tools under `agent/tools/`
73
+ - Any channels or MCP connections you selected
74
+ - `evals/evals.config.ts` and one smoke eval
75
+
76
+ Cursor keeps the first version small. Side-effecting server tools use
77
+ `needsApproval`. Deterministic setup, such as fetching a pull request,
78
+ stays in host code instead of model instructions.
79
+
80
+ See [Project layout](./reference/project-layout.md) for every supported
81
+ folder.
82
+
83
+ ## How does Cursor verify the scaffold?
84
+
85
+ Cursor checks the project in this order:
86
+
87
+ 1. Run `agentkit validate` and fix every error
88
+ 2. Inspect the discovered surface with `info --json`
89
+ 3. Call each server tool directly with validated sample input
90
+ 4. Run one end-to-end model turn
91
+ 5. Run the smoke eval
92
+ 6. Run the project's TypeScript check
93
+
94
+ Validation, discovery, direct server-tool calls, and server startup work
95
+ without a Cursor credential. Model turns and evals need
96
+ `CURSOR_API_KEY` or a saved `agentkit login`.
97
+
98
+ ## What happens after the first agent works?
99
+
100
+ Choose one to three fixed inputs, define what should improve, and name
101
+ what must stay unchanged. Then have Cursor follow
102
+ [`skills/hillclimb/SKILL.md`](../skills/hillclimb/SKILL.md).
103
+
104
+ The hillclimb skill measures a baseline, changes one lever, runs the same
105
+ inputs again, and adds an eval for each improvement you keep.
106
+
107
+ ## Related
108
+
109
+ - [Build your first weather agent](./quickstart.md)
110
+ - [Building agents with agents](./building-with-agents.md)
111
+ - [Evals](./evals.md)
112
+ - [Hillclimbing](./hillclimbing.md)
113
+ - [Project layout](./reference/project-layout.md)
@@ -0,0 +1,95 @@
1
+ ---
2
+ title: "Fix common agent problems"
3
+ description: "Match what you see to a cause, then read a session trace when you need more detail."
4
+ ---
5
+
6
+ # Fix common agent problems
7
+
8
+ Start with four checks, in order:
9
+
10
+ 1. Project discovery: `agentkit validate --dir .`
11
+ 2. Whether the serve process is running
12
+ 3. What the playground or HTTP API shows
13
+ 4. The session event stream (trace)
14
+
15
+ Match your symptom below. Keep the commands as `agentkit`; see
16
+ [Run the CLI](./README.md#run-the-cli) if you still need an alias.
17
+
18
+ ## What if serve or the playground looks wrong?
19
+
20
+ | What you see | What to do |
21
+ | --- | --- |
22
+ | `serve` won't start | Run `agentkit validate --dir .` and fix the reported errors. |
23
+ | Playground is blank or says there are no agents | The UI needs a running `serve` process. Building the playground assets alone is not enough. |
24
+ | Edits to the playground don't show up | Use `serve --dev` and open the printed playground HMR URL (often port `5273`), not only the static `:3000` URL. |
25
+ | Sessions exist on disk but the playground list is empty | The list shows sessions for the authenticated caller. In `--dev` on loopback the list is wider. Otherwise open `/<slug>/playground?sessionId=ses_…` or inspect `sessions/` under your state root. |
26
+ | Port 3000 or 5273 is already in use | Find and stop the listener (`lsof -iTCP:3000 -sTCP:LISTEN` on macOS/Linux), and any leftover Vite or webhook-forwarder processes. |
27
+
28
+ ## What if a model turn goes wrong?
29
+
30
+ | What you see | What to do |
31
+ | --- | --- |
32
+ | Built-in file reads and greps fail; the turn retries for a long time | Run under Node 22.13+ (or `tsx`), never Bun. Look for `NGHTTP2_FRAME_SIZE_ERROR` in logs. |
33
+ | The turn fails immediately with an API-key error | Sign in with `agentkit login`, or set `CURSOR_API_KEY`. Discovery, `info`, `call`, and serve bring-up work without a key; model turns need one. |
34
+ | Replies quote rules or `AGENTS.md` from outside your agent project | The session workspace inherited parent-folder config. Point `defineAgent({ local: { cwd } })` outside that tree, or set `--state-root` to a clean directory (for example under `/tmp`). |
35
+ | Server tools, skills, or workspace seed files never appear | The agent runtime is `cloud`. Those features apply on the local runtime. `validate` warns when this combination is present. |
36
+ | `validate` and `run` succeed, but typecheck fails in CI | The CLI runs TypeScript with type-stripping only. Keep tool `execute` return types as object literals or `type` aliases, not `interface` types. |
37
+ | Login works, but turns are rejected when using custom API hosts | Point login and model traffic at the same host (`CURSOR_API_BASE_URL` and `CURSOR_BACKEND_URL`). A key from one host is rejected by the other. |
38
+
39
+ ## What if the HTTP API returns an error?
40
+
41
+ | What you see | What to do |
42
+ | --- | --- |
43
+ | `409` on a follow-up message | Refresh the `continuationToken` (it rotates on each accepted follow-up), wait if the session is busy, or confirm the session is a chat session (task and schedule sessions are not followable). |
44
+ | `409 session_busy` on `call --session` | Wait for the model turn to finish, or omit `--session` for a one-off call. |
45
+ | `403` on stream or follow-up | Use the same auth identity that created the session. Off localhost, pass `--bearer-token` and send it on every request. |
46
+ | Works on localhost; blocked through a tunnel or LAN | Default auth allows only direct loopback callers. Share the host with `--bearer-token <secret>` (or authored `bearerAuth`). Use `--allow-anonymous` only on a trusted private network. |
47
+ | A channel route fails to compile with a schema type error | `GET` routes need a Zod `querySchema`. `POST` / `PUT` / `PATCH` need a Zod `bodySchema`. Use `z.object({})` or `z.unknown()` for open shapes. |
48
+
49
+ ## What if GitHub webhooks misbehave?
50
+
51
+ | What you see | What to do |
52
+ | --- | --- |
53
+ | `github forward` returns 401 on every delivery, but the hook was created | Clear `GITHUB_TOKEN` and `GH_TOKEN` for that command. The forwarder uses your `gh` CLI login: `GITHUB_TOKEN= GH_TOKEN= agentkit github forward …` |
54
+ | `Hook already exists` when starting a forwarder | GitHub allows one forwarder per repo. Run a single `github forward --dir <parent>` and stop stale forwarders. |
55
+ | Deliveries rejected outside `--dev` | Set `GITHUB_WEBHOOK_SECRET` on the server and on the signer. Without a secret, the channel stays loopback-only. |
56
+ | You lack repo admin and can't forward | Use `agentkit github replay <pr-url>`. It needs pull access only and posts signed test payloads. |
57
+
58
+ ## What if Slack stays quiet?
59
+
60
+ | What you see | What to do |
61
+ | --- | --- |
62
+ | Logs show `channel idle … missing credentials` | Expected when tokens are missing. Set `<PREFIX>_SLACK_BOT_TOKEN` and `<PREFIX>_SLACK_APP_TOKEN` per agent, then run `agentkit slack doctor --prefix <PREFIX>`. |
63
+ | The bot ignores ordinary channel posts | Default engagement is mentions and DMs only. Enable `engagement.channelPosts` with an allowlist, and subscribe the app to `message.channels` / `message.groups`. |
64
+ | Approve / Deny buttons do nothing | Re-import a Slack app manifest with interactivity enabled. Channels that post approval cards need `toolApprovals: true` (and `interactivity: true` when you compose events by hand). |
65
+
66
+ ## What if schedules, reminders, or approvals stall?
67
+
68
+ | What you see | What to do |
69
+ | --- | --- |
70
+ | A schedule or reminder never fires under `--dev` | Dev mode does not auto-fire. Trigger with `POST /<slug>/v1/dev/schedules/<id>` or `POST /<slug>/v1/dev/reminders/<id>` (list reminders at `GET /v1/dev/reminders`). |
71
+ | A pending tool approval disappeared after restart | Parked approvals do not survive host restart. They resolve as interrupted. Run the turn again. |
72
+ | A reminder is disarmed after restart (`handler_lost_on_restart`) | Handler-form reminders live in memory. Re-arm them from the code that created them, or use prompt-form reminders. |
73
+
74
+ ## How do I read a session trace?
75
+
76
+ Look at `actions.requested` / `action.result` pairs for the tool
77
+ trajectory. Count calls by tool name before blaming latency. Separate
78
+ host-side work (channel `callTool`, preparation) from tools the model
79
+ chose.
80
+
81
+ `turn.failed` with `"turn interrupted"` means a follow-up or stop ended
82
+ the turn on purpose.
83
+
84
+ If the model reads outside the session workspace, the prepared files
85
+ don't match what the instructions expect. Fix the layout. See
86
+ [Hillclimbing](./hillclimbing.md).
87
+
88
+ `agentkit trajectory --events <file>` summarizes any saved NDJSON
89
+ stream. The playground **Open trace** control does the same visually.
90
+
91
+ ## What's next
92
+
93
+ - [Concepts](./concepts.md): the model behind these symptoms
94
+ - [Hillclimbing](./hillclimbing.md): when the agent runs but underperforms
95
+ - [Deployment](./deployment.md): auth and state on shared hosts
package/package.json ADDED
@@ -0,0 +1,185 @@
1
+ {
2
+ "name": "@cursor/july",
3
+ "version": "0.1.1",
4
+ "description": "(early alpha) Filesystem-first framework for defining Cursor agents as markdown and TypeScript and serving them over channels with the Cursor SDK.",
5
+ "license": "SEE LICENSE IN LICENSE.md",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "https://github.com/cursor/cursor"
9
+ },
10
+ "homepage": "https://cursor.com",
11
+ "type": "module",
12
+ "main": "dist/index.js",
13
+ "module": "dist/index.js",
14
+ "types": "./dist/index.d.ts",
15
+ "bin": {
16
+ "agentkit": "./dist/bin/agent-serve.js",
17
+ "agent-serve": "./dist/bin/agent-serve.js"
18
+ },
19
+ "publishConfig": {
20
+ "access": "public"
21
+ },
22
+ "files": [
23
+ "dist/**/*",
24
+ "src/**/*",
25
+ "!src/**/*.test.ts",
26
+ "skills/**/*",
27
+ "!skills/operate/**",
28
+ "docs/**/*.md",
29
+ "!docs/.cursor/**",
30
+ "package.json",
31
+ "LICENSE.md",
32
+ "README.md",
33
+ "AGENTS.md"
34
+ ],
35
+ "exports": {
36
+ ".": {
37
+ "anysphere-source": "./src/index.ts",
38
+ "bun": "./src/index.ts",
39
+ "types": "./dist/index.d.ts",
40
+ "import": "./dist/index.js",
41
+ "default": "./dist/index.js"
42
+ },
43
+ "./tools": {
44
+ "anysphere-source": "./src/tools.ts",
45
+ "bun": "./src/tools.ts",
46
+ "types": "./dist/tools.d.ts",
47
+ "import": "./dist/tools.js",
48
+ "default": "./dist/tools.js"
49
+ },
50
+ "./channels": {
51
+ "anysphere-source": "./src/channels.ts",
52
+ "bun": "./src/channels.ts",
53
+ "types": "./dist/channels.d.ts",
54
+ "import": "./dist/channels.js",
55
+ "default": "./dist/channels.js"
56
+ },
57
+ "./channels/slack": {
58
+ "anysphere-source": "./src/channels/slack/index.ts",
59
+ "bun": "./src/channels/slack/index.ts",
60
+ "types": "./dist/channels/slack/index.d.ts",
61
+ "import": "./dist/channels/slack/index.js",
62
+ "default": "./dist/channels/slack/index.js"
63
+ },
64
+ "./channels/github": {
65
+ "anysphere-source": "./src/channels/github/index.ts",
66
+ "bun": "./src/channels/github/index.ts",
67
+ "types": "./dist/channels/github/index.d.ts",
68
+ "import": "./dist/channels/github/index.js",
69
+ "default": "./dist/channels/github/index.js"
70
+ },
71
+ "./skills": {
72
+ "anysphere-source": "./src/skills.ts",
73
+ "bun": "./src/skills.ts",
74
+ "types": "./dist/skills.d.ts",
75
+ "import": "./dist/skills.js",
76
+ "default": "./dist/skills.js"
77
+ },
78
+ "./schedules": {
79
+ "anysphere-source": "./src/schedules.ts",
80
+ "bun": "./src/schedules.ts",
81
+ "types": "./dist/schedules.d.ts",
82
+ "import": "./dist/schedules.js",
83
+ "default": "./dist/schedules.js"
84
+ },
85
+ "./reminders": {
86
+ "anysphere-source": "./src/reminders.ts",
87
+ "bun": "./src/reminders.ts",
88
+ "types": "./dist/reminders.d.ts",
89
+ "import": "./dist/reminders.js",
90
+ "default": "./dist/reminders.js"
91
+ },
92
+ "./connections": {
93
+ "anysphere-source": "./src/connections.ts",
94
+ "bun": "./src/connections.ts",
95
+ "types": "./dist/connections.d.ts",
96
+ "import": "./dist/connections.js",
97
+ "default": "./dist/connections.js"
98
+ },
99
+ "./hooks": {
100
+ "anysphere-source": "./src/hooks.ts",
101
+ "bun": "./src/hooks.ts",
102
+ "types": "./dist/hooks.d.ts",
103
+ "import": "./dist/hooks.js",
104
+ "default": "./dist/hooks.js"
105
+ },
106
+ "./evals": {
107
+ "anysphere-source": "./src/evals.ts",
108
+ "bun": "./src/evals.ts",
109
+ "types": "./dist/evals.d.ts",
110
+ "import": "./dist/evals.js",
111
+ "default": "./dist/evals.js"
112
+ },
113
+ "./ab": {
114
+ "anysphere-source": "./src/ab.ts",
115
+ "bun": "./src/ab.ts",
116
+ "types": "./dist/ab.d.ts",
117
+ "import": "./dist/ab.js",
118
+ "default": "./dist/ab.js"
119
+ },
120
+ "./package.json": {
121
+ "anysphere-source": "./package.json",
122
+ "bun": "./package.json",
123
+ "types": "./package.json",
124
+ "import": "./package.json",
125
+ "default": "./package.json"
126
+ }
127
+ },
128
+ "scripts": {
129
+ "build": "tsgo -p tsconfig.build.json && pnpm run build:playground && pnpm run docs:build",
130
+ "build:playground": "vite build --config playground/vite.config.ts",
131
+ "dev:playground": "vite --config playground/vite.config.ts",
132
+ "check": "biome check src && tsgo --noEmit && tsgo --noEmit -p playground/tsconfig.json",
133
+ "docs:dev": "vitepress dev docs",
134
+ "docs:build": "vitepress build docs",
135
+ "docs:preview": "vitepress preview docs",
136
+ "fix": "biome check --write --unsafe src",
137
+ "test": "vitest run --passWithNoTests",
138
+ "type-check": "tsgo --noEmit && tsgo --noEmit -p playground/tsconfig.json",
139
+ "build-dev": "echo noop",
140
+ "build-types": "tsgo -p tsconfig.build.json --emitDeclarationOnly",
141
+ "verify-publish": "node scripts/verify-publish-artifacts.mjs",
142
+ "smoke-publish": "node scripts/smoke-publish-artifact.mjs",
143
+ "publish-check": "pnpm run build && pnpm run verify-publish && pnpm run smoke-publish"
144
+ },
145
+ "engines": {
146
+ "node": ">=22.13"
147
+ },
148
+ "dependencies": {
149
+ "@cursor/sdk": "1.0.23",
150
+ "@modelcontextprotocol/sdk": "1.25.1",
151
+ "@octokit/auth-app": "^7.2.0",
152
+ "@octokit/rest": "^21.1.1",
153
+ "@slack/socket-mode": "^2.0.7",
154
+ "@slack/web-api": "^7.18.0",
155
+ "croner": "^8.0.1",
156
+ "javascript-time-ago": "^2.6.4",
157
+ "ms": "^2.1.3",
158
+ "tsx": "^4.0.0",
159
+ "zod": "^3.25.0",
160
+ "zod-to-json-schema": "^3.24.5"
161
+ },
162
+ "devDependencies": {
163
+ "@anysphere/ui": "workspace:*",
164
+ "@base-ui/react": "1.4.0",
165
+ "@stylexjs/stylex": "0.18.3",
166
+ "@stylexswc/rs-compiler": "^0.16.4",
167
+ "@tanstack/react-virtual": "3.13.23",
168
+ "@types/ms": "^2.1.0",
169
+ "@types/node": "catalog:",
170
+ "@types/react": "^19.0.0",
171
+ "@types/react-dom": "^19.0.0",
172
+ "@typescript/native-preview": "7.0.0-dev.20260701.1",
173
+ "@vitejs/plugin-react": "^5.1.2",
174
+ "pretty-ms": "^9.2.0",
175
+ "react": "^19.2.1",
176
+ "react-dom": "^19.2.1",
177
+ "react-markdown": "^10.1.0",
178
+ "remark-gfm": "^4.0.1",
179
+ "typescript": "catalog:",
180
+ "vite": "^7.3.0",
181
+ "vitepress": "1.6.4",
182
+ "vitest": "^4.0.18",
183
+ "zustand": "^5.0.9"
184
+ }
185
+ }