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,236 @@
1
+ ---
2
+ name: semantic-scholar
3
+ description: Search published venue papers (IEEE, ACM, Springer, etc.) via Semantic Scholar API. Complements /arxiv (preprints) with citation counts, venue metadata, and TLDR. Use when user says "search semantic scholar", "find IEEE papers", "find journal papers", "venue papers", "citation search", or wants published literature beyond arXiv preprints.
4
+ argument-hint: "query-or-paper-id"
5
+ allowed-tools: Bash(*), Read, Write
6
+ ---
7
+
8
+ # Semantic Scholar Paper Search
9
+
10
+ Search topic or paper ID: $ARGUMENTS
11
+
12
+ ## Role & Positioning
13
+
14
+ This skill is the **published venue** counterpart to `/arxiv`:
15
+
16
+ | Skill | Source | Best for |
17
+ |-------|--------|----------|
18
+ | `/arxiv` | arXiv API | Latest preprints, cutting-edge unrefereed work |
19
+ | `/semantic-scholar` | Semantic Scholar API | **Published** journal/conference papers (IEEE, ACM, Springer, etc.) with citation counts, venue info, TLDR |
20
+
21
+ **Do NOT duplicate arXiv's job.** If results contain an `externalIds.ArXiv` field, the paper is also on arXiv — note this but do not re-fetch from arXiv.
22
+
23
+ ## Constants
24
+
25
+ - **MAX_RESULTS = 10** — Default number of search results.
26
+ - **S2_FETCHER** — canonical name `semantic_scholar_fetch.py`, resolved per
27
+ [`shared-references/integration-contract.md`](../shared-references/integration-contract.md) §2
28
+ (Policy D1 — primary + fallback cascade). If unresolved (canonical
29
+ chain exhausted), fall back to the inline Python alternative
30
+ documented in Step 2.
31
+ - **DEFAULT_FILTERS** — For general research queries, apply these by default to reduce noise:
32
+ - `--fields-of-study "Computer Science,Engineering"`
33
+ - `--publication-types JournalArticle,Conference`
34
+
35
+ > Overrides (append to arguments):
36
+ > - `/semantic-scholar "topic" - max: 20` — return up to 20 results
37
+ > - `/semantic-scholar "topic" - type: journal` — only journal articles
38
+ > - `/semantic-scholar "topic" - type: conference` — only conference papers
39
+ > - `/semantic-scholar "topic" - min-citations: 50` — only highly-cited papers
40
+ > - `/semantic-scholar "topic" - year: 2022-` — papers from 2022 onward
41
+ > - `/semantic-scholar "topic" - fields: all` — remove default field-of-study filter
42
+ > - `/semantic-scholar "topic" - sort: citations` — bulk search sorted by citation count
43
+ > - `/semantic-scholar "DOI:10.1109/..."` — fetch a single paper by DOI
44
+
45
+ ## Workflow
46
+
47
+ ### Step 1: Parse Arguments
48
+
49
+ Parse `$ARGUMENTS` for directives:
50
+
51
+ - **Query or ID**: main search term, or a paper identifier:
52
+ - DOI: `10.1109/TWC.2024.1234567`
53
+ - Semantic Scholar ID: `f9314fd99be5f2b1b3efcfab87197d578160d553`
54
+ - ArXiv: `ARXIV:2006.10685`
55
+ - Corpus: `CorpusId:219792180`
56
+ - **`- max: N`**: override MAX_RESULTS
57
+ - **`- type: journal|conference|review|all`**: map to `--publication-types`
58
+ - **`- min-citations: N`**: map to `--min-citations`
59
+ - **`- year: RANGE`**: map to `--year` (e.g. `2022-`, `2020-2024`)
60
+ - **`- fields: FIELDS`**: override `--fields-of-study` (use `all` to remove filter)
61
+ - **`- sort: citations|date`**: use `search-bulk` with `--sort citationCount:desc` or `publicationDate:desc`
62
+
63
+ If the argument matches a DOI pattern (`10.XXXX/...`), a Semantic Scholar ID (40-char hex), or a prefixed ID (`ARXIV:...`, `CorpusId:...`), skip search and go directly to Step 3.
64
+
65
+ ### Step 2: Search Papers
66
+
67
+ Resolve `$S2_FETCHER` via the canonical strict-safe chain (see
68
+ [`shared-references/integration-contract.md`](../shared-references/integration-contract.md) §2):
69
+
70
+ ```bash
71
+ cd "$(git rev-parse --show-toplevel 2>/dev/null || pwd)" || exit 1
72
+ if [ -z "${ARIS_REPO:-}" ] && [ -f .aris/installed-skills.txt ]; then
73
+ ARIS_REPO=$(awk -F'\t' '$1=="repo_root"{print $2; exit}' .aris/installed-skills.txt 2>/dev/null) || true
74
+ fi
75
+ if [ -z "${ARIS_REPO:-}" ] && [ -f "$HOME/.aris/repo" ]; then
76
+ ARIS_REPO=$(cat "$HOME/.aris/repo" 2>/dev/null) || true
77
+ fi
78
+ S2_FETCHER=".aris/tools/semantic_scholar_fetch.py"
79
+ [ -f "$S2_FETCHER" ] || S2_FETCHER="tools/semantic_scholar_fetch.py"
80
+ [ -f "$S2_FETCHER" ] || { [ -n "${ARIS_REPO:-}" ] && S2_FETCHER="$ARIS_REPO/tools/semantic_scholar_fetch.py"; }
81
+ [ -f "$S2_FETCHER" ] || S2_FETCHER=""
82
+ ```
83
+
84
+ **Standard search** (default — relevance-ranked):
85
+
86
+ ```bash
87
+ python3 "$S2_FETCHER" search "QUERY" --max MAX_RESULTS \
88
+ --fields-of-study "Computer Science,Engineering" \
89
+ --publication-types JournalArticle,Conference
90
+ ```
91
+
92
+ **Bulk search** (when `- sort:` is specified, or MAX_RESULTS > 100):
93
+
94
+ ```bash
95
+ python3 "$S2_FETCHER" search-bulk "QUERY" --max MAX_RESULTS \
96
+ --sort citationCount:desc \
97
+ --fields-of-study "Computer Science" \
98
+ --year "2020-"
99
+ ```
100
+
101
+ If `$S2_FETCHER` is empty (Policy D1 cascade), fall back to inline Python using `urllib` against `https://api.semanticscholar.org/graph/v1/paper/search`.
102
+
103
+ **Recommended filter combos** (from testing):
104
+
105
+ | Goal | Flags |
106
+ |------|-------|
107
+ | High-quality journal papers | `--publication-types JournalArticle --min-citations 10` |
108
+ | CS/EE papers, recent | `--fields-of-study "Computer Science,Engineering" --year "2022-"` |
109
+ | Foundational / high-impact | `search-bulk --sort citationCount:desc --fields-of-study "Computer Science"` |
110
+ | Conference papers only | `--publication-types Conference` |
111
+
112
+ > **Note**: `--venue` requires exact venue names (e.g. "IEEE Transactions on Signal Processing"), not partial matches like "IEEE". Avoid using `--venue` in automated flows — prefer `--publication-types` + `--fields-of-study`.
113
+
114
+ ### Step 3: Fetch Details for a Specific Paper
115
+
116
+ When a single paper ID is requested:
117
+
118
+ ```bash
119
+ python3 "$S2_FETCHER" paper "PAPER_ID"
120
+ ```
121
+
122
+ Where PAPER_ID can be:
123
+ - DOI: `10.1109/TSP.2021.3071210`
124
+ - ArXiv: `ARXIV:2006.10685`
125
+ - CorpusId: `CorpusId:219792180`
126
+ - S2 ID: `f9314fd99be5f2b1b3efcfab87197d578160d553`
127
+
128
+ ### Step 4: De-duplicate Against arXiv
129
+
130
+ For each result, check `externalIds.ArXiv`:
131
+ - If present → paper is also on arXiv. Note this in output but do NOT re-fetch via `/arxiv`.
132
+ - If absent → paper is **venue-only** (e.g. IEEE without preprint). This is the unique value of this skill.
133
+
134
+ ### Step 5: Present Results
135
+
136
+ Present results as a table:
137
+
138
+ ```text
139
+ | # | Title | Venue | Year | Citations | Authors | Type |
140
+ |---|-------|-------|------|-----------|---------|------|
141
+ | 1 | Deep Learning Enabled... | IEEE Trans. Signal Process. | 2021 | 1364 | Xie et al. | Journal |
142
+ ```
143
+
144
+ For each paper, also show:
145
+ - **DOI link**: `https://doi.org/DOI` (for IEEE/ACM papers, this is the canonical link)
146
+ - **Open Access PDF**: if `openAccessPdf.url` is non-empty, show it
147
+ - **TLDR**: if available, show the one-line summary
148
+ - **Also on arXiv**: if `externalIds.ArXiv` exists, note the arXiv ID
149
+
150
+ ### Step 6: Detailed Summary
151
+
152
+ For each paper (or top 5 if many results):
153
+
154
+ ```markdown
155
+ ## [Title]
156
+
157
+ - **Venue**: [venue name] ([publicationVenue.type]: journal/conference)
158
+ - **Year**: [year] | **Citations**: [citationCount]
159
+ - **Authors**: [full author list]
160
+ - **DOI**: [doi link]
161
+ - **Fields**: [fieldsOfStudy]
162
+ - **TLDR**: [tldr.text if available]
163
+ - **Abstract**: [abstract]
164
+ - **Open Access**: [openAccessPdf.url or "Not available"]
165
+ - **Also on arXiv**: [ArXiv ID if exists, else "No"]
166
+ ```
167
+
168
+ ### Step 7: Update Research Wiki (if active)
169
+
170
+ **Required when `research-wiki/` exists in the project**; skip silently
171
+ otherwise. When the wiki dir exists, resolve `$WIKI_SCRIPT` per the
172
+ canonical chain at
173
+ [`shared-references/wiki-helper-resolution.md`](../shared-references/wiki-helper-resolution.md)
174
+ (Variant B — warn-and-skip). For results with an `externalIds.ArXiv`
175
+ field, use `--arxiv-id`; for venue-only papers (no arXiv mirror —
176
+ common for IEEE/ACM), fall back to manual metadata:
177
+
178
+ ```bash
179
+ if [ -d research-wiki/ ]; then
180
+ cd "$(git rev-parse --show-toplevel 2>/dev/null || pwd)" || exit 1
181
+ ARIS_REPO="${ARIS_REPO:-$(awk -F'\t' '$1=="repo_root"{print $2; exit}' .aris/installed-skills.txt 2>/dev/null)}"
182
+ if [ -z "${ARIS_REPO:-}" ] && [ -f "$HOME/.aris/repo" ]; then
183
+ ARIS_REPO=$(cat "$HOME/.aris/repo" 2>/dev/null) || true
184
+ fi
185
+ WIKI_SCRIPT=".aris/tools/research_wiki.py"
186
+ [ -f "$WIKI_SCRIPT" ] || WIKI_SCRIPT="tools/research_wiki.py"
187
+ [ -f "$WIKI_SCRIPT" ] || { [ -n "${ARIS_REPO:-}" ] && WIKI_SCRIPT="$ARIS_REPO/tools/research_wiki.py"; }
188
+ [ -f "$WIKI_SCRIPT" ] || {
189
+ echo "WARN: research_wiki.py not found; semantic-scholar results delivered, wiki ingest 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
190
+ WIKI_SCRIPT=""
191
+ }
192
+ [ -n "$WIKI_SCRIPT" ] && for each paper in results:
193
+ if paper.externalIds.ArXiv:
194
+ python3 "$WIKI_SCRIPT" ingest_paper research-wiki/ \
195
+ --arxiv-id "<ArXiv>"
196
+ else:
197
+ python3 "$WIKI_SCRIPT" ingest_paper research-wiki/ \
198
+ --title "<title>" --authors "<authors joined by , >" \
199
+ --year <year> --venue "<venue>" \
200
+ [--external-id-doi "<externalIds.DOI>"]
201
+ fi
202
+ ```
203
+
204
+ The helper handles slug / dedup / page / index / log — **do not
205
+ handwrite `papers/<slug>.md`**. See
206
+ [`shared-references/integration-contract.md`](../shared-references/integration-contract.md).
207
+ Backfill with `/research-wiki sync --arxiv-ids <id1>,<id2>,...` for
208
+ arXiv-available papers.
209
+
210
+ ### Step 8: Final Output
211
+
212
+ Summarize what was done:
213
+
214
+ - `Found N published papers for "query"`
215
+ - `Filters applied: [publication types, fields, year range, etc.]`
216
+ - `N papers are venue-only (not on arXiv)`
217
+ - `Wiki-ingested N papers` (if `research-wiki/` was present)
218
+
219
+ Suggest follow-up skills:
220
+
221
+ ```text
222
+ /arxiv "topic" - search arXiv preprints (complements this search)
223
+ /research-lit "topic" - multi-source review: Zotero + local PDFs + arXiv + S2
224
+ /novelty-check "idea" - verify novelty against literature
225
+ ```
226
+
227
+ ## Key Rules
228
+
229
+ - **Default to filtered search**: Always apply `--fields-of-study` and `--publication-types` unless user says `- fields: all`. Without filters, S2 returns cross-discipline noise (linguistics, psychology, etc.).
230
+ - **Citation count is gold**: S2's citation data is its main advantage over arXiv. Always show `citationCount` prominently and use it to rank/prioritize results.
231
+ - **Venue metadata matters**: Show `venue` and `publicationVenue.type` (journal vs conference) — this helps users assess paper quality.
232
+ - **DOI is the canonical ID for published papers**: Always show DOI links for IEEE/ACM/Springer papers.
233
+ - **Rate limiting**: S2 API without key is heavily rate-limited (~1 req/s, strict cooldown). If HTTP 429 occurs, wait and retry. Recommend users set `SEMANTIC_SCHOLAR_API_KEY` env var for higher limits (free at https://www.semanticscholar.org/product/api#api-key-form).
234
+ - **TLDR may be null**: Some publishers (notably IEEE) elide the TLDR field. Fall back to showing the first sentence of the abstract.
235
+ - **openAccessPdf may be empty**: Many IEEE papers are closed access. Always provide the DOI link as fallback.
236
+ - If the S2 API is unreachable, suggest using `/arxiv` or `/research-lit "topic" - sources: web` as fallback.
@@ -0,0 +1,335 @@
1
+ ---
2
+ name: serverless-modal
3
+ description: "Run GPU workloads on Modal — training, fine-tuning, inference, batch processing. Zero-config serverless: no SSH, no Docker, auto scale-to-zero. Use when user says \"modal run\", \"modal training\", \"modal inference\", \"deploy to modal\", \"need a GPU\", \"run on modal\", \"serverless GPU\", or needs remote GPU compute."
4
+ argument-hint: "[task-description]"
5
+ allowed-tools: Bash(*), Read, Grep, Glob, Edit, Write
6
+ ---
7
+
8
+ # Modal Cloud GPU — Training & Inference
9
+
10
+ Task: $ARGUMENTS
11
+
12
+ ## Overview
13
+
14
+ **Modal** is a serverless GPU cloud. Key advantages over SSH-based platforms (vast.ai, remote servers):
15
+ - **Zero config**: no SSH, no Docker, no port forwarding. Write Python → `modal run` → done.
16
+ - **Auto scale-to-zero**: billing stops the instant your code finishes. No idle instances.
17
+ - **Local-first**: run `modal run` from your laptop. Code, data, and results stay local; only the GPU function runs remotely.
18
+ - **Reproducible environments**: dependencies declared in code via `modal.Image`, not system-level packages.
19
+ Treat the `modal.Image` chain as the RENDERED form of the declarative env spec in
20
+ `../shared-references/compute-env-contract.md` — same spec fields (base, ordered
21
+ pip phases, env vars, smoke probes), same `env:<name>@<specHash>` ledger entry in
22
+ `.aris/compute/modal.md`, same three-tier validation before a long run.
23
+
24
+ **Best for**: Users without a local GPU who need to debug CUDA code, run small-scale tests, or iterate quickly on experiments. The $5 free tier (no card) is enough for code debugging; $30 (with card) covers most small-scale experiment runs.
25
+
26
+ **Trade-off**: Modal costs more per GPU-hour than vast.ai or Lightning for some GPU tiers, but eliminates setup time and idle billing, often making it cheaper for short/medium workloads. For long training runs (>4 hours), consider vast.ai for lower $/hr.
27
+
28
+ ## Authentication
29
+
30
+ ```bash
31
+ pip install modal
32
+ modal setup # Opens browser login, writes token to ~/.modal.toml
33
+ # Verify:
34
+ modal run -q 'print("ok")'
35
+ ```
36
+
37
+ - Sign up: https://modal.com (GitHub/Google login)
38
+ - Free (no card): **$5/month** — enough for quick tests
39
+ - Free (with card): **$30/month** — bind a payment method at https://modal.com/settings for the full free tier. Set a **workspace spending limit** to prevent accidental overcharge (Settings → Usage → Spending Limit)
40
+ - Academic: apply for $10k credits | Startups: apply for $25k credits
41
+ - Secrets: `modal secret create huggingface-secret HF_TOKEN=hf_xxxxx`
42
+
43
+ > **Recommended setup**: Bind a card to unlock $30/month, then immediately set a spending limit (e.g., $30) so you never exceed the free tier. Modal will pause your workloads when the limit is hit.
44
+ >
45
+ > **SECURITY WARNING**: Always bind your card and set spending limits directly on https://modal.com/settings in your browser. NEVER enter payment information, card numbers, or billing details through Claude Code or any CLI tool. Only the official Modal website is safe for payment operations.
46
+
47
+ ## Pricing (source: modal.com/pricing, per-second billing)
48
+
49
+ | GPU | $/sec | ≈$/hr | VRAM | Bandwidth GB/s | Free budget → hours |
50
+ |---|---|---|---|---|---|
51
+ | T4 | $0.000164 | $0.59 | 16GB | 300 | ~8.5 hr ($5) / 50.8 hr ($30) |
52
+ | L4 | $0.000222 | $0.80 | 24GB | 300 | ~6.3 hr / 37.5 hr |
53
+ | A10 | $0.000306 | $1.10 | 24GB | 600 | ~4.5 hr / 27.3 hr |
54
+ | L40S | $0.000542 | $1.95 | 48GB | 864 | ~2.6 hr / 15.4 hr |
55
+ | A100-40GB | $0.000583 | $2.10 | 40GB | 1555 | ~2.4 hr / 14.3 hr |
56
+ | A100-80GB | $0.000694 | $2.50 | 80GB | 2039 | ~2.0 hr / 12.0 hr |
57
+ | H100 | $0.001097 | $3.95 | 80GB | 3352 | ~1.3 hr / 7.6 hr |
58
+ | H200 | $0.001261 | $4.54 | 141GB | 4800 | ~1.1 hr / 6.6 hr |
59
+ | B200 | $0.001736 | $6.25 | 192GB | 8000 | ~0.8 hr / 4.8 hr |
60
+
61
+ CPU: $0.047/core/hr | RAM: $0.008/GiB/hr (GPU typically 90%+ of total cost)
62
+
63
+ ## !! Cost Estimation Required !!
64
+
65
+ Before EVERY run, estimate cost and show to user for confirmation.
66
+
67
+ Key insights:
68
+ - Inference bottleneck is **memory bandwidth**, not compute → high-bandwidth GPUs are often cheaper overall
69
+ - 7-8B BF16 inference needs **~22GB VRAM** (weights 15G + KV cache 1G + overhead), T4 (16GB) insufficient
70
+ - H100 is often **cheaper than L4** for benchmarks (11x faster but only 5x more expensive)
71
+
72
+ ### Cost Estimation Template (required before every run)
73
+
74
+ ```
75
+ Cost estimate (Modal):
76
+ Model: [name] ([params], [precision])
77
+ VRAM: ~[X]GB (weights + KV cache + overhead)
78
+ GPU: [type] ([VRAM]GB, $[X]/sec = $[X]/hr, bandwidth [X] GB/s)
79
+ Estimate: ~[N] min, ~$[X]
80
+ ```
81
+
82
+ ### 7-8B BF16 Benchmark Cost Comparison
83
+
84
+ | GPU | Speed tok/s | $/hr | 1000 samples x 200tok cost | Duration |
85
+ |---|---|---|---|---|
86
+ | **H100** | **224** | $3.95 | **$0.98** | **15 min** |
87
+ | A100-40GB | 104 | $2.10 | $1.12 | 32 min |
88
+ | L4 | 20 | $0.80 | $2.22 | 167 min |
89
+
90
+ ## Workflow
91
+
92
+ ### Step 1: Analyze Task → Estimate Cost → Choose GPU
93
+
94
+ Same analysis as any GPU skill — determine VRAM needs from model size, pick GPU, estimate hours, calculate cost. See pricing table above.
95
+
96
+ **VRAM Rules of Thumb:**
97
+ | Model Size | FP16 VRAM | Recommended GPU |
98
+ |---|---|---|
99
+ | ≤3B | ~8GB | T4, L4 |
100
+ | 7-8B | ~22GB | L4, A10, A100-40GB |
101
+ | 13B | ~30GB | L40S, A100-40GB |
102
+ | 30B | ~65GB | A100-80GB, H100 |
103
+ | 70B | ~140GB | H100:2, H200 |
104
+
105
+ ### Step 2: Generate Modal Launcher
106
+
107
+ Based on the task type, generate the appropriate launcher script.
108
+
109
+ #### Pattern A: One-Shot GPU Function (training, evaluation, benchmark)
110
+
111
+ The most common pattern for `run-experiment` integration. Wraps an existing training script:
112
+
113
+ ```python
114
+ import modal
115
+
116
+ app = modal.App("experiment-name")
117
+ # One .pip_install() call per SPEC PHASE (chained calls install in order, so a
118
+ # pinned torch in the first call can't be dragged by packages in the second —
119
+ # the rendered form of compute-env-contract.md's ordered pip_phases):
120
+ image = (
121
+ modal.Image.debian_slim(python_version="3.11")
122
+ .pip_install("torch") # phase 1: pins
123
+ .pip_install("transformers", "accelerate", "datasets", "wandb") # phase 2
124
+ )
125
+
126
+ # Mount local project code into the container
127
+ local_code = modal.Mount.from_local_dir(".", remote_path="/workspace")
128
+ # Persistent volume for checkpoints and results
129
+ volume = modal.Volume.from_name("experiment-results", create_if_missing=True)
130
+
131
+ @app.function(
132
+ image=image,
133
+ gpu="A100-80GB", # Chosen based on Step 1 analysis
134
+ mounts=[local_code],
135
+ volumes={"/results": volume},
136
+ timeout=3600 * 6, # 6 hours max
137
+ secrets=[modal.Secret.from_name("wandb-secret")], # Optional
138
+ )
139
+ def train():
140
+ import subprocess
141
+ subprocess.run(
142
+ ["python", "train.py", "--output_dir", "/results/run_001"],
143
+ cwd="/workspace",
144
+ check=True,
145
+ )
146
+ volume.commit() # Persist results to volume
147
+
148
+ @app.local_entrypoint()
149
+ def main():
150
+ train.remote()
151
+ print("Training complete. Results saved to Modal volume 'experiment-results'.")
152
+ ```
153
+
154
+ Run: `modal run launcher.py`
155
+
156
+ #### Pattern B: Web API (persistent inference service)
157
+
158
+ ```python
159
+ import modal
160
+
161
+ app = modal.App("inference-api")
162
+ image = (
163
+ modal.Image.debian_slim(python_version="3.11")
164
+ .pip_install("torch") # phase 1: pins
165
+ .pip_install("transformers", "accelerate") # phase 2
166
+ )
167
+
168
+ @app.cls(image=image, gpu="L40S")
169
+ @modal.concurrent(max_inputs=10)
170
+ class InferenceAPI:
171
+ @modal.enter()
172
+ def load_model(self):
173
+ from transformers import AutoModelForCausalLM, AutoTokenizer
174
+ self.tokenizer = AutoTokenizer.from_pretrained("meta-llama/Llama-3.2-1B")
175
+ self.model = AutoModelForCausalLM.from_pretrained(
176
+ "meta-llama/Llama-3.2-1B", device_map="auto"
177
+ )
178
+
179
+ @modal.fastapi_endpoint(method="POST")
180
+ def generate(self, request: dict):
181
+ inputs = self.tokenizer(request.get("prompt", ""), return_tensors="pt").to("cuda")
182
+ outputs = self.model.generate(**inputs, max_new_tokens=256)
183
+ return {"text": self.tokenizer.decode(outputs[0], skip_special_tokens=True)}
184
+ ```
185
+
186
+ Deploy: `modal deploy app.py`
187
+
188
+ #### Pattern C: vLLM High-Performance Inference
189
+
190
+ ```python
191
+ import modal, subprocess
192
+
193
+ app = modal.App("vllm-server")
194
+ image = modal.Image.debian_slim(python_version="3.11").pip_install("vllm")
195
+ VOLUME = modal.Volume.from_name("model-cache", create_if_missing=True)
196
+ MODEL = "Qwen/Qwen3-4B"
197
+
198
+ @app.function(image=image, gpu="H100", volumes={"/models": VOLUME}, timeout=3600)
199
+ @modal.concurrent(max_inputs=100)
200
+ @modal.web_server(port=8000)
201
+ def serve():
202
+ subprocess.Popen(["python", "-m", "vllm.entrypoints.openai.api_server",
203
+ "--model", MODEL, "--download-dir", "/models", "--port", "8000"])
204
+ ```
205
+
206
+ #### Pattern D: Batch Parallel (map over dataset)
207
+
208
+ ```python
209
+ @app.function(image=image, gpu="T4", timeout=600)
210
+ def process_item(item: dict) -> dict:
211
+ # ... process one item ...
212
+ return {"result": "processed"}
213
+
214
+ @app.local_entrypoint()
215
+ def main():
216
+ results = list(process_item.map([{"id": i} for i in range(1000)]))
217
+ ```
218
+
219
+ #### Pattern E: LoRA Fine-Tuning
220
+
221
+ ```python
222
+ @app.function(
223
+ image=image, gpu="A100-80GB", volumes={"/output": volume},
224
+ timeout=3600 * 6, secrets=[modal.Secret.from_name("huggingface-secret")],
225
+ )
226
+ def train():
227
+ # ... transformers + peft + trl training code ...
228
+ trainer.save_model("/output/final")
229
+ volume.commit()
230
+ ```
231
+
232
+ #### Pattern F: Multi-GPU Distributed Training
233
+
234
+ ```python
235
+ @app.function(image=image, gpu="H100:4", volumes={"/output": volume}, timeout=3600 * 12)
236
+ def train_distributed():
237
+ import subprocess
238
+ subprocess.run(["accelerate", "launch", "--num_processes", "4",
239
+ "--mixed_precision", "bf16", "train.py"], check=True)
240
+ ```
241
+
242
+ ### Step 3: Run
243
+
244
+ ```bash
245
+ modal run launcher.py # One-shot execution (most common for experiments)
246
+ modal deploy app.py # Persistent service deployment
247
+ ```
248
+
249
+ ### Step 4: Verify & Monitor
250
+
251
+ ```bash
252
+ modal app list # List running apps
253
+ modal app logs <app-name> # Stream logs
254
+ ```
255
+
256
+ ### Step 5: Collect Results
257
+
258
+ Results collection depends on the pattern used:
259
+
260
+ **Volume-based** (recommended for training):
261
+ ```python
262
+ # Download results from volume after run completes
263
+ # Option A: In the launcher script, copy results to local mount before exit
264
+ # Option B: Use modal volume commands
265
+ modal volume ls experiment-results
266
+ modal volume get experiment-results /run_001/results.json ./results/
267
+ ```
268
+
269
+ **Stdout/return-based** (for evaluation/benchmarks):
270
+ Results are printed to terminal or returned from the function — already local.
271
+
272
+ ### Step 6: Cleanup
273
+
274
+ Modal auto-scales to zero — no manual instance destruction needed. But clean up unused resources:
275
+
276
+ ```bash
277
+ modal app stop <app-name> # Stop a deployed service
278
+ modal volume rm <volume-name> # Delete a volume when done
279
+ ```
280
+
281
+ ## CLI Reference
282
+
283
+ ```bash
284
+ modal run app.py # Run once
285
+ modal deploy app.py # Deploy persistent service
286
+ modal app logs <app> # View logs
287
+ modal app list # List apps
288
+ modal app stop <app> # Stop
289
+ modal volume ls # List volumes
290
+ modal volume get <vol> <remote> <local> # Download from volume
291
+ modal secret create NAME KEY=VALUE # Create secret
292
+ ```
293
+
294
+ ## Key Tips
295
+
296
+ - GPU fallback: `gpu=["H100", "A100-80GB", "L40S"]` — Modal tries each in order
297
+ - Multi-GPU: `gpu="H100:4"` (up to 8 GPUs, cost scales linearly)
298
+ - Volume: `modal.Volume.from_name("x", create_if_missing=True)` for persistent storage
299
+ - `@modal.enter()` loads model once per container | `@modal.concurrent()` for concurrent requests
300
+ - Long training: set `timeout=3600 * N` (default is 5 min)
301
+ - Local code: `modal.Mount.from_local_dir(".", remote_path="/workspace")`
302
+ - W&B integration: `secrets=[modal.Secret.from_name("wandb-secret")]` + `wandb.init()` in your script
303
+
304
+ ## Composing with Other Skills
305
+
306
+ ```
307
+ /run-experiment "train model" <- detects gpu: modal, calls /serverless-modal
308
+ -> /serverless-modal <- analyzes task, generates launcher, runs
309
+ -> Results returned locally or to Modal Volume
310
+ -> No destroy step needed (auto scale-to-zero)
311
+
312
+ /serverless-modal <- standalone: any Modal GPU workload
313
+ /serverless-modal "deploy vLLM" <- inference service deployment
314
+ ```
315
+
316
+ ## CLAUDE.md Example
317
+
318
+ ```markdown
319
+ ## Modal
320
+ - gpu: modal # tells run-experiment to use Modal serverless
321
+ - modal_gpu: A100-80GB # optional: override GPU selection (default: auto-select)
322
+ - modal_timeout: 21600 # optional: max seconds (default: 6 hours)
323
+ - modal_volume: my-results # optional: named volume for results persistence
324
+ ```
325
+
326
+ No SSH keys, no Docker images, no instance management needed. Just `pip install modal && modal setup`.
327
+
328
+ > **Cost protection**: After `modal setup`, go to https://modal.com/settings in your browser (NEVER through CLI) → bind a payment method to unlock $30/month free tier (without card: only $5/month). Then set a **workspace spending limit** equal to your free tier amount — Modal will auto-pause workloads when the limit is reached, preventing any surprise charges.
329
+
330
+ ## Documentation
331
+
332
+ - Docs: https://modal.com/docs/guide
333
+ - GPU: https://modal.com/docs/guide/gpu
334
+ - Pricing: https://modal.com/pricing
335
+ - Examples: https://modal.com/docs/examples