@iowarp/clio-coder 0.4.2 → 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.
- package/CHANGELOG.md +35 -0
- package/CONTRIBUTING.md +86 -19
- package/README.md +35 -6
- package/dist/{acp-TMDQZDIG.js → acp-H2NGRPWO.js} +11 -11
- package/dist/{agents-5N5NG3XG.js → agents-TL5LLUQP.js} +54 -53
- package/dist/assets/codewiki.json +1 -1
- package/dist/{auth-Z5CCBXKQ.js → auth-E5SW4HMS.js} +19 -16
- package/dist/{builtins-K6TNDT24.js → builtins-IA7V7FUC.js} +9 -4
- package/dist/{chunk-ZW4HH5JJ.js → chunk-2APPQIER.js} +6 -6
- package/dist/{chunk-72GZI5EV.js → chunk-2JH2WHGE.js} +2 -2
- package/dist/{chunk-UBRFI4HS.js → chunk-2UG5F4C5.js} +127 -47
- package/dist/{chunk-UH632ZYL.js → chunk-2UH2KFUP.js} +2 -2
- package/dist/{chunk-3F7VUY77.js → chunk-2VIKGWFZ.js} +2 -2
- package/dist/{chunk-I66EAJFY.js → chunk-2WZ546HR.js} +267 -232
- package/dist/{chunk-RKSR6VSF.js → chunk-4IUZQIJ3.js} +29 -1
- package/dist/{chunk-2X4RYJTJ.js → chunk-4UVU7BJ5.js} +2 -2
- package/dist/{chunk-M2DAX4F6.js → chunk-4WR7VSYB.js} +2 -2
- package/dist/{chunk-5KW52TEP.js → chunk-54CBCGIR.js} +5 -5
- package/dist/{chunk-3KIPBMUA.js → chunk-5ICU3EUH.js} +2 -2
- package/dist/{chunk-77QIVUZB.js → chunk-5MEZN6CB.js} +4 -4
- package/dist/{chunk-O42A54GG.js → chunk-5OIVVPHF.js} +2 -2
- package/dist/{chunk-LJID3DYZ.js → chunk-64I3JVYM.js} +2 -2
- package/dist/{chunk-4JDLP6ZS.js → chunk-6PTFB5VS.js} +7 -7
- package/dist/{chunk-VN3SHNBN.js → chunk-7DICMOS6.js} +2 -2
- package/dist/{chunk-HLAFFSEK.js → chunk-7DRAWPTZ.js} +2 -2
- package/dist/chunk-7E7I3WLS.js +3762 -0
- package/dist/{chunk-YJISEZKC.js → chunk-7ZYNNDKC.js} +6 -6
- package/dist/{chunk-I66ZTYNP.js → chunk-AF4YM7Z4.js} +236 -101
- package/dist/{chunk-2HFQNRV3.js → chunk-AX2THNSA.js} +12 -12
- package/dist/{chunk-PGF63K6I.js → chunk-B4OAX3SI.js} +65 -3
- package/dist/{chunk-W6NIE6OW.js → chunk-B4VEBZKF.js} +3 -3
- package/dist/{chunk-JBCS7CRR.js → chunk-BEPZRGGU.js} +10 -10
- package/dist/{chunk-XGDPUNND.js → chunk-CE5AX47J.js} +2 -2
- package/dist/{chunk-I64IFBLB.js → chunk-DWUOQKRU.js} +17 -10
- package/dist/{chunk-DZAW46HP.js → chunk-E3TPLWFX.js} +3 -3
- package/dist/{chunk-HIICAHCJ.js → chunk-EKCHAPYA.js} +2 -2
- package/dist/{chunk-XE3PCIXH.js → chunk-F5JHEYZM.js} +7 -7
- package/dist/{chunk-5PFYMY2V.js → chunk-FTMGRKEF.js} +2 -2
- package/dist/{chunk-ZNT2M6TG.js → chunk-G76U63X4.js} +17 -17
- package/dist/{chunk-34BHNEE3.js → chunk-GHS5EBTQ.js} +58 -7
- package/dist/{chunk-2NHR3NAY.js → chunk-GI7YYQ3F.js} +40 -34
- package/dist/{chunk-DYHAXKHD.js → chunk-GWZNEVM2.js} +12 -8
- package/dist/chunk-GYV6VZOC.js +26 -0
- package/dist/{chunk-MQXIVJ35.js → chunk-HAXOFFRH.js} +5 -5
- package/dist/{chunk-W4YEMFBX.js → chunk-HEQY7ZFI.js} +2 -2
- package/dist/{chunk-IKOZFYBN.js → chunk-I7ZPNEJM.js} +145 -102
- package/dist/{chunk-WNP7O5WZ.js → chunk-ID64D7PE.js} +4 -4
- package/dist/{chunk-XQRY4DTA.js → chunk-IGLP3ODT.js} +10 -10
- package/dist/chunk-IJNZMHLA.js +101 -0
- package/dist/{chunk-JWJGP5DQ.js → chunk-INY6HTFL.js} +7 -7
- package/dist/{chunk-PBP4B7XR.js → chunk-IUE3Y34X.js} +2 -2
- package/dist/{chunk-B74PXLU7.js → chunk-IWT4SF4R.js} +3 -3
- package/dist/{chunk-B7HM5Z7T.js → chunk-JDAY6FIL.js} +5 -5
- package/dist/{chunk-PJX3WQUQ.js → chunk-JEQ3XTHC.js} +2 -2
- package/dist/{chunk-FSP7CMNU.js → chunk-JGRC33J2.js} +50 -4
- package/dist/{chunk-X7IARSHT.js → chunk-JKKCYP3C.js} +9 -9
- package/dist/{chunk-HJWWJ6IL.js → chunk-JSC3U7TI.js} +16 -4
- package/dist/{chunk-SSEYRH53.js → chunk-KK4JZPBQ.js} +19 -140
- package/dist/{chunk-IHXBNWMM.js → chunk-KXDSS5WJ.js} +7 -3
- package/dist/{chunk-Q4XWMHX6.js → chunk-L47TF46W.js} +2 -2
- package/dist/{chunk-O3YUNJZ2.js → chunk-LDJG7DW3.js} +81 -24
- package/dist/{chunk-CDNVLKUX.js → chunk-LLDJM5XK.js} +13 -7
- package/dist/{chunk-F2I26BDK.js → chunk-MUW2BDDH.js} +4 -4
- package/dist/{chunk-HKMD33FO.js → chunk-MWUZBSAQ.js} +79 -76
- package/dist/{chunk-QQLGQY2A.js → chunk-N2Z7HLVY.js} +20 -20
- package/dist/{chunk-DZEK6CJN.js → chunk-NIQJ66N4.js} +19 -19
- package/dist/{chunk-CWVRRIEI.js → chunk-NZMNUPZZ.js} +2 -2
- package/dist/{chunk-462T4EGZ.js → chunk-O5CVSAG5.js} +2 -2
- package/dist/{chunk-TPEQIQIE.js → chunk-OML5D5V5.js} +8 -8
- package/dist/{chunk-IKSLQ4XV.js → chunk-PAJQJ7BS.js} +558 -216
- package/dist/{chunk-ZW55JB7N.js → chunk-PUVDKJ2Y.js} +2 -2
- package/dist/{chunk-UH347SHR.js → chunk-QWGDJJYJ.js} +11 -11
- package/dist/chunk-R6Q67RJH.js +134 -0
- package/dist/{chunk-CRFOIAX3.js → chunk-RRNP2ANY.js} +6 -6
- package/dist/{chunk-IDNA72AH.js → chunk-RSJ25QSL.js} +2 -2
- package/dist/chunk-SKHCAU7K.js +385 -0
- package/dist/{chunk-RLYRBIYQ.js → chunk-TM6LQDI3.js} +20 -12
- package/dist/chunk-UOIZ7DA4.js +41 -0
- package/dist/{chunk-P75RZCJW.js → chunk-UPZU6GE4.js} +3 -3
- package/dist/{chunk-MCMZMDAC.js → chunk-V2ANDPVT.js} +4 -4
- package/dist/{chunk-AK5XEFVZ.js → chunk-VA5FNYMT.js} +26 -13
- package/dist/{chunk-IMXMHHMQ.js → chunk-VW6DOEDG.js} +332 -57
- package/dist/{chunk-XOXV5GKE.js → chunk-W6RRQCPQ.js} +16 -7
- package/dist/{chunk-CYZW7JHJ.js → chunk-WBKFA554.js} +8 -8
- package/dist/{chunk-BO7Y52RY.js → chunk-WCXUNS7U.js} +7 -7
- package/dist/{chunk-ZGNYYXQ6.js → chunk-WRBAGUNF.js} +3 -3
- package/dist/{chunk-FVDGR2ZL.js → chunk-XIVNBFZS.js} +85 -30
- package/dist/{chunk-BYMNWQ7O.js → chunk-XPWWI35G.js} +299 -58
- package/dist/{chunk-KPXDY6QF.js → chunk-XRZT5WY5.js} +2 -2
- package/dist/{chunk-AZ4WMN4W.js → chunk-Y3CBHOR6.js} +2 -2
- package/dist/{chunk-VXMFAE2W.js → chunk-YPC6ZR5L.js} +19 -6
- package/dist/{chunk-54ODD65L.js → chunk-YQWYVTMC.js} +4 -4
- package/dist/{chunk-M2WXEHER.js → chunk-ZA4VCIGV.js} +2 -2
- package/dist/{chunk-7BHIY2MW.js → chunk-ZDN3Y73Y.js} +6 -6
- package/dist/{chunk-E7GT7O5N.js → chunk-ZWPRK62N.js} +7 -4
- package/dist/cli/index.js +38 -37
- package/dist/{clio-7VB377CC.js → clio-CMMK4KRR.js} +7 -7
- package/dist/{code-nav-YVLCYA7V.js → code-nav-MDZNQS33.js} +7 -7
- package/dist/{components-UBWCQSRW.js → components-UCUQ4QXW.js} +4 -4
- package/dist/{config-4HVOS65E.js → config-SVM5P5YI.js} +76 -74
- package/dist/{configure-PIWO7B24.js → configure-LE3IK2TJ.js} +26 -24
- package/dist/{context-IYEHL3WQ.js → context-2OHRKS42.js} +66 -63
- package/dist/{context-N6ZE3LGJ.js → context-E3VC7RX5.js} +15 -11
- package/dist/{context-KQYIWPWT.js → context-VNCR7KAG.js} +60 -45
- package/dist/{context-clear-G4OGZJDS.js → context-clear-BW4O37TG.js} +61 -59
- package/dist/context-map-COB37XXN.js +505 -0
- package/dist/{context-working-set-BWLF6LJP.js → context-working-set-VDS25HXZ.js} +17 -16
- package/dist/{dispatch-runner-2QQAITS3.js → dispatch-runner-5AHT53RF.js} +85 -74
- package/dist/{doctor-LHBD36VU.js → doctor-WNNVO6FY.js} +37 -37
- package/dist/{eval-C45FYRJ6.js → eval-7G7SGAYO.js} +285 -114
- package/dist/{eval-inventory-6DEJPLBF.js → eval-inventory-Y6QRFOH5.js} +4 -4
- package/dist/{evidence-6SHONYAF.js → evidence-VD6736FQ.js} +63 -62
- package/dist/{evolve-KRKMV72X.js → evolve-AL3NGVRL.js} +62 -61
- package/dist/{extensions-KPZ2UHBB.js → extensions-MOVJ32NM.js} +7 -7
- package/dist/{fleet-IVTCKDHT.js → fleet-QZHUMAGI.js} +110 -108
- package/dist/{fleet-commands-EDWL3IT7.js → fleet-commands-BAYT5FJZ.js} +10 -10
- package/dist/{fleet-decisions-YP3YEFGK.js → fleet-decisions-IREVMRU4.js} +7 -6
- package/dist/{fleet-graph-ZFWKHY2M.js → fleet-graph-YCTT3HTI.js} +19 -18
- package/dist/{fleet-inspect-FVUNCBML.js → fleet-inspect-QVJTDAVB.js} +55 -54
- package/dist/{fleet-preflight-UN5XED4R.js → fleet-preflight-25QAFPK4.js} +4 -4
- package/dist/{fleet-validate-XOWC4HSX.js → fleet-validate-5O57AAJ7.js} +23 -22
- package/dist/{fleet-verify-UN3SODEL.js → fleet-verify-CPH2W2T6.js} +56 -55
- package/dist/{fleet-view-TWHJKCN6.js → fleet-view-SWBR3VGQ.js} +55 -54
- package/dist/{init-T2QORQ3Y.js → init-J477LKZH.js} +78 -76
- package/dist/{interop-IN5I2A66.js → interop-3FCM6XLG.js} +11 -11
- package/dist/{library-LSCATDLZ.js → library-QUQEIUG6.js} +28 -27
- package/dist/{memory-HYOKAGGJ.js → memory-SGGSEP65.js} +64 -63
- package/dist/{models-2GPMFYCM.js → models-HEKUAXXK.js} +49 -43
- package/dist/{monitor-E4ASVUJH.js → monitor-HKU57TYQ.js} +61 -60
- package/dist/{orchestrator-DDMPR3PY.js → orchestrator-VDFAEFAI.js} +919 -546
- package/dist/{panes-E3RUXOW5.js → panes-DN2SSFOH.js} +3 -3
- package/dist/{panes-IXKLOKA2.js → panes-TALGNPZT.js} +8 -8
- package/dist/{paths-L7LGY6RN.js → paths-NBMFAIEZ.js} +5 -5
- package/dist/reset-EAJFFJVB.js +344 -0
- package/dist/{resources-OTRSN34L.js → resources-OVKSEFVE.js} +27 -20
- package/dist/{run-5DEYH5QK.js → run-7DP7ZF2J.js} +113 -109
- package/dist/{share-IHWTLO3M.js → share-WML67FT3.js} +26 -25
- package/dist/{skills-IYMXMKW4.js → skills-SG662R2K.js} +39 -31
- package/dist/{skills-eval-DROHSJAR.js → skills-eval-VVZEUU46.js} +74 -73
- package/dist/{skills-inventory-D7X4L4ZX.js → skills-inventory-I2E23GET.js} +21 -20
- package/dist/{slash-commands-QBM7UZ3B.js → slash-commands-S7MBJDQK.js} +35 -34
- package/dist/{steer-Z5DO23FJ.js → steer-2LQOMCPB.js} +3 -3
- package/dist/{support-U7QOWY26.js → support-CC2UJBJ6.js} +6 -6
- package/dist/{targets-P2FUC4IL.js → targets-4QC3HIEW.js} +48 -45
- package/dist/{terminal-lease-YREJ3JX2.js → terminal-lease-TUHIJ6Y2.js} +2 -2
- package/dist/{tools-5B7RO6MV.js → tools-TFGJICCU.js} +8 -8
- package/dist/{trace-YMGMUM6A.js → trace-FXMXUZUF.js} +7 -7
- package/dist/uninstall-5PEVOE5B.js +408 -0
- package/dist/upgrade-M4WXY6KN.js +303 -0
- package/dist/{usage-ME5MPXGX.js → usage-N7ZNVLEM.js} +147 -102
- package/dist/{verifiers-BVZ7IWOO.js → verifiers-DJTP4XX6.js} +15 -15
- package/dist/{verify-5K7ZKQFC.js → verify-RWE4PPEK.js} +9 -9
- package/dist/{wiki-generate-F5W5QTYY.js → wiki-generate-C7IQOXSP.js} +84 -82
- package/dist/{with-panes-BYOJCLAM.js → with-panes-4GCGSL7J.js} +9 -9
- package/dist/worker/entry.js +61 -60
- package/docs/architecture/artifact-placement.md +1 -0
- package/docs/architecture/artifact-versions.md +1 -1
- package/docs/architecture/context-engine.md +4 -0
- package/docs/architecture/middleware-and-components.md +1 -1
- package/docs/architecture/model-catalog.md +21 -10
- package/docs/architecture/observability.md +12 -1
- package/docs/architecture/prompt-envelope-and-tools.md +2 -0
- package/docs/architecture/provider-adapter-cookbook.md +63 -0
- package/docs/architecture/safety-model.md +15 -5
- package/docs/guide/built-in-agents.md +17 -3
- package/docs/guide/commands-and-modes.md +1 -1
- package/docs/guide/configuration-and-targets.md +97 -9
- package/docs/guide/configuration-reference.md +7 -2
- package/docs/guide/environment-variables.md +2 -0
- package/docs/guide/installation-and-lifecycle.md +37 -4
- package/docs/guide/proactive-memory.md +66 -55
- package/docs/guide/skills-marketplace.md +18 -0
- package/docs/process/development-pipeline.md +34 -1
- package/docs/process/eval-runner.md +67 -3
- package/evals/behavioral-model.yaml +3 -2
- package/package.json +2 -2
- package/skills/README.md +7 -5
- package/skills/coding/ast-grep/SKILL.md +101 -30
- package/skills/coding/ast-grep/evals.md +26 -0
- package/skills/coding/coding-standards/SKILL.md +40 -5
- package/skills/coding/coding-standards/evals.md +23 -0
- package/skills/coding/prototype/SKILL.md +87 -28
- package/skills/coding/prototype/evals.md +19 -0
- package/skills/coding/tdd/SKILL.md +80 -53
- package/skills/coding/tdd/evals.md +20 -0
- package/skills/context/context-handoff/SKILL.md +43 -2
- package/skills/context/context-handoff/evals.md +44 -0
- package/skills/context/context-prime/SKILL.md +45 -15
- package/skills/context/context-prime/evals.md +45 -0
- package/skills/git/branch-closeout/SKILL.md +132 -0
- package/skills/git/branch-closeout/evals.md +133 -0
- package/skills/git/branch-closeout/references/closeout-checklist.md +81 -0
- package/skills/git/file-ticket/SKILL.md +77 -63
- package/skills/git/file-ticket/assets/issue-template.md +22 -0
- package/skills/git/file-ticket/evals.md +31 -26
- package/skills/git/file-ticket/references/issue-discovery.md +49 -0
- package/skills/git/fix-issue/SKILL.md +87 -64
- package/skills/git/fix-issue/evals.md +35 -31
- package/skills/git/fix-issue/references/diagnosis-and-rca.md +46 -0
- package/skills/git/resolve-merge-conflicts/SKILL.md +100 -51
- package/skills/git/resolve-merge-conflicts/evals.md +52 -25
- package/skills/git/resolve-merge-conflicts/references/conflict-matrix.md +126 -0
- package/skills/git/ship/SKILL.md +103 -67
- package/skills/git/ship/assets/pr-template.md +21 -0
- package/skills/git/ship/evals.md +44 -28
- package/skills/git/ship/references/remote-and-branch-policy.md +62 -0
- package/skills/git/worktree-create/SKILL.md +80 -50
- package/skills/git/worktree-create/evals.md +40 -33
- package/skills/git/worktree-create/references/worktree-setup.md +62 -66
- package/skills/git/worktree-merge/SKILL.md +112 -65
- package/skills/git/worktree-merge/evals.md +42 -34
- package/skills/git/worktree-merge/references/merge-strategies.md +52 -0
- package/skills/planning/archify/SKILL.md +196 -0
- package/skills/planning/archify/evals.md +65 -0
- package/skills/planning/architecture/SKILL.md +61 -12
- package/skills/planning/architecture/evals.md +65 -0
- package/skills/planning/backlog/SKILL.md +130 -14
- package/skills/planning/backlog/evals.md +142 -0
- package/skills/planning/prd/SKILL.md +46 -6
- package/skills/planning/prd/evals.md +54 -0
- package/skills/planning/product-intent/SKILL.md +57 -2
- package/skills/planning/product-intent/evals.md +70 -0
- package/skills/planning/tech-spec/SKILL.md +53 -2
- package/skills/planning/tech-spec/evals.md +73 -0
- package/skills/registry.yaml +58 -50
- package/skills/remote.yaml +13 -0
- package/skills/research/arxiv-literature/SKILL.md +76 -18
- package/skills/research/arxiv-literature/evals.md +50 -0
- package/skills/research/experiment-protocol/SKILL.md +20 -1
- package/skills/research/experiment-protocol/evals.md +23 -0
- package/skills/research/scientific-debugging/SKILL.md +23 -1
- package/skills/research/scientific-debugging/evals.md +18 -0
- package/skills/research/scientific-modernization/SKILL.md +26 -1
- package/skills/research/scientific-modernization/evals.md +27 -0
- package/skills/skill-marketplace.json +63 -28
- package/skills/workflow/cut-it/SKILL.md +65 -5
- package/skills/workflow/cut-it/evals.md +101 -0
- package/skills/workflow/design-council/SKILL.md +117 -27
- package/skills/workflow/design-council/evals.md +161 -0
- package/skills/workflow/grill-me/SKILL.md +86 -10
- package/skills/workflow/grill-me/evals.md +153 -0
- package/skills/workflow/workflow-distiller/SKILL.md +76 -17
- package/skills/workflow/workflow-distiller/evals.md +118 -0
- package/src/cli/configure-interop.ts +105 -13
- package/src/cli/configure-oauth.ts +57 -0
- package/src/cli/configure-onboarding.ts +980 -0
- package/src/cli/configure-target.ts +594 -0
- package/src/cli/configure.ts +1082 -528
- package/src/cli/context-map.ts +114 -0
- package/src/cli/context.ts +4 -0
- package/src/cli/index.ts +1 -0
- package/src/cli/lifecycle-presenter.ts +436 -0
- package/src/cli/models.ts +10 -2
- package/src/cli/modes/print.ts +5 -1
- package/src/cli/reset.ts +228 -106
- package/src/cli/run.ts +7 -2
- package/src/cli/select.ts +664 -0
- package/src/cli/skills.ts +9 -2
- package/src/cli/targets.ts +3 -0
- package/src/cli/uninstall.ts +233 -165
- package/src/cli/upgrade.ts +204 -149
- package/src/cli/usage.ts +86 -27
- package/src/cli/validate-model.ts +3 -3
- package/src/core/config.ts +56 -0
- package/src/core/external-diagnostic.ts +44 -0
- package/src/core/gateway-routing.ts +157 -0
- package/src/core/safe-exec.ts +17 -2
- package/src/core/skill-activation.ts +89 -2
- package/src/domains/agents/builtins/world-knowledge.md +31 -0
- package/src/domains/agents/catalog.ts +1 -1
- package/src/domains/agents/result-contract.ts +70 -0
- package/src/domains/context/wiki/map-seed.ts +589 -0
- package/src/domains/context/wiki/plan.ts +2 -2
- package/src/domains/dispatch/admission.ts +29 -0
- package/src/domains/dispatch/agent-candidates.ts +10 -0
- package/src/domains/dispatch/budget-envelope.ts +86 -1
- package/src/domains/dispatch/capability-match.ts +1 -0
- package/src/domains/dispatch/capacity-lease.ts +17 -0
- package/src/domains/dispatch/contract.ts +11 -1
- package/src/domains/dispatch/extension.ts +134 -29
- package/src/domains/dispatch/types.ts +3 -0
- package/src/domains/dispatch/worker-model-metadata.ts +38 -0
- package/src/domains/eval/metrics/call-ledger-stream.ts +34 -11
- package/src/domains/eval/metrics/token-stream.ts +201 -31
- package/src/domains/eval/metrics/tracked.ts +40 -4
- package/src/domains/eval/runners/clio-run.ts +5 -2
- package/src/domains/eval/schema/suite.ts +28 -0
- package/src/domains/eval/schema/verdict.ts +2 -2
- package/src/domains/eval/suites/resolve.ts +13 -1
- package/src/domains/eval/suites/run.ts +24 -3
- package/src/domains/interop/registry.ts +6 -2
- package/src/domains/interop/types.ts +4 -0
- package/src/domains/lifecycle/migrations/index.ts +4 -0
- package/src/domains/memory/task-memory-policy.ts +70 -26
- package/src/domains/memory/task-memory-telemetry.ts +1 -0
- package/src/domains/middleware/index.ts +0 -1
- package/src/domains/middleware/marketplace-offer.ts +3 -35
- package/src/domains/middleware/memory-intervention.ts +127 -32
- package/src/domains/middleware/memory-step-endpoint.ts +3 -2
- package/src/domains/middleware/skills-reminder.ts +31 -2
- package/src/domains/observability/compaction-usage.ts +118 -0
- package/src/domains/observability/cost.ts +1 -1
- package/src/domains/observability/extension.ts +6 -1
- package/src/domains/observability/out-of-turn-usage.ts +52 -21
- package/src/domains/providers/contract.ts +4 -1
- package/src/domains/providers/extension.ts +40 -9
- package/src/domains/providers/model-capabilities.ts +9 -0
- package/src/domains/providers/model-discovery.ts +2 -0
- package/src/domains/providers/model-runtime-capabilities.ts +15 -5
- package/src/domains/providers/models/local-models/clio-coder-local-coding-targets.yaml +32 -12
- package/src/domains/providers/runtimes/antigravity/antigravity-code.ts +225 -45
- package/src/domains/providers/runtimes/common/lmstudio-http.ts +6 -2
- package/src/domains/providers/runtimes/common/local-synth.ts +2 -0
- package/src/domains/providers/runtimes/protocol/litellm.ts +119 -29
- package/src/domains/providers/support.ts +11 -5
- package/src/domains/providers/target-model-cache.ts +25 -2
- package/src/domains/providers/types/capability-flags.ts +2 -0
- package/src/domains/providers/types/runtime-descriptor.ts +20 -1
- package/src/domains/providers/types/target-descriptor.ts +19 -0
- package/src/domains/resources/index.ts +3 -0
- package/src/domains/resources/skills/install.ts +72 -7
- package/src/domains/resources/skills/loader.ts +7 -0
- package/src/domains/resources/skills/marketplace.ts +63 -11
- package/src/domains/safety/autonomy.ts +15 -0
- package/src/domains/safety/index.ts +1 -0
- package/src/domains/safety/path-policy.ts +1 -1
- package/src/domains/safety/policy-engine.ts +34 -11
- package/src/domains/safety/protected-artifacts.ts +191 -88
- package/src/domains/safety/run-effects.ts +2 -22
- package/src/domains/safety/skill-authority.ts +55 -0
- package/src/domains/session/compaction/compact.ts +72 -22
- package/src/domains/session/entries.ts +6 -0
- package/src/domains/session/usage.ts +3 -3
- package/src/engine/agent.ts +13 -3
- package/src/engine/ai.ts +26 -8
- package/src/engine/antigravity/subprocess-runtime.ts +386 -120
- package/src/engine/api-registry.ts +3 -0
- package/src/engine/apis/openai-completions.ts +117 -14
- package/src/engine/external-subprocess.ts +114 -6
- package/src/entry/background-model-metadata.ts +18 -0
- package/src/entry/compaction-prompt.ts +57 -0
- package/src/entry/orchestrator.ts +405 -216
- package/src/entry/task-memory-lifecycle.ts +35 -0
- package/src/interactive/chat-loop-messages.ts +13 -4
- package/src/interactive/chat-loop.ts +65 -2
- package/src/interactive/chat-renderer.ts +1 -0
- package/src/interactive/cost-overlay.ts +26 -2
- package/src/interactive/interactive-slash-runtime.ts +2 -1
- package/src/interactive/renderers/worker-entry.ts +32 -0
- package/src/interactive/slash-commands.ts +24 -6
- package/src/interactive/theme/labels.ts +19 -13
- package/src/interactive/turn-context.ts +9 -5
- package/src/interactive/turn-recovery.ts +8 -0
- package/src/interactive/turn-runtime.ts +27 -11
- package/src/interactive/turn-state.ts +7 -0
- package/src/interactive/worker-receipts.ts +1 -0
- package/src/interactive/worker-stream.ts +6 -1
- package/src/tools/context/index.ts +30 -9
- package/src/tools/dispatch-arguments.ts +1 -0
- package/src/tools/dispatch-event-text.ts +10 -0
- package/src/tools/dispatch-plan.ts +1 -0
- package/src/tools/dispatch-runner.ts +12 -0
- package/src/tools/registry.ts +11 -5
- package/src/tools/worker-evidence.ts +3 -1
- package/src/worker/spec-contract.ts +4 -0
- package/dist/chunk-2Z2IKEXI.js +0 -1554
- package/dist/reset-OAQP3W4O.js +0 -230
- package/dist/uninstall-N34PCTGJ.js +0 -331
- package/dist/upgrade-PXK3S2YM.js +0 -325
|
@@ -7,12 +7,13 @@ triggers:
|
|
|
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.
|
|
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
|
-
|
|
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
|
-
|
|
46
|
-
|
|
47
|
-
|
|
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,
|
|
52
|
-
what must be included and excluded. If the request is
|
|
53
|
-
these, ask one clarifying question
|
|
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
|
-
|
|
58
|
-
|
|
59
|
-
|
|
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 /
|
|
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
|
|
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
|
|
160
|
+
3. Dump the tree to check node kinds; never guess a `kind` name:
|
|
107
161
|
|
|
108
162
|
```bash
|
|
109
|
-
ast-grep run --pattern '
|
|
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 /
|
|
182
|
+
ast-grep scan --rule .clio-coder/scratch/ast-grep/rule.yml src
|
|
127
183
|
```
|
|
128
184
|
|
|
129
|
-
|
|
130
|
-
`
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
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
|
-
-
|
|
142
|
-
|
|
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.
|
|
@@ -7,18 +7,15 @@ triggers:
|
|
|
7
7
|
- parse don't validate
|
|
8
8
|
- illegal states unrepresentable
|
|
9
9
|
- functional core imperative shell
|
|
10
|
-
version: 0.
|
|
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:
|
|
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.
|
|
@@ -7,7 +7,7 @@ triggers:
|
|
|
7
7
|
- prototype this state model
|
|
8
8
|
- sanity-check this logic
|
|
9
9
|
- what should this UI look like
|
|
10
|
-
version: 0.
|
|
10
|
+
version: 0.4.0
|
|
11
11
|
license: Apache-2.0
|
|
12
12
|
allowed-tools:
|
|
13
13
|
- read
|
|
@@ -17,15 +17,14 @@ allowed-tools:
|
|
|
17
17
|
- git
|
|
18
18
|
- bash
|
|
19
19
|
- write
|
|
20
|
-
-
|
|
21
|
-
- artifact
|
|
20
|
+
- edit
|
|
22
21
|
clio-coder:
|
|
23
22
|
registry-id: iowarp/clio-coder
|
|
24
23
|
source-url: https://github.com/iowarp/clio-coder/tree/main/skills/coding/prototype
|
|
25
24
|
audit: pass
|
|
26
25
|
provenance: adapted
|
|
27
26
|
origin: https://github.com/mattpocock/skills/tree/main/skills/engineering/prototype
|
|
28
|
-
eval-status:
|
|
27
|
+
eval-status: scenarios-recorded
|
|
29
28
|
model-size: any
|
|
30
29
|
agents:
|
|
31
30
|
- main
|
|
@@ -36,57 +35,117 @@ clio-coder:
|
|
|
36
35
|
A prototype is throwaway code that answers a question. Name the question
|
|
37
36
|
first; the question decides the shape.
|
|
38
37
|
|
|
38
|
+
## Arguments
|
|
39
|
+
|
|
40
|
+
```text
|
|
41
|
+
/skill prototype [--branch logic|ui] [--subject <path>] <question>
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
- `--branch`: force the branch from Step 1. Omit to infer it.
|
|
45
|
+
- `--subject`: the file or module the prototype is about. Omit to find it
|
|
46
|
+
from the question text.
|
|
47
|
+
- Everything else is the question the prototype must answer. If no
|
|
48
|
+
question is stated, write the one you infer as the first line of your
|
|
49
|
+
reply and proceed; do not stop to ask when running headlessly.
|
|
50
|
+
|
|
51
|
+
Examples:
|
|
52
|
+
|
|
53
|
+
- `/skill prototype sanity-check whether the retry state machine in retry.js feels right`
|
|
54
|
+
- `/skill prototype --branch ui what should the dashboard header look like`
|
|
55
|
+
|
|
56
|
+
The three steps below are the plan; do not open a task list for them.
|
|
57
|
+
|
|
39
58
|
## Step 1 — Pick the branch
|
|
40
59
|
|
|
41
|
-
From the
|
|
60
|
+
From the question, the surrounding code, or the `--branch` flag:
|
|
42
61
|
|
|
43
62
|
- **"Does this logic / state model feel right?"** → read
|
|
44
|
-
`references/LOGIC.md`. Build a single
|
|
45
|
-
controls plus guided walkthroughs
|
|
46
|
-
|
|
63
|
+
`references/LOGIC.md`. Build a single self-contained HTML file: free-play
|
|
64
|
+
controls plus guided walkthroughs that push the state model through the
|
|
65
|
+
cases that are hard to reason about on paper, drivable by a
|
|
47
66
|
non-developer.
|
|
48
67
|
- **"What should this look like?"** → read `references/UI.md`. Generate
|
|
49
68
|
several radically different UI variations on one route, switchable via a
|
|
50
69
|
URL parameter.
|
|
51
70
|
|
|
52
71
|
The branches produce very different artifacts; getting this wrong wastes
|
|
53
|
-
the prototype. Ambiguous
|
|
54
|
-
|
|
55
|
-
|
|
72
|
+
the prototype. Ambiguous → default by neighborhood (backend module →
|
|
73
|
+
logic; page or component → UI) and state the assumption at the top of the
|
|
74
|
+
prototype and in your reply.
|
|
75
|
+
|
|
76
|
+
Read the subject code once, then write down in your reply, before any
|
|
77
|
+
code: the question, the branch, and the three to five cases the prototype
|
|
78
|
+
must exercise. That list is the acceptance bar for Step 2.
|
|
56
79
|
|
|
57
80
|
## Step 2 — Build under the prototype rules
|
|
58
81
|
|
|
59
|
-
1. **Throwaway from day one, marked as such.** Place it
|
|
60
|
-
prototypes for, named so a casual reader sees it is not production
|
|
61
|
-
Follow the project's
|
|
62
|
-
top-level structure.
|
|
63
|
-
2. **Trivial to run.** One command in the project's own task runner, or
|
|
64
|
-
double-clickable HTML file. No setup thinking required.
|
|
82
|
+
1. **Throwaway from day one, marked as such.** Place it next to the code
|
|
83
|
+
it prototypes for, named so a casual reader sees it is not production
|
|
84
|
+
(`<subject>-prototype.html`, `prototype-<slug>/`). Follow the project's
|
|
85
|
+
existing routing/layout conventions; invent no new top-level structure.
|
|
86
|
+
2. **Trivial to run.** One command in the project's own task runner, or
|
|
87
|
+
one double-clickable HTML file. No setup thinking required.
|
|
65
88
|
3. **No persistence.** State lives in memory. If the question is itself
|
|
66
89
|
about a database, use a scratch DB or file named "PROTOTYPE — wipe me".
|
|
67
90
|
4. **Skip the polish.** No tests, no error handling beyond runnable, no
|
|
68
91
|
abstractions. Speed of learning is the only quality bar.
|
|
69
92
|
5. **Surface the state.** After every action (logic) or variant switch
|
|
70
93
|
(UI), print or render the full relevant state so the change is visible.
|
|
94
|
+
6. **Write once, then edit.** Write the file once. Subsequent changes go
|
|
95
|
+
through `edit`; never rewrite the whole file to change a few lines.
|
|
96
|
+
7. **Exercise it headlessly.** For a logic prototype, drive the real
|
|
97
|
+
module through the Step 1 cases with one `node -e` (or the project's
|
|
98
|
+
runtime) call and read the output. That transcript is the evidence
|
|
99
|
+
for the verdict; a verdict from reading code alone is a guess.
|
|
100
|
+
|
|
101
|
+
Shell rules: run one command per `bash` call, plain and direct. Never use
|
|
102
|
+
`$(...)` or backticks; they trigger an approval gate that ends a headless
|
|
103
|
+
run.
|
|
71
104
|
|
|
72
105
|
## Step 3 — Capture and discard
|
|
73
106
|
|
|
74
|
-
|
|
107
|
+
Do these in order. Do not stop after building; a prototype without a
|
|
108
|
+
recorded verdict answered nothing.
|
|
109
|
+
|
|
110
|
+
1. **Decide.** Write the verdict in one sentence, then the evidence: which
|
|
111
|
+
Step 1 cases behaved as expected, which did not, and what the model is
|
|
112
|
+
missing.
|
|
113
|
+
2. **Park the code on a throwaway branch.** Run these as separate `bash`
|
|
114
|
+
calls, substituting a short slug:
|
|
115
|
+
|
|
116
|
+
```bash
|
|
117
|
+
git checkout -b prototype/<slug>
|
|
118
|
+
```
|
|
119
|
+
```bash
|
|
120
|
+
git add <prototype files>
|
|
121
|
+
```
|
|
122
|
+
```bash
|
|
123
|
+
git commit -m "prototype: <question> (throwaway, verdict in message)"
|
|
124
|
+
```
|
|
125
|
+
```bash
|
|
126
|
+
git checkout -
|
|
127
|
+
```
|
|
75
128
|
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
3.
|
|
81
|
-
|
|
129
|
+
Returning to the original branch removes the committed prototype from
|
|
130
|
+
the working tree, which is the point: the main line keeps only the
|
|
131
|
+
validated decision, never the prototype. If the directory is not a git
|
|
132
|
+
repository, leave the file in place and say so.
|
|
133
|
+
3. **Report.** Your final reply is the record. It names, in this order:
|
|
134
|
+
the question, the verdict, the evidence, the recommended change to the
|
|
135
|
+
real code (or "none"), and the branch pointer `prototype/<slug>`. When
|
|
136
|
+
the work is tracked elsewhere (issue, plan, handoff), the user copies
|
|
137
|
+
this block there; you do not need a separate report file, and you must
|
|
138
|
+
not end the run with the `artifact` tool.
|
|
82
139
|
|
|
83
|
-
Done when the verdict is
|
|
84
|
-
|
|
140
|
+
Done when the verdict is in the reply, the pointer exists, and
|
|
141
|
+
`git status` on the working branch shows no prototype files.
|
|
85
142
|
|
|
86
143
|
## Red flags
|
|
87
144
|
|
|
88
|
-
- A prototype quietly growing tests, error handling, or abstractions
|
|
145
|
+
- A prototype quietly growing tests, error handling, or abstractions: it
|
|
89
146
|
is becoming production without a decision.
|
|
90
147
|
- Persistence added "just to make it work".
|
|
91
|
-
- The prototype merged to the main line.
|
|
148
|
+
- The prototype merged to the main line, or left untracked on it.
|
|
92
149
|
- Code built before the question was stated.
|
|
150
|
+
- A verdict written without running the cases.
|
|
151
|
+
- Ending the run by writing a report artifact instead of finishing Step 3.
|
|
@@ -40,3 +40,22 @@ Expected:
|
|
|
40
40
|
|
|
41
41
|
One representative scenario via `clio-coder skills eval` against Nemo-3.5-Lightning
|
|
42
42
|
(30B local, llamacpp on mini), full-auto sandbox. PASS. Verdict captured via terminal artifact; code discarded.
|
|
43
|
+
|
|
44
|
+
## Battletest record (2026-09-03)
|
|
45
|
+
|
|
46
|
+
S1 fixture, `ornith1.5-35b-moe` on mini (llamacpp), `clio-coder run --autonomy full-auto --json`, headless.
|
|
47
|
+
|
|
48
|
+
| run | wall | turns | in / out tokens | outcome |
|
|
49
|
+
|---|---|---|---|---|
|
|
50
|
+
| baseline (no skill) | 207s | 17 | 6.1k / 11.6k | HTML built, verdict written via terminal `artifact`; 7 `tasks` calls; prototype left untracked on main |
|
|
51
|
+
| v0.3.0 | 220s | 10 | 12.3k / 15.8k | logic branch chosen, LOGIC.md read; `edit` blocked by allowed-tools so the 12.5k-char file was rewritten whole; `artifact` ended the run before Step 3; nothing committed |
|
|
52
|
+
| v0.4.0 | 178s | 13 | 6.7k / 10.8k | cases enumerated first; module driven headlessly via `node -e`; branch `prototype/retry-state-machine` created, prototype committed there, `main` clean; reply carries question, verdict, evidence, recommended change, pointer |
|
|
53
|
+
|
|
54
|
+
Changes in v0.4.0 that closed the gaps: dropped `artifact` (terminal tool,
|
|
55
|
+
`terminate: true`, ends the run before capture-and-discard), added `edit`,
|
|
56
|
+
added an `## Arguments` contract with a headless fallback, made Step 3 an
|
|
57
|
+
explicit sequence of single-command `bash` calls, banned `$(...)` (net ask
|
|
58
|
+
rail even under full-auto), and made the final reply the verdict record.
|
|
59
|
+
Remaining blocked calls in v0.4.0: one `tasks` plan and one read-only
|
|
60
|
+
`git` status; `git` restored to allowed-tools and a one-line "the steps are
|
|
61
|
+
the plan" note added afterwards.
|