pi-cloudflare 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (410) hide show
  1. package/LICENSE +674 -0
  2. package/README.md +67 -0
  3. package/bin/setup.mjs +103 -0
  4. package/dist/auth-flow.d.ts +15 -0
  5. package/dist/auth-flow.d.ts.map +1 -0
  6. package/dist/auth-flow.js +90 -0
  7. package/dist/auth-flow.js.map +1 -0
  8. package/dist/client.d.ts +18 -0
  9. package/dist/client.d.ts.map +1 -0
  10. package/dist/client.js +47 -0
  11. package/dist/client.js.map +1 -0
  12. package/dist/config.d.ts +13 -0
  13. package/dist/config.d.ts.map +1 -0
  14. package/dist/config.js +10 -0
  15. package/dist/config.js.map +1 -0
  16. package/dist/index.d.ts +24 -0
  17. package/dist/index.d.ts.map +1 -0
  18. package/dist/index.js +109 -0
  19. package/dist/index.js.map +1 -0
  20. package/dist/oauth.d.ts +44 -0
  21. package/dist/oauth.d.ts.map +1 -0
  22. package/dist/oauth.js +135 -0
  23. package/dist/oauth.js.map +1 -0
  24. package/dist/proxy.d.ts +29 -0
  25. package/dist/proxy.d.ts.map +1 -0
  26. package/dist/proxy.js +39 -0
  27. package/dist/proxy.js.map +1 -0
  28. package/dist/servers.d.ts +19 -0
  29. package/dist/servers.d.ts.map +1 -0
  30. package/dist/servers.js +40 -0
  31. package/dist/servers.js.map +1 -0
  32. package/dist/token-store.d.ts +23 -0
  33. package/dist/token-store.d.ts.map +1 -0
  34. package/dist/token-store.js +47 -0
  35. package/dist/token-store.js.map +1 -0
  36. package/package.json +67 -0
  37. package/skills/agents-sdk/SKILL.md +221 -0
  38. package/skills/agents-sdk/references/browse-the-web.md +63 -0
  39. package/skills/agents-sdk/references/callable.md +92 -0
  40. package/skills/agents-sdk/references/client-sdk.md +110 -0
  41. package/skills/agents-sdk/references/codemode.md +110 -0
  42. package/skills/agents-sdk/references/configuration.md +72 -0
  43. package/skills/agents-sdk/references/durable-execution.md +51 -0
  44. package/skills/agents-sdk/references/email.md +146 -0
  45. package/skills/agents-sdk/references/human-in-the-loop.md +67 -0
  46. package/skills/agents-sdk/references/mcp.md +188 -0
  47. package/skills/agents-sdk/references/observability.md +44 -0
  48. package/skills/agents-sdk/references/queue-retries.md +79 -0
  49. package/skills/agents-sdk/references/routing.md +75 -0
  50. package/skills/agents-sdk/references/server-driven-messages.md +63 -0
  51. package/skills/agents-sdk/references/state-scheduling.md +171 -0
  52. package/skills/agents-sdk/references/streaming-chat.md +198 -0
  53. package/skills/agents-sdk/references/think.md +112 -0
  54. package/skills/agents-sdk/references/voice.md +68 -0
  55. package/skills/agents-sdk/references/webhooks-push.md +86 -0
  56. package/skills/agents-sdk/references/workflows.md +132 -0
  57. package/skills/cloudflare/SKILL.md +248 -0
  58. package/skills/cloudflare/references/agents-sdk/README.md +89 -0
  59. package/skills/cloudflare/references/agents-sdk/api.md +190 -0
  60. package/skills/cloudflare/references/agents-sdk/configuration.md +182 -0
  61. package/skills/cloudflare/references/agents-sdk/gotchas.md +158 -0
  62. package/skills/cloudflare/references/agents-sdk/patterns.md +192 -0
  63. package/skills/cloudflare/references/ai-gateway/README.md +175 -0
  64. package/skills/cloudflare/references/ai-gateway/configuration.md +111 -0
  65. package/skills/cloudflare/references/ai-gateway/dynamic-routing.md +82 -0
  66. package/skills/cloudflare/references/ai-gateway/features.md +96 -0
  67. package/skills/cloudflare/references/ai-gateway/sdk-integration.md +114 -0
  68. package/skills/cloudflare/references/ai-gateway/troubleshooting.md +88 -0
  69. package/skills/cloudflare/references/ai-search/README.md +138 -0
  70. package/skills/cloudflare/references/ai-search/api.md +87 -0
  71. package/skills/cloudflare/references/ai-search/configuration.md +88 -0
  72. package/skills/cloudflare/references/ai-search/gotchas.md +81 -0
  73. package/skills/cloudflare/references/ai-search/patterns.md +85 -0
  74. package/skills/cloudflare/references/analytics-engine/README.md +94 -0
  75. package/skills/cloudflare/references/analytics-engine/api.md +112 -0
  76. package/skills/cloudflare/references/analytics-engine/configuration.md +112 -0
  77. package/skills/cloudflare/references/analytics-engine/gotchas.md +85 -0
  78. package/skills/cloudflare/references/analytics-engine/patterns.md +83 -0
  79. package/skills/cloudflare/references/api/README.md +66 -0
  80. package/skills/cloudflare/references/api/api.md +204 -0
  81. package/skills/cloudflare/references/api/configuration.md +160 -0
  82. package/skills/cloudflare/references/api/gotchas.md +225 -0
  83. package/skills/cloudflare/references/api/patterns.md +204 -0
  84. package/skills/cloudflare/references/api-shield/README.md +44 -0
  85. package/skills/cloudflare/references/api-shield/api.md +141 -0
  86. package/skills/cloudflare/references/api-shield/configuration.md +192 -0
  87. package/skills/cloudflare/references/api-shield/gotchas.md +125 -0
  88. package/skills/cloudflare/references/api-shield/patterns.md +180 -0
  89. package/skills/cloudflare/references/argo-smart-routing/README.md +90 -0
  90. package/skills/cloudflare/references/argo-smart-routing/api.md +240 -0
  91. package/skills/cloudflare/references/argo-smart-routing/configuration.md +197 -0
  92. package/skills/cloudflare/references/argo-smart-routing/gotchas.md +111 -0
  93. package/skills/cloudflare/references/argo-smart-routing/patterns.md +104 -0
  94. package/skills/cloudflare/references/artifacts/README.md +79 -0
  95. package/skills/cloudflare/references/artifacts/api.md +128 -0
  96. package/skills/cloudflare/references/artifacts/configuration.md +92 -0
  97. package/skills/cloudflare/references/bindings/README.md +122 -0
  98. package/skills/cloudflare/references/bindings/api.md +203 -0
  99. package/skills/cloudflare/references/bindings/configuration.md +188 -0
  100. package/skills/cloudflare/references/bindings/gotchas.md +208 -0
  101. package/skills/cloudflare/references/bindings/patterns.md +200 -0
  102. package/skills/cloudflare/references/bot-management/README.md +94 -0
  103. package/skills/cloudflare/references/bot-management/api.md +169 -0
  104. package/skills/cloudflare/references/bot-management/configuration.md +163 -0
  105. package/skills/cloudflare/references/bot-management/gotchas.md +114 -0
  106. package/skills/cloudflare/references/bot-management/patterns.md +182 -0
  107. package/skills/cloudflare/references/browser-rendering/README.md +78 -0
  108. package/skills/cloudflare/references/browser-rendering/api.md +108 -0
  109. package/skills/cloudflare/references/browser-rendering/configuration.md +78 -0
  110. package/skills/cloudflare/references/browser-rendering/gotchas.md +88 -0
  111. package/skills/cloudflare/references/browser-rendering/patterns.md +91 -0
  112. package/skills/cloudflare/references/c3/README.md +111 -0
  113. package/skills/cloudflare/references/c3/api.md +71 -0
  114. package/skills/cloudflare/references/c3/configuration.md +81 -0
  115. package/skills/cloudflare/references/c3/gotchas.md +92 -0
  116. package/skills/cloudflare/references/c3/patterns.md +82 -0
  117. package/skills/cloudflare/references/cache-reserve/README.md +147 -0
  118. package/skills/cloudflare/references/cache-reserve/api.md +194 -0
  119. package/skills/cloudflare/references/cache-reserve/configuration.md +169 -0
  120. package/skills/cloudflare/references/cache-reserve/gotchas.md +132 -0
  121. package/skills/cloudflare/references/cache-reserve/patterns.md +197 -0
  122. package/skills/cloudflare/references/containers/README.md +85 -0
  123. package/skills/cloudflare/references/containers/api.md +187 -0
  124. package/skills/cloudflare/references/containers/configuration.md +188 -0
  125. package/skills/cloudflare/references/containers/gotchas.md +178 -0
  126. package/skills/cloudflare/references/containers/patterns.md +202 -0
  127. package/skills/cloudflare/references/cron-triggers/README.md +99 -0
  128. package/skills/cloudflare/references/cron-triggers/api.md +196 -0
  129. package/skills/cloudflare/references/cron-triggers/configuration.md +180 -0
  130. package/skills/cloudflare/references/cron-triggers/gotchas.md +199 -0
  131. package/skills/cloudflare/references/cron-triggers/patterns.md +190 -0
  132. package/skills/cloudflare/references/d1/README.md +133 -0
  133. package/skills/cloudflare/references/d1/api.md +196 -0
  134. package/skills/cloudflare/references/d1/configuration.md +191 -0
  135. package/skills/cloudflare/references/d1/gotchas.md +98 -0
  136. package/skills/cloudflare/references/d1/patterns.md +189 -0
  137. package/skills/cloudflare/references/ddos/README.md +41 -0
  138. package/skills/cloudflare/references/ddos/api.md +164 -0
  139. package/skills/cloudflare/references/ddos/configuration.md +93 -0
  140. package/skills/cloudflare/references/ddos/gotchas.md +107 -0
  141. package/skills/cloudflare/references/ddos/patterns.md +174 -0
  142. package/skills/cloudflare/references/do-storage/README.md +75 -0
  143. package/skills/cloudflare/references/do-storage/api.md +102 -0
  144. package/skills/cloudflare/references/do-storage/configuration.md +112 -0
  145. package/skills/cloudflare/references/do-storage/gotchas.md +150 -0
  146. package/skills/cloudflare/references/do-storage/patterns.md +194 -0
  147. package/skills/cloudflare/references/do-storage/testing.md +183 -0
  148. package/skills/cloudflare/references/durable-objects/README.md +185 -0
  149. package/skills/cloudflare/references/durable-objects/api.md +187 -0
  150. package/skills/cloudflare/references/durable-objects/configuration.md +160 -0
  151. package/skills/cloudflare/references/durable-objects/gotchas.md +197 -0
  152. package/skills/cloudflare/references/durable-objects/patterns.md +201 -0
  153. package/skills/cloudflare/references/email-routing/README.md +89 -0
  154. package/skills/cloudflare/references/email-routing/api.md +195 -0
  155. package/skills/cloudflare/references/email-routing/configuration.md +186 -0
  156. package/skills/cloudflare/references/email-routing/gotchas.md +196 -0
  157. package/skills/cloudflare/references/email-routing/patterns.md +229 -0
  158. package/skills/cloudflare/references/email-workers/README.md +151 -0
  159. package/skills/cloudflare/references/email-workers/api.md +237 -0
  160. package/skills/cloudflare/references/email-workers/configuration.md +112 -0
  161. package/skills/cloudflare/references/email-workers/gotchas.md +125 -0
  162. package/skills/cloudflare/references/email-workers/patterns.md +102 -0
  163. package/skills/cloudflare/references/flagship/README.md +59 -0
  164. package/skills/cloudflare/references/flagship/api.md +390 -0
  165. package/skills/cloudflare/references/flagship/configuration.md +202 -0
  166. package/skills/cloudflare/references/flagship/gotchas.md +178 -0
  167. package/skills/cloudflare/references/flagship/patterns.md +469 -0
  168. package/skills/cloudflare/references/graphql-api/README.md +147 -0
  169. package/skills/cloudflare/references/graphql-api/api.md +175 -0
  170. package/skills/cloudflare/references/graphql-api/configuration.md +118 -0
  171. package/skills/cloudflare/references/graphql-api/gotchas.md +110 -0
  172. package/skills/cloudflare/references/graphql-api/patterns.md +225 -0
  173. package/skills/cloudflare/references/hyperdrive/README.md +82 -0
  174. package/skills/cloudflare/references/hyperdrive/api.md +143 -0
  175. package/skills/cloudflare/references/hyperdrive/configuration.md +159 -0
  176. package/skills/cloudflare/references/hyperdrive/gotchas.md +77 -0
  177. package/skills/cloudflare/references/hyperdrive/patterns.md +190 -0
  178. package/skills/cloudflare/references/images/README.md +61 -0
  179. package/skills/cloudflare/references/images/api.md +96 -0
  180. package/skills/cloudflare/references/images/configuration.md +211 -0
  181. package/skills/cloudflare/references/images/gotchas.md +99 -0
  182. package/skills/cloudflare/references/images/patterns.md +115 -0
  183. package/skills/cloudflare/references/kv/README.md +89 -0
  184. package/skills/cloudflare/references/kv/api.md +160 -0
  185. package/skills/cloudflare/references/kv/configuration.md +144 -0
  186. package/skills/cloudflare/references/kv/gotchas.md +131 -0
  187. package/skills/cloudflare/references/kv/patterns.md +196 -0
  188. package/skills/cloudflare/references/miniflare/README.md +105 -0
  189. package/skills/cloudflare/references/miniflare/api.md +187 -0
  190. package/skills/cloudflare/references/miniflare/configuration.md +173 -0
  191. package/skills/cloudflare/references/miniflare/gotchas.md +160 -0
  192. package/skills/cloudflare/references/miniflare/patterns.md +181 -0
  193. package/skills/cloudflare/references/network-interconnect/README.md +99 -0
  194. package/skills/cloudflare/references/network-interconnect/api.md +199 -0
  195. package/skills/cloudflare/references/network-interconnect/configuration.md +114 -0
  196. package/skills/cloudflare/references/network-interconnect/gotchas.md +165 -0
  197. package/skills/cloudflare/references/network-interconnect/patterns.md +166 -0
  198. package/skills/cloudflare/references/observability/README.md +88 -0
  199. package/skills/cloudflare/references/observability/api.md +164 -0
  200. package/skills/cloudflare/references/observability/configuration.md +169 -0
  201. package/skills/cloudflare/references/observability/gotchas.md +115 -0
  202. package/skills/cloudflare/references/observability/patterns.md +105 -0
  203. package/skills/cloudflare/references/pages/README.md +88 -0
  204. package/skills/cloudflare/references/pages/api.md +204 -0
  205. package/skills/cloudflare/references/pages/configuration.md +201 -0
  206. package/skills/cloudflare/references/pages/gotchas.md +203 -0
  207. package/skills/cloudflare/references/pages/patterns.md +204 -0
  208. package/skills/cloudflare/references/pages-functions/README.md +98 -0
  209. package/skills/cloudflare/references/pages-functions/api.md +143 -0
  210. package/skills/cloudflare/references/pages-functions/configuration.md +122 -0
  211. package/skills/cloudflare/references/pages-functions/gotchas.md +94 -0
  212. package/skills/cloudflare/references/pages-functions/patterns.md +137 -0
  213. package/skills/cloudflare/references/pipelines/README.md +90 -0
  214. package/skills/cloudflare/references/pipelines/api.md +124 -0
  215. package/skills/cloudflare/references/pipelines/configuration.md +155 -0
  216. package/skills/cloudflare/references/pipelines/gotchas.md +58 -0
  217. package/skills/cloudflare/references/pipelines/patterns.md +130 -0
  218. package/skills/cloudflare/references/pulumi/README.md +100 -0
  219. package/skills/cloudflare/references/pulumi/api.md +200 -0
  220. package/skills/cloudflare/references/pulumi/configuration.md +198 -0
  221. package/skills/cloudflare/references/pulumi/gotchas.md +181 -0
  222. package/skills/cloudflare/references/pulumi/patterns.md +191 -0
  223. package/skills/cloudflare/references/queues/README.md +96 -0
  224. package/skills/cloudflare/references/queues/api.md +206 -0
  225. package/skills/cloudflare/references/queues/configuration.md +144 -0
  226. package/skills/cloudflare/references/queues/gotchas.md +206 -0
  227. package/skills/cloudflare/references/queues/patterns.md +220 -0
  228. package/skills/cloudflare/references/r2/README.md +95 -0
  229. package/skills/cloudflare/references/r2/api.md +200 -0
  230. package/skills/cloudflare/references/r2/configuration.md +165 -0
  231. package/skills/cloudflare/references/r2/gotchas.md +190 -0
  232. package/skills/cloudflare/references/r2/patterns.md +193 -0
  233. package/skills/cloudflare/references/r2-data-catalog/README.md +75 -0
  234. package/skills/cloudflare/references/r2-data-catalog/api.md +122 -0
  235. package/skills/cloudflare/references/r2-data-catalog/configuration.md +98 -0
  236. package/skills/cloudflare/references/r2-data-catalog/gotchas.md +55 -0
  237. package/skills/cloudflare/references/r2-data-catalog/patterns.md +122 -0
  238. package/skills/cloudflare/references/r2-sql/README.md +64 -0
  239. package/skills/cloudflare/references/r2-sql/api.md +121 -0
  240. package/skills/cloudflare/references/r2-sql/configuration.md +50 -0
  241. package/skills/cloudflare/references/r2-sql/gotchas.md +39 -0
  242. package/skills/cloudflare/references/r2-sql/patterns.md +118 -0
  243. package/skills/cloudflare/references/realtime-sfu/README.md +65 -0
  244. package/skills/cloudflare/references/realtime-sfu/api.md +158 -0
  245. package/skills/cloudflare/references/realtime-sfu/configuration.md +137 -0
  246. package/skills/cloudflare/references/realtime-sfu/gotchas.md +133 -0
  247. package/skills/cloudflare/references/realtime-sfu/patterns.md +174 -0
  248. package/skills/cloudflare/references/realtimekit/README.md +113 -0
  249. package/skills/cloudflare/references/realtimekit/api.md +212 -0
  250. package/skills/cloudflare/references/realtimekit/configuration.md +203 -0
  251. package/skills/cloudflare/references/realtimekit/gotchas.md +169 -0
  252. package/skills/cloudflare/references/realtimekit/patterns.md +223 -0
  253. package/skills/cloudflare/references/sandbox/README.md +96 -0
  254. package/skills/cloudflare/references/sandbox/api.md +198 -0
  255. package/skills/cloudflare/references/sandbox/configuration.md +143 -0
  256. package/skills/cloudflare/references/sandbox/gotchas.md +194 -0
  257. package/skills/cloudflare/references/sandbox/patterns.md +201 -0
  258. package/skills/cloudflare/references/secrets-store/README.md +74 -0
  259. package/skills/cloudflare/references/secrets-store/api.md +200 -0
  260. package/skills/cloudflare/references/secrets-store/configuration.md +185 -0
  261. package/skills/cloudflare/references/secrets-store/gotchas.md +97 -0
  262. package/skills/cloudflare/references/secrets-store/patterns.md +207 -0
  263. package/skills/cloudflare/references/smart-placement/README.md +138 -0
  264. package/skills/cloudflare/references/smart-placement/api.md +183 -0
  265. package/skills/cloudflare/references/smart-placement/configuration.md +196 -0
  266. package/skills/cloudflare/references/smart-placement/gotchas.md +174 -0
  267. package/skills/cloudflare/references/smart-placement/patterns.md +183 -0
  268. package/skills/cloudflare/references/snippets/README.md +68 -0
  269. package/skills/cloudflare/references/snippets/api.md +198 -0
  270. package/skills/cloudflare/references/snippets/configuration.md +227 -0
  271. package/skills/cloudflare/references/snippets/gotchas.md +86 -0
  272. package/skills/cloudflare/references/snippets/patterns.md +135 -0
  273. package/skills/cloudflare/references/spectrum/README.md +52 -0
  274. package/skills/cloudflare/references/spectrum/api.md +181 -0
  275. package/skills/cloudflare/references/spectrum/configuration.md +194 -0
  276. package/skills/cloudflare/references/spectrum/gotchas.md +145 -0
  277. package/skills/cloudflare/references/spectrum/patterns.md +196 -0
  278. package/skills/cloudflare/references/static-assets/README.md +65 -0
  279. package/skills/cloudflare/references/static-assets/api.md +199 -0
  280. package/skills/cloudflare/references/static-assets/configuration.md +186 -0
  281. package/skills/cloudflare/references/static-assets/gotchas.md +162 -0
  282. package/skills/cloudflare/references/static-assets/patterns.md +189 -0
  283. package/skills/cloudflare/references/stream/README.md +114 -0
  284. package/skills/cloudflare/references/stream/api-live.md +195 -0
  285. package/skills/cloudflare/references/stream/api.md +199 -0
  286. package/skills/cloudflare/references/stream/configuration.md +141 -0
  287. package/skills/cloudflare/references/stream/gotchas.md +130 -0
  288. package/skills/cloudflare/references/stream/patterns.md +184 -0
  289. package/skills/cloudflare/references/tail-workers/README.md +89 -0
  290. package/skills/cloudflare/references/tail-workers/api.md +200 -0
  291. package/skills/cloudflare/references/tail-workers/configuration.md +176 -0
  292. package/skills/cloudflare/references/tail-workers/gotchas.md +192 -0
  293. package/skills/cloudflare/references/tail-workers/patterns.md +180 -0
  294. package/skills/cloudflare/references/terraform/README.md +102 -0
  295. package/skills/cloudflare/references/terraform/api.md +178 -0
  296. package/skills/cloudflare/references/terraform/configuration.md +197 -0
  297. package/skills/cloudflare/references/terraform/gotchas.md +150 -0
  298. package/skills/cloudflare/references/terraform/patterns.md +174 -0
  299. package/skills/cloudflare/references/tunnel/README.md +129 -0
  300. package/skills/cloudflare/references/tunnel/api.md +193 -0
  301. package/skills/cloudflare/references/tunnel/configuration.md +157 -0
  302. package/skills/cloudflare/references/tunnel/gotchas.md +147 -0
  303. package/skills/cloudflare/references/tunnel/networking.md +168 -0
  304. package/skills/cloudflare/references/tunnel/patterns.md +192 -0
  305. package/skills/cloudflare/references/turn/README.md +82 -0
  306. package/skills/cloudflare/references/turn/api.md +239 -0
  307. package/skills/cloudflare/references/turn/configuration.md +179 -0
  308. package/skills/cloudflare/references/turn/gotchas.md +231 -0
  309. package/skills/cloudflare/references/turn/patterns.md +213 -0
  310. package/skills/cloudflare/references/turnstile/README.md +99 -0
  311. package/skills/cloudflare/references/turnstile/api.md +240 -0
  312. package/skills/cloudflare/references/turnstile/configuration.md +222 -0
  313. package/skills/cloudflare/references/turnstile/gotchas.md +218 -0
  314. package/skills/cloudflare/references/turnstile/patterns.md +193 -0
  315. package/skills/cloudflare/references/vectorize/README.md +133 -0
  316. package/skills/cloudflare/references/vectorize/api.md +88 -0
  317. package/skills/cloudflare/references/vectorize/configuration.md +88 -0
  318. package/skills/cloudflare/references/vectorize/gotchas.md +76 -0
  319. package/skills/cloudflare/references/vectorize/patterns.md +90 -0
  320. package/skills/cloudflare/references/waf/README.md +113 -0
  321. package/skills/cloudflare/references/waf/api.md +202 -0
  322. package/skills/cloudflare/references/waf/configuration.md +203 -0
  323. package/skills/cloudflare/references/waf/gotchas.md +204 -0
  324. package/skills/cloudflare/references/waf/patterns.md +197 -0
  325. package/skills/cloudflare/references/web-analytics/README.md +141 -0
  326. package/skills/cloudflare/references/web-analytics/configuration.md +76 -0
  327. package/skills/cloudflare/references/web-analytics/gotchas.md +82 -0
  328. package/skills/cloudflare/references/web-analytics/integration.md +60 -0
  329. package/skills/cloudflare/references/web-analytics/patterns.md +91 -0
  330. package/skills/cloudflare/references/workerd/README.md +78 -0
  331. package/skills/cloudflare/references/workerd/api.md +185 -0
  332. package/skills/cloudflare/references/workerd/configuration.md +183 -0
  333. package/skills/cloudflare/references/workerd/gotchas.md +139 -0
  334. package/skills/cloudflare/references/workerd/patterns.md +192 -0
  335. package/skills/cloudflare/references/workers/README.md +108 -0
  336. package/skills/cloudflare/references/workers/api.md +195 -0
  337. package/skills/cloudflare/references/workers/configuration.md +185 -0
  338. package/skills/cloudflare/references/workers/frameworks.md +197 -0
  339. package/skills/cloudflare/references/workers/gotchas.md +137 -0
  340. package/skills/cloudflare/references/workers/patterns.md +198 -0
  341. package/skills/cloudflare/references/workers-ai/README.md +197 -0
  342. package/skills/cloudflare/references/workers-ai/api.md +112 -0
  343. package/skills/cloudflare/references/workers-ai/configuration.md +97 -0
  344. package/skills/cloudflare/references/workers-ai/gotchas.md +114 -0
  345. package/skills/cloudflare/references/workers-ai/patterns.md +120 -0
  346. package/skills/cloudflare/references/workers-for-platforms/README.md +89 -0
  347. package/skills/cloudflare/references/workers-for-platforms/api.md +196 -0
  348. package/skills/cloudflare/references/workers-for-platforms/configuration.md +167 -0
  349. package/skills/cloudflare/references/workers-for-platforms/gotchas.md +134 -0
  350. package/skills/cloudflare/references/workers-for-platforms/patterns.md +188 -0
  351. package/skills/cloudflare/references/workers-playground/README.md +127 -0
  352. package/skills/cloudflare/references/workers-playground/api.md +101 -0
  353. package/skills/cloudflare/references/workers-playground/configuration.md +163 -0
  354. package/skills/cloudflare/references/workers-playground/gotchas.md +88 -0
  355. package/skills/cloudflare/references/workers-playground/patterns.md +132 -0
  356. package/skills/cloudflare/references/workers-vpc/README.md +127 -0
  357. package/skills/cloudflare/references/workers-vpc/api.md +202 -0
  358. package/skills/cloudflare/references/workers-vpc/configuration.md +147 -0
  359. package/skills/cloudflare/references/workers-vpc/gotchas.md +167 -0
  360. package/skills/cloudflare/references/workers-vpc/patterns.md +209 -0
  361. package/skills/cloudflare/references/workflows/README.md +77 -0
  362. package/skills/cloudflare/references/workflows/api.md +218 -0
  363. package/skills/cloudflare/references/workflows/configuration.md +152 -0
  364. package/skills/cloudflare/references/workflows/gotchas.md +90 -0
  365. package/skills/cloudflare/references/workflows/patterns.md +175 -0
  366. package/skills/cloudflare/references/wrangler/README.md +135 -0
  367. package/skills/cloudflare/references/wrangler/api.md +188 -0
  368. package/skills/cloudflare/references/wrangler/configuration.md +197 -0
  369. package/skills/cloudflare/references/wrangler/gotchas.md +197 -0
  370. package/skills/cloudflare/references/wrangler/patterns.md +209 -0
  371. package/skills/cloudflare/references/zaraz/IMPLEMENTATION_SUMMARY.md +121 -0
  372. package/skills/cloudflare/references/zaraz/README.md +111 -0
  373. package/skills/cloudflare/references/zaraz/api.md +112 -0
  374. package/skills/cloudflare/references/zaraz/configuration.md +90 -0
  375. package/skills/cloudflare/references/zaraz/gotchas.md +81 -0
  376. package/skills/cloudflare/references/zaraz/patterns.md +74 -0
  377. package/skills/cloudflare-email-service/SKILL.md +103 -0
  378. package/skills/cloudflare-email-service/references/cli-and-mcp.md +125 -0
  379. package/skills/cloudflare-email-service/references/deliverability.md +285 -0
  380. package/skills/cloudflare-email-service/references/rest-api.md +184 -0
  381. package/skills/cloudflare-email-service/references/routing.md +199 -0
  382. package/skills/cloudflare-email-service/references/sending.md +252 -0
  383. package/skills/cloudflare-one/SKILL.md +176 -0
  384. package/skills/cloudflare-one-migrations/SKILL.md +110 -0
  385. package/skills/durable-objects/SKILL.md +186 -0
  386. package/skills/durable-objects/references/rules.md +295 -0
  387. package/skills/durable-objects/references/testing.md +264 -0
  388. package/skills/durable-objects/references/workers.md +346 -0
  389. package/skills/sandbox-migrate-to-next/SKILL.md +185 -0
  390. package/skills/sandbox-next/SKILL.md +91 -0
  391. package/skills/sandbox-next/references/api-quick-ref.md +94 -0
  392. package/skills/sandbox-next/references/examples.md +15 -0
  393. package/skills/sandbox-stable/SKILL.md +110 -0
  394. package/skills/turnstile-spin/README.md +51 -0
  395. package/skills/turnstile-spin/SKILL.md +330 -0
  396. package/skills/turnstile-spin/references/astro.md +199 -0
  397. package/skills/turnstile-spin/references/hugo.md +114 -0
  398. package/skills/turnstile-spin/references/nextjs-app.md +261 -0
  399. package/skills/turnstile-spin/references/nextjs-pages.md +82 -0
  400. package/skills/turnstile-spin/references/sveltekit.md +191 -0
  401. package/skills/turnstile-spin/references/vanilla-html.md +157 -0
  402. package/skills/turnstile-spin/scripts/auth-probe.sh +285 -0
  403. package/skills/turnstile-spin/scripts/persist-skill.sh +114 -0
  404. package/skills/turnstile-spin/scripts/validate.sh +137 -0
  405. package/skills/turnstile-spin/scripts/widget-create.sh +121 -0
  406. package/skills/turnstile-spin/tests/validation.md +62 -0
  407. package/skills/workers-best-practices/SKILL.md +127 -0
  408. package/skills/workers-best-practices/references/review.md +174 -0
  409. package/skills/workers-best-practices/references/rules.md +467 -0
  410. package/skills/wrangler/SKILL.md +922 -0
@@ -0,0 +1,51 @@
1
+ # Durable Execution
2
+
3
+ Fetch https://developers.cloudflare.com/agents/api-reference/durable-execution/ for complete documentation.
4
+
5
+ Fibers let agent work survive Durable Object eviction. Progress is checkpointed to SQLite; on recovery, you decide what to do.
6
+
7
+ ## `runFiber`
8
+
9
+ ```typescript
10
+ export class MyAgent extends Agent<Env, State> {
11
+ async onRequest(request: Request) {
12
+ await this.runFiber("process-data", async (ctx) => {
13
+ const step1 = await fetchData();
14
+ ctx.stash({ step: 1, data: step1 });
15
+
16
+ const step2 = await transform(step1);
17
+ ctx.stash({ step: 2, result: step2 });
18
+
19
+ this.setState({ result: step2 });
20
+ });
21
+ return new Response("Started");
22
+ }
23
+
24
+ async onFiberRecovered(ctx) {
25
+ const checkpoint = ctx.stash;
26
+ if (checkpoint.step === 1) {
27
+ const step2 = await transform(checkpoint.data);
28
+ this.setState({ result: step2 });
29
+ }
30
+ }
31
+ }
32
+ ```
33
+
34
+ ## Key APIs
35
+
36
+ | API | Purpose |
37
+ |-----|---------|
38
+ | `this.runFiber(name, fn)` | Start a named fiber |
39
+ | `ctx.stash` / `this.stash` | Read latest checkpoint |
40
+ | `ctx.stash = data` | Write checkpoint (JSON-serializable) |
41
+ | `onFiberRecovered(ctx)` | Called on DO restart if fiber was in-flight |
42
+ | `keepAlive()` | Prevent hibernation while fiber runs |
43
+ | `keepAliveWhile(fn)` | Keep alive for duration of async function |
44
+
45
+ ## Important
46
+
47
+ - `stash` replaces the entire checkpoint — not a merge
48
+ - The lambda is NOT restored on recovery — only the stash data is. You must re-derive what to do in `onFiberRecovered`
49
+ - No auto-retry on throw — handle errors yourself
50
+ - For long-running pipelines with automatic retries, use Workflows instead
51
+ - Filter concurrent fibers by `ctx.name` in `onFiberRecovered`
@@ -0,0 +1,146 @@
1
+ # Email Handling
2
+
3
+ Fetch https://developers.cloudflare.com/agents/api-reference/email/ for complete documentation.
4
+
5
+ ## Overview
6
+
7
+ Agents receive and reply to emails via Cloudflare Email Routing.
8
+
9
+ ## Wrangler Configuration
10
+
11
+ ```jsonc
12
+ {
13
+ "durable_objects": {
14
+ "bindings": [{ "name": "EmailAgent", "class_name": "EmailAgent" }]
15
+ },
16
+ "migrations": [{ "tag": "v1", "new_sqlite_classes": ["EmailAgent"] }],
17
+ "send_email": [
18
+ { "name": "SEB", "destination_address": "reply@yourdomain.com" }
19
+ ]
20
+ }
21
+ ```
22
+
23
+ ## Basic Email Handler
24
+
25
+ ```typescript
26
+ import { Agent } from "agents";
27
+ import { type AgentEmail } from "agents/email";
28
+ import PostalMime from "postal-mime";
29
+
30
+ export class EmailAgent extends Agent<Env, State> {
31
+ async onEmail(email: AgentEmail) {
32
+ const raw = await email.getRaw();
33
+ const parsed = await PostalMime.parse(raw);
34
+
35
+ console.log("From:", email.from);
36
+ console.log("Subject:", parsed.subject);
37
+
38
+ await this.replyToEmail(email, {
39
+ fromName: "My Agent",
40
+ subject: `Re: ${parsed.subject}`,
41
+ body: "Thanks for your email!"
42
+ });
43
+ }
44
+ }
45
+ ```
46
+
47
+ ## Routing Emails
48
+
49
+ ```typescript
50
+ import { routeAgentRequest, routeAgentEmail } from "agents";
51
+ import { createAddressBasedEmailResolver } from "agents/email";
52
+
53
+ export default {
54
+ async email(message, env) {
55
+ await routeAgentEmail(message, env, {
56
+ resolver: createAddressBasedEmailResolver("EmailAgent")
57
+ });
58
+ },
59
+
60
+ async fetch(request, env) {
61
+ return routeAgentRequest(request, env) ?? new Response("Not found", { status: 404 });
62
+ }
63
+ };
64
+ ```
65
+
66
+ ## Resolvers
67
+
68
+ ### Address-Based (Inbound Mail)
69
+
70
+ Routes based on recipient address:
71
+
72
+ ```typescript
73
+ import { createAddressBasedEmailResolver } from "agents/email";
74
+
75
+ const resolver = createAddressBasedEmailResolver("EmailAgent");
76
+ // support@example.com → EmailAgent, instance "support"
77
+ // NotificationAgent+user123@example.com → NotificationAgent, instance "user123"
78
+ ```
79
+
80
+ ### Secure Reply (Reply Flows)
81
+
82
+ Verifies replies are authentic using HMAC-SHA256 signatures:
83
+
84
+ ```typescript
85
+ import { createSecureReplyEmailResolver } from "agents/email";
86
+
87
+ const resolver = createSecureReplyEmailResolver(env.EMAIL_SECRET, {
88
+ maxAge: 7 * 24 * 60 * 60, // 7 days (default: 30 days)
89
+ onInvalidSignature: (email, reason) => {
90
+ console.warn(`Invalid signature from ${email.from}: ${reason}`);
91
+ }
92
+ });
93
+ ```
94
+
95
+ Sign outbound emails to enable secure reply routing:
96
+
97
+ ```typescript
98
+ await this.replyToEmail(email, {
99
+ fromName: "My Agent",
100
+ body: "Thanks!",
101
+ secret: this.env.EMAIL_SECRET // Signs headers for secure reply routing
102
+ });
103
+ ```
104
+
105
+ ### Catch-All (Single Instance)
106
+
107
+ Routes all emails to one agent instance:
108
+
109
+ ```typescript
110
+ import { createCatchAllEmailResolver } from "agents/email";
111
+
112
+ const resolver = createCatchAllEmailResolver("EmailAgent", "default");
113
+ ```
114
+
115
+ ### Combining Resolvers
116
+
117
+ ```typescript
118
+ async email(message, env) {
119
+ const secureReply = createSecureReplyEmailResolver(env.EMAIL_SECRET);
120
+ const addressBased = createAddressBasedEmailResolver("EmailAgent");
121
+
122
+ await routeAgentEmail(message, env, {
123
+ resolver: async (email, env) => {
124
+ // Try secure reply first
125
+ const result = await secureReply(email, env);
126
+ if (result) return result;
127
+ // Fall back to address-based
128
+ return addressBased(email, env);
129
+ }
130
+ });
131
+ }
132
+ ```
133
+
134
+ ## Utilities
135
+
136
+ ```typescript
137
+ import { isAutoReplyEmail } from "agents/email";
138
+
139
+ async onEmail(email: AgentEmail) {
140
+ if (isAutoReplyEmail(email.headers)) {
141
+ // Skip auto-replies (vacation, out-of-office, etc.)
142
+ return;
143
+ }
144
+ // Process email...
145
+ }
146
+ ```
@@ -0,0 +1,67 @@
1
+ # Human-in-the-Loop
2
+
3
+ Fetch https://developers.cloudflare.com/agents/concepts/human-in-the-loop/ for complete documentation.
4
+
5
+ Multiple patterns for adding human approval to agent actions.
6
+
7
+ ## Decision Guide
8
+
9
+ | Pattern | Best for |
10
+ |---------|----------|
11
+ | Workflows `waitForApproval` | Long-running background tasks |
12
+ | AI SDK `needsApproval` on tools | Chat tool calls requiring approval |
13
+ | Client tools (`onToolCall`) | Tools that execute in the browser |
14
+ | MCP `elicitInput` | Gathering structured input from MCP clients |
15
+
16
+ ## Workflow Approvals
17
+
18
+ ```typescript
19
+ // In AgentWorkflow:
20
+ const approved = await step.waitForEvent<{ approved: boolean }>("approval", {
21
+ timeout: "7d"
22
+ });
23
+ if (!approved.approved) throw new Error("Rejected");
24
+
25
+ // From agent:
26
+ await this.approveWorkflow(workflowId);
27
+ await this.rejectWorkflow(workflowId);
28
+ ```
29
+
30
+ ## Chat Tool Approvals (`needsApproval`)
31
+
32
+ ```typescript
33
+ const tools = {
34
+ deleteItem: tool({
35
+ description: "Delete an item",
36
+ parameters: z.object({ id: z.string() }),
37
+ execute: async ({ id }) => { /* delete */ },
38
+ needsApproval: true // or a function: (toolCall) => boolean
39
+ })
40
+ };
41
+ ```
42
+
43
+ Client handles approval:
44
+
45
+ ```tsx
46
+ const { addToolApprovalResponse, addToolOutput } = useAgentChat({
47
+ agent,
48
+ onToolCall: async ({ toolCall }) => {
49
+ if (confirm(`Allow ${toolCall.toolName}?`)) {
50
+ return { approve: true };
51
+ }
52
+ return { approve: false };
53
+ }
54
+ });
55
+ ```
56
+
57
+ To deny with a custom message:
58
+
59
+ ```tsx
60
+ addToolOutput(toolCallId, "output-error", "User rejected this action");
61
+ ```
62
+
63
+ ## Important
64
+
65
+ - `waitForApproval` may return `undefined` on timeout — handle it
66
+ - `addToolOutput` with `output-error` does NOT auto-continue the LLM — you may need `sendMessage` after
67
+ - For OpenAI Agents SDK, use `needsApproval` on the tool definition (same pattern)
@@ -0,0 +1,188 @@
1
+ # MCP Integration
2
+
3
+ Fetch https://developers.cloudflare.com/agents/api-reference/mcp-client-api/ and https://developers.cloudflare.com/agents/api-reference/mcp-agent-api/ for complete documentation.
4
+
5
+ Agents include a multi-server MCP client for connecting to external MCP servers, and `McpAgent` for building MCP servers.
6
+
7
+ ## Add an MCP Server
8
+
9
+ ```typescript
10
+ import { Agent, callable } from "agents";
11
+
12
+ export class MyAgent extends Agent<Env, State> {
13
+ @callable()
14
+ async addServer(name: string, url: string) {
15
+ // Options-based API (recommended)
16
+ const result = await this.addMcpServer(name, url, {
17
+ callbackHost: "https://my-worker.workers.dev",
18
+ transport: { headers: { Authorization: "Bearer ..." } }
19
+ });
20
+
21
+ if (result.state === "authenticating") {
22
+ // OAuth required - redirect user to result.authUrl
23
+ return { needsAuth: true, authUrl: result.authUrl };
24
+ }
25
+
26
+ return { ready: true, id: result.id };
27
+ }
28
+ }
29
+ ```
30
+
31
+ ## Use MCP Tools
32
+
33
+ ```typescript
34
+ async onChatMessage() {
35
+ // Get AI-compatible tools from all connected MCP servers
36
+ const mcpTools = this.mcp.getAITools();
37
+
38
+ const allTools = {
39
+ ...localTools,
40
+ ...mcpTools
41
+ };
42
+
43
+ const result = streamText({
44
+ model: openai("gpt-4o"),
45
+ messages: await convertToModelMessages(this.messages),
46
+ tools: allTools
47
+ });
48
+
49
+ return result.toUIMessageStreamResponse();
50
+ }
51
+ ```
52
+
53
+ ## List MCP Resources
54
+
55
+ ```typescript
56
+ // List all registered servers
57
+ const servers = this.mcp.listServers();
58
+
59
+ // List tools from all servers
60
+ const tools = this.mcp.listTools();
61
+
62
+ // List resources
63
+ const resources = this.mcp.listResources();
64
+
65
+ // List prompts
66
+ const prompts = this.mcp.listPrompts();
67
+ ```
68
+
69
+ ## Remove Server
70
+
71
+ ```typescript
72
+ await this.removeMcpServer(serverId);
73
+ ```
74
+
75
+ ## Building an MCP Server
76
+
77
+ Use `McpAgent` from the SDK to create an MCP server.
78
+
79
+ **Install dependencies:**
80
+ ```bash
81
+ npm install @modelcontextprotocol/sdk zod
82
+ ```
83
+
84
+ **Wrangler config:**
85
+ ```jsonc
86
+ {
87
+ "durable_objects": {
88
+ "bindings": [{ "name": "MyMCP", "class_name": "MyMCP" }]
89
+ },
90
+ "migrations": [{ "tag": "v1", "new_sqlite_classes": ["MyMCP"] }]
91
+ }
92
+ ```
93
+
94
+ **Server implementation:**
95
+ ```typescript
96
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
97
+ import { McpAgent } from "agents/mcp";
98
+ import { z } from "zod";
99
+
100
+ type State = { counter: number };
101
+
102
+ export class MyMCP extends McpAgent<Env, State, {}> {
103
+ server = new McpServer({
104
+ name: "MyMCPServer",
105
+ version: "1.0.0"
106
+ });
107
+
108
+ initialState = { counter: 0 };
109
+
110
+ async init() {
111
+ // Register a resource
112
+ this.server.resource("counter", "mcp://resource/counter", (uri) => ({
113
+ contents: [{ text: String(this.state.counter), uri: uri.href }]
114
+ }));
115
+
116
+ // Register a tool
117
+ this.server.registerTool(
118
+ "increment",
119
+ {
120
+ description: "Increment the counter",
121
+ inputSchema: { amount: z.number().default(1) }
122
+ },
123
+ async ({ amount }) => {
124
+ this.setState({ counter: this.state.counter + amount });
125
+ return {
126
+ content: [{ text: `Counter: ${this.state.counter}`, type: "text" }]
127
+ };
128
+ }
129
+ );
130
+ }
131
+ }
132
+ ```
133
+
134
+ ## Serve MCP Server
135
+
136
+ ```typescript
137
+ export default {
138
+ fetch(request: Request, env: Env, ctx: ExecutionContext) {
139
+ const url = new URL(request.url);
140
+
141
+ // Streamable HTTP transport (recommended)
142
+ if (url.pathname.startsWith("/mcp")) {
143
+ return MyMCP.serve("/mcp", { binding: "MyMCP" }).fetch(request, env, ctx);
144
+ }
145
+
146
+ // SSE transport (legacy, deprecated)
147
+ if (url.pathname.startsWith("/sse")) {
148
+ return MyMCP.serveSSE("/sse", { binding: "MyMCP" }).fetch(request, env, ctx);
149
+ }
150
+
151
+ return new Response("Not found", { status: 404 });
152
+ }
153
+ };
154
+ ```
155
+
156
+ ## Transports
157
+
158
+ Fetch https://developers.cloudflare.com/agents/api-reference/mcp-transports/ for complete documentation.
159
+
160
+ | Transport | Use for |
161
+ |-----------|---------|
162
+ | Streamable HTTP (`serve`) | External/public clients (recommended) |
163
+ | SSE (`serveSSE`) | Legacy clients only (deprecated) |
164
+ | RPC (`addMcpServer(name, env.Binding)`) | Same-Worker internal calls (fastest) |
165
+
166
+ ### RPC Transport (Same Worker)
167
+
168
+ ```typescript
169
+ async onStart() {
170
+ await this.addMcpServer("internal-tools", this.env.MyMCPBinding, {
171
+ props: { userId: this.name }
172
+ });
173
+ }
174
+ ```
175
+
176
+ ## Retry on MCP Connections
177
+
178
+ ```typescript
179
+ await this.addMcpServer("tools", url, {
180
+ retry: { maxAttempts: 3, baseDelayMs: 500 }
181
+ });
182
+ ```
183
+
184
+ ## Securing MCP Servers
185
+
186
+ Fetch https://developers.cloudflare.com/agents/api-reference/securing-mcp-servers/ for complete documentation.
187
+
188
+ Use `@cloudflare/workers-oauth-provider` to add OAuth in front of your MCP server. See the securing docs for proxy patterns and `redirect_uri` validation.
@@ -0,0 +1,44 @@
1
+ # Observability
2
+
3
+ Fetch https://developers.cloudflare.com/agents/api-reference/observability/ for complete documentation.
4
+
5
+ Agents emit structured events via Node.js `diagnostics_channel`. Subscribe in development or forward via Tail Workers in production.
6
+
7
+ ## Subscribe to Events
8
+
9
+ ```typescript
10
+ import { subscribe } from "agents/observability";
11
+
12
+ subscribe("agents:rpc", (event) => {
13
+ console.log(`RPC call: ${event.payload.method}`);
14
+ });
15
+
16
+ subscribe("agents:state", (event) => {
17
+ console.log(`State change on ${event.agent}`);
18
+ });
19
+ ```
20
+
21
+ ## Available Channels
22
+
23
+ | Channel | Events |
24
+ |---------|--------|
25
+ | `agents:state` | State changes |
26
+ | `agents:rpc` | `@callable` invocations |
27
+ | `agents:message` | WebSocket messages |
28
+ | `agents:schedule` | Schedule triggers |
29
+ | `agents:lifecycle` | Agent start, connect, disconnect |
30
+ | `agents:workflow` | Workflow progress, completion, errors |
31
+ | `agents:mcp` | MCP server connections, tool calls |
32
+ | `agents:email` | Email received |
33
+
34
+ ## Per-Agent Override
35
+
36
+ ```typescript
37
+ export class MyAgent extends Agent<Env, State> {
38
+ observability = undefined; // disable for this agent
39
+ }
40
+ ```
41
+
42
+ ## Production: Tail Workers
43
+
44
+ In production, events appear as `diagnosticsChannelEvents` on the Tail Worker `event` object. Attach a Tail Worker to your agent's Worker to forward events to your observability platform.
@@ -0,0 +1,79 @@
1
+ # Queue & Retries
2
+
3
+ Fetch https://developers.cloudflare.com/agents/api-reference/queue-tasks/ and https://developers.cloudflare.com/agents/api-reference/retries/ for complete documentation.
4
+
5
+ ## Built-in Queue
6
+
7
+ FIFO queue persisted in SQLite. Sequential processing, one item at a time.
8
+
9
+ ```typescript
10
+ export class MyAgent extends Agent<Env, State> {
11
+ async onRequest(request: Request) {
12
+ this.queue("processItem", { id: "abc", data: "..." });
13
+ this.queue("processItem", { id: "def", data: "..." }, { retry: { maxAttempts: 5 } });
14
+ return new Response("Queued");
15
+ }
16
+
17
+ async processItem(payload: { id: string; data: string }, queueItem: QueueItem) {
18
+ await doWork(payload);
19
+ }
20
+ }
21
+ ```
22
+
23
+ ### Queue Management
24
+
25
+ ```typescript
26
+ const items = this.getQueue();
27
+ const byCallback = this.getQueues("processItem");
28
+ this.dequeue(itemId);
29
+ this.dequeueAll();
30
+ this.dequeueAllByCallback("processItem");
31
+ ```
32
+
33
+ ## Retries
34
+
35
+ Exponential backoff with full jitter. Defaults: 3 attempts, 100ms base, 3000ms max.
36
+
37
+ ```typescript
38
+ const result = await this.retry(
39
+ async () => {
40
+ const res = await fetch("https://api.example.com/data");
41
+ if (!res.ok) throw new Error(`HTTP ${res.status}`);
42
+ return res.json();
43
+ },
44
+ {
45
+ maxAttempts: 5,
46
+ baseDelayMs: 200,
47
+ maxDelayMs: 5000,
48
+ shouldRetry: (err, nextAttempt) => {
49
+ if (err.message.includes("429")) return true;
50
+ if (err.message.includes("401")) return false;
51
+ return nextAttempt <= 3;
52
+ }
53
+ }
54
+ );
55
+ ```
56
+
57
+ ### Retry on Schedules and Queue
58
+
59
+ ```typescript
60
+ await this.schedule(60, "task", payload, { retry: { maxAttempts: 3 } });
61
+ await this.scheduleEvery(30, "poll", undefined, { retry: { maxAttempts: 2 } });
62
+ this.queue("handler", payload, { retry: { maxAttempts: 5 } });
63
+ ```
64
+
65
+ ### Class-level Defaults
66
+
67
+ ```typescript
68
+ export class MyAgent extends Agent<Env, State> {
69
+ static options = {
70
+ retry: { maxAttempts: 5, baseDelayMs: 200, maxDelayMs: 10000 }
71
+ };
72
+ }
73
+ ```
74
+
75
+ ## Important
76
+
77
+ - `shouldRetry` only works on `this.retry()` — not on schedule/queue (callbacks aren't serializable)
78
+ - Queue retries block head-of-line; long delays keep the DO awake — use `schedule` for long waits instead
79
+ - No dead-letter queue — failed items are removed after retries exhausted
@@ -0,0 +1,75 @@
1
+ # Routing
2
+
3
+ Fetch https://developers.cloudflare.com/agents/api-reference/routing/ for complete documentation.
4
+
5
+ ## Default URL Pattern
6
+
7
+ `/agents/{kebab-class-name}/{instance-name}`
8
+
9
+ ```typescript
10
+ import { routeAgentRequest } from "agents";
11
+
12
+ export default {
13
+ fetch: (req, env) =>
14
+ routeAgentRequest(req, env) ?? new Response("Not found", { status: 404 })
15
+ };
16
+ ```
17
+
18
+ | Class | URL |
19
+ |-------|-----|
20
+ | `Counter` | `/agents/counter/user-123` |
21
+ | `ChatRoom` | `/agents/chat-room/lobby` |
22
+ | `MyAgent` | `/agents/my-agent/default` |
23
+
24
+ Subpaths after the instance name (e.g. `/agents/my-agent/default/api/data`) route to `onRequest`.
25
+
26
+ ## Custom Routing with `getAgentByName`
27
+
28
+ ```typescript
29
+ import { getAgentByName } from "agents";
30
+
31
+ export default {
32
+ async fetch(req, env) {
33
+ const url = new URL(req.url);
34
+ if (url.pathname.startsWith("/api/")) {
35
+ const agent = getAgentByName(env.MyAgent, "singleton");
36
+ return agent.fetch(req);
37
+ }
38
+ return routeAgentRequest(req, env);
39
+ }
40
+ };
41
+ ```
42
+
43
+ ## Options
44
+
45
+ ```typescript
46
+ routeAgentRequest(req, env, {
47
+ cors: true,
48
+ prefix: "/api/agents",
49
+ locationHint: "enam",
50
+ jurisdiction: "eu",
51
+ props: { userId: "123" },
52
+ onBeforeConnect: async (req) => { /* auth check */ },
53
+ onBeforeRequest: async (req) => { /* auth check */ }
54
+ });
55
+ ```
56
+
57
+ `props` are delivered to `onStart(props)` on first access.
58
+
59
+ ## Client Side
60
+
61
+ ```tsx
62
+ useAgent({
63
+ agent: "MyAgent",
64
+ name: "instance-1",
65
+ host: "https://my-worker.workers.dev",
66
+ basePath: "/api/agents",
67
+ path: "/custom-subpath"
68
+ });
69
+ ```
70
+
71
+ ## Common Mistakes
72
+
73
+ - Class name `MyAgent` becomes kebab `my-agent` in URLs — match exactly
74
+ - "Namespace not found" error = the `class_name` in wrangler doesn't match your exported class
75
+ - If `sendIdentityOnConnect: false`, the `ready` promise on the client may never resolve — use state sync instead