@iowarp/clio-coder 0.4.0 → 0.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (751) hide show
  1. package/CHANGELOG.md +131 -0
  2. package/CONTRIBUTING.md +59 -36
  3. package/README.md +407 -375
  4. package/SECURITY.md +2 -1
  5. package/dist/{acp-G5WJBNCT.js → acp-TMDQZDIG.js} +14 -14
  6. package/dist/{agents-FMV2Q5G4.js → agents-5N5NG3XG.js} +45 -34
  7. package/dist/assets/codewiki.json +1 -1
  8. package/dist/{auth-3IDSJEIK.js → auth-Z5CCBXKQ.js} +22 -21
  9. package/dist/{builtins-XCZWXSC7.js → builtins-K6TNDT24.js} +6 -6
  10. package/dist/{chunk-GR5G2PVF.js → chunk-2HFQNRV3.js} +15 -10
  11. package/dist/{chunk-PQEFIJ36.js → chunk-2LEAKD4C.js} +1 -2
  12. package/dist/{chunk-HJJTYUHX.js → chunk-2NHR3NAY.js} +168 -1406
  13. package/dist/chunk-2X4RYJTJ.js +39 -0
  14. package/dist/{chunk-UXMFQ54G.js → chunk-2Z2IKEXI.js} +39 -43
  15. package/dist/{chunk-SST6Z5JA.js → chunk-336NSSKI.js} +1 -1
  16. package/dist/chunk-34BHNEE3.js +1846 -0
  17. package/dist/{chunk-YJX4SHTD.js → chunk-35MSIRKH.js} +9 -4
  18. package/dist/chunk-3EBYEESD.js +314 -0
  19. package/dist/{chunk-CTJ4RNAA.js → chunk-3F7VUY77.js} +2 -2
  20. package/dist/chunk-3KIPBMUA.js +308 -0
  21. package/dist/chunk-3M6DQK6S.js +362 -0
  22. package/dist/{chunk-BPKCPIL7.js → chunk-462T4EGZ.js} +3 -3
  23. package/dist/{chunk-QLFS5GO2.js → chunk-4JDLP6ZS.js} +44 -37
  24. package/dist/{chunk-LDQ2ZF2M.js → chunk-4O6MANBS.js} +6 -6
  25. package/dist/{chunk-O6TL7WWY.js → chunk-54ODD65L.js} +6 -6
  26. package/dist/{chunk-JDG2WCRO.js → chunk-5KW52TEP.js} +5 -5
  27. package/dist/{chunk-NHLBIGRH.js → chunk-5PFYMY2V.js} +41 -18
  28. package/dist/{chunk-P3FOHJT4.js → chunk-72GZI5EV.js} +2 -2
  29. package/dist/chunk-77QIVUZB.js +1334 -0
  30. package/dist/{chunk-HWHKMHUA.js → chunk-7BHIY2MW.js} +9 -15
  31. package/dist/{chunk-FWDFM5ZU.js → chunk-AK5XEFVZ.js} +3 -3
  32. package/dist/{chunk-VAZSBTKF.js → chunk-AZ4WMN4W.js} +2 -2
  33. package/dist/{chunk-B7OBL7PK.js → chunk-B74PXLU7.js} +21 -11
  34. package/dist/{chunk-CY6FY24N.js → chunk-B7HM5Z7T.js} +15 -15
  35. package/dist/{chunk-ULC6OTWO.js → chunk-BO7Y52RY.js} +88 -27
  36. package/dist/chunk-BTK3SSSK.js +67 -0
  37. package/dist/{chunk-M6L6IDJG.js → chunk-BWH6N36D.js} +1 -1
  38. package/dist/{chunk-DQITNCXG.js → chunk-BYMNWQ7O.js} +149 -159
  39. package/dist/{chunk-HI63TFOG.js → chunk-CDNVLKUX.js} +3 -3
  40. package/dist/{chunk-Z4TXYIEG.js → chunk-CRFOIAX3.js} +10 -10
  41. package/dist/{chunk-UM7N4G5A.js → chunk-CWVRRIEI.js} +2 -2
  42. package/dist/{chunk-3BT2XMV4.js → chunk-CYZW7JHJ.js} +53 -60
  43. package/dist/{chunk-BKFM6EJV.js → chunk-D4CJV46V.js} +2 -2
  44. package/dist/chunk-D7E7WCDF.js +27 -0
  45. package/dist/{chunk-X3YGUTOB.js → chunk-DYHAXKHD.js} +90 -62
  46. package/dist/{chunk-QBJA7R7N.js → chunk-DZAW46HP.js} +3 -3
  47. package/dist/{chunk-MLKNTWH2.js → chunk-DZEK6CJN.js} +22 -22
  48. package/dist/{chunk-K5C3NCBD.js → chunk-E7GT7O5N.js} +5 -5
  49. package/dist/{chunk-FQ4SKYE4.js → chunk-EBY63B7G.js} +2 -5
  50. package/dist/chunk-F2I26BDK.js +66 -0
  51. package/dist/{chunk-HLW2MRKE.js → chunk-F4EKGO4N.js} +3 -1
  52. package/dist/{chunk-RAPCMZL4.js → chunk-FSP7CMNU.js} +9 -1
  53. package/dist/{chunk-32KWKNSF.js → chunk-FVDGR2ZL.js} +4 -4
  54. package/dist/{chunk-TZSKNMZG.js → chunk-GTUD2WMY.js} +2 -1
  55. package/dist/{chunk-SJ5ZKQ4S.js → chunk-HIICAHCJ.js} +2 -2
  56. package/dist/chunk-HJWWJ6IL.js +184 -0
  57. package/dist/{chunk-WZR7K7ZX.js → chunk-HKMD33FO.js} +32 -83
  58. package/dist/chunk-HLAFFSEK.js +360 -0
  59. package/dist/{chunk-VO67MWHC.js → chunk-HRQMFLJP.js} +3 -3
  60. package/dist/{chunk-KFZI4NIL.js → chunk-I64IFBLB.js} +152 -31
  61. package/dist/{chunk-BKFJHQCA.js → chunk-I66EAJFY.js} +2 -2
  62. package/dist/{chunk-BUMFYQFY.js → chunk-I66ZTYNP.js} +543 -267
  63. package/dist/{chunk-2OQE55CK.js → chunk-I7XBWTYH.js} +2 -2
  64. package/dist/{chunk-GKF55TAZ.js → chunk-IDNA72AH.js} +104 -3
  65. package/dist/{chunk-GCSMB2KY.js → chunk-IKOZFYBN.js} +1 -1
  66. package/dist/{chunk-J4W7KFM7.js → chunk-IKSLQ4XV.js} +5439 -3475
  67. package/dist/{chunk-6DB53AJS.js → chunk-IMXMHHMQ.js} +171 -30
  68. package/dist/{chunk-AB44T6BB.js → chunk-JBCS7CRR.js} +8 -7
  69. package/dist/{chunk-BBVJUZHB.js → chunk-JIEGK6UF.js} +5 -173
  70. package/dist/{chunk-SP2RXXYO.js → chunk-JWJGP5DQ.js} +10 -10
  71. package/dist/{chunk-HZHHCK24.js → chunk-KKOJXO6R.js} +527 -325
  72. package/dist/chunk-KPXDY6QF.js +47 -0
  73. package/dist/{chunk-LQ3DZAMX.js → chunk-LJID3DYZ.js} +8 -2
  74. package/dist/{chunk-7MCTRUCE.js → chunk-M2DAX4F6.js} +2 -2
  75. package/dist/{chunk-VEO4AP2K.js → chunk-M2WXEHER.js} +4 -3
  76. package/dist/{chunk-YPI3QQCF.js → chunk-MCEPRMZW.js} +2 -4
  77. package/dist/{chunk-YDFRH54B.js → chunk-MCMZMDAC.js} +4 -4
  78. package/dist/{chunk-J5Q24KAG.js → chunk-MNJGS2IN.js} +5 -6
  79. package/dist/{chunk-76ONBSIA.js → chunk-MQXIVJ35.js} +14 -5
  80. package/dist/chunk-NDDGJUXD.js +81 -0
  81. package/dist/{chunk-TVHHYFHE.js → chunk-NEDJ26B5.js} +2 -2
  82. package/dist/chunk-NMJXSHBJ.js +283 -0
  83. package/dist/{chunk-VYMXRQI6.js → chunk-O3YUNJZ2.js} +88 -100
  84. package/dist/{chunk-VO2LKSTM.js → chunk-O42A54GG.js} +2 -2
  85. package/dist/{chunk-Z2RR6MAK.js → chunk-P75RZCJW.js} +28 -6
  86. package/dist/{chunk-NHCZP4K7.js → chunk-PBP4B7XR.js} +2 -2
  87. package/dist/{chunk-DYJP44XW.js → chunk-PGF63K6I.js} +2 -2
  88. package/dist/chunk-PJX3WQUQ.js +42 -0
  89. package/dist/{chunk-ZGVHUX3M.js → chunk-PMZVFWSR.js} +2 -2
  90. package/dist/{chunk-2JDWVJND.js → chunk-Q4XWMHX6.js} +5 -7
  91. package/dist/{chunk-W5VSYASO.js → chunk-QQLGQY2A.js} +46 -87
  92. package/dist/{chunk-KMVISBZR.js → chunk-RKSR6VSF.js} +1 -1
  93. package/dist/{chunk-C2LTL2W6.js → chunk-RLYRBIYQ.js} +463 -180
  94. package/dist/{chunk-4ZG3XFUR.js → chunk-S66XZJOF.js} +14 -23
  95. package/dist/{chunk-I5VEOC6I.js → chunk-SSEYRH53.js} +13 -14
  96. package/dist/chunk-SZAA6XDG.js +30 -0
  97. package/dist/{chunk-CODPRO7Q.js → chunk-TPEQIQIE.js} +7 -7
  98. package/dist/{chunk-QLL7ILRG.js → chunk-UBRFI4HS.js} +1151 -614
  99. package/dist/{chunk-O4XIVISU.js → chunk-UH347SHR.js} +227 -47
  100. package/dist/{chunk-OQBA45DZ.js → chunk-UH632ZYL.js} +2 -2
  101. package/dist/chunk-UXCU4E3T.js +303 -0
  102. package/dist/{chunk-CMZWFGD2.js → chunk-VAVR4IJY.js} +19 -15
  103. package/dist/{chunk-IQ7KR472.js → chunk-VIA6RFQZ.js} +8 -13
  104. package/dist/{chunk-V5DHCITQ.js → chunk-VKPAQYEB.js} +49 -19
  105. package/dist/{chunk-5LXZXPKX.js → chunk-VN3SHNBN.js} +2 -2
  106. package/dist/{chunk-UOSL25KY.js → chunk-VXMFAE2W.js} +1 -1
  107. package/dist/{chunk-3XML7CDN.js → chunk-W4YEMFBX.js} +3 -3
  108. package/dist/{chunk-U77AMWDL.js → chunk-W6NIE6OW.js} +44 -23
  109. package/dist/{chunk-BBVYXMFO.js → chunk-WNP7O5WZ.js} +2 -2
  110. package/dist/{chunk-QREDIESB.js → chunk-X7IARSHT.js} +15 -9
  111. package/dist/{chunk-3URVFKWK.js → chunk-XE3PCIXH.js} +5 -5
  112. package/dist/{chunk-FEFIFZTL.js → chunk-XGDPUNND.js} +2 -2
  113. package/dist/{chunk-F4CKPOEQ.js → chunk-XOXV5GKE.js} +119 -38
  114. package/dist/chunk-XQRY4DTA.js +657 -0
  115. package/dist/{chunk-NYS75XW5.js → chunk-YAKGTXEV.js} +5 -3
  116. package/dist/{chunk-NQQH3YT7.js → chunk-YJISEZKC.js} +3 -3
  117. package/dist/{chunk-X75E3D2N.js → chunk-ZGNYYXQ6.js} +18 -16
  118. package/dist/{chunk-LY4S7GJC.js → chunk-ZNT2M6TG.js} +20 -18
  119. package/dist/{chunk-HKIYEGME.js → chunk-ZTJUVLTU.js} +2 -2
  120. package/dist/{chunk-IBEBSCYA.js → chunk-ZW4HH5JJ.js} +43 -34
  121. package/dist/{chunk-2ANTL7MR.js → chunk-ZW55JB7N.js} +2 -2
  122. package/dist/cli/index.js +38 -37
  123. package/dist/{clio-2JXHBBY5.js → clio-7VB377CC.js} +12 -13
  124. package/dist/{code-nav-3YYRMYNF.js → code-nav-YVLCYA7V.js} +86 -18
  125. package/dist/codewiki/build-worker.js +1 -1
  126. package/dist/{compile-cache-7FPE6PS3.js → compile-cache-OQAVB7Y5.js} +2 -4
  127. package/dist/{components-RYZV4JGP.js → components-UBWCQSRW.js} +4 -4
  128. package/dist/{config-QZPCMYSO.js → config-4HVOS65E.js} +112 -63
  129. package/dist/{configure-TEGEBYCA.js → configure-PIWO7B24.js} +25 -22
  130. package/dist/{context-E6H5RNMC.js → context-IYEHL3WQ.js} +53 -47
  131. package/dist/{context-GSXUE4CT.js → context-KQYIWPWT.js} +68 -42
  132. package/dist/{context-AV7OEZ4D.js → context-N6ZE3LGJ.js} +11 -11
  133. package/dist/{context-clear-SHIBYK6T.js → context-clear-G4OGZJDS.js} +53 -47
  134. package/dist/{context-working-set-5ZGKPGZQ.js → context-working-set-BWLF6LJP.js} +12 -11
  135. package/dist/{dispatch-runner-EFMJT4LD.js → dispatch-runner-2QQAITS3.js} +67 -58
  136. package/dist/{docs-23KQS3XK.js → docs-PD3EXDKU.js} +20 -25
  137. package/dist/doctor-LHBD36VU.js +773 -0
  138. package/dist/{eval-TFBYQH4H.js → eval-C45FYRJ6.js} +68 -49
  139. package/dist/{eval-inventory-SXH7PDKX.js → eval-inventory-6DEJPLBF.js} +7 -8
  140. package/dist/{evidence-ERGESKGN.js → evidence-6SHONYAF.js} +50 -44
  141. package/dist/{evolve-VDXTSYCJ.js → evolve-KRKMV72X.js} +49 -43
  142. package/dist/{extensions-7BGBHN57.js → extensions-KPZ2UHBB.js} +8 -6
  143. package/dist/{fleet-2RRVDF2V.js → fleet-IVTCKDHT.js} +93 -79
  144. package/dist/{fleet-commands-VJ726XIA.js → fleet-commands-EDWL3IT7.js} +10 -9
  145. package/dist/{fleet-decisions-EPAPM3XJ.js → fleet-decisions-YP3YEFGK.js} +6 -6
  146. package/dist/{fleet-graph-JF5QOATM.js → fleet-graph-ZFWKHY2M.js} +19 -15
  147. package/dist/{fleet-inspect-VLY4S7QM.js → fleet-inspect-FVUNCBML.js} +50 -45
  148. package/dist/{fleet-preflight-AIZUEJOY.js → fleet-preflight-UN5XED4R.js} +5 -9
  149. package/dist/{fleet-validate-AJRPDMDV.js → fleet-validate-XOWC4HSX.js} +22 -17
  150. package/dist/{fleet-verify-JFEL2L3H.js → fleet-verify-UN3SODEL.js} +48 -43
  151. package/dist/fleet-view-TWHJKCN6.js +96 -0
  152. package/dist/{init-DN2WWLFE.js → init-T2QORQ3Y.js} +72 -66
  153. package/dist/{install-XGLBQY5E.js → install-NKNG7KD4.js} +2 -2
  154. package/dist/{interop-OZBKXAYL.js → interop-IN5I2A66.js} +13 -11
  155. package/dist/{library-YWZG7IMW.js → library-LSCATDLZ.js} +23 -18
  156. package/dist/{memory-I4C4HMLW.js → memory-HYOKAGGJ.js} +51 -45
  157. package/dist/{models-CEYXJBO6.js → models-2GPMFYCM.js} +42 -33
  158. package/dist/{monitor-NZ6GCI3P.js → monitor-E4ASVUJH.js} +56 -50
  159. package/dist/{orchestrator-GCGQ4N5I.js → orchestrator-DDMPR3PY.js} +2676 -1507
  160. package/dist/{panes-KY6W3V2E.js → panes-E3RUXOW5.js} +5 -5
  161. package/dist/panes-IXKLOKA2.js +75 -0
  162. package/dist/{paths-II4K7DNR.js → paths-L7LGY6RN.js} +4 -4
  163. package/dist/{reset-DQ6FGCSH.js → reset-OAQP3W4O.js} +7 -8
  164. package/dist/{resources-BB3MVJMD.js → resources-OTRSN34L.js} +23 -17
  165. package/dist/{run-H2GQDUER.js → run-5DEYH5QK.js} +95 -84
  166. package/dist/{share-GTJN6A5O.js → share-IHWTLO3M.js} +26 -19
  167. package/dist/{skills-L55TEW6R.js → skills-IYMXMKW4.js} +25 -20
  168. package/dist/{skills-eval-XVXPH2JI.js → skills-eval-DROHSJAR.js} +63 -65
  169. package/dist/{skills-inventory-S4MXPJFV.js → skills-inventory-D7X4L4ZX.js} +21 -16
  170. package/dist/{slash-commands-ZSGASKJC.js → slash-commands-QBM7UZ3B.js} +38 -33
  171. package/dist/{steer-RZGSCY4R.js → steer-Z5DO23FJ.js} +3 -3
  172. package/dist/{support-PKEUNNQL.js → support-U7QOWY26.js} +6 -6
  173. package/dist/{targets-NCPZ644J.js → targets-P2FUC4IL.js} +64 -61
  174. package/dist/{terminal-lease-44SV3YCN.js → terminal-lease-YREJ3JX2.js} +15 -10
  175. package/dist/{tools-DAF3DI3C.js → tools-5B7RO6MV.js} +10 -8
  176. package/dist/{trace-FYVW2MQA.js → trace-YMGMUM6A.js} +101 -8
  177. package/dist/{tui-primitives-2AKXQNZK.js → tui-primitives-K5PASC3O.js} +8 -4
  178. package/dist/{uninstall-DW2PNOIC.js → uninstall-N34PCTGJ.js} +4 -6
  179. package/dist/{upgrade-3XPP6OQL.js → upgrade-PXK3S2YM.js} +36 -61
  180. package/dist/{usage-3NLHGTU2.js → usage-ME5MPXGX.js} +58 -53
  181. package/dist/{verifiers-SSQONKRT.js → verifiers-BVZ7IWOO.js} +10 -9
  182. package/dist/{verify-3U6J7FZI.js → verify-5K7ZKQFC.js} +9 -8
  183. package/dist/{web-fetch-S7RR6GZ7.js → web-fetch-MPARV2K7.js} +2 -3
  184. package/dist/{wiki-generate-CEHYGPGQ.js → wiki-generate-F5W5QTYY.js} +74 -70
  185. package/dist/{with-panes-MKB46MPQ.js → with-panes-BYOJCLAM.js} +78 -246
  186. package/dist/worker/entry.js +83 -63
  187. package/docs/README.md +176 -81
  188. package/docs/{acp.md → architecture/acp.md} +36 -20
  189. package/docs/{alcf-provider.md → architecture/alcf-provider.md} +8 -5
  190. package/docs/{architecture.md → architecture/architecture.md} +43 -22
  191. package/docs/{artifact-placement.md → architecture/artifact-placement.md} +26 -23
  192. package/docs/architecture/artifact-versions.md +90 -0
  193. package/docs/{capacity-and-scheduling.md → architecture/capacity-and-scheduling.md} +26 -13
  194. package/docs/{context-engine.md → architecture/context-engine.md} +25 -25
  195. package/docs/{context-working-set.md → architecture/context-working-set.md} +13 -10
  196. package/docs/{dispatch-architecture-rationale.md → architecture/dispatch-architecture-rationale.md} +12 -9
  197. package/docs/{dispatch-typed-intent.md → architecture/dispatch-typed-intent.md} +68 -46
  198. package/docs/{evidence-and-memory.md → architecture/evidence-and-memory.md} +23 -16
  199. package/docs/{middleware-and-components.md → architecture/middleware-and-components.md} +11 -5
  200. package/docs/{model-catalog.md → architecture/model-catalog.md} +40 -17
  201. package/docs/{observability.md → architecture/observability.md} +26 -13
  202. package/docs/{pi-boundary.md → architecture/pi-boundary.md} +24 -11
  203. package/docs/{prompt-envelope-and-tools.md → architecture/prompt-envelope-and-tools.md} +55 -20
  204. package/docs/{provider-adapter-cookbook.md → architecture/provider-adapter-cookbook.md} +35 -24
  205. package/docs/{safety-model.md → architecture/safety-model.md} +20 -15
  206. package/docs/{session-lifecycle.md → architecture/session-lifecycle.md} +8 -5
  207. package/docs/architecture/time-conventions.md +125 -0
  208. package/docs/{trace-store.md → architecture/trace-store.md} +26 -13
  209. package/docs/{tui-design.md → architecture/tui-design.md} +13 -13
  210. package/docs/{worker-dispatch-mechanics.md → architecture/worker-dispatch-mechanics.md} +27 -30
  211. package/docs/{built-in-agents.md → guide/built-in-agents.md} +70 -46
  212. package/docs/{commands-and-modes.md → guide/commands-and-modes.md} +73 -62
  213. package/docs/{configuration-and-targets.md → guide/configuration-and-targets.md} +323 -444
  214. package/docs/guide/configuration-reference.md +1158 -0
  215. package/docs/{environment-variables.md → guide/environment-variables.md} +31 -27
  216. package/docs/{exit-codes-and-output.md → guide/exit-codes-and-output.md} +8 -3
  217. package/docs/{extensions-and-sharing.md → guide/extensions-and-sharing.md} +41 -14
  218. package/docs/{fleet-dispatch.md → guide/fleet-dispatch.md} +47 -49
  219. package/docs/{glossary.md → guide/glossary.md} +14 -11
  220. package/docs/{installation-and-lifecycle.md → guide/installation-and-lifecycle.md} +45 -14
  221. package/docs/guide/panes-and-files.md +290 -0
  222. package/docs/{proactive-memory.md → guide/proactive-memory.md} +79 -66
  223. package/docs/{resource-library.md → guide/resource-library.md} +13 -4
  224. package/docs/{skills-marketplace.md → guide/skills-marketplace.md} +7 -3
  225. package/docs/{tool-usage.md → guide/tool-usage.md} +87 -23
  226. package/docs/{troubleshooting.md → guide/troubleshooting.md} +10 -5
  227. package/docs/{config-knobs-audit.md → history/config-knobs-audit.md} +13 -10
  228. package/docs/history/release-cut-checklist.md +207 -0
  229. package/docs/{development-pipeline.md → process/development-pipeline.md} +24 -26
  230. package/docs/process/documentation-coverage.md +100 -0
  231. package/docs/process/documentation-guide.md +187 -0
  232. package/docs/{eval-runner.md → process/eval-runner.md} +41 -50
  233. package/docs/{evals-internal.md → process/evals-internal.md} +10 -10
  234. package/docs/{evolution.md → process/evolution.md} +2 -2
  235. package/docs/{fleet-demo-runbook.md → process/fleet-demo-runbook.md} +17 -10
  236. package/docs/{git-commit-provenance.md → process/git-commit-provenance.md} +11 -4
  237. package/docs/{performance-methodology.md → process/performance-methodology.md} +87 -69
  238. package/docs/{scientific-validation.md → process/scientific-validation.md} +4 -4
  239. package/evals/README.md +5 -0
  240. package/evals/behavioral-corpus-grader.mjs +103 -0
  241. package/evals/behavioral-machinery-baseline.json +2276 -0
  242. package/evals/behavioral-machinery-driver.ts +250 -0
  243. package/evals/behavioral-machinery-support.ts +253 -0
  244. package/evals/behavioral-machinery.yaml +614 -0
  245. package/evals/behavioral-model-negative-control.yaml +68 -0
  246. package/evals/behavioral-model.yaml +216 -0
  247. package/evals/fixtures/behavioral-facts.txt +3 -0
  248. package/evals/fixtures/behavioral-main.ts +7 -0
  249. package/evals/fixtures/decoy/note.txt +2 -0
  250. package/evals/fixtures/private/credentials.txt +1 -0
  251. package/evals/tracked-metrics-baseline.yaml +229 -0
  252. package/evals/tracked-metrics-grader.mjs +129 -0
  253. package/package.json +13 -21
  254. package/skills/README.md +51 -42
  255. package/skills/coding/ast-grep/SKILL.md +9 -3
  256. package/skills/coding/coding-standards/SKILL.md +9 -3
  257. package/skills/coding/prototype/SKILL.md +9 -3
  258. package/skills/coding/tdd/SKILL.md +9 -3
  259. package/skills/context/context-handoff/SKILL.md +13 -4
  260. package/skills/context/context-handoff/evals.md +3 -3
  261. package/skills/context/context-prime/SKILL.md +9 -3
  262. package/skills/context/context-prime/evals.md +2 -2
  263. package/skills/git/file-ticket/SKILL.md +10 -5
  264. package/skills/git/file-ticket/evals.md +2 -2
  265. package/skills/git/fix-issue/SKILL.md +12 -5
  266. package/skills/git/fix-issue/evals.md +4 -4
  267. package/skills/git/resolve-merge-conflicts/SKILL.md +9 -3
  268. package/skills/git/resolve-merge-conflicts/evals.md +2 -2
  269. package/skills/git/ship/SKILL.md +10 -4
  270. package/skills/git/ship/evals.md +4 -4
  271. package/skills/git/worktree-create/SKILL.md +8 -3
  272. package/skills/git/worktree-create/evals.md +6 -6
  273. package/skills/git/worktree-merge/SKILL.md +8 -3
  274. package/skills/git/worktree-merge/evals.md +6 -6
  275. package/skills/meta/{clio-dev → clio-coder-dev}/SKILL.md +22 -12
  276. package/skills/meta/{clio-dev → clio-coder-dev}/evals.md +5 -4
  277. package/skills/meta/clio-coder-test/SKILL.md +146 -0
  278. package/skills/meta/{clio-test → clio-coder-test}/evals.md +10 -5
  279. package/skills/meta/clio-coder-test/references/harness.md +102 -0
  280. package/skills/meta/clio-coder-test/references/test-map.md +96 -0
  281. package/skills/meta/credentials/SKILL.md +10 -3
  282. package/skills/meta/find-skills/SKILL.md +9 -3
  283. package/skills/meta/herdr/SKILL.md +9 -3
  284. package/skills/meta/skill-craft/SKILL.md +39 -16
  285. package/skills/planning/architecture/SKILL.md +9 -3
  286. package/skills/planning/backlog/SKILL.md +9 -3
  287. package/skills/planning/prd/SKILL.md +9 -3
  288. package/skills/planning/product-intent/SKILL.md +9 -3
  289. package/skills/planning/tech-spec/SKILL.md +9 -3
  290. package/skills/registry.yaml +66 -66
  291. package/skills/research/arxiv-literature/SKILL.md +9 -3
  292. package/skills/research/experiment-protocol/SKILL.md +10 -3
  293. package/skills/research/scientific-debugging/SKILL.md +10 -3
  294. package/skills/research/scientific-debugging/evals.md +2 -2
  295. package/skills/research/scientific-modernization/SKILL.md +10 -3
  296. package/skills/skill-marketplace.json +285 -66
  297. package/skills/workflow/cut-it/SKILL.md +11 -3
  298. package/skills/workflow/design-council/SKILL.md +12 -3
  299. package/skills/workflow/grill-me/SKILL.md +9 -3
  300. package/skills/workflow/workflow-distiller/SKILL.md +9 -3
  301. package/src/cli/acp.ts +2 -2
  302. package/src/cli/args.ts +2 -2
  303. package/src/cli/auth.ts +2 -2
  304. package/src/cli/bootstrap-generate.ts +6 -6
  305. package/src/cli/clio.ts +6 -1
  306. package/src/cli/config-inspect.ts +68 -15
  307. package/src/cli/configure-interop.ts +1 -1
  308. package/src/cli/configure.ts +27 -31
  309. package/src/cli/default-target.ts +1 -1
  310. package/src/cli/docs.ts +28 -20
  311. package/src/cli/doctor-naming.ts +323 -0
  312. package/src/cli/doctor-panes.ts +46 -14
  313. package/src/cli/doctor-toolchain.ts +31 -10
  314. package/src/cli/doctor.ts +15 -1
  315. package/src/cli/eval-inventory.ts +8 -8
  316. package/src/cli/eval.ts +1 -2
  317. package/src/cli/evidence-detail.ts +1 -1
  318. package/src/cli/evidence-inventory.ts +1 -1
  319. package/src/cli/extensions.ts +2 -1
  320. package/src/cli/fleet-decisions.ts +1 -1
  321. package/src/cli/fleet-inspect.ts +1 -1
  322. package/src/cli/fleet-preflight.ts +1 -1
  323. package/src/cli/fleet-verify.ts +1 -1
  324. package/src/cli/fleet-view.ts +40 -23
  325. package/src/cli/fleet.ts +9 -6
  326. package/src/cli/index.ts +2 -1
  327. package/src/cli/internal-dispatch.ts +3 -4
  328. package/src/cli/interop-inspect.ts +2 -2
  329. package/src/cli/models.ts +3 -3
  330. package/src/cli/modes/print.ts +1 -1
  331. package/src/cli/panes.ts +19 -5
  332. package/src/cli/reset.ts +1 -1
  333. package/src/cli/run.ts +13 -17
  334. package/src/cli/share.ts +6 -2
  335. package/src/cli/skills-eval.ts +14 -14
  336. package/src/cli/targets.ts +25 -30
  337. package/src/cli/trace-inspect.ts +1 -1
  338. package/src/cli/trace.ts +96 -4
  339. package/src/cli/uninstall.ts +2 -2
  340. package/src/cli/upgrade.ts +29 -34
  341. package/src/cli/usage.ts +2 -2
  342. package/src/cli/validate-model.ts +1 -1
  343. package/src/cli/verifiers-inspect.ts +1 -1
  344. package/src/cli/wiki-generate.ts +6 -6
  345. package/src/core/artifact-paths.ts +1 -1
  346. package/src/core/bash-exec.ts +132 -87
  347. package/src/core/boot-trace.ts +3 -3
  348. package/src/core/bus-events.ts +51 -6
  349. package/src/core/bus-trace.ts +2 -2
  350. package/src/core/compile-cache.ts +1 -1
  351. package/src/core/config.ts +1066 -886
  352. package/src/core/defaults.ts +326 -530
  353. package/src/core/dispatch-outcome.ts +16 -0
  354. package/src/core/domain-loader.ts +6 -4
  355. package/src/core/event-bus.ts +1 -1
  356. package/src/core/file-references.ts +78 -88
  357. package/src/core/git-commit-attribution.ts +3 -9
  358. package/src/core/guardrails.ts +33 -52
  359. package/src/core/naming-compat.ts +45 -0
  360. package/src/core/naming-events.ts +62 -0
  361. package/src/core/prompt-hint.ts +9 -0
  362. package/src/core/recent-models.ts +1 -7
  363. package/src/core/residency-protection.ts +4 -8
  364. package/src/core/resolve-config-value.ts +1 -1
  365. package/src/core/response-model-id.ts +0 -14
  366. package/src/core/session-routing.ts +84 -74
  367. package/src/core/skill-activation.ts +18 -0
  368. package/src/core/termination.ts +4 -4
  369. package/src/core/timers.ts +2 -12
  370. package/src/domains/agents/builtins/architect.md +2 -3
  371. package/src/domains/agents/builtins/coder.md +3 -2
  372. package/src/domains/agents/builtins/debugger.md +2 -2
  373. package/src/domains/agents/builtins/documenter.md +2 -2
  374. package/src/domains/agents/builtins/git-master.md +1 -1
  375. package/src/domains/agents/builtins/oracle.md +1 -1
  376. package/src/domains/agents/builtins/provenance.md +1 -1
  377. package/src/domains/agents/builtins/researcher.md +1 -1
  378. package/src/domains/agents/builtins/scout.md +1 -1
  379. package/src/domains/agents/builtins/tester.md +2 -2
  380. package/src/domains/agents/builtins/verifier.md +2 -2
  381. package/src/domains/agents/builtins/wiki-writer.md +1 -1
  382. package/src/domains/agents/catalog.ts +14 -26
  383. package/src/domains/agents/contract.ts +2 -0
  384. package/src/domains/agents/extension.ts +26 -4
  385. package/src/domains/agents/registry.ts +7 -7
  386. package/src/domains/agents/result-contract.ts +1 -1
  387. package/src/domains/agents/spec.ts +0 -11
  388. package/src/domains/config/classify.ts +35 -47
  389. package/src/domains/config/extension.ts +5 -5
  390. package/src/domains/config/keybindings.ts +56 -47
  391. package/src/domains/config/watcher.ts +1 -1
  392. package/src/domains/context/codewiki/indexer.ts +1 -1
  393. package/src/domains/context/extension.ts +3 -6
  394. package/src/domains/context/prompt-context.ts +1 -1
  395. package/src/domains/context/wiki/assemble.ts +2 -2
  396. package/src/domains/context/working-set/path-index.ts +1 -0
  397. package/src/domains/context/working-set/replay/metrics.ts +0 -4
  398. package/src/domains/context/working-set/replay/report.ts +1 -1
  399. package/src/domains/context/working-set/replay/synthetic.ts +2 -2
  400. package/src/domains/dispatch/active-route-planner.ts +2 -2
  401. package/src/domains/dispatch/agent-candidates.ts +1 -1
  402. package/src/domains/dispatch/agent-ledger-store.ts +1 -1
  403. package/src/domains/dispatch/agent-ledger.ts +1 -1
  404. package/src/domains/dispatch/assignment.ts +5 -5
  405. package/src/domains/dispatch/capability-match.ts +10 -0
  406. package/src/domains/dispatch/capacity-lease.ts +2 -5
  407. package/src/domains/dispatch/code-step.ts +1 -1
  408. package/src/domains/dispatch/contract.ts +2 -2
  409. package/src/domains/dispatch/extension.ts +169 -82
  410. package/src/domains/dispatch/fleet-node-prompt.ts +1 -1
  411. package/src/domains/dispatch/fleet-preflight.ts +8 -17
  412. package/src/domains/dispatch/fleet-run.ts +0 -7
  413. package/src/domains/dispatch/gate-decisions.ts +25 -14
  414. package/src/domains/dispatch/host-verification.ts +435 -39
  415. package/src/domains/dispatch/intent-requirements.ts +10 -0
  416. package/src/domains/dispatch/intent.ts +18 -1
  417. package/src/domains/dispatch/joint-route-resolver.ts +1 -1
  418. package/src/domains/dispatch/path-scope.ts +220 -70
  419. package/src/domains/dispatch/placement.ts +2 -2
  420. package/src/domains/dispatch/receipt-findings.ts +1 -1
  421. package/src/domains/dispatch/receipt-integrity.ts +20 -8
  422. package/src/domains/dispatch/reservation-store.ts +0 -23
  423. package/src/domains/dispatch/route-decision.ts +1 -1
  424. package/src/domains/dispatch/route-history.ts +1 -1
  425. package/src/domains/dispatch/route-policy.ts +1 -1
  426. package/src/domains/dispatch/route-readiness.ts +0 -28
  427. package/src/domains/dispatch/run-event-journal.ts +9 -19
  428. package/src/domains/dispatch/state.ts +2 -3
  429. package/src/domains/dispatch/tool-stats.ts +1 -1
  430. package/src/domains/dispatch/transport.ts +47 -40
  431. package/src/domains/dispatch/types.ts +58 -6
  432. package/src/domains/dispatch/worker-protocol.ts +2 -2
  433. package/src/domains/eval/artifacts/store.ts +10 -4
  434. package/src/domains/eval/compare/thresholds.ts +0 -8
  435. package/src/domains/eval/execution-provenance.ts +1 -1
  436. package/src/domains/eval/metrics/token-stream.ts +0 -7
  437. package/src/domains/eval/report.ts +1 -1
  438. package/src/domains/eval/runner.ts +1 -1
  439. package/src/domains/eval/runners/clio-run.ts +7 -6
  440. package/src/domains/eval/runners/external-command.ts +4 -3
  441. package/src/domains/eval/schema/artifact.ts +1 -1
  442. package/src/domains/eval/schema/behavioral-metrics.ts +3 -2
  443. package/src/domains/eval/schema/behavioral.ts +7 -6
  444. package/src/domains/eval/schema/execution-envelope.ts +4 -2
  445. package/src/domains/eval/schema/naming.ts +10 -0
  446. package/src/domains/eval/schema/suite.ts +2 -2
  447. package/src/domains/eval/schema/validate.ts +9 -5
  448. package/src/domains/eval/schema/verdict.ts +4 -2
  449. package/src/domains/eval/store.ts +20 -3
  450. package/src/domains/eval/suites/run.ts +12 -6
  451. package/src/domains/eval/types.ts +1 -1
  452. package/src/domains/eval/workspaces/git.ts +1 -1
  453. package/src/domains/eval/workspaces/temp-copy.ts +1 -1
  454. package/src/domains/evidence/build.ts +13 -5
  455. package/src/domains/evidence/trust-status.ts +10 -1
  456. package/src/domains/extensions/contract.ts +15 -1
  457. package/src/domains/extensions/discovery.ts +238 -41
  458. package/src/domains/extensions/extension.ts +105 -6
  459. package/src/domains/extensions/index.ts +24 -0
  460. package/src/domains/extensions/integrity.ts +189 -0
  461. package/src/domains/extensions/manager.ts +17 -1
  462. package/src/domains/extensions/resource-path.ts +27 -0
  463. package/src/domains/extensions/resources.ts +18 -38
  464. package/src/domains/extensions/snapshot-store.ts +39 -0
  465. package/src/domains/extensions/snapshot.ts +180 -0
  466. package/src/domains/extensions/state.ts +385 -57
  467. package/src/domains/extensions/types.ts +118 -1
  468. package/src/domains/interop/consent.ts +7 -7
  469. package/src/domains/interop/extension.ts +1 -1
  470. package/src/domains/lifecycle/doctor.ts +27 -21
  471. package/src/domains/lifecycle/migrations/2026-09-01-clio-coder-naming.ts +155 -0
  472. package/src/domains/lifecycle/migrations/2026-09-01-extension-install-digests.ts +27 -0
  473. package/src/domains/lifecycle/migrations/2026-09-01-retire-panes-knobs.ts +59 -0
  474. package/src/domains/lifecycle/migrations/2026-09-01-settings-v2.ts +338 -0
  475. package/src/domains/lifecycle/migrations/index.ts +22 -1
  476. package/src/domains/lifecycle/naming-history.ts +153 -0
  477. package/src/domains/lifecycle/naming-mutable-state.ts +104 -0
  478. package/src/domains/lifecycle/naming-resources.ts +276 -0
  479. package/src/domains/lifecycle/naming-tool-markers.ts +139 -0
  480. package/src/domains/lifecycle/naming-yazi.ts +86 -0
  481. package/src/domains/lifecycle/upgrade-notice.ts +1 -1
  482. package/src/domains/memory/task-memory-handoff.ts +6 -3
  483. package/src/domains/middleware/contract.ts +26 -0
  484. package/src/domains/middleware/extension.ts +24 -24
  485. package/src/domains/middleware/hook-receipts.ts +27 -4
  486. package/src/domains/middleware/hooks-io.ts +65 -32
  487. package/src/domains/middleware/hooks.ts +64 -0
  488. package/src/domains/middleware/index.ts +35 -4
  489. package/src/domains/middleware/marketplace-offer.ts +339 -0
  490. package/src/domains/middleware/registrations.ts +326 -0
  491. package/src/domains/middleware/runtime.ts +30 -2
  492. package/src/domains/middleware/snapshot.ts +20 -7
  493. package/src/domains/mux/contract.ts +195 -25
  494. package/src/domains/mux/detect.ts +23 -6
  495. package/src/domains/mux/dock-controller.ts +365 -0
  496. package/src/domains/mux/extension.ts +7 -1
  497. package/src/domains/mux/index.ts +21 -1
  498. package/src/domains/mux/operations.ts +72 -5
  499. package/src/domains/mux/protocol.ts +19 -6
  500. package/src/domains/mux/socket-client.ts +167 -19
  501. package/src/domains/mux/types.ts +49 -6
  502. package/src/domains/mux/yazi/assets/yazi.toml +2 -2
  503. package/src/domains/mux/yazi/event-stream.ts +6 -4
  504. package/src/domains/mux/yazi/profile.ts +1 -1
  505. package/src/domains/mux/yazi/session.ts +79 -7
  506. package/src/domains/mux/yazi/theme.ts +117 -17
  507. package/src/domains/observability/contract.ts +10 -11
  508. package/src/domains/observability/extension.ts +12 -4
  509. package/src/domains/observability/out-of-turn-usage.ts +2 -2
  510. package/src/domains/observability/projection.ts +15 -91
  511. package/src/domains/observability/trace-store.ts +65 -19
  512. package/src/domains/prompts/compiler.ts +75 -55
  513. package/src/domains/prompts/contract.ts +15 -3
  514. package/src/domains/prompts/extension.ts +100 -12
  515. package/src/domains/prompts/fragments/identity/clio-worker.md +2 -4
  516. package/src/domains/prompts/fragments/identity/clio.md +6 -12
  517. package/src/domains/prompts/fragments/identity/docs-routing.md +1 -2
  518. package/src/domains/prompts/fragments/identity/self-awareness.md +3 -11
  519. package/src/domains/prompts/fragments/operating/contract.md +7 -15
  520. package/src/domains/prompts/fragments/operating/delegation.md +32 -34
  521. package/src/domains/prompts/fragments/operating/skills.md +11 -18
  522. package/src/domains/prompts/fragments/operating/worker.md +1 -8
  523. package/src/domains/providers/extension.ts +5 -5
  524. package/src/domains/providers/index.ts +1 -1
  525. package/src/domains/providers/knowledge-base-path.ts +1 -1
  526. package/src/domains/providers/model-runtime-capabilities.ts +99 -23
  527. package/src/domains/providers/models/cloud-models/alcf.yaml +1 -1
  528. package/src/domains/providers/models/local-models/{clio-local-coding-targets.yaml → clio-coder-local-coding-targets.yaml} +671 -106
  529. package/src/domains/providers/plugins.ts +1 -1
  530. package/src/domains/providers/resolver.ts +1 -1
  531. package/src/domains/providers/runtime-resolution.ts +31 -0
  532. package/src/domains/providers/runtimes/cloud/alcf.ts +4 -4
  533. package/src/domains/providers/runtimes/common/lmstudio-http.ts +1 -5
  534. package/src/domains/providers/runtimes/common/local-synth.ts +3 -3
  535. package/src/domains/providers/runtimes/common/probe-helpers.ts +9 -4
  536. package/src/domains/providers/runtimes/local-native/llamacpp-completion.ts +1 -1
  537. package/src/domains/providers/runtimes/local-native/llamacpp.ts +9 -1
  538. package/src/domains/providers/runtimes/local-native/lmstudio.ts +2 -9
  539. package/src/domains/providers/runtimes/protocol/litellm.ts +1 -91
  540. package/src/domains/providers/types/cost-provenance.ts +19 -0
  541. package/src/domains/providers/types/knowledge-base.ts +13 -0
  542. package/src/domains/providers/types/local-model-quirks.ts +87 -39
  543. package/src/domains/providers/types/target-descriptor.ts +3 -3
  544. package/src/domains/resources/extension.ts +1 -1
  545. package/src/domains/resources/library.ts +6 -6
  546. package/src/domains/resources/prompts/loader.ts +1 -1
  547. package/src/domains/resources/skills/content-hash.ts +7 -6
  548. package/src/domains/resources/skills/evals.ts +1 -1
  549. package/src/domains/resources/skills/install.ts +36 -12
  550. package/src/domains/resources/skills/loader.ts +41 -18
  551. package/src/domains/resources/skills/marketplace.ts +21 -2
  552. package/src/domains/resources/skills/promotion.ts +214 -0
  553. package/src/domains/safety/audit.ts +2 -2
  554. package/src/domains/safety/call-target.ts +1 -1
  555. package/src/domains/safety/finish-contract.ts +2 -1
  556. package/src/domains/safety/loop-detector.ts +7 -4
  557. package/src/domains/safety/run-effects.ts +1 -1
  558. package/src/domains/scheduling/extension.ts +4 -4
  559. package/src/domains/session/archive-readers.ts +9 -1
  560. package/src/domains/session/compaction/branch-summary.ts +4 -0
  561. package/src/domains/session/compaction/compact.ts +1 -1
  562. package/src/domains/session/compaction/tokens.ts +4 -0
  563. package/src/domains/session/context-accounting.ts +1 -1
  564. package/src/domains/session/decision-board.ts +1 -1
  565. package/src/domains/session/extension.ts +1 -1
  566. package/src/domains/session/handoff.ts +2 -2
  567. package/src/domains/session/prompt-manifest.ts +0 -5
  568. package/src/domains/session/protected-artifact-journal.ts +12 -6
  569. package/src/domains/session/retry.ts +1 -1
  570. package/src/domains/session/task-board.ts +10 -9
  571. package/src/domains/share/archive.ts +249 -43
  572. package/src/domains/toolchain/install.ts +1 -1
  573. package/src/engine/acp/adapter.ts +3 -3
  574. package/src/engine/acp/event-mapper.ts +3 -3
  575. package/src/engine/acp/server.ts +89 -35
  576. package/src/engine/acp/tool-mediator.ts +2 -2
  577. package/src/engine/acp/types.ts +1 -1
  578. package/src/engine/alcf-oauth.ts +5 -5
  579. package/src/engine/antigravity/subprocess-runtime.ts +2 -2
  580. package/src/engine/api-registry.ts +1 -1
  581. package/src/engine/apis/llamacpp-residency.ts +4 -23
  582. package/src/engine/apis/lmstudio.ts +4 -9
  583. package/src/engine/apis/ollama-native.ts +9 -9
  584. package/src/engine/apis/openai-completions.ts +30 -27
  585. package/src/engine/apis/output-budget.ts +8 -18
  586. package/src/engine/apis/residency.ts +10 -35
  587. package/src/engine/claude/sdk-module.ts +1 -12
  588. package/src/engine/claude/sdk-runtime.ts +6 -6
  589. package/src/engine/claude/subprocess-runtime.ts +1 -1
  590. package/src/engine/claude/tool-safety.ts +4 -4
  591. package/src/engine/gemma-channel-filter.ts +19 -0
  592. package/src/engine/loop-guard.ts +92 -17
  593. package/src/engine/session.ts +14 -7
  594. package/src/engine/tui-primitives.ts +1 -1
  595. package/src/engine/worker-events.ts +6 -6
  596. package/src/engine/worker-runtime.ts +54 -24
  597. package/src/engine/worker-tools.ts +3 -1
  598. package/src/entry/extension-hook-sources.ts +28 -0
  599. package/src/entry/extension-reload.ts +309 -0
  600. package/src/entry/orchestrator.ts +163 -120
  601. package/src/interactive/application-controller.ts +23 -22
  602. package/src/interactive/bus-notices.ts +10 -3
  603. package/src/interactive/chat-loop-messages.ts +3 -13
  604. package/src/interactive/chat-loop.ts +18 -9
  605. package/src/interactive/chat-panel.ts +37 -14
  606. package/src/interactive/chat-renderer.ts +71 -7
  607. package/src/interactive/clio-editor.ts +105 -1
  608. package/src/interactive/context-activity.ts +8 -6
  609. package/src/interactive/context-meter.ts +3 -6
  610. package/src/interactive/context-overlay.ts +1 -1
  611. package/src/interactive/cost-overlay.ts +1 -1
  612. package/src/interactive/council-grid.ts +2 -2
  613. package/src/interactive/dispatch-board.ts +36 -44
  614. package/src/interactive/editor-bash.ts +21 -0
  615. package/src/interactive/editor-steer.ts +9 -4
  616. package/src/interactive/editor-submit.ts +24 -18
  617. package/src/interactive/external-editor.ts +1 -1
  618. package/src/interactive/file-reference-completion.ts +360 -0
  619. package/src/interactive/footer/dashboard.ts +15 -17
  620. package/src/interactive/footer/notifications.ts +14 -8
  621. package/src/interactive/footer/widgets.ts +15 -44
  622. package/src/interactive/interactive-application.ts +116 -61
  623. package/src/interactive/interactive-event-projection.ts +1 -1
  624. package/src/interactive/interactive-input-runtime.ts +6 -2
  625. package/src/interactive/interactive-presentation.ts +22 -17
  626. package/src/interactive/interactive-shell.ts +2 -2
  627. package/src/interactive/interactive-slash-runtime.ts +65 -17
  628. package/src/interactive/interactive-subscriptions.ts +1 -1
  629. package/src/interactive/interactive-tickers.ts +1 -1
  630. package/src/interactive/keybinding-manager.ts +4 -4
  631. package/src/interactive/layout.ts +1 -1
  632. package/src/interactive/memory-overlay.ts +2 -2
  633. package/src/interactive/modal-marker.ts +2 -21
  634. package/src/interactive/mutation-preview.ts +1 -1
  635. package/src/interactive/overlay-frame.ts +4 -12
  636. package/src/interactive/overlay-general-openers.ts +6 -2
  637. package/src/interactive/overlay-key-routing.ts +7 -7
  638. package/src/interactive/overlay-lifecycle.ts +1 -1
  639. package/src/interactive/overlay-model-selectors.ts +3 -3
  640. package/src/interactive/overlays/agents.ts +2 -2
  641. package/src/interactive/overlays/ask-user.ts +25 -11
  642. package/src/interactive/overlays/context-reset.ts +28 -4
  643. package/src/interactive/overlays/cwd-fallback.ts +28 -4
  644. package/src/interactive/overlays/decisions.ts +4 -2
  645. package/src/interactive/overlays/extensions.ts +9 -1
  646. package/src/interactive/overlays/fleet-run-approval.ts +3 -3
  647. package/src/interactive/overlays/handoff-review.ts +2 -2
  648. package/src/interactive/overlays/help-reference.ts +13 -0
  649. package/src/interactive/overlays/interop.ts +1 -1
  650. package/src/interactive/overlays/library-install-confirm.ts +1 -1
  651. package/src/interactive/overlays/message-picker.ts +1 -1
  652. package/src/interactive/overlays/model-selector.ts +39 -31
  653. package/src/interactive/overlays/prompts.ts +10 -4
  654. package/src/interactive/overlays/session-selector.ts +2 -2
  655. package/src/interactive/overlays/settings.ts +360 -303
  656. package/src/interactive/overlays/side-question.ts +2 -2
  657. package/src/interactive/overlays/skills-hub.ts +8 -8
  658. package/src/interactive/overlays/tree-selector.ts +2 -2
  659. package/src/interactive/panes-runtime.ts +145 -43
  660. package/src/interactive/permission-overlay.ts +2 -2
  661. package/src/interactive/prompt-cache-identity.ts +88 -0
  662. package/src/interactive/renderers/retry-status.ts +12 -4
  663. package/src/interactive/renderers/tool-execution.ts +4 -4
  664. package/src/interactive/session-transcript.ts +3 -3
  665. package/src/interactive/slash-autocomplete.ts +454 -165
  666. package/src/interactive/slash-commands.ts +401 -190
  667. package/src/interactive/slash-spec.ts +160 -17
  668. package/src/interactive/status/controller.ts +2 -2
  669. package/src/interactive/stream-pacing-policy.ts +1 -24
  670. package/src/interactive/tasks-overlay.ts +20 -13
  671. package/src/interactive/terminal-lease.ts +6 -7
  672. package/src/interactive/turn-context.ts +41 -26
  673. package/src/interactive/turn-persistence.ts +2 -2
  674. package/src/interactive/turn-prewarm.ts +2 -2
  675. package/src/interactive/turn-runtime.ts +8 -8
  676. package/src/interactive/turn-state.ts +1 -1
  677. package/src/interactive/view/artifacts.ts +12 -9
  678. package/src/interactive/view/view-overlay.ts +13 -10
  679. package/src/interactive/watch-pane.ts +38 -10
  680. package/src/interactive/welcome-dashboard.ts +15 -15
  681. package/src/interactive/worker-progress.ts +4 -4
  682. package/src/interactive/worker-receipts.ts +1 -1
  683. package/src/interactive/worker-stream.ts +1 -4
  684. package/src/interactive/yazi-bridge.ts +72 -11
  685. package/src/tools/agent-tools.ts +30 -1
  686. package/src/tools/artifact.ts +2 -2
  687. package/src/tools/ask-user.ts +6 -6
  688. package/src/tools/bash.ts +2 -2
  689. package/src/tools/bootstrap.ts +4 -0
  690. package/src/tools/builtin-tool-catalog.ts +52 -22
  691. package/src/tools/codewiki/code-nav-surface.ts +6 -0
  692. package/src/tools/codewiki/code-nav.ts +99 -13
  693. package/src/tools/compete-worktrees.ts +27 -17
  694. package/src/tools/context/docs-engine.ts +20 -7
  695. package/src/tools/context/index.ts +44 -13
  696. package/src/tools/core-bootstrap.ts +28 -6
  697. package/src/tools/credential-present.ts +1 -2
  698. package/src/tools/dispatch-admission.ts +4 -2
  699. package/src/tools/dispatch-arguments.ts +6 -2
  700. package/src/tools/dispatch-plan.ts +48 -15
  701. package/src/tools/dispatch-run-events.ts +13 -11
  702. package/src/tools/dispatch-runner.ts +11 -6
  703. package/src/tools/dispatch-schema.ts +338 -0
  704. package/src/tools/dispatch-types.ts +3 -0
  705. package/src/tools/dispatch.ts +9 -254
  706. package/src/tools/find.ts +1 -6
  707. package/src/tools/ledger.ts +3 -5
  708. package/src/tools/monitor-surface.ts +5 -13
  709. package/src/tools/monitor.ts +4 -4
  710. package/src/tools/observation.ts +4 -5
  711. package/src/tools/observers.ts +0 -33
  712. package/src/tools/panes-surface.ts +4 -11
  713. package/src/tools/panes.ts +4 -2
  714. package/src/tools/policy.ts +15 -2
  715. package/src/tools/read.ts +5 -6
  716. package/src/tools/registry.ts +30 -7
  717. package/src/tools/result-shaping.ts +18 -14
  718. package/src/tools/steer-surface.ts +1 -1
  719. package/src/tools/task-worktree.ts +28 -7
  720. package/src/tools/tasks.ts +1 -1
  721. package/src/tools/truncate.ts +6 -5
  722. package/src/tools/verify/authoring.ts +3 -6
  723. package/src/tools/verify/frontend.ts +1 -1
  724. package/src/tools/verify/surface.ts +6 -12
  725. package/src/tools/web-fetch-surface.ts +1 -3
  726. package/src/tools/web-fetch.ts +1 -1
  727. package/src/worker/entry.ts +4 -3
  728. package/src/worker/protocol.ts +16 -14
  729. package/src/worker/spec-contract.ts +2 -2
  730. package/src/worker/stdin-demux.ts +2 -2
  731. package/dist/chunk-36EJLSQQ.js +0 -814
  732. package/dist/chunk-GXNLGKAB.js +0 -571
  733. package/dist/chunk-K7VKOLQQ.js +0 -15
  734. package/dist/chunk-PMZCIOCJ.js +0 -25
  735. package/dist/chunk-SUCTJL45.js +0 -45
  736. package/dist/chunk-SUW5DORT.js +0 -819
  737. package/dist/chunk-TZ3SGWZZ.js +0 -48
  738. package/dist/chunk-UOV2BYIW.js +0 -107
  739. package/dist/chunk-VFA6GDY5.js +0 -1625
  740. package/dist/doctor-QOA5FNY5.js +0 -313
  741. package/dist/fleet-view-ZCON35AG.js +0 -102
  742. package/dist/panes-HMABYVO4.js +0 -58
  743. package/docs/artifact-versions.md +0 -67
  744. package/docs/documentation-coverage.md +0 -46
  745. package/docs/documentation-guide.md +0 -167
  746. package/docs/release-cut-checklist.md +0 -193
  747. package/docs/time-conventions.md +0 -101
  748. package/skills/meta/clio-test/SKILL.md +0 -133
  749. package/skills/meta/clio-test/references/harness.md +0 -126
  750. package/skills/meta/clio-test/references/test-map.md +0 -69
  751. package/src/engine/apis/degraded-inference.ts +0 -95
@@ -1,11 +1,11 @@
1
1
  # Configuration, Targets, Runtimes, and Auth
2
2
 
3
- > [!TIP]
4
- > **Interactive Spec Available:** An interactive configuration validator, target resolver, and CLI command generator is located at [docs/html/configuration_blueprint.html](html/configuration_blueprint.html) (Version: 0.4.0).
3
+ > **Visual blueprint:** The source checkout includes the complete
4
+ > [Configuration, Targets, Runtimes, and Auth visual reference](https://github.com/iowarp/clio-coder/blob/main/docs/html/configuration_blueprint.html).
5
5
 
6
6
  Clio Coder is target-first: chat and fleet dispatch resolve through configured targets in `settings.yaml`, not through provider-specific ad hoc flags. Chat and print targets are HTTP and native engine-backed runtimes. Fleet dispatch can also target the sanctioned Claude Code subscription runtimes described below.
7
7
 
8
- Clio's engine is built on the pi SDK (see [docs/pi-boundary.md](pi-boundary.md)). Broad provider/model support comes from engine-backed descriptors and from the generic `openai-compat` and `anthropic-compat` targets. Clio adds orchestration, local/native runtime ergonomics, target configuration, dispatch, safety, and receipts rather than creating a first-class descriptor for every provider.
8
+ Clio's engine is built on the pi SDK (see [docs/architecture/pi-boundary.md](../architecture/pi-boundary.md)). Broad provider/model support comes from engine-backed descriptors and from the generic `openai-compat` and `anthropic-compat` targets. Clio adds orchestration, local/native runtime ergonomics, target configuration, dispatch, safety, and receipts rather than creating a first-class descriptor for every provider.
9
9
 
10
10
  Source of truth: `src/core/defaults.ts`, `src/core/config.ts`, `src/domains/providers/**`, `src/cli/configure.ts`, `src/cli/targets.ts`, `src/cli/models.ts`, and `src/cli/auth.ts`.
11
11
 
@@ -31,7 +31,15 @@ Default config file:
31
31
 
32
32
  Role contents: config holds user-authored files (settings, credentials, agents, skills, prompts, extensions, runtimes); data holds durable artifacts (memory, evidence, evals, vendored external tools); state holds machine-produced session state (sessions, audit, receipts, runs.json, recent-models.json, install.json, interop.json, interviews, scratch); cache holds disposable derived files.
33
33
 
34
- The `library` settings block configures the private resource catalog. `library.catalog` is an optional path and defaults to `<configDir>/library.yaml`. `library.remote` is an optional git remote URL, and the catalog repository must name that git remote `library`. `library.sync` defaults to `false`, which makes sync and push refuse before spawning git. `library.confirmedRemote` is written by `clio-coder library remote confirm <url>` and must exactly match `library.remote` before sync or push can run. Confirmation sets both values when `library.remote` is unset and refuses a differing configured URL with `library_remote_mismatch`. See [resource-library.md](resource-library.md).
34
+ The `integrations.library` settings block configures the private resource
35
+ catalog. `integrations.library.catalog` is an optional path and defaults to
36
+ `<configDir>/library.yaml`. `integrations.library.remote` is an optional Git
37
+ remote URL, and the catalog repository must name that remote `library`.
38
+ `integrations.library.sync` defaults to `false`, which makes sync and push
39
+ refuse before spawning Git. `integrations.library.confirmedRemote` is written
40
+ by `clio-coder library remote confirm <url>` and must exactly match the
41
+ configured remote before synchronization can run. See
42
+ [Resource Library](resource-library.md).
35
43
 
36
44
  `clio-coder paths --json` prints the resolved directories and is the single source of truth for scripts.
37
45
 
@@ -44,6 +52,7 @@ From a source checkout:
44
52
  ```bash
45
53
  git clone https://github.com/iowarp/clio-coder.git
46
54
  cd clio-coder
55
+ npm ci
47
56
  npm run install:local
48
57
  hash -r
49
58
  clio-coder --version
@@ -104,12 +113,16 @@ clio-coder
104
113
  Inside the TUI, verify the local surface with:
105
114
 
106
115
  ```text
107
- /targets
116
+ /settings targets
108
117
  /agents
109
118
  /skill
110
119
  ```
111
120
 
112
- `/targets` opens Settings → Targets: one row per configured target with its roles (chat, fleet, memory) and probe health, probed live when the section opens. `Enter` on a row offers use for chat and fleet dispatch, connect (API key or OAuth, then a probe), probe, and remove. The chat, fleet, and memory targets are also individual rows in the Orchestrator and Fleet sections.
121
+ `/settings targets` opens one row per configured target with its roles (chat,
122
+ fleet, memory) and probe health. `Enter` on a row offers use for chat and fleet
123
+ dispatch, connect (API key or OAuth, then a probe), probe, and remove. The
124
+ retired `/targets` slash spelling is a non-executing tombstone that points to
125
+ this settings area; the `clio-coder targets` CLI family remains available.
113
126
 
114
127
  Only add `--context-window <tokens>`, `--max-tokens <tokens>`, or `--reasoning true` when you have runtime/model-specific values that should override live probe results.
115
128
 
@@ -130,127 +143,42 @@ Terminology used in code and receipts:
130
143
  | Background target | Optional proactive-memory model target. Unset means deterministic rules-only memory. |
131
144
  | Worker target | Fleet dispatch target. HTTP/native engine-backed, or one of the sanctioned subscription worker runtimes such as `claude-sdk`, `claude-code`, or `antigravity-code`. |
132
145
 
146
+ This abbreviated example uses the current version-2 information architecture.
147
+ The [settings inventory](#settings-inventory) below lists every accepted leaf
148
+ and its shipped default.
149
+
133
150
  ```yaml
134
- version: 1
135
- autonomy: auto-edit # read-only | suggest | auto-edit | full-auto (enforced at tool admission; the safety net applies at every level)
151
+ version: 2
136
152
 
137
153
  targets:
138
154
  - id: local-lmstudio
139
155
  runtime: lmstudio
140
156
  url: http://127.0.0.1:1234
141
157
  defaultModel: your-model-id
142
- # Optional. Request slots this inference endpoint can serve at once.
143
- # Overrides live discovery; omit it and Clio reads the server's own count.
144
- maxConcurrentRequests: 2
145
- capabilities:
146
- reasoning: true # optional; only if your model/runtime supports it
147
- lmstudio:
148
- # Omit load entirely to use LM Studio's just-in-time load defaults.
149
- load:
150
- contextLength: 131072
151
- flashAttention: true
152
- evalBatchSize: 512
153
- numExperts: 8
154
- offloadKvCacheToGpu: true
155
- request:
156
- ttlSeconds: 600
157
- draftModel: your-draft-model-id
158
- reasoning: auto # auto | off | on | low | medium | high
159
-
160
- runtimePlugins: []
161
-
162
- orchestrator:
158
+ maxConcurrentRequests: 2 # optional override; prefer live discovery
159
+
160
+ chat:
163
161
  target: local-lmstudio
164
162
  model: your-model-id
165
- thinkingLevel: off
166
-
167
- # Optional proactive-memory model. Leave null for the zero-cost rules tier.
168
- background:
169
- target: null
170
- model: null
171
- thinkingLevel: off
172
-
173
- memory:
174
- intervention:
175
- enabled: true
176
- everyNTools: 10
177
- windowSteps: 8
178
- maxTokens: 400
179
- timeoutMs: 30000 # shipped operator default in src/core/defaults.ts; the library fallback in task-memory-policy.ts is the same value
180
-
181
- workers:
163
+ thinkingLevel: low
164
+ modelPicker:
165
+ cycleSet: []
166
+ favorites: []
167
+ recentLimit: 12
168
+ maxOutputTokens: 0
169
+ prewarm: true
170
+
171
+ fleet:
182
172
  default:
183
173
  target: local-lmstudio
184
174
  model: your-model-id
185
175
  thinkingLevel: off
186
176
  profiles: {}
187
- rosters:
188
- design:
189
- members:
190
- - label: local-a
191
- target: local-lmstudio
192
- model: your-model-id
193
- thinking: medium
194
- color: accent
195
- - label: local-b
196
- target: local-vllm
197
- color: "#5ba8ff"
198
- agentBindings: {}
199
- maxRetries: 2
200
- onPermission: deny
201
- escalation:
202
- timeoutMs: 120000
203
- fallback: deny
204
- resilienceCooldownMs: 15000
205
-
206
- # Measured route selection stays shadow-only while these lists are empty.
207
- routing:
208
- activeRoles: [] # researcher | verifier | reviewer | judge
209
- activePostures: [] # quality | balanced | latency | economy
210
- agentAutomation:
211
- # Exact pairs only; this never authorizes an agents-by-roles cross-product.
212
- activeAgentRoles: []
213
-
214
- scope: []
215
- modelSelector:
216
- favorites: []
217
- recentLimit: 12
218
- budget:
219
- sessionCeilingUsd: 5
177
+ rosters: {}
178
+ agentProfiles: {}
179
+ nodes: []
220
180
  concurrency: auto
221
181
 
222
- defaults:
223
- maxTokens: 32768 # global output budget; clamped per model at request time
224
-
225
- theme: default
226
- terminal:
227
- showTerminalProgress: false
228
- outputVerbosity: default
229
- tuiMode: regular # regular terminal scrollback or fullscreen sticky layout
230
- fullscreenScrollbar: auto # hidden, auto, or always in fullscreen mode
231
- smoothStreaming: off # off, conservative auto, or explicit on
232
- notify: false # content-free desktop notification, interactive TTY only
233
- watchdog:
234
- enabled: false # opt-in read-only review of every mutating turn
235
- # target: local-lmstudio # route the review at a cheap model
236
- # cadenceToolCalls: 20 # also review every N tool calls inside a turn
237
- skills:
238
- trustProjectCompatRoots: false
239
- delegation:
240
- defaults:
241
- connectTimeoutMs: 30000
242
- turnTimeoutMs: 300000
243
- permissionTimeoutMs: 120000
244
- toolGovernance: clio-policy
245
- agents: []
246
- keybindings: {}
247
- compaction:
248
- auto: true
249
- threshold: 0.8
250
- excludeLastTurns: 6
251
- # model: provider/summary-model-id
252
- # systemPrompt: ~/.config/clio-coder/prompts/compaction.md
253
-
254
182
  context:
255
183
  workingSet:
256
184
  enabled: true
@@ -258,23 +186,46 @@ context:
258
186
  target: 0.6
259
187
  protectLastTurns: 6
260
188
  minEvictableTokens: 200
261
-
262
- prewarm:
263
- enabled: true # send the next turn's prefix early; local-native targets only
264
-
265
- retry:
266
- enabled: true
267
- maxRetries: 3
268
- baseDelayMs: 2000
269
- maxDelayMs: 60000
270
- streamStallMs: 180000
271
- guardrails:
272
- turnToolCallBudget: 60
273
- workerToolCallCap: 150
274
- maxDispatchRuns: 1000
275
- readMaxBytes: 51200
276
- observationTurnBudgetBytes: 196608
277
- internalDispatchTimeoutMs: 900000
189
+ compaction:
190
+ auto: true
191
+ threshold: 0.8
192
+ memory:
193
+ enabled: true
194
+ target: null
195
+ model: null
196
+
197
+ safety:
198
+ autonomy: auto-edit
199
+ limits:
200
+ sessionCostUsd: 5
201
+ chatToolCallsPerTurn: 60
202
+ readBytesPerCall: 51200
203
+ observationBytesPerTurn: 196608
204
+ review:
205
+ enabled: false
206
+
207
+ interface:
208
+ outputDetail: default
209
+ smoothStreaming: off
210
+ mode: regular
211
+ fullscreenScrollbar: auto
212
+ terminalProgress: false
213
+ desktopNotifications: false
214
+ panes:
215
+ enabled: off
216
+ layout: off
217
+ files:
218
+ enabled: false
219
+ keybindings: {}
220
+
221
+ integrations:
222
+ projectResources:
223
+ trustProjectImports: false
224
+ externalAgents:
225
+ entries: []
226
+ runtimePlugins: []
227
+ git:
228
+ commitAttribution: true
278
229
  ```
279
230
 
280
231
  Target capability overrides may include `chat`, `tools`, `toolCallFormat`, `reasoning`, `thinkingFormat`, `structuredOutputs`, `vision`, `audio`, `embeddings`, `rerank`, `fim`, `contextWindow`, and `maxTokens`.
@@ -285,7 +236,7 @@ Target capability overrides may include `chat`, `tools`, `toolCallFormat`, `reas
285
236
 
286
237
  Set it only when discovery is wrong. Clio resolves the limit in this order: this override; then a `parallelSlots` count cached on the target's probe result; then one slot for any other `local-native` runtime; then no bound at all for a cloud runtime, vLLM, or SGLang. llama.cpp discovery reads `total_slots` from the router's `/props`, falls back to the selected worker's `/props?model=<id>` when the router reports none, and falls back again to the `--parallel` argv on the selected `/v1/models` entry. LM Studio reads `config.parallel` off the loaded instance and otherwise reports one; Ollama reads `OLLAMA_NUM_PARALLEL` from the environment the Clio process can see and otherwise reports one.
287
238
 
288
- The limit is keyed on the endpoint rather than the target, so two targets pointed at the same normalized URL share it. Raising it above what the server will actually serve does not create capacity; it removes the refusal that would have told you the server was full. See [capacity-and-scheduling.md](capacity-and-scheduling.md) for the admission model and the exact denial text.
239
+ The limit is keyed on the endpoint rather than the target, so two targets pointed at the same normalized URL share it. Raising it above what the server will actually serve does not create capacity; it removes the refusal that would have told you the server was full. See [capacity-and-scheduling.md](../architecture/capacity-and-scheduling.md) for the admission model and the exact denial text.
289
240
 
290
241
  ### The `local-native` tier
291
242
 
@@ -293,9 +244,9 @@ Three behaviors in this release are gated on a runtime's tier being `local-nativ
293
244
 
294
245
  The tier means "an inference server the operator runs, whose prefix cache and resident model Clio's own behavior can displace." That is what the three gates are actually asking:
295
246
 
296
- - **Pre-warm** runs only here, whatever `prewarm.enabled` says, because a cloud provider bills the request and caches on its own schedule. The check is made twice, once from configuration before any runtime is resolved and once against the resolved runtime, so an unreachable target does not pay for a capability probe at boot just to be told no.
247
+ - **Pre-warm** runs only here, whatever `chat.prewarm` says, because a cloud provider bills the request and caches on its own schedule. The check is made twice, once from configuration before any runtime is resolved and once against the resolved runtime, so an unreachable target does not pay for a capability probe at boot just to be told no.
297
248
  - **Endpoint capacity** defaults to one slot here when discovery reports nothing, and to unbounded elsewhere. vLLM and SGLang are the deliberate exceptions inside the tier: both serve genuinely concurrent requests, so an undiscovered limit is left unbounded rather than guessed at one.
298
- - **Five of the eight expected-cold reasons** are stamped only here, because a single-slot local cache is the only one an interleaved run actually displaces. The other three moved the prompt bytes themselves and are stamped on every tier. The full split is in [context-engine.md](context-engine.md#cache-divergence-honesty).
249
+ - **Five of the eight expected-cold reasons** are stamped only here, because a single-slot local cache is the only one an interleaved run actually displaces. The other three moved the prompt bytes themselves and are stamped on every tier. The full split is in [context-engine.md](../architecture/context-engine.md#cache-divergence-honesty).
299
250
 
300
251
  The tool-prose-loop detector is keyed on the same tier, for the same reason: narrating a tool call instead of emitting one is a behavior of open-weight models served locally, and a list of server names would have left an Ollama or vLLM run with no cutoff at all.
301
252
 
@@ -375,26 +326,65 @@ block. Set them in LM Studio's My Models load settings or with `lms load`; the C
375
326
  configuration that `GET /api/v1/models` exposes instead of pretending it applied settings the REST
376
327
  load endpoint did not accept (<https://lmstudio.ai/docs/developer/rest/list>).
377
328
 
378
- `defaults.maxTokens` is a global output budget requested for every turn (default `32768`). At request time it is always clamped down to the model's known max-output cap and the remaining context window, so a model that supports less automatically gets less and no per-model tuning is required. A per-target `capabilities.maxTokens` override still records the model's true cap; the request never exceeds it. Set `defaults.maxTokens: 0` to disable the global default and fall back to per-model caps only.
379
-
380
- The setting `workers.maxRetries` controls the maximum number of automated retries for retryable failures during fleet dispatch. Setting this value to `0` disables retries entirely.
381
-
382
- The setting `workers.onPermission` decides how noninteractive workers handle a tool call that asks for permission. It supports three modes:
329
+ `chat.maxOutputTokens` is a global output budget requested for every turn. Its
330
+ default `0` uses each model's known maximum-output cap, still clamped to the
331
+ remaining context window. Models with no known cap use a 32,768-token ceiling
332
+ instead of the whole remaining context window. A per-target
333
+ `capabilities.maxTokens` override records the model's true cap. Set a positive
334
+ value to impose a smaller global ceiling.
335
+
336
+ `context.toolResultMaxBytes` caps one tool result before Clio truncates the
337
+ visible body and spills the complete text to the session scratch file. It
338
+ defaults to 65,536 bytes and accepts integers of at least 4,096. The setting is
339
+ read before every tool result, so a session override or configuration reload
340
+ applies to the next result. The separate
341
+ `safety.limits.observationBytesPerTurn` guardrail remains 196,608 bytes. Three
342
+ full-size results consume that shared turn pool, so a fourth finds it filled.
343
+
344
+ The setting `fleet.retry.maxRetries` controls automated retries for retryable
345
+ fleet failures. Setting it to `0` disables retries.
346
+
347
+ The setting `fleet.permissions.mode` decides how noninteractive workers handle
348
+ a tool call that asks for permission. It supports three modes:
383
349
  - `deny`: Immediately returns a structured denial to the model, and the run continues.
384
- - `fail`: Finalizes the run as failed, exiting the worker subprocess with exit code 3 ([WORKER_EXIT_PERMISSION_REQUIRED](../src/worker/spec-contract.ts)).
385
- - `escalate`: Parks the tool call, emits a `clio_permission_escalated` event, and waits for an operator decision on standard input (`stdin`). If no operator decision is received within the configured `workers.escalation.timeoutMs` duration, it applies the fallback posture. If the worker is running headlessly (no operator attached) or under runtimes like `claude-sdk` that lack a native stdin park loop, the system collapses the `escalate` posture to the non-stall fallback posture immediately.
386
-
387
- The `workers.escalation` block defines parameters for the escalation mode:
350
+ - `fail`: Finalizes the run as failed, exiting the worker subprocess with exit code 3 ([WORKER_EXIT_PERMISSION_REQUIRED](../../src/worker/spec-contract.ts)).
351
+ - `escalate`: Parks the tool call, emits a `clio_coder_permission_escalated` event,
352
+ and waits for an operator decision. If no decision arrives within
353
+ `fleet.permissions.escalation.timeoutMs`, it applies the configured fallback.
354
+ A headless worker or runtime without an operator channel collapses to that
355
+ non-stall fallback immediately.
356
+
357
+ The `fleet.permissions.escalation` block defines parameters for escalation:
388
358
  - `timeoutMs` (default `120000`): The wall-clock budget in milliseconds before the parked call applies the fallback.
389
359
  - `fallback` (default `deny`): The fallback posture (`deny` or `fail`) applied upon timeout.
390
360
 
391
- The setting `workers.resilienceCooldownMs` specifies the cooldown duration in milliseconds between retries to allow target recovery.
392
-
393
- The `routing` block controls the two independent activation boundaries for measured dispatch. Joint target/model/runtime/node selection becomes active only when both the assignment's execution role and requested posture appear in `activeRoles` and `activePostures`; otherwise the same resolver records a shadow recommendation without changing execution. Active mode also requires the route-readiness report to pass and fails closed when no candidate is ready. Manual pins and `failover: none` remain exact in every mode.
394
-
395
- Agent automation is separately shadowed. Each `routing.agentAutomation.activeAgentRoles` item must be an exact `{agentId, executionRole}` pair, for example `{agentId: scout, executionRole: researcher}`. An `agent: auto` request may change agents only for a listed pair whose per-agent, per-role readiness report passes. Hard constraints eliminate candidates before scoring, and a Scout split or role transition carries typed bounded subtasks through coordinator-owned authority rather than silently broadening the original assignment.
396
-
397
- The `guardrails` section holds the numeric backstops that bound runaway agent behavior. `turnToolCallBudget` (default `60`) is the orchestrator's per-turn soft tool-call budget: crossing it blocks every further call in the turn with a stop-and-summarize directive, and a hard ceiling 15 calls above it interrupts the turn outright. Separately, an identical-call loop guard trips when the same tool is called with identical arguments three times inside a 30s window; the first two blocks feed the model a strategy-change directive (and, when the looped call already returned a successful result earlier in the run, point it at that result instead), and reaching the second block per turn locks tool use for the rest of that turn so the model answers from what it already gathered, rather than cancelling a turn that may already hold the answer. Only a bounded backstop (two further tool calls after the lockout) falls back to the hard stop. This lockout is an orchestrator behavior (interactive, headless, and ACP alike). Dispatched workers use an agent-owned admitted-call phase for graceful synthesis and retain `workerToolCallCap` (default `150`) as the independent lifetime ceiling for one worker run. The cap bounds calls that execute: an attempt denied by policy or permission posture spends it, but one the harness itself refused as steering (a reserve-window block, a synthesis-lockout denial) never ran and never does. It is sized so the recipe's own budget is what normally binds, since admission resolves `min(declared, cap)` and only the recipe knows the shape of its job. Executed calls beyond it terminate the worker with `workerToolCallCap reached (...)` in receipt diagnostics; a model that keeps calling after a lockout instead ends on the bounded per-round synthesis backstop. `maxDispatchRuns` (default `1000`) caps dispatch run-ledger retention. `readMaxBytes` (default `51200`) caps one read-tool call, and `observationTurnBudgetBytes` (default `196608`) is the shared per-turn byte pool across all observation-producing tools. `internalDispatchTimeoutMs` (default `900000`, fifteen minutes) is the wall-clock cap for one internal generator dispatch (the wiki documenter and the bootstrap scout); it exists because a model that keeps streaming without finishing can spend no new tool attempts while satisfying the heartbeat watchdog indefinitely, and on timeout the run is aborted with the timeout cause recorded in its receipt. Each value also has a per-process env override intended for CI and one-off experiments (see [environment-variables.md](environment-variables.md)); the settings file is the durable home.
361
+ `fleet.retry.routeCooldownMs` is the cooldown between retries on a failed
362
+ route.
363
+
364
+ `fleet.adaptiveRouting` controls the two independent activation boundaries for
365
+ measured dispatch. Joint target/model/runtime/node selection becomes active
366
+ only when both the assignment's execution role and requested posture appear in
367
+ `roles` and `postures`; otherwise the resolver records a shadow recommendation
368
+ without changing execution. Active mode also requires route readiness. Manual
369
+ pins and `failover: none` remain exact.
370
+
371
+ Agent automation is separately shadowed. Each
372
+ `fleet.adaptiveRouting.agentRoles` item must be an exact
373
+ `{agentId, executionRole}` pair. An `agent: auto` request may change agents only
374
+ for a listed pair whose readiness report passes.
375
+
376
+ Version 2 places numeric backstops beside the behavior they govern.
377
+ `safety.limits.chatToolCallsPerTurn` (default `60`) is the main-agent soft
378
+ tool-call budget; the hard interrupt ceiling remains 15 calls above it.
379
+ `fleet.limits.toolCallsPerRun` (default `150`) is the independent lifetime cap
380
+ for one worker and can only narrow a recipe budget. `fleet.history.maxRuns`
381
+ (default `1000`) bounds durable dispatch history.
382
+ `safety.limits.readBytesPerCall` (default `51200`) bounds one read, while
383
+ `safety.limits.observationBytesPerTurn` (default `196608`) is the shared
384
+ per-turn observation pool. `fleet.limits.internalRunTimeoutMs` (default
385
+ `900000`) bounds an internal generator dispatch. These settings are the only
386
+ operator-facing policy paths for the limits and refresh with the effective
387
+ session view.
398
388
 
399
389
  Agent recipe budgets define a normal admitted-call phase inside `workerToolCallCap`; they do not replace it. A declared phase boundary is clamped down to the cap, and when the two are equal the last call may complete and the graceful synthesis transition happens without requiring an over-cap call. The recipe's `readReserve` is the tail of that phase. It admits canonical `read` plus whatever mutation tools the agent was actually granted, because the reserve exists to end broad discovery rather than to stop an agent from delivering: a writer whose product is files has to be able to write them in its last calls. An agent with no mutation tools keeps a read-only reserve and the request-level `require_tool(read)` lock. The reserve becomes zero when `read` is absent from the admitted schema surface, and never installs a nonexistent read requirement. Calls the reserve refuses are steering rather than work: they neither run nor spend the cap, and a model that keeps calling discovery tools there reaches the same bounded synthesis lockout a spent budget ends in.
400
390
 
@@ -468,339 +458,214 @@ Plain `clio-coder doctor` is read-only. `clio-coder doctor --fix` creates missin
468
458
  directories and template files, repairs credential permissions, and refreshes
469
459
  install metadata. It validates `settings.yaml` directly against the current
470
460
  schema but never rewrites removed keys or migrates an old settings shape. Any
471
- unknown or retired key remains a validation error for the operator to edit
472
- deliberately.
461
+ unknown or retired key remains a validation error on that doctor run.
462
+ Registered `clio-coder upgrade` migrations are the narrow exception. Upgrade
463
+ moves a version-1 or unversioned settings document into the version-2 areas,
464
+ records the migration, and keeps the byte-exact original as
465
+ `settings.yaml.v1.bak`. A source/destination collision refuses the migration
466
+ without replacing the original. Other reported paths still require deliberate
467
+ editing.
473
468
 
474
469
  ---
475
470
 
476
471
  ## Live routing vs saved defaults
477
472
 
478
- The routing keys in `settings.yaml` (`orchestrator.*`, `background.*`, `workers.default.*`, `scope`) are **defaults**, not a live control surface. Each interactive session seeds its routing from them at launch and owns it from then on:
479
-
480
- - Interactive changes (`/model`, Alt+L, `/settings`, Shift+Tab, `/thinking`, Alt+J / Alt+K, `/scoped-models`) apply to the current session immediately and are written back as the defaults for sessions launched later.
481
- - Writes from other processes, such as a second Clio session, `clio-coder targets use`, `clio-coder configure`, or a manual edit, update the defaults and the shared target catalog. These writes never redirect a running session's chat or fleet routing. The running session shows a notice when the saved defaults diverge from its active routing.
482
- - Non-routing settings (theme, keybindings, autonomy level, retry, compaction, commit attribution, target catalog entries) still hot-reload into running sessions as before.
483
- - `/resume` and `/new` switch sessions, not routing: the terminal keeps its active target/model/thinking across session switches.
484
-
485
- This is what makes several concurrent Clio terminals safe: each one routes through its own state, and `settings.yaml` only decides where the *next* session starts.
486
-
487
- Supporting mechanics:
488
-
489
- - **The `/settings` Center tracks live state.** Every editable row re-derives from the session's effective settings after each committed edit and whenever the shared snapshot reloads while the Center is open. Changing `orchestrator.target` rebases `orchestrator.model` on the new target's default model, matching Alt+L and `clio-coder targets use`, and the `orchestrator.thinkingLevel` row immediately offers the levels the new model supports. Cursor position and any open submenu are preserved across refreshes.
490
- - **Saved-default writes are serialized across processes.** Every settings writer (interactive write-throughs, `clio-coder targets`, `clio-coder configure`) performs its read-modify-write under an advisory lock file (`settings.yaml.lock`) and lands the result via an atomic temp-file + rename. Two processes saving defaults at the same time can no longer drop each other's patches, readers never block and never see partial files, and a lock left behind by a dead process is taken over after a few seconds.
491
- - **Recently selected models are runtime state, not configuration.** They live in the state dir (`recent-models.json`), so an Alt+L pick never rewrites `settings.yaml` and never pings the config watcher in other running sessions. Settings validation is strict: a `state.recentModels` key in `settings.yaml` is an unknown-key error during normal startup and must be removed deliberately. `modelSelector.favorites` stays in `settings.yaml` because favorites are deliberate user configuration.
492
- - **ACP sessions get the notices through the session ledger.** Sessions served over the Agent Client Protocol (`clio-coder` in ACP mode) have the same routing isolation, but ACP v1 offers no agent-initiated advisory channel: its `session/update` union only carries prompt-turn content, and out-of-turn updates would break strict clients. The external-divergence and target-removed notices are therefore recorded as `custom` session-ledger entries (`customType: "clio.routing-notice"`), visible to `/resume` and session tooling.
473
+ The routing keys in `settings.yaml`—`chat.*`, `context.memory.*`,
474
+ `fleet.default.*`, and `chat.modelPicker.*`—are defaults. Each interactive
475
+ session seeds its route at launch and then owns that active route:
476
+
477
+ - Interactive changes through `/model`, `/thinking`, `/settings`, and the
478
+ model-picker keys apply to the current session after confirmation and can be
479
+ saved as defaults for later sessions.
480
+ - Writes from another process update shared defaults and the target catalog,
481
+ but never redirect a running session. The active session reports when its
482
+ route differs from the saved default.
483
+ - Non-routing values apply at the boundary named in the
484
+ [settings inventory](#settings-inventory): immediately, next turn, next
485
+ dispatch, next session, or restart.
486
+ - `/resume` and `/new` switch session history without silently changing the
487
+ terminal's active target, model, or thinking level.
488
+
489
+ Every settings writer uses an advisory lock and atomic replacement, so
490
+ concurrent saves cannot expose a partial YAML file. Recently selected models
491
+ are machine state in `recent-models.json`; deliberate favorites remain
492
+ configuration under `chat.modelPicker.favorites`. ACP sessions preserve
493
+ routing-divergence notices in the session ledger because ACP v1 has no
494
+ out-of-turn advisory channel.
493
495
 
494
496
  ---
495
497
 
496
498
  ## Settings Center
497
499
 
498
- Open `/settings` in the TUI to edit session-visible defaults in a full-screen transactional Center. Wide terminals (≥72 columns) show sections in a left sidebar and the selected section's rows in the main pane; ultrawide terminals (≥112 columns) expand the layout to include a dedicated right-hand inspector. Below 72 columns, the Center switches to a modal drill-down stack (section list → section rows → detail drawer) with breadcrumbs, `/` search filtering, and `Esc` backtracking. Below 60 columns, side margins drop to zero for full-width presentation.
500
+ Open `/settings` in the TUI to edit session-visible values and saved defaults.
501
+ Wide terminals use a section sidebar and detail inspector; narrow terminals
502
+ switch to a drill-down flow with breadcrumbs, search, and `Esc` backtracking.
499
503
 
500
- Every value change in Settings is transactional: selecting an editable row and pressing `Enter` opens a dedicated value picker, text input dialog, or provider-backed checklist (rather than immediately cycling values). Clio constructs an immutable change plan with preflight impact analysis and presents explicit destination choices:
501
- - `Apply this session` (for live-capable settings)
504
+ Every edit is transactional. Depending on the setting, the confirmation offers:
505
+
506
+ - `Apply this session`
502
507
  - `Apply and save globally`
503
- - `Cancel` (or `Esc`)
508
+ - `Cancel`
504
509
 
505
- For restart-required settings (`budget.concurrency`, `runtimePlugins`, `terminal.tuiMode`, `terminal.fullscreenScrollbar`), the session-only option is suppressed and global saving announces `Saved to settings.yaml · restart Clio to apply`. For destructive actions (removing a target or fleet profile), the confirmation preflight details affected chat, fleet, and memory routes before execution.
510
+ Restart-required settings—`fleet.concurrency`,
511
+ `integrations.runtimePlugins`, `interface.mode`, and
512
+ `interface.fullscreenScrollbar`—offer only global save and say that Clio must
513
+ restart. Destructive actions such as removing a target or fleet profile show
514
+ the affected chat, fleet, and memory routes before confirmation.
506
515
 
507
- The Settings Center organizes all configuration under four non-selectable group headers:
516
+ The durable configuration has seven top-level areas, and `/settings` accepts
517
+ each as a stable deep link:
508
518
 
509
- | Group | Section | Rows, in order |
510
- | --- | --- | --- |
511
- | **CORE** | Autonomy & Safety (`safety`) | `autonomy`, `workers.onPermission`, the escalation bounds that keep that posture non-stall (`workers.escalation.timeoutMs`, `workers.escalation.fallback`), `delegation.defaults.toolGovernance`, `skills.trustProjectCompatRoots`, and the read-only safety-net fact. |
512
- | **CORE** | Orchestrator (`orchestrator`) | `orchestrator.thinkingLevel`, `orchestrator.target`, `orchestrator.model`, the memory plane (`background.target`, `background.model`, `background.thinkingLevel`), and the proactive-memory knobs (`memory.intervention.enabled`, `.everyNTools`, `.windowSteps`, `.maxTokens`, `.timeoutMs`), and `prewarm.enabled`. Changing target rebases model and thinking choices. |
513
- | **ROUTING** | Fleet (`fleet`) | `workers.default.target`, `workers.default.model`, `workers.default.thinkingLevel`, `workers.maxRetries`, `workers.resilienceCooldownMs`, `workers.profiles`, `workers.agentBindings`, and the routing activation set (`routing.activeRoles`, `routing.activePostures`, and the read-only `routing.agentAutomation.activeAgentRoles`), rendered under the group headers `Defaults`, `Profiles`, `Agent routes`, `Route activation`, and `Placement`. Profile rows carry a `◆ Edit` drill-down and a destructive removal preflight; placement rows are read-only node status. |
514
- | **ROUTING** | Targets (`targets`) | The `targets` console table (`HEALTH`, `ID`, `ROLES`, `RUNTIME`, `LATENCY`) with an in-place action and detail drawer for URL, default model, last probe, and failure reason. Actions include `Use`, `Connect`, `Probe`, and `Remove`. |
515
- | **ROUTING** | Models (`models`) | `scope`, `modelSelector.recentLimit`, and `modelSelector.favorites`, rendered as a provider-backed checklist with target-level and target/model entries, `Space` toggle, capability inspector, and a preserved `Unavailable` group. Deep link `/scoped-models`. |
516
- | **RUNTIME** | Budget (`budget`) | `budget.sessionCeilingUsd`, `defaults.maxTokens`, `budget.concurrency` (restart required), and the six `guardrails.*` backstops under a `Guardrails` group header. |
517
- | **RUNTIME** | Compaction (`compaction`) | `compaction.auto`, `compaction.threshold`, `compaction.excludeLastTurns`, and the five `context.workingSet.*` keys under a `Working set` group header. |
518
- | **RUNTIME** | Retry (`retry`) | `retry.enabled`, `retry.maxRetries`, `retry.baseDelayMs`, `retry.maxDelayMs`, and `retry.streamStallMs`. |
519
- | **EXPERIENCE** | Terminal (`terminal`) | `terminal.showTerminalProgress`, `terminal.outputVerbosity` (`minimal`, `default`, `verbose`), `terminal.tuiMode` (`regular`, `fullscreen`), `terminal.fullscreenScrollbar` (`hidden`, `auto`, `always`), `terminal.smoothStreaming` (`off`, `auto`, `on`), `terminal.notify`, and `theme`. |
520
- | **EXPERIENCE** | Watchdog (`watchdog`) | `watchdog.enabled`, `watchdog.target`, and `watchdog.cadenceToolCalls`. The two optional keys are editable text rows that render their absence as `(session target)` and `(turn end only)`; submitting an empty value removes the key from `settings.yaml` rather than storing a blank. |
521
- | **EXPERIENCE** | Advanced (`advanced`) | `runtimePlugins`, `attribution.gitCommits`, `compaction.model`, `compaction.systemPrompt`, `delegation.defaults.connectTimeoutMs`, `delegation.defaults.turnTimeoutMs`, `delegation.defaults.permissionTimeoutMs`, `keybindings`, `delegation.agents`, and the four `library.*` keys under a `Library` group header. `library.confirmedRemote` is read-only: the confirm flow writes it, because confirming a remote from its own row would be the trust record confirming itself. |
522
-
523
- Every key `settings.yaml` accepts now has a row, except the ones the Center cannot edit as a nested structure: `workers.rosters` and `routing.agentAutomation.activeAgentRoles` are authored in `settings.yaml`, and the latter has a read-only row that reports the active pairs. `tests/contracts/settings-center.test.ts` enforces this against `DEFAULT_SETTINGS`.
524
-
525
- Label to config path mapping:
526
-
527
- | Label | Config path |
519
+ | Area | What it owns |
528
520
  | --- | --- |
529
- | Autonomy level | `autonomy` |
530
- | Fleet approvals routing | `workers.onPermission` |
531
- | Escalation timeout (ms) | `workers.escalation.timeoutMs` |
532
- | Escalation fallback | `workers.escalation.fallback` (`deny` or `fail`) |
533
- | Delegation governance | `delegation.defaults.toolGovernance` |
534
- | Trust project skill roots | `skills.trustProjectCompatRoots` |
535
- | Safety net | read-only fact, no config path |
536
- | Thinking level | `orchestrator.thinkingLevel` |
537
- | Target | `orchestrator.target` |
538
- | Model | `orchestrator.model` |
539
- | Memory target | `background.target` |
540
- | Memory model | `background.model` |
541
- | Memory thinking level | `background.thinkingLevel` |
542
- | Proactive memory | `memory.intervention.enabled` |
543
- | Memory cadence (tools) | `memory.intervention.everyNTools` |
544
- | Memory trajectory steps | `memory.intervention.windowSteps` |
545
- | Memory reminder tokens | `memory.intervention.maxTokens` |
546
- | Memory timeout (ms) | `memory.intervention.timeoutMs` |
547
- | Prompt pre-warm | `prewarm.enabled` |
548
- | Default target | `workers.default.target` |
549
- | Default model | `workers.default.model` |
550
- | Default thinking level | `workers.default.thinkingLevel` |
551
- | Fleet retries | `workers.maxRetries` |
552
- | Resilience cooldown (ms) | `workers.resilienceCooldownMs` (0 disables the cooldown) |
553
- | Active routing roles | `routing.activeRoles` (comma-separated from `researcher`, `verifier`, `reviewer`, `judge`) |
554
- | Active routing postures | `routing.activePostures` (comma-separated from `quality`, `balanced`, `latency`, `economy`) |
555
- | Active agent routes | `routing.agentAutomation.activeAgentRoles` (read-only; edit the pairs in `settings.yaml`) |
556
- | Add profile | `workers.profiles` |
557
- | Add agent route | `workers.agentBindings` |
558
- | Configured targets | `targets` |
559
- | Model cycle set | `scope` |
560
- | Recent models kept | `modelSelector.recentLimit` |
561
- | Pinned favorites | `modelSelector.favorites` |
562
- | Session ceiling (USD) | `budget.sessionCeilingUsd` |
563
- | Output budget (tokens) | `defaults.maxTokens` |
564
- | Fleet concurrency | `budget.concurrency` (restart required) |
565
- | Turn tool-call budget | `guardrails.turnToolCallBudget` |
566
- | Worker tool-call cap | `guardrails.workerToolCallCap` |
567
- | Run ledger retention | `guardrails.maxDispatchRuns` |
568
- | Read byte cap | `guardrails.readMaxBytes` |
569
- | Observation byte pool | `guardrails.observationTurnBudgetBytes` |
570
- | Internal dispatch timeout (ms) | `guardrails.internalDispatchTimeoutMs` |
571
- | Auto-compact | `compaction.auto` |
572
- | Compaction threshold | `compaction.threshold` |
573
- | Protected recent turns | `compaction.excludeLastTurns` |
574
- | Working-set eviction | `context.workingSet.enabled` |
575
- | Eviction policy | `context.workingSet.policy` (`structural-v1` or `age-horizon`) |
576
- | Eviction target pressure | `context.workingSet.target` (greater than 0, less than 1) |
577
- | Turns protected from eviction | `context.workingSet.protectLastTurns` |
578
- | Minimum evictable tokens | `context.workingSet.minEvictableTokens` |
579
- | Retry transient errors | `retry.enabled` |
580
- | Max retries | `retry.maxRetries` |
581
- | Base delay (ms) | `retry.baseDelayMs` |
582
- | Max delay (ms) | `retry.maxDelayMs` |
583
- | Stream stall timeout (ms) | `retry.streamStallMs` |
584
- | Terminal progress badges | `terminal.showTerminalProgress` |
585
- | Output detail | `terminal.outputVerbosity` (`minimal`, `default`, or `verbose`) |
586
- | TUI mode | `terminal.tuiMode` (`regular` or `fullscreen`, restart required) |
587
- | Fullscreen scrollbar | `terminal.fullscreenScrollbar` (`hidden`, `auto`, or `always`, restart required) |
588
- | Smooth streaming | `terminal.smoothStreaming` (`off`, `auto`, or `on`, live) |
589
- | Desktop notifications | `terminal.notify` |
590
- | Turn-end watchdog | `watchdog.enabled` |
591
- | Watchdog target | `watchdog.target` (blank clears the key) |
592
- | Watchdog cadence (tools) | `watchdog.cadenceToolCalls` (integer ≥ 1; blank clears the key) |
593
- | Theme | `theme` |
594
- | Runtime plugins | `runtimePlugins` |
595
- | Clio commit provenance | `attribution.gitCommits` (`enabled` or `disabled`, live) |
596
- | Compaction model | `compaction.model` |
597
- | Compaction prompt | `compaction.systemPrompt` |
598
- | Delegate connect (ms) | `delegation.defaults.connectTimeoutMs` |
599
- | Delegate turn (ms) | `delegation.defaults.turnTimeoutMs` |
600
- | Delegate permission (ms) | `delegation.defaults.permissionTimeoutMs` |
601
- | Keybinding overrides | `keybindings` |
602
- | Delegation agents | `delegation.agents` |
603
- | Library catalog path | `library.catalog` (blank uses the config directory) |
604
- | Library remote | `library.remote` (blank keeps the library local) |
605
- | Confirmed library remote | `library.confirmedRemote` (read-only; written by the confirm flow) |
606
- | Library sync | `library.sync` |
521
+ | `chat` | Active target/model defaults, thinking, model picker, output budget, pre-warm, and interactive retry |
522
+ | `fleet` | Worker defaults, profiles, rosters, routes, nodes, permissions, capacity, limits, retry, and run history |
523
+ | `targets` | Runtime connections, advertised models, auth metadata, and capability overrides |
524
+ | `context` | Working set, compaction, and proactive memory |
525
+ | `safety` | Autonomy, cost/tool/read limits, and the optional review watchdog |
526
+ | `interface` | Output detail, terminal behavior, notifications, keybindings, and experimental pane settings |
527
+ | `integrations` | Project-resource trust, external agents, runtime plugins, resource library, and Git attribution |
528
+
529
+ The Center groups rows with task-oriented labels such as Orchestrator, Targets,
530
+ Models, Fleet, Budget, and Terminal. The YAML paths shown in row details and in
531
+ this guide remain the canonical version-2 paths in the inventory below.
607
532
 
608
533
  ---
609
534
 
610
535
  ## Settings inventory
611
536
 
612
- Every key `settings.yaml` accepts, with its shipped default, what validation admits, and when a change takes effect. `DEFAULT_SETTINGS` in `src/core/defaults.ts` is the one place a default is written; validation lives in `src/core/config.ts`. A key absent from this table is an unknown-key error, not a silently ignored typo. The one exception is `identity`, which pre-0.3.1 files carry: it is accepted and ignored so those files keep loading.
613
-
614
- "When it applies" has four values. **Immediately** means a running session picks the change up from the config watcher. **Next turn** means the running turn finishes on the old value. **Next session** means `settings.yaml` is a saved default that a launched session copies and then owns, so writing it never redirects a session already running. **Restart** means the process reads it once at boot.
537
+ This is the version-2 durable schema shipped in `DEFAULT_SETTINGS`. Validation is strict: a path absent from this inventory is rejected, including a retired version-1 path. `clio-coder upgrade` performs the one-time v1-to-v2 rename before configuration-domain load and keeps the original as the sibling `settings.yaml.v1.bak` backup.
615
538
 
616
- ### Routing defaults
539
+ "When it applies" follows the configuration classifier. **Immediately** means a running process observes the value without rebuilding runtime state. **Next turn** and **next dispatch** mean current work finishes on the old value. **Next session** identifies routing defaults copied into session-owned state at launch. **Restart** means process or pane-host setup must be rebuilt.
617
540
 
618
- These are saved defaults, not a live control surface. See [Live routing vs saved defaults](#live-routing-vs-saved-defaults).
541
+ ### Structural and target catalog
619
542
 
620
543
  | Key | Default | Validation | When it applies |
621
544
  | --- | --- | --- | --- |
622
- | `orchestrator.target` | `null` | a target id present in `targets` | next session |
623
- | `orchestrator.model` | `null` | string | next session |
624
- | `orchestrator.thinkingLevel` | `off` | `off`, `minimal`, `low`, `medium`, `high`, `xhigh`, `max`; further narrowed to what the resolved model supports | next session |
625
- | `background.target` | `null` | a target id present in `targets` | next session |
626
- | `background.model` | `null` | string | next session |
627
- | `background.thinkingLevel` | `off` | as above | next session |
628
- | `workers.default.target` | `null` | a target id present in `targets` | next session |
629
- | `workers.default.model` | `null` | string | next session |
630
- | `workers.default.thinkingLevel` | `off` | as above | next session |
631
- | `scope` | `[]` | list of strings | next session |
632
-
633
- ### Safety and worker policy
634
-
635
- `workers.rosters.<name>.members` defines council membership beside
636
- `workers.profiles`. Every member accepts `label`, `target`, and the optional
637
- keys `model`, `thinking`, and `color`. Labels must match
638
- `[a-z][a-z0-9_-]{0,31}` and must be unique inside the roster. A roster contains
639
- two to five members. Colors accept a theme token such as `accent`, `success`,
640
- or `reason`, or a six-digit hexadecimal value such as `#5ba8ff`. Unknown roster
641
- and member keys are rejected during configuration load. The existing settings
642
- watcher validates and publishes roster changes with every other hot reload.
545
+ | `version` | `2` | integer, exactly `2` | restart |
546
+ | `targets` | `[]` | target descriptor list with unique ids and registered runtimes | next turn for the catalog; next session for saved routing defaults |
643
547
 
644
- | Key | Default | Validation | When it applies |
645
- | --- | --- | --- | --- |
646
- | `autonomy` | `auto-edit` | `read-only`, `suggest`, `auto-edit`, `full-auto` | immediately |
647
- | `workers.onPermission` | `deny` | `deny`, `fail`, `escalate` | next dispatch |
648
- | `workers.escalation.timeoutMs` | `120000` | integer ≥ 1 | next dispatch |
649
- | `workers.escalation.fallback` | `deny` | `deny`, `fail` | next dispatch |
650
- | `workers.maxRetries` | `2` | integer ≥ 0 | next dispatch |
651
- | `workers.resilienceCooldownMs` | `15000` | integer ≥ 0 | next dispatch |
652
- | `workers.profiles` | `{}` | map of profile name to a target/model/thinking choice | next dispatch |
653
- | `workers.rosters` | `{}` | map of roster name to 2 to 5 council members | next dispatch |
654
- | `workers.agentBindings` | `{}` | map of agent id to a key present in `workers.profiles` | next dispatch |
655
- | `skills.trustProjectCompatRoots` | `false` | boolean | restart |
656
- | `library.catalog` | `null` | string or null | immediately |
657
- | `library.remote` | `null` | string or null | immediately |
658
- | `library.confirmedRemote` | `null` | string or null | immediately |
659
- | `library.sync` | `false` | boolean | immediately |
660
-
661
- ### Git commit provenance
548
+ ### Chat
662
549
 
663
550
  | Key | Default | Validation | When it applies |
664
551
  | --- | --- | --- | --- |
665
- | `attribution.gitCommits` | `true` | boolean | immediately for subsequent commits |
666
-
667
- Enabled attribution adds the compiled identity `Clio Coder <clio-coder@iowarp.ai>` only through evidence-justified role trailers. Assistance requires material creation or editing, testing requires a successful recorded validation command, and review requires a passing independent verifier. `Co-authored-by` is the GitHub/GitLab contributor and avatar compatibility trailer and appears only for material authorship, never for testing or review alone. Disabling the setting leaves commit messages entirely unchanged. Full hook behavior, evidence semantics, and how GitHub and GitLab render the identity and avatar once maintainers verify the email are in [git-commit-provenance.md](git-commit-provenance.md).
668
-
669
- ### Guardrails
670
-
671
- Every one of these has an environment override for a single process; see [environment-variables.md](environment-variables.md). Resolution is env, then settings, then the built-in default.
552
+ | `chat.target` | `null` | configured target id or null | next session |
553
+ | `chat.model` | `null` | string or null | next session |
554
+ | `chat.thinkingLevel` | `low` | `off`, `minimal`, `low`, `medium`, `high`, `xhigh`, `max` | next session |
555
+ | `chat.modelPicker.cycleSet` | `[]` | list of target or target/model references | immediately for this session; next session as the saved default |
556
+ | `chat.modelPicker.favorites` | `[]` | list of target/model references | immediately |
557
+ | `chat.modelPicker.recentLimit` | `12` | integer ≥ 1 | immediately |
558
+ | `chat.maxOutputTokens` | `0` | integer ≥ 0; `0` uses the model cap or the 32,768-token fallback when unknown | next turn |
559
+ | `chat.prewarm` | `true` | boolean | next turn |
560
+ | `chat.retry.enabled` | `true` | boolean | next turn |
561
+ | `chat.retry.maxRetries` | `3` | integer ≥ 0 | next turn |
562
+ | `chat.retry.baseDelayMs` | `2000` | integer ≥ 0 | next turn |
563
+ | `chat.retry.maxDelayMs` | `60000` | integer ≥ 0 | next turn |
564
+ | `chat.retry.streamStallMs` | `180000` | integer ≥ 0; `0` disables the stall timer | next turn |
565
+
566
+ ### Fleet
567
+
568
+ `fleet.rosters.<name>.members` contains two to five members. Each member has a unique `label`, a `target`, and optional `model`, `thinkingLevel`, and `color`. `fleet.agentProfiles` is the persisted agent-id-to-profile map.
672
569
 
673
570
  | Key | Default | Validation | When it applies |
674
571
  | --- | --- | --- | --- |
675
- | `guardrails.turnToolCallBudget` | `60` | integer ≥ 1 | next turn |
676
- | `guardrails.workerToolCallCap` | `150` | integer ≥ 1 | next dispatch |
677
- | `guardrails.maxDispatchRuns` | `1000` | integer ≥ 1 | next dispatch |
678
- | `guardrails.readMaxBytes` | `51200` | integer ≥ 1, floored at 1024 by the tool | next turn |
679
- | `guardrails.observationTurnBudgetBytes` | `196608` | integer ≥ 1 | next turn |
680
- | `guardrails.internalDispatchTimeoutMs` | `900000` | integer ≥ 1 | next dispatch |
681
-
682
- ### Context and cost
572
+ | `fleet.default.target` | `null` | configured target id or null | next session |
573
+ | `fleet.default.model` | `null` | string or null | next session |
574
+ | `fleet.default.thinkingLevel` | `off` | supported thinking level | next session |
575
+ | `fleet.profiles` | `{}` | map of profile name to target/model/thinking/optional-node routes | next dispatch |
576
+ | `fleet.rosters` | `{}` | map of roster name to council members | next dispatch |
577
+ | `fleet.agentProfiles` | `{}` | map of native agent id to an existing fleet profile | next dispatch |
578
+ | `fleet.nodes` | `[]` | list of validated local/SSH node descriptors | next dispatch |
579
+ | `fleet.adaptiveRouting.roles` | `[]` | subset of `researcher`, `verifier`, `reviewer`, `judge` | next dispatch |
580
+ | `fleet.adaptiveRouting.postures` | `[]` | subset of `quality`, `balanced`, `latency`, `economy` | next dispatch |
581
+ | `fleet.adaptiveRouting.agentRoles` | `[]` | exact agent-id/execution-role pairs | next dispatch |
582
+ | `fleet.permissions.mode` | `deny` | `deny`, `fail`, `escalate` | next dispatch |
583
+ | `fleet.permissions.escalation.timeoutMs` | `120000` | integer ≥ 1 | next dispatch |
584
+ | `fleet.permissions.escalation.fallback` | `deny` | `deny` or `fail` | next dispatch |
585
+ | `fleet.concurrency` | `auto` | `auto` or integer ≥ 1 | restart |
586
+ | `fleet.retry.maxRetries` | `2` | integer ≥ 0 | next dispatch |
587
+ | `fleet.retry.routeCooldownMs` | `15000` | integer ≥ 0 | next dispatch |
588
+ | `fleet.limits.toolCallsPerRun` | `150` | integer ≥ 1 | next dispatch |
589
+ | `fleet.limits.internalRunTimeoutMs` | `900000` | integer ≥ 1 | next dispatch |
590
+ | `fleet.history.maxRuns` | `1000` | integer ≥ 1 | next dispatch |
591
+ | `fleet.history.journal` | `true` | boolean | next dispatch |
592
+
593
+ ### Context
683
594
 
684
595
  | Key | Default | Validation | When it applies |
685
596
  | --- | --- | --- | --- |
686
- | `compaction.auto` | `true` | boolean | next turn |
687
- | `compaction.threshold` | `0.8` | number in 0 to 1 | next turn |
688
- | `compaction.excludeLastTurns` | `6` | integer ≥ 1 | next turn |
597
+ | `context.toolResultMaxBytes` | `65536` | integer ≥ 4096; complete overflow spills to the session scratch file; three full-size results consume the default 196,608-byte turn pool, so a fourth finds it filled | next turn; a live session change applies to the next tool result |
689
598
  | `context.workingSet.enabled` | `true` | boolean | next turn |
690
- | `context.workingSet.policy` | `structural-v1` | `age-horizon` or `structural-v1` | next turn |
599
+ | `context.workingSet.policy` | `structural-v1` | `structural-v1` or `age-horizon` | next turn |
691
600
  | `context.workingSet.target` | `0.6` | number greater than 0 and less than 1 | next turn |
692
601
  | `context.workingSet.protectLastTurns` | `6` | integer ≥ 1 | next turn |
693
602
  | `context.workingSet.minEvictableTokens` | `200` | integer ≥ 0 | next turn |
694
- | `prewarm.enabled` | `true` | boolean | next turn |
695
- | `panes.enabled` | `off` | `auto`, `embedded`, or `off` | restart; `--with-panes` / `--no-panes` beat it |
696
- | `panes.notifications` | `failures` | `failures`, `all`, or `off` | next dispatch |
697
- | `panes.journal` | `true` | boolean | next dispatch |
698
- | `panes.yazi.enabled` | `true` | boolean | immediately, on the next files-pane open |
699
- | `panes.yazi.mode` | `companion` | `companion` or `chooser` | immediately, on the next files-pane open |
700
- | `panes.yazi.profile` | `managed` | `managed` or `user` | immediately, on the next files-pane open |
701
- | `panes.yazi.followCwd` | `true` | boolean | immediately, on the next explicit files-pane open |
702
- | `defaults.maxTokens` | `32768` | integer ≥ 0 | next turn |
703
- | `budget.sessionCeilingUsd` | `5` | number ≥ 0 | immediately |
704
- | `budget.concurrency` | `auto` | `auto` or integer ≥ 1 | next dispatch |
705
- | `retry.enabled` | `true` | boolean | next turn |
706
- | `retry.maxRetries` | `3` | integer ≥ 0 | next turn |
707
- | `retry.baseDelayMs` | `2000` | integer ≥ 0 | next turn |
708
- | `retry.maxDelayMs` | `60000` | integer ≥ 0 | next turn |
709
- | `retry.streamStallMs` | `180000` | integer ≥ 0, `0` disables | next turn |
710
-
711
- `retry.streamStallMs` covers the failure a request error never reports: the backend answers `/health` while the slot behind the stream is dead. A run whose stream produces nothing for that long is aborted and handed to the same retry ladder as any transient error, so a headless run or a fleet worker recovers without a human pressing Esc. Time inside a tool call and inside the post-tool compaction guard does not count against it, so a long build is never mistaken for a wedged stream. Set it to `0` to keep the old behavior, where a stalled stream waits forever.
712
-
713
- Generic provider and transport errors are classified by transient retry rules, including DNS and WebSocket failures while excluding quota, usage-limit, and billing exhaustion even when the message also contains `429` or `500`. Clio adds only its local-runtime policy: model-loading errors receive a longer bounded delay, the TUI shows a cancellable countdown, and recovery resumes through the existing agent loop.
714
-
715
- ### Proactive memory
603
+ | `context.compaction.auto` | `true` | boolean | next turn |
604
+ | `context.compaction.threshold` | `0.8` | number from 0 through 1 | next turn |
605
+ | `context.compaction.model` | unset | non-empty string when present | next turn |
606
+ | `context.compaction.systemPrompt` | unset | non-empty path string when present | next turn |
607
+ | `context.memory.enabled` | `true` | boolean | next turn |
608
+ | `context.memory.target` | `null` | configured target id or null | next turn |
609
+ | `context.memory.model` | `null` | string or null | next turn |
610
+ | `context.memory.cadenceToolCalls` | `10` | integer ≥ 2 | next turn |
611
+ | `context.memory.trajectorySteps` | `8` | integer ≥ 1 | next turn |
612
+ | `context.memory.maxOutputTokens` | `2000` | integer ≥ 1 | next turn |
613
+ | `context.memory.timeoutMs` | `60000` | integer ≥ 1 | next turn |
614
+
615
+ ### Safety
616
+
617
+ The safety-limit leaves have no one-process `CLIO_CODER_*` overrides in the current schema. Resolution follows the normal settings stack, from session or project layers where supported through user `settings.yaml`, then the compiled default.
716
618
 
717
619
  | Key | Default | Validation | When it applies |
718
620
  | --- | --- | --- | --- |
719
- | `memory.intervention.enabled` | `true` | boolean | next turn |
720
- | `memory.intervention.everyNTools` | `10` | integer ≥ 2 | next turn |
721
- | `memory.intervention.windowSteps` | `8` | integer ≥ 1 | next turn |
722
- | `memory.intervention.maxTokens` | `400` | integer ≥ 1 | next turn |
723
- | `memory.intervention.timeoutMs` | `30000` | integer ≥ 1 | next turn |
724
-
725
- ### Turn-end watchdog
726
-
727
- | Key | Default | Validation | When it applies |
728
- | --- | --- | --- | --- |
729
- | `watchdog.enabled` | `false` | boolean | immediately |
730
- | `watchdog.target` | unset | non-empty target id | immediately |
731
- | `watchdog.cadenceToolCalls` | unset | integer ≥ 1 | immediately |
732
-
733
- The watchdog is off by default because it spends one worker run per mutating
734
- turn. With `enabled: true`, a turn that changed the tree is handed to one
735
- read-only `verifier` run briefed with the turn's coalesced diff and the task
736
- board's current scope. Its blockers become one transcript notice naming the
737
- count and the first three failed checks, and nothing else: it never follows up,
738
- never queues a turn, and never mutates. A passing report emits nothing at all. A
739
- turn with no file mutations never fires it.
740
-
741
- `watchdog.target` routes the run at a named target, which is how a cheap local
742
- model reviews turns run on a subscription route; unset, the run takes the
743
- session's active target. `watchdog.cadenceToolCalls: N` additionally fires the
744
- watchdog after every N tool calls inside a turn, with the same diff-and-scope
745
- briefing, so mid-turn scope drift is visible before the turn ends. At most one
746
- watchdog run is in flight at a time; a trigger that arrives while one is running
747
- is dropped and counted rather than queued. Headless and ACP runs never fire the
748
- watchdog regardless of the setting, because neither has an operator reading a
749
- transcript. The block has its own Settings Center section under EXPERIENCE ›
750
- Watchdog; clearing the target or the cadence row removes that key from
751
- `settings.yaml` rather than writing an empty value.
752
-
753
- ### Delegation
754
-
755
- | Key | Default | Validation | When it applies |
756
- | --- | --- | --- | --- |
757
- | `delegation.agents` | `[]` | list of agent definitions | next dispatch |
758
- | `delegation.defaults.connectTimeoutMs` | `30000` | integer ≥ 1 | next dispatch |
759
- | `delegation.defaults.turnTimeoutMs` | `300000` | integer ≥ 1 | next dispatch |
760
- | `delegation.defaults.permissionTimeoutMs` | `120000` | integer ≥ 1 | next dispatch |
761
- | `delegation.defaults.toolGovernance` | `clio-policy` | `clio-policy`, `agent-managed`, `deny-all` | next dispatch |
762
-
763
- `delegation.agents` is the one settings key Clio itself appends to, and only after an explicit answer in `clio-coder configure --interop` or `/interop`. Everything else here is operator-authored.
621
+ | `safety.autonomy` | `auto-edit` | `read-only`, `suggest`, `auto-edit`, `full-auto` | immediately |
622
+ | `safety.limits.sessionCostUsd` | `5` | number ≥ 0 | next turn |
623
+ | `safety.limits.chatToolCallsPerTurn` | `60` | integer ≥ 1 | next turn |
624
+ | `safety.limits.readBytesPerCall` | `51200` | integer ≥ 1; the read tool applies its 1024-byte floor | next turn |
625
+ | `safety.limits.observationBytesPerTurn` | `196608` | integer ≥ 1 | next turn |
626
+ | `safety.review.enabled` | `false` | boolean | immediately |
627
+ | `safety.review.target` | unset | configured target id when present | immediately |
628
+ | `safety.review.cadenceToolCalls` | unset | integer ≥ 1 when present | immediately |
764
629
 
765
630
  ### Interface
766
631
 
767
632
  | Key | Default | Validation | When it applies |
768
633
  | --- | --- | --- | --- |
769
- | `theme` | `default` | string naming a registered theme | immediately |
770
- | `terminal.showTerminalProgress` | `false` | boolean | immediately |
771
- | `terminal.outputVerbosity` | `default` | `minimal`, `default`, `verbose` | immediately |
772
- | `terminal.tuiMode` | `regular` | `regular`, `fullscreen` | restart |
773
- | `terminal.fullscreenScrollbar` | `auto` | `hidden`, `auto`, `always` | restart |
774
- | `terminal.smoothStreaming` | `off` | `off`, `auto`, `on` | immediately |
775
- | `terminal.notify` | `false` | boolean | immediately |
776
- | `modelSelector.favorites` | `[]` | list of strings | immediately |
777
- | `modelSelector.recentLimit` | `12` | integer ≥ 1 | immediately |
778
- | `keybindings` | `{}` | map of binding id to a key string or list of them | restart |
779
-
780
- `terminal.notify` turns on a content-free desktop notification for the three
781
- moments an operator is waiting: a turn ends, a detached fleet batch settles, and
782
- a worker permission or `ask_user` request parks. The payload is fixed. The title
783
- is always `clio-coder` and the body comes from a closed vocabulary (`turn
784
- finished`, `batch <shortId> settled`, `approval needed`), so no prompt text, file
785
- path, or model output ever leaves the process in a notification. Clio emits OSC
786
- 777 by default and OSC 9 on iTerm2, Windows Terminal, and ConEmu, never both for
787
- one event. Headless, ACP, and non-TTY runs never emit one regardless of the
788
- setting. The knob has a Settings Center row under EXPERIENCE › Terminal,
789
- labeled `Desktop notifications`.
790
-
791
- Recently selected models are runtime state and live in `recent-models.json` under the state directory, not here. A `state.recentModels` key in `settings.yaml` is an unknown-key error.
792
-
793
- ### Structural and catalog keys
634
+ | `interface.terminalProgress` | `false` | boolean | next turn |
635
+ | `interface.outputDetail` | `default` | `minimal`, `default`, `verbose` | next turn |
636
+ | `interface.mode` | `regular` | `regular` or `fullscreen` | restart |
637
+ | `interface.fullscreenScrollbar` | `auto` | `hidden`, `auto`, `always` | restart |
638
+ | `interface.smoothStreaming` | `off` | `off`, `auto`, `on` | immediately |
639
+ | `interface.desktopNotifications` | `false` | boolean | next turn |
640
+ | `interface.panes.enabled` | `off` | `auto`, `embedded`, `off` | restart |
641
+ | `interface.panes.notifications` | `failures` | `failures`, `all`, `off` | immediately |
642
+ | `interface.panes.layout` | `off` | `off`, `workers`, `cockpit` | restart |
643
+ | `interface.panes.workers.ratio` | `0.34` | finite dock ratio | restart |
644
+ | `interface.panes.files.enabled` | `false` | boolean | immediately on the next files-pane open |
645
+ | `interface.panes.files.mode` | `companion` | `companion` or `chooser` | immediately on the next files-pane open |
646
+ | `interface.panes.files.profile` | `managed` | `managed` or `user` | immediately on the next files-pane open |
647
+ | `interface.panes.files.followCwd` | `true` | boolean | immediately on the next files-pane open |
648
+ | `interface.panes.files.ratio` | `0.3` | finite dock ratio | restart |
649
+ | `interface.keybindings` | `{}` | map of binding id to a key string or list of strings | immediately |
650
+
651
+ ### Integrations
794
652
 
795
653
  | Key | Default | Validation | When it applies |
796
654
  | --- | --- | --- | --- |
797
- | `version` | `1` | integer, currently `1` only | restart |
798
- | `targets` | `[]` | list of target descriptors, each with a unique id and a registered runtime | immediately for the catalog, next session for routing |
799
- | `runtimePlugins` | `[]` | list of plugin descriptors | restart |
800
- | `fleet.nodes` | `[]` | list of node descriptors | next dispatch |
801
- | `routing.activeRoles` | `[]` | list of strings; empty keeps measured routing shadow-only | next dispatch |
802
- | `routing.activePostures` | `[]` | list of strings | next dispatch |
803
- | `routing.agentAutomation.activeAgentRoles` | `[]` | list of strings | next dispatch |
655
+ | `integrations.projectResources.trustProjectImports` | `false` | boolean | next turn |
656
+ | `integrations.externalAgents.entries` | `[]` | list of validated ACP agent definitions | next dispatch |
657
+ | `integrations.externalAgents.defaults.connectTimeoutMs` | `30000` | integer ≥ 1 | next dispatch |
658
+ | `integrations.externalAgents.defaults.turnTimeoutMs` | `300000` | integer ≥ 1 | next dispatch |
659
+ | `integrations.externalAgents.defaults.permissionTimeoutMs` | `120000` | integer ≥ 1 | next dispatch |
660
+ | `integrations.externalAgents.defaults.toolGovernance` | `clio-coder-policy` | `clio-coder-policy`, `agent-managed`, `deny-all` | next dispatch |
661
+ | `integrations.runtimePlugins` | `[]` | list of plugin package names | restart |
662
+ | `integrations.library.catalog` | `null` | string or null | next turn |
663
+ | `integrations.library.remote` | `null` | string or null | next turn |
664
+ | `integrations.library.confirmedRemote` | `null` | string or null | next turn |
665
+ | `integrations.library.sync` | `false` | boolean | next turn |
666
+ | `integrations.git.commitAttribution` | `true` | boolean | immediately for subsequent commits |
667
+
668
+ The retired v1-only paths `identity`, `background.thinkingLevel`, `theme`, and `compaction.excludeLastTurns` have no v2 replacement. Fresh v2 files naming them receive targeted removal diagnostics. The v1 migrator drops them with the reason recorded in its migration report; they are tombstones, not executable aliases.
804
669
 
805
670
  ---
806
671
 
@@ -851,13 +716,22 @@ Review and connect detected agents with:
851
716
  clio-coder configure --interop
852
717
  ```
853
718
 
854
- On a terminal this walks the pending proposals one at a time, showing the exact YAML entry before it asks, and writes only what you answer yes to. Without a TTY it prints the proposals and exits 0 with `settings.yaml` byte-identical, which is what `scripts/install-local.sh` runs after `doctor --fix`. The interactive `clio-coder configure` wizard ends with the same review, and `/interop` in the TUI is the same flow as an overlay.
719
+ On a terminal this walks the pending proposals one at a time, showing the exact
720
+ YAML entry before it asks, and writes only what you answer yes to. Without a
721
+ TTY it prints the proposals and exits 0 with `settings.yaml` byte-identical.
722
+ The interactive `clio-coder configure` wizard ends with the same review, and
723
+ `/agents connect` in the TUI opens the same flow.
855
724
 
856
- No code path writes `delegation.agents` without an operator decision, and `doctor --fix` is not such a path. An accepted proposal appends exactly one entry through the serialized settings writer, which re-reads the file under its lock, so two processes accepting different agents cannot drop each other's entry. The appended entry carries `toolGovernance: clio-policy` and no `projectContext` key, so the peer inherits `projectContext: "none"` and receives your task text rather than the project projection. Both facts are shown before you are asked.
725
+ No code path writes `integrations.externalAgents.entries` without an operator
726
+ decision, and `doctor --fix` is not such a path. An accepted proposal appends
727
+ exactly one entry through the serialized settings writer under its lock. The
728
+ entry carries `toolGovernance: clio-coder-policy` and no `projectContext` key,
729
+ so the peer receives task text rather than the project projection. Both facts
730
+ are shown before confirmation.
857
731
 
858
732
  Decisions are recorded in `<CLIO_CODER_HOME>/state/interop.json`, schema v1, written atomically only when an explicit decision is taken; `doctor` and non-TTY `configure --interop` write nothing at all. Each decision is keyed by agent kind plus a fingerprint of the facts it was made against (version and path), so a declined agent stays silent while its binary path and version hold, and comes back as a fresh proposal when either moves. Accepting and declining in one review persists both decisions. A file this version cannot parse degrades to "no report" rather than acting on a half-read decision record. Project-scoped facts stay where they already live, in `.clio-coder/state.json` under `contextSources`.
859
733
 
860
- Clio never writes into a foreign agent's directory. The safety path policy carries a `noWritePaths` class populated from the same registry; see [safety-model.md](safety-model.md) for the enumerated classes.
734
+ Clio never writes into a foreign agent's directory. The safety path policy carries a `noWritePaths` class populated from the same registry; see [safety-model.md](../architecture/safety-model.md) for the enumerated classes.
861
735
 
862
736
  ---
863
737
 
@@ -911,7 +785,7 @@ clio-coder configure \
911
785
  --max-tokens 4096
912
786
  ```
913
787
 
914
- See [alcf-provider.md](alcf-provider.md) for the Globus login and ALCF discovery
788
+ See [alcf-provider.md](../architecture/alcf-provider.md) for the Globus login and ALCF discovery
915
789
  details.
916
790
 
917
791
  ### 3. Sanctioned Claude Code Worker Runtimes (Worker-Only)
@@ -940,12 +814,13 @@ You can drive Claude Code as an external delegation agent over the Agent Client
940
814
  - **Advisory Gating:** Under ACP, gating is **advisory** because Claude self-governs its tools; prefer `claude-sdk` for **enforced** per-tool safety where Clio's safety net intercepts every action class.
941
815
  - **Configuration Recipe:** Configure by adding a delegation agent in `settings.yaml` (a commented recipe is included by default):
942
816
  ```yaml
943
- delegation:
944
- agents:
945
- - id: claude-code
946
- command: npx
947
- args: ["-y", "@zed-industries/claude-code-acp"]
948
- toolGovernance: clio-policy
817
+ integrations:
818
+ externalAgents:
819
+ entries:
820
+ - id: claude-code
821
+ command: npx
822
+ args: ["-y", "@zed-industries/claude-code-acp"]
823
+ toolGovernance: clio-coder-policy
949
824
  ```
950
825
  Then invoke it using `/delegate claude-code <task>`.
951
826
 
@@ -980,7 +855,7 @@ Useful flags:
980
855
  | `--api-key <literal>` | Store an API key in `credentials.yaml`. |
981
856
  | `--force` | Allow model/capability choices outside the local catalog guardrails. |
982
857
  | `--gateway` | Mark target as a gateway. |
983
- | `--lifecycle <user-managed|clio-managed>` | Resident model lifecycle policy. An explicit `user-managed` makes Clio observe-only on this target (never load/unload models); unset means Clio manages residency. |
858
+ | `--lifecycle <user-managed|clio-coder-managed>` | Resident model lifecycle policy. An explicit `user-managed` makes Clio observe-only on this target (never load/unload models); unset means Clio manages residency. |
984
859
  | `--set-orchestrator` | Use this target as the chat default. |
985
860
  | `--set-fleet-default` | Use this target as the fleet default. |
986
861
  | `--context-window <N>` | Override the target context-window capability. |
@@ -1014,8 +889,6 @@ clio-coder targets rename <old> <new>
1014
889
 
1015
890
  Without `--fleet-target` the default fleet target follows the orchestrator, which is the single-node case. Pass `--fleet-target <id>` to keep them apart when one node orchestrates and another runs the fleet. The fleet target is validated for fleet dispatch through the same check a fleet profile uses, so it can be a worker-only runtime such as `claude-sdk`, `claude-code`, or `antigravity-code`. Its model defaults to that target's own default rather than the orchestrator's, because a model id resolved against one target means nothing on another; `--fleet-model <id>` names it explicitly. `clio-coder configure --set-fleet-default` and `clio-coder targets profile` remain the routes for per-agent fleet routing.
1016
891
 
1017
- `--worker-target` and `--worker-model` are accepted as aliases of `--fleet-target` and `--fleet-model`, carried over from before the worker/fleet rename.
1018
-
1019
892
  ### Target-Profile Subcommands
1020
893
 
1021
894
  The command `clio-coder targets profile` supports several subcommands to manage fleet worker profiles and agent bindings:
@@ -1028,7 +901,11 @@ The command `clio-coder targets profile` supports several subcommands to manage
1028
901
  - **unbind**: Unbind an agent from its profile. Use `clio-coder targets profile unbind <agentId>`.
1029
902
  - **bindings**: List active agent-to-profile bindings. Use `clio-coder targets profile bindings [--json]` to output details in JSON format.
1030
903
 
1031
- Inside the TUI, `/targets` opens Settings → Targets, the operational target console. Targets are rendered in a compact console table with columns for `HEALTH`, `ID`, `ROLES`, `RUNTIME`, and `LATENCY`, paired with an in-place action/detail drawer for URL, default model, last probe timestamp, and failure reason. Available actions include `Use` (switches active orchestrator target and rebases model to target default), `Connect` (executes API-key, OAuth, or no-auth setup then probes), `Probe` (runs immediate reachability probe with live activity indicator), and `Remove` (with preflight analysis of affected chat, fleet, and memory routes). Adding a target is performed via `clio-coder targets add`.
904
+ Inside the TUI, `/settings targets` opens the operational target console.
905
+ Targets render with `HEALTH`, `ID`, `ROLES`, `RUNTIME`, and `LATENCY`, plus a
906
+ detail drawer for URL, default model, last probe, and failure reason. Actions
907
+ include `Use`, `Connect`, `Probe`, and `Remove`; adding a target uses
908
+ `clio-coder targets add`.
1032
909
 
1033
910
  ### Context-Window Provenance
1034
911
 
@@ -1158,7 +1035,9 @@ OAuth refresh follows signal-aware credential mutation. Clio serializes the read
1158
1035
 
1159
1036
  Prefer `--api-key-env` for shared machines, HPC login nodes, and CI. Avoid committing literal secrets in settings or share archives. Stored keys are never printed back by `clio-coder auth status`, `clio-coder targets`, or `clio-coder configure`; only the source (env var name or `stored-api-key`) is shown.
1160
1037
 
1161
- For interactive auth, open `/targets`, select the row, and press `c`. For a stored credential cleanup, use `clio-coder auth logout <target-or-runtime>`.
1038
+ For interactive auth, open `/settings targets`, select the row, and press `c`.
1039
+ For stored credential cleanup, use
1040
+ `clio-coder auth logout <target-or-runtime>`.
1162
1041
 
1163
1042
  ---
1164
1043