@r1z4x/tezgah 1.0.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 (582) hide show
  1. package/CHANGELOG.md +738 -0
  2. package/LICENSE +21 -0
  3. package/MANIFEST +753 -0
  4. package/README.de.md +169 -0
  5. package/README.es.md +168 -0
  6. package/README.fr.md +166 -0
  7. package/README.md +161 -0
  8. package/README.tr.md +163 -0
  9. package/agents/tezgah-reviewer.md +70 -0
  10. package/bin/codegen +337 -0
  11. package/bin/consult +797 -0
  12. package/bin/tezgah-adhd +50 -0
  13. package/bin/tezgah-agents +45 -0
  14. package/bin/tezgah-capture +66 -0
  15. package/bin/tezgah-context +96 -0
  16. package/bin/tezgah-decisions +213 -0
  17. package/bin/tezgah-design +953 -0
  18. package/bin/tezgah-docs +1199 -0
  19. package/bin/tezgah-doctor +497 -0
  20. package/bin/tezgah-dsh +37 -0
  21. package/bin/tezgah-dsh.cmd +70 -0
  22. package/bin/tezgah-gate +75 -0
  23. package/bin/tezgah-import-ai-research +439 -0
  24. package/bin/tezgah-index +32 -0
  25. package/bin/tezgah-lessons +148 -0
  26. package/bin/tezgah-mcp +322 -0
  27. package/bin/tezgah-migrate +324 -0
  28. package/bin/tezgah-pony +50 -0
  29. package/bin/tezgah-research +772 -0
  30. package/bin/tezgah-rollback +93 -0
  31. package/bin/tezgah-route +124 -0
  32. package/bin/tezgah-setup +5798 -0
  33. package/bin/tezgah-status +383 -0
  34. package/bin/tezgah-task +607 -0
  35. package/bin/tezgah-taste +423 -0
  36. package/bin/tezgah-triage +485 -0
  37. package/bin/tezgah.js +36 -0
  38. package/commands/adhd.md +21 -0
  39. package/commands/ponytail.md +21 -0
  40. package/docs/README.md +112 -0
  41. package/docs/architecture.md +226 -0
  42. package/docs/citations-baseline.json +59 -0
  43. package/docs/clarity-baseline.json +116 -0
  44. package/docs/contract.md +416 -0
  45. package/docs/environment.md +141 -0
  46. package/docs/evidence.md +831 -0
  47. package/docs/feature-audit.md +139 -0
  48. package/docs/gate.md +407 -0
  49. package/docs/glossary.md +201 -0
  50. package/docs/hosts.md +400 -0
  51. package/docs/index.json +471 -0
  52. package/docs/judge.md +193 -0
  53. package/docs/layers.md +189 -0
  54. package/docs/models.md +160 -0
  55. package/docs/operations.md +666 -0
  56. package/docs/research.md +809 -0
  57. package/docs/results/paired-outcome-2026-10.jsonl +254 -0
  58. package/docs/results/paired-outcome-2026-10.md +204 -0
  59. package/docs/skills.md +236 -0
  60. package/docs/status-line.md +315 -0
  61. package/docs/testing.md +287 -0
  62. package/docs/vision.md +117 -0
  63. package/hooks/hooks.json +33 -0
  64. package/hooks/projects-auto-init.py +98 -0
  65. package/hooks/projects-posttooluse.py +149 -0
  66. package/hooks/projects-pretooluse.py +40 -0
  67. package/hooks/projects-stop.py +60 -0
  68. package/hooks/tezgah_agents.py +817 -0
  69. package/hooks/tezgah_apps.py +266 -0
  70. package/hooks/tezgah_attest.py +255 -0
  71. package/hooks/tezgah_clarity.py +171 -0
  72. package/hooks/tezgah_components.py +140 -0
  73. package/hooks/tezgah_context.py +2953 -0
  74. package/hooks/tezgah_embed.py +765 -0
  75. package/hooks/tezgah_gate.py +2736 -0
  76. package/hooks/tezgah_guard.py +177 -0
  77. package/hooks/tezgah_index.py +124 -0
  78. package/hooks/tezgah_integrity.py +5141 -0
  79. package/hooks/tezgah_judge.py +487 -0
  80. package/hooks/tezgah_lang.py +230 -0
  81. package/hooks/tezgah_lessons.py +210 -0
  82. package/hooks/tezgah_models.py +855 -0
  83. package/hooks/tezgah_paths.py +1132 -0
  84. package/hooks/tezgah_policy.py +1039 -0
  85. package/hooks/tezgah_rank.py +77 -0
  86. package/hooks/tezgah_replay.py +1109 -0
  87. package/hooks/tezgah_research.py +5176 -0
  88. package/hooks/tezgah_shapes.py +305 -0
  89. package/hooks/tezgah_skill_pick.py +227 -0
  90. package/hooks/tezgah_snapshot.py +490 -0
  91. package/hooks/tezgah_stopspec.py +320 -0
  92. package/hooks/tezgah_task.py +458 -0
  93. package/hooks/tezgah_taste.py +201 -0
  94. package/hooks/tezgah_untrusted.py +112 -0
  95. package/hooks/tezgah_update.py +430 -0
  96. package/hosts/codex/hook.py +268 -0
  97. package/hosts/codex/hooks.json +26 -0
  98. package/hosts/cursor/hook.py +461 -0
  99. package/hosts/cursor/hooks.json +44 -0
  100. package/hosts/dsh/hooks.json +21 -0
  101. package/hosts/dsh/statusline/lib/client.js +138 -0
  102. package/hosts/dsh/statusline/lib/index.js +104 -0
  103. package/hosts/dsh/statusline/package.json +28 -0
  104. package/hosts/omp/hook.py +277 -0
  105. package/hosts/omp/tezgah-hook.ts.in +701 -0
  106. package/hosts/opencode/plugins/tezgah.js +2742 -0
  107. package/hosts/opencode/tui/tezgah-tui.tsx +151 -0
  108. package/output-styles/tezgah.md +142 -0
  109. package/package.json +32 -0
  110. package/packaging/build.sh +342 -0
  111. package/packaging/install.ps1 +166 -0
  112. package/packaging/install.sh +56 -0
  113. package/packaging/upgrade.sh +142 -0
  114. package/skills/ai-research/0-autoresearch-skill/SKILL.md +411 -0
  115. package/skills/ai-research/0-autoresearch-skill/references/agent-continuity.md +95 -0
  116. package/skills/ai-research/0-autoresearch-skill/references/progress-reporting.md +166 -0
  117. package/skills/ai-research/0-autoresearch-skill/references/skill-routing.md +219 -0
  118. package/skills/ai-research/0-autoresearch-skill/templates/findings.md +44 -0
  119. package/skills/ai-research/0-autoresearch-skill/templates/research-log.md +41 -0
  120. package/skills/ai-research/01-model-architecture/litgpt/SKILL.md +469 -0
  121. package/skills/ai-research/01-model-architecture/litgpt/references/custom-models.md +569 -0
  122. package/skills/ai-research/01-model-architecture/litgpt/references/distributed-training.md +452 -0
  123. package/skills/ai-research/01-model-architecture/litgpt/references/supported-models.md +337 -0
  124. package/skills/ai-research/01-model-architecture/litgpt/references/training-recipes.md +620 -0
  125. package/skills/ai-research/01-model-architecture/mamba/SKILL.md +260 -0
  126. package/skills/ai-research/01-model-architecture/mamba/references/architecture-details.md +207 -0
  127. package/skills/ai-research/01-model-architecture/mamba/references/benchmarks.md +256 -0
  128. package/skills/ai-research/01-model-architecture/mamba/references/training-guide.md +389 -0
  129. package/skills/ai-research/01-model-architecture/nanogpt/SKILL.md +290 -0
  130. package/skills/ai-research/01-model-architecture/nanogpt/references/architecture.md +383 -0
  131. package/skills/ai-research/01-model-architecture/nanogpt/references/data.md +477 -0
  132. package/skills/ai-research/01-model-architecture/nanogpt/references/training.md +565 -0
  133. package/skills/ai-research/01-model-architecture/rwkv/SKILL.md +260 -0
  134. package/skills/ai-research/01-model-architecture/rwkv/references/architecture-details.md +345 -0
  135. package/skills/ai-research/01-model-architecture/rwkv/references/rwkv7.md +387 -0
  136. package/skills/ai-research/01-model-architecture/rwkv/references/state-management.md +370 -0
  137. package/skills/ai-research/01-model-architecture/torchtitan/SKILL.md +358 -0
  138. package/skills/ai-research/01-model-architecture/torchtitan/references/checkpoint.md +182 -0
  139. package/skills/ai-research/01-model-architecture/torchtitan/references/custom-models.md +259 -0
  140. package/skills/ai-research/01-model-architecture/torchtitan/references/float8.md +134 -0
  141. package/skills/ai-research/01-model-architecture/torchtitan/references/fsdp.md +127 -0
  142. package/skills/ai-research/02-tokenization/huggingface-tokenizers/SKILL.md +516 -0
  143. package/skills/ai-research/02-tokenization/huggingface-tokenizers/references/algorithms.md +654 -0
  144. package/skills/ai-research/02-tokenization/huggingface-tokenizers/references/integration.md +638 -0
  145. package/skills/ai-research/02-tokenization/huggingface-tokenizers/references/pipeline.md +724 -0
  146. package/skills/ai-research/02-tokenization/huggingface-tokenizers/references/training.md +566 -0
  147. package/skills/ai-research/02-tokenization/sentencepiece/SKILL.md +235 -0
  148. package/skills/ai-research/02-tokenization/sentencepiece/references/algorithms.md +201 -0
  149. package/skills/ai-research/02-tokenization/sentencepiece/references/training.md +305 -0
  150. package/skills/ai-research/03-fine-tuning/axolotl/SKILL.md +158 -0
  151. package/skills/ai-research/03-fine-tuning/axolotl/references/api.md +5549 -0
  152. package/skills/ai-research/03-fine-tuning/axolotl/references/dataset-formats.md +1030 -0
  153. package/skills/ai-research/03-fine-tuning/axolotl/references/index.md +16 -0
  154. package/skills/ai-research/03-fine-tuning/axolotl/references/other.md +3564 -0
  155. package/skills/ai-research/03-fine-tuning/llama-factory/SKILL.md +80 -0
  156. package/skills/ai-research/03-fine-tuning/llama-factory/references/_images.md +24 -0
  157. package/skills/ai-research/03-fine-tuning/llama-factory/references/advanced.md +1056 -0
  158. package/skills/ai-research/03-fine-tuning/llama-factory/references/getting_started.md +350 -0
  159. package/skills/ai-research/03-fine-tuning/llama-factory/references/index.md +20 -0
  160. package/skills/ai-research/03-fine-tuning/llama-factory/references/other.md +32 -0
  161. package/skills/ai-research/03-fine-tuning/peft/SKILL.md +431 -0
  162. package/skills/ai-research/03-fine-tuning/peft/references/advanced-usage.md +515 -0
  163. package/skills/ai-research/03-fine-tuning/peft/references/troubleshooting.md +481 -0
  164. package/skills/ai-research/03-fine-tuning/unsloth/SKILL.md +80 -0
  165. package/skills/ai-research/03-fine-tuning/unsloth/references/index.md +8 -0
  166. package/skills/ai-research/03-fine-tuning/unsloth/references/llms.md +83 -0
  167. package/skills/ai-research/04-mechanistic-interpretability/nnsight/SKILL.md +436 -0
  168. package/skills/ai-research/04-mechanistic-interpretability/nnsight/references/README.md +79 -0
  169. package/skills/ai-research/04-mechanistic-interpretability/nnsight/references/api.md +345 -0
  170. package/skills/ai-research/04-mechanistic-interpretability/nnsight/references/tutorials.md +301 -0
  171. package/skills/ai-research/04-mechanistic-interpretability/pyvene/SKILL.md +473 -0
  172. package/skills/ai-research/04-mechanistic-interpretability/pyvene/references/README.md +74 -0
  173. package/skills/ai-research/04-mechanistic-interpretability/pyvene/references/api.md +384 -0
  174. package/skills/ai-research/04-mechanistic-interpretability/pyvene/references/tutorials.md +377 -0
  175. package/skills/ai-research/04-mechanistic-interpretability/saelens/SKILL.md +386 -0
  176. package/skills/ai-research/04-mechanistic-interpretability/saelens/references/README.md +71 -0
  177. package/skills/ai-research/04-mechanistic-interpretability/saelens/references/api.md +334 -0
  178. package/skills/ai-research/04-mechanistic-interpretability/saelens/references/tutorials.md +319 -0
  179. package/skills/ai-research/04-mechanistic-interpretability/transformer-lens/SKILL.md +346 -0
  180. package/skills/ai-research/04-mechanistic-interpretability/transformer-lens/references/README.md +55 -0
  181. package/skills/ai-research/04-mechanistic-interpretability/transformer-lens/references/api.md +363 -0
  182. package/skills/ai-research/04-mechanistic-interpretability/transformer-lens/references/tutorials.md +340 -0
  183. package/skills/ai-research/05-data-processing/nemo-curator/SKILL.md +383 -0
  184. package/skills/ai-research/05-data-processing/nemo-curator/references/deduplication.md +88 -0
  185. package/skills/ai-research/05-data-processing/nemo-curator/references/filtering.md +103 -0
  186. package/skills/ai-research/05-data-processing/ray-data/SKILL.md +326 -0
  187. package/skills/ai-research/05-data-processing/ray-data/references/integration.md +83 -0
  188. package/skills/ai-research/05-data-processing/ray-data/references/transformations.md +84 -0
  189. package/skills/ai-research/06-post-training/grpo-rl-training/README.md +98 -0
  190. package/skills/ai-research/06-post-training/grpo-rl-training/SKILL.md +572 -0
  191. package/skills/ai-research/06-post-training/miles/SKILL.md +315 -0
  192. package/skills/ai-research/06-post-training/miles/references/api-reference.md +142 -0
  193. package/skills/ai-research/06-post-training/miles/references/troubleshooting.md +353 -0
  194. package/skills/ai-research/06-post-training/openrlhf/SKILL.md +249 -0
  195. package/skills/ai-research/06-post-training/openrlhf/references/algorithm-comparison.md +405 -0
  196. package/skills/ai-research/06-post-training/openrlhf/references/custom-rewards.md +531 -0
  197. package/skills/ai-research/06-post-training/openrlhf/references/hybrid-engine.md +288 -0
  198. package/skills/ai-research/06-post-training/openrlhf/references/multi-node-training.md +455 -0
  199. package/skills/ai-research/06-post-training/simpo/SKILL.md +219 -0
  200. package/skills/ai-research/06-post-training/simpo/references/datasets.md +479 -0
  201. package/skills/ai-research/06-post-training/simpo/references/hyperparameters.md +453 -0
  202. package/skills/ai-research/06-post-training/simpo/references/loss-functions.md +351 -0
  203. package/skills/ai-research/06-post-training/slime/SKILL.md +464 -0
  204. package/skills/ai-research/06-post-training/slime/references/api-reference.md +393 -0
  205. package/skills/ai-research/06-post-training/slime/references/troubleshooting.md +387 -0
  206. package/skills/ai-research/06-post-training/torchforge/SKILL.md +433 -0
  207. package/skills/ai-research/06-post-training/torchforge/references/api-reference.md +328 -0
  208. package/skills/ai-research/06-post-training/torchforge/references/troubleshooting.md +410 -0
  209. package/skills/ai-research/06-post-training/trl-fine-tuning/SKILL.md +455 -0
  210. package/skills/ai-research/06-post-training/trl-fine-tuning/references/dpo-variants.md +228 -0
  211. package/skills/ai-research/06-post-training/trl-fine-tuning/references/online-rl.md +83 -0
  212. package/skills/ai-research/06-post-training/trl-fine-tuning/references/reward-modeling.md +123 -0
  213. package/skills/ai-research/06-post-training/trl-fine-tuning/references/sft-training.md +169 -0
  214. package/skills/ai-research/06-post-training/verl/SKILL.md +391 -0
  215. package/skills/ai-research/06-post-training/verl/references/api-reference.md +302 -0
  216. package/skills/ai-research/06-post-training/verl/references/troubleshooting.md +392 -0
  217. package/skills/ai-research/07-safety-alignment/constitutional-ai/SKILL.md +290 -0
  218. package/skills/ai-research/07-safety-alignment/llamaguard/SKILL.md +337 -0
  219. package/skills/ai-research/07-safety-alignment/nemo-guardrails/SKILL.md +297 -0
  220. package/skills/ai-research/07-safety-alignment/prompt-guard/SKILL.md +312 -0
  221. package/skills/ai-research/08-distributed-training/accelerate/SKILL.md +332 -0
  222. package/skills/ai-research/08-distributed-training/accelerate/references/custom-plugins.md +454 -0
  223. package/skills/ai-research/08-distributed-training/accelerate/references/megatron-integration.md +490 -0
  224. package/skills/ai-research/08-distributed-training/accelerate/references/performance.md +526 -0
  225. package/skills/ai-research/08-distributed-training/deepspeed/SKILL.md +141 -0
  226. package/skills/ai-research/08-distributed-training/deepspeed/references/08.md +18 -0
  227. package/skills/ai-research/08-distributed-training/deepspeed/references/09.md +174 -0
  228. package/skills/ai-research/08-distributed-training/deepspeed/references/2020.md +379 -0
  229. package/skills/ai-research/08-distributed-training/deepspeed/references/2023.md +280 -0
  230. package/skills/ai-research/08-distributed-training/deepspeed/references/assets.md +180 -0
  231. package/skills/ai-research/08-distributed-training/deepspeed/references/index.md +36 -0
  232. package/skills/ai-research/08-distributed-training/deepspeed/references/mii.md +119 -0
  233. package/skills/ai-research/08-distributed-training/deepspeed/references/other.md +1192 -0
  234. package/skills/ai-research/08-distributed-training/megatron-core/SKILL.md +366 -0
  235. package/skills/ai-research/08-distributed-training/megatron-core/references/benchmarks.md +250 -0
  236. package/skills/ai-research/08-distributed-training/megatron-core/references/parallelism-guide.md +405 -0
  237. package/skills/ai-research/08-distributed-training/megatron-core/references/production-examples.md +474 -0
  238. package/skills/ai-research/08-distributed-training/megatron-core/references/training-recipes.md +548 -0
  239. package/skills/ai-research/08-distributed-training/pytorch-fsdp2/SKILL.md +231 -0
  240. package/skills/ai-research/08-distributed-training/pytorch-fsdp2/references/pytorch_dcp_async_recipe.md +14 -0
  241. package/skills/ai-research/08-distributed-training/pytorch-fsdp2/references/pytorch_dcp_overview.md +19 -0
  242. package/skills/ai-research/08-distributed-training/pytorch-fsdp2/references/pytorch_dcp_recipe.md +18 -0
  243. package/skills/ai-research/08-distributed-training/pytorch-fsdp2/references/pytorch_ddp_notes.md +10 -0
  244. package/skills/ai-research/08-distributed-training/pytorch-fsdp2/references/pytorch_device_mesh_tutorial.md +22 -0
  245. package/skills/ai-research/08-distributed-training/pytorch-fsdp2/references/pytorch_examples_fsdp2.md +15 -0
  246. package/skills/ai-research/08-distributed-training/pytorch-fsdp2/references/pytorch_fsdp1_api.md +9 -0
  247. package/skills/ai-research/08-distributed-training/pytorch-fsdp2/references/pytorch_fsdp2_tutorial.md +45 -0
  248. package/skills/ai-research/08-distributed-training/pytorch-fsdp2/references/pytorch_fully_shard_api.md +49 -0
  249. package/skills/ai-research/08-distributed-training/pytorch-fsdp2/references/pytorch_tp_tutorial.md +22 -0
  250. package/skills/ai-research/08-distributed-training/pytorch-fsdp2/references/ray_train_fsdp2_example.md +13 -0
  251. package/skills/ai-research/08-distributed-training/pytorch-fsdp2/references/torchtitan_fsdp_notes.md +14 -0
  252. package/skills/ai-research/08-distributed-training/pytorch-lightning/SKILL.md +346 -0
  253. package/skills/ai-research/08-distributed-training/pytorch-lightning/references/callbacks.md +437 -0
  254. package/skills/ai-research/08-distributed-training/pytorch-lightning/references/distributed.md +491 -0
  255. package/skills/ai-research/08-distributed-training/pytorch-lightning/references/hyperparameter-tuning.md +557 -0
  256. package/skills/ai-research/08-distributed-training/ray-train/SKILL.md +406 -0
  257. package/skills/ai-research/08-distributed-training/ray-train/references/multi-node.md +629 -0
  258. package/skills/ai-research/09-infrastructure/lambda-labs/SKILL.md +545 -0
  259. package/skills/ai-research/09-infrastructure/lambda-labs/references/advanced-usage.md +612 -0
  260. package/skills/ai-research/09-infrastructure/lambda-labs/references/troubleshooting.md +531 -0
  261. package/skills/ai-research/09-infrastructure/modal/SKILL.md +341 -0
  262. package/skills/ai-research/09-infrastructure/modal/references/advanced-usage.md +504 -0
  263. package/skills/ai-research/09-infrastructure/modal/references/troubleshooting.md +495 -0
  264. package/skills/ai-research/09-infrastructure/skypilot/SKILL.md +509 -0
  265. package/skills/ai-research/09-infrastructure/skypilot/references/advanced-usage.md +492 -0
  266. package/skills/ai-research/09-infrastructure/skypilot/references/troubleshooting.md +571 -0
  267. package/skills/ai-research/10-optimization/awq/SKILL.md +310 -0
  268. package/skills/ai-research/10-optimization/awq/references/advanced-usage.md +325 -0
  269. package/skills/ai-research/10-optimization/awq/references/troubleshooting.md +345 -0
  270. package/skills/ai-research/10-optimization/bitsandbytes/SKILL.md +411 -0
  271. package/skills/ai-research/10-optimization/bitsandbytes/references/memory-optimization.md +522 -0
  272. package/skills/ai-research/10-optimization/bitsandbytes/references/qlora-training.md +522 -0
  273. package/skills/ai-research/10-optimization/bitsandbytes/references/quantization-formats.md +448 -0
  274. package/skills/ai-research/10-optimization/flash-attention/SKILL.md +367 -0
  275. package/skills/ai-research/10-optimization/flash-attention/references/benchmarks.md +216 -0
  276. package/skills/ai-research/10-optimization/flash-attention/references/transformers-integration.md +294 -0
  277. package/skills/ai-research/10-optimization/gguf/SKILL.md +427 -0
  278. package/skills/ai-research/10-optimization/gguf/references/advanced-usage.md +505 -0
  279. package/skills/ai-research/10-optimization/gguf/references/troubleshooting.md +443 -0
  280. package/skills/ai-research/10-optimization/gptq/SKILL.md +450 -0
  281. package/skills/ai-research/10-optimization/gptq/references/calibration.md +338 -0
  282. package/skills/ai-research/10-optimization/gptq/references/integration.md +130 -0
  283. package/skills/ai-research/10-optimization/gptq/references/troubleshooting.md +96 -0
  284. package/skills/ai-research/10-optimization/hqq/SKILL.md +445 -0
  285. package/skills/ai-research/10-optimization/hqq/references/advanced-usage.md +529 -0
  286. package/skills/ai-research/10-optimization/hqq/references/troubleshooting.md +504 -0
  287. package/skills/ai-research/10-optimization/ml-training-recipes/SKILL.md +319 -0
  288. package/skills/ai-research/10-optimization/ml-training-recipes/references/architecture.md +320 -0
  289. package/skills/ai-research/10-optimization/ml-training-recipes/references/biomedical.md +498 -0
  290. package/skills/ai-research/10-optimization/ml-training-recipes/references/domain-specific.md +626 -0
  291. package/skills/ai-research/10-optimization/ml-training-recipes/references/experiment-loop.md +129 -0
  292. package/skills/ai-research/10-optimization/ml-training-recipes/references/optimizers.md +330 -0
  293. package/skills/ai-research/10-optimization/ml-training-recipes/references/scaling-and-selection.md +428 -0
  294. package/skills/ai-research/11-evaluation/bigcode-evaluation-harness/SKILL.md +405 -0
  295. package/skills/ai-research/11-evaluation/bigcode-evaluation-harness/references/benchmarks.md +394 -0
  296. package/skills/ai-research/11-evaluation/bigcode-evaluation-harness/references/custom-tasks.md +425 -0
  297. package/skills/ai-research/11-evaluation/bigcode-evaluation-harness/references/issues.md +395 -0
  298. package/skills/ai-research/11-evaluation/lm-evaluation-harness/SKILL.md +490 -0
  299. package/skills/ai-research/11-evaluation/lm-evaluation-harness/references/api-evaluation.md +491 -0
  300. package/skills/ai-research/11-evaluation/lm-evaluation-harness/references/benchmark-guide.md +489 -0
  301. package/skills/ai-research/11-evaluation/lm-evaluation-harness/references/custom-tasks.md +603 -0
  302. package/skills/ai-research/11-evaluation/lm-evaluation-harness/references/distributed-eval.md +520 -0
  303. package/skills/ai-research/11-evaluation/nemo-evaluator/SKILL.md +494 -0
  304. package/skills/ai-research/11-evaluation/nemo-evaluator/references/adapter-system.md +341 -0
  305. package/skills/ai-research/11-evaluation/nemo-evaluator/references/configuration.md +448 -0
  306. package/skills/ai-research/11-evaluation/nemo-evaluator/references/custom-benchmarks.md +316 -0
  307. package/skills/ai-research/11-evaluation/nemo-evaluator/references/execution-backends.md +362 -0
  308. package/skills/ai-research/12-inference-serving/llama-cpp/SKILL.md +258 -0
  309. package/skills/ai-research/12-inference-serving/llama-cpp/references/optimization.md +90 -0
  310. package/skills/ai-research/12-inference-serving/llama-cpp/references/quantization.md +214 -0
  311. package/skills/ai-research/12-inference-serving/llama-cpp/references/server.md +126 -0
  312. package/skills/ai-research/12-inference-serving/sglang/SKILL.md +442 -0
  313. package/skills/ai-research/12-inference-serving/sglang/references/deployment.md +491 -0
  314. package/skills/ai-research/12-inference-serving/sglang/references/radix-attention.md +414 -0
  315. package/skills/ai-research/12-inference-serving/sglang/references/structured-generation.md +542 -0
  316. package/skills/ai-research/12-inference-serving/tensorrt-llm/SKILL.md +187 -0
  317. package/skills/ai-research/12-inference-serving/tensorrt-llm/references/multi-gpu.md +299 -0
  318. package/skills/ai-research/12-inference-serving/tensorrt-llm/references/optimization.md +243 -0
  319. package/skills/ai-research/12-inference-serving/tensorrt-llm/references/serving.md +471 -0
  320. package/skills/ai-research/12-inference-serving/vllm/SKILL.md +364 -0
  321. package/skills/ai-research/12-inference-serving/vllm/references/optimization.md +227 -0
  322. package/skills/ai-research/12-inference-serving/vllm/references/quantization.md +285 -0
  323. package/skills/ai-research/12-inference-serving/vllm/references/server-deployment.md +256 -0
  324. package/skills/ai-research/12-inference-serving/vllm/references/troubleshooting.md +448 -0
  325. package/skills/ai-research/13-mlops/mlflow/SKILL.md +704 -0
  326. package/skills/ai-research/13-mlops/mlflow/references/deployment.md +745 -0
  327. package/skills/ai-research/13-mlops/mlflow/references/model-registry.md +771 -0
  328. package/skills/ai-research/13-mlops/mlflow/references/tracking.md +681 -0
  329. package/skills/ai-research/13-mlops/swanlab/SKILL.md +406 -0
  330. package/skills/ai-research/13-mlops/swanlab/references/integrations.md +305 -0
  331. package/skills/ai-research/13-mlops/swanlab/references/visualization.md +234 -0
  332. package/skills/ai-research/13-mlops/tensorboard/SKILL.md +629 -0
  333. package/skills/ai-research/13-mlops/tensorboard/references/integrations.md +639 -0
  334. package/skills/ai-research/13-mlops/tensorboard/references/profiling.md +546 -0
  335. package/skills/ai-research/13-mlops/tensorboard/references/visualization.md +621 -0
  336. package/skills/ai-research/13-mlops/weights-and-biases/SKILL.md +590 -0
  337. package/skills/ai-research/13-mlops/weights-and-biases/references/artifacts.md +585 -0
  338. package/skills/ai-research/13-mlops/weights-and-biases/references/integrations.md +701 -0
  339. package/skills/ai-research/13-mlops/weights-and-biases/references/sweeps.md +848 -0
  340. package/skills/ai-research/14-agents/a-evolve/SKILL.md +383 -0
  341. package/skills/ai-research/14-agents/a-evolve/references/README.md +831 -0
  342. package/skills/ai-research/14-agents/a-evolve/references/api.md +594 -0
  343. package/skills/ai-research/14-agents/a-evolve/references/architecture.md +417 -0
  344. package/skills/ai-research/14-agents/a-evolve/references/design-patterns.md +462 -0
  345. package/skills/ai-research/14-agents/a-evolve/references/examples.md +352 -0
  346. package/skills/ai-research/14-agents/a-evolve/references/issues.md +591 -0
  347. package/skills/ai-research/14-agents/a-evolve/references/releases.md +112 -0
  348. package/skills/ai-research/14-agents/a-evolve/references/tutorials.md +819 -0
  349. package/skills/ai-research/14-agents/autogpt/SKILL.md +403 -0
  350. package/skills/ai-research/14-agents/autogpt/references/advanced-usage.md +536 -0
  351. package/skills/ai-research/14-agents/autogpt/references/troubleshooting.md +421 -0
  352. package/skills/ai-research/14-agents/crewai/SKILL.md +498 -0
  353. package/skills/ai-research/14-agents/crewai/references/flows.md +439 -0
  354. package/skills/ai-research/14-agents/crewai/references/tools.md +430 -0
  355. package/skills/ai-research/14-agents/crewai/references/troubleshooting.md +481 -0
  356. package/skills/ai-research/14-agents/langchain/SKILL.md +480 -0
  357. package/skills/ai-research/14-agents/langchain/references/agents.md +500 -0
  358. package/skills/ai-research/14-agents/langchain/references/integration.md +563 -0
  359. package/skills/ai-research/14-agents/langchain/references/rag.md +601 -0
  360. package/skills/ai-research/14-agents/llamaindex/SKILL.md +569 -0
  361. package/skills/ai-research/14-agents/llamaindex/references/agents.md +84 -0
  362. package/skills/ai-research/14-agents/llamaindex/references/data_connectors.md +109 -0
  363. package/skills/ai-research/14-agents/llamaindex/references/query_engines.md +407 -0
  364. package/skills/ai-research/15-rag/chroma/SKILL.md +406 -0
  365. package/skills/ai-research/15-rag/chroma/references/integration.md +39 -0
  366. package/skills/ai-research/15-rag/faiss/SKILL.md +221 -0
  367. package/skills/ai-research/15-rag/faiss/references/index_types.md +281 -0
  368. package/skills/ai-research/15-rag/pinecone/SKILL.md +358 -0
  369. package/skills/ai-research/15-rag/pinecone/references/deployment.md +182 -0
  370. package/skills/ai-research/15-rag/qdrant/SKILL.md +493 -0
  371. package/skills/ai-research/15-rag/qdrant/references/advanced-usage.md +649 -0
  372. package/skills/ai-research/15-rag/qdrant/references/troubleshooting.md +632 -0
  373. package/skills/ai-research/15-rag/sentence-transformers/SKILL.md +255 -0
  374. package/skills/ai-research/15-rag/sentence-transformers/references/models.md +124 -0
  375. package/skills/ai-research/16-prompt-engineering/dspy/SKILL.md +590 -0
  376. package/skills/ai-research/16-prompt-engineering/dspy/references/examples.md +664 -0
  377. package/skills/ai-research/16-prompt-engineering/dspy/references/modules.md +476 -0
  378. package/skills/ai-research/16-prompt-engineering/dspy/references/optimizers.md +567 -0
  379. package/skills/ai-research/16-prompt-engineering/guidance/SKILL.md +572 -0
  380. package/skills/ai-research/16-prompt-engineering/guidance/references/backends.md +555 -0
  381. package/skills/ai-research/16-prompt-engineering/guidance/references/constraints.md +675 -0
  382. package/skills/ai-research/16-prompt-engineering/guidance/references/examples.md +768 -0
  383. package/skills/ai-research/16-prompt-engineering/instructor/SKILL.md +740 -0
  384. package/skills/ai-research/16-prompt-engineering/instructor/references/examples.md +108 -0
  385. package/skills/ai-research/16-prompt-engineering/instructor/references/providers.md +71 -0
  386. package/skills/ai-research/16-prompt-engineering/instructor/references/validation.md +607 -0
  387. package/skills/ai-research/16-prompt-engineering/outlines/SKILL.md +652 -0
  388. package/skills/ai-research/16-prompt-engineering/outlines/references/backends.md +616 -0
  389. package/skills/ai-research/16-prompt-engineering/outlines/references/examples.md +774 -0
  390. package/skills/ai-research/16-prompt-engineering/outlines/references/json_generation.md +653 -0
  391. package/skills/ai-research/17-observability/langsmith/SKILL.md +422 -0
  392. package/skills/ai-research/17-observability/langsmith/references/advanced-usage.md +549 -0
  393. package/skills/ai-research/17-observability/langsmith/references/troubleshooting.md +538 -0
  394. package/skills/ai-research/17-observability/phoenix/SKILL.md +475 -0
  395. package/skills/ai-research/17-observability/phoenix/references/advanced-usage.md +620 -0
  396. package/skills/ai-research/17-observability/phoenix/references/troubleshooting.md +539 -0
  397. package/skills/ai-research/18-multimodal/audiocraft/SKILL.md +564 -0
  398. package/skills/ai-research/18-multimodal/audiocraft/references/advanced-usage.md +667 -0
  399. package/skills/ai-research/18-multimodal/audiocraft/references/troubleshooting.md +505 -0
  400. package/skills/ai-research/18-multimodal/blip-2/SKILL.md +564 -0
  401. package/skills/ai-research/18-multimodal/blip-2/references/advanced-usage.md +681 -0
  402. package/skills/ai-research/18-multimodal/blip-2/references/troubleshooting.md +527 -0
  403. package/skills/ai-research/18-multimodal/clip/SKILL.md +253 -0
  404. package/skills/ai-research/18-multimodal/clip/references/applications.md +208 -0
  405. package/skills/ai-research/18-multimodal/cosmos-policy/SKILL.md +402 -0
  406. package/skills/ai-research/18-multimodal/cosmos-policy/references/libero-commands.md +175 -0
  407. package/skills/ai-research/18-multimodal/cosmos-policy/references/robocasa-commands.md +147 -0
  408. package/skills/ai-research/18-multimodal/llava/SKILL.md +304 -0
  409. package/skills/ai-research/18-multimodal/llava/references/training.md +198 -0
  410. package/skills/ai-research/18-multimodal/openpi/SKILL.md +480 -0
  411. package/skills/ai-research/18-multimodal/openpi/references/checkpoints-and-env-map.md +86 -0
  412. package/skills/ai-research/18-multimodal/openpi/references/config-recipes.md +50 -0
  413. package/skills/ai-research/18-multimodal/openpi/references/pytorch-gotchas.md +49 -0
  414. package/skills/ai-research/18-multimodal/openpi/references/remote-client-pattern.md +48 -0
  415. package/skills/ai-research/18-multimodal/openpi/references/training-debugging.md +46 -0
  416. package/skills/ai-research/18-multimodal/openvla-oft/SKILL.md +441 -0
  417. package/skills/ai-research/18-multimodal/openvla-oft/references/aloha-workflow.md +141 -0
  418. package/skills/ai-research/18-multimodal/openvla-oft/references/config-troubleshooting.md +97 -0
  419. package/skills/ai-research/18-multimodal/openvla-oft/references/libero-workflow.md +115 -0
  420. package/skills/ai-research/18-multimodal/openvla-oft/references/paper-and-checkpoints.md +84 -0
  421. package/skills/ai-research/18-multimodal/segment-anything/SKILL.md +500 -0
  422. package/skills/ai-research/18-multimodal/segment-anything/references/advanced-usage.md +590 -0
  423. package/skills/ai-research/18-multimodal/segment-anything/references/troubleshooting.md +485 -0
  424. package/skills/ai-research/18-multimodal/stable-diffusion/SKILL.md +519 -0
  425. package/skills/ai-research/18-multimodal/stable-diffusion/references/advanced-usage.md +717 -0
  426. package/skills/ai-research/18-multimodal/stable-diffusion/references/troubleshooting.md +556 -0
  427. package/skills/ai-research/18-multimodal/whisper/SKILL.md +317 -0
  428. package/skills/ai-research/18-multimodal/whisper/references/languages.md +190 -0
  429. package/skills/ai-research/19-emerging-techniques/knowledge-distillation/SKILL.md +458 -0
  430. package/skills/ai-research/19-emerging-techniques/knowledge-distillation/references/minillm.md +335 -0
  431. package/skills/ai-research/19-emerging-techniques/long-context/SKILL.md +536 -0
  432. package/skills/ai-research/19-emerging-techniques/long-context/references/extension_methods.md +469 -0
  433. package/skills/ai-research/19-emerging-techniques/long-context/references/fine_tuning.md +612 -0
  434. package/skills/ai-research/19-emerging-techniques/long-context/references/rope.md +403 -0
  435. package/skills/ai-research/19-emerging-techniques/model-merging/SKILL.md +497 -0
  436. package/skills/ai-research/19-emerging-techniques/model-merging/references/coefficient-tuning.md +415 -0
  437. package/skills/ai-research/19-emerging-techniques/model-merging/references/evaluation.md +463 -0
  438. package/skills/ai-research/19-emerging-techniques/model-merging/references/examples.md +429 -0
  439. package/skills/ai-research/19-emerging-techniques/model-merging/references/methods.md +353 -0
  440. package/skills/ai-research/19-emerging-techniques/model-pruning/SKILL.md +495 -0
  441. package/skills/ai-research/19-emerging-techniques/model-pruning/references/wanda.md +348 -0
  442. package/skills/ai-research/19-emerging-techniques/moe-training/SKILL.md +526 -0
  443. package/skills/ai-research/19-emerging-techniques/moe-training/references/architectures.md +433 -0
  444. package/skills/ai-research/19-emerging-techniques/moe-training/references/inference.md +349 -0
  445. package/skills/ai-research/19-emerging-techniques/moe-training/references/training.md +426 -0
  446. package/skills/ai-research/19-emerging-techniques/speculative-decoding/SKILL.md +467 -0
  447. package/skills/ai-research/19-emerging-techniques/speculative-decoding/references/lookahead.md +310 -0
  448. package/skills/ai-research/19-emerging-techniques/speculative-decoding/references/medusa.md +351 -0
  449. package/skills/ai-research/20-ml-paper-writing/academic-plotting/SKILL.md +479 -0
  450. package/skills/ai-research/20-ml-paper-writing/academic-plotting/references/data-visualization.md +509 -0
  451. package/skills/ai-research/20-ml-paper-writing/academic-plotting/references/diagram-generation.md +395 -0
  452. package/skills/ai-research/20-ml-paper-writing/academic-plotting/references/style-guide.md +305 -0
  453. package/skills/ai-research/20-ml-paper-writing/ml-paper-writing/SKILL.md +982 -0
  454. package/skills/ai-research/20-ml-paper-writing/ml-paper-writing/references/checklists.md +348 -0
  455. package/skills/ai-research/20-ml-paper-writing/ml-paper-writing/references/citation-workflow.md +563 -0
  456. package/skills/ai-research/20-ml-paper-writing/ml-paper-writing/references/reviewer-guidelines.md +349 -0
  457. package/skills/ai-research/20-ml-paper-writing/ml-paper-writing/references/sources.md +165 -0
  458. package/skills/ai-research/20-ml-paper-writing/ml-paper-writing/references/writing-guide.md +477 -0
  459. package/skills/ai-research/20-ml-paper-writing/presenting-conference-talks/SKILL.md +298 -0
  460. package/skills/ai-research/20-ml-paper-writing/presenting-conference-talks/references/slide-templates.md +505 -0
  461. package/skills/ai-research/20-ml-paper-writing/systems-paper-writing/SKILL.md +270 -0
  462. package/skills/ai-research/20-ml-paper-writing/systems-paper-writing/references/checklist.md +279 -0
  463. package/skills/ai-research/20-ml-paper-writing/systems-paper-writing/references/reviewer-guidelines.md +116 -0
  464. package/skills/ai-research/20-ml-paper-writing/systems-paper-writing/references/section-blueprints.md +400 -0
  465. package/skills/ai-research/20-ml-paper-writing/systems-paper-writing/references/systems-conferences.md +261 -0
  466. package/skills/ai-research/20-ml-paper-writing/systems-paper-writing/references/writing-patterns.md +231 -0
  467. package/skills/ai-research/21-research-ideation/brainstorming-research-ideas/SKILL.md +384 -0
  468. package/skills/ai-research/21-research-ideation/creative-thinking-for-research/SKILL.md +366 -0
  469. package/skills/ai-research/22-agent-native-research-artifact/compiler/SKILL.md +245 -0
  470. package/skills/ai-research/22-agent-native-research-artifact/compiler/references/ara-schema.md +439 -0
  471. package/skills/ai-research/22-agent-native-research-artifact/compiler/references/exploration-tree-spec.md +125 -0
  472. package/skills/ai-research/22-agent-native-research-artifact/compiler/references/validation-checklist.md +149 -0
  473. package/skills/ai-research/22-agent-native-research-artifact/research-manager/SKILL.md +324 -0
  474. package/skills/ai-research/22-agent-native-research-artifact/research-manager/references/event-taxonomy.md +124 -0
  475. package/skills/ai-research/22-agent-native-research-artifact/research-manager/references/provenance-tags.md +190 -0
  476. package/skills/ai-research/22-agent-native-research-artifact/research-manager/references/session-protocol.md +162 -0
  477. package/skills/ai-research/22-agent-native-research-artifact/rigor-reviewer/SKILL.md +322 -0
  478. package/skills/ai-research/22-agent-native-research-artifact/rigor-reviewer/references/review-dimensions.md +182 -0
  479. package/skills/ai-research/SKILL.md +101 -0
  480. package/skills/ai-research/SOURCE +38 -0
  481. package/skills/ai-research/index/1-frame.md +18 -0
  482. package/skills/ai-research/index/2-data.md +21 -0
  483. package/skills/ai-research/index/3-train.md +48 -0
  484. package/skills/ai-research/index/4-measure.md +25 -0
  485. package/skills/ai-research/index/5-run.md +23 -0
  486. package/skills/ai-research/index/6-write.md +35 -0
  487. package/skills/ai-research/library.json +3456 -0
  488. package/skills/analyze-app/EVALS.md +82 -0
  489. package/skills/analyze-app/SKILL.md +188 -0
  490. package/skills/design-contract/EVALS.md +80 -0
  491. package/skills/design-contract/SKILL.md +171 -0
  492. package/skills/design-library/EVALS.md +85 -0
  493. package/skills/design-library/INDEX.md +59 -0
  494. package/skills/design-library/SKILL.md +58 -0
  495. package/skills/design-library/SOURCE +131 -0
  496. package/skills/design-library/adaptive-interfaces/skills/colour-independence/SKILL.md +90 -0
  497. package/skills/design-library/adaptive-interfaces/skills/flexible-typography/SKILL.md +83 -0
  498. package/skills/design-library/adaptive-interfaces/skills/information-density/SKILL.md +87 -0
  499. package/skills/design-library/adaptive-interfaces/skills/preference-audit/SKILL.md +70 -0
  500. package/skills/design-library/adaptive-interfaces/skills/responsive-accessibility/SKILL.md +86 -0
  501. package/skills/design-library/adaptive-interfaces/skills/responsive-review/SKILL.md +76 -0
  502. package/skills/design-library/adaptive-interfaces/skills/simplified-views/SKILL.md +97 -0
  503. package/skills/design-library/adaptive-interfaces/skills/specify/SKILL.md +63 -0
  504. package/skills/design-library/adaptive-interfaces/skills/user-preference-respect/SKILL.md +100 -0
  505. package/skills/design-library/cognitive-accessibility/skills/adaptive-personalisation/SKILL.md +61 -0
  506. package/skills/design-library/cognitive-accessibility/skills/assess-load/SKILL.md +48 -0
  507. package/skills/design-library/cognitive-accessibility/skills/cognitive-load-assessment/SKILL.md +60 -0
  508. package/skills/design-library/cognitive-accessibility/skills/contextual-help-design/SKILL.md +61 -0
  509. package/skills/design-library/cognitive-accessibility/skills/error-prevention-recovery/SKILL.md +71 -0
  510. package/skills/design-library/cognitive-accessibility/skills/focus-attention-design/SKILL.md +67 -0
  511. package/skills/design-library/cognitive-accessibility/skills/memory-load-reduction/SKILL.md +60 -0
  512. package/skills/design-library/cognitive-accessibility/skills/plain-language-design/SKILL.md +78 -0
  513. package/skills/design-library/cognitive-accessibility/skills/review/SKILL.md +56 -0
  514. package/skills/design-library/cognitive-accessibility/skills/simplify/SKILL.md +39 -0
  515. package/skills/design-library/cognitive-accessibility/skills/wayfinding-navigation/SKILL.md +64 -0
  516. package/skills/design-library/design-research/skills/behavioural-analytics/SKILL.md +33 -0
  517. package/skills/design-library/design-research/skills/qual-quant-triangulation/SKILL.md +33 -0
  518. package/skills/design-library/inclusive-interaction/skills/audit/SKILL.md +50 -0
  519. package/skills/design-library/inclusive-interaction/skills/design-flow/SKILL.md +58 -0
  520. package/skills/design-library/inclusive-interaction/skills/feedback-and-status/SKILL.md +76 -0
  521. package/skills/design-library/inclusive-interaction/skills/gesture-alternatives/SKILL.md +70 -0
  522. package/skills/design-library/inclusive-interaction/skills/keyboard-navigation/SKILL.md +99 -0
  523. package/skills/design-library/inclusive-interaction/skills/keyboard-review/SKILL.md +54 -0
  524. package/skills/design-library/inclusive-interaction/skills/motion-sensitivity/SKILL.md +79 -0
  525. package/skills/design-library/inclusive-interaction/skills/multi-modal-input/SKILL.md +70 -0
  526. package/skills/design-library/inclusive-interaction/skills/touch-target-design/SKILL.md +71 -0
  527. package/skills/design-library/inclusive-interaction/skills/voice-interaction/SKILL.md +68 -0
  528. package/skills/design-library/visual-critique/skills/critique-affordance/SKILL.md +45 -0
  529. package/skills/design-library/visual-critique/skills/critique-brand-consistency/SKILL.md +42 -0
  530. package/skills/design-library/visual-critique/skills/critique-color/SKILL.md +44 -0
  531. package/skills/design-library/visual-critique/skills/critique-composition/SKILL.md +46 -0
  532. package/skills/design-library/visual-critique/skills/critique-information-density/SKILL.md +45 -0
  533. package/skills/design-library/visual-critique/skills/critique-typography/SKILL.md +45 -0
  534. package/skills/design-library/visual-critique/skills/critique-visual-hierarchy/SKILL.md +40 -0
  535. package/skills/feature-audit/EVALS.md +83 -0
  536. package/skills/feature-audit/SKILL.md +326 -0
  537. package/skills/harness/EVALS.md +81 -0
  538. package/skills/harness/SKILL.md +88 -0
  539. package/skills/i-have-adhd/EVALS.md +80 -0
  540. package/skills/i-have-adhd/SKILL.md +183 -0
  541. package/skills/no-ai-slop/EVALS.md +89 -0
  542. package/skills/no-ai-slop/SKILL.md +209 -0
  543. package/skills/no-ai-slop/eval.md +52 -0
  544. package/skills/plan-add/EVALS.md +79 -0
  545. package/skills/plan-add/SKILL.md +179 -0
  546. package/skills/plan-add/render_table.py +72 -0
  547. package/skills/plan-status/EVALS.md +78 -0
  548. package/skills/plan-status/SKILL.md +52 -0
  549. package/skills/plan-sync/EVALS.md +80 -0
  550. package/skills/plan-sync/SKILL.md +69 -0
  551. package/skills/pm-frameworks/SKILL.md +33 -0
  552. package/skills/pm-frameworks/SOURCE +39 -0
  553. package/skills/pm-frameworks/intended-vs-implemented/SKILL.md +42 -0
  554. package/skills/pm-frameworks/opportunity-solution-tree/SKILL.md +64 -0
  555. package/skills/ponytail/EVALS.md +80 -0
  556. package/skills/ponytail/SKILL.md +124 -0
  557. package/skills/product-analysis/EVALS.md +103 -0
  558. package/skills/product-analysis/SKILL.md +361 -0
  559. package/skills/research/EVALS.md +104 -0
  560. package/skills/research/SKILL.md +570 -0
  561. package/skills/rl-env/SKILL.md +53 -0
  562. package/skills/rl-env/SOURCE +41 -0
  563. package/skills/rl-env/generate-nemo-gym-env/SKILL.md +169 -0
  564. package/skills/rl-env/generate-nemo-gym-env/references/architecture.md +114 -0
  565. package/skills/rl-env/generate-openenv-env/SKILL.md +183 -0
  566. package/skills/rl-env/generate-openenv-env/references/architecture.md +82 -0
  567. package/skills/rl-env/generate-ors-env/SKILL.md +209 -0
  568. package/skills/rl-env/generate-ors-env/references/architecture.md +113 -0
  569. package/skills/rl-env/generate-verifiers-env/SKILL.md +188 -0
  570. package/skills/rl-env/generate-verifiers-env/references/architecture.md +119 -0
  571. package/skills/rl-env/rl-env-from-description/SKILL.md +124 -0
  572. package/skills/rl-env/rl-env-from-description/references/interview.md +75 -0
  573. package/skills/rl-env/rl-env-from-description/references/nemo_gym.md +41 -0
  574. package/skills/rl-env/rl-env-from-description/references/openenv.md +35 -0
  575. package/skills/rl-env/rl-env-from-description/references/ors.md +50 -0
  576. package/skills/rl-env/rl-env-from-description/references/verifiers.md +39 -0
  577. package/skills/tezgah-contract/EVALS.md +78 -0
  578. package/skills/tezgah-contract/SKILL.md +792 -0
  579. package/statusline.py +129 -0
  580. package/workflows/graph-impact.js +153 -0
  581. package/workflows/graph-map.js +158 -0
  582. package/workflows/graph-review.js +170 -0
@@ -0,0 +1,209 @@
1
+ ---
2
+ name: generate-ors-env
3
+ description: Builds an Open Reward Standard (ORS) variant of an RL environment using the official `openreward` Python package. Use whenever someone asks to scaffold an ORS env, port to OpenReward, add per-tool-call rewards, deploy to OpenReward.ai, or wrap an existing env in the ORS protocol. ORS is the right framework when the user wants HTTP+REST+SSE, rewards arriving inline with each tool call (not post-episode), task-spec-driven sessions, splits (train/val/test), or deployment to OpenReward.ai or HF Spaces. Output is a runnable `<env_dir>/ors/` folder with `server.py`, `tasks.py`, `pyproject.toml`, `Dockerfile.spaces`, and `rollout.py`. Use for prompts like "wrap my env in ORS", "make an OpenReward env for X", or "add per-call reward to my env".
4
+ ---
5
+
6
+ # generate-ors-env
7
+
8
+ Build the ORS variant of an env using the official **`openreward >= 0.1.33`** package (the `ors-sdk` name is a common mistake — it does not exist on PyPI).
9
+
10
+ ## Concept
11
+
12
+ ORS is the Open Reward Standard ([openrewardstandard.io](https://openrewardstandard.io)) — an HTTP REST + Server-Sent Events protocol for agent envs. Reward arrives **inline** with every `ToolOutput`, which is the framework's defining feature compared to OpenEnv (external/post-hoc reward) and NeMo Gym (post-episode `/verify`).
13
+
14
+ When the user has a shared domain module (`<domain>.py`) and wants an ORS variant, **never duplicate domain logic into the framework folder** — wrap it.
15
+
16
+ ## Archetypes
17
+
18
+ | Archetype | Hallmarks |
19
+ |---|---|
20
+ | **Pure-Python game** | Single `@tool`, `tasks.py` with N task dicts forming the `train` split, terminal reward via `finished=True`. |
21
+ | **Stateful sandbox** | `setup()` allocates resources from `task_spec`; `teardown()` frees them; per-tool reward stubs. |
22
+ | **Vision / computer-use** | `ImageBlock(data=<base64>, mimeType="image/png")` returns; `terminate(status)` tool emits the terminal reward. |
23
+
24
+ ## Imports — exactly these
25
+
26
+ Server side:
27
+ ```python
28
+ from openreward.environments import (
29
+ Environment, Server, tool, ToolOutput, TextBlock, Split, ImageBlock,
30
+ )
31
+ ```
32
+
33
+ Client side (rollouts):
34
+ ```python
35
+ from openreward import EnvironmentsAPI
36
+ api = EnvironmentsAPI(base_url=URL, api_key="")
37
+ env = api.get(ENV_NAME)
38
+ ```
39
+
40
+ > **Don't use `OpenReward(api_key=..., base_url=...)`** even though it's the high-level client. It prepends `matrix.` / `api.` / `construct.` subdomains to the base URL — that breaks HF Space URLs. `EnvironmentsAPI` talks to `base_url` verbatim.
41
+
42
+ ## Architecture
43
+
44
+ ```
45
+ <env_dir>/ors/
46
+ ├── pyproject.toml # openreward>=0.1.33 + e2b-* (if needed) + pydantic
47
+ ├── __init__.py
48
+ ├── Dockerfile # local dev image
49
+ ├── Dockerfile.spaces # HF Space (port 7860, single-stage pip install)
50
+ ├── README.spaces.md # HF Space frontmatter
51
+ ├── server.py # the Environment subclass + main()
52
+ ├── tasks.py # list of dicts (task_spec for each task)
53
+ ├── rollout.py # or rollout_openai.py + rollout_qwen.py
54
+ └── README.md # one-page dev README
55
+ ```
56
+
57
+ ## Implementation order
58
+
59
+ ### 1. Tasks file — `tasks.py`
60
+
61
+ A list of plain dicts. Each dict becomes a `task_spec` per session. ORS auto-wraps these into `Task` objects on `list_tasks()`.
62
+
63
+ ```python
64
+ TASKS = [
65
+ {"answer": "apple", "task": "Guess the 5-letter word."},
66
+ # ...
67
+ ]
68
+ ```
69
+
70
+ ### 2. The Environment subclass — `server.py`
71
+
72
+ ```python
73
+ from pydantic import BaseModel
74
+ from openreward.environments import Environment, Server, tool, ToolOutput, TextBlock, Split
75
+
76
+ class GuessInput(BaseModel):
77
+ word: str
78
+
79
+ class WordleORS(Environment):
80
+ def __init__(self, task_spec=None, secrets=None, **kw):
81
+ super().__init__(task_spec=task_spec or {}, secrets=secrets or {})
82
+ self._game = None
83
+
84
+ def setup(self): # called on first tool invocation
85
+ self._game = WordleGame(self.task_spec.get("answer"))
86
+
87
+ def teardown(self): # called on session delete
88
+ self._game = None
89
+
90
+ @classmethod
91
+ def list_splits(cls): return [Split(name="train", type="train")]
92
+
93
+ @classmethod
94
+ def list_tasks(cls, split): return TASKS
95
+
96
+ def get_prompt(self):
97
+ return [TextBlock(text="Play Wordle. Guess the 5-letter word.")]
98
+
99
+ @tool
100
+ def guess(self, params: GuessInput) -> ToolOutput:
101
+ feedback = self._game.guess(params.word)
102
+ return ToolOutput(
103
+ blocks=[TextBlock(text=feedback)],
104
+ reward=self._game.reward,
105
+ finished=self._game.done,
106
+ )
107
+ ```
108
+
109
+ Key contracts:
110
+ - **Tools take a `params: PydanticModel`** as the second arg. ORS uses the model's JSON schema as the tool's `input_schema`.
111
+ - **Empty inputs** still need a Pydantic model (`class _Empty(BaseModel): pass`). Don't omit the param.
112
+ - **`ToolOutput.blocks`** is `[TextBlock | ImageBlock]`. For images: `ImageBlock(data=<base64>, mimeType="image/png")`. **Vision models actually see this.**
113
+ - **`reward`** is `float | None`. `None` means "no reward this step"; `0.0` means "stepped, scored zero". For pure terminal reward, return `None` everywhere except in the last `ToolOutput`.
114
+ - **`finished=True`** ends the session. Pair with `reward=1.0` (or whatever) to give the rollout a clean stop.
115
+ - **`task_spec`** is a `dict` you read from `self.task_spec` — no schema validation. If you want validation, do it in `setup()`.
116
+
117
+ ### 3. Server entry point — `server.py` main
118
+
119
+ ```python
120
+ def main():
121
+ parser = argparse.ArgumentParser()
122
+ parser.add_argument("--port", type=int, default=8080)
123
+ parser.add_argument("--host", type=str, default="0.0.0.0")
124
+ args = parser.parse_args()
125
+ Server([WordleORS]).run(host=args.host, port=args.port)
126
+ ```
127
+
128
+ The endpoint name is auto-derived from the class name lowercased — `WordleORS` → `wordleors`. Tell the user this so they know what `ENV_NAME` to pass.
129
+
130
+ ### 4. Rollout
131
+
132
+ Always discover tools and tasks from the env. Don't hardcode names:
133
+
134
+ ```python
135
+ api = EnvironmentsAPI(base_url=ENV_URL, api_key="")
136
+ env = api.get("wordleors")
137
+ tasks = env.list_tasks("train")
138
+ tools = env.list_tools(format="openai") # built-in OpenAI tool-schema converter
139
+ with env.session(task=tasks[0]) as session:
140
+ prompt = session.get_prompt()
141
+ result = session.call_tool("guess", {"word": "crane"})
142
+ # result.blocks, result.reward, result.finished
143
+ ```
144
+
145
+ For **vision envs**, the screenshot tool returns an `ImageBlock` — read it as `b.data` (already base64). Pass that into the model's image content.
146
+
147
+ ### 5. Dockerfiles
148
+
149
+ `Dockerfile.spaces` is the HF Space deploy image. Keep it minimal:
150
+
151
+ ```dockerfile
152
+ FROM python:3.11-slim
153
+ RUN useradd -m -u 1000 user
154
+ RUN pip install --no-cache-dir openreward pydantic <other-deps>
155
+ USER user
156
+ ENV HOME=/home/user PATH=/home/user/.local/bin:$PATH
157
+ WORKDIR $HOME/app
158
+ COPY --chown=user . $HOME/app
159
+ EXPOSE 7860
160
+ CMD ["python", "server.py", "--host", "0.0.0.0", "--port", "7860"]
161
+ ```
162
+
163
+ `README.spaces.md`:
164
+ ```yaml
165
+ ---
166
+ title: My Env ORS
167
+ emoji: 🎯
168
+ colorFrom: pink
169
+ colorTo: indigo
170
+ sdk: docker
171
+ app_port: 7860
172
+ tags: [ors, openreward]
173
+ ---
174
+ ```
175
+
176
+ ## Pushing to HF Spaces
177
+
178
+ Create a Space named `<owner>/<env_name>-ors`. Set `E2B_API_KEY` (and any other secrets) as **Space secrets**, not environment variables — they survive rebuilds. The local `.env` file should not be uploaded.
179
+
180
+ ```python
181
+ api.add_space_secret(repo_id="<owner>/<env>-ors", key="E2B_API_KEY", value="...")
182
+ api.upload_file(path_or_fileobj="Dockerfile.spaces", path_in_repo="Dockerfile", repo_id=...)
183
+ api.upload_file(path_or_fileobj="README.spaces.md", path_in_repo="README.md", repo_id=...)
184
+ # upload server.py, tasks.py, __init__.py, pyproject.toml
185
+ ```
186
+
187
+ ## Validation gates
188
+
189
+ 1. **Local server** — `uv run python server.py --port 8772` then `curl http://localhost:8772/list_environments` returns `["<envname>"]`.
190
+ 2. **Tool discovery** — `curl http://localhost:8772/<envname>/tools | jq '.tools | length'` matches the number of `@tool` methods.
191
+ 3. **End-to-end** — `MAX_TURNS=3 uv run python rollout.py` drives the model through at least one tool call without errors.
192
+
193
+ ## Gotchas (from real-world ORS work)
194
+
195
+ - **`from openreward.environments.types import Task`** — wrong; `Task` is in `openreward.api.environments.types` and you usually don't import it. `list_tasks` can return plain dicts; ORS wraps them.
196
+ - **`OpenReward(base_url=URL)` rewrites the URL** — prepends `matrix.` / `api.` / `construct.` subdomains. For HF Spaces, use `EnvironmentsAPI(base_url=URL, api_key="")` directly.
197
+ - **`e2b-desktop` without `e2b`** — `e2b-desktop` imports from `e2b`, but doesn't pin it. Add both to `dependencies`.
198
+ - **Endpoint name is the lowercased class name** — `MyEnvORS` becomes `myenvors`. Tell users this explicitly so their `ENV_NAME` env var is right.
199
+
200
+ ## Reference
201
+
202
+ - `references/architecture.md` — protocol shape + Server / Environment / Session lifecycle
203
+
204
+ ## Official documentation
205
+
206
+ - [openrewardstandard.io](https://openrewardstandard.io) — protocol specification
207
+ - [docs.openreward.ai](https://docs.openreward.ai) — Python SDK + platform docs
208
+ - [openreward on PyPI](https://pypi.org/project/openreward/) — current package (latest 0.1.81+)
209
+ - [Talc-AI/OpenReward on GitHub](https://github.com/Talc-AI/OpenReward) — source
@@ -0,0 +1,113 @@
1
+ # ORS architecture (deep)
2
+
3
+ ## Wire protocol (REST + SSE)
4
+
5
+ | Method | Path | Purpose |
6
+ |---|---|---|
7
+ | `GET` | `/list_environments` | List env names served by this server |
8
+ | `GET` | `/<env>/tools` | List tools (returns `{"tools": [{"name", "description", "input_schema"}, ...]}`) |
9
+ | `GET` | `/<env>/splits` | List splits |
10
+ | `POST` | `/<env>/tasks` | Body `{"split": "train"}` → list of `Task` |
11
+ | `GET` | `/<env>/prompt` | Returns the prompt blocks for the current task |
12
+ | `POST` | `/<env>/sessions` | Body `{"task_spec": {...}, "secrets": {...}}` → SSE stream returns the `session_id` |
13
+ | `POST` | `/<env>/sessions/<sid>/tool` | Body `{"name": "x", "input": {...}}` → SSE stream of the `ToolOutput` |
14
+ | `DELETE` | `/<env>/sessions/<sid>` | Tear down |
15
+
16
+ Endpoint name = `<EnvironmentClassName>.lower()`. So `class WordleORS(Environment)` → `/wordleors/...`.
17
+
18
+ The `EnvironmentsAPI` Python client wraps this via `aiohttp`. `OpenReward` wraps `EnvironmentsAPI` and rewrites `base_url` to `matrix.<host>` — that's why HF Space targets need `EnvironmentsAPI` direct.
19
+
20
+ ## `Environment` lifecycle
21
+
22
+ 1. **`__init__(task_spec, secrets, **kw)`** — called once per session. Store `task_spec` (already on `self.task_spec` after `super().__init__`); validate or stub.
23
+ 2. **`setup()`** — called on first tool invocation. Allocate sandbox, init game state.
24
+ 3. **`teardown()`** — called on `DELETE /sessions/<sid>`. Kill the sandbox, free resources.
25
+ 4. **`get_prompt() -> [TextBlock | ImageBlock]`** — called when the client asks for the prompt. Reads from `self.task_spec`.
26
+ 5. **`@classmethod list_splits()`** and **`@classmethod list_tasks(split)`** — class-level (no `self`). Splits are static metadata. Tasks can be plain dicts; ORS wraps them.
27
+ 6. **Tool methods** — decorated `@tool`, signature `(self, params: BaseModel) -> ToolOutput`.
28
+
29
+ ## ToolOutput shape
30
+
31
+ ```python
32
+ ToolOutput(
33
+ blocks=[TextBlock(text="..."), ImageBlock(data=<b64>, mimeType="image/png")],
34
+ metadata={"any": "json"},
35
+ reward=0.5, # float | None
36
+ finished=False, # bool — True ends the session
37
+ )
38
+ ```
39
+
40
+ Per-step rewards add up across the trajectory; `finished=True` is the only way for the env to signal terminal state.
41
+
42
+ ## Splits & tasks
43
+
44
+ `Split.type` is `"train" | "validation" | "test"`. The split name and type can differ. List N tasks per split, each a dict that becomes the per-session `task_spec`.
45
+
46
+ A common pattern:
47
+ ```python
48
+ TASKS = [{"answer": w, "task": "Guess the word"} for w in WORDS[:50]]
49
+
50
+ @classmethod
51
+ def list_tasks(cls, split): return TASKS
52
+ ```
53
+
54
+ ORS wraps each dict into a `Task(server_name=cls.__name__, environment_name=..., task_spec=dict)` automatically.
55
+
56
+ ## Secrets
57
+
58
+ `Environment.__init__` takes `secrets`. The client passes `secrets` per-session in the `POST /sessions` body. Use this for per-rollout API keys (E2B sandbox, etc.) — they don't appear in the server's environment.
59
+
60
+ ## Sync vs async clients
61
+
62
+ Both `EnvironmentsAPI` and `AsyncEnvironmentsAPI` exist. The sync wrapper runs an async loop under the hood. For multi-rollout scenarios prefer async:
63
+
64
+ ```python
65
+ async with AsyncOpenReward(api_key="").environments as api:
66
+ env = api.get(name, base_url=URL)
67
+ async with env.session(task=task) as session:
68
+ ...
69
+ ```
70
+
71
+ ## Image handling
72
+
73
+ `ImageBlock.data` is **base64**, not raw bytes. The server-side `ImageBlock(data=base64.b64encode(png).decode(), mimeType="image/png")` matches the client-side `b.data` (still base64). Don't re-encode.
74
+
75
+ Canonical helper:
76
+
77
+ ```python
78
+ def _shot_block(sandbox) -> ImageBlock:
79
+ data = sandbox.screenshot()
80
+ return ImageBlock(data=base64.b64encode(data).decode("utf-8"), mimeType="image/png")
81
+ ```
82
+
83
+ ## Production deployment
84
+
85
+ The wordle and desktop ORS variants both deploy to HF Spaces using a minimal `Dockerfile.spaces`:
86
+
87
+ ```dockerfile
88
+ FROM python:3.11-slim
89
+ RUN useradd -m -u 1000 user
90
+ RUN pip install --no-cache-dir openreward pydantic <env-specific>
91
+ USER user
92
+ WORKDIR /home/user/app
93
+ COPY --chown=user . .
94
+ EXPOSE 7860
95
+ CMD ["python", "server.py", "--host", "0.0.0.0", "--port", "7860"]
96
+ ```
97
+
98
+ Plus `README.spaces.md` with the HF frontmatter. Push via:
99
+
100
+ ```python
101
+ api.add_space_secret(repo_id, "E2B_API_KEY", value)
102
+ api.upload_file(path_or_fileobj="Dockerfile.spaces", path_in_repo="Dockerfile", ...)
103
+ api.upload_file(path_or_fileobj="README.spaces.md", path_in_repo="README.md", ...)
104
+ ```
105
+
106
+ For **OpenReward.ai** deployment (the platform), the same files work — see [docs.openreward.ai](https://docs.openreward.ai/) for the GitHub-integration flow.
107
+
108
+ ## What can go wrong
109
+
110
+ - `pip install ors-sdk` — package doesn't exist on PyPI.
111
+ - Endpoint name mismatch — class `MyEnv` is served at `/myenv`, not `/my_env`.
112
+ - `OpenReward(base_url="https://X.hf.space")` ends up calling `https://matrix.X.hf.space` — broken DNS. Use `EnvironmentsAPI`.
113
+ - `setup()` not called — happens silently when an `__init__` raises before tools are registered. Check the server log.
@@ -0,0 +1,188 @@
1
+ ---
2
+ name: generate-verifiers-env
3
+ description: Builds a Verifiers (PrimeIntellect) variant of an RL environment. Use whenever someone asks to scaffold a Verifiers env, port to Verifiers, build an in-process toolkit, set up a `vf.ToolEnv` with a Rubric, or wire up a TRL `GRPOTrainer` rollout. Verifiers is the right framework when the user wants in-process tools (no HTTP server), structured tool calling driven by plain Python functions, composable reward rubrics with multiple grader functions, fast iteration with no Docker, or the cleanest path from prototype to TRL training. Output is a runnable `<env_dir>/verifiers/` folder with `env.py` (toolkit + standalone tool functions + `create_verifiers_env`), `rollout.py`, and `pyproject.toml`. Use for prompts like "make a verifiers env for X", "wrap my game in verifiers", or "set up a vf.ToolEnv".
4
+ ---
5
+
6
+ # generate-verifiers-env
7
+
8
+ Build the Verifiers variant of an env. Verifiers is **in-process** — no HTTP server, no Docker, no HF Space. The trainer (or a manual rollout) imports tool functions directly from `env.py`.
9
+
10
+ ## Concept
11
+
12
+ [PrimeIntellect Verifiers](https://github.com/PrimeIntellect-ai/verifiers) is a Python library — not a server framework. It provides `vf.ToolEnv` (multi-turn rollout), `vf.Rubric` (composable async graders), and adapters into TRL `GRPOTrainer`. The trainer or rollout owns the LLM client; the env owns the tools and the grader.
13
+
14
+ When the user has a shared domain module (`<domain>.py`) and wants a Verifiers variant, wrap it as a toolkit class plus standalone tool functions. Don't duplicate domain logic.
15
+
16
+ ## Archetypes
17
+
18
+ | Archetype | Hallmarks |
19
+ |---|---|
20
+ | **Pure-Python game** | One `@tool`-style function, terminal reward via rubric checking the trajectory. |
21
+ | **Stateful sandbox in-process** | Toolkit owns the sandbox (E2B, browser); `initialize()` is lazy; `cleanup()` is mandatory in `finally`. |
22
+ | **Vision env** | Drive the toolkit manually (skip `vf.ToolEnv` since vision content blocks aren't first-class in verifiers' rollout). Send the screenshot in the user message each turn. |
23
+
24
+ ## Two consumption paths (always provide both)
25
+
26
+ ### Path A — `DesktopToolkit`-style class (used by TRL adapter + manual rollout)
27
+
28
+ ```python
29
+ class WordleToolkit:
30
+ def __init__(self): ...
31
+ def initialize(self): ... # lazy E2B / state init
32
+ def cleanup(self): ... # kill sandbox
33
+ def reset(self): ... # new episode
34
+ def guess(self, word: str) -> str:
35
+ """Submit a 5-letter word guess. Returns colored feedback."""
36
+ ...
37
+ ```
38
+
39
+ Public methods are introspected as tools by the TRL adapter. Docstrings become tool descriptions.
40
+
41
+ ### Path B — `vf.ToolEnv` for native verifiers `env.evaluate(client, model)`
42
+
43
+ ```python
44
+ def create_verifiers_env():
45
+ import verifiers as vf
46
+ from datasets import Dataset
47
+ dataset = Dataset.from_list([{"question": t["task"], "answer": t["expected_output"]} for t in TASKS])
48
+ async def correctness(completion, answer, **kwargs) -> float:
49
+ # read from the completion trajectory; return 0.0–1.0
50
+ ...
51
+ rubric = vf.Rubric(funcs=[correctness])
52
+ return vf.ToolEnv(tools=TOOL_FUNCTIONS, max_turns=8, dataset=dataset, rubric=rubric, system_prompt="...")
53
+ ```
54
+
55
+ `TOOL_FUNCTIONS` is a list of **plain Python functions** (not bound methods). They can share state via a module-level toolkit instance.
56
+
57
+ ## Recommended file layout
58
+
59
+ The user picks the actual paths. The canonical shape:
60
+
61
+ ```
62
+ <env_dir>/verifiers/
63
+ ├── pyproject.toml # verifiers + e2b-* + datasets + python-dotenv + openai
64
+ ├── __init__.py
65
+ ├── env.py # Toolkit class + standalone tool fns + create_verifiers_env()
66
+ ├── rollout.py # Drives the toolkit manually with the openai client
67
+ └── README.md
68
+ ```
69
+
70
+ ## Implementation order
71
+
72
+ ### 1. The toolkit class
73
+
74
+ - `__init__` takes config (`api_key=""`, `app="firefox"`, etc.). **Don't** create the sandbox here — too eager.
75
+ - `initialize()` is the lazy creation hook. Always call it from each tool method.
76
+ - `cleanup()` kills the sandbox. Always call it from `finally` in the rollout.
77
+ - `reset()` calls `cleanup()` + reinitializes. Used between episodes by the TRL adapter.
78
+ - Each tool method:
79
+ - takes typed args (used for OpenAI tool-schema generation via `inspect`)
80
+ - has a docstring (becomes the tool description — first paragraph only)
81
+ - calls `self.initialize()` first, mutates state, returns a string
82
+
83
+ ### 2. Standalone tool functions for `vf.ToolEnv`
84
+
85
+ Module-level shared toolkit, plus thin wrappers:
86
+
87
+ ```python
88
+ _shared: Optional[WordleToolkit] = None
89
+ def _kit():
90
+ global _shared
91
+ if _shared is None:
92
+ _shared = WordleToolkit()
93
+ return _shared
94
+
95
+ def guess(word: str) -> str:
96
+ """Submit a 5-letter word guess."""
97
+ return _kit().guess(word)
98
+
99
+ TOOL_FUNCTIONS = [guess]
100
+ ```
101
+
102
+ Why both? The TRL adapter wants the toolkit class (per-rollout instance, isolated state). `vf.ToolEnv` wants free functions. Don't pick one — provide both.
103
+
104
+ ### 3. The rubric
105
+
106
+ Rubrics are composable graders. Each grader is `async def func(completion, answer, **kwargs) -> float`. Combine multiple in a `vf.Rubric(funcs=[...])` and they're averaged (or weighted, see verifiers docs).
107
+
108
+ For a single-criterion env, one grader suffices:
109
+
110
+ ```python
111
+ async def correctness(completion, answer, **kwargs) -> float:
112
+ if not completion: return 0.0
113
+ last = completion[-1].get("content", "") if isinstance(completion[-1], dict) else str(completion[-1])
114
+ return 1.0 if answer.strip() in last.strip() else 0.0
115
+ ```
116
+
117
+ For multi-criterion (e.g. computer-use envs that need both `terminate(success)` AND a state check):
118
+
119
+ ```python
120
+ async def correctness(completion, answer, **kwargs) -> float:
121
+ seen_success = any("terminated: success" in str(m) for m in completion)
122
+ seen_expected = any(answer in str(m) for m in completion)
123
+ return 1.0 if (seen_success and seen_expected) else (0.5 if seen_success else 0.0)
124
+ ```
125
+
126
+ ### 4. Rollout — `rollout.py`
127
+
128
+ Build OpenAI tool schemas from the function signatures + docstrings via `inspect`:
129
+
130
+ ```python
131
+ def func_to_openai_tool(fn):
132
+ sig = inspect.signature(fn)
133
+ hints = get_type_hints(fn)
134
+ doc = (fn.__doc__ or "").strip().split("\n\n")[0]
135
+ properties, required = {}, []
136
+ for name, p in sig.parameters.items():
137
+ ann = hints.get(name, str)
138
+ origin = get_origin(ann)
139
+ if origin in (list, "list"):
140
+ inner = get_args(ann)
141
+ properties[name] = {"type": "array", "items": {"type": "integer" if (inner and inner[0] is int) else "string"}}
142
+ elif ann is int: properties[name] = {"type": "integer"}
143
+ elif ann is float: properties[name] = {"type": "number"}
144
+ elif ann is bool: properties[name] = {"type": "boolean"}
145
+ else: properties[name] = {"type": "string"}
146
+ if p.default is inspect.Parameter.empty:
147
+ required.append(name)
148
+ return {"type": "function", "function": {
149
+ "name": fn.__name__, "description": doc,
150
+ "parameters": {"type": "object", "properties": properties, "required": required},
151
+ }}
152
+ ```
153
+
154
+ This pattern works for any toolkit. Use it as the standard adapter from Python signatures to OpenAI tool schemas.
155
+
156
+ For multimodal envs, drive the toolkit manually (don't use `vf.ToolEnv` since vision-content blocks aren't first-class in verifiers' rollout). Send the latest screenshot in the user message every turn:
157
+
158
+ ```python
159
+ text, b64 = kit._ctrl.screenshot() # if you exposed _ctrl
160
+ messages.append({"role": "user", "content": [
161
+ {"type": "text", "text": "Latest screenshot:"},
162
+ {"type": "image_url", "image_url": {"url": f"data:image/png;base64,{b64}"}},
163
+ ]})
164
+ ```
165
+
166
+ ## Validation gates
167
+
168
+ 1. **Toolkit imports cleanly** — `uv run python -c "from env import DesktopToolkit, TOOL_FUNCTIONS"`
169
+ 2. **`vf.ToolEnv` builds** — `uv run python -c "from env import create_verifiers_env; env = create_verifiers_env(); print(env)"`
170
+ 3. **Manual rollout** — `MAX_TURNS=3 uv run python rollout.py` runs end-to-end. Hits a real backend (E2B or whatever the env uses).
171
+
172
+ ## Gotchas
173
+
174
+ - **`ModuleNotFoundError: attrs`** — `e2b-desktop` transitively needs `attrs` but doesn't pin it. Add `attrs>=23.0` to `dependencies`.
175
+ - **TypedDict vs dataclass for verifiers data structures** — most are TypedDicts. Access by key, not attribute. (Same trap exists in skyrl-gym; we hit it during the desktop_env port.)
176
+ - **Tool-schema `**kwargs` is forbidden** — vLLM (used by some trainers) can't introspect `**kwargs` for JSON schema generation. Define explicit params, even if empty.
177
+ - **Don't return huge strings** — verifiers passes the result through to the model verbatim. A 100KB log dump will blow your context. Truncate / summarize in the tool method.
178
+
179
+ ## Reference
180
+
181
+ - `references/architecture.md` — `vf.ToolEnv` internals + Rubric composition + TRL adapter shape
182
+
183
+ ## Official documentation
184
+
185
+ - [PrimeIntellect-ai/verifiers](https://github.com/PrimeIntellect-ai/verifiers) — source repo
186
+ - [Prime Intellect Verifiers docs](https://docs.primeintellect.ai/verifiers/overview)
187
+ - [verifiers/docs/environments.md](https://github.com/PrimeIntellect-ai/verifiers/blob/main/docs/environments.md) — `ToolEnv` / `StatefulToolEnv` / `MultiTurnEnv` reference
188
+ - [verifiers on PyPI](https://pypi.org/project/verifiers/) — latest is 0.1.9+ (Jan 2026)
@@ -0,0 +1,119 @@
1
+ # Verifiers architecture (deep)
2
+
3
+ ## Conceptual model
4
+
5
+ Verifiers is **not** a server framework. It's a Python library that gives you:
6
+
7
+ 1. A `vf.ToolEnv` class that runs a multi-turn tool-calling rollout against any OpenAI-compatible client.
8
+ 2. A `vf.Rubric` class that aggregates async grader functions into a single reward.
9
+ 3. Adapters into TRL (`GRPOTrainer`) so the env can be a plain Python object passed to the trainer.
10
+
11
+ The trainer or rollout owns the LLM client. The env owns the tools and the grader. There's no HTTP layer.
12
+
13
+ ## `vf.ToolEnv` shape
14
+
15
+ ```python
16
+ env = vf.ToolEnv(
17
+ tools: list[Callable], # plain Python functions, signatures = OpenAI tool schemas
18
+ max_turns: int, # hard cap per rollout
19
+ dataset: Dataset, # HF Dataset with `question`, `answer` columns
20
+ rubric: vf.Rubric, # grader composition
21
+ system_prompt: str = "",
22
+ parser: Optional[Parser] = None, # optional output parsing
23
+ )
24
+ ```
25
+
26
+ Tool functions are introspected via `inspect.signature` + `get_type_hints` + the docstring. The first paragraph of the docstring becomes the tool description.
27
+
28
+ ## Rubric
29
+
30
+ ```python
31
+ async def correctness(completion, answer, **kwargs) -> float: ...
32
+ async def efficiency(completion, answer, **kwargs) -> float: ...
33
+
34
+ rubric = vf.Rubric(funcs=[correctness, efficiency])
35
+ ```
36
+
37
+ `completion` is the message trajectory (list of dicts in OpenAI message format). `answer` is the ground truth from the dataset row. Each grader returns a float; the rubric averages them by default. Per-grader weights via `Rubric(funcs=[...], weights=[...])`.
38
+
39
+ The rubric runs **after** the rollout completes. There's no per-step reward — that's an ORS feature, not a Verifiers one.
40
+
41
+ ## TRL adapter
42
+
43
+ For training with `GRPOTrainer`, Verifiers exposes an adapter that wraps a toolkit class:
44
+
45
+ ```python
46
+ from trl import GRPOTrainer
47
+ trainer = GRPOTrainer(
48
+ model=...,
49
+ environment_factory=DesktopToolkit, # the class, not an instance
50
+ environment_config={"app": "firefox"},
51
+ reward_funcs=[correctness], # the rubric's funcs
52
+ ...
53
+ )
54
+ ```
55
+
56
+ The factory is invoked once per rollout. The toolkit's public methods (those without leading `_`) become the tools available to the model.
57
+
58
+ ## Toolkit class contract
59
+
60
+ ```python
61
+ class DesktopToolkit:
62
+ def __init__(self, **config): ...
63
+ def initialize(self): ... # lazy backend init (E2B, browser, etc.)
64
+ def cleanup(self): ... # release backend
65
+ def reset(self): ... # cleanup + new episode
66
+ def my_tool(self, x: int) -> str:
67
+ """One-line description (becomes the tool description).
68
+
69
+ Optional longer block (ignored).
70
+ """
71
+ ...
72
+ ```
73
+
74
+ Public methods → tools. Private (leading `_`) → not exposed. Use this for shared helpers.
75
+
76
+ ## Two consumption paths in one file
77
+
78
+ Provide **both** in `env.py`:
79
+
80
+ ```python
81
+ # Path A — for the TRL adapter:
82
+ class DesktopToolkit: ...
83
+
84
+ # Path B — for native vf.ToolEnv:
85
+ _shared = None
86
+ def _kit(): ...
87
+ def my_tool(x: int) -> str: return _kit().my_tool(x)
88
+ TOOL_FUNCTIONS = [my_tool, ...]
89
+
90
+ def create_verifiers_env() -> vf.ToolEnv: ...
91
+ ```
92
+
93
+ Why both: the TRL adapter expects a class with per-rollout instances (state isolation between concurrent rollouts in a batch). `vf.ToolEnv` expects free functions. The shared `_kit()` lazy-loads a single toolkit when used the second way.
94
+
95
+ ## Tool-schema introspection rules
96
+
97
+ - Type hints become JSON-schema types: `int → integer`, `float → number`, `bool → boolean`, `str → string`, `List[int] → {type: array, items: {type: integer}}`.
98
+ - Default values mark parameters as optional.
99
+ - The first paragraph of the docstring is the description. Subsequent text is dropped.
100
+ - `**kwargs` is **forbidden** by some downstream trainers (vLLM-based) — JSON schema generation fails. Always use explicit params.
101
+
102
+ ## Grader patterns
103
+
104
+ | Pattern | Use when |
105
+ |---|---|
106
+ | **Substring match** — `answer in completion[-1]["content"]` | Deterministic answer (math, code output). |
107
+ | **Multi-criterion** — return 0.0 / 0.5 / 1.0 based on combinations | Tasks needing both an action AND a state check (e.g. computer-use envs). |
108
+ | **LLM judge** — call another model in the grader | Subjective tasks (writing quality, creative). |
109
+ | **Unit tests** — execute test code in a sandbox | Coding tasks. |
110
+
111
+ Always return floats in `[0.0, 1.0]` unless you're explicitly using a different scale.
112
+
113
+ ## What can go wrong
114
+
115
+ - `**kwargs in tool` — vLLM JSON-schema fail. Use explicit params.
116
+ - TypedDicts everywhere — `BaseTextEnvStepOutput` from skyrl-gym, similar in verifiers internals. Access by key.
117
+ - Returning huge strings from tools — fills the context. Truncate / summarize at the tool boundary.
118
+ - Forgetting `cleanup()` in the rollout `finally` — leaks sandboxes; cost adds up.
119
+ - Module-level shared state without lazy init — instantiates the backend at import time, which breaks `python -c "from env import ..."` smoke tests.