dsh-aris-panel 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (442) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +98 -0
  3. package/README_CN.md +87 -0
  4. package/dsh/checkout.patch.yml +38 -0
  5. package/dsh/client.js +634 -0
  6. package/dsh/cordis.patch.yml +44 -0
  7. package/dsh/index.mjs +76 -0
  8. package/dsh/run-status.mjs +182 -0
  9. package/dsh/scope-limits.mjs +50 -0
  10. package/dsh/workbench.mjs +291 -0
  11. package/mcp-servers/claude-review/README.md +93 -0
  12. package/mcp-servers/claude-review/run_with_claude_aws.sh +49 -0
  13. package/mcp-servers/claude-review/server.py +718 -0
  14. package/mcp-servers/codex-image2/README.md +65 -0
  15. package/mcp-servers/codex-image2/server.py +893 -0
  16. package/mcp-servers/feishu-bridge/requirements.txt +1 -0
  17. package/mcp-servers/feishu-bridge/server.py +240 -0
  18. package/mcp-servers/gemini-review/README.md +171 -0
  19. package/mcp-servers/gemini-review/server.py +1856 -0
  20. package/mcp-servers/llm-chat/requirements.txt +1 -0
  21. package/mcp-servers/llm-chat/server.py +664 -0
  22. package/mcp-servers/manual-review/README.md +133 -0
  23. package/mcp-servers/manual-review/server.py +910 -0
  24. package/mcp-servers/manual-review/ui.html +279 -0
  25. package/mcp-servers/minimax-chat/requirements.txt +1 -0
  26. package/mcp-servers/minimax-chat/server.py +381 -0
  27. package/package.json +51 -0
  28. package/skills/ablation-planner/SKILL.md +123 -0
  29. package/skills/alphaxiv/SKILL.md +196 -0
  30. package/skills/analyze-results/SKILL.md +46 -0
  31. package/skills/arxiv/SKILL.md +248 -0
  32. package/skills/auto-paper-improvement-loop/SKILL.md +651 -0
  33. package/skills/auto-review-loop/SKILL.md +1137 -0
  34. package/skills/auto-review-loop-llm/SKILL.md +259 -0
  35. package/skills/auto-review-loop-minimax/SKILL.md +302 -0
  36. package/skills/citation-audit/SKILL.md +502 -0
  37. package/skills/claims-drafting/SKILL.md +227 -0
  38. package/skills/comm-lit-review/SKILL.md +297 -0
  39. package/skills/deepxiv/SKILL.md +263 -0
  40. package/skills/dse-loop/SKILL.md +296 -0
  41. package/skills/embodiment-description/SKILL.md +129 -0
  42. package/skills/exa-search/SKILL.md +205 -0
  43. package/skills/experiment-audit/SKILL.md +311 -0
  44. package/skills/experiment-bridge/SKILL.md +376 -0
  45. package/skills/experiment-plan/SKILL.md +249 -0
  46. package/skills/experiment-queue/SKILL.md +431 -0
  47. package/skills/experiment-queue/scripts/build_manifest.py +142 -0
  48. package/skills/experiment-queue/scripts/queue_manager.py +433 -0
  49. package/skills/feishu-notify/SKILL.md +156 -0
  50. package/skills/figure-description/SKILL.md +138 -0
  51. package/skills/figure-spec/SKILL.md +262 -0
  52. package/skills/figure-spec/scripts/figure_renderer.py +799 -0
  53. package/skills/formula-derivation/SKILL.md +280 -0
  54. package/skills/gemini-search/SKILL.md +231 -0
  55. package/skills/grant-proposal/SKILL.md +698 -0
  56. package/skills/idea-creator/SKILL.md +542 -0
  57. package/skills/idea-discovery/SKILL.md +521 -0
  58. package/skills/idea-discovery-robot/SKILL.md +363 -0
  59. package/skills/integrity-forensics/SKILL.md +284 -0
  60. package/skills/interview-cheatsheet/SKILL.md +245 -0
  61. package/skills/invention-structuring/SKILL.md +188 -0
  62. package/skills/jurisdiction-format/SKILL.md +192 -0
  63. package/skills/kill-argument/SKILL.md +437 -0
  64. package/skills/mermaid-diagram/SKILL.md +419 -0
  65. package/skills/meta-apply/SKILL.md +141 -0
  66. package/skills/meta-optimize/SKILL.md +437 -0
  67. package/skills/monitor-experiment/SKILL.md +140 -0
  68. package/skills/novelty-check/SKILL.md +101 -0
  69. package/skills/openalex/SKILL.md +237 -0
  70. package/skills/overleaf-sync/SKILL.md +220 -0
  71. package/skills/paper-claim-audit/SKILL.md +348 -0
  72. package/skills/paper-compile/SKILL.md +266 -0
  73. package/skills/paper-figure/SKILL.md +312 -0
  74. package/skills/paper-illustration/SKILL.md +736 -0
  75. package/skills/paper-illustration-image2/SKILL.md +391 -0
  76. package/skills/paper-illustration-image2/scripts/paper_illustration_image2.py +255 -0
  77. package/skills/paper-plan/SKILL.md +386 -0
  78. package/skills/paper-poster/SKILL.md +19 -0
  79. package/skills/paper-poster-html/DESIGN_FINAL.md +176 -0
  80. package/skills/paper-poster-html/IMPLEMENTATION_CONVENTIONS.md +161 -0
  81. package/skills/paper-poster-html/LICENSES/posterly-MIT.txt +21 -0
  82. package/skills/paper-poster-html/NOTICE.md +57 -0
  83. package/skills/paper-poster-html/SKILL.md +323 -0
  84. package/skills/paper-poster-html/scripts/_posterly/__init__.py +0 -0
  85. package/skills/paper-poster-html/scripts/_posterly/canvas.py +200 -0
  86. package/skills/paper-poster-html/scripts/_posterly/measure.py +588 -0
  87. package/skills/paper-poster-html/scripts/_posterly/polish.py +498 -0
  88. package/skills/paper-poster-html/scripts/_posterly/preflight.py +489 -0
  89. package/skills/paper-poster-html/scripts/_posterly/render.py +215 -0
  90. package/skills/paper-poster-html/scripts/_posterly/textutil.py +16 -0
  91. package/skills/paper-poster-html/scripts/_posterly/verify_final.py +171 -0
  92. package/skills/paper-poster-html/scripts/asset_check.py +897 -0
  93. package/skills/paper-poster-html/scripts/extract_pdf_figures.py +666 -0
  94. package/skills/paper-poster-html/scripts/poster_check.py +251 -0
  95. package/skills/paper-poster-html/scripts/preprocess_figures.py +238 -0
  96. package/skills/paper-poster-html/scripts/render_preview.py +217 -0
  97. package/skills/paper-poster-html/scripts/run_gates.py +556 -0
  98. package/skills/paper-poster-html/scripts/style_check.py +1324 -0
  99. package/skills/paper-poster-html/templates/COMPONENTS.md +462 -0
  100. package/skills/paper-poster-html/templates/README.md +170 -0
  101. package/skills/paper-poster-html/templates/landscape_4col.html +1032 -0
  102. package/skills/paper-poster-html/templates/landscape_hero.html +1046 -0
  103. package/skills/paper-poster-html/templates/portrait_2col.html +947 -0
  104. package/skills/paper-poster-html/templates/tokens/acl.json +9 -0
  105. package/skills/paper-poster-html/templates/tokens/cvpr.json +9 -0
  106. package/skills/paper-poster-html/templates/tokens/generic.json +9 -0
  107. package/skills/paper-poster-html/templates/tokens/iclr.json +9 -0
  108. package/skills/paper-poster-html/templates/tokens/icml.json +9 -0
  109. package/skills/paper-poster-html/templates/tokens/neurips.json +9 -0
  110. package/skills/paper-slides/SKILL.md +635 -0
  111. package/skills/paper-talk/SKILL.md +381 -0
  112. package/skills/paper-write/SKILL.md +604 -0
  113. package/skills/paper-write/templates/IEEEtran.bst +2409 -0
  114. package/skills/paper-write/templates/IEEEtran.cls +6347 -0
  115. package/skills/paper-write/templates/iclr2026.tex +84 -0
  116. package/skills/paper-write/templates/icml2025.tex +87 -0
  117. package/skills/paper-write/templates/ieee_conference.tex +89 -0
  118. package/skills/paper-write/templates/ieee_journal.tex +93 -0
  119. package/skills/paper-write/templates/math_commands.tex +48 -0
  120. package/skills/paper-write/templates/neurips2025.tex +80 -0
  121. package/skills/paper-writing/SKILL.md +916 -0
  122. package/skills/patent-novelty-check/SKILL.md +153 -0
  123. package/skills/patent-pipeline/SKILL.md +344 -0
  124. package/skills/patent-review/SKILL.md +203 -0
  125. package/skills/pixel-art/SKILL.md +137 -0
  126. package/skills/prior-art-search/SKILL.md +146 -0
  127. package/skills/proof-checker/SKILL.md +866 -0
  128. package/skills/proof-orchestrator/NOTICE.md +24 -0
  129. package/skills/proof-orchestrator/SKILL.md +254 -0
  130. package/skills/proof-orchestrator/references/audit-output-contract.md +126 -0
  131. package/skills/proof-orchestrator/references/deepseek-routing.md +74 -0
  132. package/skills/proof-orchestrator/references/dispatch-prompts.md +227 -0
  133. package/skills/proof-orchestrator/references/notation-audit.md +135 -0
  134. package/skills/proof-orchestrator/references/proof-audit-rubric.md +70 -0
  135. package/skills/proof-orchestrator/references/stress-tests.md +38 -0
  136. package/skills/proof-writer/SKILL.md +223 -0
  137. package/skills/qzcli/SKILL.md +324 -0
  138. package/skills/rebuttal/SKILL.md +376 -0
  139. package/skills/render-html/SKILL.md +316 -0
  140. package/skills/render-html/scripts/render_html.py +1006 -0
  141. package/skills/render-html/scripts/templates/academic.html +703 -0
  142. package/skills/render-html/scripts/templates/dashboard.html +333 -0
  143. package/skills/research-lit/SKILL.md +756 -0
  144. package/skills/research-pipeline/SKILL.md +384 -0
  145. package/skills/research-refine/SKILL.md +770 -0
  146. package/skills/research-refine-pipeline/SKILL.md +186 -0
  147. package/skills/research-review/SKILL.md +198 -0
  148. package/skills/research-wiki/SKILL.md +461 -0
  149. package/skills/resubmit-pipeline/SKILL.md +447 -0
  150. package/skills/result-to-claim/SKILL.md +311 -0
  151. package/skills/run-experiment/SKILL.md +313 -0
  152. package/skills/semantic-scholar/SKILL.md +236 -0
  153. package/skills/serverless-modal/SKILL.md +335 -0
  154. package/skills/shared-references/acceptance-gate.md +324 -0
  155. package/skills/shared-references/assurance-contract.md +248 -0
  156. package/skills/shared-references/capture-antipatterns.md +78 -0
  157. package/skills/shared-references/citation-discipline.md +583 -0
  158. package/skills/shared-references/compute-env-contract.md +163 -0
  159. package/skills/shared-references/effort-contract.md +183 -0
  160. package/skills/shared-references/evidence-precheck.md +65 -0
  161. package/skills/shared-references/experiment-integrity.md +49 -0
  162. package/skills/shared-references/external-cadence.md +326 -0
  163. package/skills/shared-references/fan-out-pattern.md +366 -0
  164. package/skills/shared-references/injection-hygiene.md +127 -0
  165. package/skills/shared-references/integration-contract.md +461 -0
  166. package/skills/shared-references/output-composition.md +93 -0
  167. package/skills/shared-references/output-language.md +45 -0
  168. package/skills/shared-references/output-manifest.md +49 -0
  169. package/skills/shared-references/output-versioning.md +111 -0
  170. package/skills/shared-references/patent-format-cn.md +199 -0
  171. package/skills/shared-references/patent-format-ep.md +173 -0
  172. package/skills/shared-references/patent-format-us.md +161 -0
  173. package/skills/shared-references/patent-writing-principles.md +197 -0
  174. package/skills/shared-references/prior-art-databases.md +141 -0
  175. package/skills/shared-references/resumable-runs.md +109 -0
  176. package/skills/shared-references/review-scope-limits.md +81 -0
  177. package/skills/shared-references/review-tracing.md +391 -0
  178. package/skills/shared-references/reviewer-independence.md +79 -0
  179. package/skills/shared-references/reviewer-routing.md +852 -0
  180. package/skills/shared-references/skill-governance.md +104 -0
  181. package/skills/shared-references/taste-calibration.md +85 -0
  182. package/skills/shared-references/venue-checklists.md +114 -0
  183. package/skills/shared-references/wiki-helper-resolution.md +134 -0
  184. package/skills/shared-references/writing-principles.md +525 -0
  185. package/skills/skills-codex/README.md +102 -0
  186. package/skills/skills-codex/README_CN.md +100 -0
  187. package/skills/skills-codex/ablation-planner/SKILL.md +126 -0
  188. package/skills/skills-codex/alphaxiv/SKILL.md +186 -0
  189. package/skills/skills-codex/analyze-results/SKILL.md +45 -0
  190. package/skills/skills-codex/arxiv/SKILL.md +210 -0
  191. package/skills/skills-codex/auto-paper-improvement-loop/SKILL.md +574 -0
  192. package/skills/skills-codex/auto-review-loop/SKILL.md +500 -0
  193. package/skills/skills-codex/auto-review-loop-llm/SKILL.md +247 -0
  194. package/skills/skills-codex/auto-review-loop-minimax/SKILL.md +290 -0
  195. package/skills/skills-codex/citation-audit/SKILL.md +504 -0
  196. package/skills/skills-codex/claims-drafting/SKILL.md +239 -0
  197. package/skills/skills-codex/comm-lit-review/SKILL.md +299 -0
  198. package/skills/skills-codex/comm-lit-review/references/domain-taxonomy.md +57 -0
  199. package/skills/skills-codex/comm-lit-review/references/output-template.md +37 -0
  200. package/skills/skills-codex/comm-lit-review/references/source-policy.md +99 -0
  201. package/skills/skills-codex/comm-lit-review/references/venue-tiering.md +112 -0
  202. package/skills/skills-codex/deepxiv/SKILL.md +142 -0
  203. package/skills/skills-codex/dse-loop/SKILL.md +285 -0
  204. package/skills/skills-codex/embodiment-description/SKILL.md +129 -0
  205. package/skills/skills-codex/exa-search/SKILL.md +192 -0
  206. package/skills/skills-codex/experiment-audit/SKILL.md +286 -0
  207. package/skills/skills-codex/experiment-bridge/SKILL.md +356 -0
  208. package/skills/skills-codex/experiment-plan/SKILL.md +249 -0
  209. package/skills/skills-codex/experiment-queue/SKILL.md +401 -0
  210. package/skills/skills-codex/feishu-notify/SKILL.md +155 -0
  211. package/skills/skills-codex/figure-description/SKILL.md +138 -0
  212. package/skills/skills-codex/figure-spec/SKILL.md +252 -0
  213. package/skills/skills-codex/formula-derivation/SKILL.md +280 -0
  214. package/skills/skills-codex/gemini-search/SKILL.md +205 -0
  215. package/skills/skills-codex/grant-proposal/SKILL.md +626 -0
  216. package/skills/skills-codex/idea-creator/SKILL.md +405 -0
  217. package/skills/skills-codex/idea-discovery/SKILL.md +475 -0
  218. package/skills/skills-codex/idea-discovery-robot/SKILL.md +362 -0
  219. package/skills/skills-codex/integrity-forensics/SKILL.md +106 -0
  220. package/skills/skills-codex/interview-cheatsheet/SKILL.md +245 -0
  221. package/skills/skills-codex/invention-structuring/SKILL.md +188 -0
  222. package/skills/skills-codex/jurisdiction-format/SKILL.md +192 -0
  223. package/skills/skills-codex/kill-argument/SKILL.md +403 -0
  224. package/skills/skills-codex/mermaid-diagram/SKILL.md +379 -0
  225. package/skills/skills-codex/meta-apply/SKILL.md +154 -0
  226. package/skills/skills-codex/meta-optimize/SKILL.md +348 -0
  227. package/skills/skills-codex/monitor-experiment/SKILL.md +98 -0
  228. package/skills/skills-codex/novelty-check/SKILL.md +89 -0
  229. package/skills/skills-codex/openalex/SKILL.md +228 -0
  230. package/skills/skills-codex/overleaf-sync/SKILL.md +220 -0
  231. package/skills/skills-codex/paper-claim-audit/SKILL.md +350 -0
  232. package/skills/skills-codex/paper-compile/SKILL.md +253 -0
  233. package/skills/skills-codex/paper-figure/SKILL.md +311 -0
  234. package/skills/skills-codex/paper-illustration/SKILL.md +690 -0
  235. package/skills/skills-codex/paper-illustration-image2/SKILL.md +383 -0
  236. package/skills/skills-codex/paper-illustration-image2/scripts/paper_illustration_image2.py +255 -0
  237. package/skills/skills-codex/paper-plan/SKILL.md +278 -0
  238. package/skills/skills-codex/paper-poster/SKILL.md +19 -0
  239. package/skills/skills-codex/paper-poster-html/SKILL.md +377 -0
  240. package/skills/skills-codex/paper-slides/SKILL.md +571 -0
  241. package/skills/skills-codex/paper-talk/SKILL.md +381 -0
  242. package/skills/skills-codex/paper-write/SKILL.md +411 -0
  243. package/skills/skills-codex/paper-write/templates/IEEEtran.bst +2409 -0
  244. package/skills/skills-codex/paper-write/templates/IEEEtran.cls +6347 -0
  245. package/skills/skills-codex/paper-write/templates/aaai2026.bst +1493 -0
  246. package/skills/skills-codex/paper-write/templates/aaai2026.sty +315 -0
  247. package/skills/skills-codex/paper-write/templates/aaai2026.tex +952 -0
  248. package/skills/skills-codex/paper-write/templates/acl.sty +312 -0
  249. package/skills/skills-codex/paper-write/templates/acl2026.tex +377 -0
  250. package/skills/skills-codex/paper-write/templates/acl_natbib.bst +1940 -0
  251. package/skills/skills-codex/paper-write/templates/acm.bst +3081 -0
  252. package/skills/skills-codex/paper-write/templates/acm_mm2026.tex +204 -0
  253. package/skills/skills-codex/paper-write/templates/acmart.cls +3520 -0
  254. package/skills/skills-codex/paper-write/templates/cvpr.bst +1448 -0
  255. package/skills/skills-codex/paper-write/templates/cvpr.sty +508 -0
  256. package/skills/skills-codex/paper-write/templates/cvpr2026.tex +63 -0
  257. package/skills/skills-codex/paper-write/templates/iclr2026.tex +84 -0
  258. package/skills/skills-codex/paper-write/templates/iclr2026_conference.bst +1440 -0
  259. package/skills/skills-codex/paper-write/templates/iclr2026_conference.sty +246 -0
  260. package/skills/skills-codex/paper-write/templates/icml2026.sty +767 -0
  261. package/skills/skills-codex/paper-write/templates/icml2026.tex +662 -0
  262. package/skills/skills-codex/paper-write/templates/ieee_conference.tex +89 -0
  263. package/skills/skills-codex/paper-write/templates/ieee_journal.tex +93 -0
  264. package/skills/skills-codex/paper-write/templates/math_commands.tex +48 -0
  265. package/skills/skills-codex/paper-write/templates/neurips2026.tex +493 -0
  266. package/skills/skills-codex/paper-write/templates/neurips_2026.sty +437 -0
  267. package/skills/skills-codex/paper-writing/SKILL.md +731 -0
  268. package/skills/skills-codex/patent-novelty-check/SKILL.md +153 -0
  269. package/skills/skills-codex/patent-pipeline/SKILL.md +344 -0
  270. package/skills/skills-codex/patent-review/SKILL.md +202 -0
  271. package/skills/skills-codex/pixel-art/SKILL.md +139 -0
  272. package/skills/skills-codex/prior-art-search/SKILL.md +146 -0
  273. package/skills/skills-codex/proof-checker/SKILL.md +554 -0
  274. package/skills/skills-codex/proof-orchestrator/SKILL.md +260 -0
  275. package/skills/skills-codex/proof-orchestrator/references/audit-output-contract.md +126 -0
  276. package/skills/skills-codex/proof-orchestrator/references/deepseek-routing.md +76 -0
  277. package/skills/skills-codex/proof-orchestrator/references/dispatch-prompts.md +227 -0
  278. package/skills/skills-codex/proof-orchestrator/references/notation-audit.md +135 -0
  279. package/skills/skills-codex/proof-orchestrator/references/proof-audit-rubric.md +70 -0
  280. package/skills/skills-codex/proof-orchestrator/references/stress-tests.md +38 -0
  281. package/skills/skills-codex/proof-writer/SKILL.md +222 -0
  282. package/skills/skills-codex/qzcli/SKILL.md +324 -0
  283. package/skills/skills-codex/rebuttal/SKILL.md +305 -0
  284. package/skills/skills-codex/render-html/SKILL.md +305 -0
  285. package/skills/skills-codex/render-html/scripts/__pycache__/render_html.cpython-314.pyc +0 -0
  286. package/skills/skills-codex/render-html/scripts/render_html.py +909 -0
  287. package/skills/skills-codex/render-html/scripts/templates/academic.html +342 -0
  288. package/skills/skills-codex/render-html/scripts/templates/dashboard.html +333 -0
  289. package/skills/skills-codex/research-lit/SKILL.md +464 -0
  290. package/skills/skills-codex/research-pipeline/SKILL.md +340 -0
  291. package/skills/skills-codex/research-refine/SKILL.md +721 -0
  292. package/skills/skills-codex/research-refine-pipeline/SKILL.md +186 -0
  293. package/skills/skills-codex/research-review/SKILL.md +135 -0
  294. package/skills/skills-codex/research-wiki/SKILL.md +421 -0
  295. package/skills/skills-codex/resubmit-pipeline/SKILL.md +444 -0
  296. package/skills/skills-codex/result-to-claim/SKILL.md +246 -0
  297. package/skills/skills-codex/run-experiment/SKILL.md +236 -0
  298. package/skills/skills-codex/semantic-scholar/SKILL.md +219 -0
  299. package/skills/skills-codex/serverless-modal/SKILL.md +335 -0
  300. package/skills/skills-codex/shared-references/acceptance-gate.md +336 -0
  301. package/skills/skills-codex/shared-references/assurance-contract.md +139 -0
  302. package/skills/skills-codex/shared-references/capture-antipatterns.md +84 -0
  303. package/skills/skills-codex/shared-references/citation-discipline.md +452 -0
  304. package/skills/skills-codex/shared-references/compute-env-contract.md +163 -0
  305. package/skills/skills-codex/shared-references/effort-contract.md +143 -0
  306. package/skills/skills-codex/shared-references/evidence-precheck.md +73 -0
  307. package/skills/skills-codex/shared-references/experiment-integrity.md +49 -0
  308. package/skills/skills-codex/shared-references/external-cadence.md +334 -0
  309. package/skills/skills-codex/shared-references/fan-out-pattern.md +375 -0
  310. package/skills/skills-codex/shared-references/injection-hygiene.md +132 -0
  311. package/skills/skills-codex/shared-references/integration-contract.md +372 -0
  312. package/skills/skills-codex/shared-references/output-composition.md +98 -0
  313. package/skills/skills-codex/shared-references/output-language.md +45 -0
  314. package/skills/skills-codex/shared-references/output-manifest.md +40 -0
  315. package/skills/skills-codex/shared-references/output-versioning.md +111 -0
  316. package/skills/skills-codex/shared-references/patent-format-cn.md +199 -0
  317. package/skills/skills-codex/shared-references/patent-format-ep.md +173 -0
  318. package/skills/skills-codex/shared-references/patent-format-us.md +161 -0
  319. package/skills/skills-codex/shared-references/patent-writing-principles.md +197 -0
  320. package/skills/skills-codex/shared-references/prior-art-databases.md +141 -0
  321. package/skills/skills-codex/shared-references/resumable-runs.md +125 -0
  322. package/skills/skills-codex/shared-references/review-scope-limits.md +81 -0
  323. package/skills/skills-codex/shared-references/review-tracing.md +144 -0
  324. package/skills/skills-codex/shared-references/reviewer-independence.md +66 -0
  325. package/skills/skills-codex/shared-references/reviewer-routing.md +128 -0
  326. package/skills/skills-codex/shared-references/skill-governance.md +119 -0
  327. package/skills/skills-codex/shared-references/taste-calibration.md +90 -0
  328. package/skills/skills-codex/shared-references/venue-checklists.md +73 -0
  329. package/skills/skills-codex/shared-references/wiki-helper-resolution.md +69 -0
  330. package/skills/skills-codex/shared-references/writing-principles.md +525 -0
  331. package/skills/skills-codex/slides-polish/SKILL.md +563 -0
  332. package/skills/skills-codex/specification-writing/SKILL.md +211 -0
  333. package/skills/skills-codex/system-profile/SKILL.md +103 -0
  334. package/skills/skills-codex/training-check/SKILL.md +83 -0
  335. package/skills/skills-codex/vast-gpu/SKILL.md +394 -0
  336. package/skills/skills-codex/web-debug-search/SKILL.md +334 -0
  337. package/skills/skills-codex/wiki-enrich/SKILL.md +255 -0
  338. package/skills/skills-codex/writing-systems-papers/SKILL.md +184 -0
  339. package/skills/skills-codex-claude-review/README.md +79 -0
  340. package/skills/skills-codex-claude-review/README_CN.md +78 -0
  341. package/skills/skills-codex-claude-review/auto-paper-improvement-loop/SKILL.md +581 -0
  342. package/skills/skills-codex-claude-review/auto-review-loop/SKILL.md +510 -0
  343. package/skills/skills-codex-claude-review/novelty-check/SKILL.md +102 -0
  344. package/skills/skills-codex-claude-review/paper-figure/SKILL.md +319 -0
  345. package/skills/skills-codex-claude-review/paper-plan/SKILL.md +287 -0
  346. package/skills/skills-codex-claude-review/paper-write/SKILL.md +420 -0
  347. package/skills/skills-codex-claude-review/research-refine/SKILL.md +732 -0
  348. package/skills/skills-codex-claude-review/research-review/SKILL.md +149 -0
  349. package/skills/skills-codex-gemini-review/README.md +176 -0
  350. package/skills/skills-codex-gemini-review/README_CN.md +175 -0
  351. package/skills/skills-codex-gemini-review/auto-paper-improvement-loop/SKILL.md +331 -0
  352. package/skills/skills-codex-gemini-review/auto-review-loop/SKILL.md +304 -0
  353. package/skills/skills-codex-gemini-review/grant-proposal/SKILL.md +630 -0
  354. package/skills/skills-codex-gemini-review/idea-creator/SKILL.md +263 -0
  355. package/skills/skills-codex-gemini-review/idea-discovery/SKILL.md +275 -0
  356. package/skills/skills-codex-gemini-review/idea-discovery-robot/SKILL.md +365 -0
  357. package/skills/skills-codex-gemini-review/novelty-check/SKILL.md +92 -0
  358. package/skills/skills-codex-gemini-review/paper-figure/SKILL.md +289 -0
  359. package/skills/skills-codex-gemini-review/paper-plan/SKILL.md +265 -0
  360. package/skills/skills-codex-gemini-review/paper-poster-html/SKILL.md +102 -0
  361. package/skills/skills-codex-gemini-review/paper-slides/SKILL.md +582 -0
  362. package/skills/skills-codex-gemini-review/paper-write/SKILL.md +346 -0
  363. package/skills/skills-codex-gemini-review/paper-writing/SKILL.md +312 -0
  364. package/skills/skills-codex-gemini-review/research-refine/SKILL.md +674 -0
  365. package/skills/skills-codex-gemini-review/research-review/SKILL.md +112 -0
  366. package/skills/slides-polish/SKILL.md +565 -0
  367. package/skills/specification-writing/SKILL.md +211 -0
  368. package/skills/system-profile/SKILL.md +103 -0
  369. package/skills/training-check/SKILL.md +132 -0
  370. package/skills/vast-gpu/SKILL.md +394 -0
  371. package/skills/web-debug-search/SKILL.md +334 -0
  372. package/skills/wiki-enrich/SKILL.md +257 -0
  373. package/skills/writing-systems-papers/SKILL.md +184 -0
  374. package/templates/CLAUDE_MD_TEMPLATE.md +29 -0
  375. package/templates/EXPERIMENT_LOG_TEMPLATE.md +47 -0
  376. package/templates/EXPERIMENT_PLAN_TEMPLATE.md +51 -0
  377. package/templates/EXPERIMENT_PLAN_TEMPLATE_CN.md +53 -0
  378. package/templates/FINDINGS_TEMPLATE.md +52 -0
  379. package/templates/IDEA_CANDIDATES_TEMPLATE.md +47 -0
  380. package/templates/IDEA_CANDIDATES_TEMPLATE_CN.md +47 -0
  381. package/templates/INVENTION_BRIEF_TEMPLATE.md +87 -0
  382. package/templates/MANIFEST_TEMPLATE.md +7 -0
  383. package/templates/NARRATIVE_REPORT_TEMPLATE.md +49 -0
  384. package/templates/PAPER_PLAN_TEMPLATE.md +47 -0
  385. package/templates/PATENT_CLAIMS_TEMPLATE.md +78 -0
  386. package/templates/PATENT_SPECIFICATION_TEMPLATE.md +68 -0
  387. package/templates/README.md +57 -0
  388. package/templates/RESEARCH_BRIEF_TEMPLATE.md +35 -0
  389. package/templates/RESEARCH_BRIEF_TEMPLATE_CN.md +41 -0
  390. package/templates/RESEARCH_CONTRACT_TEMPLATE.md +60 -0
  391. package/templates/claude-hooks/corpus_write_guard.json +16 -0
  392. package/templates/claude-hooks/corpus_write_guard.py +85 -0
  393. package/templates/claude-hooks/meta_logging.json +74 -0
  394. package/templates/gitignore-trace.txt +3 -0
  395. package/tools/__pycache__/check_skills_inventory.cpython-314.pyc +0 -0
  396. package/tools/arxiv_fetch.py +311 -0
  397. package/tools/capture_filter.py +126 -0
  398. package/tools/check_skills_inventory.py +273 -0
  399. package/tools/convert_skills_to_llm_chat.py +282 -0
  400. package/tools/copilot_native_evidence.py +818 -0
  401. package/tools/deepxiv_fetch.py +213 -0
  402. package/tools/evidence_check.py +212 -0
  403. package/tools/exa_search.py +425 -0
  404. package/tools/experiment_queue/README.md +118 -0
  405. package/tools/experiment_queue/build_manifest.py +44 -0
  406. package/tools/experiment_queue/queue_manager.py +44 -0
  407. package/tools/extract_paper_style.py +560 -0
  408. package/tools/figure_renderer.py +69 -0
  409. package/tools/forensics_gate.py +669 -0
  410. package/tools/generate_codex_claude_review_overrides.py +299 -0
  411. package/tools/idea_discovery_gate.py +256 -0
  412. package/tools/install_aris.ps1 +1372 -0
  413. package/tools/install_aris.sh +1370 -0
  414. package/tools/install_aris_codex.sh +1023 -0
  415. package/tools/install_aris_copilot.sh +1052 -0
  416. package/tools/iteration_log.py +143 -0
  417. package/tools/lint_skills_helpers.sh +84 -0
  418. package/tools/meta_opt/check_ready.sh +80 -0
  419. package/tools/meta_opt/log_event.sh +91 -0
  420. package/tools/meta_opt/trigger_eval.py +280 -0
  421. package/tools/meta_opt/trigger_evals.sample.json +28 -0
  422. package/tools/openalex_fetch.py +326 -0
  423. package/tools/overleaf_audit.sh +104 -0
  424. package/tools/overleaf_setup.sh +150 -0
  425. package/tools/paper_illustration_image2.py +62 -0
  426. package/tools/provenance.py +294 -0
  427. package/tools/research_wiki.py +1720 -0
  428. package/tools/review_gate.py +502 -0
  429. package/tools/run_state.py +399 -0
  430. package/tools/save_trace.sh +477 -0
  431. package/tools/semantic_scholar_fetch.py +438 -0
  432. package/tools/skill-groups.tsv +116 -0
  433. package/tools/skill_picker.py +238 -0
  434. package/tools/smart_update.ps1 +521 -0
  435. package/tools/smart_update.sh +591 -0
  436. package/tools/smart_update_codex.sh +419 -0
  437. package/tools/smart_update_copilot.sh +605 -0
  438. package/tools/threat_scan.py +222 -0
  439. package/tools/verify_paper_audits.sh +487 -0
  440. package/tools/verify_papers.py +613 -0
  441. package/tools/verify_wiki_coverage.sh +176 -0
  442. package/tools/watchdog.py +485 -0
@@ -0,0 +1,311 @@
1
+ ---
2
+ name: result-to-claim
3
+ description: Use when experiments complete to judge what claims the results support, what they don't, and what evidence is still missing. Codex MCP evaluates results against intended claims and routes to next action (pivot, supplement, or confirm). Use after experiments finish — before writing the paper or running ablations.
4
+ argument-hint: "[experiment-description-or-wandb-run]"
5
+ allowed-tools: Bash(*), Read, Grep, Glob, Write, Edit, mcp__codex__codex, mcp__codex__codex-reply
6
+ ---
7
+
8
+ # Result-to-Claim Gate
9
+
10
+ > 🔒 **Do not wrap this skill in `/loop`, `/schedule`, or `CronCreate`.** It is
11
+ > verdict-bearing — it judges whether results support a claim. Re-running that
12
+ > verdict on a wall-clock timer adds no new signal (the verdict changes only
13
+ > when the *results* change, not when the clock ticks). What you actually want
14
+ > to schedule is the *external wait that precedes it* — experiments done → then
15
+ > run this gate **once**. See
16
+ > [`shared-references/external-cadence.md`](../shared-references/external-cadence.md).
17
+
18
+ Experiments produce numbers; this gate decides what those numbers *mean*. Collect results from available sources, get a Codex judgment, then auto-route based on the verdict.
19
+
20
+ ## Context: $ARGUMENTS
21
+
22
+ ## When to Use
23
+
24
+ - After a set of experiments completes (main results, not just sanity checks)
25
+ - Before committing to claims in a paper or review response
26
+ - When results are ambiguous and you need an objective second opinion
27
+
28
+ ## Workflow
29
+
30
+ ### Step 1: Collect Results
31
+
32
+ Gather experiment data from whatever sources are available in the project:
33
+
34
+ 1. **W&B** (preferred): `wandb.Api().run("<entity>/<project>/<run_id>").history()` — metrics, training curves, comparisons
35
+ 2. **EXPERIMENT_LOG.md**: full results table with baselines and verdicts
36
+ 3. **EXPERIMENT_TRACKER.md**: check which experiments are DONE vs still running
37
+ 4. **Log files**: `ssh server "tail -100 /path/to/training.log"` if no other source
38
+ 5. **`idea-stage/docs/research_contract.md`** (legacy fallback: `docs/research_contract.md`): intended claims and experiment design
39
+
40
+ Assemble the key information:
41
+ - What experiments were run (method, dataset, config)
42
+ - Main metrics and baseline comparisons (deltas)
43
+ - The intended claim these experiments were designed to test
44
+ - Any known confounds or caveats
45
+
46
+ ### Step 1.5: Deterministic evidence pre-check (before spending a Codex call)
47
+
48
+ For every claim that cites a specific number + a source file, verify the evidence
49
+ *exists* mechanically — no model call — to catch **hallucinated evidence** before
50
+ the jury runs (see [`shared-references/evidence-precheck.md`](../shared-references/evidence-precheck.md)).
51
+
52
+ **1. Build the claims list.** From the cited numbers and their result files, write
53
+ `[{"id", "value", "source"}, ...]` to `.aris/claims.json` (`source` is the result
54
+ file/glob relative to the project root; `value` is the cited number or string).
55
+
56
+ **2. Run the pre-check — this is a real step, not a suggestion.** Execute the block
57
+ below (resolver per integration-contract §2, **Policy B**: warn-and-skip if the helper
58
+ is unresolved — never block the audit):
59
+
60
+ ```bash
61
+ # Policy B = warn-and-skip: nothing here may abort the audit. cd is non-fatal, the
62
+ # helper run is explicitly non-blocking, no pipefail-fragile pipe.
63
+ cd "$(git rev-parse --show-toplevel 2>/dev/null || pwd)" 2>/dev/null || true
64
+ if [ -z "${ARIS_REPO:-}" ] && [ -f .aris/installed-skills.txt ]; then
65
+ ARIS_REPO=$(awk -F'\t' '$1=="repo_root"{print $2; exit}' .aris/installed-skills.txt 2>/dev/null) || true
66
+ fi
67
+ if [ -z "${ARIS_REPO:-}" ] && [ -f "$HOME/.aris/repo" ]; then
68
+ ARIS_REPO=$(cat "$HOME/.aris/repo" 2>/dev/null) || true
69
+ fi
70
+ EVIDENCE_CHECK=".aris/tools/evidence_check.py"
71
+ [ -f "$EVIDENCE_CHECK" ] || EVIDENCE_CHECK="tools/evidence_check.py"
72
+ [ -f "$EVIDENCE_CHECK" ] || { [ -n "${ARIS_REPO:-}" ] && EVIDENCE_CHECK="$ARIS_REPO/tools/evidence_check.py"; }
73
+ [ -f "$EVIDENCE_CHECK" ] || EVIDENCE_CHECK=""
74
+
75
+ mkdir -p .aris
76
+ if [ -n "$EVIDENCE_CHECK" ]; then
77
+ # NB: evidence_check exits 1 when it FINDS hallucinated evidence (value_not_found /
78
+ # path_missing) — that is the useful signal, NOT a failure. So judge success by
79
+ # whether valid JSON was produced, never by exit code. `|| true` keeps set -e calm.
80
+ python3 "$EVIDENCE_CHECK" . --batch .aris/claims.json > .aris/evidence_precheck.json 2>.aris/evidence_precheck.err || true
81
+ if [ -s .aris/evidence_precheck.json ] && python3 -c "import json,sys;json.load(open('.aris/evidence_precheck.json'))" 2>/dev/null; then
82
+ cat .aris/evidence_precheck.json
83
+ else
84
+ echo "WARN: evidence_check produced no valid output (see .aris/evidence_precheck.err);" >&2
85
+ echo " pre-check skipped (Policy B); the Codex jury still runs." >&2
86
+ fi
87
+ else
88
+ echo "WARN: evidence_check.py not resolved at .aris/tools/, tools/, \$ARIS_REPO/tools/, or via ~/.aris/repo." >&2
89
+ echo " Pre-check skipped (Policy B); the Codex jury still runs. Fix: rerun" >&2
90
+ echo " bash tools/install_aris.sh, export ARIS_REPO, or copy the helper to tools/." >&2
91
+ fi
92
+ ```
93
+
94
+ The output is `{"results": [{id, value, source, status, ...}], "summary": {status: n}}`
95
+ with `status ∈ {verified, value_not_found, path_missing, unparseable}`.
96
+
97
+ **3. Act on the statuses.** Any claim returned `value_not_found` or `path_missing` is
98
+ **hallucinated evidence** — mark it `claim_supported: no` with
99
+ `integrity_status: evidence_not_found` immediately; do NOT spend a Codex call defending a
100
+ number that isn't in the data. `unparseable` claims (no usable value/source) just go to
101
+ the jury normally.
102
+
103
+ **4. Carry the per-claim status into Step 2.** Feed a small
104
+ `evidence pre-check: <id> → verified | value_not_found | path_missing | unparseable`
105
+ table (from `.aris/evidence_precheck.json`) into the Step-2 Codex prompt so the jury knows
106
+ which claims have real evidence to read. If the pre-check was skipped (helper unresolved),
107
+ say so in that slot rather than omitting it.
108
+
109
+ `verified` here means only that the cited evidence **exists** — whether it
110
+ **supports** the claim is still the Codex jury's call in Step 2 (a deterministic
111
+ gate DRIVES, it does not ACQUIT).
112
+
113
+ ### Step 2: Codex Judgment
114
+
115
+ Send the collected results to Codex for objective evaluation. Include ONLY claims that passed the Step 1.5 pre-check — claims already terminally rejected (`evidence_not_found`) keep their deterministic verdict and are NOT re-litigated here:
116
+
117
+ ```
118
+ mcp__codex__codex:
119
+ model: gpt-5.6-sol
120
+ config: {"model_reasoning_effort": "ultra"}
121
+ prompt: |
122
+ RESULT-TO-CLAIM EVALUATION
123
+
124
+ I need you to judge whether experimental results support the intended claim.
125
+
126
+ Intended claim: [the claim these experiments test]
127
+
128
+ Experiments run:
129
+ [list experiments with method, dataset, metrics]
130
+
131
+ Results:
132
+ [paste key numbers, comparison deltas, significance]
133
+
134
+ Evidence pre-check (deterministic, from Step 1.5):
135
+ [per-claim: <id> → verified | value_not_found | path_missing.
136
+ A value_not_found/path_missing means the cited number is NOT in its result
137
+ file — treat that claim as having no evidence; do not defend it. `verified`
138
+ means the number exists in the file — YOU still judge whether it supports
139
+ the claim.]
140
+
141
+ Baselines:
142
+ [baseline numbers and sources — reproduced or from paper]
143
+
144
+ Known caveats:
145
+ [any confounding factors, limited datasets, missing comparisons]
146
+
147
+ Please evaluate:
148
+ 1. claim_supported: yes | partial | no
149
+ 2. what_results_support: what the data actually shows
150
+ 3. what_results_dont_support: where the data falls short of the claim
151
+ 4. missing_evidence: specific evidence gaps
152
+ 5. suggested_claim_revision: if the claim should be strengthened, weakened, or reframed
153
+ 6. next_experiments_needed: specific experiments to fill gaps (if any)
154
+ 7. confidence: high | medium | low
155
+
156
+ Be honest. Do not inflate claims beyond what the data supports.
157
+ A single positive result on one dataset does not support a general claim.
158
+ ```
159
+
160
+ ### Step 3: Parse and Normalize
161
+
162
+ Extract structured fields from Codex response:
163
+
164
+ ```markdown
165
+ - claim_supported: yes | partial | no
166
+ - what_results_support: "..."
167
+ - what_results_dont_support: "..."
168
+ - missing_evidence: "..."
169
+ - suggested_claim_revision: "..."
170
+ - next_experiments_needed: "..."
171
+ - confidence: high | medium | low
172
+ ```
173
+
174
+ ### Step 3.5: Check Experiment Integrity (if audit exists)
175
+
176
+ **Skip this step if `EXPERIMENT_AUDIT.json` does not exist.**
177
+
178
+ ```
179
+ if EXPERIMENT_AUDIT.json exists:
180
+ read integrity_status from file
181
+ attach to verdict output:
182
+ integrity_status: pass | warn | fail
183
+
184
+ if integrity_status == "fail":
185
+ append to verdict: "[INTEGRITY CONCERN] — audit found issues, see EXPERIMENT_AUDIT.md"
186
+ downgrade confidence to "low" regardless of Codex judgment
187
+
188
+ if integrity_status == "warn":
189
+ append to verdict: "[INTEGRITY: WARN] — audit flagged potential issues"
190
+ else:
191
+ integrity_status = "unavailable"
192
+ verdict is labeled "provisional — no integrity audit run"
193
+ (this does NOT block anything — pipeline continues normally)
194
+ ```
195
+
196
+ See `shared-references/experiment-integrity.md` for the full integrity protocol.
197
+
198
+ ### Step 4: Route Based on Verdict
199
+
200
+ #### `no` — Claim not supported
201
+
202
+ 1. Record postmortem in findings.md (Research Findings section):
203
+ - What was tested, what failed, hypotheses for why
204
+ - Constraints for future attempts (what NOT to try again)
205
+ 2. Update CLAUDE.md Pipeline Status
206
+ 3. Decide whether to pivot to next idea from IDEA_CANDIDATES.md or try an alternative approach
207
+
208
+ #### `partial` — Claim partially supported
209
+
210
+ 1. Update the working claim to reflect what IS supported
211
+ 2. Record the gap in findings.md
212
+ 3. Design and run supplementary experiments to fill evidence gaps
213
+ 4. Re-run result-to-claim after supplementary experiments complete
214
+ 5. **Multiple rounds of `partial` on the same claim** → record analysis in findings.md, consider whether to narrow the claim scope or switch ideas
215
+
216
+ #### `yes` — Claim supported
217
+
218
+ 1. Record confirmed claim in project notes
219
+ 2. If ablation studies are incomplete → trigger `/ablation-planner`
220
+ 3. If all evidence is in → ready for paper writing
221
+
222
+ ### Step 5: Update Research Wiki (if active)
223
+
224
+ **Skip this step entirely if `research-wiki/` does not exist.**
225
+
226
+ If `research-wiki/` exists, resolve `$WIKI_SCRIPT` per the canonical
227
+ chain documented in
228
+ [`shared-references/wiki-helper-resolution.md`](../shared-references/wiki-helper-resolution.md)
229
+ (Variant B — warn-and-skip for caller skills). The verdict / idea-outcome
230
+ page edits below run on raw markdown and don't need the helper, but edges,
231
+ query-pack rebuild, and the log line do. **This skill never edits a claim's
232
+ `status` field and never creates a claim node** — claims are born (and their
233
+ proof `status` set) by `/proof-checker`; here we only attach experiment edges.
234
+
235
+ ```bash
236
+ cd "$(git rev-parse --show-toplevel 2>/dev/null || pwd)" || exit 1
237
+ ARIS_REPO="${ARIS_REPO:-$(awk -F'\t' '$1=="repo_root"{print $2; exit}' .aris/installed-skills.txt 2>/dev/null)}"
238
+ if [ -z "${ARIS_REPO:-}" ] && [ -f "$HOME/.aris/repo" ]; then
239
+ ARIS_REPO=$(cat "$HOME/.aris/repo" 2>/dev/null) || true
240
+ fi
241
+ WIKI_SCRIPT=".aris/tools/research_wiki.py"
242
+ [ -f "$WIKI_SCRIPT" ] || WIKI_SCRIPT="tools/research_wiki.py"
243
+ [ -f "$WIKI_SCRIPT" ] || { [ -n "${ARIS_REPO:-}" ] && WIKI_SCRIPT="$ARIS_REPO/tools/research_wiki.py"; }
244
+ [ -f "$WIKI_SCRIPT" ] || {
245
+ echo "WARN: research_wiki.py not found; verdict will be reported but wiki edges/query-pack/log will be skipped. Fix: bash tools/install_aris.sh or smart_update.sh (refreshes ~/.aris/repo), export ARIS_REPO, or cp <ARIS-repo>/tools/research_wiki.py tools/." >&2
246
+ WIKI_SCRIPT=""
247
+ }
248
+ ```
249
+
250
+ ```
251
+ if research-wiki/ exists:
252
+ # 1. Create/refresh the experiment node FIRST (verdict OWNER → --update-on-exist so
253
+ # a re-judge overwrites the stale verdict). The supports/invalidates edges in #2
254
+ # point FROM exp:<id>, and add_edge does NOT verify node existence — so GATE those
255
+ # edges on the experiment node having been born (EXP_NODE_OK), else they'd dangle
256
+ # (the exact bug this closes). On failure: warn, skip the wiki edges, still report.
257
+ EXP_NODE_OK=0
258
+ if [ -n "$WIKI_SCRIPT" ]; then
259
+ if python3 "$WIKI_SCRIPT" add_experiment research-wiki/ \
260
+ --slug "<exp_id>" --idea "idea:<active_idea>" \
261
+ --verdict "<yes|partial|no>" --confidence "<high|medium|low>" \
262
+ --date "<date>" --hardware "<hw>" --duration "<dur>" \
263
+ --metrics "<key metrics>" --reasoning "<one-line why this verdict>" \
264
+ --provenance "<EXPERIMENT_AUDIT.md / run dir>" --update-on-exist; then
265
+ EXP_NODE_OK=1 # page written + idea--tested_by-->exp edge + index/query_pack rebuilt
266
+ else
267
+ echo "WARN: add_experiment failed for <exp_id>; skipping wiki edges (verdict still reported)." >&2
268
+ fi
269
+ fi
270
+
271
+ # 2. Record empirical support as EDGES ONLY — and ONLY when the exp node was born
272
+ # ([ "$EXP_NODE_OK" = 1 ]), so no edge dangles off a missing node. Never edit the
273
+ # claim page's `status`: that is the PROOF axis (verified / refuted / unproven /
274
+ # sound-modulo-imports / drafted / retracted), owned by /proof-checker (the claim
275
+ # birth point) — "supported"/"invalidated" are NOT valid claim statuses. The claim
276
+ # target should ALREADY be born by /proof-checker; add_edge does not verify it.
277
+ for each claim resolved by this verdict (only if [ "$EXP_NODE_OK" = 1 ]):
278
+ if verdict == "yes":
279
+ python3 "$WIKI_SCRIPT" add_edge research-wiki/ --from "exp:<id>" --to "claim:<cid>" --type supports --evidence "<metric>"
280
+ elif verdict == "partial":
281
+ python3 "$WIKI_SCRIPT" add_edge research-wiki/ --from "exp:<id>" --to "claim:<cid>" --type supports --evidence "partial: <metric>"
282
+ else:
283
+ python3 "$WIKI_SCRIPT" add_edge research-wiki/ --from "exp:<id>" --to "claim:<cid>" --type invalidates --evidence "<why>"
284
+
285
+ # 3. Update idea outcome (raw markdown, helper-free)
286
+ Update research-wiki/ideas/<idea_id>.md:
287
+ - outcome: positive | mixed | negative
288
+ - If negative: fill "Failure / Risk Notes" and "Lessons Learned"
289
+ - If positive: fill "Actual Outcome" and "Reusable Components"
290
+
291
+ # 4. Rebuild + log (only if $WIKI_SCRIPT resolved)
292
+ [ -n "$WIKI_SCRIPT" ] && python3 "$WIKI_SCRIPT" rebuild_query_pack research-wiki/
293
+ [ -n "$WIKI_SCRIPT" ] && python3 "$WIKI_SCRIPT" log research-wiki/ "result-to-claim: exp:<id> verdict=<verdict> for idea:<idea_id>"
294
+
295
+ # 5. Re-ideation suggestion
296
+ Count failed/partial ideas since last /idea-creator run.
297
+ If >= 3: print "💡 3+ ideas tested since last ideation. Consider re-running /idea-creator — the wiki now knows what doesn't work."
298
+ ```
299
+
300
+ ## Rules
301
+
302
+ - **Codex is the judge, not CC.** CC collects evidence and routes; Codex evaluates. This prevents post-hoc rationalization.
303
+ - Do not inflate claims beyond what the data supports. If Codex says "partial", do not round up to "yes".
304
+ - A single positive result on one dataset does not support a general claim. Be honest about scope.
305
+ - If `confidence` is low, treat the judgment as inconclusive and add experiments rather than committing to a claim.
306
+ - **Fail closed if the reviewer is unavailable.** If the Codex call fails, first walk the capability fallback chain in `shared-references/reviewer-routing.md` (`gpt-5.6-sol`+`ultra` → `gpt-5.6-sol`+`xhigh` → `gpt-5.5`+`xhigh`, capability errors only). If no allowed pair succeeds: write `CLAIMS_FROM_RESULTS.md` containing ONLY the first line `verdict: REVIEW_UNAVAILABLE` (a machine-checkable gate for pipeline callers), record the same in findings.md, and STOP — CC never substitutes its own claim judgment (a loop can drive, never acquit; `acceptance-gate.md`). Downstream steps (wiki `add_experiment` edges, ablation-planner, paper claims) must not consume a run without a Codex verdict. Exception: the deterministic evidence pre-check (Step 1.5) may still terminally mark a claim `claim_supported: no` for hallucinated evidence — a deterministic rejection needs no reviewer; only SUPPORTIVE or ambiguous outcomes require one.
307
+ - Always record the verdict and reasoning in findings.md, regardless of outcome.
308
+
309
+ ## Review Tracing
310
+
311
+ After each `mcp__codex__codex` or `mcp__codex__codex-reply` reviewer call, save the trace following `shared-references/review-tracing.md` (Policy C — forensic; never silently skip). Use `save_trace.sh` (resolved per the chain in `shared-references/integration-contract.md` §2) or write files directly to `.aris/traces/<skill>/<date>_run<NN>/`. Respect the `--- trace:` parameter (default: `full`).
@@ -0,0 +1,313 @@
1
+ ---
2
+ name: run-experiment
3
+ description: Deploy and run ML experiments on local, remote, Vast.ai, or Modal serverless GPU. Use when user says "run experiment", "deploy to server", "跑实验", or needs to launch training jobs.
4
+ argument-hint: "[experiment-description]"
5
+ allowed-tools: Bash(*), Read, Grep, Glob, Edit, Write, Skill(serverless-modal)
6
+ ---
7
+
8
+ # Run Experiment
9
+
10
+ Deploy and run ML experiment: $ARGUMENTS
11
+
12
+ ## Workflow
13
+
14
+ ### Step 1: Detect Environment
15
+
16
+ Read the project's `CLAUDE.md` to determine the experiment environment:
17
+
18
+ - **Local GPU** (`gpu: local`): Look for local CUDA/MPS setup info
19
+ - **Remote server** (`gpu: remote`): Look for SSH alias, conda env, code directory
20
+ - **Vast.ai** (`gpu: vast`): Check for `vast-instances.json` at project root — if a running instance exists, use it. Also check `CLAUDE.md` for a `## Vast.ai` section.
21
+ - **Modal** (`gpu: modal`): Serverless GPU via Modal. No SSH, no Docker, auto scale-to-zero. Delegate to `/serverless-modal`.
22
+
23
+ **Modal detection:** If `CLAUDE.md` has `gpu: modal` or a `## Modal` section, the entire deployment is handled by `/serverless-modal`. Jump to **Step 4: Deploy (Modal)** — Steps 2-3 are not needed (Modal handles code sync and GPU allocation automatically).
24
+
25
+ **Environment contract** (`../shared-references/compute-env-contract.md`): before
26
+ building or trusting any environment, read the provider's env ledger
27
+ (`.aris/compute/<provider>.md`) — an unchanged spec hash means warm-reuse, a
28
+ changed one means rebuild. New env → write the declarative spec first, render it
29
+ for this provider's shape, and never declare it ready on import-success alone:
30
+ run the seeded kernel witness, and after any rebuild/doc edit run the
31
+ agent-follows-doc pass (a fresh subagent executes the documented invocation
32
+ verbatim and reports doc-vs-reality divergence).
33
+
34
+ **Vast.ai detection priority:**
35
+ 1. If `CLAUDE.md` has `gpu: vast` or a `## Vast.ai` section:
36
+ - If `vast-instances.json` exists and has a running instance → use that instance
37
+ - If no running instance → call `/vast-gpu provision` which analyzes the task, presents cost-optimized GPU options, and rents the user's choice
38
+ 2. If no server info is found in `CLAUDE.md`, ask the user.
39
+
40
+ ### Step 2: Pre-flight Check
41
+
42
+ Check GPU availability on the target machine:
43
+
44
+ **Remote (SSH):**
45
+ ```bash
46
+ ssh <server> nvidia-smi --query-gpu=index,memory.used,memory.total --format=csv,noheader
47
+ ```
48
+
49
+ **Remote (Vast.ai):**
50
+ ```bash
51
+ ssh -p <PORT> root@<HOST> nvidia-smi --query-gpu=index,memory.used,memory.total --format=csv,noheader
52
+ ```
53
+ (Read `ssh_host` and `ssh_port` from `vast-instances.json`, or run `vastai ssh-url <INSTANCE_ID>` which returns `ssh://root@HOST:PORT`)
54
+
55
+ **Local:**
56
+ ```bash
57
+ nvidia-smi --query-gpu=index,memory.used,memory.total --format=csv,noheader
58
+ # or for Mac MPS:
59
+ python -c "import torch; print('MPS available:', torch.backends.mps.is_available())"
60
+ ```
61
+
62
+ Free GPU = memory.used < 500 MiB.
63
+
64
+ ### Step 3: Sync Code (Remote Only)
65
+
66
+ Check the project's `CLAUDE.md` for a `code_sync` setting. If not specified, default to `rsync`.
67
+
68
+ #### Option A: rsync (default)
69
+
70
+ Only sync necessary files — NOT data, checkpoints, or large files:
71
+ ```bash
72
+ rsync -avz --include='*.py' --exclude='*' <local_src>/ <server>:<remote_dst>/
73
+ ```
74
+
75
+ #### Option B: git (when `code_sync: git` is set in CLAUDE.md)
76
+
77
+ Push local changes to remote repo, then pull on the server:
78
+ ```bash
79
+ # 1. Push from local
80
+ git add -A && git commit -m "sync: experiment deployment" && git push
81
+
82
+ # 2. Pull on server
83
+ ssh <server> "cd <remote_dst> && git pull"
84
+ ```
85
+
86
+ Benefits: version-tracked, multi-server sync with one push, no rsync include/exclude rules needed.
87
+
88
+ #### Option C: Vast.ai instance
89
+
90
+ Sync code to the vast.ai instance (always rsync, code dir is `/workspace/project/`):
91
+ ```bash
92
+ rsync -avz -e "ssh -p <PORT>" \
93
+ --include='*.py' --include='*.yaml' --include='*.yml' --include='*.json' \
94
+ --include='*.txt' --include='*.sh' --include='*/' \
95
+ --exclude='*.pt' --exclude='*.pth' --exclude='*.ckpt' \
96
+ --exclude='__pycache__' --exclude='.git' --exclude='data/' \
97
+ --exclude='wandb/' --exclude='outputs/' \
98
+ ./ root@<HOST>:/workspace/project/
99
+ ```
100
+
101
+ Install dependencies per the env contract (ordered phases — pins first, one
102
+ `pip install` per phase; see `../shared-references/compute-env-contract.md`):
103
+ ```bash
104
+ ssh -p <PORT> root@<HOST> "pip install -q torch==<pinned>" # phase 1: pins
105
+ ssh -p <PORT> root@<HOST> "pip install -q <remaining packages>" # phase 2+
106
+ ```
107
+ Legacy fallback — `requirements.txt` only, no env spec: install as one phase,
108
+ and treat any version fight as the signal to convert to ordered phases:
109
+ ```bash
110
+ scp -P <PORT> requirements.txt root@<HOST>:/workspace/
111
+ ssh -p <PORT> root@<HOST> "pip install -q -r /workspace/requirements.txt"
112
+ ```
113
+
114
+ ### Step 3.5: W&B Integration (when `wandb: true` in CLAUDE.md)
115
+
116
+ **Skip this step entirely if `wandb` is not set or is `false` in CLAUDE.md.**
117
+
118
+ Before deploying, ensure the experiment scripts have W&B logging:
119
+
120
+ 1. **Check if wandb is already in the script** — look for `import wandb` or `wandb.init`. If present, skip to Step 4.
121
+
122
+ 2. **If not present, add W&B logging** to the training script:
123
+ ```python
124
+ import wandb
125
+ wandb.init(project=WANDB_PROJECT, name=EXP_NAME, config={...hyperparams...})
126
+
127
+ # Inside training loop:
128
+ wandb.log({"train/loss": loss, "train/lr": lr, "step": step})
129
+
130
+ # After eval:
131
+ wandb.log({"eval/loss": eval_loss, "eval/ppl": ppl, "eval/accuracy": acc})
132
+
133
+ # At end:
134
+ wandb.finish()
135
+ ```
136
+
137
+ 3. **Metrics to log** (add whichever apply to the experiment):
138
+ - `train/loss` — training loss per step
139
+ - `train/lr` — learning rate
140
+ - `eval/loss`, `eval/ppl`, `eval/accuracy` — eval metrics per epoch
141
+ - `gpu/memory_used` — GPU memory (via `torch.cuda.max_memory_allocated()`)
142
+ - `speed/samples_per_sec` — throughput
143
+ - Any custom metrics the experiment already computes
144
+
145
+ 4. **Verify wandb login on the target machine:**
146
+ ```bash
147
+ ssh <server> "wandb status" # should show logged in
148
+ # If not logged in:
149
+ ssh <server> "wandb login <WANDB_API_KEY>"
150
+ ```
151
+
152
+ > The W&B project name and API key come from `CLAUDE.md` (see example below). The experiment name is auto-generated from the script name + timestamp.
153
+
154
+ ### Step 4: Deploy
155
+
156
+ #### Remote (via SSH + screen)
157
+
158
+ For each experiment, create a dedicated screen session with GPU binding:
159
+ ```bash
160
+ ssh <server> "screen -dmS <exp_name> bash -c '\
161
+ eval \"\$(<conda_path>/conda shell.bash hook)\" && \
162
+ conda activate <env> && \
163
+ CUDA_VISIBLE_DEVICES=<gpu_id> python <script> <args> 2>&1 | tee <log_file>'"
164
+ ```
165
+
166
+ #### Vast.ai instance
167
+
168
+ No conda needed — the Docker image has the environment. Use `/workspace/project/` as working dir:
169
+ ```bash
170
+ ssh -p <PORT> root@<HOST> "screen -dmS <exp_name> bash -c '\
171
+ cd /workspace/project && \
172
+ CUDA_VISIBLE_DEVICES=<gpu_id> python <script> <args> 2>&1 | tee /workspace/<log_file>'"
173
+ ```
174
+
175
+ After launching, update the `experiment` field in `vast-instances.json` for this instance.
176
+
177
+ #### Modal (serverless)
178
+
179
+ When `gpu: modal` is detected, delegate to `/serverless-modal`:
180
+
181
+ 1. **Analyze task** — determine VRAM needs, choose GPU, estimate cost
182
+ 2. **Generate launcher** — create a `modal_launcher.py` that wraps the training script using `modal.Mount.from_local_dir` for code and `modal.Volume` for results
183
+ 3. **Run** — `modal run modal_launcher.py` (runs locally, GPU executes remotely)
184
+ 4. **Collect results** — results return via Volume or stdout, no manual download needed
185
+
186
+ Key Modal settings from `CLAUDE.md`:
187
+ - `modal_gpu`: GPU override (default: auto-select based on VRAM analysis)
188
+ - `modal_timeout`: Max seconds (default: 21600 = 6 hours)
189
+ - `modal_volume`: Named volume for persistent results
190
+
191
+ No SSH, no code sync, no screen sessions needed. Modal handles everything.
192
+
193
+ #### Local
194
+
195
+ ```bash
196
+ # Linux with CUDA
197
+ CUDA_VISIBLE_DEVICES=<gpu_id> python <script> <args> 2>&1 | tee <log_file>
198
+
199
+ # Mac with MPS (PyTorch uses MPS automatically)
200
+ python <script> <args> 2>&1 | tee <log_file>
201
+ ```
202
+
203
+ For local long-running jobs, use `run_in_background: true` to keep the conversation responsive.
204
+
205
+ ### Step 5: Verify Launch
206
+
207
+ **Remote (SSH):**
208
+ ```bash
209
+ ssh <server> "screen -ls"
210
+ ```
211
+
212
+ **Remote (Vast.ai):**
213
+ ```bash
214
+ ssh -p <PORT> root@<HOST> "screen -ls"
215
+ ```
216
+
217
+ **Modal:**
218
+ ```bash
219
+ modal app list # Check app is running
220
+ modal app logs <app> # Stream logs
221
+ ```
222
+
223
+ **Local:**
224
+ Check process is running and GPU is allocated.
225
+
226
+ ### Step 6: Feishu Notification (if configured)
227
+
228
+ After deployment is verified, check `~/.claude/feishu.json`:
229
+ - Send `experiment_done` notification: which experiments launched, which GPUs, estimated time
230
+ - If config absent or mode `"off"`: skip entirely (no-op)
231
+
232
+ ### Step 7: Auto-Destroy Vast.ai Instance (when `gpu: vast` and `auto_destroy: true`)
233
+
234
+ **Skip this step if not using vast.ai or `auto_destroy` is `false`.**
235
+
236
+ After the experiment completes (detected via `/monitor-experiment` or screen session ending):
237
+
238
+ 1. **Download results** from the instance:
239
+ ```bash
240
+ rsync -avz -e "ssh -p <PORT>" root@<HOST>:/workspace/project/results/ ./results/
241
+ ```
242
+
243
+ 2. **Download logs**:
244
+ ```bash
245
+ scp -P <PORT> root@<HOST>:/workspace/*.log ./logs/
246
+ ```
247
+
248
+ 3. **Destroy the instance** to stop billing:
249
+ ```bash
250
+ vastai destroy instance <INSTANCE_ID>
251
+ ```
252
+
253
+ 4. **Update `vast-instances.json`** — mark status as `destroyed`.
254
+
255
+ 5. **Report cost**:
256
+ ```
257
+ Vast.ai instance <ID> auto-destroyed.
258
+ - Duration: ~X.X hours
259
+ - Estimated cost: ~$X.XX
260
+ - Results saved to: ./results/
261
+ ```
262
+
263
+ > This ensures users are never billed for idle instances. When `auto_destroy: true` (the default), the full lifecycle is automatic: rent → setup → run → collect → destroy.
264
+
265
+ ## Key Rules
266
+
267
+ - ALWAYS check GPU availability first — never blindly assign GPUs (except Modal, which manages allocation automatically)
268
+ - Each experiment gets its own screen session + GPU (remote) or background process (local)
269
+ - Use `tee` to save logs for later inspection
270
+ - Run deployment commands with `run_in_background: true` to keep conversation responsive
271
+ - Report back: which GPU, which screen/process, what command, estimated time
272
+ - If multiple experiments, launch them in parallel on different GPUs
273
+ - **Vast.ai cost awareness**: When using `gpu: vast`, always report the running cost. If `auto_destroy: true`, destroy the instance as soon as all experiments on it complete
274
+ - **Modal cost awareness**: Always estimate and display cost before running. Modal auto-scales to zero — no idle billing, no manual cleanup
275
+
276
+ ## CLAUDE.md Example
277
+
278
+ Users should add their server info to their project's `CLAUDE.md`:
279
+
280
+ ```markdown
281
+ ## Remote Server
282
+ - gpu: remote # use pre-configured SSH server
283
+ - SSH: `ssh my-gpu-server`
284
+ - GPU: 4x A100 (80GB each)
285
+ - Conda: `eval "$(/opt/conda/bin/conda shell.bash hook)" && conda activate research`
286
+ - Code dir: `/home/user/experiments/`
287
+ - code_sync: rsync # default. Or set to "git" for git push/pull workflow
288
+ - wandb: false # set to "true" to auto-add W&B logging to experiment scripts
289
+ - wandb_project: my-project # W&B project name (required if wandb: true)
290
+ - wandb_entity: my-team # W&B team/user (optional, uses default if omitted)
291
+
292
+ ## Vast.ai
293
+ - gpu: vast # rent on-demand GPU from vast.ai
294
+ - auto_destroy: true # auto-destroy after experiment completes (default: true)
295
+ - max_budget: 5.00 # optional: max total $ to spend per experiment
296
+
297
+ ## Modal
298
+ - gpu: modal # serverless GPU via Modal (no SSH, auto scale-to-zero)
299
+ - modal_gpu: A100-80GB # optional: override GPU selection (default: auto-select)
300
+ - modal_timeout: 21600 # optional: max seconds (default: 6 hours)
301
+ - modal_volume: my-results # optional: named volume for results persistence
302
+
303
+ ## Local Environment
304
+ - gpu: local # use local GPU
305
+ - Mac MPS / Linux CUDA
306
+ - Conda env: `ml` (Python 3.10 + PyTorch)
307
+ ```
308
+
309
+ > **Vast.ai setup**: Run `pip install vastai && vastai set api-key YOUR_KEY`. Upload your SSH public key at https://cloud.vast.ai/manage-keys/. Set `gpu: vast` in your `CLAUDE.md` — `/run-experiment` will automatically rent an instance, run the experiment, and destroy it when done.
310
+
311
+ > **Modal setup**: Run `pip install modal && modal setup`. Bind a payment method at https://modal.com/settings (NEVER through CLI) to unlock the full $30/month free tier (without card: $5/month only). Set a workspace spending limit to prevent accidental charges. Set `gpu: modal` in your `CLAUDE.md` — ideal for users without a local GPU who need to debug code or run small-scale tests.
312
+
313
+ > **W&B setup**: Run `wandb login` on your server once (or set `WANDB_API_KEY` env var). The skill reads project/entity from CLAUDE.md and adds `wandb.init()` + `wandb.log()` to your training scripts automatically. Dashboard: `https://wandb.ai/<entity>/<project>`.