@poetic-ai/poetic 1.42.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 (782) hide show
  1. package/.github/SECURITY.md +47 -0
  2. package/.nvmrc +1 -0
  3. package/.poetic/README.md +37 -0
  4. package/.poetic/providers/catalog.json +12051 -0
  5. package/.poetic/providers/pricing.json +1272 -0
  6. package/.poetic/providers/registry.json +3369 -0
  7. package/CHANGELOG.md +552 -0
  8. package/CODE_OF_CONDUCT.md +40 -0
  9. package/CONTRIBUTING.md +23 -0
  10. package/INSTALL.md +454 -0
  11. package/LICENSE +21 -0
  12. package/README.md +474 -0
  13. package/dist/BasicOptimizationCompetitionRunner-5H5TBYO4.js +153 -0
  14. package/dist/ExecutionTracker-UVONC4C6.js +16 -0
  15. package/dist/OptimizationConfig-7DFY2TST.js +17 -0
  16. package/dist/OptimizationEngine-JIMGP3LY.js +1597 -0
  17. package/dist/PromptStore-U6ZD3ZMQ.js +18 -0
  18. package/dist/actions-LUJPINLJ.js +322 -0
  19. package/dist/agent-ingest-3DJUJ7FU.js +53 -0
  20. package/dist/aggregator-DNCBINFO.js +12 -0
  21. package/dist/ai-judge-5QT5QJVU.js +156 -0
  22. package/dist/allowlist-grounding-RO6HKUFI.js +16 -0
  23. package/dist/allowlist-utils-23V7TJ3G.js +28 -0
  24. package/dist/anchored-turn-service-JULUCUIK.js +489 -0
  25. package/dist/api-transport-4TYTNLTJ.js +1087 -0
  26. package/dist/apply-completion-mode-AW2MOS3R.js +89 -0
  27. package/dist/artifact-migrator-23L45ISD.js +267 -0
  28. package/dist/ask-HWVV6QFR.js +135 -0
  29. package/dist/auth-5KEDKAPP.js +67 -0
  30. package/dist/auth-7TT3JINV.js +78 -0
  31. package/dist/auth-E6XUNZ5M.js +68 -0
  32. package/dist/auth-H3XDZE22.js +134 -0
  33. package/dist/auth-OC4E6633.js +71 -0
  34. package/dist/auth-S4CTX4GQ.js +44 -0
  35. package/dist/auth-YLH3S7EY.js +69 -0
  36. package/dist/auth-liveness-TDDEZY3T.js +46 -0
  37. package/dist/auto-optimizer-VPRWOWGU.js +80 -0
  38. package/dist/autoloop-cleanup-JOGKTLWA.js +109 -0
  39. package/dist/autoloop-evidence-gates-PCDALGVJ.js +38 -0
  40. package/dist/autoloop-gate-policy-Z7FVJVXV.js +175 -0
  41. package/dist/autoloop-helpers-2KTK43GL.js +22 -0
  42. package/dist/autoloop-ledger-W7QO62PX.js +96 -0
  43. package/dist/autoloop-ledger-subscriber-Z5RW5EIE.js +162 -0
  44. package/dist/autoloop-run-defaults-FERGRZGP.js +19 -0
  45. package/dist/autoloop-run-lock-CT2NWSV3.js +197 -0
  46. package/dist/autoloop-success-J2VKKBXQ.js +85 -0
  47. package/dist/autoloop-termination-summary-RN75F422.js +58 -0
  48. package/dist/autoloop-trajectory-XFIEXP5Z.js +282 -0
  49. package/dist/autoloop-wall-clock-T7ZVIQOC.js +12 -0
  50. package/dist/autonomous-loop-controller-PW4XVFGQ.js +4120 -0
  51. package/dist/backend-P3DAYRP7.js +29 -0
  52. package/dist/background-executor-CBN552V4.js +257 -0
  53. package/dist/backlog-execution-intent-U4XYPTV6.js +15 -0
  54. package/dist/backup-active-store-5WXG6SXT.js +17 -0
  55. package/dist/backup-telemetry-db-XGLXAA3N.js +254 -0
  56. package/dist/basic-competition-master-VCSBJVRN.js +344 -0
  57. package/dist/branch-archive-manager-RP6FP3ZC.js +254 -0
  58. package/dist/branch-cleanup-manager-RSHAI7YR.js +20 -0
  59. package/dist/build-gate-YHGRB4QB.js +71 -0
  60. package/dist/change-summary-WY7J5TOX.js +33 -0
  61. package/dist/chunk-23A26CSN.js +123 -0
  62. package/dist/chunk-27UTJD3M.js +265 -0
  63. package/dist/chunk-2A5CILN3.js +310 -0
  64. package/dist/chunk-2AQUWJPW.js +225 -0
  65. package/dist/chunk-2BZ53J6J.js +2344 -0
  66. package/dist/chunk-2DY5KNVM.js +276 -0
  67. package/dist/chunk-2EIA4RBE.js +659 -0
  68. package/dist/chunk-2IUXIGQD.js +1064 -0
  69. package/dist/chunk-2N42MS2Z.js +2193 -0
  70. package/dist/chunk-2QJ3H3L7.js +42 -0
  71. package/dist/chunk-2QLYTVYX.js +791 -0
  72. package/dist/chunk-2VSQMRCB.js +18 -0
  73. package/dist/chunk-2XQXYBM2.js +130 -0
  74. package/dist/chunk-2YFUIER7.js +426 -0
  75. package/dist/chunk-34CNP2HB.js +148 -0
  76. package/dist/chunk-35P3W3JX.js +456 -0
  77. package/dist/chunk-36PEBZAF.js +18 -0
  78. package/dist/chunk-3AOKYKA7.js +22 -0
  79. package/dist/chunk-3BCUNHKF.js +475 -0
  80. package/dist/chunk-3FLXLLB7.js +26 -0
  81. package/dist/chunk-3FOZ2VHV.js +100 -0
  82. package/dist/chunk-3G6FZCRF.js +106 -0
  83. package/dist/chunk-3M57DADF.js +44 -0
  84. package/dist/chunk-3S62LLWJ.js +543 -0
  85. package/dist/chunk-3ZPQLGV7.js +2904 -0
  86. package/dist/chunk-44N5WZZH.js +45 -0
  87. package/dist/chunk-45FPSA3B.js +125 -0
  88. package/dist/chunk-4BJ3O4RQ.js +929 -0
  89. package/dist/chunk-4BOP7T6L.js +2321 -0
  90. package/dist/chunk-4BTDUT2S.js +42 -0
  91. package/dist/chunk-4CSS7WVI.js +143 -0
  92. package/dist/chunk-4CUY7AFY.js +247 -0
  93. package/dist/chunk-4GSN5O5J.js +62 -0
  94. package/dist/chunk-4HN6DF7V.js +1027 -0
  95. package/dist/chunk-4IAPOG5V.js +415 -0
  96. package/dist/chunk-4IYIZQWV.js +48 -0
  97. package/dist/chunk-4NXPXE62.js +84 -0
  98. package/dist/chunk-4RCCF5BR.js +712 -0
  99. package/dist/chunk-4V7NAQ4R.js +19527 -0
  100. package/dist/chunk-4VJITV4P.js +445 -0
  101. package/dist/chunk-4YX7J6QL.js +1859 -0
  102. package/dist/chunk-527OBWQB.js +338 -0
  103. package/dist/chunk-5D4A7E3D.js +448 -0
  104. package/dist/chunk-5DLKYTQX.js +4003 -0
  105. package/dist/chunk-5EERLVZB.js +139 -0
  106. package/dist/chunk-5H72XE4H.js +256 -0
  107. package/dist/chunk-5HDP7XZG.js +91 -0
  108. package/dist/chunk-5LAMRH4X.js +969 -0
  109. package/dist/chunk-5LTN43AS.js +1972 -0
  110. package/dist/chunk-5RBHQYDB.js +2206 -0
  111. package/dist/chunk-5WCQRDRB.js +588 -0
  112. package/dist/chunk-5WRLK5KW.js +700 -0
  113. package/dist/chunk-5ZCXC23G.js +595 -0
  114. package/dist/chunk-6BM72ZMG.js +31 -0
  115. package/dist/chunk-6EDAJH2I.js +68 -0
  116. package/dist/chunk-6EQKFDBH.js +457 -0
  117. package/dist/chunk-6MFRHTRI.js +115 -0
  118. package/dist/chunk-6TZJRKNW.js +321 -0
  119. package/dist/chunk-6V7HGQFZ.js +20 -0
  120. package/dist/chunk-6VWVO2TU.js +3746 -0
  121. package/dist/chunk-6Y5TWI7H.js +146 -0
  122. package/dist/chunk-6Y5U7UFY.js +91 -0
  123. package/dist/chunk-6ZLAK3XG.js +14 -0
  124. package/dist/chunk-72XCRQED.js +34 -0
  125. package/dist/chunk-72YTZMAM.js +589 -0
  126. package/dist/chunk-73BBJOKA.js +263 -0
  127. package/dist/chunk-73NCTWKL.js +188 -0
  128. package/dist/chunk-77I6G4CO.js +1 -0
  129. package/dist/chunk-7DHRDWFS.js +3104 -0
  130. package/dist/chunk-7DNSNKJV.js +78 -0
  131. package/dist/chunk-7FMJVYBS.js +307 -0
  132. package/dist/chunk-7GDRQBQC.js +419 -0
  133. package/dist/chunk-7GPCEFUV.js +270 -0
  134. package/dist/chunk-7IL4A2PP.js +948 -0
  135. package/dist/chunk-7MMLMXO6.js +3679 -0
  136. package/dist/chunk-7QCZSLBH.js +1 -0
  137. package/dist/chunk-7R2WLDOS.js +62 -0
  138. package/dist/chunk-7T7RUJI7.js +949 -0
  139. package/dist/chunk-A2WKSVX7.js +43 -0
  140. package/dist/chunk-A3YGID55.js +133 -0
  141. package/dist/chunk-A722DEVA.js +14 -0
  142. package/dist/chunk-ACDIT7OP.js +1376 -0
  143. package/dist/chunk-ACKIPAOJ.js +302 -0
  144. package/dist/chunk-APPNGGN7.js +365 -0
  145. package/dist/chunk-APV6MK5E.js +137 -0
  146. package/dist/chunk-ASEP3M2W.js +968 -0
  147. package/dist/chunk-AT4TNPWW.js +2931 -0
  148. package/dist/chunk-ATVKCSGT.js +250 -0
  149. package/dist/chunk-AURFMVCD.js +899 -0
  150. package/dist/chunk-AX6GWE7V.js +47 -0
  151. package/dist/chunk-AY5EWJPF.js +385 -0
  152. package/dist/chunk-BAV2HJXS.js +194 -0
  153. package/dist/chunk-BBHRN366.js +89 -0
  154. package/dist/chunk-BBPSTTPA.js +1004 -0
  155. package/dist/chunk-BDATUDDJ.js +992 -0
  156. package/dist/chunk-BKE5PG5L.js +20414 -0
  157. package/dist/chunk-BLPHWMDK.js +797 -0
  158. package/dist/chunk-BSE4R6XD.js +322 -0
  159. package/dist/chunk-BXGMAU4A.js +396 -0
  160. package/dist/chunk-BXI4NXL3.js +507 -0
  161. package/dist/chunk-BZU2O43F.js +1125 -0
  162. package/dist/chunk-C3L6YQ7P.js +147 -0
  163. package/dist/chunk-C57KJOUQ.js +121 -0
  164. package/dist/chunk-CCV7BPSY.js +118 -0
  165. package/dist/chunk-CD7ISXA4.js +826 -0
  166. package/dist/chunk-CE5OZBYY.js +21 -0
  167. package/dist/chunk-CFBIG37O.js +154 -0
  168. package/dist/chunk-CJC6GZ46.js +457 -0
  169. package/dist/chunk-CKCDGXIV.js +408 -0
  170. package/dist/chunk-CKNX3TTP.js +10338 -0
  171. package/dist/chunk-CLKSETWE.js +10 -0
  172. package/dist/chunk-CP7H3HSP.js +1552 -0
  173. package/dist/chunk-CPLEWXNZ.js +66 -0
  174. package/dist/chunk-CQM3A35X.js +844 -0
  175. package/dist/chunk-CS6P76D3.js +103 -0
  176. package/dist/chunk-CTLUBNCW.js +622 -0
  177. package/dist/chunk-CUSRN6RJ.js +632 -0
  178. package/dist/chunk-D5EP5D2W.js +26 -0
  179. package/dist/chunk-D5RYINO7.js +412 -0
  180. package/dist/chunk-DBFS4HMH.js +751 -0
  181. package/dist/chunk-DC4ZYMXJ.js +115 -0
  182. package/dist/chunk-DCBZP442.js +9243 -0
  183. package/dist/chunk-DCYF7EKG.js +26 -0
  184. package/dist/chunk-DDMAFNUK.js +5351 -0
  185. package/dist/chunk-DF5SLDE4.js +966 -0
  186. package/dist/chunk-DJFW7SMX.js +348 -0
  187. package/dist/chunk-DQFLLBJW.js +121 -0
  188. package/dist/chunk-DSFM56OA.js +1203 -0
  189. package/dist/chunk-DTY4APYV.js +218 -0
  190. package/dist/chunk-DXH5JBRS.js +437 -0
  191. package/dist/chunk-E3NTPHEO.js +194 -0
  192. package/dist/chunk-E74LUIID.js +302 -0
  193. package/dist/chunk-EI57M5BI.js +194 -0
  194. package/dist/chunk-EJ4ZAWLV.js +305 -0
  195. package/dist/chunk-EJGCZGUF.js +1483 -0
  196. package/dist/chunk-EK2U3YEG.js +486 -0
  197. package/dist/chunk-ELMFYNV7.js +109 -0
  198. package/dist/chunk-ENRGKNR5.js +25 -0
  199. package/dist/chunk-ETYDXCK7.js +679 -0
  200. package/dist/chunk-EYRH3W74.js +239 -0
  201. package/dist/chunk-F23DIWNN.js +1024 -0
  202. package/dist/chunk-F5JO7HAS.js +94 -0
  203. package/dist/chunk-F7ER6ANO.js +174 -0
  204. package/dist/chunk-FATUVIIN.js +374 -0
  205. package/dist/chunk-FC23CTXV.js +322 -0
  206. package/dist/chunk-FD4ERYEG.js +22 -0
  207. package/dist/chunk-FH7WOJAE.js +79 -0
  208. package/dist/chunk-FHOWVDF5.js +1342 -0
  209. package/dist/chunk-FKAUPHMR.js +96 -0
  210. package/dist/chunk-FONNFJXA.js +137 -0
  211. package/dist/chunk-FQ7FSZRW.js +75 -0
  212. package/dist/chunk-FRG57FPM.js +240 -0
  213. package/dist/chunk-FUVP64ER.js +31 -0
  214. package/dist/chunk-FYOILAN5.js +6818 -0
  215. package/dist/chunk-G35UYQ6Z.js +69 -0
  216. package/dist/chunk-G36W2T2S.js +1143 -0
  217. package/dist/chunk-G3L2L5XZ.js +49 -0
  218. package/dist/chunk-G4THLFV3.js +148 -0
  219. package/dist/chunk-GAFJEYLK.js +29 -0
  220. package/dist/chunk-GFGYB2ZU.js +1689 -0
  221. package/dist/chunk-GG6KJYW6.js +85 -0
  222. package/dist/chunk-GHHFDU2U.js +55 -0
  223. package/dist/chunk-GHTZSQB7.js +57 -0
  224. package/dist/chunk-GK37ILCX.js +1231 -0
  225. package/dist/chunk-GKN3HMN4.js +2809 -0
  226. package/dist/chunk-GNVDBVJP.js +156 -0
  227. package/dist/chunk-GPEL3FBM.js +924 -0
  228. package/dist/chunk-GPSNGPZS.js +1604 -0
  229. package/dist/chunk-GSGD5E4C.js +30 -0
  230. package/dist/chunk-GSUQJJXQ.js +331 -0
  231. package/dist/chunk-GSV226X6.js +110 -0
  232. package/dist/chunk-H2AYQIHW.js +224 -0
  233. package/dist/chunk-H66DXFS5.js +1374 -0
  234. package/dist/chunk-H6G7QRMQ.js +35 -0
  235. package/dist/chunk-H7JAGHZT.js +59 -0
  236. package/dist/chunk-H7ZEFECA.js +316 -0
  237. package/dist/chunk-HAC6EHZZ.js +79 -0
  238. package/dist/chunk-HIO33P3G.js +19 -0
  239. package/dist/chunk-HMVQIPH3.js +547 -0
  240. package/dist/chunk-HOYBYAOA.js +257 -0
  241. package/dist/chunk-HX5P3CSP.js +1784 -0
  242. package/dist/chunk-I46EG2XQ.js +65 -0
  243. package/dist/chunk-I4NPDSCB.js +279 -0
  244. package/dist/chunk-I5WRT7ZR.js +514 -0
  245. package/dist/chunk-IC7I6YIJ.js +301 -0
  246. package/dist/chunk-IDCSOZVN.js +78 -0
  247. package/dist/chunk-IFCBYECK.js +112 -0
  248. package/dist/chunk-IFZCPEY2.js +66 -0
  249. package/dist/chunk-IKFP2KUR.js +48 -0
  250. package/dist/chunk-IRFBN336.js +878 -0
  251. package/dist/chunk-IUXNGKA6.js +152 -0
  252. package/dist/chunk-IV2RVAN7.js +1356 -0
  253. package/dist/chunk-IZYIQQ7X.js +53 -0
  254. package/dist/chunk-J3UUR7DE.js +210 -0
  255. package/dist/chunk-J54VUAY2.js +566 -0
  256. package/dist/chunk-J62KPGII.js +464 -0
  257. package/dist/chunk-J6P3FWWW.js +130 -0
  258. package/dist/chunk-JKBHJQMT.js +434 -0
  259. package/dist/chunk-JLS65NUQ.js +14 -0
  260. package/dist/chunk-JOSYEJKY.js +141 -0
  261. package/dist/chunk-JPKSXKNB.js +94 -0
  262. package/dist/chunk-JQNJB2BB.js +2440 -0
  263. package/dist/chunk-JRVNSWSQ.js +2626 -0
  264. package/dist/chunk-JSWMRQYG.js +28 -0
  265. package/dist/chunk-JZKNBBIB.js +152 -0
  266. package/dist/chunk-K54Y7MLK.js +160 -0
  267. package/dist/chunk-K65546RE.js +183 -0
  268. package/dist/chunk-KM3F7SYE.js +702 -0
  269. package/dist/chunk-KNDYMVWN.js +102 -0
  270. package/dist/chunk-KNT72VR6.js +132 -0
  271. package/dist/chunk-KP6YILMU.js +482 -0
  272. package/dist/chunk-KQEBSK3T.js +274 -0
  273. package/dist/chunk-KT6VHSPF.js +84 -0
  274. package/dist/chunk-KTMW65UX.js +14 -0
  275. package/dist/chunk-KZ5CJVBP.js +1813 -0
  276. package/dist/chunk-L4427KOE.js +26 -0
  277. package/dist/chunk-L6OM4A22.js +189 -0
  278. package/dist/chunk-L7E6XCRA.js +1042 -0
  279. package/dist/chunk-L7JZLXQL.js +173 -0
  280. package/dist/chunk-LAMKBTXX.js +40 -0
  281. package/dist/chunk-LDCF2MKN.js +132 -0
  282. package/dist/chunk-LEIIWPWQ.js +78 -0
  283. package/dist/chunk-LFTQVYBB.js +31 -0
  284. package/dist/chunk-LG3PDRTR.js +2872 -0
  285. package/dist/chunk-LGHII5ET.js +23 -0
  286. package/dist/chunk-LH5QY22X.js +1205 -0
  287. package/dist/chunk-LIVJ6266.js +438 -0
  288. package/dist/chunk-LKRAR3IH.js +276 -0
  289. package/dist/chunk-LO23NABI.js +3063 -0
  290. package/dist/chunk-LO3X5NLS.js +326 -0
  291. package/dist/chunk-LPITVM7M.js +339 -0
  292. package/dist/chunk-LR5IJIGV.js +810 -0
  293. package/dist/chunk-LRGMHROI.js +79 -0
  294. package/dist/chunk-LUVKFFWR.js +315 -0
  295. package/dist/chunk-LWCBNGH6.js +35 -0
  296. package/dist/chunk-LWTN3WRV.js +260 -0
  297. package/dist/chunk-M3HQYKQX.js +308 -0
  298. package/dist/chunk-M6GVSPEH.js +1016 -0
  299. package/dist/chunk-MF5HP6XV.js +221 -0
  300. package/dist/chunk-MHLCBZJB.js +328 -0
  301. package/dist/chunk-MN6PL4AN.js +120 -0
  302. package/dist/chunk-MOEY65Z6.js +5678 -0
  303. package/dist/chunk-MQ4WA34C.js +206 -0
  304. package/dist/chunk-MWHF5V7U.js +223 -0
  305. package/dist/chunk-MWHLBPNU.js +211 -0
  306. package/dist/chunk-MWK5UZQ3.js +1068 -0
  307. package/dist/chunk-MYLH2S4G.js +64 -0
  308. package/dist/chunk-MZ5WYKNA.js +28 -0
  309. package/dist/chunk-N4VTRA7K.js +131 -0
  310. package/dist/chunk-N5DX4JAK.js +12 -0
  311. package/dist/chunk-N65O4XTH.js +5011 -0
  312. package/dist/chunk-NEQUQHOX.js +223 -0
  313. package/dist/chunk-NGK6PEOG.js +25 -0
  314. package/dist/chunk-NJVD4PWE.js +1033 -0
  315. package/dist/chunk-NM6PMYY4.js +768 -0
  316. package/dist/chunk-NN4PJDHP.js +708 -0
  317. package/dist/chunk-NP2V3L7K.js +226 -0
  318. package/dist/chunk-NRLY536M.js +260 -0
  319. package/dist/chunk-NRNE225N.js +1270 -0
  320. package/dist/chunk-NS2K2GTP.js +605 -0
  321. package/dist/chunk-NS33V3IM.js +51 -0
  322. package/dist/chunk-NSHASMZZ.js +71 -0
  323. package/dist/chunk-NWOYOA6H.js +378 -0
  324. package/dist/chunk-NWRUSEXG.js +322 -0
  325. package/dist/chunk-NZGDAWIP.js +1905 -0
  326. package/dist/chunk-O47UOKU3.js +395 -0
  327. package/dist/chunk-O4G2W3ST.js +9831 -0
  328. package/dist/chunk-O6V4PNLO.js +63 -0
  329. package/dist/chunk-OA4GPILI.js +624 -0
  330. package/dist/chunk-OGMSYL6J.js +227 -0
  331. package/dist/chunk-OIS7J26S.js +319 -0
  332. package/dist/chunk-OMX5VL43.js +79 -0
  333. package/dist/chunk-ON3G73BU.js +264 -0
  334. package/dist/chunk-OPYFYTWQ.js +220 -0
  335. package/dist/chunk-OQ6K46CK.js +1734 -0
  336. package/dist/chunk-OYZYO7TV.js +47 -0
  337. package/dist/chunk-OZ4REHIN.js +4386 -0
  338. package/dist/chunk-P47VN5F4.js +282 -0
  339. package/dist/chunk-P5I4X7A7.js +353 -0
  340. package/dist/chunk-P6VQROCO.js +594 -0
  341. package/dist/chunk-P7CQGPLS.js +30 -0
  342. package/dist/chunk-PCAGC5MR.js +1763 -0
  343. package/dist/chunk-PFTQBXS6.js +5181 -0
  344. package/dist/chunk-PGSPX4SU.js +15 -0
  345. package/dist/chunk-PIKLF7BM.js +432 -0
  346. package/dist/chunk-PJWJ3SAV.js +22 -0
  347. package/dist/chunk-PKIFMV72.js +100 -0
  348. package/dist/chunk-PL37JDNA.js +189 -0
  349. package/dist/chunk-PTH5E5XO.js +195 -0
  350. package/dist/chunk-PW6AXLQC.js +4128 -0
  351. package/dist/chunk-PYITM4N2.js +79 -0
  352. package/dist/chunk-PZ5AY32C.js +10 -0
  353. package/dist/chunk-Q3RO7N35.js +45 -0
  354. package/dist/chunk-Q3WIC6GQ.js +2670 -0
  355. package/dist/chunk-Q5XIXSHX.js +271 -0
  356. package/dist/chunk-QGJDMEOV.js +34 -0
  357. package/dist/chunk-QNOB37UH.js +58 -0
  358. package/dist/chunk-QOCOVLUH.js +462 -0
  359. package/dist/chunk-QTCJ5CC5.js +172 -0
  360. package/dist/chunk-QVFV5IP2.js +232 -0
  361. package/dist/chunk-QVZMFDYG.js +29 -0
  362. package/dist/chunk-R35PEUKH.js +511 -0
  363. package/dist/chunk-R4UWBC35.js +200 -0
  364. package/dist/chunk-R6MLCREW.js +44 -0
  365. package/dist/chunk-R6W23LKN.js +254 -0
  366. package/dist/chunk-R7XDDX2A.js +4007 -0
  367. package/dist/chunk-RDFRCT64.js +168 -0
  368. package/dist/chunk-RE5VZDFQ.js +58 -0
  369. package/dist/chunk-RGROYC2G.js +638 -0
  370. package/dist/chunk-RGWHUI5E.js +68 -0
  371. package/dist/chunk-RHVG6UNL.js +205 -0
  372. package/dist/chunk-RI4EX2QE.js +18 -0
  373. package/dist/chunk-RJAAKDRX.js +17 -0
  374. package/dist/chunk-ROMHOSMQ.js +185 -0
  375. package/dist/chunk-RWREC3KJ.js +517 -0
  376. package/dist/chunk-RYNETRDJ.js +118 -0
  377. package/dist/chunk-RZY7RKM5.js +500 -0
  378. package/dist/chunk-S2MNWFAG.js +52 -0
  379. package/dist/chunk-S2VQCZO4.js +22 -0
  380. package/dist/chunk-S54MKU6V.js +117 -0
  381. package/dist/chunk-S5OIDFRM.js +302 -0
  382. package/dist/chunk-SCW4ZF6R.js +150 -0
  383. package/dist/chunk-SLS2N4PH.js +2213 -0
  384. package/dist/chunk-SNLBO4BF.js +247 -0
  385. package/dist/chunk-SP3LFU6B.js +60 -0
  386. package/dist/chunk-SQQTDDQA.js +537 -0
  387. package/dist/chunk-STV6LYYE.js +45 -0
  388. package/dist/chunk-SURZ2WFE.js +326 -0
  389. package/dist/chunk-SZ7DL357.js +1047 -0
  390. package/dist/chunk-T5E4NQCM.js +5742 -0
  391. package/dist/chunk-TAJPCXSB.js +13 -0
  392. package/dist/chunk-TAOOYK3P.js +358 -0
  393. package/dist/chunk-TDSEX5CF.js +24 -0
  394. package/dist/chunk-TFTGP7Z7.js +174 -0
  395. package/dist/chunk-TGON4N4O.js +197 -0
  396. package/dist/chunk-TGQZHDY2.js +2373 -0
  397. package/dist/chunk-TJJZ2OKV.js +6783 -0
  398. package/dist/chunk-TRSVUPCX.js +25 -0
  399. package/dist/chunk-TSXGRLPR.js +107 -0
  400. package/dist/chunk-U2S3YEX3.js +224 -0
  401. package/dist/chunk-U45RTRGY.js +818 -0
  402. package/dist/chunk-U6C3VVWS.js +13 -0
  403. package/dist/chunk-UDMS5AD3.js +307 -0
  404. package/dist/chunk-UGX7GI37.js +94 -0
  405. package/dist/chunk-UH3JJSHK.js +1 -0
  406. package/dist/chunk-UHRBTZYY.js +208 -0
  407. package/dist/chunk-UHT2KRG5.js +193 -0
  408. package/dist/chunk-UI2F6DJ5.js +118 -0
  409. package/dist/chunk-UMAKSB4Z.js +284 -0
  410. package/dist/chunk-UR2IBGIM.js +521 -0
  411. package/dist/chunk-UUH2RVKS.js +585 -0
  412. package/dist/chunk-UVJ4PJDK.js +4533 -0
  413. package/dist/chunk-V53UG2OT.js +9924 -0
  414. package/dist/chunk-V72RMBM4.js +48 -0
  415. package/dist/chunk-VBNCKCCI.js +16 -0
  416. package/dist/chunk-VNSYKC25.js +24 -0
  417. package/dist/chunk-VPHVFK4A.js +1984 -0
  418. package/dist/chunk-VTLNJQ44.js +133 -0
  419. package/dist/chunk-VTW7HP3R.js +100 -0
  420. package/dist/chunk-VVGEPBPS.js +218 -0
  421. package/dist/chunk-VVLLL7I4.js +166 -0
  422. package/dist/chunk-VX3UMWB7.js +483 -0
  423. package/dist/chunk-VXF4Q3FW.js +20 -0
  424. package/dist/chunk-W3JMT2YY.js +712 -0
  425. package/dist/chunk-WDUORIHF.js +877 -0
  426. package/dist/chunk-WDVTY4U6.js +148 -0
  427. package/dist/chunk-WIFZCHEG.js +12566 -0
  428. package/dist/chunk-WIRN3F75.js +736 -0
  429. package/dist/chunk-WMPU2UOV.js +82 -0
  430. package/dist/chunk-WTOKKE2V.js +784 -0
  431. package/dist/chunk-WX5IRLF6.js +740 -0
  432. package/dist/chunk-WZ6U3O7I.js +1581 -0
  433. package/dist/chunk-XAONGNST.js +57 -0
  434. package/dist/chunk-XB5YLCLB.js +13 -0
  435. package/dist/chunk-XEP5NQ5Y.js +688 -0
  436. package/dist/chunk-XGYF2QMZ.js +351 -0
  437. package/dist/chunk-XHEKQENB.js +255 -0
  438. package/dist/chunk-XNO4FM6X.js +1124 -0
  439. package/dist/chunk-XPHKYHO4.js +878 -0
  440. package/dist/chunk-XPK2I4NC.js +405 -0
  441. package/dist/chunk-XPU2XADL.js +2175 -0
  442. package/dist/chunk-XQD2B6BB.js +507 -0
  443. package/dist/chunk-XT2ZQVTC.js +558 -0
  444. package/dist/chunk-XTXJGGUV.js +351 -0
  445. package/dist/chunk-XUXVDPSZ.js +50 -0
  446. package/dist/chunk-XV7NZL4B.js +57 -0
  447. package/dist/chunk-XZE4XARH.js +563 -0
  448. package/dist/chunk-XZYR5EDO.js +152 -0
  449. package/dist/chunk-Y3J4JMTU.js +61 -0
  450. package/dist/chunk-Y55LZN5U.js +52 -0
  451. package/dist/chunk-Y5VN7DMP.js +112 -0
  452. package/dist/chunk-Y67VAHN4.js +459 -0
  453. package/dist/chunk-YAXSKEUH.js +3544 -0
  454. package/dist/chunk-YB3JD4E6.js +975 -0
  455. package/dist/chunk-YESZJFK6.js +220 -0
  456. package/dist/chunk-YGXKOBQQ.js +292 -0
  457. package/dist/chunk-YMX76IOS.js +31 -0
  458. package/dist/chunk-YOTXESEH.js +257 -0
  459. package/dist/chunk-YTYIEZQY.js +119 -0
  460. package/dist/chunk-YVORHQ2S.js +579 -0
  461. package/dist/chunk-Z2CUQDAR.js +3429 -0
  462. package/dist/chunk-Z2KYOFHS.js +7000 -0
  463. package/dist/chunk-Z6PC7QX6.js +161 -0
  464. package/dist/chunk-ZDTGECTN.js +235 -0
  465. package/dist/chunk-ZIPWI2LY.js +151 -0
  466. package/dist/chunk-ZSKKMTQJ.js +554 -0
  467. package/dist/chunk-ZTT5IVPY.js +1160 -0
  468. package/dist/chunk-ZX65UI5W.js +78 -0
  469. package/dist/chunk-ZYG7GGKO.js +218 -0
  470. package/dist/chunk-ZZZUL4OF.js +38 -0
  471. package/dist/cli-utils-IXL26KJT.js +40 -0
  472. package/dist/cli-validation-WLXWLUJL.js +111 -0
  473. package/dist/commit-utils-P7CRJF5N.js +202 -0
  474. package/dist/compete-config-resolver-R5ULXMYH.js +76 -0
  475. package/dist/compete-request-62JESVET.js +364 -0
  476. package/dist/compete-results-QEPG6FZX.js +208 -0
  477. package/dist/competition-outcome-tracker-R32OOZ43.js +38 -0
  478. package/dist/config-JCOKXOQT.js +166 -0
  479. package/dist/config-audit-EL3GHXS7.js +360 -0
  480. package/dist/config-explain-TNILDEVJ.js +12 -0
  481. package/dist/config-loader-VPFPFO4B.js +38 -0
  482. package/dist/config-manager-7T4E2BQO.js +67 -0
  483. package/dist/config-validator-KKOHOW7O.js +72 -0
  484. package/dist/cost-YC42XUF3.js +53 -0
  485. package/dist/coverage-orchestrator-CISNKJC2.js +772 -0
  486. package/dist/coverage-scanner-YVD62MLH.js +12 -0
  487. package/dist/createCompetitionRunner-LJG6ZQSO.js +46 -0
  488. package/dist/data-migration-state-VJK64DLT.js +31 -0
  489. package/dist/db-migrator-XSEIOGWY.js +34 -0
  490. package/dist/discovery-JGYGDD25.js +25 -0
  491. package/dist/doctor-GJOYE7AE.js +186 -0
  492. package/dist/domain-analyzer-AWF3RP6E.js +29 -0
  493. package/dist/ensure-initialized-744DIZEZ.js +52 -0
  494. package/dist/entry.js +940 -0
  495. package/dist/environment-YS45U5ZI.js +81 -0
  496. package/dist/error-parser-core-PPZ36A4S.js +50 -0
  497. package/dist/escalation-ladder-MKTCEGSA.js +130 -0
  498. package/dist/evaluation-context-KV4GZNN7.js +35 -0
  499. package/dist/evidence-plan-resolver-GBSYSAPX.js +85 -0
  500. package/dist/execution-data-writer-3ODTBDLH.js +53 -0
  501. package/dist/execution-policy-applier-ZHD3DCF3.js +31 -0
  502. package/dist/execution-preflight-Z4Y64V3I.js +209 -0
  503. package/dist/execution-roles-R3DPPMD3.js +66 -0
  504. package/dist/exit-code-error-Z4SW2DVK.js +14 -0
  505. package/dist/external-temp-cleanup-N2RZH4QP.js +311 -0
  506. package/dist/factory-XBN7DFIM.js +149 -0
  507. package/dist/file-utils-XIVR2ZMA.js +47 -0
  508. package/dist/flywheel-autoloop-executor-UILGOFFK.js +249 -0
  509. package/dist/flywheel-competition-executor-JOBEXTRB.js +259 -0
  510. package/dist/flywheel-executor-6JFLA6J5.js +369 -0
  511. package/dist/flywheel-git-isolation-UC5NIEVU.js +48 -0
  512. package/dist/flywheel-manifest-5UC4VBMA.js +108 -0
  513. package/dist/flywheel-model-defaults-7CVKP53V.js +27 -0
  514. package/dist/flywheel-preflight-XEY5SHM6.js +104 -0
  515. package/dist/flywheel-resume-7HELH7QS.js +23 -0
  516. package/dist/flywheel-safety-7U7DPOAP.js +28 -0
  517. package/dist/flywheel-scope-decision-ZHKF6ZIN.js +11 -0
  518. package/dist/get-telemetry-logger-DPVWWIYY.js +73 -0
  519. package/dist/git-worktree-IY6V6DUO.js +18 -0
  520. package/dist/github-pr-manager-4LXEKJTA.js +211 -0
  521. package/dist/guidance-profile-config-E7XJL2VP.js +117 -0
  522. package/dist/guidance-profile-renderer-QK2YMAAP.js +21 -0
  523. package/dist/index-query-4JEUKA44.js +31 -0
  524. package/dist/index.js +108661 -0
  525. package/dist/instructions-6BURLQJC.js +64 -0
  526. package/dist/invoke-provider-auth-GRUYP44M.js +223 -0
  527. package/dist/judge-scoring.json +80 -0
  528. package/dist/judge-test.js +555 -0
  529. package/dist/lab-mode-OTWVHN63.js +39 -0
  530. package/dist/lab-utils-BJRFLGK4.js +23 -0
  531. package/dist/linux-host-class-UY4KVLFD.js +29 -0
  532. package/dist/llm-judge-executor-F7Z3HO77.js +133 -0
  533. package/dist/local-executor-CEHWE2PL.js +223 -0
  534. package/dist/logger-33TR6EE5.js +72 -0
  535. package/dist/loop-spec-XTLQAVZ7.js +191 -0
  536. package/dist/manager-2HJG5CLT.js +25 -0
  537. package/dist/matrix-prompt-builder-6UDN5X3F.js +497 -0
  538. package/dist/matrix-result-parser-7W35EUOV.js +15 -0
  539. package/dist/metadata-HQ43NDEK.js +22 -0
  540. package/dist/model-invocations-db-QBO4Y7WZ.js +38 -0
  541. package/dist/monitor-XGYBG2DW.js +72 -0
  542. package/dist/next-PB5ZXZKB.js +90 -0
  543. package/dist/next-ZBDK725T.js +69 -0
  544. package/dist/optimization-config-resolver-O6WKR47U.js +75 -0
  545. package/dist/package-3YCWIQQ5.js +10 -0
  546. package/dist/parallel-orchestrator-NL7YJJU2.js +297 -0
  547. package/dist/parallel-worker.js +279 -0
  548. package/dist/parse-git-status-PIAF3OTP.js +10 -0
  549. package/dist/path-security-ETTH6TZL.js +39 -0
  550. package/dist/pattern-bank-UNJR5ADV.js +15 -0
  551. package/dist/plan-backlog-list-fast-VAGYBV3J.js +270 -0
  552. package/dist/plan-backlog-show-fast-SG2CZPW3.js +406 -0
  553. package/dist/plan-sprint-list-fast-LURAX47V.js +162 -0
  554. package/dist/plan-sprint-status-fast-FJAODCHD.js +208 -0
  555. package/dist/plan-task-status-fast-HNYBMQI4.js +349 -0
  556. package/dist/plan-to-flywheel-Z4U3GWPN.js +456 -0
  557. package/dist/planning-backlog-3CQ5QQBQ.js +319 -0
  558. package/dist/poetic-root-V5DNXEAE.js +17 -0
  559. package/dist/preflight-OPANWMME.js +12 -0
  560. package/dist/process-registry-PDZJPTAS.js +27 -0
  561. package/dist/process-scanner-C22SYXYD.js +22 -0
  562. package/dist/processes-KMQUD7HY.js +29 -0
  563. package/dist/processes-json-fast-IBDXZ6WW.js +135 -0
  564. package/dist/profile-SE5EVXAP.js +149 -0
  565. package/dist/prompts-WZZPGWBX.js +168 -0
  566. package/dist/protected-branches-RNTEX7ET.js +57 -0
  567. package/dist/provider-aware-resource-manager-QBTZJMNP.js +18 -0
  568. package/dist/provider-matrix-N5X57V3Y.js +154 -0
  569. package/dist/provider-matrix-renderer-MZDWKKID.js +139 -0
  570. package/dist/provider-output-forwarding-DERID3TP.js +30 -0
  571. package/dist/provider-registry-J5NRBJKI.js +128 -0
  572. package/dist/provider-temp-cleanup-KYGLF6YU.js +14 -0
  573. package/dist/prune-engine-Q6E2DXBN.js +451 -0
  574. package/dist/quality-gate-YRHMQAEI.js +70 -0
  575. package/dist/quickstart-FIRLKGJI.js +62 -0
  576. package/dist/readiness-VZTMSG6J.js +96 -0
  577. package/dist/registry-YODFY77A.js +153 -0
  578. package/dist/repair-helpers-TTV5FEF4.js +117 -0
  579. package/dist/repo-root-2IGD4H7X.js +22 -0
  580. package/dist/resolution-engine-D6TX6FRG.js +127 -0
  581. package/dist/resolve-provider-cli-O2P6XZBZ.js +35 -0
  582. package/dist/restore-telemetry-db-BQL6DTQF.js +360 -0
  583. package/dist/result-streamer-WEHW476R.js +19 -0
  584. package/dist/routing-events-DHPUZDDF.js +27 -0
  585. package/dist/routing-history-store-UWCEXAP3.js +46 -0
  586. package/dist/routing-planner-F5WQEUOM.js +160 -0
  587. package/dist/run-poetic-tui-J6LWRJUP.js +13517 -0
  588. package/dist/run-simulation.js +376 -0
  589. package/dist/runner-CS2TNGHA.js +1092 -0
  590. package/dist/runner-HHH7ZN2Z.js +1571 -0
  591. package/dist/safety-OCC4KJJR.js +64 -0
  592. package/dist/safety-stanza-7SV3HGG3.js +60 -0
  593. package/dist/sandbox-32QXJEMV.js +81 -0
  594. package/dist/sandbox-RSO7VP6V.js +94 -0
  595. package/dist/schema-extensions.sql +234 -0
  596. package/dist/security-2KI5XNDG.js +17 -0
  597. package/dist/setup-bb-plugin-QAQWZCV5.js +738 -0
  598. package/dist/setup-claude-code-P7BTTSPO.js +317 -0
  599. package/dist/setup-temp-cleanup-GASCWZ2I.js +20 -0
  600. package/dist/shared-utils-D6U6UREP.js +37 -0
  601. package/dist/simple-artifact-goal-OTXNGZY6.js +25 -0
  602. package/dist/sprint-UIXPYOXQ.js +338 -0
  603. package/dist/sprint-bridge-4BHMSC3M.js +68 -0
  604. package/dist/sprint-execution-service-2B7WHL5L.js +311 -0
  605. package/dist/sprint-manager-IDQUDNQI.js +91 -0
  606. package/dist/sqlite-wrapper-UDWCTNLJ.js +17 -0
  607. package/dist/stale-cleanup-orchestrator-XWXV7KCZ.js +62 -0
  608. package/dist/storage-access-F6ALDN4S.js +22 -0
  609. package/dist/synthesis-XD6EDVHF.js +185 -0
  610. package/dist/task-classifier-LNLXSHOM.js +494 -0
  611. package/dist/task-list-fast-PTMA4LUC.js +147 -0
  612. package/dist/task-manager-XAT7GOWB.js +93 -0
  613. package/dist/task-splitter-U7DJ7W6A.js +79 -0
  614. package/dist/task-type-detector-OLVOMXZO.js +21 -0
  615. package/dist/task-type-resolver-KKNQYSB4.js +42 -0
  616. package/dist/telemetry-5HWBBXLX.js +131 -0
  617. package/dist/telemetry-health-tracker-DMSSGBZ2.js +11 -0
  618. package/dist/telemetry-path-resolver-7ICSG276.js +28 -0
  619. package/dist/telemetry-reliability-XUOZNZZ6.js +125 -0
  620. package/dist/token-estimator-MEQUL3EJ.js +37 -0
  621. package/dist/transports-KNSSV2V4.js +255 -0
  622. package/dist/unified-cost-tracker-4TFRBVPR.js +35 -0
  623. package/dist/unified-state-cleanup-LJPF2BOW.js +276 -0
  624. package/dist/universal-cost-calculator-BAJV35GA.js +42 -0
  625. package/dist/user-agents-GHUGCSKN.js +22 -0
  626. package/dist/variant-delivery-state-KLRNG6XA.js +33 -0
  627. package/dist/variant-state-cleanup-MZGGLQAJ.js +280 -0
  628. package/dist/variant-success-PJXWE3ZV.js +12 -0
  629. package/dist/variant-worker-KUWKBLAH.js +4196 -0
  630. package/dist/variant-worker.js +24 -0
  631. package/dist/variants-JE2FSAQS.js +233 -0
  632. package/dist/verification-toolchains-V24UHW6Q.js +28 -0
  633. package/dist/verify-commands-H3DTCSGI.js +37 -0
  634. package/dist/warning-EGQGUUIO.js +12 -0
  635. package/dist/work-edge-RWEDWJZF.js +49 -0
  636. package/dist/work-item-writer-WHAVZXAY.js +19 -0
  637. package/dist/worker-7SA2VS2Y.js +1435 -0
  638. package/dist/worker.js +19 -0
  639. package/dist/worktree-metrics-3DFUYVYE.js +26 -0
  640. package/dist/writeback-VZKHYHSN.js +44 -0
  641. package/docs/CLI_REFERENCE.md +7042 -0
  642. package/docs/PROVIDER_SETUP.md +1570 -0
  643. package/docs/README.md +96 -0
  644. package/docs/TROUBLESHOOTING.md +2232 -0
  645. package/docs/getting-started/QUICK_START.md +294 -0
  646. package/docs/getting-started/README.md +188 -0
  647. package/docs/getting-started/SETUP.md +52 -0
  648. package/docs/reference/AGENT_CONTEXT.md +38 -0
  649. package/docs/reference/PROVIDER_RELEASE_TIERS.md +34 -0
  650. package/docs/reference/README.md +381 -0
  651. package/docs/reference/SECURITY.md +262 -0
  652. package/integrations/bb-plugin-poetic/README.md +362 -0
  653. package/integrations/bb-plugin-poetic/app.css +341 -0
  654. package/integrations/bb-plugin-poetic/app.tsx +5059 -0
  655. package/integrations/bb-plugin-poetic/package.json +45 -0
  656. package/integrations/bb-plugin-poetic/server.ts +444 -0
  657. package/integrations/bb-plugin-poetic/src/adapter.ts +3312 -0
  658. package/integrations/bb-plugin-poetic/src/backlog-authoring-model.ts +150 -0
  659. package/integrations/bb-plugin-poetic/src/backlog-authoring-schema.ts +355 -0
  660. package/integrations/bb-plugin-poetic/src/backlog-authoring-service.ts +419 -0
  661. package/integrations/bb-plugin-poetic/src/backlog-authoring-view.ts +1026 -0
  662. package/integrations/bb-plugin-poetic/src/competition-defaults-schema.ts +122 -0
  663. package/integrations/bb-plugin-poetic/src/competition-defaults-service.ts +105 -0
  664. package/integrations/bb-plugin-poetic/src/competition-defaults-view.ts +138 -0
  665. package/integrations/bb-plugin-poetic/src/contract.ts +615 -0
  666. package/integrations/bb-plugin-poetic/src/finalize-model.ts +205 -0
  667. package/integrations/bb-plugin-poetic/src/finalize-schema.ts +158 -0
  668. package/integrations/bb-plugin-poetic/src/finalize-service.ts +382 -0
  669. package/integrations/bb-plugin-poetic/src/finalize-view.ts +159 -0
  670. package/integrations/bb-plugin-poetic/src/judge-operations-readback.ts +303 -0
  671. package/integrations/bb-plugin-poetic/src/judge-operations-schema.ts +33 -0
  672. package/integrations/bb-plugin-poetic/src/judge-operations-view.ts +459 -0
  673. package/integrations/bb-plugin-poetic/src/model.ts +1302 -0
  674. package/integrations/bb-plugin-poetic/src/monitor-service.ts +233 -0
  675. package/integrations/bb-plugin-poetic/src/panel-read-ux.ts +97 -0
  676. package/integrations/bb-plugin-poetic/src/patch-preview-schema.ts +166 -0
  677. package/integrations/bb-plugin-poetic/src/patch-preview-service.ts +480 -0
  678. package/integrations/bb-plugin-poetic/src/patch-preview-view.ts +109 -0
  679. package/integrations/bb-plugin-poetic/src/planning-readback.ts +204 -0
  680. package/integrations/bb-plugin-poetic/src/planning-service.ts +594 -0
  681. package/integrations/bb-plugin-poetic/src/planning-workspace-schema.ts +95 -0
  682. package/integrations/bb-plugin-poetic/src/planning-workspace.ts +323 -0
  683. package/integrations/bb-plugin-poetic/src/poll-handoff.ts +136 -0
  684. package/integrations/bb-plugin-poetic/src/project-target-server.ts +21 -0
  685. package/integrations/bb-plugin-poetic/src/project-target.ts +45 -0
  686. package/integrations/bb-plugin-poetic/src/reference-index.ts +192 -0
  687. package/integrations/bb-plugin-poetic/src/repository-schema.ts +30 -0
  688. package/integrations/bb-plugin-poetic/src/result-explorer-view.ts +597 -0
  689. package/integrations/bb-plugin-poetic/src/result-readback-model.ts +163 -0
  690. package/integrations/bb-plugin-poetic/src/result-readback-schema.ts +319 -0
  691. package/integrations/bb-plugin-poetic/src/result-readback-service.ts +333 -0
  692. package/integrations/bb-plugin-poetic/src/run-page-view.ts +177 -0
  693. package/integrations/bb-plugin-poetic/src/setup-config-schema.ts +291 -0
  694. package/integrations/bb-plugin-poetic/src/setup-config-service.ts +590 -0
  695. package/integrations/bb-plugin-poetic/src/setup-config-view.ts +413 -0
  696. package/integrations/bb-plugin-poetic/src/sprint-close-model.ts +150 -0
  697. package/integrations/bb-plugin-poetic/src/sprint-close-schema.ts +136 -0
  698. package/integrations/bb-plugin-poetic/src/sprint-close-service.ts +341 -0
  699. package/integrations/bb-plugin-poetic/src/sprint-close-view.ts +116 -0
  700. package/integrations/bb-plugin-poetic/src/sprint-composition-model.ts +714 -0
  701. package/integrations/bb-plugin-poetic/src/sprint-composition-readback.ts +231 -0
  702. package/integrations/bb-plugin-poetic/src/sprint-composition-schema.ts +601 -0
  703. package/integrations/bb-plugin-poetic/src/sprint-composition-service.ts +775 -0
  704. package/integrations/bb-plugin-poetic/src/sprint-composition-view.ts +1221 -0
  705. package/integrations/bb-plugin-poetic/src/task-authoring-model.ts +567 -0
  706. package/integrations/bb-plugin-poetic/src/task-authoring-schema.ts +635 -0
  707. package/integrations/bb-plugin-poetic/src/task-authoring-service.ts +842 -0
  708. package/integrations/bb-plugin-poetic/src/task-authoring-view.ts +1227 -0
  709. package/integrations/bb-plugin-poetic/src/task-detail-readback.ts +56 -0
  710. package/integrations/bb-plugin-poetic/src/task-detail-schema.ts +144 -0
  711. package/integrations/bb-plugin-poetic/src/task-navigation.ts +446 -0
  712. package/integrations/bb-plugin-poetic/src/workbench-route.ts +74 -0
  713. package/integrations/bb-plugin-poetic/tests/host-contract.test.ts +773 -0
  714. package/integrations/bb-plugin-poetic/tsconfig.json +18 -0
  715. package/integrations/bb-plugin-poetic/types/PROVENANCE.json +52 -0
  716. package/integrations/bb-plugin-poetic/types/bb-plugin-sdk-app.d.ts +1444 -0
  717. package/integrations/bb-plugin-poetic/types/bb-plugin-sdk.d.ts +13030 -0
  718. package/integrations/bb-plugin-poetic/vitest.host.config.ts +71 -0
  719. package/npm-shrinkwrap.json +4950 -0
  720. package/package.json +331 -0
  721. package/schemas/README.md +80 -0
  722. package/schemas/config-v1.schema.json +136 -0
  723. package/schemas/execution-config.schema.json +47 -0
  724. package/schemas/judge-scoring.schema.json +370 -0
  725. package/schemas/poetic.config.schema.json +2214 -0
  726. package/schemas/provider-config.schema.json +203 -0
  727. package/schemas/telemetry-config.schema.json +79 -0
  728. package/schemas/user-preferences.schema.json +141 -0
  729. package/scripts/assert-node-runtime.mjs +140 -0
  730. package/scripts/preflight-native.mjs +49 -0
  731. package/scripts/preinstall-node-check.mjs +78 -0
  732. package/scripts/setup-git-hooks.mjs +24 -0
  733. package/scripts/sync.sh +2722 -0
  734. package/scripts/write-node-launcher.sh +108 -0
  735. package/src/resources/gemini/slash-packs/default/plan.toml +15 -0
  736. package/src/resources/gemini/slash-packs/default/summary.toml +16 -0
  737. package/src/resources/gemini/slash-packs/default/tests.toml +16 -0
  738. package/templates/.poetic/README.md +37 -0
  739. package/templates/.poetic/agents/README.md +296 -0
  740. package/templates/.poetic/agents/api-documenter.md +147 -0
  741. package/templates/.poetic/agents/backend-architect.md +31 -0
  742. package/templates/.poetic/agents/code-reviewer.md +157 -0
  743. package/templates/.poetic/agents/data-scientist.md +179 -0
  744. package/templates/.poetic/agents/database-optimizer.md +145 -0
  745. package/templates/.poetic/agents/debugger.md +31 -0
  746. package/templates/.poetic/agents/deployment-engineer.md +164 -0
  747. package/templates/.poetic/agents/devops-troubleshooter.md +139 -0
  748. package/templates/.poetic/agents/frontend-developer.md +150 -0
  749. package/templates/.poetic/agents/javascript-pro.md +36 -0
  750. package/templates/.poetic/agents/performance-engineer.md +151 -0
  751. package/templates/.poetic/agents/python-pro.md +137 -0
  752. package/templates/.poetic/agents/test-automator.md +147 -0
  753. package/templates/.poetic/agents/typescript-pro.md +34 -0
  754. package/templates/.poetic/config/poetic.config.jsonc +69 -0
  755. package/templates/.poetic/config/project-context.template.json +6 -0
  756. package/templates/.poetic/config/task-type-aliases.presets/kanban.yaml +14 -0
  757. package/templates/.poetic/config/task-type-aliases.presets/scrum.yaml +17 -0
  758. package/templates/.poetic/config/task-type-aliases.presets/xp.yaml +12 -0
  759. package/templates/.poetic/config/task-type-aliases.yaml +28 -0
  760. package/templates/.poetic/gitignore.template +55 -0
  761. package/templates/.poetic/task-types/analysis.yaml +40 -0
  762. package/templates/.poetic/task-types/architecture.yaml +38 -0
  763. package/templates/.poetic/task-types/doc.yaml +35 -0
  764. package/templates/.poetic/task-types/feature.yaml +23 -0
  765. package/templates/.poetic/task-types/general.yaml +6 -0
  766. package/templates/.poetic/task-types/security.yaml +39 -0
  767. package/templates/AGENTS.template.md +99 -0
  768. package/templates/CLAUDE.template.md +1 -0
  769. package/templates/GEMINI.template.md +1 -0
  770. package/templates/builtin-workflows/code-review.yaml +73 -0
  771. package/templates/builtin-workflows/compete-streak.yaml +78 -0
  772. package/templates/builtin-workflows/hello-verify.yaml +10 -0
  773. package/templates/builtin-workflows/judge-regression.yaml +114 -0
  774. package/templates/builtin-workflows/skills/code-review/SKILL.md +60 -0
  775. package/templates/builtin-workflows/skills/hello-verify/SKILL.md +6 -0
  776. package/templates/guard-kit/GUARD_SETUP.md.template +255 -0
  777. package/templates/guard-kit/check.mjs.template +777 -0
  778. package/templates/guard-kit/config.json.template +6 -0
  779. package/templates/guard-kit/poetic-guard.yml.template +189 -0
  780. package/templates/profiles/README.md +56 -0
  781. package/templates/profiles/frontier-claude.json +27 -0
  782. package/templates/profiles/frontier-codex.json +26 -0
@@ -0,0 +1,1570 @@
1
+ # Provider Setup Guide
2
+
3
+ This guide walks you through setting up AI providers for Poetic. Poetic supports multiple execution providers out of the box: Claude, Codex CLI, Cursor CLI, Copilot CLI, Gemini CLI, Grok, Kiro, Google Antigravity CLI, Pi CLI, and OpenCode. GLM/Z.AI models are available through OpenCode; OpenRouter is a catalog/pricing source, not an execution provider.
4
+
5
+ > **Public-release validation status:** Claude and Codex are primary validated
6
+ > providers. Grok, Cursor, and OpenCode are supported validated providers.
7
+ > Antigravity and Pi are also supported validated; Gemini, Kiro, and Copilot
8
+ > are experimental (Gemini because its CLI is sunsetting; see below). This is
9
+ > separate from configured defaults:
10
+ > `poetic config resolved --summary --json` reports the active execution and
11
+ > judge defaults. Run `poetic provider list` and `poetic doctor --matrix` before
12
+ > relying on a local provider.
13
+
14
+ > **Execution modes:** All providers run locally. Variant mode `:cloud` is not an executable product path (see [ADR-021](https://github.com/ebrindley/Poetic/blob/main/docs/adr/021-local-only-execution.md)). Provider API transport for local CLI/API runs remains supported. Historical telemetry may still contain Codex/Cursor cloud-shaped fields; those records stay readable but are not a signal to run cloud workflows.
15
+
16
+ ---
17
+
18
+ ## Model Selection and Namespaces
19
+
20
+ Poetic enforces provider model purity: every provider only accepts its own canonical model identifiers; unknown or cross-provider names either omit the provider model override or raise a validation error, depending on the provider path. Use `poetic config resolved --summary --json` for active defaults, and keep the registry fresh with:
21
+
22
+ ```bash
23
+ poetic provider refresh <id> --models
24
+ ```
25
+
26
+ The release catalog is generated from Poetic's canonical provider YAML and is
27
+ shipped with the package. Refresh writes a narrow, digest-bound model/pricing
28
+ overlay; it does not rewrite release capabilities or executable configuration.
29
+ Existing project `providers.yaml` files remain supported as policy overlays
30
+ (for example enabled state, defaults, roles, mappings, and local limits), while
31
+ their copied catalog inventory is ignored. New projects do not receive a
32
+ provider-catalog snapshot.
33
+
34
+ | Provider | Default Source | Notes |
35
+ | ----------- | -------------------------------- | ---------------------------------------------------------------------------------------------------------------- |
36
+ | Claude | Primary validated | Zero-flag model selection follows the installed Claude CLI; choose it explicitly during first-run setup or config |
37
+ | Codex | Primary validated | Zero-flag model selection follows the installed Codex CLI; reasoning effort remains separately configurable |
38
+ | Grok | Supported validated | Use `--variant grok:conservative` for an explicit Grok run; not implied as the global default |
39
+ | Cursor | Supported validated | `auto` is supported for Cursor-native routing; macOS Keychain access can block agent sandboxes |
40
+ | OpenCode | Supported validated | Router CLI; use exact upstream model IDs such as `z-ai/glm-4.7` |
41
+ | Antigravity | Supported validated | Google `agy` CLI provider; authenticate with Google OAuth or `ANTIGRAVITY_API_KEY` where supported |
42
+ | Pi | Supported validated | Backend-agnostic host CLI; cost and capability depend on the configured backend; local OpenAI-compatible path not yet validated |
43
+ | Gemini | Experimental (sunsetting) | CLI retired for free/Pro/Ultra tiers 2026-06-18; opt-in only. Keep fan-out worker counts conservative; CLI must be installed separately |
44
+ | Copilot | Experimental | Copilot CLI exposes its own supported model set |
45
+ | Kiro | Experimental | Experimental native adapter; headless mode requires `KIRO_API_KEY` |
46
+
47
+ Use explicit provider IDs in configuration or CLI flags. Common provider IDs
48
+ `claude`, `codex`, `grok`, `cursor`, `opencode`, and `gemini` cover most public
49
+ release usage. Passing a generic GPT name to a provider that does not expose it
50
+ now omits the model override or returns a validation error so you can correct
51
+ the selection.
52
+
53
+ The common provider IDs `claude`, `codex`, `cursor`, and `gemini` are stable
54
+ shorthands for the corresponding local CLI providers in examples and
55
+ configuration.
56
+
57
+ First-run provider setup saves the selected provider under
58
+ `defaults.provider`. If no provider has been selected, registry order is only a
59
+ bootstrap fallback; run `poetic provider setup --first-run` or set
60
+ `defaults.provider` before relying on zero-flag execution.
61
+
62
+ For a read-only preview before installing or changing provider setup, the
63
+ internal-tier `explain` command reads embedded config without initializing
64
+ anything (it is intentionally absent from `poetic --help`):
65
+
66
+ ```bash
67
+ poetic explain providers
68
+ ```
69
+
70
+ ### Claude model aliases (incl. Fable 5)
71
+
72
+ Claude accepts the short aliases `opus`, `sonnet`, `haiku`, and `fable` (each floats to the latest of that family), version-pinned shorthands (`opus-4-8`, `sonnet-4-6`, `fable-5`), and full `claude-*` ids (`claude-opus-4-8`, `claude-fable-5`). Direct backend ids (Bedrock `*.anthropic.claude-*`, Vertex `claude-*@YYYYMMDD`) also pass through. A **specific** Claude version pin (family + major.minor, e.g. `sonnet-4-99`, `opus-4.99`, `fable-5-1`) that doesn't resolve now fails fast with a clear error instead of silently running the CLI default. Bare families and major-only aliases (`opus`, `sonnet-4`, `opus-99`, `fable`) float and are not errored, a full `claude-*` id is passed through to the CLI unchanged (direct-string support; a misspelled `claude-*` id surfaces at the CLI rather than at this guard), and non-Claude tokens (`gpt-*`, arbitrary strings) omit `--model` under provider purity.
73
+
74
+ > **Fable 5 availability.** The `fable` / `fable-5` aliases and the full `claude-fable-5` id resolve on the Anthropic, Vertex, and AWS Bedrock backends (Bedrock → `global.anthropic.claude-fable-5`). Fable 5 may be **temporarily unavailable upstream** while external availability controls are in effect. During that state, a run targeting Fable surfaces a clear "temporarily unavailable" message; retry later or pick another model (`opus`, `sonnet`) in the meantime. **The Bedrock inference profile is wired ahead of availability but is UNVERIFIED** — it follows the standard Anthropic-on-Bedrock naming and the AWS model card but, unlike the other Claude models, has not been live-verified (Fable cannot be invoked while unavailable). When access returns, re-verify the profile live and add any regional profiles to the `claude-fable-5` entry in `.poetic/config/providers.yaml`. (Mythos 5 is Project-Glasswing-only and is not a wired Poetic alias; a full `claude-mythos-5` id passes through like any `claude-*` string, and the same temporary-availability messaging applies.)
75
+
76
+ ## Quick Start with Mock Mode
77
+
78
+ **For development and testing**, you can use mock mode to run Poetic without installing any providers.
79
+
80
+ Outside test runners (`NODE_ENV=test` or `VITEST=true|1`), both flags are required. If only `POETIC_MOCK_PROVIDERS=1` is set, CLI startup scrubs it with a warning and real providers remain the default.
81
+
82
+ ```bash
83
+ # Enable mock mode outside tests (both flags required)
84
+ export POETIC_MOCK_PROVIDERS=1
85
+ export POETIC_ALLOW_MOCK_PROVIDERS=1
86
+
87
+ # Run with mock providers
88
+ poetic run "test task" --variants=3
89
+
90
+ # Disable mock mode
91
+ unset POETIC_MOCK_PROVIDERS
92
+ unset POETIC_ALLOW_MOCK_PROVIDERS
93
+ ```
94
+
95
+ Mock mode simulates realistic execution times and occasional errors (10% failure rate) for testing variant competition logic. See [MOCK_ENV_VARS.md](https://github.com/ebrindley/Poetic/blob/main/docs/MOCK_ENV_VARS.md).
96
+
97
+ ## Verify Your Environment (Health / Doctor)
98
+
99
+ Poetic includes a built-in environment check:
100
+
101
+ ```bash
102
+ # Alias:
103
+ poetic doctor
104
+
105
+ # Check configured providers only (default behavior)
106
+ poetic doctor
107
+
108
+ # Check all known providers explicitly
109
+ poetic doctor --all
110
+
111
+ # Support matrix: tier + CLI/auth/runtime health
112
+ poetic doctor --matrix
113
+
114
+ # Check a single provider
115
+ poetic doctor --provider claude
116
+ ```
117
+
118
+ `poetic provider list` is the first-user readiness check: it is read-only and
119
+ reports whether at least one configured provider appears ready. After
120
+ target-repo `poetic init`, run `poetic doctor` for the full checklist. The
121
+ readiness subset (`doctor`, `doctor --provider <id>`, and `doctor --all`) is
122
+ part of the dependable supported surface when used for setup verification.
123
+
124
+ ---
125
+
126
+ ## Setup Command
127
+
128
+ Poetic provides a unified `poetic provider setup` command for managing providers and plugins.
129
+
130
+ ### Interactive Wizard
131
+
132
+ Run the setup wizard to interactively select and install providers:
133
+
134
+ ```bash
135
+ poetic provider setup
136
+ ```
137
+
138
+ The wizard will:
139
+
140
+ 1. Show available providers with descriptions
141
+ 2. Let you select one or more providers
142
+ 3. Install each provider
143
+ 4. Offer available plugins for each provider
144
+ 5. Configure provider options (when available)
145
+
146
+ ### Non-Interactive Setup
147
+
148
+ Install specific providers without interaction:
149
+
150
+ ```bash
151
+ # Install single provider
152
+ poetic provider setup --providers claude
153
+
154
+ # Install multiple providers
155
+ poetic provider setup --providers claude,gemini,opencode
156
+
157
+ # Install with plugins (optional; not required for GLM)
158
+ poetic provider setup --providers opencode --plugins opencode:<plugin-id>
159
+ ```
160
+
161
+ ### Check Mode
162
+
163
+ Report provider readiness without making changes:
164
+
165
+ ```bash
166
+ poetic provider list
167
+ ```
168
+
169
+ Output shows:
170
+
171
+ - `OK` — Installed, authenticated, and execute-ready
172
+ - `Sandbox blocked (execute)` — CLI/auth may be present, but sandbox or policy prevents provider state access
173
+ - `Warning:` — Installed but degraded or not authenticated
174
+ - `Error` — Not installed (with install command)
175
+
176
+ ### First-Run Picker
177
+
178
+ When you run `poetic run` or `poetic compete` without a configured provider:
179
+
180
+ **TTY Mode** (interactive terminal):
181
+
182
+ - Shows provider picker automatically
183
+ - Prompts to install selected provider
184
+ - Retries your original command after setup
185
+
186
+ **Non-Interactive Mode** (scripts, CI):
187
+
188
+ - Prints error message
189
+ - Shows deterministic setup commands
190
+ - Exits with error code
191
+
192
+ Example:
193
+
194
+ ```bash
195
+ # First run without provider
196
+ $ poetic run "test task"
197
+ Warning: No runnable provider configured
198
+
199
+ Setup required. Run one of these commands:
200
+ poetic provider setup # Interactive wizard
201
+ poetic provider setup --providers claude # Install Claude
202
+ poetic provider setup --providers opencode # Install OpenCode
203
+ ```
204
+
205
+ ### Safety Boundary
206
+
207
+ Poetic categorizes installers by risk level:
208
+
209
+ **Safe** (auto-install allowed):
210
+
211
+ - npm global install
212
+ - brew install
213
+ - pipx install
214
+
215
+ **Needs Confirmation** (requires approval):
216
+
217
+ - curl | bash installers
218
+ - Manual installation steps
219
+
220
+ To allow risky installers (currently `cursor`, `grok`, `kiro`, `antigravity`, and `opencode`, which ship as
221
+ `curl | bash`), set this env var. The gate applies to **both interactive and
222
+ non-interactive** runs — without it, `poetic provider setup` will print the install
223
+ command and exit without executing it:
224
+
225
+ ```bash
226
+ export POETIC_ALLOW_CURL_BASH=1
227
+ poetic provider setup --providers <provider>
228
+ ```
229
+
230
+ ---
231
+
232
+ ## Provider Installation
233
+
234
+ > **Node version note:** The per-provider "Prerequisite: Node.js" lines below are
235
+ > each external CLI's own minimum, not Poetic's. Poetic itself requires Node.js
236
+ > 24.x (see [INSTALL.md](../INSTALL.md#prerequisites)); a provider CLI may run on
237
+ > an older Node, but Poetic still needs 24.x to run.
238
+
239
+ ### Claude CLI
240
+
241
+ **Status**: Supported local CLI provider
242
+
243
+ #### Installation
244
+
245
+ Prerequisite: Node.js 18+ (the Claude CLI's own minimum; Poetic itself requires Node 24.x).
246
+
247
+ ```bash
248
+ # Install Claude Code CLI
249
+ npm install -g @anthropic-ai/claude-code
250
+
251
+ # Verify installation
252
+ claude --version
253
+ ```
254
+
255
+ #### Authentication
256
+
257
+ 1. **CLI Login (preferred)**:
258
+
259
+ ```bash
260
+ claude auth login
261
+ # Browser/device flow; stores credentials in Claude CLI config
262
+ ```
263
+
264
+ 2. **Verify Setup**:
265
+ ```bash
266
+ # Run a simple Claude command and rely on its error output
267
+ claude --version
268
+ ```
269
+
270
+ #### Configuration
271
+
272
+ Poetic uses a dedicated config directory to avoid conflicts:
273
+
274
+ ```bash
275
+ # Default location
276
+ ~/.poetic/config/providers/claude
277
+
278
+ # Or set custom location
279
+ export CLAUDE_CONFIG_DIR=~/.poetic/config/providers/claude
280
+ ```
281
+
282
+ **Bedrock Configuration (AWS)**:
283
+
284
+ Poetic defaults Claude to Anthropic. Bedrock mode is enabled when
285
+ `POETIC_CLAUDE_BACKEND=bedrock` is set.
286
+ AWS environment variables (`AWS_REGION`, `AWS_PROFILE`) alone do **not**
287
+ activate Bedrock mode — explicit opt-in is still required.
288
+
289
+ `CLAUDE_CODE_USE_BEDROCK` is a Claude Code CLI variable, not a Poetic routing
290
+ input. Poetic ignores ambient Claude-native backend flags when selecting its own
291
+ backend so a parent Claude Code session cannot silently reroute execution.
292
+
293
+ > **Migration**: Prefer `POETIC_CLAUDE_BACKEND=bedrock` in shell profiles and CI.
294
+ > Poetic's backend resolver checks `POETIC_CLAUDE_BACKEND` first; `CLAUDE_CODE_USE_BEDROCK=1`
295
+ > is still honored as a legacy fallback when the canonical variable is unset.
296
+
297
+ When Bedrock is active, Poetic converts model names to cross-region inference
298
+ profiles automatically. All model inputs (`sonnet`, `sonnet-4-6`,
299
+ `claude-sonnet-4-6`, etc.) resolve to inference profile IDs with the correct
300
+ Bedrock model suffix.
301
+
302
+ **Default prefix: `global`**. The `global` inference pool draws capacity from
303
+ all AWS regions, reducing single-region throttling. Use a regional prefix only
304
+ when you need explicit data residency, latency affinity, or compliance controls.
305
+
306
+ ```bash
307
+ # Canonical Poetic setting:
308
+ export POETIC_CLAUDE_BACKEND=bedrock
309
+
310
+ # Override to pin a specific region prefix (global|us|eu|jp|apac):
311
+ export POETIC_BEDROCK_REGION_PREFIX=us
312
+ ```
313
+
314
+ **Inference profile examples** (generated by Poetic, not user-managed):
315
+
316
+ | Input | Bedrock inference profile |
317
+ | -------------------- | ------------------------------------------------- |
318
+ | `--model sonnet` | `global.anthropic.claude-sonnet-4-6` |
319
+ | `--model sonnet-4-6` | `global.anthropic.claude-sonnet-4-6` |
320
+ | `--model opus` | `global.anthropic.claude-opus-4-8` |
321
+ | `--model haiku` | `global.anthropic.claude-haiku-4-5-20251001-v1:0` |
322
+
323
+ Bedrock model ID suffixes are maintained in `CLAUDE_BEDROCK_MODELS` in
324
+ `src/core/providers/claude/config.ts` — do not construct inference profile
325
+ strings manually.
326
+
327
+ Poetic also synthesizes `CLAUDE_CODE_USE_BEDROCK=1` for Claude subprocesses
328
+ when the canonical `POETIC_CLAUDE_BACKEND=bedrock` setting is used, so the
329
+ Claude CLI receives the backend signal it expects at the final subprocess
330
+ boundary only.
331
+
332
+ **Vertex Configuration (Google Cloud)**:
333
+
334
+ Vertex mode is enabled when `POETIC_CLAUDE_BACKEND=vertex` is set.
335
+ `CLAUDE_CODE_USE_VERTEX` is treated the same way as the Bedrock flag above:
336
+ Poetic ignores it for routing and only synthesizes Claude-native backend flags
337
+ when launching the final Claude subprocess.
338
+
339
+ Poetic does **not** rewrite Claude model IDs in Vertex mode. Pass Claude-native
340
+ model IDs through unchanged, including version-pinned IDs such as
341
+ `claude-haiku-4-5@20251001` when needed.
342
+
343
+ ```bash
344
+ # Canonical Poetic setting:
345
+ export POETIC_CLAUDE_BACKEND=vertex
346
+
347
+ # Required Vertex/Claude Code settings:
348
+ export CLOUD_ML_REGION=us-central1
349
+ export ANTHROPIC_VERTEX_PROJECT_ID=<your-project-id>
350
+
351
+ # Standard Google Cloud auth:
352
+ export GOOGLE_APPLICATION_CREDENTIALS=/path/to/service-account.json
353
+
354
+ # Optional project aliases supported by Claude Code:
355
+ export GCLOUD_PROJECT=<your-project-id>
356
+ # or:
357
+ export GOOGLE_CLOUD_PROJECT=<your-project-id>
358
+ ```
359
+
360
+ Vertex mode uses Google Cloud credentials, so Claude `/login` and `/logout`
361
+ are not part of the setup flow.
362
+
363
+ Poetic synthesizes `CLAUDE_CODE_USE_VERTEX=1` for Claude subprocesses when the
364
+ canonical `POETIC_CLAUDE_BACKEND=vertex` setting is used.
365
+
366
+ **Profile Setup**:
367
+
368
+ Poetic uses "profiles" to organize work. The default profile is `default`. You can create custom profiles for different projects:
369
+
370
+ ```bash
371
+ # Create a profile
372
+ claude profile create my-project
373
+
374
+ # Set active profile
375
+ claude profile use my-project
376
+
377
+ # List profiles
378
+ claude profile list
379
+ ```
380
+
381
+ #### Test Claude Provider
382
+
383
+ ```bash
384
+ # Test execution
385
+ poetic run "Create a hello world test" --engine=claude
386
+
387
+ # Test variant competition
388
+ poetic run "Implement login feature" --engine=claude --variants=3
389
+ ```
390
+
391
+ ---
392
+
393
+ ### Codex CLI
394
+
395
+ **Status**: Supported, enterprise-focused
396
+
397
+ #### Installation
398
+
399
+ Prerequisite: Node.js 16+ (the Codex CLI's own minimum; Poetic itself requires Node 24.x).
400
+
401
+ ```bash
402
+ # Install Codex CLI
403
+ npm install -g @openai/codex
404
+
405
+ # Verify installation
406
+ codex --version
407
+ ```
408
+
409
+ #### Authentication
410
+
411
+ **Default:** Codex CLI OAuth (ChatGPT / browser login). Poetic does not preflight auth before
412
+ `run` or `compete`; the CLI surfaces auth errors. `poetic doctor --provider codex` checks
413
+ `auth.json` under `CODEX_HOME` (and `~/.codex` when unset), plus API keys when set.
414
+
415
+ ```bash
416
+ codex login
417
+ # or: poetic provider setup --providers codex
418
+ ```
419
+
420
+ **API key mode (optional):** set `POETIC_CODEX_AUTH_MODE=api_key` and provide `OPENAI_API_KEY`
421
+ (or legacy `CODEX_API_KEY` / `CODEX_TOKEN`). In OAuth mode, Poetic strips API keys from the
422
+ Codex subprocess environment so the CLI does not prefer a shell key over browser login.
423
+
424
+ #### Configuration
425
+
426
+ ```bash
427
+ # Default location
428
+ ~/.codex/
429
+
430
+ # Or set custom location
431
+ export CODEX_HOME=~/.codex
432
+ ```
433
+
434
+ Codex execution is local only. `poetic run` and `poetic compete` invoke `codex exec --json`
435
+ inside the selected workspace or worktree; Poetic does not submit, poll, or apply Codex cloud tasks.
436
+
437
+ #### Test Codex Provider
438
+
439
+ ```bash
440
+ poetic run "Create a test suite" --engine=codex --variants=2
441
+ ```
442
+
443
+ ---
444
+
445
+ ### Cursor (CLI)
446
+
447
+ **Status**: Supported, CLI-first
448
+
449
+ #### Installation
450
+
451
+ ```bash
452
+ # Install Cursor Agent
453
+ curl https://cursor.com/install -fsS | bash
454
+
455
+ # Verify installation
456
+ cursor-agent --version
457
+ ```
458
+
459
+ #### Authentication
460
+
461
+ Poetic uses your Cursor account session. Authenticate via the Cursor Agent:
462
+
463
+ ```bash
464
+ cursor-agent login
465
+ ```
466
+
467
+ #### Cursor Cloud (Historical Only)
468
+
469
+ Poetic does not run Cursor (or Codex) cloud agent workflows. Use local Cursor CLI execution via `cursor-agent login` and local variants such as `cursor:conservative`.
470
+
471
+ Historical note (compatibility and recovery only):
472
+
473
+ - Older runs may have used Cursor cloud transports (`api` REST agents or `github_pr` bot comments). Those shapes can still appear in telemetry, env dumps, or recovery notes.
474
+ - Env vars such as `CURSOR_API_KEY`, `POETIC_CURSOR_CLOUD_TRANSPORT`, and `CURSOR_CLOUD_TRANSPORT` may exist in older operator setups; they do not enable a Poetic `:cloud` execution path.
475
+ - Prefer `cursor-agent login` for local CLI authentication. Do not treat cloud transport configuration as setup for new work.
476
+ - For PR publication after local compete/apply, use ordinary GitHub auth (`gh auth login`) as documented in the compete and CLI guides — that is not Cursor cloud execution.
477
+
478
+ #### Configuration
479
+
480
+ ```bash
481
+ # Default location
482
+ ~/.poetic/cursor/
483
+
484
+ # Or set custom location
485
+ export CURSOR_CONFIG_DIR=~/.poetic/cursor
486
+
487
+ # Override default model for Cursor
488
+ export POETIC_CURSOR_MODEL='auto'
489
+
490
+ # Make Cursor the default provider without flags
491
+ export POETIC_DEFAULT_PROVIDER='cursor'
492
+ ```
493
+
494
+ The Cursor provider uses the `cursor` ID for local CLI execution. Use the environment variables above or Poetic's resolved provider configuration; `poetic.config.ts` is not a loaded configuration source.
495
+
496
+ #### Test Cursor Provider
497
+
498
+ ```bash
499
+ poetic run "Write a hello world function" --engine=cursor
500
+
501
+ poetic run "Refactor this component" --engine=cursor --variants=2
502
+
503
+ # Fan-out local execution
504
+ poetic run "Generate fixtures" --engine=cursor --fan-out 3
505
+
506
+ # Test with file context (auto-detected in output)
507
+ poetic run "Review @src/auth.ts" --engine=cursor
508
+ ```
509
+
510
+ **Important**: The Cursor CLI provider reuses Cursor's own session handling. Ensure `cursor-agent` works from your shell and that any enterprise policies allow CLI access. Use `POETIC_CURSOR_MODEL` or the Cursor preference store to pin defaults.
511
+
512
+ ---
513
+
514
+ ### Gemini CLI
515
+
516
+ **Status**: Experimental (sunsetting). Google retired Gemini CLI for free, AI Pro, and Ultra tiers on 2026-06-18; usable only with enterprise Code Assist or paid API keys. Prefer `antigravity`.
517
+
518
+ #### Installation
519
+
520
+ Prerequisite: Node.js 20+ (the Gemini CLI's own minimum; Poetic itself requires Node 24.x).
521
+
522
+ ```bash
523
+ # Install Gemini CLI globally
524
+ npm install -g @google/gemini-cli
525
+
526
+ # Verify installation
527
+ gemini --version
528
+ ```
529
+
530
+ #### Authentication
531
+
532
+ **The Gemini CLI provider does not handle authentication** - you must configure authentication yourself. The CLI supports both personal Google accounts and enterprise Vertex AI access.
533
+
534
+ **Option 1: Personal Google Account (Recommended for individuals)**
535
+
536
+ ```bash
537
+ # Set your API key from Google AI Studio
538
+ export GOOGLE_API_KEY='your-api-key-here'
539
+
540
+ # Alternative: Set GEMINI_API_KEY (also supported)
541
+ export GEMINI_API_KEY='your-api-key-here'
542
+
543
+ # Get an API key at: https://aistudio.google.com/app/apikey
544
+ ```
545
+
546
+ **Option 2: Vertex AI Enterprise (Recommended for organizations)**
547
+
548
+ ```bash
549
+ # Authenticate with Google Cloud
550
+ gcloud auth application-default login
551
+
552
+ # Set your project and location
553
+ export GOOGLE_CLOUD_PROJECT='your-gcp-project-id'
554
+ export GOOGLE_CLOUD_LOCATION='us-central1' # or your preferred region
555
+
556
+ # Alternative: Use service account
557
+ export GOOGLE_APPLICATION_CREDENTIALS='/path/to/service-account-key.json'
558
+ ```
559
+
560
+ #### Configuration
561
+
562
+ Poetic uses a dedicated config directory for Gemini:
563
+
564
+ ```bash
565
+ # Default location
566
+ ~/.poetic/gemini/
567
+
568
+ # Or set custom location
569
+ export GEMINI_CONFIG_DIR=~/.poetic/gemini
570
+ ```
571
+
572
+ **Environment Variables**:
573
+
574
+ - `GOOGLE_API_KEY` - API key for personal Google account
575
+ - `GEMINI_API_KEY` - Alternative API key variable
576
+ - `GOOGLE_CLOUD_PROJECT` - GCP project ID for Vertex AI
577
+ - `GOOGLE_CLOUD_LOCATION` - GCP region for Vertex AI
578
+ - `GOOGLE_APPLICATION_CREDENTIALS` - Service account key path
579
+
580
+ #### Test Gemini Provider
581
+
582
+ ```bash
583
+ # Test with personal account
584
+ poetic run "Create a hello world function" --engine=gemini
585
+
586
+ # Test with specific model
587
+ poetic run "Add error handling" --engine=gemini --model=gemini-2.5-pro
588
+
589
+ # Test fan-out execution
590
+ poetic run "Generate test suite" --engine=gemini --fan-out 3
591
+ ```
592
+
593
+ **Important**: This provider assumes `gemini` CLI is already installed and authenticated. Poetic simply executes the `gemini` command and lets the CLI handle all authentication and API communication. Choose the authentication method that matches your use case (personal vs enterprise).
594
+
595
+ ---
596
+
597
+ ### Copilot CLI
598
+
599
+ **Status**: Experimental — available for exploration, outside the primary validated public-release matrix.
600
+
601
+ #### Installation
602
+
603
+ Prerequisite: Node.js 22+ (the Copilot CLI's own minimum; Poetic itself requires Node 24.x).
604
+
605
+ ```bash
606
+ # Install GitHub Copilot CLI (Node.js package)
607
+ npm install -g @github/copilot
608
+
609
+ # Verify installation
610
+ copilot --help
611
+ ```
612
+
613
+ If your npm config has `ignore-scripts=true`, use:
614
+
615
+ ```bash
616
+ npm_config_ignore_scripts=false npm install -g @github/copilot
617
+ ```
618
+
619
+ #### Authentication
620
+
621
+ Copilot CLI reuses your GitHub identity. Launch `copilot` once (interactive or `copilot -p "Hello" --allow-all-tools`) to complete device authentication if prompted. No additional Poetic configuration is required.
622
+
623
+ #### Configuration
624
+
625
+ Poetic invokes the standalone `copilot` application. Default execution is agentic direct editing: Copilot applies workspace edits and Poetic detects changes via git. Configure via environment variables:
626
+
627
+ | Variable | Purpose | Default |
628
+ | ---------------------------- | ----------------------------------------------- | --------------------------------------- |
629
+ | `POETIC_COPILOT_CLI_COMMAND` | Path to Copilot CLI binary | `copilot` |
630
+ | `POETIC_COPILOT_WORKFLOW` | Default workflow (`suggest`, `chat`, `explain`) | `suggest` |
631
+ | `POETIC_TIMEOUT_COPILOT_MS` | Provider timeout override in ms | `(unset; registry fallback 2700000)` |
632
+
633
+ Timeout resolution: explicit caller timeout, then `POETIC_TIMEOUT_COPILOT_MS` (when set), then global `POETIC_TIMEOUT_MS`, then registry/`providers.yaml` `timeout_ms` (registry provider timeout is `2700000` ms / 45 minutes). The env override itself is unset by default; do not treat `2700000` as the env var's default.
634
+
635
+ > **Note:** Default output mode is agentic direct edit with git-detected changes (`--allow-all-tools` and partial dangerous-command denies). Full shell denial requires `POETIC_COPILOT_SHELL_ENABLED=0`. Unified-diff/`diff_output` mode is opt-in (`POETIC_COPILOT_OUTPUT_MODE=diff_output`).
636
+
637
+ #### Usage Patterns
638
+
639
+ ```bash
640
+ # Agentic direct edit (git-detected changes; experimental provider)
641
+ poetic run "Harden password validation in @src/auth/password.ts" --provider=copilot
642
+
643
+ # Ask Copilot to propose tests for a new feature
644
+ poetic run "Write vitest cases for the new billing limits" \
645
+ --provider=copilot \
646
+ --workflow=chat \
647
+ --prompt "Focus on branch coverage and edge cases around plan downgrades."
648
+
649
+ # Combine Copilot with other providers for orchestration
650
+ poetic compete "Modernize feature flag utilities" \
651
+ --variant copilot:innovative:local \
652
+ --variant claude:conservative:local \
653
+ --variant gemini:hybrid:local
654
+ ```
655
+
656
+ **Recommended prompt structure**:
657
+
658
+ - Begin with the **goal** ("Improve caching invalidation").
659
+ - Specify **target files** (`FILES:` block or inline `@src/cache/index.ts`).
660
+ - Add **acceptance criteria** ("No new dependencies, keep existing API").
661
+ - End with **validation hints** for follow-up review after git-detected edits.
662
+
663
+ #### Environment Variables
664
+
665
+ | Variable | Purpose | Default |
666
+ | ---------------------------- | ----------------------------------------------- | ------------------------------------ |
667
+ | `POETIC_COPILOT_CLI_COMMAND` | Override Copilot CLI binary path | `copilot` |
668
+ | `POETIC_COPILOT_WORKFLOW` | Default workflow (`suggest`, `chat`, `explain`) | `suggest` |
669
+ | `POETIC_TIMEOUT_COPILOT_MS` | Provider timeout override in milliseconds | `(unset; registry fallback 2700000)` |
670
+ | `COPILOT_TELEMETRY_OPTOUT` | Disable GitHub Copilot telemetry (1=on) | `0` |
671
+
672
+ #### Troubleshooting
673
+
674
+ - **`Command not found: copilot`** — Ensure the CLI is installed and on your `PATH`, or set `POETIC_COPILOT_CLI_COMMAND`.
675
+ - **Authentication required** — Launch `copilot` once and follow the device-login flow, or ensure your GitHub CLI session includes Copilot scopes.
676
+ - **No git-detected changes / empty diff output** — Prefer the agentic default (workspace edits). For opt-in `diff_output`, provide FILE/FILES hints for multi-file edits.
677
+ - **`No changes detected (git status clean)` / `posix_spawnp failed`** — Under Poetic’s macOS sandbox wrapper, Copilot’s internal bash/shell tool can fail (`posix_spawnp failed`). Copilot can still perform direct file read/edit operations; prefer workflows that only create/edit files in existing directories. If you specifically need Copilot to run shell commands, opt out of Poetic’s sandbox for Copilot with `export POETIC_SANDBOX_COPILOT_ENABLED=0` (or `export POETIC_SANDBOX_GITHUB_COPILOT_ENABLED=0`).
678
+
679
+ ---
680
+
681
+ ### Grok CLI
682
+
683
+ **Status**: Supported via Grok Build CLI
684
+
685
+ For first-user delivery, prefer the validated selector
686
+ `--variant grok:conservative` and omit a Grok model pin. Poetic's registry
687
+ default is `auto`, which omits `-m/--model` and lets the installed Grok CLI use
688
+ its currently configured default. To choose a model explicitly for Poetic runs,
689
+ set the normal provider-scoped user option:
690
+
691
+ ```bash
692
+ poetic config set defaults.providers.grok.model grok-4.6 --scope user
693
+ ```
694
+
695
+ Inspect the resolved executor input, source, native default, discovery status,
696
+ and model-argument decision with:
697
+
698
+ ```bash
699
+ poetic config resolved --role executor --provider grok --json
700
+ ```
701
+
702
+ Set the value back to `auto` to follow the Grok CLI default again. Project-scoped
703
+ configuration and an explicit CLI model selection continue to take precedence
704
+ through Poetic's standard configuration resolution.
705
+
706
+ #### Installation
707
+
708
+ Install Grok Build with xAI's official installer:
709
+
710
+ ```bash
711
+ curl -fsSL https://x.ai/cli/install.sh | bash
712
+ ```
713
+
714
+ Because this runs a remote installer, Poetic will not execute it unless you explicitly opt in:
715
+
716
+ ```bash
717
+ POETIC_ALLOW_CURL_BASH=1 poetic provider setup --providers grok
718
+ ```
719
+
720
+ Then verify the CLI is on `PATH`:
721
+
722
+ ```bash
723
+ grok --version
724
+ ```
725
+
726
+ #### Authentication
727
+
728
+ Grok authentication is owned by the `grok` CLI. Poetic does not read or manage
729
+ Grok tokens.
730
+
731
+ **Primary (local / interactive):** use the Grok CLI's cached OAuth / device
732
+ login. Complete login once so the CLI stores auth under `~/.grok/`; later
733
+ Poetic runs reuse that cache without re-prompting:
734
+
735
+ ```bash
736
+ # Preferred local path: device / CLI login (cached OAuth)
737
+ grok login --device-auth
738
+ # or, if your installed Grok CLI uses the shorter form:
739
+ grok login
740
+ # First interactive launch also completes auth when no cache exists:
741
+ grok
742
+ ```
743
+
744
+ **Optional (CI / headless automation):** set the official xAI API key when you
745
+ need non-interactive runs without a local CLI auth cache:
746
+
747
+ ```bash
748
+ export XAI_API_KEY=your-key
749
+ ```
750
+
751
+ `GROK_CODE_XAI_API_KEY` is a **deprecated** Poetic compatibility alias. It is
752
+ still accepted for older Grok Build CLI / Poetic setups; prefer `XAI_API_KEY`
753
+ for new headless configuration. Do not treat the alias as the primary key.
754
+
755
+ #### Health and passive readiness
756
+
757
+ `poetic doctor --provider grok` uses passive checks only. A configured
758
+ `XAI_API_KEY`, the deprecated `GROK_CODE_XAI_API_KEY` alias, or an existing
759
+ `~/.grok/auth.json` reports authentication as **unknown** (legacy boolean auth
760
+ is `false`) until execution verifies the credential. Passive checks do not run
761
+ `grok` because that could start browser auth. That unverified state does not
762
+ block provider selection or compete/run. Use
763
+ `poetic doctor --probe --provider grok` for an explicit active readiness check.
764
+ Compete/run establish auth on the requested execution.
765
+
766
+ For headless compete/run without a usable CLI auth cache, set `XAI_API_KEY`
767
+ (optional path above). `POETIC_GROK_ALLOW_BROWSER_AUTH=1` is an **opt-in only**
768
+ escape hatch when you deliberately accept that the requested Grok execution
769
+ may open a browser; do not treat browser auth as automatically safe in
770
+ headless or CI environments.
771
+
772
+ `poetic compete` and `poetic run` delegate authentication to the requested Grok
773
+ CLI execution. A cached CLI login, `XAI_API_KEY`, or the deprecated
774
+ `GROK_CODE_XAI_API_KEY` alias are common auth paths, but Poetic does not reject
775
+ the run based on a preflight inspection of those paths. Set
776
+ `POETIC_GROK_ALLOW_BROWSER_AUTH=1` only when an interactive browser flow is
777
+ acceptable.
778
+
779
+ #### Headless argv posture
780
+
781
+ Headless Grok runs use `grok --prompt-file` with structured JSON stdout (streaming by default). Validated in
782
+ `.poetic/planning/grok-preflight/findings.md`.
783
+
784
+ **Default posture** (`src/core/providers/grok/execution/commands.ts`):
785
+
786
+ | Flag | Value | Rationale |
787
+ |------|-------|-----------|
788
+ | `--prompt-file` | always | Avoid argv bloat; never use `-p`/`--single` for Poetic prompts |
789
+ | `--output-format` | `streaming-json` | Follows the provider-streaming gate (`POETIC_PROVIDER_STREAMING`, default on since 2026-06-04); set `POETIC_PROVIDER_STREAMING=0` for the `json` posture (deterministic success/error envelopes); `POETIC_GROK_OUTPUT_FORMAT` overrides both |
790
+ | `--no-alt-screen` | always | Headless determinism |
791
+ | `--no-memory` | default on | Disable Grok memory unless `POETIC_GROK_MEMORY=1` |
792
+ | `-m` / `--model` | omitted when the resolved model is `auto` | Lets the installed Grok CLI use its configured default. Explicit project/user/CLI model selections are passed through as `-m <model>`. |
793
+ | `--permission-mode` | *omitted for `default`* | Passing an approval-requiring mode (incl. the literal `default`, plus `acceptEdits`/`auto`) kills Grok's permission worker on the first tool call under headless OAuth (`Transport channel closed, when Auth(AuthorizationRequired)`; exit 0, empty `Cancelled` envelope) — validated on 0.2.16, `acceptEdits` reconfirmed dead on 0.2.73. Omitting uses the CLI's native default and survives. Explicit `bypassPermissions` also survives and is still emitted. `dontAsk` is version-gated for the locked native read-only posture on grok >= 0.2.93: `dontAsk` + matching inspect/search allows are necessary but not globally fail-closed alone; the locked posture also positively lists inspect tools (`Read`, `Grep`, `Bash`, `WebFetch`, `WebSearch`), disallows `Edit`/`Write`, and denies MCP tools. Official `--sandbox read-only` is omitted because it cannot nest under Poetic's outer seatbelt. Read-only runs (`readOnlyWorkingDir`/analysis intent, e.g. `poetic ask --to grok`) use that locked posture when the CLI is new enough; older/unknown CLIs fail before semantic read-only spawn rather than falling back to `--always-approve`. See `.poetic/planning/grok-preflight/transport-death.md`. |
794
+ | `--allow` | read-only runs under `dontAsk` | Grants specific tools under `dontAsk` (`Read`, `Grep`, `Bash`, `WebFetch`, `WebSearch` for consults; necessary but not sufficient alone for the locked read-only posture). Callers pass `allowRules`; `POETIC_GROK_ALLOW_RULES` (csv) overrides. |
795
+ | `--always-approve` | default on (except `dontAsk`) | Required for headless edit-task execution; gated by an active policy boundary. Suppressed under `dontAsk` / locked read-only posture, which would otherwise defeat the allowlist. |
796
+ | `--max-turns` | *not set* | Empirically verified (0.2.82, 2026-07-02): no low default turn cap exists — 40+ sequential turns and 12-minute commands complete without the flag; its only observed real-world effect was killing healthy runs when set too low. Opt in with `POETIC_GROK_MAX_TURNS` (explicit doctor probes do, to stay cheap); invalid values omit the flag rather than falling back |
797
+ | `--no-auto-update` | always | xAI recommends this for scripts/CI/headless runs |
798
+ | `--sandbox` | omitted | Grok's official `read-only` profile is itself `sandbox-exec` and cannot nest under Poetic's outer seatbelt (EPERM). Read-only and edit/mixed both use Poetic's policy/sandbox boundary for FS confinement. |
799
+ | `--reasoning-effort` | set after capability validation | Emitted for explicit effort-capable models (for example `grok-4.6`) and when `auto` discovers such a model. `--effort` is never passed. Discovery failure does not invent capability. |
800
+
801
+ **Auth:** Primary local path is CLI OAuth / device login (`~/.grok` cache). Provider-scoped keys (`XAI_API_KEY`, deprecated `GROK_CODE_XAI_API_KEY`) are optional via provider policy for CI/headless without a cache — not mandatory. Passive tri-state readiness remains `unknown` and legacy boolean auth is `false` when either a key or a valid `~/.grok/auth.json` is present, until an explicit active probe or a successful requested execution verifies headless use; that unverified state does not block selection or execution. Compete/run do not run a pre-execution edit/auth probe; authentication is established by the requested `grok --prompt-file` invocation, and errors from that run keep their normal classification. Explicit `poetic doctor --probe --provider grok` still runs an active headless edit probe (`buildGrokArgv` + `executeProviderCommand`, `--max-turns 8`, `--always-approve`, `POETIC_GROK_AUTH_PROBE_TIMEOUT_MS` defaulting to 45 seconds). Session resume: `ProviderRunOptions.resumeSessionId` emits `--resume <id>`. Parsed token usage propagates through shared orchestration telemetry when present (USD may stay unknown without pricing).
802
+
803
+ **Overrides:** see the `POETIC_GROK_*` env vars in the Configuration subsection below.
804
+
805
+ #### Configuration
806
+
807
+ Poetic invokes `grok` in headless mode. Configure transport behavior via environment variables:
808
+
809
+ | Variable | Purpose | Default |
810
+ | -------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- | ------- |
811
+ | `POETIC_GROK_CLI_COMMAND` | Override Grok CLI binary path | `grok` |
812
+ | `POETIC_GROK_PERMISSION_MODE` | Optional explicit mode (`dontAsk`, `bypassPermissions`). Default **omits** `--permission-mode` (CLI native default). `acceptEdits`/`auto` are rejected as unsafe headless. `dontAsk` requires allow rules and is only used for the locked native read-only posture when the CLI is >= 0.2.93 | omit flag / `default` |
813
+ | `POETIC_GROK_ALLOW_RULES` | Comma-separated `--allow` rules when permission mode is `dontAsk` (required for `dontAsk`) | unset |
814
+ | `POETIC_GROK_AUTO_APPROVE` | Set to `0` to omit `--always-approve` (suppressed automatically under `dontAsk`) | enabled |
815
+ | `POETIC_GROK_ALWAYS_APPROVE` | Legacy alias for `POETIC_GROK_AUTO_APPROVE` | enabled |
816
+ | `POETIC_GROK_MAX_TURNS` | Opt-in `--max-turns` cap. **Unset by default** (flag omitted). Invalid values also omit the flag — there is no fallback default such as 400 | unset (omit flag) |
817
+ | `POETIC_GROK_OUTPUT_FORMAT` | `plain`, `json`, or `streaming-json`. When unset, follows `POETIC_PROVIDER_STREAMING` (default on → `streaming-json`; set `POETIC_PROVIDER_STREAMING=0` for buffered `json`) | `streaming-json` (when streaming on) |
818
+ | `POETIC_GROK_MEMORY` | Set to `1` to allow Grok memory | disabled (`--no-memory`) |
819
+ | `POETIC_GROK_ALLOW_BROWSER_AUTH` | Set to `1` to allow requested Grok execution (or an explicit doctor probe) to start browser auth | disabled |
820
+ | `POETIC_SKIP_GROK` | Skip Grok execution | unset |
821
+
822
+ **Headless permission notes:**
823
+
824
+ - Omitting `--permission-mode` is intentional and **not** the same as passing `--permission-mode default`. Approval-worker modes (`default`, `acceptEdits`, `auto`) die under headless OAuth on tool use.
825
+ - `acceptEdits` and `auto` are unsafe for headless automation; Poetic rejects them if set via `POETIC_GROK_PERMISSION_MODE`.
826
+ - Read-only consults (`poetic ask --to grok`, analysis intent / `readOnlyWorkingDir`) use the locked native posture when the CLI is >= 0.2.93: `dontAsk` + inspect/search allows (`Read`, `Grep`, `Bash`, `WebFetch`, `WebSearch`) plus write tools disallowed and MCP tools denied. Official `--sandbox read-only` is omitted (cannot nest under Poetic's seatbelt). `dontAsk` + allow rules alone are not globally fail-closed. Older/unknown CLIs fail before semantic read-only spawn rather than falling back to `--always-approve`. Elevating `POETIC_GROK_PERMISSION_MODE` (e.g. `bypassPermissions`) cannot YOLO past the locked posture.
827
+ - `--always-approve` (and explicit `bypassPermissions`) require an active Poetic policy/sandbox boundary. For edit intent, `POETIC_GROK_AUTO_APPROVE=0` fails closed before launch (no false success without a tool-approval path).
828
+ - Session resume: when `ProviderRunOptions.resumeSessionId` is set, Poetic emits Grok CLI `--resume <id>`. Legacy env names alone do not resume a session.
829
+ - Token usage: when Grok headless envelopes include parseable token counts, Poetic propagates them through orchestration telemetry. USD cost may remain unknown when pricing is unavailable.
830
+
831
+ #### Usage Patterns
832
+
833
+ Straightforward first run:
834
+
835
+ ```bash
836
+ git checkout -b run/my-task
837
+ poetic run "Update the target file and add focused tests" --provider grok
838
+ ```
839
+
840
+ When you want judge scores or feedback, use judged competition instead (AI
841
+ judging is the default), then apply the harvested result from a delivery branch:
842
+
843
+ ```bash
844
+ git checkout -b run/my-graded-task
845
+ poetic compete "Update the target file and add focused tests" \
846
+ --variant grok:conservative
847
+ git checkout -b fix/my-graded-task
848
+ poetic compete apply <competition-id>
849
+ ```
850
+
851
+ Multi-provider comparison after local validation:
852
+
853
+ ```bash
854
+ poetic compete "Update the target file and add focused tests" \
855
+ --variant grok:conservative \
856
+ --variant codex:conservative
857
+ ```
858
+
859
+ **Important**: Poetic defers Grok authentication to the Grok CLI. For local use,
860
+ prefer cached CLI OAuth / device login (`grok login --device-auth`, `grok login`,
861
+ or an initial `grok`). `XAI_API_KEY` is optional for CI/headless automation.
862
+ `GROK_CODE_XAI_API_KEY` remains a deprecated compatibility alias (still accepted;
863
+ prefer `XAI_API_KEY`). Key presence is configured but unverified until an active
864
+ probe or requested execution succeeds. Poetic starts the requested `grok --prompt-file`
865
+ execution without inspecting those auth paths first; the CLI's actual result is
866
+ authoritative. Set `POETIC_GROK_ALLOW_BROWSER_AUTH=1` only when browser auth is
867
+ acceptable. Explicit `grok-4.6` reasoning effort
868
+ (`low`/`medium`/`high`/`xhigh`) is passed as `--reasoning-effort`. The `auto`
869
+ model honors an explicit effort request only when native model discovery
870
+ resolves to an effort-capable model; discovery failure does not invent
871
+ capability, and `auto` still omits `-m`.
872
+
873
+ ---
874
+
875
+ ### Kiro CLI
876
+
877
+ **Status**: Experimental native provider adapter
878
+
879
+ #### Installation
880
+
881
+ Install Kiro CLI with Kiro's official installer:
882
+
883
+ ```bash
884
+ curl -fsSL https://cli.kiro.dev/install | bash
885
+ ```
886
+
887
+ Because this runs a remote installer, Poetic will not execute it unless you explicitly opt in:
888
+
889
+ ```bash
890
+ POETIC_ALLOW_CURL_BASH=1 poetic provider setup --providers kiro
891
+ ```
892
+
893
+ Then verify the CLI is on `PATH`:
894
+
895
+ ```bash
896
+ kiro-cli --version
897
+ ```
898
+
899
+ #### Authentication
900
+
901
+ Kiro headless automation requires an API key:
902
+
903
+ ```bash
904
+ export KIRO_API_KEY=your-key
905
+ kiro-cli whoami --format json
906
+ ```
907
+
908
+ Interactive login is available with `kiro-cli login`, but automation should use `KIRO_API_KEY` so `kiro-cli chat --no-interactive` can run without browser prompts.
909
+
910
+ #### Health and passive readiness
911
+
912
+ `poetic doctor --provider kiro` checks that `kiro-cli` is installed and reports passive auth readiness from `KIRO_API_KEY`. Kiro's native auth probe uses `kiro-cli whoami --format json` for active provider auth checks without attempting browser login.
913
+
914
+ #### Configuration
915
+
916
+ Poetic invokes Kiro in headless mode with:
917
+
918
+ ```bash
919
+ kiro-cli chat --no-interactive --trust-all-tools "<prompt>"
920
+ ```
921
+
922
+ Kiro models come from the static list configured in
923
+ `.poetic/config/providers.yaml`; Poetic does not query the Kiro CLI for a model
924
+ list. Kiro is experimental: default readiness and interactive setup omit it.
925
+ Select it explicitly with `poetic provider setup --providers kiro`, show
926
+ experimental readiness with `poetic provider list --include-experimental`, or
927
+ include it in interactive setup with
928
+ `poetic provider setup --include-experimental`.
929
+
930
+ | Variable | Purpose | Default |
931
+ | ------------------------- | ------------------------------------ | ---------- |
932
+ | `KIRO_API_KEY` | Kiro API key for headless automation | (none) |
933
+ | `POETIC_KIRO_CLI_COMMAND` | Override Kiro CLI binary path | `kiro-cli` |
934
+ | `POETIC_SKIP_KIRO` | Skip Kiro execution | unset |
935
+
936
+ #### Usage Patterns
937
+
938
+ ```bash
939
+ poetic run "Review this change for correctness" --provider=kiro
940
+ poetic compete "Add focused tests" --variant kiro:conservative:local
941
+ ```
942
+
943
+ **Important**: Kiro support should be validated end-to-end in an authenticated environment before using it for critical work. Current support is based on Kiro's documented headless command surface plus unit-level Poetic coverage.
944
+
945
+ ---
946
+
947
+ ### Google Antigravity CLI
948
+
949
+ **Status**: Supported validated native CLI provider using Google's official `agy` CLI.
950
+
951
+ #### Installation
952
+
953
+ Install Antigravity CLI with Google's official installer:
954
+
955
+ ```bash
956
+ curl -fsSL https://antigravity.google/cli/install.sh | bash
957
+ ```
958
+
959
+ Because this runs a remote installer, Poetic will not execute it unless you explicitly opt in:
960
+
961
+ ```bash
962
+ POETIC_ALLOW_CURL_BASH=1 poetic provider setup --providers antigravity
963
+ ```
964
+
965
+ Then verify the CLI is on `PATH`:
966
+
967
+ ```bash
968
+ agy --version
969
+ ```
970
+
971
+ #### Authentication
972
+
973
+ Antigravity CLI authenticates with Google OAuth on first run and stores credentials in the OS keyring. On local machines it may open a browser; on SSH/headless machines it should print a browser URL and code.
974
+
975
+ ```bash
976
+ agy
977
+ ```
978
+
979
+ Some headless environments may also support an API key:
980
+
981
+ ```bash
982
+ export ANTIGRAVITY_API_KEY=your-key
983
+ ```
984
+
985
+ `poetic doctor --provider antigravity` checks that `agy` is installed and reports passive auth readiness from `ANTIGRAVITY_API_KEY` when present. Native headless readiness currently requires `ANTIGRAVITY_API_KEY`; browser/OAuth state is CLI-owned and is not treated as a reliable non-interactive health signal.
986
+
987
+ #### Configuration
988
+
989
+ Poetic invokes Google's Antigravity CLI in print mode with:
990
+
991
+ ```bash
992
+ agy --print-timeout 45m0s --dangerously-skip-permissions --print "<prompt>"
993
+ ```
994
+
995
+ `--print` is value-bearing: it consumes the next argv token as the prompt. Every
996
+ other flag must precede it, with the prompt immediately after. Ordering
997
+ `--print` before another flag makes `agy` treat that flag as the prompt text and
998
+ answer a question about it instead of running the task -- it still exits 0, so
999
+ the mistake reads as a successful run. `buildAntigravityArgv`
1000
+ (`src/core/providers/antigravity/execution/commands.ts`) enforces this ordering.
1001
+
1002
+ This provider is `supported_validated` as the successor to the sunsetting `gemini`
1003
+ provider. Validated 2026-07-25 against an authenticated `agy` 1.1.7: single-file
1004
+ and multi-file edits land through the Poetic worktree path, a failing task exits
1005
+ non-zero with no changes, and a judged competition produced a correct diff.
1006
+
1007
+ `poetic provider list` reports Antigravity auth as `unknown` rather than `yes`.
1008
+ That is expected: `agy` exposes no non-interactive auth-status probe, so the
1009
+ absence of a signal does not prove you are unauthenticated. Execution defers auth
1010
+ to the CLI and surfaces any real auth error at runtime. Google's official docs
1011
+ still emphasize the interactive TUI, so re-check the headless `--print` path after
1012
+ an `agy` upgrade. Poetic does not route Antigravity through OpenCode. Antigravity
1013
+ is model-fixed to the CLI default until a supported `agy` model-selection flag is
1014
+ verified.
1015
+
1016
+ | Variable | Purpose | Default |
1017
+ | -------------------------------- | ------------------------------------------------------------------------------------------ | ------- |
1018
+ | `ANTIGRAVITY_API_KEY` | Optional Antigravity API key for headless environments when supported by the installed CLI | (none) |
1019
+ | `POETIC_ANTIGRAVITY_CLI_COMMAND` | Override Antigravity CLI binary path | `agy` |
1020
+ | `POETIC_SKIP_ANTIGRAVITY` | Skip Antigravity execution | unset |
1021
+
1022
+ #### Usage Patterns
1023
+
1024
+ ```bash
1025
+ poetic run "Review this change for correctness" --provider=antigravity
1026
+ poetic compete "Add focused tests" --variant antigravity:conservative:local
1027
+ ```
1028
+
1029
+ Aliases accepted by Poetic include `agy`, `anti-gravity`, and `antigravity-cli`.
1030
+
1031
+ ---
1032
+
1033
+ ### Upstream Models via OpenCode
1034
+
1035
+ **Status**: Available through the OpenCode provider, not as standalone Poetic execution providers.
1036
+
1037
+ Configure the upstream provider in OpenCode, then use the exact model ID reported by `opencode models`:
1038
+
1039
+ ```bash
1040
+ curl -fsSL https://opencode.ai/install | bash
1041
+ opencode auth login
1042
+ opencode models
1043
+
1044
+ poetic run "Analyze this code" --engine=opencode --model=<provider/model>
1045
+ poetic compete "Implement feature" --variant opencode:<provider/model>:conservative
1046
+ ```
1047
+
1048
+ Poetic passes the model selection to OpenCode. Provider endpoints, credentials, and model declarations belong in OpenCode configuration rather than Poetic configuration.
1049
+
1050
+ ---
1051
+
1052
+ ### OpenRouter (Pricing Source Only)
1053
+
1054
+ **Status**: Not available as an execution provider
1055
+
1056
+ **Note**: OpenRouter is used internally by Poetic as a pricing data source for model cost calculations. It is not available for task execution. Use a native execution provider (Claude, Cursor, Codex, Gemini, Copilot, Grok, or OpenCode) instead.
1057
+
1058
+ ---
1059
+
1060
+ ### OpenCode
1061
+
1062
+ **Status**: Supported (experimental)
1063
+
1064
+ **Overview**: OpenCode is an AI assistant by Anomaly that provides code generation and assistance capabilities.
1065
+
1066
+ #### Installation
1067
+
1068
+ ```bash
1069
+ # Quick setup
1070
+ POETIC_ALLOW_CURL_BASH=1 poetic provider setup --providers opencode
1071
+
1072
+ # Or install manually on Linux/macOS/WSL
1073
+ curl -fsSL https://opencode.ai/install | bash
1074
+
1075
+ # npm and Homebrew are also supported
1076
+ npm install -g opencode-ai
1077
+ brew install anomalyco/tap/opencode
1078
+ ```
1079
+
1080
+ #### Authentication
1081
+
1082
+ OpenCode manages its provider configuration and credentials. Interactive setups can use:
1083
+
1084
+ ```bash
1085
+ opencode auth login
1086
+ ```
1087
+
1088
+ For headless setups, use the configuration and environment-variable mechanisms documented by OpenCode. Poetic does not interpret an upstream provider's credentials or treat their presence as proof that execution will authenticate.
1089
+
1090
+ #### Discovery (CLI-first)
1091
+
1092
+ Poetic obtains provider and model discovery observations from the OpenCode CLI; it does not parse credential files:
1093
+
1094
+ - **Credential-store entries**: `opencode auth list` — reports what OpenCode has recorded, not whether a future execution will authenticate.
1095
+ - **Model inventory**: `opencode models` and `opencode models <provider>` — advisory model IDs for `opencode run --model <id>`. A missing or empty inventory does not replace an execution attempt. Use `--refresh` only when you explicitly want to update the OpenCode cache.
1096
+
1097
+ - **Health/diagnostics**: `poetic doctor --provider opencode` reports:
1098
+ - Whether the OpenCode CLI is installed
1099
+ - Credential-store entries reported by `opencode auth list`
1100
+ - Advisory models reported by `opencode models`
1101
+ - Optional metadata enrichment from models.dev (best-effort, cached 24h)
1102
+
1103
+ - **Offline behavior**: If the network is unavailable, Poetic still succeeds; models.dev enrichment is skipped and cached data is reused when present.
1104
+ - **Refresh**: Use `opencode models --refresh` only when explicitly requested; Poetic does not auto-refresh on every run.
1105
+
1106
+ Optional enrichment: Poetic may fetch the [models.dev](https://models.dev) catalog (pricing, context, capabilities) with a 24h TTL cache. Models.dev is metadata only and is never treated as authoritative for what you can run locally. Enrichment is best-effort and does not block startup or fail the command when offline.
1107
+
1108
+ **Health check:**
1109
+
1110
+ ```bash
1111
+ poetic doctor --provider opencode
1112
+ ```
1113
+
1114
+ Shows: CLI installed, entries from `opencode auth list`, and advisory models from `opencode models`. Authentication is established by a requested execution, not this diagnostic. No secrets are printed in logs or telemetry.
1115
+
1116
+ #### Plugins
1117
+
1118
+ OpenCode supports plugins for extended functionality. Plugins are optional for basic provider use.
1119
+
1120
+ Poetic does not use OpenCode plugins as the Antigravity integration path. Use the standalone Google Antigravity CLI provider (`--provider antigravity`) for Antigravity work.
1121
+
1122
+ #### Test OpenCode Provider
1123
+
1124
+ ```bash
1125
+ # Test with default model
1126
+ poetic run "Create a hello world test" --variant opencode:conservative
1127
+
1128
+ # Test in competition
1129
+ poetic compete "Implement feature" \
1130
+ --variant opencode:conservative \
1131
+ --variant claude:conservative
1132
+ ```
1133
+
1134
+ #### Headless invocation posture
1135
+
1136
+ Headless OpenCode runs use `opencode run` with prompt-file delivery when the CLI supports `--file`. The invocation shape is `--file <prompt.md> -- "Read the attached prompt file and complete the task exactly as specified."`; older CLIs without `--file` fall back to a positional prompt.
1137
+
1138
+ Known failure modes to preserve in tests and diagnostics:
1139
+
1140
+ - Positional prompt transport can be misread by OpenCode as file/path-like task text; prefer prompt-file delivery.
1141
+ - Headless runs can remain process-active while making no output or file progress; keep OpenCode idle defaults stricter than the hard timeout.
1142
+ - OpenCode may emit little or no useful stdout on timeout; preserve redacted argv plus stdout/stderr tails on provider results.
1143
+ - OpenCode config, data, state, and cache homes must stay isolated per run unless explicitly overridden.
1144
+
1145
+ #### Configuration
1146
+
1147
+ OpenCode reads project configuration from `opencode.json` or `opencode.jsonc`. Keep the schema declaration so editors and OpenCode validate against the upstream contract, and use OpenCode's `{env:VARIABLE_NAME}` substitution instead of committing credential values. OpenCode substitutes an unset variable with an empty string, so the resulting execution—not the placeholder's presence—establishes whether configuration is usable:
1148
+
1149
+ ```json
1150
+ {
1151
+ "$schema": "https://opencode.ai/config.json",
1152
+ "model": "{env:OPENCODE_MODEL}"
1153
+ }
1154
+ ```
1155
+
1156
+ Provider declarations, endpoints, model IDs, and credential variable names are upstream-specific; follow [OpenCode's configuration documentation](https://opencode.ai/docs/config/) for those fields.
1157
+
1158
+ Poetic scopes the environment passed to provider children. When an OpenCode configuration references an otherwise unrecognized variable, add its name to the parent process's comma-separated allowlist, for example `POETIC_CHILD_ENV_ALLOWLIST=PROVIDER_API_KEY`. This only permits the variable to reach OpenCode. It does not configure the provider, validate the value, prove authentication, or make inventory output authoritative. Never put the credential value itself in `POETIC_CHILD_ENV_ALLOWLIST`.
1159
+
1160
+ ---
1161
+
1162
+ ### Pi CLI
1163
+
1164
+ **Status**: Supported validated native provider adapter. Validated 2026-07-26 against `pi` 0.82.1 with a cloud Anthropic backend, exercised through `poetic run` and `poetic compete` with incremental streaming. The local OpenAI-compatible (self-hosted) path is **not yet validated**.
1165
+
1166
+ Pi is unlike Poetic's other providers: it is a backend-agnostic **host**, not a vendor. One Pi install can front cloud APIs (Anthropic, OpenAI, Google, and ~30 others) or a local OpenAI-compatible endpoint such as Ollama. Cost, speed, and reasoning quality are therefore properties of whichever backend you configure, not of `pi` itself — which is why Poetic's capability ratings for Pi are deliberately conservative.
1167
+
1168
+ #### Installation
1169
+
1170
+ ```bash
1171
+ npm install -g @earendil-works/pi-coding-agent
1172
+ pi --version
1173
+ ```
1174
+
1175
+ #### Authentication
1176
+
1177
+ Pi owns its own credential store at `~/.pi/agent/auth.json` (written `0600`). Configure a backend either through Pi or through a backend environment variable:
1178
+
1179
+ ```bash
1180
+ # Option A: a backend env var Poetic will pass through
1181
+ export ANTHROPIC_API_KEY=your-key
1182
+
1183
+ # Option B: a local OpenAI-compatible endpoint (no real credential needed)
1184
+ # declare it in ~/.pi/agent/models.json; Pi still wants a placeholder
1185
+ # apiKey value, e.g. "ollama"
1186
+ ```
1187
+
1188
+ Poetic passes through `ANTHROPIC_API_KEY`, `OPENAI_API_KEY`, `GEMINI_API_KEY`, and `GOOGLE_API_KEY`. An operator-named key such as `MY_COMPANY_API_KEY` is **not** carried into the child environment in v1.
1189
+
1190
+ #### Health and passive readiness
1191
+
1192
+ `poetic doctor --provider pi` checks that `pi` is installed and reports passive auth readiness. Readiness reports `unknown` rather than `no` when no backend env var is set, because an absent env var does not prove you are unauthenticated: Pi may hold a stored credential, or your backend may be a local endpoint that needs none. `unknown` keeps Pi attempt-eligible; a real auth failure surfaces from the CLI at execution time.
1193
+
1194
+ #### Configuration
1195
+
1196
+ Poetic invokes Pi non-interactively with:
1197
+
1198
+ ```bash
1199
+ pi --print --mode json --no-approve --no-session [--model <backend/model>] [--thinking <level>] [--tools <names>] "<prompt>"
1200
+ ```
1201
+
1202
+ Three details are load-bearing:
1203
+
1204
+ - **`--provider` is never emitted.** Pi's `--provider` names its *inner* inference backend (its default is `google`), not the Poetic provider. Poetic passes a qualified `backend/model` id through `--model` instead, so Pi resolves the backend from the id and your configuration is never overridden. Bare model ids resolve against Pi's own default backend, so prefer qualified ids.
1205
+ - **`--no-approve`, never `--approve`.** Pi's `--approve` grants *project trust*, which loads project-local extensions — that is, executable code from the repository being worked on. Unattended runs must not opt in.
1206
+ - **Tool names must be Pi's own.** The built-ins are `read`, `bash`, `edit`, `write`, `grep`, `find`, `ls`. Pi silently *filters* unrecognized `--tools` names rather than erroring, so a Claude-style name like `read_file` would yield an agent with zero tools that still reports success. Poetic drops unknown names and warns instead of passing them on. Critically, omitting `--tools` is **not** the same as granting nothing: Pi falls back to `read,bash,edit,write`. So when a caller requests an allowlist and none of the names survive filtering, Poetic emits `--no-tools` to fail closed rather than silently widening the request into write and shell access. A read-only run is restricted to `read,grep,find,ls` (`bash` is excluded because it can write via shell redirection).
1207
+
1208
+ `--thinking` accepts `off|minimal|low|medium|high|xhigh|max`, a superset of Poetic's five effort levels, so every level maps natively and exactly. Whether the configured backend honors it is a backend property.
1209
+
1210
+ Pi is a supported provider: default readiness and interactive setup include it, and no `--include-experimental` opt-in is needed. Passive auth readiness reports `unknown` rather than `no`, because Pi keeps credentials in its own `~/.pi/agent/auth.json` and a local endpoint may need no credential at all — so an absent env var does not prove you are unauthenticated. Backend auth failures surface at execution time and are classified for retry.
1211
+
1212
+ | Variable | Purpose | Default |
1213
+ | ----------------------- | --------------------------------------------- | ------- |
1214
+ | `ANTHROPIC_API_KEY` | Backend credential (when using Anthropic) | (none) |
1215
+ | `OPENAI_API_KEY` | Backend credential (when using OpenAI) | (none) |
1216
+ | `POETIC_PI_CLI_COMMAND` | Override Pi CLI binary path | `pi` |
1217
+ | `POETIC_SKIP_PI` | Skip Pi execution | unset |
1218
+
1219
+ #### Usage Patterns
1220
+
1221
+ ```bash
1222
+ poetic run "Add a focused test for the parser" --provider pi
1223
+ poetic run "Fix the failing case" --provider pi --model anthropic/claude-haiku-4-5
1224
+ ```
1225
+
1226
+ #### Known behavior
1227
+
1228
+ - **Exit codes are not a success signal in JSON mode.** Pi maps a failed turn to a non-zero exit only under `--mode text`; under `--mode json` it exits `0` even on an auth failure or an unresolvable model. Poetic derives success from the event stream (`stopReason`, `errorMessage`, and whether any text or file change was produced), so a failed run is reported as a failure rather than as an empty success.
1229
+ - **Pi blocks on an open stdin pipe.** Even in `--print` mode with the prompt in argv, Pi waits for stdin EOF before emitting anything: an open pipe produces zero bytes and never exits, while the identical spawn with stdin closed completes in about a second. Poetic spawns Pi with stdin ignored. This is also what makes an interactive `pi ... > file` appear to write nothing.
1230
+ - **Session resume is unsupported.** `--session <id>` calls an interactive "Fork this session?" confirmation even in non-interactive mode, which deadlocks on stdin. Poetic passes `--no-session`.
1231
+ - **Usage is snapshotted per model call, not per event.** Within one call Pi repeats the same running total on every event, so summing all events would multiply the totals. But a tool-using turn makes several billed calls (a verified two-call run reported 1482/143 then 1705/136), so taking only the last snapshot would undercount. Poetic accrues at each assistant `message_end` and skips the duplicate `turn_end`.
1232
+
1233
+ ---
1234
+
1235
+ ## Authentication Semantics
1236
+
1237
+ Poetic has four distinct authentication contexts. Understanding which applies prevents confusion between "setup readiness" and "runtime guarantees."
1238
+
1239
+ ### 1. Setup and Readiness Checks
1240
+
1241
+ `poetic provider list` reports provider installation and authentication status as a **one-time advisory check**. It does not gate execution. Output shows `OK` (installed + authenticated), `Warning:` (installed, not authenticated), or `Error` (not installed).
1242
+
1243
+ ### 2. Routing and Selection Heuristics
1244
+
1245
+ When selecting providers, routing (`routing-planner.ts`) and auto-orchestration (`auto-orchestrator.ts`) call `isAuthenticated()` as a heuristic. If auth is not pre-verified, the provider is still eligible — the routing rationale notes "auth not pre-verified; runtime will defer to the provider CLI."
1246
+
1247
+ ### 3. Explicit Preflight (Flywheel and Dry-Run)
1248
+
1249
+ Flywheel preflight (`flywheel-preflight.ts`) runs a dedicated `checkProviderAuth()` for workflow stages. Dry-run validation (`dry-run-validator.ts`) checks auth but explicitly labels it as advisory: "Authentication is advisory here; runtime will defer to the CLI."
1250
+
1251
+ ### 4. Runtime Execution
1252
+
1253
+ Provider execution **defers authentication to the underlying provider CLI**. The base provider's `wrapOperation()` does not call `ensureAuth()`. Auth errors surface at execution time from the provider CLI with actionable guidance. This is intentional — it avoids hanging auth probes in headless/subprocess environments.
1254
+
1255
+ **Judge preflight** follows the same pattern: `checkClaudeCliAvailability()` verifies CLI installation only (`claude --version`), deliberately skipping auth status checks. Auth errors from the judge provider surface at execution time.
1256
+
1257
+ ---
1258
+
1259
+ ## Dependency Matrix
1260
+
1261
+ Quick reference for what you need to install:
1262
+
1263
+ | Provider | Primary CLI | Secondary CLI | Status |
1264
+ | ------------------- | ----------------------- | ------------- | -------------------------------------------- |
1265
+ | **Claude** | `claude` (Anthropic) | - | Primary validated |
1266
+ | **Codex** | `codex` (OpenAI) | - | Primary validated |
1267
+ | **Grok** | `grok` (xAI) | - | Supported validated |
1268
+ | **Cursor** | `cursor-agent` (Cursor) | - | Supported validated |
1269
+ | **OpenCode** | `opencode` (Anomaly) | - | Supported validated |
1270
+ | **Gemini** | `gemini` (Google) | - | Experimental (CLI sunsetting) |
1271
+ | **Copilot** | `copilot` | - | Experimental |
1272
+ | **Kiro** | `kiro-cli` | - | Experimental headless CLI provider |
1273
+ | **Pi** | `pi` | - | Supported validated; backend-agnostic host CLI |
1274
+ | **Antigravity** | `agy` (Google) | - | Supported validated Google Antigravity CLI provider |
1275
+ | **GLM/Z.AI models** | `opencode` (Anomaly) | - | Available through OpenCode model selection |
1276
+
1277
+ **Note**: GLM/Z.AI models use OpenCode CLI with built-in Z.ai authentication. Select them with `--engine=opencode --model=<glm model id>`.
1278
+
1279
+ ---
1280
+
1281
+ ## Environment Variables Reference
1282
+
1283
+ | Variable | Purpose | Default |
1284
+ | -------------------------------- | ------------------------------------------------------------------------------------------ | ----------------------------------- |
1285
+ | `POETIC_MOCK_PROVIDERS` | Request mock mode (1=on, 0=off); outside tests also requires `POETIC_ALLOW_MOCK_PROVIDERS=1` or startup scrubs it | `0` |
1286
+ | `POETIC_ALLOW_MOCK_PROVIDERS` | Explicit opt-in for mock mode outside test runners (`1` required with `POETIC_MOCK_PROVIDERS=1`) | `0` |
1287
+ | `CLAUDE_CONFIG_DIR` | Claude config directory | `~/.poetic/config/providers/claude` |
1288
+ | `POETIC_CLAUDE_BACKEND` | Claude backend selector (`anthropic`\|`bedrock`\|`vertex`) | `anthropic` |
1289
+ | `POETIC_BEDROCK_REGION_PREFIX` | Bedrock inference profile prefix (`global`\|`us`\|`eu`\|`jp`\|`apac`) | `global` |
1290
+ | `CODEX_HOME` | Codex config directory | `~/.codex` |
1291
+ | `POETIC_CODEX_AUTH_MODE` | `api_key` passes API keys to Codex CLI; otherwise OAuth (default) | OAuth |
1292
+ | `POETIC_CODEX_BACKEND` | Explicit Codex inference backend (`openai` or `bedrock`); unset follows Codex config | (auto) |
1293
+ | `POETIC_TIMEOUT_CODEX_MS` | Codex subprocess timeout in milliseconds | `2700000` |
1294
+ | `OPENAI_API_KEY` | OpenAI API key for Codex when `POETIC_CODEX_AUTH_MODE=api_key` | (none) |
1295
+ | `CODEX_API_KEY` | Legacy alias for API key auth (readiness + auth module) | (none) |
1296
+ | `CODEX_TOKEN` | Legacy token auth | (none) |
1297
+ | `POETIC_CODEX_ISOLATE_HOME` | Isolate Codex session/history per worktree (`0` disables) | `1` |
1298
+ | `CURSOR_CONFIG_DIR` | Cursor config directory | `~/.poetic/cursor` |
1299
+ | `CURSOR_API_KEY` | Historical Cursor cloud agents key; does not enable Poetic `:cloud` execution | (none) |
1300
+ | `POETIC_CURSOR_CLOUD_TRANSPORT` | Historical Cursor cloud transport selector (`api` or `github_pr`); not a product path | (none) |
1301
+ | `CURSOR_CLOUD_TRANSPORT` | Historical alternative for Cursor cloud transport selection | (none) |
1302
+ | `GEMINI_CONFIG_DIR` | Gemini config directory | `~/.poetic/gemini` |
1303
+ | `ANTHROPIC_API_KEY` | Optional legacy Claude API key (CLI login recommended; Poetic defaults to CLI auth) | (none) |
1304
+ | `GOOGLE_API_KEY` | Gemini API key (personal account) | (none) |
1305
+ | `GEMINI_API_KEY` | Alternative Gemini API key | (none) |
1306
+ | `OPENAI_API_KEY` | OpenAI API key (used by some providers/agents) | (none) |
1307
+ | `OPENROUTER_API_KEY` | OpenRouter API key (pricing + optional provider key) | (none) |
1308
+ | `POETIC_SKIP_OPENCODE` | Skip OpenCode execution (dry-run mode, 1=on) | `0` |
1309
+ | `GOOGLE_CLOUD_PROJECT` | GCP project ID (Vertex AI) | (none) |
1310
+ | `GCLOUD_PROJECT` | Alternate GCP project ID (Vertex AI) | (none) |
1311
+ | `CLOUD_ML_REGION` | Vertex AI region for Claude Code | (none) |
1312
+ | `GOOGLE_APPLICATION_CREDENTIALS` | Service account key path (Vertex AI) | (none) |
1313
+ | `POETIC_CURSOR_CLI_COMMAND` | Path to Cursor Agent binary (preferred). Legacy `CURSOR_CLI_COMMAND` is still honored. | `cursor-agent` |
1314
+ | `CURSOR_CLI_TIMEOUT` | Timeout in milliseconds | `30000` |
1315
+ | `POETIC_CURSOR_MODEL` | Default Cursor model for local CLI | `auto` |
1316
+ | `POETIC_DEFAULT_PROVIDER` | Global default provider without flags | (none) |
1317
+ | `POETIC_COPILOT_CLI_COMMAND` | Path to GitHub Copilot CLI binary | `copilot` |
1318
+ | `POETIC_COPILOT_WORKFLOW` | Default Copilot workflow (`suggest`, `chat`, `explain`) | `suggest` |
1319
+ | `POETIC_TIMEOUT_COPILOT_MS` | Copilot provider timeout override in milliseconds | `(unset; registry fallback 2700000)` |
1320
+ | `COPILOT_TELEMETRY_OPTOUT` | Disable GitHub Copilot telemetry (1=on) | `0` |
1321
+ | `KIRO_API_KEY` | Kiro API key for headless automation | (none) |
1322
+ | `POETIC_KIRO_CLI_COMMAND` | Path to Kiro CLI binary | `kiro-cli` |
1323
+ | `POETIC_SKIP_KIRO` | Skip Kiro execution | unset |
1324
+ | `POETIC_PI_CLI_COMMAND` | Path to Pi CLI binary | `pi` |
1325
+ | `POETIC_SKIP_PI` | Skip Pi execution | unset |
1326
+ | `ANTIGRAVITY_API_KEY` | Optional Antigravity API key for headless environments when supported by the installed CLI | (none) |
1327
+ | `POETIC_ANTIGRAVITY_CLI_COMMAND` | Path to Google Antigravity CLI binary | `agy` |
1328
+ | `POETIC_SKIP_ANTIGRAVITY` | Skip Antigravity execution | unset |
1329
+ | `POETIC_DEBUG` | Enable debug logging for all providers | `0` |
1330
+ | `POETIC_VERBOSE` | Enable verbose output for all providers | `0` |
1331
+ | `POETIC_PLAIN_LOGS` | Disable ANSI colors in logs | `0` |
1332
+
1333
+ ---
1334
+
1335
+ ## Troubleshooting
1336
+
1337
+ ### Claude Issues
1338
+
1339
+ **Problem**: `'claude' is not available on this system`
1340
+
1341
+ **Solution**:
1342
+
1343
+ ```bash
1344
+ # Verify Claude CLI is installed
1345
+ which claude
1346
+
1347
+ # If not found, install it
1348
+ npm install -g @anthropic-ai/claude-code
1349
+
1350
+ # Add to PATH if needed
1351
+ export PATH="$PATH:$(npm config get prefix)/bin"
1352
+ ```
1353
+
1354
+ **Problem**: `Authentication failed`
1355
+
1356
+ **Solution**:
1357
+
1358
+ ```bash
1359
+ # Re-authenticate
1360
+ claude auth logout
1361
+ claude auth login
1362
+ ```
1363
+
1364
+ **Problem**: `Rate limit exceeded`
1365
+
1366
+ **Solution**: Wait 60 seconds or upgrade your Anthropic plan for higher limits.
1367
+
1368
+ ---
1369
+
1370
+ ### Codex Issues
1371
+
1372
+ **Problem**: `Command not found: codex`
1373
+
1374
+ **Solution**:
1375
+
1376
+ ```bash
1377
+ # Install Codex CLI
1378
+ npm install -g @openai/codex
1379
+
1380
+ # Verify installation
1381
+ codex --version
1382
+ ```
1383
+
1384
+ **Problem**: `Authentication required`
1385
+
1386
+ **Solution**:
1387
+
1388
+ ```bash
1389
+ # Re-authenticate
1390
+ codex login
1391
+ ```
1392
+
1393
+ ---
1394
+
1395
+ ### Cursor Issues
1396
+
1397
+ **Problem**: `ConnectError: [invalid_argument]`
1398
+
1399
+ **Solution**: This often occurs in plan mode. Disable plan mode or try a different model (`--model auto` falls back to your Cursor preference).
1400
+
1401
+ **Problem**: `Command not found: cursor-agent`
1402
+
1403
+ **Solution**: Install Cursor Agent (see [Cursor (CLI)](#cursor-cli) → Installation), then verify with `cursor-agent --version`.
1404
+
1405
+ **Problem**: `Not authenticated`
1406
+
1407
+ **Solution**: Poetic reuses your Cursor login. Authenticate with `cursor-agent login` (see [Cursor (CLI)](#cursor-cli) → Authentication).
1408
+
1409
+ **Problem**: `Command timed out after 30000ms`
1410
+
1411
+ **Solution**: Increase timeout in config or environment:
1412
+
1413
+ ```bash
1414
+ export CURSOR_CLI_TIMEOUT=60000 # 60 seconds
1415
+ ```
1416
+
1417
+ **Problem**: `Invalid model: xyz`
1418
+
1419
+ **Solution**: Use supported models (`auto`, `gpt-4o`, `gpt-4o-mini`, etc.) or set `POETIC_CURSOR_MODEL` to a known value.
1420
+
1421
+ ---
1422
+
1423
+ ### Gemini Issues
1424
+
1425
+ **Problem**: `'gemini' is not available on this system`
1426
+
1427
+ **Solution**:
1428
+
1429
+ ```bash
1430
+ # Verify Gemini CLI is installed
1431
+ which gemini
1432
+
1433
+ # If not found, install it
1434
+ npm install -g @google/gemini-cli
1435
+
1436
+ # Add to PATH if needed
1437
+ export PATH="$PATH:$(npm config get prefix)/bin"
1438
+ ```
1439
+
1440
+ **Problem**: `Authentication failed` or `API key not found`
1441
+
1442
+ **Solution**: Set up proper authentication:
1443
+
1444
+ ```bash
1445
+ # For personal Google account
1446
+ export GOOGLE_API_KEY='your-api-key-here'
1447
+
1448
+ # For Vertex AI enterprise
1449
+ gcloud auth application-default login
1450
+ export GOOGLE_CLOUD_PROJECT='your-project-id'
1451
+ export GOOGLE_CLOUD_LOCATION='us-central1'
1452
+ ```
1453
+
1454
+ **Problem**: `Permission denied` or `Insufficient permissions`
1455
+
1456
+ **Solution**: Ensure proper permissions:
1457
+
1458
+ ```bash
1459
+ # For Vertex AI, check service account has AI Platform User role
1460
+ gcloud projects add-iam-policy-binding YOUR_PROJECT_ID \
1461
+ --member="serviceAccount:your-service-account@YOUR_PROJECT_ID.iam.gserviceaccount.com" \
1462
+ --role="roles/aiplatform.user"
1463
+ ```
1464
+
1465
+ **Problem**: `Rate limit exceeded`
1466
+
1467
+ **Solution**: Wait or upgrade quotas. Personal accounts have different limits than enterprise Vertex AI accounts.
1468
+
1469
+ ---
1470
+
1471
+ ### OpenCode Model Issues
1472
+
1473
+ **Problem**: `Command not found: opencode`
1474
+
1475
+ **Solution**:
1476
+
1477
+ ```bash
1478
+ # Install OpenCode CLI
1479
+ curl -fsSL https://opencode.ai/install | bash
1480
+ # or:
1481
+ npm install -g opencode-ai
1482
+
1483
+ # Verify installation
1484
+ opencode --version
1485
+ ```
1486
+
1487
+ **Problem**: An OpenCode execution reports an authentication failure
1488
+
1489
+ **Solution**: Repair the affected upstream provider through OpenCode, then retry the execution:
1490
+
1491
+ ```bash
1492
+ opencode auth login
1493
+ ```
1494
+
1495
+ For a headless provider configured through environment substitution, confirm the referenced variable reaches OpenCode. If Poetic would otherwise filter that variable, name it in `POETIC_CHILD_ENV_ALLOWLIST`; this propagation setting does not validate the credential.
1496
+
1497
+ **Problem**: A model-family name passed as `--engine` is rejected
1498
+
1499
+ **Solution**: Use OpenCode as the execution provider and pass an exact model ID from `opencode models`:
1500
+
1501
+ ```bash
1502
+ poetic run "Analyze this code" --engine=opencode --model=<provider/model>
1503
+ ```
1504
+
1505
+ ---
1506
+
1507
+ ## Provider Comparison
1508
+
1509
+ | Feature | Claude | Codex | Cursor | Gemini | Copilot | OpenCode |
1510
+ | ---------------------- | ------------------- | -------------------- | ---------------- | --------------- | ------------------------- | --------------------- |
1511
+ | **Code Generation** | | | | | | |
1512
+ | **Reasoning** | | | | | | |
1513
+ | **Speed** | | | | | | |
1514
+ | **Context Window** | 200K+ tokens | 128K+ tokens | Provider-routed | 1M tokens | Provider-routed | Upstream-dependent |
1515
+ | **Cost** | $$$ | $$$$ | $$ | $ | $$ | Upstream-dependent |
1516
+ | **Setup Complexity** | Medium | High | High | Low | Low | Medium |
1517
+ | **Enterprise Support** | No | Yes | Yes | Yes | No | Depends on upstream |
1518
+ | **Dependencies** | Single CLI | Single CLI | Single CLI | Single CLI | Single CLI | Single CLI |
1519
+ | **Best For** | Complex refactoring | Enterprise workflows | Quick iterations | General purpose | Experimental agentic local edits | Multi-backend routing |
1520
+
1521
+ **Notes**:
1522
+
1523
+ - GLM/Z.AI models are selected through OpenCode, for example `--engine=opencode --model=z-ai/glm-4.7`.
1524
+
1525
+ ---
1526
+
1527
+ ## Next Steps
1528
+
1529
+ Once providers are set up:
1530
+
1531
+ 1. **Test Execution**:
1532
+
1533
+ ```bash
1534
+ poetic run "Create a hello world test" --engine=claude
1535
+ ```
1536
+
1537
+ 2. **Run Variant Competition**:
1538
+
1539
+ ```bash
1540
+ poetic run "Implement feature X" --variants=3
1541
+ ```
1542
+
1543
+ 3. **View Telemetry**:
1544
+
1545
+ ```bash
1546
+ poetic telemetry leaderboard
1547
+ poetic telemetry trends
1548
+ ```
1549
+
1550
+ 4. **Review Results**:
1551
+ - Check `.poetic/telemetry/db/` for SQLite databases
1552
+ - Check `.poetic/telemetry/logs/` for JSONL logs
1553
+
1554
+ ---
1555
+
1556
+ ## Support
1557
+
1558
+ - **Documentation**: `docs/CLI_REFERENCE.md`, `docs/TROUBLESHOOTING.md`, [ARCHITECTURE.md](https://github.com/ebrindley/Poetic/blob/main/ARCHITECTURE.md)
1559
+ - **Issues**: https://github.com/ebrindley/Poetic/issues
1560
+
1561
+ ---
1562
+
1563
+ **Last Updated**: 2026-07-25
1564
+
1565
+ **Major Changes:**
1566
+
1567
+ - Documented local-only execution for all providers (ADR-021)
1568
+ - Cursor/Codex cloud setup reframed as historical compatibility only
1569
+ - Provider API transport for local runs remains supported
1570
+ - Ordinary PR publication and judge-winner semantics unchanged