@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,461 @@
1
+ #!/usr/bin/env python3
2
+ """Cursor lifecycle hook. Cursor uses its own event names and output schemas,
3
+ so this adapter translates them onto the shared tezgah core:
4
+
5
+ sessionStart -> {"additional_context": <shared context>}
6
+ preToolUse -> {"permission": "allow"|"deny", "agent_message": ...}
7
+ (the shared gate: grep-only explorer, first identifier
8
+ grep nudge, attribution and test-skip on the write tools)
9
+ beforeMCPExecution -> {"permission": "allow"} for the code graph, a deny
10
+ from the gate's content rules on an MCP effect, else {}
11
+ subagentStart -> {"additional_context": <short contract brief>} for the
12
+ delegate, or deny for a grep-only explorer
13
+ subagentStop -> record orch and a record-only `subagent_end` verdict
14
+ on its `summary`, no followup
15
+ postToolUse -> {"additional_context": <provenance | reinforce>}: the
16
+ untrusted-content label on a result that came from
17
+ outside the user, the taint notice on an effect made in
18
+ a turn that read one, and the once-per-session code-graph
19
+ reinforcement on a graph/consult call
20
+ postToolUseFailure -> record usage; one-line recovery hint
21
+ after*Execution/Edit-> record usage, no output (observers)
22
+ afterAgentResponse -> remember the reply for the stop decision, no output
23
+ stop -> block a done/tested claim no check backs
24
+ ({"decision": "block", "reason": ...}, which Cursor
25
+ documents as an automatic follow-up - the native
26
+ spelling is {"followup_message": ...})
27
+ beforeSubmitPrompt -> {"continue": true}
28
+ Everything else answers "{}" and never blocks.
29
+
30
+ Cursor names its own tools, so `hooks.json` has to name them too: the matcher on
31
+ `preToolUse` is a regex over the tool type, and Cursor's edit path is the `Write`
32
+ tool (its docs map Claude's `Edit` onto `Write`). The matcher therefore lists
33
+ `Write` plus the other spellings an edit tool is known by (`Edit`, `MultiEdit`,
34
+ `NotebookEdit`); without them the platform never runs this hook for a file write
35
+ and the gate's write branches - a test-skip marker added to a test file, a credit
36
+ line inside file content - cannot fire at all. Exactly which name a given Cursor
37
+ build sends is not verifiable from this repo, which is why the list is explicit
38
+ rather than a wildcard: a miss costs only that half of the gate, and an extra
39
+ alternative costs nothing because an unknown name passes the gate untouched.
40
+ """
41
+ import json
42
+ import os
43
+ import sys
44
+
45
+ ROOT = os.path.dirname(os.path.dirname(os.path.dirname(os.path.realpath(__file__))))
46
+ sys.path.insert(0, os.path.join(ROOT, "hooks"))
47
+ from tezgah_guard import attest_session, import_failed, safe # noqa: E402
48
+ try:
49
+ from tezgah_context import ( # noqa: E402
50
+ command_text, context_for, record, shell_kind, slug, under)
51
+ from tezgah_gate import decision, explored # noqa: E402
52
+ from tezgah_integrity import ( # noqa: E402
53
+ SUBAGENT_CHANNEL, bind_session, note, note_tool, ran_nothing, report_bytes,
54
+ stop_reason)
55
+ from tezgah_paths import cache_dir, off # noqa: E402
56
+ from tezgah_untrusted import marks # noqa: E402
57
+ except Exception as exc:
58
+ import_failed(exc)
59
+
60
+ # How many times one stop chain may be refused (hooks/projects-stop.py names the
61
+ # same constant): one, deliberately; raising it is owner decision 11. Cursor's
62
+ # `stop` payload carries `loop_count` (the follow-ups already sent in this chain)
63
+ # and no `stop_hook_active` (cursor-agent 2026.10.01, captured 2026-10-07); the
64
+ # flag is still read for a build that sends it.
65
+ STOP_REASKS = 1
66
+
67
+
68
+ def asked(payload):
69
+ """How many follow-ups tezgah's Stop refusals already started in this chain."""
70
+ try:
71
+ count = int(payload.get("loop_count") or 0)
72
+ except (TypeError, ValueError):
73
+ count = 0
74
+ return max(count, 1 if payload.get("stop_hook_active") else 0)
75
+
76
+
77
+ ALLOW = {"permission": "allow"}
78
+ # MCP tool names that are a code graph call: codegraph serves every tool as
79
+ # `mcp__codegraph__<tool>`, so the server name in the blob is what identifies
80
+ # one, whatever the tool is called.
81
+ GRAPH = ("codegraph",)
82
+ # Cursor tool names -> the shared gate's vocabulary. Keyed lowercase so a build
83
+ # that spells a tool either way maps to the same name; the write tools
84
+ # (`Write` and the other edit spellings) pass through unchanged, as the gate
85
+ # knows them already.
86
+ GATE_TOOLS = {"shell": "Bash", "read": "Read", "grep": "Grep"}
87
+ # The shell tool spellings the `preToolUse` matcher names: their outcome is the
88
+ # exit code, not the event.
89
+ SHELLS = ("shell", "bash", "powershell", "pwsh")
90
+
91
+
92
+ def gate_name(name):
93
+ """The tool name the gate denies under and the ledger row records.
94
+
95
+ `call_id` hashes the name it is handed, so mapping Cursor's `Shell` onto the
96
+ gate's `Bash` on the PreToolUse side alone gives one call two ids: the
97
+ PostToolUse row keeps the raw name, the loop guard reads a history that never
98
+ matches, and it never denies. Both halves map through here."""
99
+ return GATE_TOOLS.get(str(name or "").lower(), name)
100
+
101
+
102
+ REINFORCE = ("tezgah contract active: keep using the code graph "
103
+ "(codegraph_explore/codegraph_callers) for structure and consult "
104
+ "for a second opinion.")
105
+ RECOVERY = ("tezgah: tool call failed. Read the error, fix the cause, then "
106
+ "re-run; prefer codegraph_explore/codegraph_callers over guessing "
107
+ "at code.")
108
+
109
+
110
+ def cwd_of(payload):
111
+ return (payload.get("cwd") or (payload.get("workspace_roots") or [None])[0]
112
+ or os.getcwd())
113
+
114
+
115
+ def source_tool(payload):
116
+ """The tool name the provenance test (`untrusted_source`) reads.
117
+
118
+ Cursor names an MCP tool by its server (`mcp_server_name`) plus the raw tool
119
+ name, while the shared vocabulary's shape is `mcp__<server>__<tool>` - the
120
+ same translation `gate_name` does for the gate, so the prefix test stays in
121
+ one place."""
122
+ name = payload.get("tool_name", "") or ""
123
+ server = payload.get("mcp_server_name") or ""
124
+ return "mcp__%s__%s" % (server, name) if server else name
125
+
126
+
127
+ def classify(payload, event=""):
128
+ """The used-tool kind for a tool/observer payload, or None when
129
+ undetectable. Reads every field shape Cursor sends: tool_input, command,
130
+ mcp_server_name.
131
+
132
+ A shell call is the kind whose program actually ran (shell_kind), never a
133
+ substring of the payload: naming `consult` in an argument is not using it,
134
+ and the status mark turns green only on a real call."""
135
+ name = payload.get("tool_name", "") or ""
136
+ server = payload.get("mcp_server_name", "") or ""
137
+ blob = " ".join((str(name), str(server),
138
+ json.dumps(payload.get("tool_input") or {}),
139
+ str(payload.get("command") or "")))
140
+ low = blob.lower()
141
+ if any(k in low for k in GRAPH):
142
+ return "graph"
143
+ if name in ("Task", "task"):
144
+ return "orch"
145
+ shell = name.lower() in ("shell", "bash") or event == "afterShellExecution"
146
+ if shell:
147
+ # `afterShellExecution` carries the command on the event itself, a
148
+ # postToolUse payload inside tool_input.
149
+ return shell_kind(command_text(payload.get("command"))
150
+ or command_text(payload.get("tool_input")))
151
+ return None
152
+
153
+
154
+ def gate_input(inp):
155
+ """The tool input in the shared gate's vocabulary.
156
+
157
+ Cursor's `Write` tool describes its change the way its `afterFileEdit`
158
+ payload does - `edits: [{old_string, new_string}]` - while the gate reads the
159
+ old_string/new_string pair, so fold the list into that shape. Every other
160
+ field is passed through untouched."""
161
+ edits = inp.get("edits")
162
+ if not isinstance(edits, list):
163
+ return inp
164
+ out = dict(inp)
165
+ for key in ("old_string", "new_string"):
166
+ if not out.get(key):
167
+ out[key] = "\n".join(str(e.get(key, "")) for e in edits
168
+ if isinstance(e, dict))
169
+ return out
170
+
171
+
172
+ def result_size(result):
173
+ """The size of the result this event reported, or None when it carries none.
174
+
175
+ A size, never the body: the ledger records that a call returned something,
176
+ never what it returned, and the one reader asks only whether it is non-zero.
177
+ The measure is the Claude-family writer's (`hooks/projects-posttooluse.py`):
178
+ a container is measured by its top-level length - O(1), no re-serialization -
179
+ and Cursor reports the result as a string (`tool_output`, `output`), so its
180
+ length is the size. A value with no length is recorded as a non-empty result,
181
+ exactly as the writer records one, and only a missing result leaves the field
182
+ out - an absent field is never written as 0."""
183
+ if isinstance(result, (str, bytes, bytearray, list, tuple, dict, set,
184
+ frozenset)):
185
+ return len(result)
186
+ return 1 if result is not None else None
187
+
188
+
189
+ def call_failed(payload):
190
+ """The outcome a `postToolUse` payload reports, as `note_tool`'s `failed`.
191
+
192
+ A failure the tool itself raised arrives on `postToolUseFailure`, so this
193
+ event is a success of the call - the split Claude's adapter reads. A shell
194
+ call is the exception: a non-zero exit is still a call that ran, and Cursor
195
+ carries the status inside `tool_output` (documented as the JSON-stringified
196
+ result, `{"exitCode": 0, "stdout": ...}`), so a shell row is a pass or a
197
+ failure only by that `exitCode`. A shell result with no integer exitCode is
198
+ recorded as a check that RAN (`None`), never as a fabricated exit 0."""
199
+ out = payload.get("tool_output")
200
+ if isinstance(out, str):
201
+ try:
202
+ out = json.loads(out)
203
+ except ValueError:
204
+ out = None
205
+ code = out.get("exitCode") if isinstance(out, dict) else None
206
+ if isinstance(code, int) and not isinstance(code, bool):
207
+ return code != 0
208
+ if str(payload.get("tool_name") or "").lower() in SHELLS:
209
+ return None
210
+ return False
211
+
212
+
213
+ def first_time(session_id, tag):
214
+ """True the first time a tag is seen for a session; fail-open when unwritable."""
215
+ if not session_id:
216
+ return True
217
+ mark = os.path.join(cache_dir(), "reinforced", slug(str(session_id)), tag)
218
+ if os.path.exists(mark):
219
+ return False
220
+ try:
221
+ os.makedirs(os.path.dirname(mark), exist_ok=True)
222
+ open(mark, "w", encoding="utf-8").close()
223
+ except OSError:
224
+ pass
225
+ return True
226
+
227
+
228
+ def answer_path(session_id):
229
+ """Where the last assistant text of a conversation is kept.
230
+
231
+ Cursor's `stop` payload carries only `status`/`loop_count`, so the reply the
232
+ Stop rule has to read arrives on the earlier `afterAgentResponse`, which
233
+ documents `{"text": "<assistant final text>"}`. One file per conversation,
234
+ overwritten."""
235
+ return os.path.join(cache_dir(), "answer", slug(str(session_id or "nosession")))
236
+
237
+
238
+ # A long reply is kept by its two ends rather than by one slice: the Stop rule's
239
+ # placating-opener check anchors at the very start of the reply
240
+ # (`tezgah_integrity.SYCOPHANT`), so a tail-only cut handed that rule text it
241
+ # never reads and the rule could not fire on any reply longer than the budget;
242
+ # the tail is what keeps a closing line - and the `doğrulanmadı` an honest reply
243
+ # ends on - visible to the rest of the rule. Same total budget as the single
244
+ # slice it replaces.
245
+ ANSWER_HEAD, ANSWER_TAIL = 3000, 1000
246
+ ANSWER_CUT = "\n\n[... %d characters dropped ...]\n\n"
247
+
248
+
249
+ def remember_answer(session_id, text):
250
+ """Keep the reply `afterAgentResponse` handed over, best effort.
251
+
252
+ A reply that fits in `ANSWER_HEAD + ANSWER_TAIL` is stored whole. A longer
253
+ one is stored as that many characters of its head, `ANSWER_CUT` with the
254
+ count of what was dropped, then `ANSWER_TAIL` characters of its tail - so
255
+ both the opener the Stop rule reads and the closing marker it must not lose
256
+ survive the round trip. A reply with no `conversation_id` is not stored; a
257
+ file that cannot be written is not fatal."""
258
+ if not session_id or not text:
259
+ return
260
+ path = answer_path(session_id)
261
+ try:
262
+ os.makedirs(os.path.dirname(path), exist_ok=True)
263
+ text = str(text)
264
+ dropped = len(text) - ANSWER_HEAD - ANSWER_TAIL
265
+ if dropped > 0:
266
+ text = text[:ANSWER_HEAD] + ANSWER_CUT % dropped + text[-ANSWER_TAIL:]
267
+ with open(path, "w", encoding="utf-8") as fh:
268
+ fh.write(text)
269
+ except OSError:
270
+ pass
271
+
272
+
273
+ def last_answer(session_id):
274
+ """The reply remembered for this conversation, or ""."""
275
+ try:
276
+ with open(answer_path(session_id), encoding="utf-8") as fh:
277
+ return fh.read()
278
+ except OSError:
279
+ return ""
280
+
281
+
282
+ def dispatch(payload):
283
+ """The event handling: everything main does but the envelope."""
284
+ event = payload.get("hook_event_name", "")
285
+ cwd = cwd_of(payload)
286
+ session_id = (payload.get("conversation_id") or payload.get("session_id")
287
+ or payload.get("parent_conversation_id"))
288
+ bind_session(session_id) # the switch latch (tezgah_paths.off); dispatch runs in safe()
289
+ kind = classify(payload, event)
290
+ quiet = off("reminder-off")
291
+
292
+ if event == "sessionStart":
293
+ safe(session_id, attest_session, "cursor", session_id, cwd)
294
+ text = context_for("session_start", cwd, payload)
295
+ out = {"additional_context": text} if text else {}
296
+ elif event == "postToolUse":
297
+ if kind:
298
+ record(session_id, kind)
299
+ inp = gate_input(payload.get("tool_input") or {})
300
+ # read before this call's row lands: `source` on the row is the taint's
301
+ # own mark, and `marks` answers about the turn the call arrived in. Like
302
+ # every other tezgah surface but the status line, both halves are armed
303
+ # only inside a configured root.
304
+ source, notice = (marks(source_tool(payload), inp, session_id,
305
+ payload.get("tool_output"))
306
+ if under(cwd) else (None, None))
307
+ # A ledger row only inside a root, like Claude's PostToolUse, which
308
+ # returns early off-root; this row and the failure, shell and edit rows
309
+ # below used to record for any cwd (audit L-4, INT-07).
310
+ if under(cwd):
311
+ note_tool(session_id, gate_name(payload.get("tool_name", "")), inp,
312
+ failed=call_failed(payload), source=source, cwd=cwd,
313
+ out_bytes=(report_bytes(payload.get("tool_output"))
314
+ if source == SUBAGENT_CHANNEL
315
+ else result_size(payload.get("tool_output"))),
316
+ empty_run=ran_nothing(payload.get("tool_output")))
317
+ reinforce = None
318
+ if (kind in ("graph", "consult") and under(cwd) and not quiet
319
+ and first_time(session_id, "graph")):
320
+ reinforce = REINFORCE
321
+ # both are one line for the model, on the result they belong to; a turn
322
+ # that earns both reads them together rather than one replacing the other
323
+ text = "\n".join(t for t in (notice, reinforce) if t)
324
+ out = {"additional_context": text} if text else {}
325
+ elif event == "postToolUseFailure":
326
+ if kind:
327
+ record(session_id, kind)
328
+ # Cursor documents this event's `is_interrupt` ("whether this failure was
329
+ # caused by a user interrupt/cancellation") and `failure_type`
330
+ # ("error" | "timeout" | "permission_denied"). A cancellation, and a call
331
+ # the user's policy denied before it ran, are both the host reporting no
332
+ # outcome for the call - recording either as a hardcoded failure made a
333
+ # stopped `pytest` a `verify_fail` that armed the Stop rule's
334
+ # partial-failure branch and counted an exit 1 in the error rate. What
335
+ # stays `failed=True` is the third shape, a genuine `error`/`timeout` the
336
+ # tool reported, exactly as before. `is True` rather than truthiness: a
337
+ # host that sends the string "false" would otherwise turn a real failure
338
+ # into an interruption.
339
+ ftype = str(payload.get("failure_type") or "")
340
+ if under(cwd):
341
+ note_tool(session_id, gate_name(payload.get("tool_name", "")),
342
+ gate_input(payload.get("tool_input") or {}), failed=True,
343
+ interrupted=(payload.get("is_interrupt") is True
344
+ or ftype == "permission_denied"), cwd=cwd)
345
+ out = {"additional_context": RECOVERY} if under(cwd) and not quiet else {}
346
+ elif event in ("afterShellExecution", "afterMCPExecution", "afterFileEdit"):
347
+ if kind:
348
+ record(session_id, kind)
349
+ if event == "afterFileEdit" and under(cwd):
350
+ note(session_id, "edit",
351
+ payload.get("file_path") or payload.get("path") or "")
352
+ elif event == "afterShellExecution" and under(cwd):
353
+ # the command rides the event, not tool_input; the name is mapped so
354
+ # this observer's row lands on the same id as the gated call, and
355
+ # failed=None because the event carries no outcome. Cursor names
356
+ # `output` the terminal text: only its size is kept, never the text.
357
+ note_tool(session_id, gate_name("shell"),
358
+ {"command": payload.get("command")
359
+ or (payload.get("tool_input") or {}).get("command", "")},
360
+ failed=None, out_bytes=result_size(payload.get("output")),
361
+ cwd=cwd, empty_run=ran_nothing(payload.get("output")))
362
+ out = {}
363
+ elif event == "beforeMCPExecution":
364
+ if kind:
365
+ record(session_id, kind)
366
+ # allow the code graph explicitly; every other server's call meets the
367
+ # gate's content rules under the shared `mcp__<server>__<tool>` name (a
368
+ # deny), else no decision, so a user policy is never overridden.
369
+ # Cursor sends `tool_input` as a JSON string.
370
+ inp = payload.get("tool_input") or {}
371
+ if isinstance(inp, str):
372
+ try:
373
+ inp = json.loads(inp)
374
+ except ValueError:
375
+ inp = {}
376
+ reason = None if kind == "graph" else decision(
377
+ "mcp__%s__%s" % (payload.get("mcp_server_name") or "",
378
+ payload.get("tool_name") or ""),
379
+ inp if isinstance(inp, dict) else {}, cwd, session_id)
380
+ if reason:
381
+ out = {"permission": "deny", "agent_message": reason}
382
+ else:
383
+ out = dict(ALLOW) if kind == "graph" else {}
384
+ elif event == "subagentStart":
385
+ if explored(payload.get("subagent_type")):
386
+ out = {"permission": "deny", "user_message": "grep-only explorer blocked; use general-purpose with the code graph tools"}
387
+ else:
388
+ record(session_id, "orch")
389
+ out = {"permission": "allow"}
390
+ # The delegate is a fresh context that must know the rules exist, so
391
+ # it gets the same short brief every other host hands a subagent.
392
+ # Cursor documents no context field on subagentStart (its output is
393
+ # permission + user_message, which is user-facing and deny-only), so
394
+ # the brief rides `additional_context` - the key Cursor uses for
395
+ # "context to add to the conversation" on sessionStart and
396
+ # postToolUse. Unverified for this event: a build that drops the
397
+ # unknown key leaves the delegate with the session context it already
398
+ # inherits, and the deny path above stays untouched either way.
399
+ brief = context_for("subagent_start", cwd, payload)
400
+ if brief:
401
+ out["additional_context"] = brief
402
+ elif event == "subagentStop":
403
+ record(session_id, "orch")
404
+ # A subagent's end, judged record-only (ADR 011): one `subagent_end`
405
+ # row from its `summary`, never a follow-up. Under its own guard, so a
406
+ # record that fails still leaves this event's empty answer.
407
+ if (payload.get("status") in (None, "completed")
408
+ and not off("verify-off") and under(cwd)):
409
+ safe(session_id, stop_reason, payload.get("summary") or "",
410
+ session_id, cwd=cwd, subagent=True)
411
+ out = {}
412
+ elif event == "preToolUse":
413
+ tool = payload.get("tool_name", "")
414
+ inp = payload.get("tool_input") or {}
415
+ reason = decision(gate_name(tool), gate_input(inp), cwd, session_id)
416
+ out = ({"permission": "deny", "agent_message": reason}
417
+ if reason else dict(ALLOW))
418
+ elif event == "afterAgentResponse":
419
+ # the reply is only available here; `stop` reads it back
420
+ remember_answer(session_id, payload.get("text") or "")
421
+ out = {}
422
+ elif event == "stop":
423
+ # Cursor's Stop surface: the platform treats a "block" decision as an
424
+ # automatic follow-up, and the native spelling is `followup_message`.
425
+ # Only a finished turn is nudged - an aborted or errored one has no claim
426
+ # to check - and `loop_count` is the platform's own cap on follow-ups.
427
+ out = {}
428
+ if (payload.get("status") in (None, "completed")
429
+ and asked(payload) < STOP_REASKS
430
+ and not off("verify-off") and under(cwd)):
431
+ reason = stop_reason(last_answer(session_id), session_id, cwd=cwd)
432
+ if reason:
433
+ out = {"decision": "block", "reason": reason}
434
+ elif event == "beforeSubmitPrompt":
435
+ # per-turn: the reminder plus whichever conditional rule this prompt's
436
+ # task class arms (context_for classifies the submitted prompt)
437
+ text = context_for("user_prompt", cwd, payload)
438
+ out = {"continue": True}
439
+ if text:
440
+ out["additional_context"] = text
441
+ else:
442
+ out = {}
443
+ return out
444
+
445
+
446
+ def main():
447
+ try:
448
+ payload = json.load(sys.stdin)
449
+ except Exception:
450
+ payload = {}
451
+ if not isinstance(payload, dict):
452
+ payload = {}
453
+ # one guard around the whole dispatch: a crash inside the event handling
454
+ # costs this envelope, never the session (hooks/tezgah_guard.safe), and the
455
+ # session id is the one the ledger row is filed under
456
+ session_id = (payload.get("conversation_id") or payload.get("session_id")
457
+ or payload.get("parent_conversation_id"))
458
+ print(json.dumps(safe(session_id, dispatch, payload) or {}))
459
+
460
+
461
+ main()
@@ -0,0 +1,44 @@
1
+ {
2
+ "version": 1,
3
+ "hooks": {
4
+ "sessionStart": [
5
+ { "command": "\"${TEZGAH_PYTHON:-python3}\" \"@CURSOR_HOOK@\"", "timeout": 10 }
6
+ ],
7
+ "preToolUse": [
8
+ { "command": "\"${TEZGAH_PYTHON:-python3}\" \"@CURSOR_HOOK@\"", "timeout": 5, "matcher": "Shell|PowerShell|pwsh|Grep|Task|Write|Edit|MultiEdit|NotebookEdit" }
9
+ ],
10
+ "postToolUse": [
11
+ { "command": "\"${TEZGAH_PYTHON:-python3}\" \"@CURSOR_HOOK@\"", "timeout": 10 }
12
+ ],
13
+ "postToolUseFailure": [
14
+ { "command": "\"${TEZGAH_PYTHON:-python3}\" \"@CURSOR_HOOK@\"", "timeout": 10 }
15
+ ],
16
+ "beforeMCPExecution": [
17
+ { "command": "\"${TEZGAH_PYTHON:-python3}\" \"@CURSOR_HOOK@\"", "timeout": 5 }
18
+ ],
19
+ "afterShellExecution": [
20
+ { "command": "\"${TEZGAH_PYTHON:-python3}\" \"@CURSOR_HOOK@\"", "timeout": 10 }
21
+ ],
22
+ "afterMCPExecution": [
23
+ { "command": "\"${TEZGAH_PYTHON:-python3}\" \"@CURSOR_HOOK@\"", "timeout": 10 }
24
+ ],
25
+ "afterFileEdit": [
26
+ { "command": "\"${TEZGAH_PYTHON:-python3}\" \"@CURSOR_HOOK@\"", "timeout": 10 }
27
+ ],
28
+ "afterAgentResponse": [
29
+ { "command": "\"${TEZGAH_PYTHON:-python3}\" \"@CURSOR_HOOK@\"", "timeout": 5 }
30
+ ],
31
+ "subagentStart": [
32
+ { "command": "\"${TEZGAH_PYTHON:-python3}\" \"@CURSOR_HOOK@\"", "timeout": 5 }
33
+ ],
34
+ "subagentStop": [
35
+ { "command": "\"${TEZGAH_PYTHON:-python3}\" \"@CURSOR_HOOK@\"", "timeout": 10 }
36
+ ],
37
+ "beforeSubmitPrompt": [
38
+ { "command": "\"${TEZGAH_PYTHON:-python3}\" \"@CURSOR_HOOK@\"", "timeout": 10 }
39
+ ],
40
+ "stop": [
41
+ { "command": "\"${TEZGAH_PYTHON:-python3}\" \"@CURSOR_HOOK@\"", "timeout": 10 }
42
+ ]
43
+ }
44
+ }
@@ -0,0 +1,21 @@
1
+ {
2
+ "hooks": {
3
+ "SessionStart": [
4
+ { "hooks": [ { "type": "command", "command": "\"${TEZGAH_PYTHON:-python3}\" \"${CLAUDE_PLUGIN_ROOT}/hooks/projects-auto-init.py\"", "timeout": 10 } ] }
5
+ ],
6
+ "SubagentStart": [
7
+ { "hooks": [ { "type": "command", "command": "\"${TEZGAH_PYTHON:-python3}\" \"${CLAUDE_PLUGIN_ROOT}/hooks/projects-auto-init.py\"", "timeout": 10 } ] }
8
+ ],
9
+ "UserPromptSubmit": [
10
+ { "hooks": [ { "type": "command", "command": "\"${TEZGAH_PYTHON:-python3}\" \"${CLAUDE_PLUGIN_ROOT}/hooks/projects-auto-init.py\"", "timeout": 10 } ] }
11
+ ],
12
+ "PreToolUse": [
13
+ { "matcher": "Agent|agent|Task|task|Grep|grep|Bash|bash|PowerShell|pwsh|Shell|shell|subagent|Edit|Write|MultiEdit|NotebookEdit", "hooks": [ { "type": "command", "command": "\"${TEZGAH_PYTHON:-python3}\" \"${CLAUDE_PLUGIN_ROOT}/hooks/projects-pretooluse.py\"", "timeout": 5 } ] },
14
+ { "matcher": "^mcp__(?:.*[^A-Za-z0-9])?(?:append|cancel|clear|click|close|comment|commit|copy|create|delete|deploy|drag|edit|email|evaluate|exec|execute|fill|insert|install|kill|launch|merge|message|mkdir|move|navigate|notify|patch|pause|post|press|print|publish|push|put|release|remove|rename|replace|reply|resume|review|run|save|send|set|share|skip|start|stop|submit|swipe|tag|tap|terminate|type|uninstall|update|upload|write)(?:[^A-Za-z0-9].*)?$", "hooks": [ { "type": "command", "command": "\"${TEZGAH_PYTHON:-python3}\" \"${CLAUDE_PLUGIN_ROOT}/hooks/projects-pretooluse.py\"", "timeout": 5 } ] }
15
+ ],
16
+ "PostToolUse": [
17
+ { "matcher": "Edit|edit|Write|write|MultiEdit|NotebookEdit|Bash|bash|PowerShell|pwsh|str_replace_editor|WebFetch|WebSearch|web_fetch|web_search|fetch|mcp__.*", "hooks": [ { "type": "command", "command": "TEZGAH_CALL_OUTCOME=none \"${TEZGAH_PYTHON:-python3}\" \"${CLAUDE_PLUGIN_ROOT}/hooks/projects-posttooluse.py\"", "timeout": 5 } ] },
18
+ { "matcher": "Agent|Task|Skill", "hooks": [ { "type": "command", "command": "TEZGAH_CALL_OUTCOME=none \"${TEZGAH_PYTHON:-python3}\" \"${CLAUDE_PLUGIN_ROOT}/hooks/projects-posttooluse.py\"", "timeout": 5 } ] }
19
+ ]
20
+ }
21
+ }
@@ -0,0 +1,138 @@
1
+ // tezgah status line for the DeepSeek Harness Web UI, browser half.
2
+ //
3
+ // Renders the same marks `tezgah-status` prints on the other hosts, but colored
4
+ // by state (green in force, yellow on-demand, red off). Hover shows the legend;
5
+ // a click pins it open. Refresh is visibility-gated: it stops while the tab is
6
+ // hidden and fires once on return, so an idle Web UI is not polling.
7
+ window.__ModuleLoader__.load({
8
+ id: "tezgah-dsh-statusline",
9
+ factory: (require) => {
10
+ var module = { exports: {} };
11
+ var exports = module.exports;
12
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
13
+ let react = require("react");
14
+ let react_jsx_runtime = require("react/jsx-runtime");
15
+
16
+ const REFRESH_MS = 10000;
17
+ // Fixed, theme-agnostic colors: the marks must read on light and dark.
18
+ const STATE_COLOR = { on: "#3fb950", ready: "#d29922", off: "#f85149",
19
+ info: "var(--dsw-alias-label-tertiary)" };
20
+
21
+ /**
22
+ * One status line for a session, polled from the host route only while the
23
+ * tab is visible. The text and glyphs come from the host, so the component
24
+ * owns layout and color, not the wording.
25
+ * @param props - the slot's session id plus any injected services.
26
+ */
27
+ function TezgahStatusLine({ sessionId }) {
28
+ const [data, setData] = react.useState({ segments: [], legend: "" });
29
+ const [open, setOpen] = react.useState(false);
30
+ react.useEffect(() => {
31
+ let alive = true;
32
+ let timer;
33
+ const load = async () => {
34
+ try {
35
+ if (typeof document !== "undefined" && document.hidden) return;
36
+ const query = sessionId ? `&sessionId=${encodeURIComponent(sessionId)}` : "";
37
+ const res = await fetch(`/api/tezgah.status?format=json${query}`, {
38
+ headers: { accept: "application/json" }
39
+ });
40
+ const body = res.ok ? await res.json() : null;
41
+ if (alive && body) {
42
+ setData({ segments: body.segments || [], legend: body.legend || "" });
43
+ }
44
+ } catch {
45
+ if (alive) setData({ segments: [], legend: "" });
46
+ } finally {
47
+ if (alive) timer = setTimeout(load, REFRESH_MS);
48
+ }
49
+ };
50
+ load();
51
+ const onVisibility = () => { if (!document.hidden) load(); };
52
+ document.addEventListener("visibilitychange", onVisibility);
53
+ return () => {
54
+ alive = false;
55
+ clearTimeout(timer);
56
+ document.removeEventListener("visibilitychange", onVisibility);
57
+ };
58
+ }, [sessionId]);
59
+
60
+ if (!data.segments.length) return null;
61
+ const legend = data.legend || "tezgah status";
62
+ return react_jsx_runtime.jsxs("span", {
63
+ title: legend,
64
+ onClick: () => setOpen((v) => !v),
65
+ style: {
66
+ position: "relative",
67
+ cursor: "pointer",
68
+ fontFamily: "var(--dsw-font-mono)",
69
+ fontSize: "12px",
70
+ whiteSpace: "nowrap",
71
+ overflow: "hidden",
72
+ textOverflow: "ellipsis",
73
+ maxWidth: "32ch"
74
+ },
75
+ children: [
76
+ data.segments.map((seg, i) =>
77
+ react_jsx_runtime.jsxs("span", {
78
+ key: `${seg.key}-${i}`,
79
+ children: [
80
+ react_jsx_runtime.jsx("span", {
81
+ // the whole name+glyph carries the state color, the
82
+ // same as the terminal hosts; `info` stays muted
83
+ style: { color: STATE_COLOR[seg.state] || "inherit" },
84
+ children: seg.text + (seg.glyph || "")
85
+ }),
86
+ i < data.segments.length - 1
87
+ ? (data.segments[i + 1].group === seg.group
88
+ ? " "
89
+ : " · ")
90
+ : ""
91
+ ]
92
+ })
93
+ ),
94
+ open
95
+ ? react_jsx_runtime.jsx("span", {
96
+ style: {
97
+ position: "absolute",
98
+ top: "1.4em",
99
+ right: 0,
100
+ zIndex: 50,
101
+ whiteSpace: "pre",
102
+ background: "var(--dsw-alias-bg-layer-1, #222)",
103
+ color: "var(--dsw-alias-label-secondary, #ddd)",
104
+ border: "1px solid var(--dsw-alias-border, #444)",
105
+ borderRadius: "6px",
106
+ padding: "6px 8px",
107
+ fontSize: "11px",
108
+ maxWidth: "46ch"
109
+ },
110
+ children: legend
111
+ })
112
+ : null
113
+ ]
114
+ });
115
+ }
116
+
117
+ /** Required service: the UI slot registry. */
118
+ const inject = ["slots"];
119
+
120
+ /** Register the header status line. */
121
+ function apply(ctx) {
122
+ ctx.slots.inject("conversation.session.header.utilities", () =>
123
+ ctx.slots.register(
124
+ {
125
+ name: "conversation.session.header.utilities",
126
+ id: "tezgah-statusline",
127
+ order: 30
128
+ },
129
+ TezgahStatusLine
130
+ )
131
+ );
132
+ }
133
+
134
+ exports.apply = apply;
135
+ exports.inject = inject;
136
+ return module.exports;
137
+ }
138
+ });