@iowarp/clio-coder 0.4.1 → 0.4.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 (604) hide show
  1. package/CHANGELOG.md +127 -0
  2. package/CONTRIBUTING.md +142 -52
  3. package/README.md +434 -473
  4. package/SECURITY.md +2 -1
  5. package/dist/{acp-ZILU3AUO.js → acp-H2NGRPWO.js} +12 -12
  6. package/dist/{agents-HYWGBGQR.js → agents-TL5LLUQP.js} +56 -55
  7. package/dist/assets/codewiki.json +1 -1
  8. package/dist/{auth-N3QT7CBO.js → auth-E5SW4HMS.js} +23 -21
  9. package/dist/builtins-IA7V7FUC.js +22 -0
  10. package/dist/{chunk-7RY5VZPH.js → chunk-2APPQIER.js} +8 -8
  11. package/dist/{chunk-72GZI5EV.js → chunk-2JH2WHGE.js} +2 -2
  12. package/dist/{chunk-JA5QWE4Z.js → chunk-2UG5F4C5.js} +1973 -1664
  13. package/dist/{chunk-5YHDIDBP.js → chunk-2UH2KFUP.js} +2 -2
  14. package/dist/{chunk-CTJ4RNAA.js → chunk-2VIKGWFZ.js} +2 -2
  15. package/dist/{chunk-I66EAJFY.js → chunk-2WZ546HR.js} +267 -232
  16. package/dist/{chunk-GIZNH63R.js → chunk-35MSIRKH.js} +9 -4
  17. package/dist/chunk-3EBYEESD.js +314 -0
  18. package/dist/{chunk-J5LZHVIT.js → chunk-3M6DQK6S.js} +113 -35
  19. package/dist/{chunk-RKSR6VSF.js → chunk-4IUZQIJ3.js} +29 -1
  20. package/dist/{chunk-6FN3E6KX.js → chunk-4O6MANBS.js} +2 -2
  21. package/dist/chunk-4UVU7BJ5.js +39 -0
  22. package/dist/{chunk-VKRH2TCS.js → chunk-4WR7VSYB.js} +2 -2
  23. package/dist/{chunk-BBTJOK6Y.js → chunk-54CBCGIR.js} +5 -5
  24. package/dist/{chunk-AP73CFDC.js → chunk-5ICU3EUH.js} +2 -2
  25. package/dist/chunk-5MEZN6CB.js +1334 -0
  26. package/dist/{chunk-O42A54GG.js → chunk-5OIVVPHF.js} +2 -2
  27. package/dist/{chunk-ABLSQ6JX.js → chunk-64I3JVYM.js} +8 -2
  28. package/dist/{chunk-AFKWHWXF.js → chunk-6PTFB5VS.js} +39 -22
  29. package/dist/{chunk-VN3SHNBN.js → chunk-7DICMOS6.js} +2 -2
  30. package/dist/chunk-7DRAWPTZ.js +360 -0
  31. package/dist/chunk-7E7I3WLS.js +3762 -0
  32. package/dist/{chunk-BJGUKIG4.js → chunk-7ZYNNDKC.js} +7 -7
  33. package/dist/{chunk-XKA2ICR3.js → chunk-AF4YM7Z4.js} +652 -252
  34. package/dist/{chunk-GVQJ5CCZ.js → chunk-AX2THNSA.js} +12 -12
  35. package/dist/{chunk-IG7BCQBA.js → chunk-B4OAX3SI.js} +65 -3
  36. package/dist/{chunk-TD3PGPQA.js → chunk-B4VEBZKF.js} +3 -3
  37. package/dist/{chunk-74YWRRU5.js → chunk-BEPZRGGU.js} +10 -10
  38. package/dist/{chunk-FEFIFZTL.js → chunk-CE5AX47J.js} +2 -2
  39. package/dist/{chunk-UAPGZHYC.js → chunk-DWUOQKRU.js} +25 -11
  40. package/dist/{chunk-THYWACCR.js → chunk-E3TPLWFX.js} +3 -3
  41. package/dist/{chunk-7EPLI7VL.js → chunk-EKCHAPYA.js} +2 -2
  42. package/dist/{chunk-HLW2MRKE.js → chunk-F4EKGO4N.js} +3 -1
  43. package/dist/{chunk-PJJ6MY27.js → chunk-F5JHEYZM.js} +7 -7
  44. package/dist/{chunk-6CCS4G3W.js → chunk-FTMGRKEF.js} +3 -3
  45. package/dist/{chunk-SINK3QR6.js → chunk-G76U63X4.js} +17 -17
  46. package/dist/{chunk-EIMVLWB3.js → chunk-GHS5EBTQ.js} +64 -9
  47. package/dist/{chunk-QMXC4JB7.js → chunk-GI7YYQ3F.js} +187 -1419
  48. package/dist/{chunk-TZSKNMZG.js → chunk-GTUD2WMY.js} +2 -1
  49. package/dist/{chunk-6HMJX2VU.js → chunk-GWZNEVM2.js} +44 -12
  50. package/dist/chunk-GYV6VZOC.js +26 -0
  51. package/dist/{chunk-MQXIVJ35.js → chunk-HAXOFFRH.js} +5 -5
  52. package/dist/{chunk-UXN6JT4W.js → chunk-HEQY7ZFI.js} +3 -3
  53. package/dist/{chunk-7PWAODYW.js → chunk-I7XBWTYH.js} +2 -2
  54. package/dist/{chunk-GCSMB2KY.js → chunk-I7ZPNEJM.js} +145 -102
  55. package/dist/{chunk-WNP7O5WZ.js → chunk-ID64D7PE.js} +4 -4
  56. package/dist/{chunk-QTFGO774.js → chunk-IGLP3ODT.js} +29 -16
  57. package/dist/chunk-IJNZMHLA.js +101 -0
  58. package/dist/{chunk-BDPT6GTK.js → chunk-INY6HTFL.js} +7 -7
  59. package/dist/{chunk-PBP4B7XR.js → chunk-IUE3Y34X.js} +2 -2
  60. package/dist/{chunk-6NJQITNH.js → chunk-IWT4SF4R.js} +6 -3
  61. package/dist/{chunk-R23Z6K6I.js → chunk-JDAY6FIL.js} +19 -19
  62. package/dist/chunk-JEQ3XTHC.js +42 -0
  63. package/dist/{chunk-FSP7CMNU.js → chunk-JGRC33J2.js} +50 -4
  64. package/dist/{chunk-TVH4ONAM.js → chunk-JKKCYP3C.js} +10 -10
  65. package/dist/{chunk-HJWWJ6IL.js → chunk-JSC3U7TI.js} +16 -4
  66. package/dist/{chunk-C537JADH.js → chunk-KK4JZPBQ.js} +19 -141
  67. package/dist/{chunk-K6BF4U2H.js → chunk-KKOJXO6R.js} +62 -14
  68. package/dist/{chunk-IHXBNWMM.js → chunk-KXDSS5WJ.js} +7 -3
  69. package/dist/{chunk-6DWBAZ5U.js → chunk-L47TF46W.js} +5 -7
  70. package/dist/{chunk-HUAS7ITX.js → chunk-LDJG7DW3.js} +91 -42
  71. package/dist/{chunk-CDNVLKUX.js → chunk-LLDJM5XK.js} +13 -7
  72. package/dist/{chunk-YPI3QQCF.js → chunk-MCEPRMZW.js} +2 -4
  73. package/dist/{chunk-Y4CAGMM6.js → chunk-MNJGS2IN.js} +5 -6
  74. package/dist/{chunk-VKFQTNDV.js → chunk-MUW2BDDH.js} +4 -4
  75. package/dist/{chunk-E67WX76H.js → chunk-MWUZBSAQ.js} +104 -152
  76. package/dist/{chunk-OJTRZGR3.js → chunk-N2Z7HLVY.js} +21 -21
  77. package/dist/{chunk-TVHHYFHE.js → chunk-NEDJ26B5.js} +2 -2
  78. package/dist/{chunk-FYUN5KZ3.js → chunk-NIQJ66N4.js} +21 -21
  79. package/dist/{chunk-U2WB7TZS.js → chunk-NMJXSHBJ.js} +97 -85
  80. package/dist/{chunk-CWVRRIEI.js → chunk-NZMNUPZZ.js} +2 -2
  81. package/dist/{chunk-VEGN6WIQ.js → chunk-O5CVSAG5.js} +3 -3
  82. package/dist/{chunk-MOPSG2X7.js → chunk-OML5D5V5.js} +8 -8
  83. package/dist/{chunk-2VG7KLYV.js → chunk-PAJQJ7BS.js} +5816 -3255
  84. package/dist/{chunk-ZW55JB7N.js → chunk-PUVDKJ2Y.js} +2 -2
  85. package/dist/{chunk-BTGG6BG2.js → chunk-QWGDJJYJ.js} +158 -19
  86. package/dist/chunk-R6Q67RJH.js +134 -0
  87. package/dist/{chunk-ZJLUDYFY.js → chunk-RRNP2ANY.js} +6 -6
  88. package/dist/{chunk-PVAMAVBB.js → chunk-RSJ25QSL.js} +102 -2
  89. package/dist/{chunk-NLFAQR7Z.js → chunk-S66XZJOF.js} +3 -23
  90. package/dist/chunk-SKHCAU7K.js +385 -0
  91. package/dist/chunk-SZAA6XDG.js +30 -0
  92. package/dist/{chunk-J4HBWF6Y.js → chunk-TM6LQDI3.js} +131 -28
  93. package/dist/chunk-UOIZ7DA4.js +41 -0
  94. package/dist/{chunk-MA3H6DM5.js → chunk-UPZU6GE4.js} +25 -3
  95. package/dist/{chunk-BWW4HLO4.js → chunk-UXCU4E3T.js} +8 -6
  96. package/dist/{chunk-N5UK64DP.js → chunk-V2ANDPVT.js} +4 -4
  97. package/dist/{chunk-AK5XEFVZ.js → chunk-VA5FNYMT.js} +26 -13
  98. package/dist/{chunk-6VC4OV3Z.js → chunk-VIA6RFQZ.js} +3 -11
  99. package/dist/{chunk-ZAZB4JMW.js → chunk-VKPAQYEB.js} +27 -8
  100. package/dist/{chunk-QKIFBZKT.js → chunk-VW6DOEDG.js} +497 -81
  101. package/dist/{chunk-SCYB3HA4.js → chunk-W6RRQCPQ.js} +63 -19
  102. package/dist/{chunk-2NM363SV.js → chunk-WBKFA554.js} +10 -10
  103. package/dist/{chunk-R32CLGZ6.js → chunk-WCXUNS7U.js} +82 -21
  104. package/dist/{chunk-GPPB3JBE.js → chunk-WRBAGUNF.js} +3 -3
  105. package/dist/{chunk-IXJT6DCX.js → chunk-XIVNBFZS.js} +85 -30
  106. package/dist/{chunk-UEDMSP56.js → chunk-XPWWI35G.js} +417 -201
  107. package/dist/chunk-XRZT5WY5.js +47 -0
  108. package/dist/{chunk-3QSOM6PA.js → chunk-Y3CBHOR6.js} +2 -2
  109. package/dist/{chunk-VXMFAE2W.js → chunk-YPC6ZR5L.js} +19 -6
  110. package/dist/{chunk-AKB4GYDL.js → chunk-YQWYVTMC.js} +5 -5
  111. package/dist/{chunk-6I5ILFOF.js → chunk-ZA4VCIGV.js} +3 -3
  112. package/dist/{chunk-7OBGU7UB.js → chunk-ZDN3Y73Y.js} +12 -18
  113. package/dist/{chunk-3I5NY75V.js → chunk-ZWPRK62N.js} +8 -5
  114. package/dist/cli/index.js +41 -39
  115. package/dist/{clio-IT3G3VQH.js → clio-CMMK4KRR.js} +9 -9
  116. package/dist/{code-nav-RK6S7F6E.js → code-nav-MDZNQS33.js} +89 -21
  117. package/dist/{components-UBWCQSRW.js → components-UCUQ4QXW.js} +4 -4
  118. package/dist/{config-3QZRWZJF.js → config-SVM5P5YI.js} +131 -84
  119. package/dist/{configure-FL7Y3KJF.js → configure-LE3IK2TJ.js} +28 -26
  120. package/dist/{context-5HE7ODYK.js → context-2OHRKS42.js} +69 -64
  121. package/dist/{context-KYQFRVDC.js → context-E3VC7RX5.js} +15 -11
  122. package/dist/{context-XNHL75JV.js → context-VNCR7KAG.js} +93 -65
  123. package/dist/{context-clear-N545L53A.js → context-clear-BW4O37TG.js} +64 -60
  124. package/dist/context-map-COB37XXN.js +505 -0
  125. package/dist/{context-working-set-QHKXSV2F.js → context-working-set-VDS25HXZ.js} +19 -18
  126. package/dist/{dispatch-runner-RGIE5PCT.js → dispatch-runner-5AHT53RF.js} +93 -82
  127. package/dist/{docs-5NAF6AU7.js → docs-PD3EXDKU.js} +21 -20
  128. package/dist/{doctor-ZGPEGHIP.js → doctor-WNNVO6FY.js} +48 -47
  129. package/dist/{eval-GXLL44RD.js → eval-7G7SGAYO.js} +287 -115
  130. package/dist/{eval-inventory-HBWSWQOK.js → eval-inventory-Y6QRFOH5.js} +4 -4
  131. package/dist/{evidence-HWLBRH3Q.js → evidence-VD6736FQ.js} +67 -64
  132. package/dist/{evolve-FTZBMNVW.js → evolve-AL3NGVRL.js} +65 -62
  133. package/dist/{extensions-VHRBEID7.js → extensions-MOVJ32NM.js} +9 -7
  134. package/dist/{fleet-CKZHJWZJ.js → fleet-QZHUMAGI.js} +114 -111
  135. package/dist/{fleet-commands-EXDXBMV6.js → fleet-commands-BAYT5FJZ.js} +10 -10
  136. package/dist/{fleet-decisions-OTHB6KRL.js → fleet-decisions-IREVMRU4.js} +7 -6
  137. package/dist/{fleet-graph-YTEZUCUT.js → fleet-graph-YCTT3HTI.js} +22 -19
  138. package/dist/{fleet-inspect-SS6YMDCK.js → fleet-inspect-QVJTDAVB.js} +58 -55
  139. package/dist/{fleet-preflight-PBY4VYOM.js → fleet-preflight-25QAFPK4.js} +4 -4
  140. package/dist/{fleet-validate-KMEM5L3S.js → fleet-validate-5O57AAJ7.js} +26 -23
  141. package/dist/{fleet-verify-QD5M7E7Q.js → fleet-verify-CPH2W2T6.js} +59 -56
  142. package/dist/{fleet-view-WAMJYNDT.js → fleet-view-SWBR3VGQ.js} +58 -55
  143. package/dist/{init-5XQRBOFV.js → init-J477LKZH.js} +82 -79
  144. package/dist/{interop-34TVO25M.js → interop-3FCM6XLG.js} +11 -11
  145. package/dist/{library-3QY6KF57.js → library-QUQEIUG6.js} +30 -27
  146. package/dist/{memory-L4UTIIIW.js → memory-SGGSEP65.js} +67 -64
  147. package/dist/{models-ZVX3QOWE.js → models-HEKUAXXK.js} +53 -46
  148. package/dist/{monitor-CEKVSYTS.js → monitor-HKU57TYQ.js} +63 -60
  149. package/dist/{orchestrator-77BAP6BC.js → orchestrator-VDFAEFAI.js} +1831 -1057
  150. package/dist/{panes-7STHOAUJ.js → panes-DN2SSFOH.js} +5 -5
  151. package/dist/{panes-SHAUIRXY.js → panes-TALGNPZT.js} +29 -14
  152. package/dist/{paths-L7LGY6RN.js → paths-NBMFAIEZ.js} +5 -5
  153. package/dist/reset-EAJFFJVB.js +344 -0
  154. package/dist/{resources-74GKTLSF.js → resources-OVKSEFVE.js} +29 -20
  155. package/dist/{run-HBAUJNNZ.js → run-7DP7ZF2J.js} +120 -115
  156. package/dist/{share-G3APVLVP.js → share-WML67FT3.js} +32 -27
  157. package/dist/{skills-35HHUKCR.js → skills-SG662R2K.js} +41 -31
  158. package/dist/{skills-eval-QN4HSHDC.js → skills-eval-VVZEUU46.js} +78 -77
  159. package/dist/{skills-inventory-J357J34F.js → skills-inventory-I2E23GET.js} +23 -20
  160. package/dist/{slash-commands-JZZCQA32.js → slash-commands-S7MBJDQK.js} +40 -36
  161. package/dist/{steer-XAVHJM22.js → steer-2LQOMCPB.js} +3 -3
  162. package/dist/{support-U7QOWY26.js → support-CC2UJBJ6.js} +6 -6
  163. package/dist/{targets-DSM6CY3M.js → targets-4QC3HIEW.js} +54 -54
  164. package/dist/{terminal-lease-JOPFUVEM.js → terminal-lease-TUHIJ6Y2.js} +5 -5
  165. package/dist/{tools-MKNWVPBH.js → tools-TFGJICCU.js} +10 -10
  166. package/dist/{trace-ECQ7TIYZ.js → trace-FXMXUZUF.js} +55 -7
  167. package/dist/uninstall-5PEVOE5B.js +408 -0
  168. package/dist/upgrade-M4WXY6KN.js +303 -0
  169. package/dist/{usage-X52N3IDJ.js → usage-N7ZNVLEM.js} +151 -104
  170. package/dist/{verifiers-EJTVVSMA.js → verifiers-DJTP4XX6.js} +15 -15
  171. package/dist/{verify-YJL6XET2.js → verify-RWE4PPEK.js} +9 -9
  172. package/dist/{web-fetch-MPIFL3LL.js → web-fetch-MPARV2K7.js} +2 -2
  173. package/dist/{wiki-generate-4NDZTQ4B.js → wiki-generate-C7IQOXSP.js} +89 -86
  174. package/dist/{with-panes-OBOBFIIR.js → with-panes-4GCGSL7J.js} +53 -257
  175. package/dist/worker/entry.js +90 -74
  176. package/docs/README.md +176 -81
  177. package/docs/{acp.md → architecture/acp.md} +36 -20
  178. package/docs/{alcf-provider.md → architecture/alcf-provider.md} +8 -5
  179. package/docs/{architecture.md → architecture/architecture.md} +43 -22
  180. package/docs/{artifact-placement.md → architecture/artifact-placement.md} +27 -23
  181. package/docs/architecture/artifact-versions.md +90 -0
  182. package/docs/{capacity-and-scheduling.md → architecture/capacity-and-scheduling.md} +26 -13
  183. package/docs/{context-engine.md → architecture/context-engine.md} +29 -25
  184. package/docs/{context-working-set.md → architecture/context-working-set.md} +13 -10
  185. package/docs/{dispatch-architecture-rationale.md → architecture/dispatch-architecture-rationale.md} +12 -9
  186. package/docs/{dispatch-typed-intent.md → architecture/dispatch-typed-intent.md} +68 -46
  187. package/docs/{evidence-and-memory.md → architecture/evidence-and-memory.md} +23 -16
  188. package/docs/{middleware-and-components.md → architecture/middleware-and-components.md} +11 -5
  189. package/docs/{model-catalog.md → architecture/model-catalog.md} +61 -27
  190. package/docs/{observability.md → architecture/observability.md} +38 -14
  191. package/docs/{pi-boundary.md → architecture/pi-boundary.md} +24 -11
  192. package/docs/{prompt-envelope-and-tools.md → architecture/prompt-envelope-and-tools.md} +57 -20
  193. package/docs/{provider-adapter-cookbook.md → architecture/provider-adapter-cookbook.md} +99 -25
  194. package/docs/{safety-model.md → architecture/safety-model.md} +35 -20
  195. package/docs/{session-lifecycle.md → architecture/session-lifecycle.md} +8 -5
  196. package/docs/architecture/time-conventions.md +125 -0
  197. package/docs/{trace-store.md → architecture/trace-store.md} +13 -5
  198. package/docs/{tui-design.md → architecture/tui-design.md} +13 -13
  199. package/docs/{worker-dispatch-mechanics.md → architecture/worker-dispatch-mechanics.md} +27 -30
  200. package/docs/{built-in-agents.md → guide/built-in-agents.md} +65 -35
  201. package/docs/{commands-and-modes.md → guide/commands-and-modes.md} +66 -61
  202. package/docs/{configuration-and-targets.md → guide/configuration-and-targets.md} +323 -297
  203. package/docs/guide/configuration-reference.md +1163 -0
  204. package/docs/{environment-variables.md → guide/environment-variables.md} +33 -28
  205. package/docs/{exit-codes-and-output.md → guide/exit-codes-and-output.md} +6 -3
  206. package/docs/{extensions-and-sharing.md → guide/extensions-and-sharing.md} +41 -14
  207. package/docs/{fleet-dispatch.md → guide/fleet-dispatch.md} +39 -43
  208. package/docs/{glossary.md → guide/glossary.md} +14 -11
  209. package/docs/{installation-and-lifecycle.md → guide/installation-and-lifecycle.md} +81 -17
  210. package/docs/guide/panes-and-files.md +290 -0
  211. package/docs/{proactive-memory.md → guide/proactive-memory.md} +131 -107
  212. package/docs/{resource-library.md → guide/resource-library.md} +13 -4
  213. package/docs/{skills-marketplace.md → guide/skills-marketplace.md} +25 -3
  214. package/docs/{tool-usage.md → guide/tool-usage.md} +87 -23
  215. package/docs/{troubleshooting.md → guide/troubleshooting.md} +9 -4
  216. package/docs/{config-knobs-audit.md → history/config-knobs-audit.md} +11 -11
  217. package/docs/{release-cut-checklist.md → history/release-cut-checklist.md} +29 -2
  218. package/docs/process/development-pipeline.md +152 -0
  219. package/docs/process/documentation-coverage.md +100 -0
  220. package/docs/process/documentation-guide.md +187 -0
  221. package/docs/{eval-runner.md → process/eval-runner.md} +108 -53
  222. package/docs/{evals-internal.md → process/evals-internal.md} +10 -10
  223. package/docs/{evolution.md → process/evolution.md} +2 -2
  224. package/docs/{fleet-demo-runbook.md → process/fleet-demo-runbook.md} +11 -7
  225. package/docs/{git-commit-provenance.md → process/git-commit-provenance.md} +11 -4
  226. package/docs/{performance-methodology.md → process/performance-methodology.md} +87 -69
  227. package/docs/{scientific-validation.md → process/scientific-validation.md} +4 -4
  228. package/evals/README.md +2 -2
  229. package/evals/behavioral-model.yaml +3 -2
  230. package/package.json +10 -8
  231. package/skills/README.md +52 -41
  232. package/skills/coding/ast-grep/SKILL.md +102 -31
  233. package/skills/coding/ast-grep/evals.md +26 -0
  234. package/skills/coding/coding-standards/SKILL.md +41 -6
  235. package/skills/coding/coding-standards/evals.md +23 -0
  236. package/skills/coding/prototype/SKILL.md +88 -29
  237. package/skills/coding/prototype/evals.md +19 -0
  238. package/skills/coding/tdd/SKILL.md +81 -54
  239. package/skills/coding/tdd/evals.md +20 -0
  240. package/skills/context/context-handoff/SKILL.md +44 -3
  241. package/skills/context/context-handoff/evals.md +44 -0
  242. package/skills/context/context-prime/SKILL.md +46 -16
  243. package/skills/context/context-prime/evals.md +45 -0
  244. package/skills/git/branch-closeout/SKILL.md +132 -0
  245. package/skills/git/branch-closeout/evals.md +133 -0
  246. package/skills/git/branch-closeout/references/closeout-checklist.md +81 -0
  247. package/skills/git/file-ticket/SKILL.md +78 -64
  248. package/skills/git/file-ticket/assets/issue-template.md +22 -0
  249. package/skills/git/file-ticket/evals.md +31 -26
  250. package/skills/git/file-ticket/references/issue-discovery.md +49 -0
  251. package/skills/git/fix-issue/SKILL.md +88 -65
  252. package/skills/git/fix-issue/evals.md +35 -31
  253. package/skills/git/fix-issue/references/diagnosis-and-rca.md +46 -0
  254. package/skills/git/resolve-merge-conflicts/SKILL.md +101 -52
  255. package/skills/git/resolve-merge-conflicts/evals.md +52 -25
  256. package/skills/git/resolve-merge-conflicts/references/conflict-matrix.md +126 -0
  257. package/skills/git/ship/SKILL.md +103 -67
  258. package/skills/git/ship/assets/pr-template.md +21 -0
  259. package/skills/git/ship/evals.md +44 -28
  260. package/skills/git/ship/references/remote-and-branch-policy.md +62 -0
  261. package/skills/git/worktree-create/SKILL.md +80 -50
  262. package/skills/git/worktree-create/evals.md +40 -33
  263. package/skills/git/worktree-create/references/worktree-setup.md +62 -66
  264. package/skills/git/worktree-merge/SKILL.md +112 -65
  265. package/skills/git/worktree-merge/evals.md +42 -34
  266. package/skills/git/worktree-merge/references/merge-strategies.md +52 -0
  267. package/skills/meta/clio-coder-dev/SKILL.md +9 -5
  268. package/skills/meta/clio-coder-dev/evals.md +3 -2
  269. package/skills/meta/clio-coder-test/SKILL.md +102 -95
  270. package/skills/meta/clio-coder-test/evals.md +9 -4
  271. package/skills/meta/clio-coder-test/references/harness.md +100 -124
  272. package/skills/meta/clio-coder-test/references/test-map.md +77 -50
  273. package/skills/meta/credentials/SKILL.md +2 -2
  274. package/skills/meta/find-skills/SKILL.md +2 -2
  275. package/skills/meta/herdr/SKILL.md +2 -2
  276. package/skills/meta/skill-craft/SKILL.md +22 -16
  277. package/skills/planning/archify/SKILL.md +196 -0
  278. package/skills/planning/archify/evals.md +65 -0
  279. package/skills/planning/architecture/SKILL.md +62 -13
  280. package/skills/planning/architecture/evals.md +65 -0
  281. package/skills/planning/backlog/SKILL.md +131 -15
  282. package/skills/planning/backlog/evals.md +142 -0
  283. package/skills/planning/prd/SKILL.md +47 -7
  284. package/skills/planning/prd/evals.md +54 -0
  285. package/skills/planning/product-intent/SKILL.md +58 -3
  286. package/skills/planning/product-intent/evals.md +70 -0
  287. package/skills/planning/tech-spec/SKILL.md +54 -3
  288. package/skills/planning/tech-spec/evals.md +73 -0
  289. package/skills/registry.yaml +70 -62
  290. package/skills/remote.yaml +13 -0
  291. package/skills/research/arxiv-literature/SKILL.md +77 -19
  292. package/skills/research/arxiv-literature/evals.md +50 -0
  293. package/skills/research/experiment-protocol/SKILL.md +21 -2
  294. package/skills/research/experiment-protocol/evals.md +23 -0
  295. package/skills/research/scientific-debugging/SKILL.md +24 -2
  296. package/skills/research/scientific-debugging/evals.md +18 -0
  297. package/skills/research/scientific-modernization/SKILL.md +27 -2
  298. package/skills/research/scientific-modernization/evals.md +27 -0
  299. package/skills/skill-marketplace.json +97 -62
  300. package/skills/workflow/cut-it/SKILL.md +66 -6
  301. package/skills/workflow/cut-it/evals.md +101 -0
  302. package/skills/workflow/design-council/SKILL.md +118 -28
  303. package/skills/workflow/design-council/evals.md +161 -0
  304. package/skills/workflow/grill-me/SKILL.md +87 -11
  305. package/skills/workflow/grill-me/evals.md +153 -0
  306. package/skills/workflow/workflow-distiller/SKILL.md +77 -18
  307. package/skills/workflow/workflow-distiller/evals.md +118 -0
  308. package/src/cli/args.ts +2 -2
  309. package/src/cli/bootstrap-generate.ts +1 -1
  310. package/src/cli/config-inspect.ts +65 -12
  311. package/src/cli/configure-interop.ts +105 -13
  312. package/src/cli/configure-oauth.ts +57 -0
  313. package/src/cli/configure-onboarding.ts +980 -0
  314. package/src/cli/configure-target.ts +594 -0
  315. package/src/cli/configure.ts +1082 -532
  316. package/src/cli/context-map.ts +114 -0
  317. package/src/cli/context.ts +4 -0
  318. package/src/cli/docs.ts +22 -14
  319. package/src/cli/doctor-naming.ts +5 -5
  320. package/src/cli/doctor-toolchain.ts +3 -3
  321. package/src/cli/eval.ts +1 -2
  322. package/src/cli/extensions.ts +2 -1
  323. package/src/cli/fleet.ts +1 -1
  324. package/src/cli/index.ts +3 -1
  325. package/src/cli/internal-dispatch.ts +3 -4
  326. package/src/cli/lifecycle-presenter.ts +436 -0
  327. package/src/cli/models.ts +10 -2
  328. package/src/cli/modes/print.ts +5 -1
  329. package/src/cli/panes.ts +19 -5
  330. package/src/cli/reset.ts +228 -106
  331. package/src/cli/run.ts +9 -4
  332. package/src/cli/select.ts +664 -0
  333. package/src/cli/share.ts +5 -1
  334. package/src/cli/skills-eval.ts +3 -3
  335. package/src/cli/skills.ts +9 -2
  336. package/src/cli/targets.ts +5 -6
  337. package/src/cli/trace.ts +55 -4
  338. package/src/cli/uninstall.ts +233 -165
  339. package/src/cli/upgrade.ts +204 -149
  340. package/src/cli/usage.ts +86 -27
  341. package/src/cli/validate-model.ts +3 -3
  342. package/src/cli/wiki-generate.ts +1 -1
  343. package/src/core/artifact-paths.ts +1 -1
  344. package/src/core/bash-exec.ts +131 -86
  345. package/src/core/bus-events.ts +51 -6
  346. package/src/core/config.ts +61 -1
  347. package/src/core/defaults.ts +7 -4
  348. package/src/core/dispatch-outcome.ts +16 -0
  349. package/src/core/external-diagnostic.ts +44 -0
  350. package/src/core/gateway-routing.ts +157 -0
  351. package/src/core/guardrails.ts +10 -49
  352. package/src/core/prompt-hint.ts +9 -0
  353. package/src/core/safe-exec.ts +17 -2
  354. package/src/core/skill-activation.ts +89 -2
  355. package/src/domains/agents/builtins/architect.md +2 -3
  356. package/src/domains/agents/builtins/coder.md +3 -2
  357. package/src/domains/agents/builtins/debugger.md +2 -2
  358. package/src/domains/agents/builtins/documenter.md +2 -2
  359. package/src/domains/agents/builtins/git-master.md +1 -1
  360. package/src/domains/agents/builtins/oracle.md +1 -1
  361. package/src/domains/agents/builtins/provenance.md +1 -1
  362. package/src/domains/agents/builtins/researcher.md +1 -1
  363. package/src/domains/agents/builtins/scout.md +1 -1
  364. package/src/domains/agents/builtins/tester.md +2 -2
  365. package/src/domains/agents/builtins/verifier.md +2 -2
  366. package/src/domains/agents/builtins/wiki-writer.md +1 -1
  367. package/src/domains/agents/builtins/world-knowledge.md +31 -0
  368. package/src/domains/agents/catalog.ts +13 -15
  369. package/src/domains/agents/contract.ts +2 -0
  370. package/src/domains/agents/extension.ts +23 -1
  371. package/src/domains/agents/result-contract.ts +70 -0
  372. package/src/domains/config/keybindings.ts +8 -0
  373. package/src/domains/context/extension.ts +0 -3
  374. package/src/domains/context/wiki/map-seed.ts +589 -0
  375. package/src/domains/context/wiki/plan.ts +2 -2
  376. package/src/domains/context/working-set/path-index.ts +1 -0
  377. package/src/domains/dispatch/admission.ts +29 -0
  378. package/src/domains/dispatch/agent-candidates.ts +10 -0
  379. package/src/domains/dispatch/budget-envelope.ts +86 -1
  380. package/src/domains/dispatch/capability-match.ts +11 -0
  381. package/src/domains/dispatch/capacity-lease.ts +17 -0
  382. package/src/domains/dispatch/contract.ts +11 -1
  383. package/src/domains/dispatch/extension.ts +237 -49
  384. package/src/domains/dispatch/host-verification.ts +435 -39
  385. package/src/domains/dispatch/intent-requirements.ts +10 -0
  386. package/src/domains/dispatch/intent.ts +18 -1
  387. package/src/domains/dispatch/path-scope.ts +235 -24
  388. package/src/domains/dispatch/run-event-journal.ts +4 -15
  389. package/src/domains/dispatch/state.ts +2 -3
  390. package/src/domains/dispatch/transport.ts +45 -21
  391. package/src/domains/dispatch/types.ts +58 -3
  392. package/src/domains/dispatch/worker-model-metadata.ts +38 -0
  393. package/src/domains/eval/artifacts/store.ts +5 -0
  394. package/src/domains/eval/metrics/call-ledger-stream.ts +34 -11
  395. package/src/domains/eval/metrics/token-stream.ts +201 -31
  396. package/src/domains/eval/metrics/tracked.ts +40 -4
  397. package/src/domains/eval/runners/clio-run.ts +5 -2
  398. package/src/domains/eval/schema/suite.ts +28 -0
  399. package/src/domains/eval/schema/verdict.ts +2 -2
  400. package/src/domains/eval/store.ts +8 -1
  401. package/src/domains/eval/suites/resolve.ts +13 -1
  402. package/src/domains/eval/suites/run.ts +24 -3
  403. package/src/domains/evidence/trust-status.ts +10 -1
  404. package/src/domains/extensions/contract.ts +15 -1
  405. package/src/domains/extensions/discovery.ts +238 -41
  406. package/src/domains/extensions/extension.ts +105 -6
  407. package/src/domains/extensions/index.ts +24 -0
  408. package/src/domains/extensions/integrity.ts +189 -0
  409. package/src/domains/extensions/manager.ts +17 -1
  410. package/src/domains/extensions/resource-path.ts +27 -0
  411. package/src/domains/extensions/resources.ts +18 -38
  412. package/src/domains/extensions/snapshot-store.ts +39 -0
  413. package/src/domains/extensions/snapshot.ts +180 -0
  414. package/src/domains/extensions/state.ts +385 -57
  415. package/src/domains/extensions/types.ts +118 -1
  416. package/src/domains/interop/registry.ts +6 -2
  417. package/src/domains/interop/types.ts +4 -0
  418. package/src/domains/lifecycle/migrations/2026-09-01-extension-install-digests.ts +27 -0
  419. package/src/domains/lifecycle/migrations/index.ts +6 -0
  420. package/src/domains/lifecycle/naming-resources.ts +19 -4
  421. package/src/domains/lifecycle/naming-yazi.ts +10 -5
  422. package/src/domains/memory/task-memory-policy.ts +70 -26
  423. package/src/domains/memory/task-memory-telemetry.ts +1 -0
  424. package/src/domains/middleware/contract.ts +26 -0
  425. package/src/domains/middleware/extension.ts +24 -24
  426. package/src/domains/middleware/hook-receipts.ts +27 -4
  427. package/src/domains/middleware/hooks-io.ts +65 -32
  428. package/src/domains/middleware/hooks.ts +64 -0
  429. package/src/domains/middleware/index.ts +28 -5
  430. package/src/domains/middleware/marketplace-offer.ts +3 -35
  431. package/src/domains/middleware/memory-intervention.ts +127 -32
  432. package/src/domains/middleware/memory-step-endpoint.ts +3 -2
  433. package/src/domains/middleware/registrations.ts +326 -0
  434. package/src/domains/middleware/runtime.ts +28 -0
  435. package/src/domains/middleware/skills-reminder.ts +31 -2
  436. package/src/domains/middleware/snapshot.ts +20 -7
  437. package/src/domains/mux/contract.ts +38 -0
  438. package/src/domains/mux/detect.ts +6 -13
  439. package/src/domains/mux/index.ts +1 -1
  440. package/src/domains/mux/operations.ts +44 -5
  441. package/src/domains/mux/yazi/assets/yazi.toml +2 -2
  442. package/src/domains/mux/yazi/session.ts +53 -4
  443. package/src/domains/mux/yazi/theme.ts +117 -17
  444. package/src/domains/observability/compaction-usage.ts +118 -0
  445. package/src/domains/observability/contract.ts +10 -11
  446. package/src/domains/observability/cost.ts +1 -1
  447. package/src/domains/observability/extension.ts +17 -4
  448. package/src/domains/observability/out-of-turn-usage.ts +52 -21
  449. package/src/domains/observability/projection.ts +14 -90
  450. package/src/domains/observability/trace-store.ts +43 -7
  451. package/src/domains/prompts/compiler.ts +73 -53
  452. package/src/domains/prompts/contract.ts +15 -3
  453. package/src/domains/prompts/extension.ts +97 -9
  454. package/src/domains/prompts/fragments/identity/clio-worker.md +1 -3
  455. package/src/domains/prompts/fragments/identity/clio.md +6 -12
  456. package/src/domains/prompts/fragments/identity/docs-routing.md +1 -2
  457. package/src/domains/prompts/fragments/identity/self-awareness.md +3 -11
  458. package/src/domains/prompts/fragments/operating/contract.md +7 -15
  459. package/src/domains/prompts/fragments/operating/delegation.md +32 -34
  460. package/src/domains/prompts/fragments/operating/skills.md +10 -24
  461. package/src/domains/prompts/fragments/operating/worker.md +1 -8
  462. package/src/domains/providers/contract.ts +4 -1
  463. package/src/domains/providers/extension.ts +40 -9
  464. package/src/domains/providers/index.ts +1 -1
  465. package/src/domains/providers/model-capabilities.ts +9 -0
  466. package/src/domains/providers/model-discovery.ts +2 -0
  467. package/src/domains/providers/model-runtime-capabilities.ts +99 -25
  468. package/src/domains/providers/models/local-models/clio-coder-local-coding-targets.yaml +699 -114
  469. package/src/domains/providers/runtime-resolution.ts +31 -0
  470. package/src/domains/providers/runtimes/antigravity/antigravity-code.ts +225 -45
  471. package/src/domains/providers/runtimes/common/lmstudio-http.ts +6 -2
  472. package/src/domains/providers/runtimes/common/local-synth.ts +2 -0
  473. package/src/domains/providers/runtimes/common/probe-helpers.ts +7 -2
  474. package/src/domains/providers/runtimes/local-native/llamacpp.ts +9 -1
  475. package/src/domains/providers/runtimes/protocol/litellm.ts +119 -29
  476. package/src/domains/providers/support.ts +11 -5
  477. package/src/domains/providers/target-model-cache.ts +25 -2
  478. package/src/domains/providers/types/capability-flags.ts +2 -0
  479. package/src/domains/providers/types/cost-provenance.ts +19 -0
  480. package/src/domains/providers/types/local-model-quirks.ts +85 -37
  481. package/src/domains/providers/types/runtime-descriptor.ts +20 -1
  482. package/src/domains/providers/types/target-descriptor.ts +19 -0
  483. package/src/domains/resources/index.ts +3 -0
  484. package/src/domains/resources/skills/install.ts +72 -7
  485. package/src/domains/resources/skills/loader.ts +23 -19
  486. package/src/domains/resources/skills/marketplace.ts +63 -11
  487. package/src/domains/safety/autonomy.ts +15 -0
  488. package/src/domains/safety/call-target.ts +1 -1
  489. package/src/domains/safety/index.ts +1 -0
  490. package/src/domains/safety/loop-detector.ts +7 -4
  491. package/src/domains/safety/path-policy.ts +1 -1
  492. package/src/domains/safety/policy-engine.ts +34 -11
  493. package/src/domains/safety/protected-artifacts.ts +191 -88
  494. package/src/domains/safety/run-effects.ts +2 -22
  495. package/src/domains/safety/skill-authority.ts +55 -0
  496. package/src/domains/session/compaction/compact.ts +72 -22
  497. package/src/domains/session/entries.ts +6 -0
  498. package/src/domains/session/task-board.ts +10 -9
  499. package/src/domains/session/usage.ts +3 -3
  500. package/src/domains/share/archive.ts +164 -7
  501. package/src/engine/acp/server.ts +62 -9
  502. package/src/engine/agent.ts +13 -3
  503. package/src/engine/ai.ts +26 -8
  504. package/src/engine/antigravity/subprocess-runtime.ts +386 -120
  505. package/src/engine/api-registry.ts +3 -0
  506. package/src/engine/apis/llamacpp-residency.ts +3 -4
  507. package/src/engine/apis/lmstudio.ts +3 -3
  508. package/src/engine/apis/ollama-native.ts +6 -6
  509. package/src/engine/apis/openai-completions.ts +145 -39
  510. package/src/engine/apis/output-budget.ts +8 -18
  511. package/src/engine/apis/residency.ts +8 -27
  512. package/src/engine/external-subprocess.ts +114 -6
  513. package/src/engine/gemma-channel-filter.ts +19 -0
  514. package/src/engine/loop-guard.ts +92 -12
  515. package/src/engine/worker-runtime.ts +40 -11
  516. package/src/engine/worker-tools.ts +3 -1
  517. package/src/entry/background-model-metadata.ts +18 -0
  518. package/src/entry/compaction-prompt.ts +57 -0
  519. package/src/entry/extension-hook-sources.ts +28 -0
  520. package/src/entry/extension-reload.ts +309 -0
  521. package/src/entry/orchestrator.ts +464 -251
  522. package/src/entry/task-memory-lifecycle.ts +35 -0
  523. package/src/interactive/application-controller.ts +2 -1
  524. package/src/interactive/bus-notices.ts +8 -1
  525. package/src/interactive/chat-loop-messages.ts +16 -17
  526. package/src/interactive/chat-loop.ts +75 -3
  527. package/src/interactive/chat-panel.ts +36 -13
  528. package/src/interactive/chat-renderer.ts +72 -7
  529. package/src/interactive/cost-overlay.ts +26 -2
  530. package/src/interactive/dispatch-board.ts +6 -11
  531. package/src/interactive/footer/widgets.ts +13 -0
  532. package/src/interactive/interactive-application.ts +39 -4
  533. package/src/interactive/interactive-input-runtime.ts +4 -0
  534. package/src/interactive/interactive-presentation.ts +2 -2
  535. package/src/interactive/interactive-slash-runtime.ts +4 -1
  536. package/src/interactive/overlays/extensions.ts +9 -1
  537. package/src/interactive/overlays/help-reference.ts +13 -0
  538. package/src/interactive/overlays/settings.ts +27 -16
  539. package/src/interactive/panes-runtime.ts +111 -35
  540. package/src/interactive/prompt-cache-identity.ts +88 -0
  541. package/src/interactive/renderers/worker-entry.ts +32 -0
  542. package/src/interactive/slash-commands.ts +153 -20
  543. package/src/interactive/stream-pacing-policy.ts +0 -23
  544. package/src/interactive/theme/labels.ts +19 -13
  545. package/src/interactive/turn-context.ts +39 -20
  546. package/src/interactive/turn-recovery.ts +8 -0
  547. package/src/interactive/turn-runtime.ts +27 -11
  548. package/src/interactive/turn-state.ts +7 -0
  549. package/src/interactive/worker-receipts.ts +1 -0
  550. package/src/interactive/worker-stream.ts +6 -1
  551. package/src/interactive/yazi-bridge.ts +60 -6
  552. package/src/tools/agent-tools.ts +30 -1
  553. package/src/tools/artifact.ts +2 -2
  554. package/src/tools/ask-user.ts +3 -3
  555. package/src/tools/bash.ts +1 -1
  556. package/src/tools/bootstrap.ts +4 -0
  557. package/src/tools/builtin-tool-catalog.ts +52 -22
  558. package/src/tools/codewiki/code-nav-surface.ts +6 -0
  559. package/src/tools/codewiki/code-nav.ts +99 -13
  560. package/src/tools/context/docs-engine.ts +20 -7
  561. package/src/tools/context/index.ts +59 -21
  562. package/src/tools/core-bootstrap.ts +28 -6
  563. package/src/tools/credential-present.ts +1 -2
  564. package/src/tools/dispatch-arguments.ts +6 -1
  565. package/src/tools/dispatch-event-text.ts +10 -0
  566. package/src/tools/dispatch-plan.ts +49 -4
  567. package/src/tools/dispatch-run-events.ts +1 -1
  568. package/src/tools/dispatch-runner.ts +12 -0
  569. package/src/tools/dispatch-schema.ts +338 -0
  570. package/src/tools/dispatch-types.ts +3 -0
  571. package/src/tools/dispatch.ts +9 -254
  572. package/src/tools/ledger.ts +3 -5
  573. package/src/tools/monitor-surface.ts +5 -13
  574. package/src/tools/observation.ts +4 -5
  575. package/src/tools/panes-surface.ts +4 -11
  576. package/src/tools/panes.ts +4 -2
  577. package/src/tools/policy.ts +15 -2
  578. package/src/tools/read.ts +5 -6
  579. package/src/tools/registry.ts +41 -12
  580. package/src/tools/result-shaping.ts +18 -14
  581. package/src/tools/steer-surface.ts +1 -1
  582. package/src/tools/tasks.ts +1 -1
  583. package/src/tools/truncate.ts +6 -5
  584. package/src/tools/verify/surface.ts +6 -12
  585. package/src/tools/web-fetch-surface.ts +1 -3
  586. package/src/tools/worker-evidence.ts +3 -1
  587. package/src/worker/spec-contract.ts +4 -0
  588. package/dist/builtins-UJLMOVOV.js +0 -17
  589. package/dist/chunk-5QIAJV2D.js +0 -48
  590. package/dist/chunk-JZWT5J3Y.js +0 -814
  591. package/dist/chunk-K7VKOLQQ.js +0 -15
  592. package/dist/chunk-PMZCIOCJ.js +0 -25
  593. package/dist/chunk-SUW5DORT.js +0 -819
  594. package/dist/chunk-UOV2BYIW.js +0 -107
  595. package/dist/chunk-WR6U3OVP.js +0 -45
  596. package/dist/chunk-Y45G3AXC.js +0 -1558
  597. package/dist/reset-EOLM7GVE.js +0 -230
  598. package/dist/uninstall-N34PCTGJ.js +0 -331
  599. package/dist/upgrade-H7TOM7YL.js +0 -323
  600. package/docs/artifact-versions.md +0 -67
  601. package/docs/development-pipeline.md +0 -121
  602. package/docs/documentation-coverage.md +0 -46
  603. package/docs/documentation-guide.md +0 -167
  604. package/docs/time-conventions.md +0 -101
package/skills/README.md CHANGED
@@ -12,7 +12,7 @@ Clio's engine discovers *runtime* skills from these roots (see
12
12
  - extension roots
13
13
  - `~/.agents`, `~/.claude`, `~/.codex`, `~/.config/opencode`, `~/.copilot` → their `skills/` subdir
14
14
  - `<clio-config>/skills` (per-user)
15
- - project `.agents` / `.claude` / `.codex` / `.opencode` / `.github` → their `skills/` subdir (model-visible only with `CLIO_CODER_TRUST_PROJECT_SKILLS=1`; untrusted by default)
15
+ - project `.agents` / `.claude` / `.codex` / `.opencode` / `.github` → their `skills/` subdir (model-visible only when `integrations.projectResources.trustProjectImports` is true; untrusted by default)
16
16
  - `.clio-coder/skills` (per-project)
17
17
 
18
18
  This repo's `skills/` directory is **not** one of those roots, so nothing here
@@ -22,10 +22,10 @@ auto-loads. That gap is deliberate.
22
22
  |---|---|---|
23
23
  | Location | a discovery root above | `skills/<category>/<name>/` in this repo |
24
24
  | Author | any user or harness | Clio authors, reviewed |
25
- | Provenance | none required | `clio:` block with `registry-id` + `source-url` + `audit: pass` |
25
+ | Provenance | none required | `clio-coder:` block with `registry-id` + `source-url` + `audit: pass` |
26
26
  | Auto-loaded | yes | no, as it must be installed |
27
27
 
28
- "Approved" is visible in the frontmatter: a maintainer set `clio.audit: pass`
28
+ "Approved" is visible in the frontmatter: a maintainer set `clio-coder.audit: pass`
29
29
  and a `version`. A skill a user wrote themselves carries none of those fields.
30
30
 
31
31
  ## Catalog
@@ -63,6 +63,7 @@ folder is presentation and provenance, not a namespace.
63
63
  | [`worktree-create`](git/worktree-create/) | workflow | Stand up isolated worktrees for parallel branches: detected install/config/health-check, per-worktree verification. |
64
64
  | [`worktree-merge`](git/worktree-merge/) | workflow | Integrate finished worktree branches through a throwaway integration branch with per-merge tests and a full final gate. |
65
65
  | [`resolve-merge-conflicts`](git/resolve-merge-conflicts/) | workflow | A merge/rebase is stopped on conflicts. Resolves from both sides' reconstructed intent, validates, completes the operation. |
66
+ | [`branch-closeout`](git/branch-closeout/) | workflow | Proves merged work on the canonical base, inspects and removes associated worktrees through Git, deletes local branches safely, and audits surviving repository refs. |
66
67
 
67
68
  ### `research/` — scientific and literature work
68
69
 
@@ -101,11 +102,13 @@ folder is presentation and provenance, not a namespace.
101
102
  | [`herdr`](meta/herdr/) | integration | The user asks to launch, drive, or inspect another agent or command in a Herdr pane — including a second Clio Coder instance. Requires `HERDR_ENV=1`. |
102
103
 
103
104
  Each SKILL.md may declare `allowed-tools` / `disallowed-tools`. After a skill
104
- loads, Clio enforces that declaration at tool admission until the turn (or
105
- worker run) ends: calls outside the merged surface are blocked with reason
106
- code `skill_surface`, with `context` and `ask_user` always admitted. A
107
- skill can narrow its tool surface but never grant tools the host would not
108
- allow. Full semantics: docs/safety-model.md, "Skill tool surface narrowing".
105
+ loads, Clio enforces that declaration at tool admission for the rest of the
106
+ session, across the operator's later turns, until another skill replaces it or
107
+ the operator runs `/skill off` (a worker run keeps the run-scoped lifetime):
108
+ calls outside the merged surface are blocked with reason code `skill_surface`,
109
+ with `context` and `ask_user` always admitted. A skill can narrow its tool
110
+ surface but never grant tools the host would not allow. See [Skill tool surface narrowing](../docs/architecture/safety-model.md#skill-tool-surface-narrowing)
111
+ for the full semantics.
109
112
 
110
113
  ## Install (activate a marketplace skill)
111
114
 
@@ -140,8 +143,8 @@ teammate cloning it gets the same behavior.
140
143
 
141
144
  | Set | Scope | Why |
142
145
  |---|---|---|
143
- | `context-prime`, `context-handoff` | user | Session boundaries follow the operator across every repo; a handoff written in one project is read at the start of the next. |
144
- | `find-skills`, `skill-craft` | user | Discovery and authoring are things you do to your toolkit, not things a project does. Installing `find-skills` at user scope is also what makes the Clio copy outrank the compat-root one. |
146
+ | `context-prime`, `context-handoff` | user | The workflow is useful in every repo, while each handoff remains scoped to the project where it was written. |
147
+ | `find-skills`, `skill-craft` | user | Discovery and authoring are things you do to your toolkit, not things a project does. A user install outranks copies in shared user compatibility roots. |
145
148
  | `credentials` | user | Credential handling is a personal-machine discipline; a repo does not get to define it. |
146
149
  | `clio-coder-dev`, `clio-coder-test` | project, in this repo only | They describe Clio's own source tree. Elsewhere they are noise. |
147
150
  | `--category git` | project, where `git-master` is used | Branch, PR, and worktree conventions are the repository's, and the recipe binds them by name. |
@@ -150,8 +153,11 @@ teammate cloning it gets the same behavior.
150
153
  | `--category coding` | project | `tdd` and `coding-standards` follow the language and the test seams of the checkout. |
151
154
  | `--category workflow` | either | `grill-me` and `cut-it` travel with the operator; `design-council` is worth pinning per project when the project has recurring design forks. |
152
155
 
153
- When both scopes carry the same name, project wins: `.clio-coder/skills` outranks the
154
- user root, which outranks every compat root.
156
+ Collision precedence from lowest to highest is extension, shared user
157
+ compatibility roots, the Clio user root, project compatibility roots,
158
+ `.clio-coder/skills`, then an explicit CLI skill path. Project compatibility
159
+ roots are model-visible only after the project-import trust opt-in; their
160
+ collision rank is still above the user root.
155
161
 
156
162
  After install, confirm Clio sees it:
157
163
 
@@ -176,21 +182,23 @@ both route through `clio-coder skills`. A community skill of the same name is
176
182
  commonly present in the compat roots (`~/.agents/skills`,
177
183
  `~/.claude/skills`) and drives the external `npx skills` installer, which
178
184
  bypasses Clio. Compat roots stay enabled, and the loader resolves name
179
- collisions by precedence: the Clio user root and `.clio-coder/skills` outrank the
180
- compat roots. Install the catalog copy so it wins:
185
+ collisions by the precedence above. A user install beats the shared user
186
+ compatibility copy. A project install beats both project and user
187
+ compatibility copies. Install at the scope where the catalog copy must win:
181
188
 
182
189
  ```bash
183
- clio-coder skills install find-skills --user # or --project for one repo
190
+ clio-coder skills install find-skills --user
191
+ clio-coder skills install find-skills --project # strongest discovered project copy
184
192
  ```
185
193
 
186
194
  ## Publishing: the marketplace index
187
195
 
188
196
  `npm run skills:pin` writes two files. `registry.yaml` pins content hashes and
189
197
  is what drift is measured against. `skill-marketplace.json` is the published
190
- index: one entry per skill with `name`, `description`, `sourceUrl` (the
191
- skill's own `clio.source-url`), `version`, `audit`, and `category`. It carries
192
- no hashes, because duplicating them into a second published artifact only
193
- creates a way for the two to disagree.
198
+ index: one entry per skill with `name`, `description`, optional `triggers`,
199
+ `sourceUrl` (the skill's own `clio-coder.source-url`), `version`, `audit`, and
200
+ `category`. It carries no hashes, because duplicating them into a second
201
+ published artifact only creates a way for the two to disagree.
194
202
 
195
203
  A Clio install anywhere points at it and gets bare-name installs from this
196
204
  catalog:
@@ -216,12 +224,12 @@ The frontmatter contract has two layers, and the split is the point:
216
224
  - **Core keys stay community-standard.** `name`, `description`, `version`,
217
225
  `license`, and `allowed-tools` mean exactly what Claude Code and other agent
218
226
  loaders expect. No Clio-specific key ever lives at the top level.
219
- - **Everything Clio-specific nests under one reserved `clio:` mapping.**
227
+ - **Everything Clio-specific nests under one reserved `clio-coder:` mapping.**
220
228
  Registry identity, provenance, audit and eval status, agent bindings, model
221
229
  guidance — all of it.
222
230
 
223
231
  The invariant this buys: a Clio skill dropped into any `.claude/skills`
224
- directory loads and works in Claude Code, which ignores the `clio:` block as
232
+ directory loads and works in Claude Code, which ignores the `clio-coder:` block as
225
233
  an unknown key. Loaded by Clio Coder, the same file carries its full
226
234
  marketplace metadata. One file, no forks, no lossy export.
227
235
 
@@ -230,7 +238,9 @@ Required shape for every catalog skill:
230
238
  ```yaml
231
239
  ---
232
240
  name: <name> # lowercase, hyphens, matches the folder
233
- description: Use when ... # triggers only, third person, <=1024 chars
241
+ description: <one sentence> # what it does, plus "Not for X; use Y" routing, <=1024 chars
242
+ triggers: # the phrases a user types that should reach it
243
+ - <phrase>
234
244
  version: 0.1.0
235
245
  license: Apache-2.0
236
246
  allowed-tools: # optional; community-standard tool narrowing
@@ -248,7 +258,7 @@ clio-coder:
248
258
  ---
249
259
  ```
250
260
 
251
- Field semantics inside `clio:`:
261
+ Field semantics inside `clio-coder:`:
252
262
 
253
263
  - `registry-id` names the audited catalog a skill claims membership of; it is
254
264
  content, participates in the pinned hash, and survives installs.
@@ -280,16 +290,16 @@ Field semantics inside `clio:`:
280
290
  `requires: [skill:<name>, ...]` stays top-level: Clio's loader consumes it for
281
291
  dependency warnings, and other harnesses ignore it like any unknown key.
282
292
 
283
- Legacy flat keys (`registry-id`, `source-url`, `audit` at the top level) are
284
- still read by the loader as a fallback for copies installed before the nested
285
- form existed; the catalog itself must use the nested form, and `npm run
293
+ The deprecated nested `clio:` mapping and legacy flat keys (`registry-id`,
294
+ `source-url`, `audit` at the top level) are still read as fallbacks for older
295
+ installed copies. The catalog itself must use `clio-coder:`, and `npm run
286
296
  skills:check` enforces that.
287
297
 
288
298
  ### Versioning policy
289
299
 
290
- `version` describes the skill as a working instrument, and the pinned hash
291
- already records every byte, so the version only moves when the thing an
292
- operator runs changes:
300
+ `version` describes the skill as a working instrument. The registry separately
301
+ hashes the normalized contents of `SKILL.md`; it does not hash sibling files.
302
+ Move the version whenever the workflow an operator runs changes:
293
303
 
294
304
  | Change | Version |
295
305
  |---|---|
@@ -305,11 +315,11 @@ a broken link or a typo in a step. Nothing in this catalog is 1.0: a major bump
305
315
  is reserved for a skill whose triggers change enough that an operator relying on
306
316
  the old one would be surprised.
307
317
 
308
- Metadata changes do not bump because `registry.yaml` pins a
309
- provenance-stripped hash, so content edits are already caught byte-exactly, and
310
- raising a version for an `eval-status` line would make the number mean two
311
- different things at once. The trade is deliberate: the version is coarse, the
312
- hash is exact, and drift detection uses the hash.
318
+ Lifecycle metadata changes do not bump the workflow version. The normalized
319
+ `SKILL.md` hash catches non-stripped frontmatter and body edits; install fields
320
+ such as `source-url` and `audit` are stripped. A sibling `references/`,
321
+ `scripts/`, or `evals.md` change is represented by the required version change
322
+ inside `SKILL.md`, because sibling bytes are not hashed directly.
313
323
 
314
324
  ## Claude Code interop
315
325
 
@@ -317,7 +327,7 @@ The invariant is that a catalog skill dropped unmodified into `.claude/skills`
317
327
  loads and runs in Claude Code. Verified against Claude Code 2.1.231:
318
328
  `skills/git/ship` copied into a scratch project's
319
329
  `.claude/skills/`, invoked headlessly, loaded through the `Skill` tool and
320
- answered a question about its own body. The `clio:` block is an unknown
330
+ answered a question about its own body. The `clio-coder:` block is an unknown
321
331
  frontmatter key there and is ignored.
322
332
 
323
333
  **`allowed-tools` means the opposite thing in each harness, and that is the one
@@ -353,7 +363,7 @@ The rest of the surface, read from the same build:
353
363
  | `allowed-tools` | Grants, as above. Accepts a YAML list or one comma/space-separated string, same as Clio. |
354
364
  | `disallowed-tools` | Not read. A Clio denial is not enforced there. |
355
365
  | `requires:` | Not read; ignored as an unknown key, so a dependency warning is Clio-only. |
356
- | `clio:` | Not read; ignored as an unknown key. This is the invariant. |
366
+ | `clio-coder:` | Not read; ignored as an unknown key. This is the invariant. |
357
367
  | Unparseable frontmatter | The per-skill load is wrapped in a bare catch: the skill is skipped silently, with no diagnostic. Clio warns instead. |
358
368
  | Size | No cap on SKILL.md. Clio rejects over 1 MiB and warns over 50 KiB, the activation delivery cap. |
359
369
  | `references/`, `scripts/` subfolders | Not enumerated at load time; they are files the body tells the model to read, which works in both. |
@@ -370,7 +380,7 @@ A skill is "approved for the marketplace" when a maintainer:
370
380
  1. Reviews `SKILL.md` against [`skill-craft`](meta/skill-craft/) (trigger-only
371
381
  description, checkable completion criteria, progressive disclosure, pruning
372
382
  pass, evals present).
373
- 2. Confirms it carries the frontmatter spec above with `clio.audit: pass`.
383
+ 2. Confirms it carries the frontmatter spec above with `clio-coder.audit: pass`.
374
384
  3. Sets / bumps `version`.
375
385
 
376
386
  Each skill ships an `evals.md` recording the baseline scenarios it was tested
@@ -396,10 +406,11 @@ catalog where any skill is missing the required frontmatter, `audit: pass`, or
396
406
  its `evals.md`, declares a tool name Clio does not have, or carries a
397
407
  `source-url` that no longer ends with its catalog path. `npm run skills:check`
398
408
  (run in CI) fails on any drift between the catalog and either generated file,
399
- `registry.yaml` or `skill-marketplace.json`. Pinned hashes are provenance-stripped
400
- (install-lifecycle stamps like `installed-at` do not count as drift; content
401
- and registry-identity edits do), so a copy installed via `clio-coder skills install`
402
- still verifies against its audited source at activation.
409
+ `registry.yaml` or `skill-marketplace.json`. Each pin covers the normalized
410
+ `SKILL.md`, not the whole skill directory. Install-lifecycle stamps such as
411
+ `installed-at` do not count as drift; body, version, and registry-identity
412
+ edits do. A copy installed via `clio-coder skills install` therefore still
413
+ verifies against its audited source at activation.
403
414
 
404
415
  A skill may declare typed dependencies with `requires: [skill:<name>, ...]`
405
416
  frontmatter; the loader warns at load time when a required skill is not
@@ -1,18 +1,19 @@
1
1
  ---
2
2
  name: ast-grep
3
- description: Use when a code search needs structure, not text "find all async functions without error handling", "find calls with this argument shape", "find X inside Y" — or when grep returns too much noise to filter. Writes and tests ast-grep rules, then scans the codebase. Search only; never rewrites code. Not for plain string or filename lookups; use grep or find.
3
+ description: "Structural code search with ast-grep rules: finds code by shape when grep on text is too noisy, and never rewrites it. Not for plain string or filename lookups; use grep or find."
4
4
  triggers:
5
5
  - structural code search
6
6
  - ast-grep rule
7
7
  - find calls with this argument shape
8
8
  - find code inside a function
9
9
  - grep returns too much noise
10
- version: 0.1.1
10
+ version: 0.3.0
11
11
  license: Apache-2.0
12
12
  allowed-tools:
13
13
  - bash
14
14
  - read
15
15
  - write
16
+ - edit
16
17
  - grep
17
18
  - ls
18
19
  clio-coder:
@@ -36,30 +37,78 @@ that returns nothing tells you nothing.
36
37
  Search only. Never use `--update-all` / `-U` / `--rewrite`; when matches need
37
38
  changing, report them and edit through the normal edit tools.
38
39
 
40
+ ## Arguments
41
+
42
+ ```text
43
+ /skill ast-grep [--lang <language>] [--path <dir>] <structural question>
44
+ ```
45
+
46
+ - `--lang`: tree-sitter language name (`javascript`, `typescript`, `python`,
47
+ `rust`, `go`, ...). Omit to infer from the files under `--path`.
48
+ - `--path`: directory or file to scan. Omit to scan the project source
49
+ directory (`src/` when it exists, otherwise `.`).
50
+ - Everything else is the question: what shape to find, what to exclude.
51
+
52
+ The five steps below are the plan; do not open a task list for them.
53
+
54
+ Examples:
55
+
56
+ - `/skill ast-grep find async functions that await but have no try/catch`
57
+ - `/skill ast-grep --lang python --path app/ find calls to open() outside a with block`
58
+
59
+ Shell rules for every `bash` call in this workflow: one command per call,
60
+ plain and direct. Never use `$(...)` or backticks; they trigger an approval
61
+ gate that ends a headless run. Always pass rules through a file, never
62
+ through `--inline-rules`, because `$VAR` metavariables inside shell quotes
63
+ produce quoting errors that look exactly like non-matches.
64
+
39
65
  ## Step 0 — Check the binary
40
66
 
41
67
  ```bash
42
- command -v ast-grep || command -v sg
68
+ ast-grep --version
69
+ ```
70
+
71
+ If that fails, try the short alias, but verify it is really ast-grep:
72
+
73
+ ```bash
74
+ sg --version
43
75
  ```
44
76
 
45
- If neither exists, say ast-grep is not installed (`cargo install ast-grep` or
46
- the platform package) and stop. Some installs expose only `sg`; use whichever
47
- resolved.
77
+ Only an output that starts with `ast-grep` counts. On many Linux systems
78
+ `sg` is the unrelated shadow-utils "switch group" command and prints a
79
+ usage error; that is NOT ast-grep. If neither binary is ast-grep, say so
80
+ (`npm i -g @ast-grep/cli` or `cargo install ast-grep`) and stop. Do not
81
+ fall back to text grep and present it as a structural result.
82
+
83
+ Use the resolved binary name in every later command.
48
84
 
49
85
  ## Step 1 — Pin down the question
50
86
 
51
- Before writing any rule, state: the target language; the structure to match;
52
- what must be included and excluded. If the request is ambiguous on any of
53
- these, ask one clarifying question instead of guessing.
87
+ Before writing any rule, write in your reply: the target language; the
88
+ structure to match; what must be included and excluded. If the request is
89
+ ambiguous on any of these, ask one clarifying question. When running
90
+ headlessly, state your reading of the ambiguity and proceed.
54
91
 
55
92
  ## Step 2 — Write a minimal example
56
93
 
57
- Write the smallest code snippet that MUST match (and, when exclusions matter,
58
- one that must NOT match) to a scratch file, e.g. `/tmp/astgrep-example.js`.
59
- This is the rule's test fixture.
94
+ Create a scratch directory inside the workspace and write the smallest
95
+ code snippet that MUST match and, when exclusions matter, one that must
96
+ NOT match:
97
+
98
+ ```bash
99
+ mkdir -p .clio-coder/scratch/ast-grep
100
+ ```
101
+
102
+ Then write `.clio-coder/scratch/ast-grep/positive.<ext>` and
103
+ `.clio-coder/scratch/ast-grep/negative.<ext>` with the `write` tool. These
104
+ are the rule's test fixture: one file that must match, one that must not,
105
+ nothing more. Never write under `/tmp`, not even by shell redirection; a
106
+ write outside the workspace needs an approval a headless run cannot give,
107
+ and the call is refused.
60
108
 
61
109
  ## Step 3 — Write the rule, simplest first
62
110
 
111
+ Write `.clio-coder/scratch/ast-grep/rule.yml` with the `write` tool.
63
112
  Escalate only when the simpler form fails:
64
113
 
65
114
  1. `pattern` alone for direct shapes: `console.log($ARG)`.
@@ -73,7 +122,6 @@ Non-negotiable: every relational rule (`has`, `inside`) carries
73
122
  rule silently under-matches.
74
123
 
75
124
  ```yaml
76
- # /tmp/astgrep-rule.yml
77
125
  id: async-no-trycatch
78
126
  language: javascript
79
127
  rule:
@@ -84,6 +132,15 @@ rule:
84
132
  has: {pattern: 'try { $$$ } catch ($E) { $$$ }', stopBy: end}
85
133
  ```
86
134
 
135
+ This example is verified against ast-grep 0.45 on JavaScript. When the
136
+ question is this one, use it verbatim. Two facts it encodes that models
137
+ guess wrong: tree-sitter JavaScript and TypeScript have no
138
+ `async_function_declaration` kind (the `async` keyword is a token inside
139
+ `function_declaration`; assert it with `pattern: 'async function $F($$$) { $$$ }'`
140
+ when async matters), and an unknown `kind` fails the whole rule with
141
+ `Kind ... is invalid` (exit 8); answer that error with the tree dump in
142
+ Step 4, never with another guessed name.
143
+
87
144
  Full syntax (atomic, relational, composite rules, metavariables, `constraints`,
88
145
  `utils`): read `references/rule_reference.md` when the rule needs more than
89
146
  the three forms above.
@@ -91,46 +148,57 @@ the three forms above.
91
148
  ## Step 4 — Test against the example
92
149
 
93
150
  ```bash
94
- ast-grep scan --rule /tmp/astgrep-rule.yml /tmp/astgrep-example.js
151
+ ast-grep scan --rule .clio-coder/scratch/ast-grep/rule.yml .clio-coder/scratch/ast-grep
95
152
  ```
96
153
 
97
- Prefer a rule file over `--inline-rules`: inline YAML in shell needs `$VAR`
98
- escaped as `\$VAR` (or single quotes), and quoting errors look exactly like
99
- non-matches.
100
-
101
154
  The rule must match the positive example and miss the negative one before
102
- you scan anything real. When it does not, debug in this order:
155
+ you scan anything real. When it passes, go to Step 5. When it does not,
156
+ debug in this order, changing the rule file with `edit`:
103
157
 
104
158
  1. Strip the rule to its simplest positive key; re-add parts one at a time.
105
159
  2. Confirm every `has`/`inside` has `stopBy: end`.
106
- 3. Dump the tree to check node kinds never guess a `kind` name:
160
+ 3. Dump the tree to check node kinds; never guess a `kind` name:
107
161
 
108
162
  ```bash
109
- ast-grep run --pattern '<target code>' --lang javascript --debug-query=cst
163
+ ast-grep run --pattern 'async function f() { await g(); }' --lang javascript --debug-query=cst
110
164
  ```
111
165
 
112
166
  (`cst` = every node; `ast` = named nodes only; `pattern` = how ast-grep
113
- parsed your pattern.)
167
+ parsed your pattern.) Pipe long dumps through `head -80`. Dump the tree
168
+ only after a test has failed; a dump before the first test is a wasted
169
+ turn.
114
170
 
115
171
  ## Step 5 — Scan the codebase
116
172
 
117
173
  Simple one-node patterns skip the rule file:
118
174
 
119
175
  ```bash
120
- ast-grep run --pattern 'console.log($ARG)' --lang javascript .
176
+ ast-grep run --pattern 'console.log($ARG)' --lang javascript src
121
177
  ```
122
178
 
123
179
  Rule-based scans:
124
180
 
125
181
  ```bash
126
- ast-grep scan --rule /tmp/astgrep-rule.yml <path>
182
+ ast-grep scan --rule .clio-coder/scratch/ast-grep/rule.yml src
127
183
  ```
128
184
 
129
- Add `--json` when the output feeds further processing. Report matches as
130
- `path:line` with a one-line reading of each; do not paste raw JSON at the
131
- user. Done when the reported matches answer the Step 1 question and false
132
- positives you noticed are either excluded by the rule or called out. Delete
133
- the scratch files.
185
+ Scan the requested path, not `.`, so your own fixture under
186
+ `.clio-coder/scratch` does not show up as a match; if it does, drop those
187
+ lines from the report. Add `--json` only when the output feeds further
188
+ processing.
189
+
190
+ Report matches as `path:line` with a one-line reading of each; do not paste
191
+ raw JSON at the user. Done when the reported matches answer the Step 1
192
+ question and false positives you noticed are either excluded by the rule or
193
+ called out. Delete the scratch files last, naming each file. `rm -r` and
194
+ `rm -f` are hard-blocked by the safety net, so:
195
+
196
+ ```bash
197
+ rm .clio-coder/scratch/ast-grep/positive.js .clio-coder/scratch/ast-grep/negative.js .clio-coder/scratch/ast-grep/rule.yml
198
+ ```
199
+ ```bash
200
+ rmdir .clio-coder/scratch/ast-grep
201
+ ```
134
202
 
135
203
  ## Red flags
136
204
 
@@ -138,5 +206,8 @@ the scratch files.
138
206
  - A `has`/`inside` without `stopBy: end`.
139
207
  - A guessed `kind` name instead of a `--debug-query=cst` dump.
140
208
  - Any rewrite flag: this skill only reads.
141
- - Falling back to grep halfway because rule debugging felt slow — fix the
142
- rule with Step 4; that is the job.
209
+ - Treating shadow-utils `sg` as ast-grep because `command -v sg` succeeded.
210
+ - Cleaning up with `rm -rf`, or writing fixtures under `/tmp`; both are
211
+ refused in a headless run.
212
+ - Falling back to grep halfway because rule debugging felt slow; fix the
213
+ rule with Step 4, that is the job.
@@ -54,3 +54,29 @@ concurrency rule, admission and profile entries, and prompt-prefix cost paid by
54
54
  every run whether or not anyone searches structurally. That is a tool-surface
55
55
  decision, not skill-catalog cleanup. Until then the skill stays
56
56
  `scenarios-recorded` and its first step is the binary check it already has.
57
+
58
+ ## Battletest record (2026-09-03)
59
+
60
+ S1 fixture plus `src/orders.js` (one matching `loadOrders`, one non-awaiting
61
+ `noAwait`), `ornith1.5-35b-moe` on mini (llamacpp), `clio-coder run
62
+ --autonomy full-auto --json`, headless, `@ast-grep/cli` 0.45.3 on PATH.
63
+ Ground truth: `src/users.js:1` and `src/orders.js:1` match; `safe.js`,
64
+ `plain.js`, `noAwait` do not.
65
+
66
+ | run | wall | turns | in / out tokens | outcome |
67
+ |---|---|---|---|---|
68
+ | baseline (no skill) | 565s | 37 | 16.2k / 33.0k | never produced a valid rule (`$($params)` syntax, relational rules without `stopBy: end`, `--inline-rules` quoting); 3 `$(...)` calls; answered by reading the source; scratch left in `.astscratch/` |
69
+ | v0.2.0 | 123s | 13 | 7.9k / 7.1k | correct 2/5 via a proven rule; wrote fixtures to `/tmp` first, then into the workspace; `rm -rf` and `find -delete` hard-blocked, scratch left behind |
70
+ | v0.3.0 first cut | 176s | 13 | 9.8k / 10.5k | correct; dumped the tree before writing any rule; a `/tmp` write via shell redirection refused; `rm -rf` hard-blocked |
71
+ | v0.3.0 | 190s | 24 | 9.5k / 10.9k | correct; zero safety blocks; scratch removed with per-file `rm` + `rmdir`; working tree clean. Spent 10 turns recovering from a guessed `async_function_declaration` kind |
72
+
73
+ Changes in v0.3.0: `## Arguments` contract; Step 0 verifies `sg --version`
74
+ prints `ast-grep` because `/usr/bin/sg` is shadow-utils on Linux; scratch
75
+ lives in `.clio-coder/scratch/ast-grep/` (a `/tmp` write needs an approval
76
+ a headless run cannot give); rules always go through a file; tree dumps
77
+ only after a failed test; cleanup by named `rm` + `rmdir` because
78
+ `rm -r`/`rm -f` match the `rm-recursive-or-force` damage-control block;
79
+ `edit` added for rule iteration. The example rule was re-verified verbatim
80
+ against 0.45.3 (matches exactly the two expected functions) and the skill
81
+ now says so, plus that an unknown `kind` fails with exit 8 rather than
82
+ matching nothing.
@@ -1,24 +1,21 @@
1
1
  ---
2
2
  name: coding-standards
3
- description: "Use when writing or refactoring TypeScript and the project has not pinned its own conflicting standards — new modules, error-handling design, schema parsing, module boundaries — or when another skill needs a TypeScript standards reference. Correct-by-construction rules: errors as values, parse don't validate, illegal states unrepresentable, deep modules, functional core / imperative shell."
3
+ description: Correct-by-construction TypeScript rules (errors as values, parse don't validate, illegal states unrepresentable, deep modules) for writing or refactoring TypeScript when the project has not pinned its own standards.
4
4
  triggers:
5
5
  - TypeScript coding standards
6
6
  - errors as values
7
7
  - parse don't validate
8
8
  - illegal states unrepresentable
9
9
  - functional core imperative shell
10
- version: 0.1.1
10
+ version: 0.3.0
11
11
  license: Apache-2.0
12
- allowed-tools:
13
- - read
14
- - grep
15
12
  clio-coder:
16
13
  registry-id: iowarp/clio-coder
17
14
  source-url: https://github.com/iowarp/clio-coder/tree/main/skills/coding/coding-standards
18
15
  audit: pass
19
16
  provenance: adapted
20
17
  origin: https://github.com/dmmulroy/skills/tree/main/coding-standards
21
- eval-status: smoke-checked
18
+ eval-status: scenarios-recorded
22
19
  model-size: any
23
20
  provisional: true
24
21
  agents:
@@ -36,6 +33,44 @@ code, and never rewrite unrelated old code without an explicit migration
36
33
  request. **The host project's own documented standards always win over
37
34
  this file.**
38
35
 
36
+ This skill declares no tool surface on purpose: it rides along with
37
+ whatever task is in flight (writing, refactoring, reviewing), so it must
38
+ not narrow the tools that task needs.
39
+
40
+ ## Arguments
41
+
42
+ ```text
43
+ /skill coding-standards [<task>]
44
+ ```
45
+
46
+ - With a task: do the task, and hold every new or changed TypeScript line
47
+ to the rules below. Keep using the ordinary `write`, `edit`, and `bash`
48
+ tools; the standards change what you write, not how you write it.
49
+ - Without a task: answer as a reference. Quote the relevant rule and show
50
+ a before/after snippet; do not touch the repository.
51
+
52
+ ## How to apply
53
+
54
+ 1. Read the host project's instruction file and one or two existing
55
+ modules near the change. If the project pins its own conventions on
56
+ errors, validation, or module layout, those win; note the conflict in
57
+ one line and follow the host.
58
+ 2. Before writing, state in your reply which rules the change touches (for
59
+ a parser: errors, parse-don't-validate, illegal states; for a service:
60
+ modules). This is the checklist for the code you are about to write.
61
+ 3. Write the code. Then run the project's typecheck (`npx tsc --noEmit` or
62
+ the repo script) with one plain `bash` call; never use `$(...)` or
63
+ backticks in the command.
64
+ 4. If you want runtime evidence beyond the typecheck, prefer a single
65
+ `node -e` (or the project's runtime) call. If you must write a smoke
66
+ script, put it under `.clio-coder/scratch/` and remove it with plain
67
+ `rm <file>`; `rm -f`, `rm -r`, `find -delete`, and moving files to
68
+ `/tmp` are all refused by the safety net in a headless run, and every
69
+ refused attempt is a wasted turn.
70
+ 5. Finish with a short audit of the diff against the checklist: each rule
71
+ either satisfied, or deliberately not, with the reason. `git status`
72
+ must show only the files the task asked for.
73
+
39
74
  ## Errors
40
75
 
41
76
  - Expected failures are values in the return type, as custom tagged
@@ -32,3 +32,26 @@ Expected:
32
32
 
33
33
  One representative scenario via `clio-coder skills eval` against Nemo-3.5-Lightning
34
34
  (30B local, llamacpp on mini), full-auto sandbox. PASS (smoke). Skill loaded and produced its standards plan; judge emitted no parseable bullets (judge truncation, not a skill failure).
35
+
36
+ ## Battletest record (2026-09-03)
37
+
38
+ S1 fixture: strict `tsconfig.json` (`strict`, `noUncheckedIndexedAccess`,
39
+ `exactOptionalPropertyTypes`), empty `src/`, `typescript` on PATH. Task:
40
+ add `src/webhook.ts` (parse unknown payload to a domain value, in-memory
41
+ store, report invalid payloads to the caller), then run `npx tsc --noEmit`.
42
+ `ornith1.5-35b-moe` on mini (llamacpp), `clio-coder run --autonomy
43
+ full-auto --json`, headless.
44
+
45
+ | run | wall | turns | in / out tokens | outcome |
46
+ |---|---|---|---|---|
47
+ | baseline (no skill) | 163s | 13 | 4.1k / 9.8k | typechecks; `{ok: boolean}` result with string errors; 5 `as` casts after manual checks |
48
+ | v0.2.0 | 693s | 7 | 4.6k / 42.6k | **no file written.** `allowed-tools: [read, grep]` narrowed the surface so `write` and `dispatch` were blocked (`skill_surface`); the model ended with a design-only report |
49
+ | v0.3.0 | 304s | 14 | 19.4k / 18.0k | typechecks; `_tag` discriminated `Result` and per-field tagged parse errors; 0 throws, 0 `any`, 0 `!`, 0 casts. Lost 5 turns cleaning a smoke script (`rm -f`, `find -delete`, `mv` to `/tmp` all refused) |
50
+
51
+ Root cause of the v0.2.0 failure: `src/core/skill-activation.ts` enforces
52
+ `allowed-tools` as a hard admission block, so a reference skill that names
53
+ only read tools makes the coding task impossible whenever it is the only
54
+ loaded skill. v0.3.0 declares no tool surface (same pattern as the meta
55
+ reference skills), adds an `## Arguments` contract, a four-line apply
56
+ checklist, and a scratch/cleanup rule (`.clio-coder/scratch/`, plain `rm`)
57
+ so the safety net stops eating turns.