@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.
- package/.github/SECURITY.md +47 -0
- package/.nvmrc +1 -0
- package/.poetic/README.md +37 -0
- package/.poetic/providers/catalog.json +12051 -0
- package/.poetic/providers/pricing.json +1272 -0
- package/.poetic/providers/registry.json +3369 -0
- package/CHANGELOG.md +552 -0
- package/CODE_OF_CONDUCT.md +40 -0
- package/CONTRIBUTING.md +23 -0
- package/INSTALL.md +454 -0
- package/LICENSE +21 -0
- package/README.md +474 -0
- package/dist/BasicOptimizationCompetitionRunner-5H5TBYO4.js +153 -0
- package/dist/ExecutionTracker-UVONC4C6.js +16 -0
- package/dist/OptimizationConfig-7DFY2TST.js +17 -0
- package/dist/OptimizationEngine-JIMGP3LY.js +1597 -0
- package/dist/PromptStore-U6ZD3ZMQ.js +18 -0
- package/dist/actions-LUJPINLJ.js +322 -0
- package/dist/agent-ingest-3DJUJ7FU.js +53 -0
- package/dist/aggregator-DNCBINFO.js +12 -0
- package/dist/ai-judge-5QT5QJVU.js +156 -0
- package/dist/allowlist-grounding-RO6HKUFI.js +16 -0
- package/dist/allowlist-utils-23V7TJ3G.js +28 -0
- package/dist/anchored-turn-service-JULUCUIK.js +489 -0
- package/dist/api-transport-4TYTNLTJ.js +1087 -0
- package/dist/apply-completion-mode-AW2MOS3R.js +89 -0
- package/dist/artifact-migrator-23L45ISD.js +267 -0
- package/dist/ask-HWVV6QFR.js +135 -0
- package/dist/auth-5KEDKAPP.js +67 -0
- package/dist/auth-7TT3JINV.js +78 -0
- package/dist/auth-E6XUNZ5M.js +68 -0
- package/dist/auth-H3XDZE22.js +134 -0
- package/dist/auth-OC4E6633.js +71 -0
- package/dist/auth-S4CTX4GQ.js +44 -0
- package/dist/auth-YLH3S7EY.js +69 -0
- package/dist/auth-liveness-TDDEZY3T.js +46 -0
- package/dist/auto-optimizer-VPRWOWGU.js +80 -0
- package/dist/autoloop-cleanup-JOGKTLWA.js +109 -0
- package/dist/autoloop-evidence-gates-PCDALGVJ.js +38 -0
- package/dist/autoloop-gate-policy-Z7FVJVXV.js +175 -0
- package/dist/autoloop-helpers-2KTK43GL.js +22 -0
- package/dist/autoloop-ledger-W7QO62PX.js +96 -0
- package/dist/autoloop-ledger-subscriber-Z5RW5EIE.js +162 -0
- package/dist/autoloop-run-defaults-FERGRZGP.js +19 -0
- package/dist/autoloop-run-lock-CT2NWSV3.js +197 -0
- package/dist/autoloop-success-J2VKKBXQ.js +85 -0
- package/dist/autoloop-termination-summary-RN75F422.js +58 -0
- package/dist/autoloop-trajectory-XFIEXP5Z.js +282 -0
- package/dist/autoloop-wall-clock-T7ZVIQOC.js +12 -0
- package/dist/autonomous-loop-controller-PW4XVFGQ.js +4120 -0
- package/dist/backend-P3DAYRP7.js +29 -0
- package/dist/background-executor-CBN552V4.js +257 -0
- package/dist/backlog-execution-intent-U4XYPTV6.js +15 -0
- package/dist/backup-active-store-5WXG6SXT.js +17 -0
- package/dist/backup-telemetry-db-XGLXAA3N.js +254 -0
- package/dist/basic-competition-master-VCSBJVRN.js +344 -0
- package/dist/branch-archive-manager-RP6FP3ZC.js +254 -0
- package/dist/branch-cleanup-manager-RSHAI7YR.js +20 -0
- package/dist/build-gate-YHGRB4QB.js +71 -0
- package/dist/change-summary-WY7J5TOX.js +33 -0
- package/dist/chunk-23A26CSN.js +123 -0
- package/dist/chunk-27UTJD3M.js +265 -0
- package/dist/chunk-2A5CILN3.js +310 -0
- package/dist/chunk-2AQUWJPW.js +225 -0
- package/dist/chunk-2BZ53J6J.js +2344 -0
- package/dist/chunk-2DY5KNVM.js +276 -0
- package/dist/chunk-2EIA4RBE.js +659 -0
- package/dist/chunk-2IUXIGQD.js +1064 -0
- package/dist/chunk-2N42MS2Z.js +2193 -0
- package/dist/chunk-2QJ3H3L7.js +42 -0
- package/dist/chunk-2QLYTVYX.js +791 -0
- package/dist/chunk-2VSQMRCB.js +18 -0
- package/dist/chunk-2XQXYBM2.js +130 -0
- package/dist/chunk-2YFUIER7.js +426 -0
- package/dist/chunk-34CNP2HB.js +148 -0
- package/dist/chunk-35P3W3JX.js +456 -0
- package/dist/chunk-36PEBZAF.js +18 -0
- package/dist/chunk-3AOKYKA7.js +22 -0
- package/dist/chunk-3BCUNHKF.js +475 -0
- package/dist/chunk-3FLXLLB7.js +26 -0
- package/dist/chunk-3FOZ2VHV.js +100 -0
- package/dist/chunk-3G6FZCRF.js +106 -0
- package/dist/chunk-3M57DADF.js +44 -0
- package/dist/chunk-3S62LLWJ.js +543 -0
- package/dist/chunk-3ZPQLGV7.js +2904 -0
- package/dist/chunk-44N5WZZH.js +45 -0
- package/dist/chunk-45FPSA3B.js +125 -0
- package/dist/chunk-4BJ3O4RQ.js +929 -0
- package/dist/chunk-4BOP7T6L.js +2321 -0
- package/dist/chunk-4BTDUT2S.js +42 -0
- package/dist/chunk-4CSS7WVI.js +143 -0
- package/dist/chunk-4CUY7AFY.js +247 -0
- package/dist/chunk-4GSN5O5J.js +62 -0
- package/dist/chunk-4HN6DF7V.js +1027 -0
- package/dist/chunk-4IAPOG5V.js +415 -0
- package/dist/chunk-4IYIZQWV.js +48 -0
- package/dist/chunk-4NXPXE62.js +84 -0
- package/dist/chunk-4RCCF5BR.js +712 -0
- package/dist/chunk-4V7NAQ4R.js +19527 -0
- package/dist/chunk-4VJITV4P.js +445 -0
- package/dist/chunk-4YX7J6QL.js +1859 -0
- package/dist/chunk-527OBWQB.js +338 -0
- package/dist/chunk-5D4A7E3D.js +448 -0
- package/dist/chunk-5DLKYTQX.js +4003 -0
- package/dist/chunk-5EERLVZB.js +139 -0
- package/dist/chunk-5H72XE4H.js +256 -0
- package/dist/chunk-5HDP7XZG.js +91 -0
- package/dist/chunk-5LAMRH4X.js +969 -0
- package/dist/chunk-5LTN43AS.js +1972 -0
- package/dist/chunk-5RBHQYDB.js +2206 -0
- package/dist/chunk-5WCQRDRB.js +588 -0
- package/dist/chunk-5WRLK5KW.js +700 -0
- package/dist/chunk-5ZCXC23G.js +595 -0
- package/dist/chunk-6BM72ZMG.js +31 -0
- package/dist/chunk-6EDAJH2I.js +68 -0
- package/dist/chunk-6EQKFDBH.js +457 -0
- package/dist/chunk-6MFRHTRI.js +115 -0
- package/dist/chunk-6TZJRKNW.js +321 -0
- package/dist/chunk-6V7HGQFZ.js +20 -0
- package/dist/chunk-6VWVO2TU.js +3746 -0
- package/dist/chunk-6Y5TWI7H.js +146 -0
- package/dist/chunk-6Y5U7UFY.js +91 -0
- package/dist/chunk-6ZLAK3XG.js +14 -0
- package/dist/chunk-72XCRQED.js +34 -0
- package/dist/chunk-72YTZMAM.js +589 -0
- package/dist/chunk-73BBJOKA.js +263 -0
- package/dist/chunk-73NCTWKL.js +188 -0
- package/dist/chunk-77I6G4CO.js +1 -0
- package/dist/chunk-7DHRDWFS.js +3104 -0
- package/dist/chunk-7DNSNKJV.js +78 -0
- package/dist/chunk-7FMJVYBS.js +307 -0
- package/dist/chunk-7GDRQBQC.js +419 -0
- package/dist/chunk-7GPCEFUV.js +270 -0
- package/dist/chunk-7IL4A2PP.js +948 -0
- package/dist/chunk-7MMLMXO6.js +3679 -0
- package/dist/chunk-7QCZSLBH.js +1 -0
- package/dist/chunk-7R2WLDOS.js +62 -0
- package/dist/chunk-7T7RUJI7.js +949 -0
- package/dist/chunk-A2WKSVX7.js +43 -0
- package/dist/chunk-A3YGID55.js +133 -0
- package/dist/chunk-A722DEVA.js +14 -0
- package/dist/chunk-ACDIT7OP.js +1376 -0
- package/dist/chunk-ACKIPAOJ.js +302 -0
- package/dist/chunk-APPNGGN7.js +365 -0
- package/dist/chunk-APV6MK5E.js +137 -0
- package/dist/chunk-ASEP3M2W.js +968 -0
- package/dist/chunk-AT4TNPWW.js +2931 -0
- package/dist/chunk-ATVKCSGT.js +250 -0
- package/dist/chunk-AURFMVCD.js +899 -0
- package/dist/chunk-AX6GWE7V.js +47 -0
- package/dist/chunk-AY5EWJPF.js +385 -0
- package/dist/chunk-BAV2HJXS.js +194 -0
- package/dist/chunk-BBHRN366.js +89 -0
- package/dist/chunk-BBPSTTPA.js +1004 -0
- package/dist/chunk-BDATUDDJ.js +992 -0
- package/dist/chunk-BKE5PG5L.js +20414 -0
- package/dist/chunk-BLPHWMDK.js +797 -0
- package/dist/chunk-BSE4R6XD.js +322 -0
- package/dist/chunk-BXGMAU4A.js +396 -0
- package/dist/chunk-BXI4NXL3.js +507 -0
- package/dist/chunk-BZU2O43F.js +1125 -0
- package/dist/chunk-C3L6YQ7P.js +147 -0
- package/dist/chunk-C57KJOUQ.js +121 -0
- package/dist/chunk-CCV7BPSY.js +118 -0
- package/dist/chunk-CD7ISXA4.js +826 -0
- package/dist/chunk-CE5OZBYY.js +21 -0
- package/dist/chunk-CFBIG37O.js +154 -0
- package/dist/chunk-CJC6GZ46.js +457 -0
- package/dist/chunk-CKCDGXIV.js +408 -0
- package/dist/chunk-CKNX3TTP.js +10338 -0
- package/dist/chunk-CLKSETWE.js +10 -0
- package/dist/chunk-CP7H3HSP.js +1552 -0
- package/dist/chunk-CPLEWXNZ.js +66 -0
- package/dist/chunk-CQM3A35X.js +844 -0
- package/dist/chunk-CS6P76D3.js +103 -0
- package/dist/chunk-CTLUBNCW.js +622 -0
- package/dist/chunk-CUSRN6RJ.js +632 -0
- package/dist/chunk-D5EP5D2W.js +26 -0
- package/dist/chunk-D5RYINO7.js +412 -0
- package/dist/chunk-DBFS4HMH.js +751 -0
- package/dist/chunk-DC4ZYMXJ.js +115 -0
- package/dist/chunk-DCBZP442.js +9243 -0
- package/dist/chunk-DCYF7EKG.js +26 -0
- package/dist/chunk-DDMAFNUK.js +5351 -0
- package/dist/chunk-DF5SLDE4.js +966 -0
- package/dist/chunk-DJFW7SMX.js +348 -0
- package/dist/chunk-DQFLLBJW.js +121 -0
- package/dist/chunk-DSFM56OA.js +1203 -0
- package/dist/chunk-DTY4APYV.js +218 -0
- package/dist/chunk-DXH5JBRS.js +437 -0
- package/dist/chunk-E3NTPHEO.js +194 -0
- package/dist/chunk-E74LUIID.js +302 -0
- package/dist/chunk-EI57M5BI.js +194 -0
- package/dist/chunk-EJ4ZAWLV.js +305 -0
- package/dist/chunk-EJGCZGUF.js +1483 -0
- package/dist/chunk-EK2U3YEG.js +486 -0
- package/dist/chunk-ELMFYNV7.js +109 -0
- package/dist/chunk-ENRGKNR5.js +25 -0
- package/dist/chunk-ETYDXCK7.js +679 -0
- package/dist/chunk-EYRH3W74.js +239 -0
- package/dist/chunk-F23DIWNN.js +1024 -0
- package/dist/chunk-F5JO7HAS.js +94 -0
- package/dist/chunk-F7ER6ANO.js +174 -0
- package/dist/chunk-FATUVIIN.js +374 -0
- package/dist/chunk-FC23CTXV.js +322 -0
- package/dist/chunk-FD4ERYEG.js +22 -0
- package/dist/chunk-FH7WOJAE.js +79 -0
- package/dist/chunk-FHOWVDF5.js +1342 -0
- package/dist/chunk-FKAUPHMR.js +96 -0
- package/dist/chunk-FONNFJXA.js +137 -0
- package/dist/chunk-FQ7FSZRW.js +75 -0
- package/dist/chunk-FRG57FPM.js +240 -0
- package/dist/chunk-FUVP64ER.js +31 -0
- package/dist/chunk-FYOILAN5.js +6818 -0
- package/dist/chunk-G35UYQ6Z.js +69 -0
- package/dist/chunk-G36W2T2S.js +1143 -0
- package/dist/chunk-G3L2L5XZ.js +49 -0
- package/dist/chunk-G4THLFV3.js +148 -0
- package/dist/chunk-GAFJEYLK.js +29 -0
- package/dist/chunk-GFGYB2ZU.js +1689 -0
- package/dist/chunk-GG6KJYW6.js +85 -0
- package/dist/chunk-GHHFDU2U.js +55 -0
- package/dist/chunk-GHTZSQB7.js +57 -0
- package/dist/chunk-GK37ILCX.js +1231 -0
- package/dist/chunk-GKN3HMN4.js +2809 -0
- package/dist/chunk-GNVDBVJP.js +156 -0
- package/dist/chunk-GPEL3FBM.js +924 -0
- package/dist/chunk-GPSNGPZS.js +1604 -0
- package/dist/chunk-GSGD5E4C.js +30 -0
- package/dist/chunk-GSUQJJXQ.js +331 -0
- package/dist/chunk-GSV226X6.js +110 -0
- package/dist/chunk-H2AYQIHW.js +224 -0
- package/dist/chunk-H66DXFS5.js +1374 -0
- package/dist/chunk-H6G7QRMQ.js +35 -0
- package/dist/chunk-H7JAGHZT.js +59 -0
- package/dist/chunk-H7ZEFECA.js +316 -0
- package/dist/chunk-HAC6EHZZ.js +79 -0
- package/dist/chunk-HIO33P3G.js +19 -0
- package/dist/chunk-HMVQIPH3.js +547 -0
- package/dist/chunk-HOYBYAOA.js +257 -0
- package/dist/chunk-HX5P3CSP.js +1784 -0
- package/dist/chunk-I46EG2XQ.js +65 -0
- package/dist/chunk-I4NPDSCB.js +279 -0
- package/dist/chunk-I5WRT7ZR.js +514 -0
- package/dist/chunk-IC7I6YIJ.js +301 -0
- package/dist/chunk-IDCSOZVN.js +78 -0
- package/dist/chunk-IFCBYECK.js +112 -0
- package/dist/chunk-IFZCPEY2.js +66 -0
- package/dist/chunk-IKFP2KUR.js +48 -0
- package/dist/chunk-IRFBN336.js +878 -0
- package/dist/chunk-IUXNGKA6.js +152 -0
- package/dist/chunk-IV2RVAN7.js +1356 -0
- package/dist/chunk-IZYIQQ7X.js +53 -0
- package/dist/chunk-J3UUR7DE.js +210 -0
- package/dist/chunk-J54VUAY2.js +566 -0
- package/dist/chunk-J62KPGII.js +464 -0
- package/dist/chunk-J6P3FWWW.js +130 -0
- package/dist/chunk-JKBHJQMT.js +434 -0
- package/dist/chunk-JLS65NUQ.js +14 -0
- package/dist/chunk-JOSYEJKY.js +141 -0
- package/dist/chunk-JPKSXKNB.js +94 -0
- package/dist/chunk-JQNJB2BB.js +2440 -0
- package/dist/chunk-JRVNSWSQ.js +2626 -0
- package/dist/chunk-JSWMRQYG.js +28 -0
- package/dist/chunk-JZKNBBIB.js +152 -0
- package/dist/chunk-K54Y7MLK.js +160 -0
- package/dist/chunk-K65546RE.js +183 -0
- package/dist/chunk-KM3F7SYE.js +702 -0
- package/dist/chunk-KNDYMVWN.js +102 -0
- package/dist/chunk-KNT72VR6.js +132 -0
- package/dist/chunk-KP6YILMU.js +482 -0
- package/dist/chunk-KQEBSK3T.js +274 -0
- package/dist/chunk-KT6VHSPF.js +84 -0
- package/dist/chunk-KTMW65UX.js +14 -0
- package/dist/chunk-KZ5CJVBP.js +1813 -0
- package/dist/chunk-L4427KOE.js +26 -0
- package/dist/chunk-L6OM4A22.js +189 -0
- package/dist/chunk-L7E6XCRA.js +1042 -0
- package/dist/chunk-L7JZLXQL.js +173 -0
- package/dist/chunk-LAMKBTXX.js +40 -0
- package/dist/chunk-LDCF2MKN.js +132 -0
- package/dist/chunk-LEIIWPWQ.js +78 -0
- package/dist/chunk-LFTQVYBB.js +31 -0
- package/dist/chunk-LG3PDRTR.js +2872 -0
- package/dist/chunk-LGHII5ET.js +23 -0
- package/dist/chunk-LH5QY22X.js +1205 -0
- package/dist/chunk-LIVJ6266.js +438 -0
- package/dist/chunk-LKRAR3IH.js +276 -0
- package/dist/chunk-LO23NABI.js +3063 -0
- package/dist/chunk-LO3X5NLS.js +326 -0
- package/dist/chunk-LPITVM7M.js +339 -0
- package/dist/chunk-LR5IJIGV.js +810 -0
- package/dist/chunk-LRGMHROI.js +79 -0
- package/dist/chunk-LUVKFFWR.js +315 -0
- package/dist/chunk-LWCBNGH6.js +35 -0
- package/dist/chunk-LWTN3WRV.js +260 -0
- package/dist/chunk-M3HQYKQX.js +308 -0
- package/dist/chunk-M6GVSPEH.js +1016 -0
- package/dist/chunk-MF5HP6XV.js +221 -0
- package/dist/chunk-MHLCBZJB.js +328 -0
- package/dist/chunk-MN6PL4AN.js +120 -0
- package/dist/chunk-MOEY65Z6.js +5678 -0
- package/dist/chunk-MQ4WA34C.js +206 -0
- package/dist/chunk-MWHF5V7U.js +223 -0
- package/dist/chunk-MWHLBPNU.js +211 -0
- package/dist/chunk-MWK5UZQ3.js +1068 -0
- package/dist/chunk-MYLH2S4G.js +64 -0
- package/dist/chunk-MZ5WYKNA.js +28 -0
- package/dist/chunk-N4VTRA7K.js +131 -0
- package/dist/chunk-N5DX4JAK.js +12 -0
- package/dist/chunk-N65O4XTH.js +5011 -0
- package/dist/chunk-NEQUQHOX.js +223 -0
- package/dist/chunk-NGK6PEOG.js +25 -0
- package/dist/chunk-NJVD4PWE.js +1033 -0
- package/dist/chunk-NM6PMYY4.js +768 -0
- package/dist/chunk-NN4PJDHP.js +708 -0
- package/dist/chunk-NP2V3L7K.js +226 -0
- package/dist/chunk-NRLY536M.js +260 -0
- package/dist/chunk-NRNE225N.js +1270 -0
- package/dist/chunk-NS2K2GTP.js +605 -0
- package/dist/chunk-NS33V3IM.js +51 -0
- package/dist/chunk-NSHASMZZ.js +71 -0
- package/dist/chunk-NWOYOA6H.js +378 -0
- package/dist/chunk-NWRUSEXG.js +322 -0
- package/dist/chunk-NZGDAWIP.js +1905 -0
- package/dist/chunk-O47UOKU3.js +395 -0
- package/dist/chunk-O4G2W3ST.js +9831 -0
- package/dist/chunk-O6V4PNLO.js +63 -0
- package/dist/chunk-OA4GPILI.js +624 -0
- package/dist/chunk-OGMSYL6J.js +227 -0
- package/dist/chunk-OIS7J26S.js +319 -0
- package/dist/chunk-OMX5VL43.js +79 -0
- package/dist/chunk-ON3G73BU.js +264 -0
- package/dist/chunk-OPYFYTWQ.js +220 -0
- package/dist/chunk-OQ6K46CK.js +1734 -0
- package/dist/chunk-OYZYO7TV.js +47 -0
- package/dist/chunk-OZ4REHIN.js +4386 -0
- package/dist/chunk-P47VN5F4.js +282 -0
- package/dist/chunk-P5I4X7A7.js +353 -0
- package/dist/chunk-P6VQROCO.js +594 -0
- package/dist/chunk-P7CQGPLS.js +30 -0
- package/dist/chunk-PCAGC5MR.js +1763 -0
- package/dist/chunk-PFTQBXS6.js +5181 -0
- package/dist/chunk-PGSPX4SU.js +15 -0
- package/dist/chunk-PIKLF7BM.js +432 -0
- package/dist/chunk-PJWJ3SAV.js +22 -0
- package/dist/chunk-PKIFMV72.js +100 -0
- package/dist/chunk-PL37JDNA.js +189 -0
- package/dist/chunk-PTH5E5XO.js +195 -0
- package/dist/chunk-PW6AXLQC.js +4128 -0
- package/dist/chunk-PYITM4N2.js +79 -0
- package/dist/chunk-PZ5AY32C.js +10 -0
- package/dist/chunk-Q3RO7N35.js +45 -0
- package/dist/chunk-Q3WIC6GQ.js +2670 -0
- package/dist/chunk-Q5XIXSHX.js +271 -0
- package/dist/chunk-QGJDMEOV.js +34 -0
- package/dist/chunk-QNOB37UH.js +58 -0
- package/dist/chunk-QOCOVLUH.js +462 -0
- package/dist/chunk-QTCJ5CC5.js +172 -0
- package/dist/chunk-QVFV5IP2.js +232 -0
- package/dist/chunk-QVZMFDYG.js +29 -0
- package/dist/chunk-R35PEUKH.js +511 -0
- package/dist/chunk-R4UWBC35.js +200 -0
- package/dist/chunk-R6MLCREW.js +44 -0
- package/dist/chunk-R6W23LKN.js +254 -0
- package/dist/chunk-R7XDDX2A.js +4007 -0
- package/dist/chunk-RDFRCT64.js +168 -0
- package/dist/chunk-RE5VZDFQ.js +58 -0
- package/dist/chunk-RGROYC2G.js +638 -0
- package/dist/chunk-RGWHUI5E.js +68 -0
- package/dist/chunk-RHVG6UNL.js +205 -0
- package/dist/chunk-RI4EX2QE.js +18 -0
- package/dist/chunk-RJAAKDRX.js +17 -0
- package/dist/chunk-ROMHOSMQ.js +185 -0
- package/dist/chunk-RWREC3KJ.js +517 -0
- package/dist/chunk-RYNETRDJ.js +118 -0
- package/dist/chunk-RZY7RKM5.js +500 -0
- package/dist/chunk-S2MNWFAG.js +52 -0
- package/dist/chunk-S2VQCZO4.js +22 -0
- package/dist/chunk-S54MKU6V.js +117 -0
- package/dist/chunk-S5OIDFRM.js +302 -0
- package/dist/chunk-SCW4ZF6R.js +150 -0
- package/dist/chunk-SLS2N4PH.js +2213 -0
- package/dist/chunk-SNLBO4BF.js +247 -0
- package/dist/chunk-SP3LFU6B.js +60 -0
- package/dist/chunk-SQQTDDQA.js +537 -0
- package/dist/chunk-STV6LYYE.js +45 -0
- package/dist/chunk-SURZ2WFE.js +326 -0
- package/dist/chunk-SZ7DL357.js +1047 -0
- package/dist/chunk-T5E4NQCM.js +5742 -0
- package/dist/chunk-TAJPCXSB.js +13 -0
- package/dist/chunk-TAOOYK3P.js +358 -0
- package/dist/chunk-TDSEX5CF.js +24 -0
- package/dist/chunk-TFTGP7Z7.js +174 -0
- package/dist/chunk-TGON4N4O.js +197 -0
- package/dist/chunk-TGQZHDY2.js +2373 -0
- package/dist/chunk-TJJZ2OKV.js +6783 -0
- package/dist/chunk-TRSVUPCX.js +25 -0
- package/dist/chunk-TSXGRLPR.js +107 -0
- package/dist/chunk-U2S3YEX3.js +224 -0
- package/dist/chunk-U45RTRGY.js +818 -0
- package/dist/chunk-U6C3VVWS.js +13 -0
- package/dist/chunk-UDMS5AD3.js +307 -0
- package/dist/chunk-UGX7GI37.js +94 -0
- package/dist/chunk-UH3JJSHK.js +1 -0
- package/dist/chunk-UHRBTZYY.js +208 -0
- package/dist/chunk-UHT2KRG5.js +193 -0
- package/dist/chunk-UI2F6DJ5.js +118 -0
- package/dist/chunk-UMAKSB4Z.js +284 -0
- package/dist/chunk-UR2IBGIM.js +521 -0
- package/dist/chunk-UUH2RVKS.js +585 -0
- package/dist/chunk-UVJ4PJDK.js +4533 -0
- package/dist/chunk-V53UG2OT.js +9924 -0
- package/dist/chunk-V72RMBM4.js +48 -0
- package/dist/chunk-VBNCKCCI.js +16 -0
- package/dist/chunk-VNSYKC25.js +24 -0
- package/dist/chunk-VPHVFK4A.js +1984 -0
- package/dist/chunk-VTLNJQ44.js +133 -0
- package/dist/chunk-VTW7HP3R.js +100 -0
- package/dist/chunk-VVGEPBPS.js +218 -0
- package/dist/chunk-VVLLL7I4.js +166 -0
- package/dist/chunk-VX3UMWB7.js +483 -0
- package/dist/chunk-VXF4Q3FW.js +20 -0
- package/dist/chunk-W3JMT2YY.js +712 -0
- package/dist/chunk-WDUORIHF.js +877 -0
- package/dist/chunk-WDVTY4U6.js +148 -0
- package/dist/chunk-WIFZCHEG.js +12566 -0
- package/dist/chunk-WIRN3F75.js +736 -0
- package/dist/chunk-WMPU2UOV.js +82 -0
- package/dist/chunk-WTOKKE2V.js +784 -0
- package/dist/chunk-WX5IRLF6.js +740 -0
- package/dist/chunk-WZ6U3O7I.js +1581 -0
- package/dist/chunk-XAONGNST.js +57 -0
- package/dist/chunk-XB5YLCLB.js +13 -0
- package/dist/chunk-XEP5NQ5Y.js +688 -0
- package/dist/chunk-XGYF2QMZ.js +351 -0
- package/dist/chunk-XHEKQENB.js +255 -0
- package/dist/chunk-XNO4FM6X.js +1124 -0
- package/dist/chunk-XPHKYHO4.js +878 -0
- package/dist/chunk-XPK2I4NC.js +405 -0
- package/dist/chunk-XPU2XADL.js +2175 -0
- package/dist/chunk-XQD2B6BB.js +507 -0
- package/dist/chunk-XT2ZQVTC.js +558 -0
- package/dist/chunk-XTXJGGUV.js +351 -0
- package/dist/chunk-XUXVDPSZ.js +50 -0
- package/dist/chunk-XV7NZL4B.js +57 -0
- package/dist/chunk-XZE4XARH.js +563 -0
- package/dist/chunk-XZYR5EDO.js +152 -0
- package/dist/chunk-Y3J4JMTU.js +61 -0
- package/dist/chunk-Y55LZN5U.js +52 -0
- package/dist/chunk-Y5VN7DMP.js +112 -0
- package/dist/chunk-Y67VAHN4.js +459 -0
- package/dist/chunk-YAXSKEUH.js +3544 -0
- package/dist/chunk-YB3JD4E6.js +975 -0
- package/dist/chunk-YESZJFK6.js +220 -0
- package/dist/chunk-YGXKOBQQ.js +292 -0
- package/dist/chunk-YMX76IOS.js +31 -0
- package/dist/chunk-YOTXESEH.js +257 -0
- package/dist/chunk-YTYIEZQY.js +119 -0
- package/dist/chunk-YVORHQ2S.js +579 -0
- package/dist/chunk-Z2CUQDAR.js +3429 -0
- package/dist/chunk-Z2KYOFHS.js +7000 -0
- package/dist/chunk-Z6PC7QX6.js +161 -0
- package/dist/chunk-ZDTGECTN.js +235 -0
- package/dist/chunk-ZIPWI2LY.js +151 -0
- package/dist/chunk-ZSKKMTQJ.js +554 -0
- package/dist/chunk-ZTT5IVPY.js +1160 -0
- package/dist/chunk-ZX65UI5W.js +78 -0
- package/dist/chunk-ZYG7GGKO.js +218 -0
- package/dist/chunk-ZZZUL4OF.js +38 -0
- package/dist/cli-utils-IXL26KJT.js +40 -0
- package/dist/cli-validation-WLXWLUJL.js +111 -0
- package/dist/commit-utils-P7CRJF5N.js +202 -0
- package/dist/compete-config-resolver-R5ULXMYH.js +76 -0
- package/dist/compete-request-62JESVET.js +364 -0
- package/dist/compete-results-QEPG6FZX.js +208 -0
- package/dist/competition-outcome-tracker-R32OOZ43.js +38 -0
- package/dist/config-JCOKXOQT.js +166 -0
- package/dist/config-audit-EL3GHXS7.js +360 -0
- package/dist/config-explain-TNILDEVJ.js +12 -0
- package/dist/config-loader-VPFPFO4B.js +38 -0
- package/dist/config-manager-7T4E2BQO.js +67 -0
- package/dist/config-validator-KKOHOW7O.js +72 -0
- package/dist/cost-YC42XUF3.js +53 -0
- package/dist/coverage-orchestrator-CISNKJC2.js +772 -0
- package/dist/coverage-scanner-YVD62MLH.js +12 -0
- package/dist/createCompetitionRunner-LJG6ZQSO.js +46 -0
- package/dist/data-migration-state-VJK64DLT.js +31 -0
- package/dist/db-migrator-XSEIOGWY.js +34 -0
- package/dist/discovery-JGYGDD25.js +25 -0
- package/dist/doctor-GJOYE7AE.js +186 -0
- package/dist/domain-analyzer-AWF3RP6E.js +29 -0
- package/dist/ensure-initialized-744DIZEZ.js +52 -0
- package/dist/entry.js +940 -0
- package/dist/environment-YS45U5ZI.js +81 -0
- package/dist/error-parser-core-PPZ36A4S.js +50 -0
- package/dist/escalation-ladder-MKTCEGSA.js +130 -0
- package/dist/evaluation-context-KV4GZNN7.js +35 -0
- package/dist/evidence-plan-resolver-GBSYSAPX.js +85 -0
- package/dist/execution-data-writer-3ODTBDLH.js +53 -0
- package/dist/execution-policy-applier-ZHD3DCF3.js +31 -0
- package/dist/execution-preflight-Z4Y64V3I.js +209 -0
- package/dist/execution-roles-R3DPPMD3.js +66 -0
- package/dist/exit-code-error-Z4SW2DVK.js +14 -0
- package/dist/external-temp-cleanup-N2RZH4QP.js +311 -0
- package/dist/factory-XBN7DFIM.js +149 -0
- package/dist/file-utils-XIVR2ZMA.js +47 -0
- package/dist/flywheel-autoloop-executor-UILGOFFK.js +249 -0
- package/dist/flywheel-competition-executor-JOBEXTRB.js +259 -0
- package/dist/flywheel-executor-6JFLA6J5.js +369 -0
- package/dist/flywheel-git-isolation-UC5NIEVU.js +48 -0
- package/dist/flywheel-manifest-5UC4VBMA.js +108 -0
- package/dist/flywheel-model-defaults-7CVKP53V.js +27 -0
- package/dist/flywheel-preflight-XEY5SHM6.js +104 -0
- package/dist/flywheel-resume-7HELH7QS.js +23 -0
- package/dist/flywheel-safety-7U7DPOAP.js +28 -0
- package/dist/flywheel-scope-decision-ZHKF6ZIN.js +11 -0
- package/dist/get-telemetry-logger-DPVWWIYY.js +73 -0
- package/dist/git-worktree-IY6V6DUO.js +18 -0
- package/dist/github-pr-manager-4LXEKJTA.js +211 -0
- package/dist/guidance-profile-config-E7XJL2VP.js +117 -0
- package/dist/guidance-profile-renderer-QK2YMAAP.js +21 -0
- package/dist/index-query-4JEUKA44.js +31 -0
- package/dist/index.js +108661 -0
- package/dist/instructions-6BURLQJC.js +64 -0
- package/dist/invoke-provider-auth-GRUYP44M.js +223 -0
- package/dist/judge-scoring.json +80 -0
- package/dist/judge-test.js +555 -0
- package/dist/lab-mode-OTWVHN63.js +39 -0
- package/dist/lab-utils-BJRFLGK4.js +23 -0
- package/dist/linux-host-class-UY4KVLFD.js +29 -0
- package/dist/llm-judge-executor-F7Z3HO77.js +133 -0
- package/dist/local-executor-CEHWE2PL.js +223 -0
- package/dist/logger-33TR6EE5.js +72 -0
- package/dist/loop-spec-XTLQAVZ7.js +191 -0
- package/dist/manager-2HJG5CLT.js +25 -0
- package/dist/matrix-prompt-builder-6UDN5X3F.js +497 -0
- package/dist/matrix-result-parser-7W35EUOV.js +15 -0
- package/dist/metadata-HQ43NDEK.js +22 -0
- package/dist/model-invocations-db-QBO4Y7WZ.js +38 -0
- package/dist/monitor-XGYBG2DW.js +72 -0
- package/dist/next-PB5ZXZKB.js +90 -0
- package/dist/next-ZBDK725T.js +69 -0
- package/dist/optimization-config-resolver-O6WKR47U.js +75 -0
- package/dist/package-3YCWIQQ5.js +10 -0
- package/dist/parallel-orchestrator-NL7YJJU2.js +297 -0
- package/dist/parallel-worker.js +279 -0
- package/dist/parse-git-status-PIAF3OTP.js +10 -0
- package/dist/path-security-ETTH6TZL.js +39 -0
- package/dist/pattern-bank-UNJR5ADV.js +15 -0
- package/dist/plan-backlog-list-fast-VAGYBV3J.js +270 -0
- package/dist/plan-backlog-show-fast-SG2CZPW3.js +406 -0
- package/dist/plan-sprint-list-fast-LURAX47V.js +162 -0
- package/dist/plan-sprint-status-fast-FJAODCHD.js +208 -0
- package/dist/plan-task-status-fast-HNYBMQI4.js +349 -0
- package/dist/plan-to-flywheel-Z4U3GWPN.js +456 -0
- package/dist/planning-backlog-3CQ5QQBQ.js +319 -0
- package/dist/poetic-root-V5DNXEAE.js +17 -0
- package/dist/preflight-OPANWMME.js +12 -0
- package/dist/process-registry-PDZJPTAS.js +27 -0
- package/dist/process-scanner-C22SYXYD.js +22 -0
- package/dist/processes-KMQUD7HY.js +29 -0
- package/dist/processes-json-fast-IBDXZ6WW.js +135 -0
- package/dist/profile-SE5EVXAP.js +149 -0
- package/dist/prompts-WZZPGWBX.js +168 -0
- package/dist/protected-branches-RNTEX7ET.js +57 -0
- package/dist/provider-aware-resource-manager-QBTZJMNP.js +18 -0
- package/dist/provider-matrix-N5X57V3Y.js +154 -0
- package/dist/provider-matrix-renderer-MZDWKKID.js +139 -0
- package/dist/provider-output-forwarding-DERID3TP.js +30 -0
- package/dist/provider-registry-J5NRBJKI.js +128 -0
- package/dist/provider-temp-cleanup-KYGLF6YU.js +14 -0
- package/dist/prune-engine-Q6E2DXBN.js +451 -0
- package/dist/quality-gate-YRHMQAEI.js +70 -0
- package/dist/quickstart-FIRLKGJI.js +62 -0
- package/dist/readiness-VZTMSG6J.js +96 -0
- package/dist/registry-YODFY77A.js +153 -0
- package/dist/repair-helpers-TTV5FEF4.js +117 -0
- package/dist/repo-root-2IGD4H7X.js +22 -0
- package/dist/resolution-engine-D6TX6FRG.js +127 -0
- package/dist/resolve-provider-cli-O2P6XZBZ.js +35 -0
- package/dist/restore-telemetry-db-BQL6DTQF.js +360 -0
- package/dist/result-streamer-WEHW476R.js +19 -0
- package/dist/routing-events-DHPUZDDF.js +27 -0
- package/dist/routing-history-store-UWCEXAP3.js +46 -0
- package/dist/routing-planner-F5WQEUOM.js +160 -0
- package/dist/run-poetic-tui-J6LWRJUP.js +13517 -0
- package/dist/run-simulation.js +376 -0
- package/dist/runner-CS2TNGHA.js +1092 -0
- package/dist/runner-HHH7ZN2Z.js +1571 -0
- package/dist/safety-OCC4KJJR.js +64 -0
- package/dist/safety-stanza-7SV3HGG3.js +60 -0
- package/dist/sandbox-32QXJEMV.js +81 -0
- package/dist/sandbox-RSO7VP6V.js +94 -0
- package/dist/schema-extensions.sql +234 -0
- package/dist/security-2KI5XNDG.js +17 -0
- package/dist/setup-bb-plugin-QAQWZCV5.js +738 -0
- package/dist/setup-claude-code-P7BTTSPO.js +317 -0
- package/dist/setup-temp-cleanup-GASCWZ2I.js +20 -0
- package/dist/shared-utils-D6U6UREP.js +37 -0
- package/dist/simple-artifact-goal-OTXNGZY6.js +25 -0
- package/dist/sprint-UIXPYOXQ.js +338 -0
- package/dist/sprint-bridge-4BHMSC3M.js +68 -0
- package/dist/sprint-execution-service-2B7WHL5L.js +311 -0
- package/dist/sprint-manager-IDQUDNQI.js +91 -0
- package/dist/sqlite-wrapper-UDWCTNLJ.js +17 -0
- package/dist/stale-cleanup-orchestrator-XWXV7KCZ.js +62 -0
- package/dist/storage-access-F6ALDN4S.js +22 -0
- package/dist/synthesis-XD6EDVHF.js +185 -0
- package/dist/task-classifier-LNLXSHOM.js +494 -0
- package/dist/task-list-fast-PTMA4LUC.js +147 -0
- package/dist/task-manager-XAT7GOWB.js +93 -0
- package/dist/task-splitter-U7DJ7W6A.js +79 -0
- package/dist/task-type-detector-OLVOMXZO.js +21 -0
- package/dist/task-type-resolver-KKNQYSB4.js +42 -0
- package/dist/telemetry-5HWBBXLX.js +131 -0
- package/dist/telemetry-health-tracker-DMSSGBZ2.js +11 -0
- package/dist/telemetry-path-resolver-7ICSG276.js +28 -0
- package/dist/telemetry-reliability-XUOZNZZ6.js +125 -0
- package/dist/token-estimator-MEQUL3EJ.js +37 -0
- package/dist/transports-KNSSV2V4.js +255 -0
- package/dist/unified-cost-tracker-4TFRBVPR.js +35 -0
- package/dist/unified-state-cleanup-LJPF2BOW.js +276 -0
- package/dist/universal-cost-calculator-BAJV35GA.js +42 -0
- package/dist/user-agents-GHUGCSKN.js +22 -0
- package/dist/variant-delivery-state-KLRNG6XA.js +33 -0
- package/dist/variant-state-cleanup-MZGGLQAJ.js +280 -0
- package/dist/variant-success-PJXWE3ZV.js +12 -0
- package/dist/variant-worker-KUWKBLAH.js +4196 -0
- package/dist/variant-worker.js +24 -0
- package/dist/variants-JE2FSAQS.js +233 -0
- package/dist/verification-toolchains-V24UHW6Q.js +28 -0
- package/dist/verify-commands-H3DTCSGI.js +37 -0
- package/dist/warning-EGQGUUIO.js +12 -0
- package/dist/work-edge-RWEDWJZF.js +49 -0
- package/dist/work-item-writer-WHAVZXAY.js +19 -0
- package/dist/worker-7SA2VS2Y.js +1435 -0
- package/dist/worker.js +19 -0
- package/dist/worktree-metrics-3DFUYVYE.js +26 -0
- package/dist/writeback-VZKHYHSN.js +44 -0
- package/docs/CLI_REFERENCE.md +7042 -0
- package/docs/PROVIDER_SETUP.md +1570 -0
- package/docs/README.md +96 -0
- package/docs/TROUBLESHOOTING.md +2232 -0
- package/docs/getting-started/QUICK_START.md +294 -0
- package/docs/getting-started/README.md +188 -0
- package/docs/getting-started/SETUP.md +52 -0
- package/docs/reference/AGENT_CONTEXT.md +38 -0
- package/docs/reference/PROVIDER_RELEASE_TIERS.md +34 -0
- package/docs/reference/README.md +381 -0
- package/docs/reference/SECURITY.md +262 -0
- package/integrations/bb-plugin-poetic/README.md +362 -0
- package/integrations/bb-plugin-poetic/app.css +341 -0
- package/integrations/bb-plugin-poetic/app.tsx +5059 -0
- package/integrations/bb-plugin-poetic/package.json +45 -0
- package/integrations/bb-plugin-poetic/server.ts +444 -0
- package/integrations/bb-plugin-poetic/src/adapter.ts +3312 -0
- package/integrations/bb-plugin-poetic/src/backlog-authoring-model.ts +150 -0
- package/integrations/bb-plugin-poetic/src/backlog-authoring-schema.ts +355 -0
- package/integrations/bb-plugin-poetic/src/backlog-authoring-service.ts +419 -0
- package/integrations/bb-plugin-poetic/src/backlog-authoring-view.ts +1026 -0
- package/integrations/bb-plugin-poetic/src/competition-defaults-schema.ts +122 -0
- package/integrations/bb-plugin-poetic/src/competition-defaults-service.ts +105 -0
- package/integrations/bb-plugin-poetic/src/competition-defaults-view.ts +138 -0
- package/integrations/bb-plugin-poetic/src/contract.ts +615 -0
- package/integrations/bb-plugin-poetic/src/finalize-model.ts +205 -0
- package/integrations/bb-plugin-poetic/src/finalize-schema.ts +158 -0
- package/integrations/bb-plugin-poetic/src/finalize-service.ts +382 -0
- package/integrations/bb-plugin-poetic/src/finalize-view.ts +159 -0
- package/integrations/bb-plugin-poetic/src/judge-operations-readback.ts +303 -0
- package/integrations/bb-plugin-poetic/src/judge-operations-schema.ts +33 -0
- package/integrations/bb-plugin-poetic/src/judge-operations-view.ts +459 -0
- package/integrations/bb-plugin-poetic/src/model.ts +1302 -0
- package/integrations/bb-plugin-poetic/src/monitor-service.ts +233 -0
- package/integrations/bb-plugin-poetic/src/panel-read-ux.ts +97 -0
- package/integrations/bb-plugin-poetic/src/patch-preview-schema.ts +166 -0
- package/integrations/bb-plugin-poetic/src/patch-preview-service.ts +480 -0
- package/integrations/bb-plugin-poetic/src/patch-preview-view.ts +109 -0
- package/integrations/bb-plugin-poetic/src/planning-readback.ts +204 -0
- package/integrations/bb-plugin-poetic/src/planning-service.ts +594 -0
- package/integrations/bb-plugin-poetic/src/planning-workspace-schema.ts +95 -0
- package/integrations/bb-plugin-poetic/src/planning-workspace.ts +323 -0
- package/integrations/bb-plugin-poetic/src/poll-handoff.ts +136 -0
- package/integrations/bb-plugin-poetic/src/project-target-server.ts +21 -0
- package/integrations/bb-plugin-poetic/src/project-target.ts +45 -0
- package/integrations/bb-plugin-poetic/src/reference-index.ts +192 -0
- package/integrations/bb-plugin-poetic/src/repository-schema.ts +30 -0
- package/integrations/bb-plugin-poetic/src/result-explorer-view.ts +597 -0
- package/integrations/bb-plugin-poetic/src/result-readback-model.ts +163 -0
- package/integrations/bb-plugin-poetic/src/result-readback-schema.ts +319 -0
- package/integrations/bb-plugin-poetic/src/result-readback-service.ts +333 -0
- package/integrations/bb-plugin-poetic/src/run-page-view.ts +177 -0
- package/integrations/bb-plugin-poetic/src/setup-config-schema.ts +291 -0
- package/integrations/bb-plugin-poetic/src/setup-config-service.ts +590 -0
- package/integrations/bb-plugin-poetic/src/setup-config-view.ts +413 -0
- package/integrations/bb-plugin-poetic/src/sprint-close-model.ts +150 -0
- package/integrations/bb-plugin-poetic/src/sprint-close-schema.ts +136 -0
- package/integrations/bb-plugin-poetic/src/sprint-close-service.ts +341 -0
- package/integrations/bb-plugin-poetic/src/sprint-close-view.ts +116 -0
- package/integrations/bb-plugin-poetic/src/sprint-composition-model.ts +714 -0
- package/integrations/bb-plugin-poetic/src/sprint-composition-readback.ts +231 -0
- package/integrations/bb-plugin-poetic/src/sprint-composition-schema.ts +601 -0
- package/integrations/bb-plugin-poetic/src/sprint-composition-service.ts +775 -0
- package/integrations/bb-plugin-poetic/src/sprint-composition-view.ts +1221 -0
- package/integrations/bb-plugin-poetic/src/task-authoring-model.ts +567 -0
- package/integrations/bb-plugin-poetic/src/task-authoring-schema.ts +635 -0
- package/integrations/bb-plugin-poetic/src/task-authoring-service.ts +842 -0
- package/integrations/bb-plugin-poetic/src/task-authoring-view.ts +1227 -0
- package/integrations/bb-plugin-poetic/src/task-detail-readback.ts +56 -0
- package/integrations/bb-plugin-poetic/src/task-detail-schema.ts +144 -0
- package/integrations/bb-plugin-poetic/src/task-navigation.ts +446 -0
- package/integrations/bb-plugin-poetic/src/workbench-route.ts +74 -0
- package/integrations/bb-plugin-poetic/tests/host-contract.test.ts +773 -0
- package/integrations/bb-plugin-poetic/tsconfig.json +18 -0
- package/integrations/bb-plugin-poetic/types/PROVENANCE.json +52 -0
- package/integrations/bb-plugin-poetic/types/bb-plugin-sdk-app.d.ts +1444 -0
- package/integrations/bb-plugin-poetic/types/bb-plugin-sdk.d.ts +13030 -0
- package/integrations/bb-plugin-poetic/vitest.host.config.ts +71 -0
- package/npm-shrinkwrap.json +4950 -0
- package/package.json +331 -0
- package/schemas/README.md +80 -0
- package/schemas/config-v1.schema.json +136 -0
- package/schemas/execution-config.schema.json +47 -0
- package/schemas/judge-scoring.schema.json +370 -0
- package/schemas/poetic.config.schema.json +2214 -0
- package/schemas/provider-config.schema.json +203 -0
- package/schemas/telemetry-config.schema.json +79 -0
- package/schemas/user-preferences.schema.json +141 -0
- package/scripts/assert-node-runtime.mjs +140 -0
- package/scripts/preflight-native.mjs +49 -0
- package/scripts/preinstall-node-check.mjs +78 -0
- package/scripts/setup-git-hooks.mjs +24 -0
- package/scripts/sync.sh +2722 -0
- package/scripts/write-node-launcher.sh +108 -0
- package/src/resources/gemini/slash-packs/default/plan.toml +15 -0
- package/src/resources/gemini/slash-packs/default/summary.toml +16 -0
- package/src/resources/gemini/slash-packs/default/tests.toml +16 -0
- package/templates/.poetic/README.md +37 -0
- package/templates/.poetic/agents/README.md +296 -0
- package/templates/.poetic/agents/api-documenter.md +147 -0
- package/templates/.poetic/agents/backend-architect.md +31 -0
- package/templates/.poetic/agents/code-reviewer.md +157 -0
- package/templates/.poetic/agents/data-scientist.md +179 -0
- package/templates/.poetic/agents/database-optimizer.md +145 -0
- package/templates/.poetic/agents/debugger.md +31 -0
- package/templates/.poetic/agents/deployment-engineer.md +164 -0
- package/templates/.poetic/agents/devops-troubleshooter.md +139 -0
- package/templates/.poetic/agents/frontend-developer.md +150 -0
- package/templates/.poetic/agents/javascript-pro.md +36 -0
- package/templates/.poetic/agents/performance-engineer.md +151 -0
- package/templates/.poetic/agents/python-pro.md +137 -0
- package/templates/.poetic/agents/test-automator.md +147 -0
- package/templates/.poetic/agents/typescript-pro.md +34 -0
- package/templates/.poetic/config/poetic.config.jsonc +69 -0
- package/templates/.poetic/config/project-context.template.json +6 -0
- package/templates/.poetic/config/task-type-aliases.presets/kanban.yaml +14 -0
- package/templates/.poetic/config/task-type-aliases.presets/scrum.yaml +17 -0
- package/templates/.poetic/config/task-type-aliases.presets/xp.yaml +12 -0
- package/templates/.poetic/config/task-type-aliases.yaml +28 -0
- package/templates/.poetic/gitignore.template +55 -0
- package/templates/.poetic/task-types/analysis.yaml +40 -0
- package/templates/.poetic/task-types/architecture.yaml +38 -0
- package/templates/.poetic/task-types/doc.yaml +35 -0
- package/templates/.poetic/task-types/feature.yaml +23 -0
- package/templates/.poetic/task-types/general.yaml +6 -0
- package/templates/.poetic/task-types/security.yaml +39 -0
- package/templates/AGENTS.template.md +99 -0
- package/templates/CLAUDE.template.md +1 -0
- package/templates/GEMINI.template.md +1 -0
- package/templates/builtin-workflows/code-review.yaml +73 -0
- package/templates/builtin-workflows/compete-streak.yaml +78 -0
- package/templates/builtin-workflows/hello-verify.yaml +10 -0
- package/templates/builtin-workflows/judge-regression.yaml +114 -0
- package/templates/builtin-workflows/skills/code-review/SKILL.md +60 -0
- package/templates/builtin-workflows/skills/hello-verify/SKILL.md +6 -0
- package/templates/guard-kit/GUARD_SETUP.md.template +255 -0
- package/templates/guard-kit/check.mjs.template +777 -0
- package/templates/guard-kit/config.json.template +6 -0
- package/templates/guard-kit/poetic-guard.yml.template +189 -0
- package/templates/profiles/README.md +56 -0
- package/templates/profiles/frontier-claude.json +27 -0
- 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
|