@iowarp/clio-coder 0.3.1 → 0.3.3

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 (601) hide show
  1. package/CHANGELOG.md +233 -373
  2. package/CONTRIBUTING.md +23 -23
  3. package/README.md +284 -613
  4. package/dist/{acp-FPR54DGL.js → acp-P2AQILE2.js} +43 -53
  5. package/dist/{agents-OGPIHPJH.js → agents-72W3BI7I.js} +43 -26
  6. package/dist/assets/codewiki.json +1 -1
  7. package/dist/{auth-IC3K6NIZ.js → auth-5TWEIYDN.js} +20 -12
  8. package/dist/chunk-2DJ2KNFG.js +2095 -0
  9. package/dist/{chunk-IS3ONKU3.js → chunk-2IR2NMPA.js} +6 -4
  10. package/dist/chunk-2SFS6XQE.js +122 -0
  11. package/dist/{chunk-PV4JUBVJ.js → chunk-2TLUCQVG.js} +40 -21
  12. package/dist/chunk-2VTFPG5O.js +48 -0
  13. package/dist/chunk-4BJ5BYCE.js +61 -0
  14. package/dist/{chunk-474KN5II.js → chunk-4BPJXDWC.js} +111 -181
  15. package/dist/chunk-4VP4KH3K.js +962 -0
  16. package/dist/chunk-4XUGQOHA.js +797 -0
  17. package/dist/chunk-4ZG3XFUR.js +77 -0
  18. package/dist/chunk-5B2AEOW5.js +5407 -0
  19. package/dist/{chunk-K2ITRMHZ.js → chunk-5TSRNF4G.js} +6 -138
  20. package/dist/{chunk-4QKXUHSR.js → chunk-5UFT4SUX.js} +70 -20
  21. package/dist/{chunk-OLBBMFRD.js → chunk-5UUP6MWO.js} +24 -62
  22. package/dist/chunk-65DEGPJ6.js +52 -0
  23. package/dist/chunk-6EJMN2Y3.js +17 -0
  24. package/dist/chunk-6N5PTWMY.js +136 -0
  25. package/dist/chunk-6SGHMWE3.js +277 -0
  26. package/dist/chunk-6XLNIQDB.js +27 -0
  27. package/dist/chunk-7CR24IG7.js +242 -0
  28. package/dist/chunk-7MNJORFF.js +22 -0
  29. package/dist/{chunk-KY56HMHH.js → chunk-A3CYT5EX.js} +125 -31
  30. package/dist/chunk-AGYYIBLL.js +1069 -0
  31. package/dist/{chunk-GB6QRBXN.js → chunk-APJ265NV.js} +54 -1187
  32. package/dist/{chunk-673JJUWJ.js → chunk-BMEMKKIT.js} +2 -2
  33. package/dist/chunk-CBCAPZAA.js +229 -0
  34. package/dist/chunk-CMZWFGD2.js +352 -0
  35. package/dist/chunk-COU2UHX6.js +400 -0
  36. package/dist/chunk-DSELYM6W.js +1077 -0
  37. package/dist/chunk-DUYJ5IO6.js +644 -0
  38. package/dist/chunk-ECH6PKUQ.js +39 -0
  39. package/dist/chunk-ED4KHGC3.js +143 -0
  40. package/dist/chunk-EKMEHE4H.js +340 -0
  41. package/dist/chunk-FCSXB6T2.js +338 -0
  42. package/dist/chunk-FJ3H4MN5.js +48 -0
  43. package/dist/{chunk-RPTR2H26.js → chunk-FNTMWMX5.js} +21 -15
  44. package/dist/chunk-FQ4SKYE4.js +29 -0
  45. package/dist/chunk-G4BMMOKF.js +182 -0
  46. package/dist/{chunk-ZPY3JZ5E.js → chunk-GGXXDWE4.js} +183 -1233
  47. package/dist/chunk-HC4CLZ2Y.js +68 -0
  48. package/dist/{chunk-LU4TK2PR.js → chunk-HFSBBKSQ.js} +5 -56
  49. package/dist/{chunk-PIUMUEMV.js → chunk-HKIYEGME.js} +10 -6
  50. package/dist/chunk-I4HZDVNP.js +73 -0
  51. package/dist/chunk-IKCO5N3L.js +162 -0
  52. package/dist/chunk-IR4CFBFN.js +56 -0
  53. package/dist/{chunk-R5KLMSBV.js → chunk-J5Q24KAG.js} +2 -2
  54. package/dist/chunk-J7CWMCQD.js +255 -0
  55. package/dist/{chunk-K5XEMXTI.js → chunk-JVCV3ICN.js} +1 -1
  56. package/dist/chunk-KZWTDYJF.js +217 -0
  57. package/dist/chunk-LBMZMYH2.js +285 -0
  58. package/dist/{chunk-G34LV2PF.js → chunk-LM5TQCJZ.js} +84 -170
  59. package/dist/chunk-LW6DSM3M.js +5135 -0
  60. package/dist/chunk-LWLEKMDQ.js +3482 -0
  61. package/dist/{chunk-H6F6BYOH.js → chunk-LZSJBIVT.js} +7003 -7434
  62. package/dist/{chunk-HQQID6OA.js → chunk-M6SHUN7Q.js} +5 -5
  63. package/dist/{chunk-FST4FYJB.js → chunk-MFFY33HR.js} +99 -140
  64. package/dist/{chunk-BSU2YIWB.js → chunk-MVVUPGPW.js} +131 -136
  65. package/dist/chunk-OAO4GE4M.js +619 -0
  66. package/dist/{chunk-Q3RUPKEJ.js → chunk-OC7FIQPC.js} +58 -189
  67. package/dist/chunk-OKGUZO2U.js +34 -0
  68. package/dist/{chunk-GAEBEQVI.js → chunk-OOJYHWRB.js} +32 -346
  69. package/dist/{chunk-Q5WJOSJ7.js → chunk-OQ33BKR3.js} +2 -1
  70. package/dist/chunk-OQE5J4C6.js +73 -0
  71. package/dist/{chunk-KKNLWXI6.js → chunk-ORBHGJC5.js} +8 -8
  72. package/dist/{chunk-MAR7Y6HW.js → chunk-PAJK6MAQ.js} +23 -16
  73. package/dist/{chunk-M5T5VO65.js → chunk-PIWWS5BL.js} +837 -635
  74. package/dist/chunk-POHLU5DW.js +1186 -0
  75. package/dist/chunk-QKMUKYO7.js +4961 -0
  76. package/dist/chunk-SRDMMSEP.js +16405 -0
  77. package/dist/chunk-SST6Z5JA.js +80 -0
  78. package/dist/chunk-STBPMHSX.js +2456 -0
  79. package/dist/chunk-T6YILFSB.js +80 -0
  80. package/dist/chunk-TZK7PACC.js +174 -0
  81. package/dist/chunk-TZTZS7QK.js +227 -0
  82. package/dist/{chunk-ASND7OZK.js → chunk-UFIIWP2H.js} +13 -13
  83. package/dist/chunk-UOV2BYIW.js +107 -0
  84. package/dist/{chunk-PFEFKVGL.js → chunk-V6RTAOC2.js} +13 -11
  85. package/dist/chunk-VAKQQHWR.js +434 -0
  86. package/dist/chunk-VG7TBQIY.js +128 -0
  87. package/dist/chunk-VJWL6YS5.js +244 -0
  88. package/dist/{chunk-EYOKLTMF.js → chunk-VPAYEGVX.js} +17 -3
  89. package/dist/chunk-WEH5XRJQ.js +32 -0
  90. package/dist/chunk-X4RCMKVQ.js +641 -0
  91. package/dist/{chunk-TEKV33Q5.js → chunk-X6IAEBZR.js} +65 -33
  92. package/dist/chunk-XBXAASKX.js +18 -0
  93. package/dist/chunk-XN3L4EYL.js +46 -0
  94. package/dist/{chunk-RDLVBZEO.js → chunk-YCWGATWI.js} +6 -4
  95. package/dist/chunk-YHZX5GEU.js +193 -0
  96. package/dist/chunk-YXLYO42X.js +91 -0
  97. package/dist/{chunk-NMOX6HFD.js → chunk-ZDOOVTXZ.js} +29 -77
  98. package/dist/chunk-ZI647VB5.js +37 -0
  99. package/dist/{chunk-C4PTHK7P.js → chunk-ZWLZP4ZT.js} +5 -5
  100. package/dist/chunk-ZWMF7253.js +1882 -0
  101. package/dist/cli/index.js +62 -54
  102. package/dist/clio-JOU4FXVA.js +25 -0
  103. package/dist/code-nav-7AX6FYE6.js +600 -0
  104. package/dist/codewiki/build-worker.js +66 -0
  105. package/dist/compile-cache-CVJMMODC.js +18 -0
  106. package/dist/{components-DMAOEKFB.js → components-KELWS457.js} +11 -6
  107. package/dist/{config-IRUQ7SE4.js → config-XCDVKR23.js} +92 -55
  108. package/dist/configure-4GAP54ZW.js +42 -0
  109. package/dist/{context-5RADCKTR.js → context-4UOGGLQ5.js} +71 -35
  110. package/dist/context-5VKGUVJJ.js +866 -0
  111. package/dist/{context-3KWFLHJG.js → context-77FM5DV5.js} +15 -13
  112. package/dist/{context-clear-7TSNPAAI.js → context-clear-XXJRLCJJ.js} +54 -28
  113. package/dist/{context-index-W4RLWOQH.js → context-index-BZ4UYMTC.js} +30 -24
  114. package/dist/dispatch-runner-QPRDDBDX.js +1997 -0
  115. package/dist/{docs-5AWSPS37.js → docs-2C2LTVT2.js} +23 -10
  116. package/dist/{doctor-UC5NAJYQ.js → doctor-HR46URBJ.js} +27 -17
  117. package/dist/{eval-U6TJHRLX.js → eval-XSSNATB4.js} +29 -16
  118. package/dist/{evidence-YEGUW4L3.js → evidence-6HG2PY2B.js} +46 -26
  119. package/dist/{evolve-TXARCTPG.js → evolve-K7YU3NCY.js} +45 -25
  120. package/dist/{extensions-OZFJ3A3G.js → extensions-QVDOHDGJ.js} +16 -7
  121. package/dist/{fleet-6G3DHNYE.js → fleet-VY3HHKN6.js} +163 -54
  122. package/dist/{fleet-preflight-DSNT37JK.js → fleet-preflight-DDN536IT.js} +7 -4
  123. package/dist/{init-KZ5QTF6M.js → init-JYGXI3FK.js} +69 -32
  124. package/dist/{memory-73ESV5YC.js → memory-WFZMGYHX.js} +48 -27
  125. package/dist/{models-A4PVNWJK.js → models-I5QWSEOM.js} +39 -25
  126. package/dist/monitor-GE4ID3IA.js +661 -0
  127. package/dist/{chunk-FCIH3BIZ.js → orchestrator-EM5MC3HM.js} +15979 -12407
  128. package/dist/{paths-C4H6IV77.js → paths-UXLN5YYZ.js} +10 -5
  129. package/dist/{preload-6WVMHX3A.js → preload-P6DGH2PZ.js} +2 -2
  130. package/dist/{reset-BGW6OGMV.js → reset-L2FQEE3E.js} +16 -10
  131. package/dist/{run-YTPEYQOH.js → run-ZU3QMZPZ.js} +101 -61
  132. package/dist/{share-YIFFV4NQ.js → share-S5BZQC5I.js} +15 -8
  133. package/dist/{skills-2V6RA3OQ.js → skills-X5VXCRNQ.js} +34 -14
  134. package/dist/{skills-eval-S2TVJO4F.js → skills-eval-WKIHWTHR.js} +70 -34
  135. package/dist/steer-GGWFUJUD.js +77 -0
  136. package/dist/{targets-TYXLPB23.js → targets-SNCPI2NR.js} +43 -27
  137. package/dist/terminal-lease-BNAHVHBS.js +395 -0
  138. package/dist/{trace-GGOJ6Q6Z.js → trace-PNCASAXC.js} +41 -16
  139. package/dist/{chunk-N6F52NLF.js → tree-sitter-HGKH6LG4.js} +28 -2306
  140. package/dist/{uninstall-LLLT4F4W.js → uninstall-FZCQCDKC.js} +10 -5
  141. package/dist/{upgrade-33G2LMM5.js → upgrade-JQHHPQ4K.js} +45 -25
  142. package/dist/{usage-ZAFSXKKG.js → usage-OR4O5SMZ.js} +62 -31
  143. package/dist/verify-375KUB3Y.js +716 -0
  144. package/dist/web-fetch-2YHJ3KTG.js +638 -0
  145. package/dist/{wiki-generate-NUQCVOQ3.js → wiki-generate-UEXP2ARI.js} +74 -34
  146. package/dist/worker/entry.js +221 -36
  147. package/dist/workspace-G4ZWUIPR.js +22 -0
  148. package/docs/README.md +22 -17
  149. package/docs/acp.md +168 -16
  150. package/docs/alcf-provider.md +1 -1
  151. package/docs/architecture.md +136 -7
  152. package/docs/artifact-versions.md +1 -1
  153. package/docs/built-in-agents.md +1 -1
  154. package/docs/capacity-and-scheduling.md +1 -1
  155. package/docs/commands-and-modes.md +114 -71
  156. package/docs/config-knobs-audit.md +1 -3
  157. package/docs/configuration-and-targets.md +174 -46
  158. package/docs/context-engine.md +29 -6
  159. package/docs/development-pipeline.md +26 -1
  160. package/docs/dispatch-architecture-rationale.md +1 -1
  161. package/docs/documentation-coverage.md +2 -2
  162. package/docs/documentation-guide.md +1 -1
  163. package/docs/environment-variables.md +13 -5
  164. package/docs/eval-runner.md +1 -1
  165. package/docs/evals-internal.md +1 -1
  166. package/docs/evidence-and-memory.md +6 -2
  167. package/docs/evolution.md +2 -2
  168. package/docs/exit-codes-and-output.md +15 -9
  169. package/docs/extensions-and-sharing.md +9 -9
  170. package/docs/fleet-dispatch.md +7 -5
  171. package/docs/git-commit-provenance.md +120 -0
  172. package/docs/glossary.md +1 -1
  173. package/docs/installation-and-lifecycle.md +34 -27
  174. package/docs/middleware-and-components.md +1 -1
  175. package/docs/model-catalog.md +45 -14
  176. package/docs/observability.md +8 -5
  177. package/docs/performance-methodology.md +491 -0
  178. package/docs/pi-boundary.md +72 -0
  179. package/docs/proactive-memory.md +3 -3
  180. package/docs/prompt-envelope-and-tools.md +24 -3
  181. package/docs/provider-adapter-cookbook.md +57 -4
  182. package/docs/release-cut-checklist.md +129 -115
  183. package/docs/safety-model.md +9 -5
  184. package/docs/scientific-validation.md +3 -3
  185. package/docs/session-lifecycle.md +55 -12
  186. package/docs/skills-marketplace.md +12 -8
  187. package/docs/time-conventions.md +1 -1
  188. package/docs/tool-usage.md +3 -3
  189. package/docs/trace-store.md +1 -1
  190. package/docs/troubleshooting.md +10 -7
  191. package/docs/tui-design.md +47 -10
  192. package/docs/worker-dispatch-mechanics.md +1 -1
  193. package/package.json +19 -22
  194. package/skills/coding/ast-grep/SKILL.md +136 -0
  195. package/skills/coding/ast-grep/evals.md +56 -0
  196. package/skills/coding/ast-grep/references/rule_reference.md +297 -0
  197. package/skills/coding/coding-standards/SKILL.md +113 -0
  198. package/skills/coding/coding-standards/evals.md +34 -0
  199. package/skills/coding/prototype/SKILL.md +86 -0
  200. package/skills/coding/prototype/evals.md +42 -0
  201. package/skills/coding/prototype/references/LOGIC.md +67 -0
  202. package/skills/coding/prototype/references/UI.md +112 -0
  203. package/skills/coding/tdd/SKILL.md +101 -0
  204. package/skills/coding/tdd/evals.md +41 -0
  205. package/skills/coding/tdd/references/mocking.md +59 -0
  206. package/skills/coding/tdd/references/tests.md +77 -0
  207. package/skills/context/context-handoff/SKILL.md +126 -0
  208. package/skills/context/context-handoff/evals.md +57 -0
  209. package/skills/context/context-handoff/scripts/new-handoff.sh +26 -0
  210. package/skills/context/context-prime/SKILL.md +95 -0
  211. package/skills/context/context-prime/evals.md +54 -0
  212. package/skills/meta/clio-dev/SKILL.md +91 -0
  213. package/skills/meta/clio-dev/evals.md +45 -0
  214. package/skills/meta/clio-test/SKILL.md +130 -0
  215. package/skills/meta/clio-test/evals.md +43 -0
  216. package/skills/meta/clio-test/references/harness.md +97 -0
  217. package/skills/meta/clio-test/references/test-map.md +59 -0
  218. package/skills/meta/credentials/SKILL.md +125 -0
  219. package/skills/meta/credentials/evals.md +104 -0
  220. package/skills/meta/find-skills/SKILL.md +72 -0
  221. package/skills/meta/find-skills/evals.md +47 -0
  222. package/skills/meta/herdr/SKILL.md +127 -0
  223. package/skills/meta/herdr/evals.md +38 -0
  224. package/skills/meta/skill-craft/SKILL.md +102 -0
  225. package/skills/meta/skill-craft/evals.md +41 -0
  226. package/skills/planning/architecture/SKILL.md +129 -0
  227. package/skills/planning/architecture/evals.md +36 -0
  228. package/skills/planning/backlog/SKILL.md +90 -0
  229. package/skills/planning/backlog/evals.md +43 -0
  230. package/skills/planning/prd/SKILL.md +82 -0
  231. package/skills/planning/prd/evals.md +49 -0
  232. package/skills/planning/product-intent/SKILL.md +112 -0
  233. package/skills/planning/product-intent/evals.md +36 -0
  234. package/skills/planning/tech-spec/SKILL.md +115 -0
  235. package/skills/planning/tech-spec/evals.md +47 -0
  236. package/skills/registry.yaml +136 -0
  237. package/skills/research/arxiv-literature/SKILL.md +104 -0
  238. package/skills/research/arxiv-literature/evals.md +58 -0
  239. package/skills/research/experiment-protocol/SKILL.md +122 -0
  240. package/skills/research/experiment-protocol/evals.md +91 -0
  241. package/skills/research/scientific-debugging/SKILL.md +119 -0
  242. package/skills/research/scientific-debugging/evals.md +138 -0
  243. package/skills/research/scientific-modernization/SKILL.md +138 -0
  244. package/skills/research/scientific-modernization/evals.md +84 -0
  245. package/skills/workflow/design-council/SKILL.md +139 -0
  246. package/skills/workflow/design-council/evals.md +97 -0
  247. package/skills/workflow/grill-me/SKILL.md +186 -0
  248. package/skills/workflow/grill-me/evals.md +78 -0
  249. package/skills/workflow/workflow-distiller/SKILL.md +136 -0
  250. package/skills/workflow/workflow-distiller/evals.md +107 -0
  251. package/src/cli/acp.ts +31 -4
  252. package/src/cli/clio.ts +68 -6
  253. package/src/cli/config-inspect.ts +28 -22
  254. package/src/cli/configure.ts +47 -9
  255. package/src/cli/context-clear.ts +2 -2
  256. package/src/cli/context-index.ts +21 -23
  257. package/src/cli/context.ts +13 -8
  258. package/src/cli/default-target.ts +9 -17
  259. package/src/cli/docs.ts +11 -5
  260. package/src/cli/evidence.ts +4 -1
  261. package/src/cli/extensions.ts +10 -1
  262. package/src/cli/fleet.ts +47 -6
  263. package/src/cli/index.ts +55 -26
  264. package/src/cli/memory.ts +3 -1
  265. package/src/cli/models.ts +1 -1
  266. package/src/cli/modes/json-stream.ts +37 -1
  267. package/src/cli/modes/print.ts +24 -9
  268. package/src/cli/run.ts +2 -2
  269. package/src/cli/skills-eval.ts +23 -8
  270. package/src/cli/skills.ts +19 -4
  271. package/src/cli/targets.ts +4 -0
  272. package/src/cli/text-layout.ts +15 -5
  273. package/src/cli/trace.ts +62 -14
  274. package/src/cli/upgrade.ts +18 -2
  275. package/src/cli/usage.ts +10 -3
  276. package/src/cli/wiki-generate.ts +2 -1
  277. package/src/core/agent-environment.ts +7 -0
  278. package/src/core/bash-exec.ts +72 -1
  279. package/src/core/boot-trace.ts +9 -4
  280. package/src/core/bus-events.ts +20 -4
  281. package/src/core/commit-attribution.ts +157 -0
  282. package/src/core/compile-cache.ts +159 -0
  283. package/src/core/config.ts +131 -2
  284. package/src/core/defaults.ts +39 -5
  285. package/src/core/domain-loader.ts +12 -5
  286. package/src/core/git-commit-attribution.ts +387 -0
  287. package/src/core/incomplete-installation.ts +45 -0
  288. package/src/core/response-schema.ts +1 -1
  289. package/src/core/safe-exec.ts +13 -1
  290. package/src/core/settings-layers.ts +155 -21
  291. package/src/core/skill-activation.ts +1 -1
  292. package/src/core/startup-timer.ts +3 -3
  293. package/src/core/state-file-lock.ts +13 -1
  294. package/src/core/termination.ts +78 -5
  295. package/src/domains/config/classify.ts +15 -3
  296. package/src/domains/config/extension.ts +19 -13
  297. package/src/domains/config/index.ts +10 -0
  298. package/src/domains/config/keybindings.ts +45 -9
  299. package/src/domains/context/bootstrap-prompt.ts +1 -1
  300. package/src/domains/context/bootstrap.ts +111 -18
  301. package/src/domains/context/clear.ts +16 -11
  302. package/src/domains/context/clio-md.ts +111 -9
  303. package/src/domains/context/codewiki/artifact.ts +400 -0
  304. package/src/domains/context/codewiki/build-worker-protocol.ts +24 -0
  305. package/src/domains/context/codewiki/build-worker.ts +54 -0
  306. package/src/domains/context/codewiki/coordinator.ts +182 -0
  307. package/src/domains/context/codewiki/indexer.ts +59 -144
  308. package/src/domains/context/codewiki/paths.ts +67 -0
  309. package/src/domains/context/codewiki/schema.ts +80 -0
  310. package/src/domains/context/codewiki/tree-sitter.ts +1 -1
  311. package/src/domains/context/contract.ts +11 -5
  312. package/src/domains/context/extension.ts +94 -143
  313. package/src/domains/context/fingerprint.ts +3 -1
  314. package/src/domains/context/index.ts +12 -22
  315. package/src/domains/context/project-metadata.ts +19 -0
  316. package/src/domains/context/prompt-context.ts +9 -10
  317. package/src/domains/context/refresh.ts +29 -21
  318. package/src/domains/context/runtime.ts +17 -0
  319. package/src/domains/context/wiki/generate.ts +39 -34
  320. package/src/domains/context/wiki/plan.ts +1 -1
  321. package/src/domains/context/wiki/prompts.ts +21 -8
  322. package/src/domains/dispatch/code-step.ts +20 -1
  323. package/src/domains/dispatch/extension.ts +158 -21
  324. package/src/domains/dispatch/failure-classification.ts +6 -0
  325. package/src/domains/dispatch/fleet-commit-attribution.ts +56 -0
  326. package/src/domains/dispatch/orphan-recovery.ts +50 -8
  327. package/src/domains/dispatch/receipt-integrity.ts +5 -0
  328. package/src/domains/dispatch/state.ts +31 -6
  329. package/src/domains/dispatch/transport.ts +2 -1
  330. package/src/domains/dispatch/types.ts +14 -0
  331. package/src/domains/dispatch/worker-spawn.ts +21 -2
  332. package/src/domains/eval/metrics/context.ts +1 -1
  333. package/src/domains/eval/types.ts +0 -1
  334. package/src/domains/evidence/build.ts +41 -1
  335. package/src/domains/lifecycle/migrations/2026-08-18-lmstudio-runtime-id.ts +52 -0
  336. package/src/domains/lifecycle/migrations/index.ts +24 -4
  337. package/src/domains/middleware/hooks-io.ts +12 -0
  338. package/src/domains/middleware/skills-reminder.ts +30 -15
  339. package/src/domains/prompts/compiler.ts +142 -84
  340. package/src/domains/prompts/contract.ts +18 -2
  341. package/src/domains/prompts/extension.ts +39 -7
  342. package/src/domains/prompts/fragment-loader.ts +0 -1
  343. package/src/domains/prompts/fragments/identity/clio.md +2 -4
  344. package/src/domains/prompts/fragments/identity/docs-routing.md +10 -0
  345. package/src/domains/prompts/fragments/identity/self-awareness.md +1 -45
  346. package/src/domains/prompts/fragments/operating/contract.md +4 -50
  347. package/src/domains/prompts/fragments/operating/delegation.md +42 -0
  348. package/src/domains/prompts/fragments/operating/skills.md +26 -0
  349. package/src/domains/prompts/fragments/operating/worker.md +16 -0
  350. package/src/domains/prompts/fragments/safety/auto-edit.md +5 -5
  351. package/src/domains/prompts/fragments/safety/full-auto.md +3 -3
  352. package/src/domains/prompts/fragments/safety/read-only.md +4 -4
  353. package/src/domains/prompts/fragments/safety/suggest.md +2 -2
  354. package/src/domains/prompts/fragments/wiki/page.md +10 -0
  355. package/src/domains/prompts/fragments/wiki/plan.md +10 -0
  356. package/src/domains/prompts/preload.ts +3 -3
  357. package/src/domains/providers/auth/api-key.ts +1 -1
  358. package/src/domains/providers/auth/backend-file.ts +20 -10
  359. package/src/domains/providers/auth/backend-memory.ts +59 -4
  360. package/src/domains/providers/auth/boot-status.ts +65 -0
  361. package/src/domains/providers/auth/oauth.ts +2 -1
  362. package/src/domains/providers/auth/storage.ts +97 -38
  363. package/src/domains/providers/capabilities.ts +12 -4
  364. package/src/domains/providers/contract.ts +15 -4
  365. package/src/domains/providers/extension.ts +18 -6
  366. package/src/domains/providers/model-runtime-capabilities.ts +15 -4
  367. package/src/domains/providers/models/local-models/clio-local-coding-targets.yaml +118 -35
  368. package/src/domains/providers/plugins.ts +5 -3
  369. package/src/domains/providers/probe/fingerprint.ts +25 -5
  370. package/src/domains/providers/registry.ts +31 -10
  371. package/src/domains/providers/runtimes/boot-manifest.ts +55 -0
  372. package/src/domains/providers/runtimes/builtins.ts +2 -2
  373. package/src/domains/providers/runtimes/common/lmstudio-http.ts +423 -0
  374. package/src/domains/providers/runtimes/common/local-synth.ts +6 -7
  375. package/src/domains/providers/runtimes/local-native/lmstudio.ts +241 -0
  376. package/src/domains/providers/support.ts +6 -3
  377. package/src/domains/providers/types/local-model-quirks.ts +7 -9
  378. package/src/domains/providers/types/runtime-descriptor.ts +12 -1
  379. package/src/domains/providers/types/target-descriptor.ts +22 -0
  380. package/src/domains/resources/contract.ts +0 -1
  381. package/src/domains/resources/extension.ts +1 -3
  382. package/src/domains/resources/loader.ts +3 -4
  383. package/src/domains/resources/prompts/loader.ts +16 -2
  384. package/src/domains/resources/prompts/substitute.ts +1 -65
  385. package/src/domains/resources/skills/content-hash.ts +2 -0
  386. package/src/domains/resources/skills/install.ts +17 -0
  387. package/src/domains/resources/skills/loader.ts +17 -10
  388. package/src/domains/resources/skills/marketplace.ts +55 -9
  389. package/src/domains/safety/action-classifier.ts +4 -2
  390. package/src/domains/safety/audit.ts +8 -2
  391. package/src/domains/safety/extension.ts +1 -1
  392. package/src/domains/session/compaction/branch-summary.ts +3 -2
  393. package/src/domains/session/compaction/cut-point.ts +2 -1
  394. package/src/domains/session/compaction/tokens.ts +2 -1
  395. package/src/domains/session/context-ledger.ts +14 -0
  396. package/src/domains/session/contract.ts +15 -0
  397. package/src/domains/session/decision-board.ts +190 -0
  398. package/src/domains/session/entries.ts +66 -3
  399. package/src/domains/session/extension.ts +93 -12
  400. package/src/domains/session/retry.ts +10 -18
  401. package/src/domains/session/session-artifacts.ts +107 -0
  402. package/src/domains/session/task-board.ts +207 -13
  403. package/src/domains/session/tree/active-path.ts +44 -5
  404. package/src/domains/session/tree/fork.ts +26 -27
  405. package/src/domains/session/tree/preview.ts +2 -2
  406. package/src/domains/session/workspace/git-probe.ts +17 -11
  407. package/src/domains/user-tasks/store.ts +297 -0
  408. package/src/engine/acp/errors.ts +96 -0
  409. package/src/engine/acp/server.ts +1728 -146
  410. package/src/engine/acp/transport.ts +135 -14
  411. package/src/engine/acp/types.ts +26 -0
  412. package/src/engine/agent.ts +3 -3
  413. package/src/engine/ai.ts +32 -27
  414. package/src/engine/alcf-oauth.ts +26 -19
  415. package/src/engine/api-registry.ts +223 -0
  416. package/src/engine/apis/index.ts +3 -7
  417. package/src/engine/apis/llamacpp-residency.ts +49 -9
  418. package/src/engine/apis/lmstudio-residency.ts +5 -21
  419. package/src/engine/apis/lmstudio.ts +243 -0
  420. package/src/engine/apis/ollama-native.ts +24 -3
  421. package/src/engine/apis/openai-completions.ts +170 -91
  422. package/src/engine/apis/residency.ts +139 -3
  423. package/src/engine/apis/types.ts +16 -0
  424. package/src/engine/env-api-keys.ts +98 -0
  425. package/src/engine/gemma-channel-filter.ts +223 -0
  426. package/src/engine/instrumented-tui.ts +192 -0
  427. package/src/engine/messages.ts +14 -0
  428. package/src/engine/models.ts +42 -0
  429. package/src/engine/oauth.ts +16 -12
  430. package/src/engine/prompt-templates.ts +1 -0
  431. package/src/engine/provider-payload.ts +16 -59
  432. package/src/engine/strip-tokenizer-sentinels.ts +1 -1
  433. package/src/engine/truncate.ts +9 -0
  434. package/src/engine/tui.ts +17 -9
  435. package/src/engine/types.ts +3 -6
  436. package/src/engine/worker-runtime-capabilities.ts +5 -0
  437. package/src/engine/worker-runtime.ts +1 -1
  438. package/src/engine/worker-tools.ts +9 -4
  439. package/src/entry/boot-options.ts +50 -0
  440. package/src/entry/orchestrator.ts +288 -150
  441. package/src/interactive/application-controller.ts +89 -2
  442. package/src/interactive/chat-loop.ts +266 -41
  443. package/src/interactive/chat-panel.ts +715 -278
  444. package/src/interactive/chat-renderer.ts +306 -85
  445. package/src/interactive/clio-editor.ts +3 -8
  446. package/src/interactive/command-fallbacks.ts +2 -2
  447. package/src/interactive/context-overlay.ts +27 -1
  448. package/src/interactive/editor-submit.ts +253 -24
  449. package/src/interactive/export-html/ansi-to-html.ts +161 -0
  450. package/src/interactive/export-html/index.ts +51 -0
  451. package/src/interactive/export-html/template.ts +45 -0
  452. package/src/interactive/export-html/tool-renderer.ts +54 -0
  453. package/src/interactive/footer/dashboard.ts +4 -0
  454. package/src/interactive/footer/notifications.ts +1 -1
  455. package/src/interactive/footer/widgets.ts +42 -22
  456. package/src/interactive/footer-panel.ts +8 -3
  457. package/src/interactive/format-time.ts +14 -2
  458. package/src/interactive/interactive-application.ts +203 -17
  459. package/src/interactive/interactive-event-projection.ts +18 -1
  460. package/src/interactive/interactive-input-runtime.ts +50 -4
  461. package/src/interactive/interactive-presentation.ts +151 -19
  462. package/src/interactive/interactive-shell.ts +268 -14
  463. package/src/interactive/interactive-slash-runtime.ts +184 -117
  464. package/src/interactive/interactive-tickers.ts +38 -7
  465. package/src/interactive/keybinding-manager.ts +1 -1
  466. package/src/interactive/layout.ts +40 -3
  467. package/src/interactive/overlay-frame.ts +1 -1
  468. package/src/interactive/overlay-general-openers.ts +58 -1
  469. package/src/interactive/overlay-key-routing.ts +3 -0
  470. package/src/interactive/overlay-lifecycle.ts +13 -0
  471. package/src/interactive/overlay-permission-lifecycle.ts +2 -1
  472. package/src/interactive/overlay-session-lifecycle.ts +69 -12
  473. package/src/interactive/overlays/ask-user.ts +146 -24
  474. package/src/interactive/overlays/decisions.ts +300 -0
  475. package/src/interactive/overlays/help-reference.ts +15 -10
  476. package/src/interactive/overlays/model-selector.ts +34 -16
  477. package/src/interactive/overlays/session-selector.ts +18 -0
  478. package/src/interactive/overlays/settings.ts +105 -17
  479. package/src/interactive/overlays/skills-hub.ts +4 -4
  480. package/src/interactive/overlays/tree-selector.ts +41 -6
  481. package/src/interactive/render-trace.ts +499 -90
  482. package/src/interactive/renderers/compaction-summary.ts +2 -2
  483. package/src/interactive/renderers/diff.ts +115 -104
  484. package/src/interactive/renderers/mermaid.ts +53 -0
  485. package/src/interactive/renderers/tool-execution.ts +516 -168
  486. package/src/interactive/renderers/worker-entry.ts +20 -4
  487. package/src/interactive/session-switch-settlement.ts +10 -0
  488. package/src/interactive/slash-autocomplete.ts +6 -114
  489. package/src/interactive/slash-commands.ts +135 -47
  490. package/src/interactive/slash-spec.ts +9 -38
  491. package/src/interactive/status/controller.ts +5 -1
  492. package/src/interactive/status/index.ts +12 -1
  493. package/src/interactive/status/reasoning.ts +87 -0
  494. package/src/interactive/status/summary.ts +13 -2
  495. package/src/interactive/stdout-backpressure.ts +99 -0
  496. package/src/interactive/stream-pacer.ts +530 -0
  497. package/src/interactive/stream-pacing-policy.ts +66 -0
  498. package/src/interactive/tasks-overlay.ts +368 -14
  499. package/src/interactive/terminal-lease.ts +485 -0
  500. package/src/interactive/theme/tokens.ts +1 -1
  501. package/src/interactive/transcript-detail.ts +120 -0
  502. package/src/interactive/turn-context.ts +4 -3
  503. package/src/interactive/turn-persistence.ts +30 -13
  504. package/src/interactive/turn-queues.ts +12 -0
  505. package/src/interactive/turn-recovery.ts +25 -8
  506. package/src/interactive/turn-runtime.ts +79 -12
  507. package/src/interactive/turn-state.ts +10 -0
  508. package/src/interactive/view/artifacts.ts +114 -4
  509. package/src/interactive/view/view-overlay.ts +3 -0
  510. package/src/interactive/welcome-dashboard.ts +17 -16
  511. package/src/interactive/worker-receipts.ts +52 -3
  512. package/src/interactive/worker-stream.ts +5 -1
  513. package/src/tools/agent-tools.ts +23 -3
  514. package/src/tools/artifact.ts +2 -2
  515. package/src/tools/ask-user.ts +23 -13
  516. package/src/tools/bash.ts +30 -2
  517. package/src/tools/bootstrap.ts +34 -431
  518. package/src/tools/builtin-tool-catalog.ts +271 -0
  519. package/src/tools/codewiki/code-nav-surface.ts +29 -0
  520. package/src/tools/codewiki/code-nav.ts +8 -22
  521. package/src/tools/codewiki/shared.ts +41 -38
  522. package/src/tools/context/docs-engine.ts +14 -3
  523. package/src/tools/context/index.ts +107 -28
  524. package/src/tools/context/surface.ts +19 -0
  525. package/src/tools/core-bootstrap.ts +168 -0
  526. package/src/tools/credential-present.ts +5 -5
  527. package/src/tools/dispatch-admission.ts +533 -0
  528. package/src/tools/dispatch-background.ts +54 -0
  529. package/src/tools/dispatch-event-text.ts +6 -0
  530. package/src/tools/dispatch-plan.ts +9 -4
  531. package/src/tools/dispatch-run-events.ts +238 -0
  532. package/src/tools/dispatch-runner.ts +2370 -0
  533. package/src/tools/dispatch-scout-admission.ts +295 -0
  534. package/src/tools/dispatch-types.ts +77 -0
  535. package/src/tools/dispatch.ts +67 -3161
  536. package/src/tools/find.ts +4 -2
  537. package/src/tools/grep.ts +2 -2
  538. package/src/tools/lazy-tool.ts +60 -0
  539. package/src/tools/ledger.ts +3 -3
  540. package/src/tools/monitor-surface.ts +36 -0
  541. package/src/tools/monitor.ts +2 -32
  542. package/src/tools/observers.ts +2 -2
  543. package/src/tools/presentation.ts +107 -0
  544. package/src/tools/registry.ts +45 -27
  545. package/src/tools/safe-exec.ts +2 -2
  546. package/src/tools/steer-surface.ts +17 -0
  547. package/src/tools/steer.ts +2 -13
  548. package/src/tools/tasks.ts +108 -11
  549. package/src/tools/truncate.ts +25 -184
  550. package/src/tools/verify/frontend.ts +3 -1
  551. package/src/tools/verify/index.ts +3 -38
  552. package/src/tools/verify/surface.ts +46 -0
  553. package/src/tools/web-fetch-surface.ts +23 -0
  554. package/src/tools/web-fetch.ts +2 -20
  555. package/src/tools/write.ts +7 -2
  556. package/src/worker/entry.ts +39 -2
  557. package/src/worker/spec-contract.ts +26 -5
  558. package/dist/chunk-7SS2CTV2.js +0 -61361
  559. package/dist/chunk-DKGKUHFA.js +0 -924
  560. package/dist/chunk-GEP36Y4X.js +0 -12796
  561. package/dist/chunk-XYWBQRDM.js +0 -137
  562. package/dist/clio-BZVGEUFJ.js +0 -58
  563. package/dist/configure-S7S6F6CL.js +0 -32
  564. package/docs/html/agents_blueprint.html +0 -936
  565. package/docs/html/alcf_blueprint.html +0 -324
  566. package/docs/html/architecture_blueprint.html +0 -850
  567. package/docs/html/commands_blueprint.html +0 -939
  568. package/docs/html/config_knobs_audit_blueprint.html +0 -178
  569. package/docs/html/configuration_blueprint.html +0 -1080
  570. package/docs/html/context_blueprint.html +0 -603
  571. package/docs/html/documentation_blueprint.html +0 -832
  572. package/docs/html/environment_blueprint.html +0 -404
  573. package/docs/html/eval_blueprint.html +0 -743
  574. package/docs/html/evals_internal_blueprint.html +0 -190
  575. package/docs/html/evolution_blueprint.html +0 -674
  576. package/docs/html/extensions_blueprint.html +0 -2065
  577. package/docs/html/fleet_dispatch_blueprint.html +0 -286
  578. package/docs/html/index.html +0 -919
  579. package/docs/html/lifecycle_blueprint.html +0 -723
  580. package/docs/html/memory_blueprint.html +0 -699
  581. package/docs/html/middleware_blueprint.html +0 -664
  582. package/docs/html/models_blueprint.html +0 -2366
  583. package/docs/html/observability_blueprint.html +0 -683
  584. package/docs/html/provider_adapter_blueprint.html +0 -245
  585. package/docs/html/safety_blueprint.html +0 -1386
  586. package/docs/html/shared.css +0 -571
  587. package/docs/html/shared.js +0 -143
  588. package/docs/html/skills_blueprint.html +0 -671
  589. package/docs/html/soak_blueprint.html +0 -182
  590. package/docs/html/tool_usage_blueprint.html +0 -350
  591. package/docs/html/tools_blueprint.html +0 -2249
  592. package/docs/html/trace_blueprint.html +0 -235
  593. package/docs/html/tui_design_blueprint.html +0 -374
  594. package/docs/html/validation_blueprint.html +0 -961
  595. package/docs/html/worker_dispatch_blueprint.html +0 -231
  596. package/src/core/release.ts +0 -2
  597. package/src/domains/providers/runtimes/common/lmstudio-logger.ts +0 -32
  598. package/src/domains/providers/runtimes/local-native/lmstudio-native.ts +0 -491
  599. package/src/engine/apis/lmstudio-native.ts +0 -1438
  600. package/src/engine/apis/thinking-replay.ts +0 -11
  601. package/src/tools/string-enum.ts +0 -15
@@ -77,6 +77,13 @@ export interface WorkerPromptInputs {
77
77
  onPermission: "deny" | "fail" | "escalate";
78
78
  /** One stable persona: the recipe body or bounded override, including bound-skill mechanics. */
79
79
  persona: RenderedPromptFragment;
80
+ /**
81
+ * The session's `additionalFragments` channel, mirrored for a worker: active
82
+ * project rules scoped to this run's working context and the operator
83
+ * profile, when either renders non-empty. Rendered last, after persona, the
84
+ * same order `compile()` uses for its own `additionalFragments`.
85
+ */
86
+ additionalFragments?: ReadonlyArray<RenderedPromptFragment>;
80
87
  }
81
88
 
82
89
  export interface FragmentManifestEntry {
@@ -111,6 +118,23 @@ export interface CompiledSessionPrompt {
111
118
  * selection; the pure compiler leaves it absent.
112
119
  */
113
120
  projectPreload?: ProjectPreloadClass | null;
121
+ /**
122
+ * Absolute paths of the effective project handbooks that produced the
123
+ * project context, ancestor to nearest. Set by the prompts extension
124
+ * alongside `projectPreload`; the pure compiler leaves it absent.
125
+ */
126
+ projectHandbookFiles?: string[];
127
+ /**
128
+ * Repo-relative `.clio-coder/rules/**` ids selected into this compile, in
129
+ * load order. Set only by `compileWorkerPrompt`, which owns rule
130
+ * selection; the pure compiler and `compileSessionPrompt` leave it absent.
131
+ */
132
+ rulesApplied?: string[];
133
+ /**
134
+ * Whether the operator profile rendered non-empty content into this
135
+ * compile. Set only by `compileWorkerPrompt`.
136
+ */
137
+ operatorProfileApplied?: boolean;
114
138
  }
115
139
 
116
140
  export const FLEET_ROUTING_GUIDANCE_MAX_BYTES = 320;
@@ -118,7 +142,7 @@ export const FLEET_ROUTING_GUIDANCE_MAX_BYTES = 320;
118
142
  // `agent:"auto"` baselines by task shape and can still land on a worker whose
119
143
  // capability class is wrong for the job, so a pinned id is the reliable path.
120
144
  export const FLEET_ROUTING_GUIDANCE =
121
- 'Fleet routing: pin the `agent` id from the Fleet section above; agent:"auto" baselines from the task text and is a fallback, not a router. Broad repo/codebase exploration goes to a worker before repo-wide reads. Give each dispatch a concrete handoff and synthesize its receipt.';
145
+ 'Fleet routing: pin the `agent` id from the Fleet section; agent:"auto" baselines from the task text and is a fallback, not a router.';
122
146
 
123
147
  /**
124
148
  * Worker-side mirror of the parent's `SPOT_CHECK_GUIDANCE`. The parent sentence
@@ -161,10 +185,19 @@ export function safetyOneLiner(level: string): string {
161
185
  }
162
186
  }
163
187
 
188
+ /**
189
+ * What "approval-required" resolves to for the session: one operator
190
+ * confirmation per parked call. The level fragments say which calls park;
191
+ * this line says what parking means, and it is role text because a worker's
192
+ * parked call resolves through its `onPermission` routing instead.
193
+ */
194
+ export const SESSION_APPROVAL_SEMANTICS =
195
+ "Approval-required calls pause for one operator confirmation, which grants only the parked action; cancellation cancels the parked call cleanly.";
196
+
164
197
  function renderSafetySection(safetyFragment: LoadedFragment, level: string): string {
165
198
  const oneLine = `Autonomy: ${level}. ${safetyOneLiner(level)}`;
166
199
  const body = safetyFragment.body.trim();
167
- return body.length > 0 ? `${oneLine}\n\n${body}` : oneLine;
200
+ return body.length > 0 ? `${oneLine}\n${SESSION_APPROVAL_SEMANTICS}\n\n${body}` : oneLine;
168
201
  }
169
202
 
170
203
  function renderRuntimeBlock(inputs: SessionPromptInputs): string {
@@ -191,9 +224,29 @@ function renderRuntimeBlock(inputs: SessionPromptInputs): string {
191
224
  */
192
225
  function sessionCanDispatch(inputs: SessionPromptInputs): boolean {
193
226
  if (inputs.providerSupportsTools === false) return false;
194
- const names = new Set((inputs.toolNames ?? []).map((name) => name.trim()));
195
- const hinted = new Set((inputs.toolPromptHints ?? []).map((entry) => entry.tool.trim()));
196
- return names.has("dispatch") || hinted.has("dispatch");
227
+ return toolSurfaceHasTool(inputs.toolNames, inputs.toolPromptHints, "dispatch");
228
+ }
229
+
230
+ /**
231
+ * Whether `context` is on the session's surface. The Skills passage, the docs
232
+ * routing directive, and the Tool Contract's skills clause follow the same
233
+ * rule as dispatch: text that teaches a call to `context` renders only when
234
+ * `context` is there to be called.
235
+ */
236
+ function sessionHasContext(inputs: SessionPromptInputs): boolean {
237
+ if (inputs.providerSupportsTools === false) return false;
238
+ return toolSurfaceHasTool(inputs.toolNames, inputs.toolPromptHints, "context");
239
+ }
240
+
241
+ /** One lookup for every "is this tool on the surface" predicate, over names and hints alike. */
242
+ function toolSurfaceHasTool(
243
+ toolNames: ReadonlyArray<string> | undefined,
244
+ toolPromptHints: ReadonlyArray<ToolPromptHint> | undefined,
245
+ tool: string,
246
+ ): boolean {
247
+ const names = new Set((toolNames ?? []).map((name) => name.trim()));
248
+ const hinted = new Set((toolPromptHints ?? []).map((entry) => entry.tool.trim()));
249
+ return names.has(tool) || hinted.has(tool);
197
250
  }
198
251
 
199
252
  function renderFleetBlock(inputs: SessionPromptInputs): string {
@@ -212,16 +265,17 @@ function renderToolContractBlock(inputs: SessionPromptInputs): string {
212
265
  const names = [
213
266
  ...new Set((inputs.toolNames ?? []).map((name) => name.trim()).filter((name) => name.length > 0)),
214
267
  ].sort();
215
- const hintedTools = new Set((inputs.toolPromptHints ?? []).map((entry) => entry.tool.trim()));
216
268
  const canDispatch = sessionCanDispatch(inputs);
217
- const canListSkills = names.includes("context") || hintedTools.has("context");
269
+ const canListSkills = sessionHasContext(inputs);
218
270
  const inventoryGuidance = [
219
271
  // Asked twice in one session which tools it had, a live model gave two
220
272
  // different answers and invented `web_find`. The authoritative list is one
221
273
  // line above; pointing at it beats letting the model recall the schemas.
222
274
  "When answering capability-inventory questions, copy the Direct tools line above verbatim rather than recalling the attached schemas, and make no calls",
223
275
  ...(canDispatch ? ["add dispatch(list:true) only if agents or the fleet are requested"] : []),
224
- ...(canListSkills ? ['add context(scope="skills") only if skills are requested'] : []),
276
+ ...(canListSkills
277
+ ? ['add context(scope="skills") only if skills are requested (it lists installed and marketplace skills)']
278
+ : []),
225
279
  ].join("; ");
226
280
  const lines = [
227
281
  "# Tool Contract",
@@ -230,10 +284,14 @@ function renderToolContractBlock(inputs: SessionPromptInputs): string {
230
284
  "Harness model: direct tools are attached schemas; fleet agents are workers behind dispatch; skills are operator-activated workflows reached through context. Keep these capability sets distinct.",
231
285
  `${inventoryGuidance}.`,
232
286
  "Call tools only for concrete inspection or changes the task requires. If the user asks for a tool-free answer, simply answer without calling tools.",
233
- 'For narrow file or symbol orientation, prefer context(scope="workspace"), code_nav, grep, and read instead of assuming source-tree details were preloaded. When dispatch is available, explicit broad repository/codebase exploration uses agent:"auto" before repo-wide reads.',
234
- 'Routing order: use structured observe tools before bash for narrow inspection; when the request has three or more steps, declare a tasks board (action="plan") before the first edit; treat broad reconnaissance as a bounded agent:"auto" handoff, dispatch other bounded parallel or delegated subwork, and synthesize receipts; validate with verify or git diff before final claims.',
287
+ // The tool-specific instantiation of the operating contract's "narrow
288
+ // work: inspect directly" rule; the contract cannot name tools.
289
+ // Delegation, the tasks board, and skills are not restated here: the
290
+ // Delegation and Skills passages and the registry hints carry them, and
291
+ // each renders exactly when its tool does.
292
+ 'For narrow file or symbol orientation, prefer context(scope="workspace"), code_nav, grep, and read instead of assuming source-tree details were preloaded.',
293
+ "Validate with verify or git diff before final claims.",
235
294
  'When a tool call fails or is rejected, do not retry the same shape blindly: re-read the schema, adjust the arguments, or query context(scope="docs") for that tool\'s usage.',
236
- 'List installed skills with context(scope="skills") only when the task is skill-shaped or the operator asks about skills; if one matches, suggest the operator run /skill:<name>, and never load a skill the operator did not request.',
237
295
  ];
238
296
  // One hint per tool, sorted by tool name: deterministic bytes regardless
239
297
  // of surface or registration order, and removing a tool from the surface
@@ -267,32 +325,17 @@ function workerPermissionSentence(mode: WorkerPromptInputs["onPermission"]): str
267
325
  }
268
326
  }
269
327
 
270
- function renderWorkerOperatingContract(operatingContract: LoadedFragment, inputs: WorkerPromptInputs): string {
271
- const skillsHeading = "\n# Skills\n";
272
- const skillsAt = operatingContract.body.indexOf(skillsHeading);
273
- const withoutSkills = skillsAt >= 0 ? operatingContract.body.slice(0, skillsAt) : operatingContract.body;
274
- const skillAwareBody = inputs.hasCanonicalContext && !inputs.hasBoundSkills ? operatingContract.body : withoutSkills;
275
- const operatingPermission =
276
- inputs.autonomy === "read-only"
277
- ? "This read-only worker denies mutating calls without requesting approval."
278
- : workerPermissionSentence(inputs.onPermission);
279
- const workerBody = skillAwareBody.replace(
280
- /Safety policy is authoritative[\s\S]*?Do not retry the same blocked\naction through another tool\./,
281
- [
282
- "Safety policy is authoritative for every tool call. Allow decisions run normally.",
283
- operatingPermission,
284
- "Hard blocks (destructive git, protected artifacts, project or path policy violations) remain hard blocks. When a call is blocked, pivot to a safer approach or explain the blocker. Do not retry the same blocked action through another tool.",
285
- ].join("\n"),
286
- );
287
- return [
288
- workerBody.trim(),
289
- "# Assigned Task Contract",
290
- "The assigned task is authoritative. Role guidance is a persona, not a replacement task.",
291
- "Do not invent a different task, source tree, file path, or implementation plan.",
292
- "If the assigned task asks for an exact response, a direct answer, or no tool use, answer it directly without tool calls.",
293
- "Use tools only when necessary for the assigned task and admitted by the worker tool contract.",
294
- WORKER_CLAIM_GUIDANCE,
295
- ].join("\n\n");
328
+ /**
329
+ * The constitutional contract renders byte-identical for session and worker.
330
+ * Role text is separate: the coordinator's `operating.delegation` and
331
+ * `operating.skills` never reach a worker (its reply goes to the
332
+ * orchestrator, it cannot suggest a skill to an operator, and no builtin
333
+ * admits `dispatch`), and the worker's `operating.worker` never reaches the
334
+ * session. What "approval-required" resolves to for a worker is stated once,
335
+ * in its safety section, by `workerPermissionSentence`.
336
+ */
337
+ function renderWorkerOperatingContract(operatingContract: LoadedFragment, workerContract: LoadedFragment): string {
338
+ return [operatingContract.body.trim(), workerContract.body.trim(), WORKER_CLAIM_GUIDANCE].join("\n\n");
296
339
  }
297
340
 
298
341
  function renderWorkerToolContractBlock(inputs: WorkerPromptInputs): string {
@@ -359,41 +402,18 @@ export function workerSafetyOneLiner(level: AutonomyLevel, mode: WorkerPromptInp
359
402
  }
360
403
  }
361
404
 
405
+ /**
406
+ * The worker reads the same `safety.<level>` fragment the session does; the
407
+ * one-liner (with the run's permission routing) is the only role text. The
408
+ * level fragments speak in action classes and never name a tool, so nothing
409
+ * here can be false for a surface that lacks one; the earlier inline copy of
410
+ * the levels claimed a full-auto worker's "dispatches" ran when no builtin
411
+ * admits dispatch.
412
+ */
362
413
  function renderWorkerSafetySection(safetyFragment: LoadedFragment, inputs: WorkerPromptInputs): string {
363
- const heading = safetyFragment.body.trim().split("\n", 1)[0] ?? "# Safety";
364
- const lines = [
365
- `Autonomy: ${inputs.autonomy}. ${workerSafetyOneLiner(inputs.autonomy, inputs.onPermission)}`,
366
- "",
367
- heading,
368
- ];
369
- switch (inputs.autonomy) {
370
- case "read-only":
371
- lines.push(
372
- "Admitted read-class tools run freely. Every mutating call is denied by the harness, and no approval prompt appears.",
373
- "When a change is needed, propose it concretely instead of attempting it.",
374
- );
375
- break;
376
- case "suggest":
377
- lines.push(
378
- "Admitted read-class tools run freely. Every non-read call is approval-required.",
379
- workerPermissionSentence(inputs.onPermission),
380
- );
381
- break;
382
- case "auto-edit":
383
- lines.push(
384
- "Workspace edits and recognized commands run. Other commands and system modifications are approval-required.",
385
- workerPermissionSentence(inputs.onPermission),
386
- );
387
- break;
388
- case "full-auto":
389
- lines.push(
390
- "Writes, dispatches, and ordinary commands run. System modifications and opaque command substitutions remain approval-required.",
391
- workerPermissionSentence(inputs.onPermission),
392
- );
393
- break;
394
- }
395
- lines.push("Destructive git and other hard safety blocks remain denied at every autonomy level.");
396
- return lines.join("\n");
414
+ const oneLine = `Autonomy: ${inputs.autonomy}. ${workerSafetyOneLiner(inputs.autonomy, inputs.onPermission)}`;
415
+ const body = safetyFragment.body.trim();
416
+ return body.length > 0 ? `${oneLine}\n\n${body}` : oneLine;
397
417
  }
398
418
 
399
419
  function renderRetrievalHintsBlock(inputs: SessionPromptInputs): string {
@@ -404,10 +424,13 @@ function renderRetrievalHintsBlock(inputs: SessionPromptInputs): string {
404
424
  "Use only facts present in the current turn and say what file-specific context would be needed for precise code work.",
405
425
  ].join("\n");
406
426
  }
427
+ // Where to look for skills and when to delegate exploration live in the
428
+ // Skills and Delegation passages; this block only says what is and is not
429
+ // preloaded.
407
430
  return [
408
431
  "# Retrieval Hints",
409
432
  "Compact CLIO-CODER.md project instructions may be preloaded above; everything else about the repository must be fetched, not assumed.",
410
- "For narrow questions about where code, skills, tools, prompts, or harness behavior live, inspect with code_nav, context, grep, or read before answering. For explicit broad repository exploration, hand the search to a reconnaissance worker with dispatch when it is available. Never invent file paths, automatic tool behavior, or mutable repo details from the system prompt.",
433
+ "Never invent file paths, automatic tool behavior, or mutable repo details from the system prompt.",
411
434
  ].join("\n");
412
435
  }
413
436
 
@@ -450,17 +473,30 @@ export function compile(table: FragmentTable, inputs: CompileInputs): CompiledSe
450
473
 
451
474
  let identityBody = identity.body;
452
475
  const selfAwareness = identity.id === "identity.clio" ? table.byId.get("identity.self-awareness") : undefined;
476
+ // The routing directive teaches a call to `context`, so like the Skills
477
+ // passage it renders only when `context` is on the surface. The paths and
478
+ // the code-outranks-docs rule name no tool and stay unconditional.
479
+ const docsRouting = selfAwareness && sessionHasContext(session) ? table.byId.get("identity.docs-routing") : undefined;
453
480
  if (selfAwareness) {
454
481
  const packageRoot = resolvePackageRoot();
455
482
  const rendered = selfAwareness.body
456
483
  .replace("{CLIO_DOCS_PATH}", join(packageRoot, "docs"))
457
484
  .replace("{CLIO_SRC_PATH}", join(packageRoot, "src"))
458
485
  .replace("{CLIO_CODEWIKI_PATH}", join(packageRoot, "dist", "assets", "codewiki.json"));
459
- identityBody = `${identity.body.trim()}\n\n${rendered.trim()}`;
486
+ identityBody = [identity.body.trim(), rendered.trim(), ...(docsRouting ? [docsRouting.body.trim()] : [])].join(
487
+ "\n\n",
488
+ );
460
489
  }
461
490
 
491
+ // Role text gated on the surface, following the Fleet-block rule: text
492
+ // about a tool renders only when the tool is there to be called.
493
+ const delegation = sessionCanDispatch(session) ? table.byId.get("operating.delegation") : undefined;
494
+ const skills = sessionHasContext(session) ? table.byId.get("operating.skills") : undefined;
495
+
462
496
  push("identity", identityBody);
463
497
  push("operating-contract", operatingContract.body);
498
+ if (delegation) push("delegation", delegation.body);
499
+ if (skills) push("skills", skills.body);
464
500
  push("safety", renderSafetySection(safety, autonomyLevel));
465
501
  push("runtime", renderRuntimeBlock(session));
466
502
  push("tool-contract", renderToolContractBlock(session));
@@ -473,7 +509,15 @@ export function compile(table: FragmentTable, inputs: CompileInputs): CompiledSe
473
509
  }
474
510
 
475
511
  const systemPrompt = parts.join("\n\n");
476
- const baseFragments = [identity, ...(selfAwareness ? [selfAwareness] : []), operatingContract, safety];
512
+ const baseFragments = [
513
+ identity,
514
+ ...(selfAwareness ? [selfAwareness] : []),
515
+ ...(docsRouting ? [docsRouting] : []),
516
+ operatingContract,
517
+ ...(delegation ? [delegation] : []),
518
+ ...(skills ? [skills] : []),
519
+ safety,
520
+ ];
477
521
  const fragmentManifest: FragmentManifestEntry[] = baseFragments.map((f) => ({
478
522
  id: f.id,
479
523
  relPath: f.relPath,
@@ -501,7 +545,12 @@ export function compile(table: FragmentTable, inputs: CompileInputs): CompiledSe
501
545
  /**
502
546
  * Compile the canonical stable prompt for one mediated fleet worker.
503
547
  * Dynamic task, project, memory, pipeline, and per-run posture messages do
504
- * not belong here. The section order is a protocol invariant.
548
+ * not belong here; those ride in dispatch's `dynamicPromptMessages`. The one
549
+ * exception is `additionalFragments`: the operator-editable layer (project
550
+ * rules scoped to this run, the operator profile) that mirrors the session's
551
+ * own `additionalFragments` channel, so a worker whose task touches a ruled
552
+ * path reads the same rule the session would. The section order is a
553
+ * protocol invariant.
505
554
  */
506
555
  export function compileWorker(table: FragmentTable, inputs: WorkerPromptInputs): CompiledSessionPrompt {
507
556
  if (inputs.persona.dynamic) {
@@ -519,6 +568,7 @@ export function compileWorker(table: FragmentTable, inputs: WorkerPromptInputs):
519
568
  }
520
569
  const identity = lookupFragment(table, "identity.clio-worker", "worker identity");
521
570
  const operatingContract = lookupFragment(table, "operating.contract", "operating contract");
571
+ const workerContract = lookupFragment(table, "operating.worker", "worker contract");
522
572
  const safety = lookupFragment(table, `safety.${inputs.autonomy}`, "safety");
523
573
 
524
574
  const parts: string[] = [];
@@ -531,20 +581,28 @@ export function compileWorker(table: FragmentTable, inputs: WorkerPromptInputs):
531
581
  };
532
582
 
533
583
  push("identity", identity.body);
534
- push("operating-contract", renderWorkerOperatingContract(operatingContract, inputs));
584
+ push("operating-contract", renderWorkerOperatingContract(operatingContract, workerContract));
535
585
  push("tool-contract", renderWorkerToolContractBlock(inputs));
536
586
  push("safety", renderWorkerSafetySection(safety, inputs));
537
587
  push("persona", inputs.persona.body);
588
+ for (const fragment of inputs.additionalFragments ?? []) {
589
+ push(fragment.id, fragment.body);
590
+ }
538
591
 
539
592
  const systemPrompt = parts.join("\n\n");
540
- const fragmentManifest: FragmentManifestEntry[] = [identity, operatingContract, safety, inputs.persona].map(
541
- (fragment) => ({
542
- id: fragment.id,
543
- relPath: fragment.relPath,
544
- contentHash: fragment.contentHash,
545
- dynamic: fragment.dynamic,
546
- }),
547
- );
593
+ const fragmentManifest: FragmentManifestEntry[] = [
594
+ identity,
595
+ operatingContract,
596
+ workerContract,
597
+ safety,
598
+ inputs.persona,
599
+ ...(inputs.additionalFragments ?? []),
600
+ ].map((fragment) => ({
601
+ id: fragment.id,
602
+ relPath: fragment.relPath,
603
+ contentHash: fragment.contentHash,
604
+ dynamic: fragment.dynamic,
605
+ }));
548
606
 
549
607
  return {
550
608
  systemPrompt,
@@ -11,7 +11,18 @@ export interface CompileSessionPromptInput {
11
11
  workingContextPaths?: ReadonlyArray<string>;
12
12
  }
13
13
 
14
- export type CompileWorkerPromptInput = WorkerPromptInputs;
14
+ export interface CompileWorkerPromptInput extends WorkerPromptInputs {
15
+ /** Working directory the rule loader and repo-awareness checks run against; defaults to `process.cwd()`. */
16
+ cwd?: string;
17
+ /**
18
+ * Best-effort paths this worker's run actually touches (from `writeRoots`
19
+ * and path-like tokens in the task/briefing text), used the same way the
20
+ * session's `workingContextPaths` selects path-scoped project rules. There
21
+ * is no structured path field on the model-facing dispatch tool, so this is
22
+ * inference, not a guarantee: a rule can be missed, never fabricated.
23
+ */
24
+ workingContextPaths?: ReadonlyArray<string>;
25
+ }
15
26
 
16
27
  export interface PromptsContract {
17
28
  /**
@@ -22,7 +33,12 @@ export interface PromptsContract {
22
33
  */
23
34
  compileSessionPrompt(input: CompileSessionPromptInput): Promise<CompiledSessionPrompt>;
24
35
 
25
- /** Compile the canonical stable harness for one mediated fleet worker. */
36
+ /**
37
+ * Compile the canonical stable harness for one mediated fleet worker. The
38
+ * result's `rulesApplied` and `operatorProfileApplied` are the receipt
39
+ * provenance for this run's customization layer: dispatch reads them
40
+ * straight off this return rather than re-deriving them.
41
+ */
26
42
  compileWorkerPrompt(input: CompileWorkerPromptInput): Promise<CompiledSessionPrompt>;
27
43
 
28
44
  /** Reload fragment table (triggered by config.hotReload). */
@@ -85,6 +85,7 @@ export function createPromptsBundle(
85
85
  const cwd = input.cwd ?? process.cwd();
86
86
  let contextFiles = "";
87
87
  let projectPreload: ProjectPreloadClass | null = null;
88
+ let projectHandbookFiles: string[] = [];
88
89
  if (!suppressContextFiles) {
89
90
  const projectContext = contextDomain()?.renderPromptContext(cwd);
90
91
  contextFiles = projectContext
@@ -95,6 +96,7 @@ export function createPromptsBundle(
95
96
  hasClioMd: projectContext.clioMd !== null,
96
97
  text: projectContext.text,
97
98
  });
99
+ projectHandbookFiles = projectContext.handbookFiles;
98
100
  }
99
101
  for (const warning of projectContext?.warnings ?? []) process.stderr.write(`${warning}\n`);
100
102
  }
@@ -112,17 +114,28 @@ export function createPromptsBundle(
112
114
  additionalFragments: [
113
115
  ...workspaceRootFragment(cwd),
114
116
  ...clioRepoAwarenessFragments(cwd),
115
- ...customizationFragments(cwd, input.workingContextPaths ?? []),
117
+ ...customizationFragments(cwd, input.workingContextPaths ?? []).fragments,
116
118
  ],
117
119
  });
118
- return { ...compiled, projectPreload };
120
+ return { ...compiled, projectPreload, projectHandbookFiles };
119
121
  },
120
122
  async compileWorkerPrompt(input: CompileWorkerPromptInput) {
121
123
  if (!table) throw new Error("prompts domain not started");
122
124
  if (table.byId.size === 0) {
123
125
  throw new Error("prompts: no fragments loaded, check startup logs");
124
126
  }
125
- return compileWorker(table, input);
127
+ const { cwd: inputCwd, workingContextPaths, ...workerInputs } = input;
128
+ const cwd = inputCwd ?? process.cwd();
129
+ const customization = customizationFragments(cwd, workingContextPaths ?? []);
130
+ const compiled = compileWorker(table, {
131
+ ...workerInputs,
132
+ additionalFragments: customization.fragments,
133
+ });
134
+ return {
135
+ ...compiled,
136
+ rulesApplied: customization.activeRuleIds,
137
+ operatorProfileApplied: customization.operatorProfileApplied,
138
+ };
126
139
  },
127
140
  reload,
128
141
  };
@@ -153,6 +166,15 @@ export function createPromptsBundle(
153
166
  return { extension, contract };
154
167
  }
155
168
 
169
+ /** Fragments plus the provenance of which customization sources actually rendered. */
170
+ export interface CustomizationFragmentsResult {
171
+ fragments: RenderedPromptFragment[];
172
+ /** Rule ids (posix path under `.clio-coder/rules`) selected into `fragments`, in load order. */
173
+ activeRuleIds: string[];
174
+ /** Whether the operator profile rendered non-empty content into `fragments`. */
175
+ operatorProfileApplied: boolean;
176
+ }
177
+
156
178
  /**
157
179
  * Inline prompt fragments for the project's customization surfaces. Unconditional
158
180
  * `.clio-coder/rules/**` rules load with project context here; path-scoped rules stay
@@ -160,9 +182,17 @@ export function createPromptsBundle(
160
182
  * file is in working context. The operator profile renders as one capped
161
183
  * section. Both are deterministic (rules sort by id), so a local model's cached
162
184
  * prompt prefix stays stable. Best-effort: a load failure injects nothing.
185
+ * Callers that seal receipt provenance (dispatch) read `activeRuleIds` and
186
+ * `operatorProfileApplied` off the result rather than re-deriving them, so the
187
+ * receipt can never disagree with what actually rendered.
163
188
  */
164
- function customizationFragments(cwd: string, workingContextPaths: ReadonlyArray<string>): RenderedPromptFragment[] {
189
+ export function customizationFragments(
190
+ cwd: string,
191
+ workingContextPaths: ReadonlyArray<string>,
192
+ ): CustomizationFragmentsResult {
165
193
  const fragments: RenderedPromptFragment[] = [];
194
+ let activeRuleIds: string[] = [];
195
+ let operatorProfileApplied = false;
166
196
  try {
167
197
  const loaded = loadProjectRules(cwd);
168
198
  const active = selectActiveRules(loaded.rules, normalizeWorkingContextPaths(cwd, workingContextPaths));
@@ -175,6 +205,7 @@ function customizationFragments(cwd: string, workingContextPaths: ReadonlyArray<
175
205
  contentHash: sha256(body),
176
206
  dynamic: true,
177
207
  });
208
+ activeRuleIds = active.map((rule) => rule.id);
178
209
  }
179
210
  } catch {
180
211
  // Project rules are best-effort; a load failure must not block compilation.
@@ -190,11 +221,12 @@ function customizationFragments(cwd: string, workingContextPaths: ReadonlyArray<
190
221
  contentHash: sha256(rendered.text),
191
222
  dynamic: true,
192
223
  });
224
+ operatorProfileApplied = true;
193
225
  }
194
226
  } catch {
195
227
  // The operator profile is best-effort; a load failure injects nothing.
196
228
  }
197
- return fragments;
229
+ return { fragments, activeRuleIds, operatorProfileApplied };
198
230
  }
199
231
 
200
232
  function normalizeWorkingContextPaths(cwd: string, paths: ReadonlyArray<string>): string[] {
@@ -275,7 +307,7 @@ function renderProjectSynopsis(context: ProjectPromptContext, providerSupportsTo
275
307
  if (context.clioMd) {
276
308
  lines.push(`Project: ${context.clioMd.projectName}`);
277
309
  lines.push(
278
- "CLIO-CODER.md: available; compact synopsis only because the handbook is too large for automatic preload.",
310
+ "Project handbook: available; compact synopsis only because the effective layers are too large for automatic preload.",
279
311
  );
280
312
  }
281
313
  if (hasCodewiki(context.text)) lines.push("Codewiki: available via code_nav.");
@@ -290,7 +322,7 @@ function renderProjectSynopsis(context: ProjectPromptContext, providerSupportsTo
290
322
  }
291
323
 
292
324
  /**
293
- * Project context is selected once per session compile: the full CLIO-CODER.md
325
+ * Project context is selected once per session compile: the full effective-handbook
294
326
  * preload when it is small enough, a compact synopsis otherwise. No per-turn
295
327
  * selection — the session prompt is stable for the session's lifetime. The
296
328
  * cliff itself lives in prompts/preload.ts so reporting surfaces classify
@@ -46,7 +46,6 @@ function walk(root: string): string[] {
46
46
  for (const entry of entries) {
47
47
  const full = path.join(root, entry.name);
48
48
  if (entry.isDirectory()) {
49
- if (entry.name === "wiki") continue;
50
49
  out.push(...walk(full));
51
50
  continue;
52
51
  }
@@ -21,7 +21,5 @@ not Claude, GPT, Qwen, Gemini, Llama, Mistral, or any other vendor's
21
21
  assistant, and you do not claim to be from Anthropic, OpenAI,
22
22
  Alibaba, Google, Meta, or any other model vendor.
23
23
 
24
- You coordinate a fleet of Clio agents through the dispatch tool. You
25
- plan, route, and synthesize work across turns. You do not invent
26
- capabilities, and you do not bypass confirmations, privilege limits,
27
- or git safety rails.
24
+ You do not invent capabilities, and you do not bypass confirmations,
25
+ privilege limits, or git safety rails.
@@ -0,0 +1,10 @@
1
+ ---
2
+ id: identity.docs-routing
3
+ version: 1
4
+ budgetTokens: 120
5
+ description: Directive to route questions about Clio herself through context(scope="docs"); rendered only when context is on the surface
6
+ ---
7
+
8
+ # Clio documentation routing
9
+
10
+ When the user asks about Clio herself, her commands, configuration, targets, fleet, dispatch, extensions, skills, safety model, or any other Clio behavior, call context (scope="docs", query=<the question>) before answering and before any grep, find, or read: Clio's documentation ships with the package, not in the working tree, so searching the workspace for it finds nothing. Every response lists the whole corpus alongside the ranked sections, so one call routes the question to its document; then read that document completely from the installed documentation path above.
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  id: identity.self-awareness
3
3
  version: 1
4
- budgetTokens: 360
4
+ budgetTokens: 260
5
5
  description: Clio self-awareness, installed documentation, and harness configuration paths
6
6
  ---
7
7
 
@@ -15,49 +15,5 @@ Code map: {CLIO_CODEWIKI_PATH} (a structural index of Clio's own files, symbols,
15
15
  When reading Clio documentation, resolve docs/... there, not in the current working directory.
16
16
  Documentation routes, code decides: when precision matters, verify against the installed source, because code outranks docs.
17
17
 
18
- Documentation routing:
19
- - Commands -> docs/commands-and-modes.md
20
- - Context window resolution -> docs/context-engine.md
21
- - Runtime targets -> docs/configuration-and-targets.md
22
- - Every environment variable the runtime reads -> docs/environment-variables.md
23
- - Argonne ALCF Sophia/Metis inference targets over Globus OAuth -> docs/alcf-provider.md
24
- - Installation -> docs/installation-and-lifecycle.md
25
- - Safety posture -> docs/safety-model.md
26
- - Source layout -> docs/architecture.md
27
- - Why the dispatch domain is not split -> docs/dispatch-architecture-rationale.md
28
- - Prompt envelope reuse -> docs/prompt-envelope-and-tools.md
29
- - In-depth reference for all 20 worker tools -> docs/tool-usage.md
30
- - Developer guide to implementing custom model runtimes and inference server integrations -> docs/provider-adapter-cookbook.md
31
- - Built-in agent recipes -> docs/built-in-agents.md
32
- - Artifact browsing -> docs/observability.md
33
- - Where every generated file lands -> docs/artifact-placement.md
34
- - Evidence directory structures -> docs/evidence-and-memory.md
35
- - Local YAML eval suites -> docs/eval-runner.md
36
- - Prompt and skill resources -> docs/extensions-and-sharing.md
37
- - Skills Hub marketplace discovery -> docs/skills-marketplace.md
38
- - Runtime model refresh -> docs/model-catalog.md
39
- - Active component snapshots and the experimental middleware hook/effect contract -> docs/middleware-and-components.md
40
- - Advisory validation-contract patterns for scientific artifacts and HPC assumptions -> docs/scientific-validation.md
41
- - Falsifiable Change Manifest JSON templates -> docs/evolution.md
42
- - Source-first docs workflow -> docs/documentation-guide.md
43
- - Interface layout -> docs/tui-design.md
44
- - NDJSON parent-child socket protocols -> docs/worker-dispatch-mechanics.md
45
- - Multi-node fleet dispatch -> docs/fleet-dispatch.md
46
- - Multi-process capacity leases -> docs/capacity-and-scheduling.md
47
- - Executable multi-node demo with reviewer gate and receipt provenance walkthrough -> docs/fleet-demo-runbook.md
48
- - Session lifecycle -> docs/session-lifecycle.md
49
- - Agent Client Protocol (ACP) server over stdio -> docs/acp.md
50
- - Version registry and migration policies for all 9 serialized artifact schemas -> docs/artifact-versions.md
51
- - Process exit code taxonomy -> docs/exit-codes-and-output.md
52
- - Actionable error remediation and diagnostics keyed by exact user-facing messages -> docs/troubleshooting.md
53
- - Canonical definitions of 17 core architectural concepts mapped to src/ types -> docs/glossary.md
54
- - Complete source-to-documentation mapping matrix and subsystem coverage status -> docs/documentation-coverage.md
55
- - Issue-driven development lifecycle -> docs/development-pipeline.md
56
- - Proactive task memory architecture -> docs/proactive-memory.md
57
- - WAL SQLite trace mirror database schema -> docs/trace-store.md
58
- - Private context index determinism -> docs/evals-internal.md
59
- - Point-in-time inventory of legacy environment variables (Historical Appendix) -> docs/config-knobs-audit.md
60
- - Clock and timestamp conventions -> docs/time-conventions.md
61
-
62
18
  User configuration lives in ~/.config/clio-coder/settings.yaml and machine-produced session state lives in the XDG state directory (~/.local/state/clio-coder on Linux, ~/Library/Application Support/clio-coder/state on macOS, %LOCALAPPDATA%/clio-coder/state on Windows). Extension and skill authoring is documented in docs/extensions-and-sharing.md and docs/skills-marketplace.md.
63
19
  Always read Clio .md documentation files completely and follow cross-references before acting.