@r1z4x/tezgah 1.9.2 → 1.13.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 (445) hide show
  1. package/CHANGELOG.md +415 -1
  2. package/MANIFEST +404 -144
  3. package/README.de.md +1 -1
  4. package/README.es.md +1 -1
  5. package/README.fr.md +1 -1
  6. package/README.md +5 -4
  7. package/README.tr.md +1 -1
  8. package/bin/codegen +5 -2
  9. package/bin/tezgah-design +288 -1
  10. package/bin/tezgah-docs +1 -1
  11. package/bin/tezgah-doctor +39 -2
  12. package/bin/tezgah-import-ai-research +26 -12
  13. package/bin/tezgah-ocr-review +296 -0
  14. package/bin/tezgah-research +255 -44
  15. package/bin/tezgah-review-quote +185 -0
  16. package/bin/tezgah-setup +1365 -55
  17. package/bin/tezgah-skill +1 -1
  18. package/bin/tezgah-status +201 -3
  19. package/bin/tezgah-task +258 -20
  20. package/commands/adhd.md +2 -2
  21. package/commands/ponytail.md +4 -4
  22. package/docs/architecture.md +2 -2
  23. package/docs/citations-baseline.json +3 -3
  24. package/docs/clarity-baseline.json +11 -5
  25. package/docs/contract.md +91 -43
  26. package/docs/environment.md +5 -2
  27. package/docs/evidence.md +109 -17
  28. package/docs/feature-audit.md +2 -2
  29. package/docs/gate.md +60 -33
  30. package/docs/glossary.md +6 -3
  31. package/docs/hosts.md +313 -17
  32. package/docs/index.json +34 -8
  33. package/docs/judge.md +4 -2
  34. package/docs/layers.md +4 -4
  35. package/docs/models.md +37 -9
  36. package/docs/operations.md +141 -5
  37. package/docs/research.md +815 -8
  38. package/docs/skills.md +137 -13
  39. package/docs/status-line.md +121 -1
  40. package/docs/testing.md +3 -1
  41. package/hooks/hooks.json +2 -2
  42. package/hooks/lang/en.json +21 -0
  43. package/hooks/lang/tr.json +22 -1
  44. package/hooks/projects-stop.py +2 -1
  45. package/hooks/tezgah_agents.py +65 -25
  46. package/hooks/tezgah_apps.py +18 -0
  47. package/hooks/tezgah_attest.py +79 -10
  48. package/hooks/tezgah_components.py +4 -0
  49. package/hooks/tezgah_context.py +207 -55
  50. package/hooks/tezgah_extension.py +337 -0
  51. package/hooks/tezgah_gate.py +267 -79
  52. package/hooks/tezgah_integrity.py +864 -143
  53. package/hooks/tezgah_judge.py +6 -4
  54. package/hooks/tezgah_models.py +59 -19
  55. package/hooks/tezgah_orca.py +1 -1
  56. package/hooks/tezgah_paths.py +145 -8
  57. package/hooks/tezgah_policy.py +128 -57
  58. package/hooks/tezgah_rank.py +9 -6
  59. package/hooks/tezgah_replay.py +12 -6
  60. package/hooks/tezgah_research.py +1414 -76
  61. package/hooks/tezgah_research_capture.py +1544 -0
  62. package/hooks/tezgah_research_evidence.py +842 -0
  63. package/hooks/tezgah_research_stats.py +258 -0
  64. package/hooks/tezgah_skill_pick.py +408 -106
  65. package/hooks/tezgah_stack.py +236 -1
  66. package/hooks/tezgah_stopspec.py +8 -1
  67. package/hooks/tezgah_task.py +14 -5
  68. package/hooks/tezgah_taste_ledger.py +1 -1
  69. package/hosts/amp/hook.py +217 -0
  70. package/hosts/amp/tezgah-plugin.ts.in +386 -0
  71. package/hosts/antigravity/hook.py +255 -0
  72. package/hosts/codex/hook.py +2 -1
  73. package/hosts/commandcode/hook.py +239 -0
  74. package/hosts/copilot/hook.py +284 -0
  75. package/hosts/cursor/hook.py +31 -3
  76. package/hosts/droid/hook.py +259 -0
  77. package/hosts/dsh/hooks.json +1 -1
  78. package/hosts/gemini/hook.py +213 -0
  79. package/hosts/goose/hook.py +145 -0
  80. package/hosts/omp/hook.py +4 -1
  81. package/hosts/omp/tezgah-hook.ts.in +30 -7
  82. package/hosts/opencode/plugins/tezgah.js +309 -48
  83. package/hosts/opencode/tui/cli/tui.tsx +100 -0
  84. package/hosts/opencode/tui/tezgah-tui.tsx +2 -1
  85. package/hosts/qwen/hook.py +206 -0
  86. package/output-styles/tezgah.md +20 -15
  87. package/package.json +1 -1
  88. package/skills/ai-research/SKILL.md +21 -14
  89. package/skills/ai-research/SOURCE +7 -5
  90. package/skills/ai-research/index/1-frame.md +6 -6
  91. package/skills/ai-research/index/2-data.md +9 -9
  92. package/skills/ai-research/index/3-train.md +36 -36
  93. package/skills/ai-research/index/4-measure.md +13 -13
  94. package/skills/ai-research/index/5-run.md +11 -11
  95. package/skills/ai-research/index/6-write.md +23 -23
  96. package/skills/ai-research/library.json +104 -104
  97. package/skills/analyze-app/SKILL.md +17 -12
  98. package/skills/design-contract/SKILL.md +42 -7
  99. package/skills/design-contract/data-views.md +2 -2
  100. package/skills/design-library/EVALS.md +1 -1
  101. package/skills/design-library/INDEX.md +39 -39
  102. package/skills/design-library/SKILL.md +19 -13
  103. package/skills/design-library/SOURCE +45 -43
  104. package/skills/feature-audit/SKILL.md +20 -14
  105. package/skills/hallmark/LICENSE +21 -0
  106. package/skills/hallmark/SKILL.md +154 -0
  107. package/skills/hallmark/SOURCE +207 -0
  108. package/skills/hallmark/agents/openai.yaml +13 -0
  109. package/skills/hallmark/references/anatomy.md +71 -0
  110. package/skills/hallmark/references/brand-truth.md +40 -0
  111. package/skills/hallmark/references/comp.md +104 -0
  112. package/skills/hallmark/references/craft.md +116 -0
  113. package/skills/hallmark/references/dark-mode.md +49 -0
  114. package/skills/hallmark/references/data-viz.md +48 -0
  115. package/skills/hallmark/references/design-md.md +53 -0
  116. package/skills/hallmark/references/direction.md +52 -0
  117. package/skills/hallmark/references/export-formats.md +80 -0
  118. package/skills/hallmark/references/flow.md +131 -0
  119. package/skills/hallmark/references/fonts.md +58 -0
  120. package/skills/hallmark/references/gates.md +243 -0
  121. package/skills/hallmark/references/genres/atmospheric.md +24 -0
  122. package/skills/hallmark/references/genres/editorial.md +24 -0
  123. package/skills/hallmark/references/genres/modern-minimal.md +24 -0
  124. package/skills/hallmark/references/genres/playful.md +24 -0
  125. package/skills/hallmark/references/imagery.md +99 -0
  126. package/skills/hallmark/references/interaction-and-states.md +89 -0
  127. package/skills/hallmark/references/layout.md +104 -0
  128. package/skills/hallmark/references/macrostructures/01-bento-grid.md +21 -0
  129. package/skills/hallmark/references/macrostructures/02-long-document.md +35 -0
  130. package/skills/hallmark/references/macrostructures/03-marquee-hero.md +21 -0
  131. package/skills/hallmark/references/macrostructures/04-stat-led.md +21 -0
  132. package/skills/hallmark/references/macrostructures/05-workbench.md +21 -0
  133. package/skills/hallmark/references/macrostructures/06-conversational-faq.md +28 -0
  134. package/skills/hallmark/references/macrostructures/07-manifesto.md +28 -0
  135. package/skills/hallmark/references/macrostructures/08-photographic.md +21 -0
  136. package/skills/hallmark/references/macrostructures/09-quote-led.md +21 -0
  137. package/skills/hallmark/references/macrostructures/10-specimen.md +21 -0
  138. package/skills/hallmark/references/macrostructures/11-catalogue.md +21 -0
  139. package/skills/hallmark/references/macrostructures/12-letter.md +21 -0
  140. package/skills/hallmark/references/macrostructures/13-index-first.md +21 -0
  141. package/skills/hallmark/references/macrostructures/14-narrative-workflow.md +21 -0
  142. package/skills/hallmark/references/macrostructures/15-split-studio.md +21 -0
  143. package/skills/hallmark/references/macrostructures/16-feature-stack.md +23 -0
  144. package/skills/hallmark/references/macrostructures/17-type-specimen.md +19 -0
  145. package/skills/hallmark/references/macrostructures/18-portfolio-grid.md +21 -0
  146. package/skills/hallmark/references/macrostructures/19-map-diagram.md +21 -0
  147. package/skills/hallmark/references/macrostructures/20-ecosystem-index.md +19 -0
  148. package/skills/hallmark/references/macrostructures/21-component-playground.md +21 -0
  149. package/skills/hallmark/references/macrostructures.md +119 -0
  150. package/skills/hallmark/references/microinteractions.md +80 -0
  151. package/skills/hallmark/references/patterns.md +202 -0
  152. package/skills/hallmark/references/redesign.md +88 -0
  153. package/skills/hallmark/references/responsive.md +46 -0
  154. package/skills/hallmark/references/review-finish.md +19 -0
  155. package/skills/hallmark/references/review-hero.md +20 -0
  156. package/skills/hallmark/references/scroll-choreography.md +110 -0
  157. package/skills/hallmark/references/texture.md +90 -0
  158. package/skills/hallmark/references/themes/README.md +58 -0
  159. package/skills/hallmark/references/themes/almanac.jpg +0 -0
  160. package/skills/hallmark/references/themes/almanac.md +103 -0
  161. package/skills/hallmark/references/themes/arcade.jpg +0 -0
  162. package/skills/hallmark/references/themes/arcade.md +102 -0
  163. package/skills/hallmark/references/themes/atelier.jpg +0 -0
  164. package/skills/hallmark/references/themes/atelier.md +98 -0
  165. package/skills/hallmark/references/themes/bloom.jpg +0 -0
  166. package/skills/hallmark/references/themes/bloom.md +102 -0
  167. package/skills/hallmark/references/themes/blueprint.jpg +0 -0
  168. package/skills/hallmark/references/themes/blueprint.md +103 -0
  169. package/skills/hallmark/references/themes/broadside.jpg +0 -0
  170. package/skills/hallmark/references/themes/broadside.md +108 -0
  171. package/skills/hallmark/references/themes/brutal.jpg +0 -0
  172. package/skills/hallmark/references/themes/brutal.md +95 -0
  173. package/skills/hallmark/references/themes/carnival.jpg +0 -0
  174. package/skills/hallmark/references/themes/carnival.md +104 -0
  175. package/skills/hallmark/references/themes/cobalt.jpg +0 -0
  176. package/skills/hallmark/references/themes/cobalt.md +101 -0
  177. package/skills/hallmark/references/themes/console.jpg +0 -0
  178. package/skills/hallmark/references/themes/console.md +99 -0
  179. package/skills/hallmark/references/themes/coral.jpg +0 -0
  180. package/skills/hallmark/references/themes/coral.md +102 -0
  181. package/skills/hallmark/references/themes/darkroom.jpg +0 -0
  182. package/skills/hallmark/references/themes/darkroom.md +99 -0
  183. package/skills/hallmark/references/themes/dose.jpg +0 -0
  184. package/skills/hallmark/references/themes/dose.md +98 -0
  185. package/skills/hallmark/references/themes/dusk.jpg +0 -0
  186. package/skills/hallmark/references/themes/dusk.md +105 -0
  187. package/skills/hallmark/references/themes/editorial.jpg +0 -0
  188. package/skills/hallmark/references/themes/editorial.md +97 -0
  189. package/skills/hallmark/references/themes/formwork.jpg +0 -0
  190. package/skills/hallmark/references/themes/formwork.md +107 -0
  191. package/skills/hallmark/references/themes/furrow.jpg +0 -0
  192. package/skills/hallmark/references/themes/furrow.md +98 -0
  193. package/skills/hallmark/references/themes/garden.jpg +0 -0
  194. package/skills/hallmark/references/themes/garden.md +97 -0
  195. package/skills/hallmark/references/themes/grid.jpg +0 -0
  196. package/skills/hallmark/references/themes/grid.md +101 -0
  197. package/skills/hallmark/references/themes/halftone.jpg +0 -0
  198. package/skills/hallmark/references/themes/halftone.md +106 -0
  199. package/skills/hallmark/references/themes/hedgerow.jpg +0 -0
  200. package/skills/hallmark/references/themes/hedgerow.md +104 -0
  201. package/skills/hallmark/references/themes/hum.jpg +0 -0
  202. package/skills/hallmark/references/themes/hum.md +99 -0
  203. package/skills/hallmark/references/themes/index.json +2191 -0
  204. package/skills/hallmark/references/themes/ink.jpg +0 -0
  205. package/skills/hallmark/references/themes/ink.md +106 -0
  206. package/skills/hallmark/references/themes/kiln.jpg +0 -0
  207. package/skills/hallmark/references/themes/kiln.md +108 -0
  208. package/skills/hallmark/references/themes/loom.jpg +0 -0
  209. package/skills/hallmark/references/themes/loom.md +106 -0
  210. package/skills/hallmark/references/themes/lumen.jpg +0 -0
  211. package/skills/hallmark/references/themes/lumen.md +103 -0
  212. package/skills/hallmark/references/themes/manifesto.jpg +0 -0
  213. package/skills/hallmark/references/themes/manifesto.md +101 -0
  214. package/skills/hallmark/references/themes/midnight.jpg +0 -0
  215. package/skills/hallmark/references/themes/midnight.md +97 -0
  216. package/skills/hallmark/references/themes/newsprint.jpg +0 -0
  217. package/skills/hallmark/references/themes/newsprint.md +102 -0
  218. package/skills/hallmark/references/themes/overprint.jpg +0 -0
  219. package/skills/hallmark/references/themes/overprint.md +101 -0
  220. package/skills/hallmark/references/themes/pasteup.jpg +0 -0
  221. package/skills/hallmark/references/themes/pasteup.md +100 -0
  222. package/skills/hallmark/references/themes/piste.jpg +0 -0
  223. package/skills/hallmark/references/themes/piste.md +99 -0
  224. package/skills/hallmark/references/themes/ribbon.jpg +0 -0
  225. package/skills/hallmark/references/themes/ribbon.md +106 -0
  226. package/skills/hallmark/references/themes/rim.jpg +0 -0
  227. package/skills/hallmark/references/themes/rim.md +96 -0
  228. package/skills/hallmark/references/themes/riso.jpg +0 -0
  229. package/skills/hallmark/references/themes/riso.md +98 -0
  230. package/skills/hallmark/references/themes/solstice.jpg +0 -0
  231. package/skills/hallmark/references/themes/solstice.md +104 -0
  232. package/skills/hallmark/references/themes/specimen.jpg +0 -0
  233. package/skills/hallmark/references/themes/specimen.md +100 -0
  234. package/skills/hallmark/references/themes/spore.jpg +0 -0
  235. package/skills/hallmark/references/themes/spore.md +104 -0
  236. package/skills/hallmark/references/themes/sport.jpg +0 -0
  237. package/skills/hallmark/references/themes/sport.md +101 -0
  238. package/skills/hallmark/references/themes/squeeze.jpg +0 -0
  239. package/skills/hallmark/references/themes/squeeze.md +99 -0
  240. package/skills/hallmark/references/themes/sticker.jpg +0 -0
  241. package/skills/hallmark/references/themes/sticker.md +106 -0
  242. package/skills/hallmark/references/themes/studio.jpg +0 -0
  243. package/skills/hallmark/references/themes/studio.md +99 -0
  244. package/skills/hallmark/references/themes/terminal.jpg +0 -0
  245. package/skills/hallmark/references/themes/terminal.md +96 -0
  246. package/skills/hallmark/references/themes/terrazzo.jpg +0 -0
  247. package/skills/hallmark/references/themes/terrazzo.md +106 -0
  248. package/skills/hallmark/references/themes/ultraviolet.jpg +0 -0
  249. package/skills/hallmark/references/themes/ultraviolet.md +106 -0
  250. package/skills/hallmark/references/themes/vellum.jpg +0 -0
  251. package/skills/hallmark/references/themes/vellum.md +105 -0
  252. package/skills/hallmark/references/themes/wayfind.jpg +0 -0
  253. package/skills/hallmark/references/themes/wayfind.md +105 -0
  254. package/skills/hallmark/references/themes/werkstatt.jpg +0 -0
  255. package/skills/hallmark/references/themes/werkstatt.md +105 -0
  256. package/skills/hallmark/scripts/capture.mjs +125 -0
  257. package/skills/hallmark/scripts/fixtures/exemplars/atmospheric.html +324 -0
  258. package/skills/hallmark/scripts/fixtures/exemplars/editorial.html +363 -0
  259. package/skills/hallmark/scripts/fixtures/exemplars/modern-minimal.html +527 -0
  260. package/skills/hallmark/scripts/fixtures/exemplars/playful.html +353 -0
  261. package/skills/hallmark/scripts/fixtures/eyebrow-fail/index.html +118 -0
  262. package/skills/hallmark/scripts/fixtures/eyebrow-pass/index.html +137 -0
  263. package/skills/hallmark/scripts/fixtures/kept/after.html +27 -0
  264. package/skills/hallmark/scripts/fixtures/kept/before.html +26 -0
  265. package/skills/hallmark/scripts/fixtures/slopped.html +145 -0
  266. package/skills/hallmark/scripts/fixtures/tailwind-fail/Feature.vue +14 -0
  267. package/skills/hallmark/scripts/fixtures/tailwind-fail/Hero.tsx +33 -0
  268. package/skills/hallmark/scripts/fixtures/tailwind-fail/index.html +74 -0
  269. package/skills/hallmark/scripts/fixtures/tailwind-fail/style.css +6 -0
  270. package/skills/hallmark/scripts/fixtures/tailwind-pass/Hero.tsx +33 -0
  271. package/skills/hallmark/scripts/fixtures/tailwind-pass/index.html +57 -0
  272. package/skills/hallmark/scripts/fixtures/tailwind-pass/style.css +15 -0
  273. package/skills/hallmark/scripts/fixtures/waiver/index.html +54 -0
  274. package/skills/hallmark/scripts/imagegen.mjs +85 -0
  275. package/skills/hallmark/scripts/install-hook.mjs +70 -0
  276. package/skills/hallmark/scripts/install.mjs +141 -0
  277. package/skills/hallmark/scripts/lint-hook.mjs +49 -0
  278. package/skills/hallmark/scripts/photos.json +1 -0
  279. package/skills/hallmark/scripts/picture.mjs +71 -0
  280. package/skills/hallmark/scripts/refcheck.mjs +352 -0
  281. package/skills/hallmark/scripts/sloplint-render.mjs +1252 -0
  282. package/skills/hallmark/scripts/sloplint.mjs +4422 -0
  283. package/skills/hallmark/scripts/theme.mjs +650 -0
  284. package/skills/harness/SKILL.md +17 -8
  285. package/skills/i-have-adhd/SKILL.md +32 -12
  286. package/skills/no-ai-slop/SKILL.md +15 -1
  287. package/skills/plan-add/SKILL.md +38 -27
  288. package/skills/plan-status/SKILL.md +13 -7
  289. package/skills/plan-sync/SKILL.md +18 -12
  290. package/skills/pm-frameworks/SKILL.md +19 -10
  291. package/skills/pm-frameworks/SOURCE +7 -5
  292. package/skills/ponytail/SKILL.md +19 -14
  293. package/skills/product-analysis/SKILL.md +22 -18
  294. package/skills/product-flow/SKILL.md +14 -9
  295. package/skills/research/SKILL.md +97 -48
  296. package/skills/rl-env/SKILL.md +25 -13
  297. package/skills/rl-env/SOURCE +8 -6
  298. package/skills/tezgah-contract/SKILL.md +65 -47
  299. package/statusline.py +20 -9
  300. package/workflows/graph-review.js +14 -2
  301. package/bin/tezgah-skill.py +0 -59
  302. /package/skills/ai-research/0-autoresearch-skill/{SKILL.md → ENTRY.md} +0 -0
  303. /package/skills/ai-research/01-model-architecture/litgpt/{SKILL.md → ENTRY.md} +0 -0
  304. /package/skills/ai-research/01-model-architecture/mamba/{SKILL.md → ENTRY.md} +0 -0
  305. /package/skills/ai-research/01-model-architecture/nanogpt/{SKILL.md → ENTRY.md} +0 -0
  306. /package/skills/ai-research/01-model-architecture/rwkv/{SKILL.md → ENTRY.md} +0 -0
  307. /package/skills/ai-research/01-model-architecture/torchtitan/{SKILL.md → ENTRY.md} +0 -0
  308. /package/skills/ai-research/02-tokenization/huggingface-tokenizers/{SKILL.md → ENTRY.md} +0 -0
  309. /package/skills/ai-research/02-tokenization/sentencepiece/{SKILL.md → ENTRY.md} +0 -0
  310. /package/skills/ai-research/03-fine-tuning/axolotl/{SKILL.md → ENTRY.md} +0 -0
  311. /package/skills/ai-research/03-fine-tuning/llama-factory/{SKILL.md → ENTRY.md} +0 -0
  312. /package/skills/ai-research/03-fine-tuning/peft/{SKILL.md → ENTRY.md} +0 -0
  313. /package/skills/ai-research/03-fine-tuning/unsloth/{SKILL.md → ENTRY.md} +0 -0
  314. /package/skills/ai-research/04-mechanistic-interpretability/nnsight/{SKILL.md → ENTRY.md} +0 -0
  315. /package/skills/ai-research/04-mechanistic-interpretability/pyvene/{SKILL.md → ENTRY.md} +0 -0
  316. /package/skills/ai-research/04-mechanistic-interpretability/saelens/{SKILL.md → ENTRY.md} +0 -0
  317. /package/skills/ai-research/04-mechanistic-interpretability/transformer-lens/{SKILL.md → ENTRY.md} +0 -0
  318. /package/skills/ai-research/05-data-processing/nemo-curator/{SKILL.md → ENTRY.md} +0 -0
  319. /package/skills/ai-research/05-data-processing/ray-data/{SKILL.md → ENTRY.md} +0 -0
  320. /package/skills/ai-research/06-post-training/grpo-rl-training/{SKILL.md → ENTRY.md} +0 -0
  321. /package/skills/ai-research/06-post-training/miles/{SKILL.md → ENTRY.md} +0 -0
  322. /package/skills/ai-research/06-post-training/openrlhf/{SKILL.md → ENTRY.md} +0 -0
  323. /package/skills/ai-research/06-post-training/simpo/{SKILL.md → ENTRY.md} +0 -0
  324. /package/skills/ai-research/06-post-training/slime/{SKILL.md → ENTRY.md} +0 -0
  325. /package/skills/ai-research/06-post-training/torchforge/{SKILL.md → ENTRY.md} +0 -0
  326. /package/skills/ai-research/06-post-training/trl-fine-tuning/{SKILL.md → ENTRY.md} +0 -0
  327. /package/skills/ai-research/06-post-training/verl/{SKILL.md → ENTRY.md} +0 -0
  328. /package/skills/ai-research/07-safety-alignment/constitutional-ai/{SKILL.md → ENTRY.md} +0 -0
  329. /package/skills/ai-research/07-safety-alignment/llamaguard/{SKILL.md → ENTRY.md} +0 -0
  330. /package/skills/ai-research/07-safety-alignment/nemo-guardrails/{SKILL.md → ENTRY.md} +0 -0
  331. /package/skills/ai-research/07-safety-alignment/prompt-guard/{SKILL.md → ENTRY.md} +0 -0
  332. /package/skills/ai-research/08-distributed-training/accelerate/{SKILL.md → ENTRY.md} +0 -0
  333. /package/skills/ai-research/08-distributed-training/deepspeed/{SKILL.md → ENTRY.md} +0 -0
  334. /package/skills/ai-research/08-distributed-training/megatron-core/{SKILL.md → ENTRY.md} +0 -0
  335. /package/skills/ai-research/08-distributed-training/pytorch-fsdp2/{SKILL.md → ENTRY.md} +0 -0
  336. /package/skills/ai-research/08-distributed-training/pytorch-lightning/{SKILL.md → ENTRY.md} +0 -0
  337. /package/skills/ai-research/08-distributed-training/ray-train/{SKILL.md → ENTRY.md} +0 -0
  338. /package/skills/ai-research/09-infrastructure/lambda-labs/{SKILL.md → ENTRY.md} +0 -0
  339. /package/skills/ai-research/09-infrastructure/modal/{SKILL.md → ENTRY.md} +0 -0
  340. /package/skills/ai-research/09-infrastructure/skypilot/{SKILL.md → ENTRY.md} +0 -0
  341. /package/skills/ai-research/10-optimization/awq/{SKILL.md → ENTRY.md} +0 -0
  342. /package/skills/ai-research/10-optimization/bitsandbytes/{SKILL.md → ENTRY.md} +0 -0
  343. /package/skills/ai-research/10-optimization/flash-attention/{SKILL.md → ENTRY.md} +0 -0
  344. /package/skills/ai-research/10-optimization/gguf/{SKILL.md → ENTRY.md} +0 -0
  345. /package/skills/ai-research/10-optimization/gptq/{SKILL.md → ENTRY.md} +0 -0
  346. /package/skills/ai-research/10-optimization/hqq/{SKILL.md → ENTRY.md} +0 -0
  347. /package/skills/ai-research/10-optimization/ml-training-recipes/{SKILL.md → ENTRY.md} +0 -0
  348. /package/skills/ai-research/11-evaluation/bigcode-evaluation-harness/{SKILL.md → ENTRY.md} +0 -0
  349. /package/skills/ai-research/11-evaluation/lm-evaluation-harness/{SKILL.md → ENTRY.md} +0 -0
  350. /package/skills/ai-research/11-evaluation/nemo-evaluator/{SKILL.md → ENTRY.md} +0 -0
  351. /package/skills/ai-research/12-inference-serving/llama-cpp/{SKILL.md → ENTRY.md} +0 -0
  352. /package/skills/ai-research/12-inference-serving/sglang/{SKILL.md → ENTRY.md} +0 -0
  353. /package/skills/ai-research/12-inference-serving/tensorrt-llm/{SKILL.md → ENTRY.md} +0 -0
  354. /package/skills/ai-research/12-inference-serving/vllm/{SKILL.md → ENTRY.md} +0 -0
  355. /package/skills/ai-research/13-mlops/mlflow/{SKILL.md → ENTRY.md} +0 -0
  356. /package/skills/ai-research/13-mlops/swanlab/{SKILL.md → ENTRY.md} +0 -0
  357. /package/skills/ai-research/13-mlops/tensorboard/{SKILL.md → ENTRY.md} +0 -0
  358. /package/skills/ai-research/13-mlops/weights-and-biases/{SKILL.md → ENTRY.md} +0 -0
  359. /package/skills/ai-research/14-agents/a-evolve/{SKILL.md → ENTRY.md} +0 -0
  360. /package/skills/ai-research/14-agents/autogpt/{SKILL.md → ENTRY.md} +0 -0
  361. /package/skills/ai-research/14-agents/crewai/{SKILL.md → ENTRY.md} +0 -0
  362. /package/skills/ai-research/14-agents/langchain/{SKILL.md → ENTRY.md} +0 -0
  363. /package/skills/ai-research/14-agents/llamaindex/{SKILL.md → ENTRY.md} +0 -0
  364. /package/skills/ai-research/15-rag/chroma/{SKILL.md → ENTRY.md} +0 -0
  365. /package/skills/ai-research/15-rag/faiss/{SKILL.md → ENTRY.md} +0 -0
  366. /package/skills/ai-research/15-rag/pinecone/{SKILL.md → ENTRY.md} +0 -0
  367. /package/skills/ai-research/15-rag/qdrant/{SKILL.md → ENTRY.md} +0 -0
  368. /package/skills/ai-research/15-rag/sentence-transformers/{SKILL.md → ENTRY.md} +0 -0
  369. /package/skills/ai-research/16-prompt-engineering/dspy/{SKILL.md → ENTRY.md} +0 -0
  370. /package/skills/ai-research/16-prompt-engineering/guidance/{SKILL.md → ENTRY.md} +0 -0
  371. /package/skills/ai-research/16-prompt-engineering/instructor/{SKILL.md → ENTRY.md} +0 -0
  372. /package/skills/ai-research/16-prompt-engineering/outlines/{SKILL.md → ENTRY.md} +0 -0
  373. /package/skills/ai-research/17-observability/langsmith/{SKILL.md → ENTRY.md} +0 -0
  374. /package/skills/ai-research/17-observability/phoenix/{SKILL.md → ENTRY.md} +0 -0
  375. /package/skills/ai-research/18-multimodal/audiocraft/{SKILL.md → ENTRY.md} +0 -0
  376. /package/skills/ai-research/18-multimodal/blip-2/{SKILL.md → ENTRY.md} +0 -0
  377. /package/skills/ai-research/18-multimodal/clip/{SKILL.md → ENTRY.md} +0 -0
  378. /package/skills/ai-research/18-multimodal/cosmos-policy/{SKILL.md → ENTRY.md} +0 -0
  379. /package/skills/ai-research/18-multimodal/llava/{SKILL.md → ENTRY.md} +0 -0
  380. /package/skills/ai-research/18-multimodal/openpi/{SKILL.md → ENTRY.md} +0 -0
  381. /package/skills/ai-research/18-multimodal/openvla-oft/{SKILL.md → ENTRY.md} +0 -0
  382. /package/skills/ai-research/18-multimodal/segment-anything/{SKILL.md → ENTRY.md} +0 -0
  383. /package/skills/ai-research/18-multimodal/stable-diffusion/{SKILL.md → ENTRY.md} +0 -0
  384. /package/skills/ai-research/18-multimodal/whisper/{SKILL.md → ENTRY.md} +0 -0
  385. /package/skills/ai-research/19-emerging-techniques/knowledge-distillation/{SKILL.md → ENTRY.md} +0 -0
  386. /package/skills/ai-research/19-emerging-techniques/long-context/{SKILL.md → ENTRY.md} +0 -0
  387. /package/skills/ai-research/19-emerging-techniques/model-merging/{SKILL.md → ENTRY.md} +0 -0
  388. /package/skills/ai-research/19-emerging-techniques/model-pruning/{SKILL.md → ENTRY.md} +0 -0
  389. /package/skills/ai-research/19-emerging-techniques/moe-training/{SKILL.md → ENTRY.md} +0 -0
  390. /package/skills/ai-research/19-emerging-techniques/speculative-decoding/{SKILL.md → ENTRY.md} +0 -0
  391. /package/skills/ai-research/20-ml-paper-writing/academic-plotting/{SKILL.md → ENTRY.md} +0 -0
  392. /package/skills/ai-research/20-ml-paper-writing/ml-paper-writing/{SKILL.md → ENTRY.md} +0 -0
  393. /package/skills/ai-research/20-ml-paper-writing/presenting-conference-talks/{SKILL.md → ENTRY.md} +0 -0
  394. /package/skills/ai-research/20-ml-paper-writing/systems-paper-writing/{SKILL.md → ENTRY.md} +0 -0
  395. /package/skills/ai-research/21-research-ideation/brainstorming-research-ideas/{SKILL.md → ENTRY.md} +0 -0
  396. /package/skills/ai-research/21-research-ideation/creative-thinking-for-research/{SKILL.md → ENTRY.md} +0 -0
  397. /package/skills/ai-research/22-agent-native-research-artifact/compiler/{SKILL.md → ENTRY.md} +0 -0
  398. /package/skills/ai-research/22-agent-native-research-artifact/research-manager/{SKILL.md → ENTRY.md} +0 -0
  399. /package/skills/ai-research/22-agent-native-research-artifact/rigor-reviewer/{SKILL.md → ENTRY.md} +0 -0
  400. /package/skills/design-library/adaptive-interfaces/skills/colour-independence/{SKILL.md → ENTRY.md} +0 -0
  401. /package/skills/design-library/adaptive-interfaces/skills/flexible-typography/{SKILL.md → ENTRY.md} +0 -0
  402. /package/skills/design-library/adaptive-interfaces/skills/information-density/{SKILL.md → ENTRY.md} +0 -0
  403. /package/skills/design-library/adaptive-interfaces/skills/preference-audit/{SKILL.md → ENTRY.md} +0 -0
  404. /package/skills/design-library/adaptive-interfaces/skills/responsive-accessibility/{SKILL.md → ENTRY.md} +0 -0
  405. /package/skills/design-library/adaptive-interfaces/skills/responsive-review/{SKILL.md → ENTRY.md} +0 -0
  406. /package/skills/design-library/adaptive-interfaces/skills/simplified-views/{SKILL.md → ENTRY.md} +0 -0
  407. /package/skills/design-library/adaptive-interfaces/skills/specify/{SKILL.md → ENTRY.md} +0 -0
  408. /package/skills/design-library/adaptive-interfaces/skills/user-preference-respect/{SKILL.md → ENTRY.md} +0 -0
  409. /package/skills/design-library/cognitive-accessibility/skills/adaptive-personalisation/{SKILL.md → ENTRY.md} +0 -0
  410. /package/skills/design-library/cognitive-accessibility/skills/assess-load/{SKILL.md → ENTRY.md} +0 -0
  411. /package/skills/design-library/cognitive-accessibility/skills/cognitive-load-assessment/{SKILL.md → ENTRY.md} +0 -0
  412. /package/skills/design-library/cognitive-accessibility/skills/contextual-help-design/{SKILL.md → ENTRY.md} +0 -0
  413. /package/skills/design-library/cognitive-accessibility/skills/error-prevention-recovery/{SKILL.md → ENTRY.md} +0 -0
  414. /package/skills/design-library/cognitive-accessibility/skills/focus-attention-design/{SKILL.md → ENTRY.md} +0 -0
  415. /package/skills/design-library/cognitive-accessibility/skills/memory-load-reduction/{SKILL.md → ENTRY.md} +0 -0
  416. /package/skills/design-library/cognitive-accessibility/skills/plain-language-design/{SKILL.md → ENTRY.md} +0 -0
  417. /package/skills/design-library/cognitive-accessibility/skills/review/{SKILL.md → ENTRY.md} +0 -0
  418. /package/skills/design-library/cognitive-accessibility/skills/simplify/{SKILL.md → ENTRY.md} +0 -0
  419. /package/skills/design-library/cognitive-accessibility/skills/wayfinding-navigation/{SKILL.md → ENTRY.md} +0 -0
  420. /package/skills/design-library/design-research/skills/behavioural-analytics/{SKILL.md → ENTRY.md} +0 -0
  421. /package/skills/design-library/design-research/skills/qual-quant-triangulation/{SKILL.md → ENTRY.md} +0 -0
  422. /package/skills/design-library/inclusive-interaction/skills/audit/{SKILL.md → ENTRY.md} +0 -0
  423. /package/skills/design-library/inclusive-interaction/skills/design-flow/{SKILL.md → ENTRY.md} +0 -0
  424. /package/skills/design-library/inclusive-interaction/skills/feedback-and-status/{SKILL.md → ENTRY.md} +0 -0
  425. /package/skills/design-library/inclusive-interaction/skills/gesture-alternatives/{SKILL.md → ENTRY.md} +0 -0
  426. /package/skills/design-library/inclusive-interaction/skills/keyboard-navigation/{SKILL.md → ENTRY.md} +0 -0
  427. /package/skills/design-library/inclusive-interaction/skills/keyboard-review/{SKILL.md → ENTRY.md} +0 -0
  428. /package/skills/design-library/inclusive-interaction/skills/motion-sensitivity/{SKILL.md → ENTRY.md} +0 -0
  429. /package/skills/design-library/inclusive-interaction/skills/multi-modal-input/{SKILL.md → ENTRY.md} +0 -0
  430. /package/skills/design-library/inclusive-interaction/skills/touch-target-design/{SKILL.md → ENTRY.md} +0 -0
  431. /package/skills/design-library/inclusive-interaction/skills/voice-interaction/{SKILL.md → ENTRY.md} +0 -0
  432. /package/skills/design-library/visual-critique/skills/critique-affordance/{SKILL.md → ENTRY.md} +0 -0
  433. /package/skills/design-library/visual-critique/skills/critique-brand-consistency/{SKILL.md → ENTRY.md} +0 -0
  434. /package/skills/design-library/visual-critique/skills/critique-color/{SKILL.md → ENTRY.md} +0 -0
  435. /package/skills/design-library/visual-critique/skills/critique-composition/{SKILL.md → ENTRY.md} +0 -0
  436. /package/skills/design-library/visual-critique/skills/critique-information-density/{SKILL.md → ENTRY.md} +0 -0
  437. /package/skills/design-library/visual-critique/skills/critique-typography/{SKILL.md → ENTRY.md} +0 -0
  438. /package/skills/design-library/visual-critique/skills/critique-visual-hierarchy/{SKILL.md → ENTRY.md} +0 -0
  439. /package/skills/pm-frameworks/intended-vs-implemented/{SKILL.md → ENTRY.md} +0 -0
  440. /package/skills/pm-frameworks/opportunity-solution-tree/{SKILL.md → ENTRY.md} +0 -0
  441. /package/skills/rl-env/generate-nemo-gym-env/{SKILL.md → ENTRY.md} +0 -0
  442. /package/skills/rl-env/generate-openenv-env/{SKILL.md → ENTRY.md} +0 -0
  443. /package/skills/rl-env/generate-ors-env/{SKILL.md → ENTRY.md} +0 -0
  444. /package/skills/rl-env/generate-verifiers-env/{SKILL.md → ENTRY.md} +0 -0
  445. /package/skills/rl-env/rl-env-from-description/{SKILL.md → ENTRY.md} +0 -0
package/docs/index.json CHANGED
@@ -269,7 +269,13 @@
269
269
  "what lights the research mark and how is the layer switched off",
270
270
  "why may a new research line not be opened while another is unfinished",
271
271
  "what does tezgah-research next print for a product flow, and when is a decision due for re-measure",
272
- "how does an exploratory line run a campaign of new ideas (arena, stage funnel, tournament, board, dedup, yield)"
272
+ "how does an exploratory line run a campaign of new ideas (arena, stage funnel, tournament, board, dedup, yield)",
273
+ "how is a claim's certainty computed (rules 8 start level, steps, ceilings)",
274
+ "how do I record a citation receipt, a source capture or a search (cite, fetch, search)",
275
+ "what is a question class and what does init --class print",
276
+ "what does release-check do and what does calibration print",
277
+ "how does the instrument ledger validate an LLM judge (instrument, gold, label, switch)",
278
+ "what formats does a new line write by hand (INDEX note path, provenance values, review dimensions, deliverable)"
273
279
  ],
274
280
  "answers_tr": [
275
281
  "bir araştırma hattı nerede yaşar ve ne tutar",
@@ -279,7 +285,13 @@
279
285
  "araştırma işaretini ne yakar ve katman nasıl kapatılır",
280
286
  "başka biri bitmemişken neden yeni bir araştırma hattı açılamaz",
281
287
  "tezgah-research next bir ürün akışı için ne yazdırır ve bir karar ne zaman yeniden ölçülmeli",
282
- "keşif (exploratory) hattı yeni fikir kampanyasını nasıl yürütür (arena, aşama hunisi, turnuva, board, dedup, yield)"
288
+ "keşif (exploratory) hattı yeni fikir kampanyasını nasıl yürütür (arena, aşama hunisi, turnuva, board, dedup, yield)",
289
+ "bir iddianın kesinlik düzeyi nasıl hesaplanır (rules 8 başlangıç düzeyi, adımlar, tavanlar)",
290
+ "bir atıf makbuzu, kaynak yakalaması ya da arama nasıl kaydedilir (cite, fetch, search)",
291
+ "soru sınıfı nedir ve init --class ne yazdırır",
292
+ "release-check ne yapar ve calibration ne yazdırır",
293
+ "araç defteri bir LLM yargıcını nasıl doğrular (instrument, gold, label, switch)",
294
+ "yeni bir hat elle hangi biçimleri yazar (INDEX note yolu, provenance değerleri, review boyutları, deliverable)"
283
295
  ],
284
296
  "sources": [
285
297
  "hooks/tezgah_research.py",
@@ -288,7 +300,10 @@
288
300
  "hooks/tezgah_policy.py",
289
301
  "hooks/tezgah_context.py",
290
302
  "skills/research/SKILL.md",
291
- "tests/test_research.py"
303
+ "tests/test_research.py",
304
+ "hooks/tezgah_research_capture.py",
305
+ "hooks/tezgah_research_evidence.py",
306
+ "hooks/tezgah_research_stats.py"
292
307
  ]
293
308
  },
294
309
  {
@@ -302,7 +317,9 @@
302
317
  "how do I add a skill without breaking the router or the install report",
303
318
  "which skill designs a metric dashboard and where do its data-view rules live",
304
319
  "does the local skill search reach design-library's nested entries",
305
- "which skill carries a new metric dashboard or feature from research to re-measure"
320
+ "which skill carries a new metric dashboard or feature from research to re-measure",
321
+ "which floor wins between a repository's design.md and the design contract",
322
+ "what does tezgah-design slop run and where does its verdict go"
306
323
  ],
307
324
  "answers_tr": [
308
325
  "burada beceri nedir ve bir hosta nasıl ulaşır",
@@ -310,18 +327,23 @@
310
327
  "yönlendiriciyi veya kurulum raporunu bozmadan nasıl beceri eklerim",
311
328
  "metrik dashboard tasarımını hangi beceri yapar ve veri görünümü kuralları nerede",
312
329
  "yerel beceri araması design-library'nin iç girdilerine ulaşır mı",
313
- "yeni bir metrik dashboard'u veya özelliği araştırmadan yeniden ölçüme hangi beceri taşır"
330
+ "yeni bir metrik dashboard'u veya özelliği araştırmadan yeniden ölçüme hangi beceri taşır",
331
+ "bir deponun design.md dosyası ile tasarım sözleşmesi arasında hangi katman kazanır",
332
+ "tezgah-design slop neyi çalıştırır ve kararı nereye yazar"
314
333
  ],
315
334
  "sources": [
316
335
  "bin/tezgah-setup",
336
+ "bin/tezgah-design",
317
337
  "skills/",
318
338
  "skills/design-library/SOURCE",
339
+ "skills/hallmark/SOURCE",
319
340
  "tests/routing-fixtures.md",
320
341
  "commands/",
321
342
  "NOTICE",
322
343
  "tests/test_setup.py",
323
344
  "tests/test_skills.py",
324
345
  "hooks/tezgah_skill_pick.py",
346
+ "hooks/tezgah_integrity.py",
325
347
  "skills/design-contract/data-views.md",
326
348
  "skills/product-flow/SKILL.md"
327
349
  ]
@@ -386,7 +408,8 @@
386
408
  "something is broken what do I check first",
387
409
  "how do I turn on taste signal capture and measure my corrections",
388
410
  "how does taste learn my coding preferences and inject them",
389
- "how do I resume or clean up a delegated slice after a crash or a quota stop"
411
+ "how do I resume or clean up a delegated slice after a crash or a quota stop",
412
+ "how do I turn on the open-code-review spec for a plan's review"
390
413
  ],
391
414
  "answers_tr": [
392
415
  "bunu bir makineye nasıl kurar, doğrular ve yükseltirim",
@@ -396,7 +419,8 @@
396
419
  "bir şey bozuk, önce neyi kontrol etmeliyim",
397
420
  "zevk sinyali kaydını nasıl açar ve düzeltmelerimi nasıl ölçerim",
398
421
  "taste kodlama tercihlerimi nasıl öğrenir ve oturuma nasıl ekler",
399
- "bir çökme veya kota durmasından sonra devredilen bir dilimi nasıl sürdürür veya temizlerim"
422
+ "bir çökme veya kota durmasından sonra devredilen bir dilimi nasıl sürdürür veya temizlerim",
423
+ "bir planın incelemesi için open-code-review spesifikasyonunu nasıl açarım"
400
424
  ],
401
425
  "sources": [
402
426
  "bin/tezgah-setup",
@@ -413,7 +437,9 @@
413
437
  "hooks/tezgah_taste_ledger.py",
414
438
  "bin/tezgah-taste",
415
439
  "hooks/tezgah_task.py",
416
- "bin/tezgah-task"
440
+ "bin/tezgah-task",
441
+ "bin/tezgah-review-quote",
442
+ "bin/tezgah-ocr-review"
417
443
  ]
418
444
  },
419
445
  {
package/docs/judge.md CHANGED
@@ -118,8 +118,10 @@ The CLI runs headless in an empty temp dir. Its flags are `SESSION_ARGV`
118
118
  (`hooks/tezgah_judge.py::SESSION_ARGV`). The omp and claude runs drop tools,
119
119
  rules, skills, extensions, MCP servers and settings. The other three have no flag
120
120
  that drops their tools or takes a system prompt. They run with the least their
121
- `--help` offers: opencode `--pure`, cursor-agent `--mode ask`, codex
122
- `-s read-only --ephemeral`. Their prompt starts with the system prompt.
121
+ `--help` offers: cursor-agent `--mode ask`, codex `-s read-only --ephemeral`,
122
+ and opencode `--format json`. The 2.0 CLI dropped the `--pure` its 1.18
123
+ offered, so the judge's inline config stays what denies its tools. Their prompt
124
+ starts with the system prompt.
123
125
  `opencode run` ran a shell command its prompt asked for in a probe on
124
126
  2026-10-09. So it also gets an inline config that denies every tool
125
127
  (`SESSION_ENV`, `hooks/tezgah_judge.py::SESSION_ENV`). With it, the same probe
package/docs/layers.md CHANGED
@@ -56,7 +56,7 @@ Must not own the user's rules, the evidence of the turn or the refusal. A
56
56
  runtime runs what the model asks; nothing inside it stops the model, which is
57
57
  the whole reason tezgah exists ([architecture](architecture.md)).
58
58
 
59
- Here the six hosts are the runtimes, one config dir per host
59
+ Here the fourteen hosts (claude, codex, cursor, opencode, dsh, omp, qwen, droid, commandcode, copilot, gemini, antigravity, goose, amp) are the runtimes, one config dir per host
60
60
  (`hooks/tezgah_paths.py::HOST_DIRS`) with one presence test (`host_installed`
61
61
  `hooks/tezgah_paths.py::host_installed`), and the adapter under `hosts/<name>/` holds the
62
62
  host's envelope and nothing else ([hosts](hosts.md)). The README's own intro
@@ -94,8 +94,8 @@ frameworks.
94
94
  | agent framework | is it composed *from* elsewhere, or does it compose? A framework is composed from building blocks and stays a framework agent | tezgah plugs into its extension points, supplies none |
95
95
  | SDK | does it leave the iteration to its caller? A client library gives a call and stops | tezgah ships no client; it reads a host's event JSON on stdin (`hosts/codex/hook.py:1-2`) |
96
96
  | IDE plugin | is it a guest inside another program's surface? It draws and forwards and owns no task runtime | `hosts/opencode/plugins/tezgah.js:1-12` is one, and is a plugin |
97
- | eval harness | does it produce a score over a task set? It measures and enforces nothing | an eval scaffold is vendored as the `lm-evaluation-harness` skill body (`skills/ai-research/11-evaluation/lm-evaluation-harness/SKILL.md:11`), and this project's measurements live apart from the layer (`docs/README.md:88-89`) |
98
- | orchestrator | does it split one request across many runs and merge them? A harness runs one job to a report | the `harness` skill's route table (`skills/harness/SKILL.md:2-8`) and the graph workflows (`hooks/tezgah_policy.py::WORKFLOWS`) |
97
+ | eval harness | does it produce a score over a task set? It measures and enforces nothing | an eval scaffold is vendored as the `lm-evaluation-harness` skill body (`skills/ai-research/11-evaluation/lm-evaluation-harness/ENTRY.md:11`), and this project's measurements live apart from the layer (`docs/README.md:88-89`) |
98
+ | orchestrator | does it split one request across many runs and merge them? A harness runs one job to a report | the `harness` skill's route table (`skills/harness/SKILL.md:41-53`) and the graph workflows (`hooks/tezgah_policy.py::WORKFLOWS`) |
99
99
  | MCP | does it only carry a call and its result? Then it is transport, not a layer with policy or evidence | the section below |
100
100
 
101
101
  ## Why tezgah is not an agent harness
@@ -131,7 +131,7 @@ by solving the task.
131
131
  |---|---|---|
132
132
  | tezgah's own | the wrapper around a host - the injected contract, the per-turn text still travelling in the `<harness-reminder>` envelope (`hooks/tezgah_policy.py::PROMPT_REMINDER`), the gate and the ledger | [glossary](glossary.md#harness) |
133
133
  | the literature's | the host itself: a "complete agent runtime", which the README's intro also calls a harness for dsh (`README.md:27-28`) | [hosts](hosts.md) |
134
- | the skill's | multi-agent harness selection: which graph workflow or subagent set runs a task too wide for one window (`skills/harness/SKILL.md:2-8`, [skills](skills.md)) | [glossary](glossary.md#harness-skill) |
134
+ | the skill's | multi-agent harness selection: which graph workflow or subagent set runs a task too wide for one window (`skills/harness/SKILL.md:11-20`, [skills](skills.md)) | [glossary](glossary.md#harness-skill) |
135
135
 
136
136
  A claim that says "apply X to the harness" is therefore unreadable until it says
137
137
  which. Write **host** for the runtime, **the harness skill** for multi-agent
package/docs/models.md CHANGED
@@ -22,7 +22,14 @@ generated in every tezgah root because routing needs no capability (`ROLES`,
22
22
  `hooks/tezgah_agents.py::ROLES`; their brief, `_worker_body`,
23
23
  `hooks/tezgah_agents.py::_worker_body`). So are the five specialists:
24
24
  `tezgah-tester`, `tezgah-docs`, `tezgah-security`, `tezgah-ui` and
25
- `tezgah-researcher` (`hooks/tezgah_agents.py::SPECIALISTS`). A specialist's
25
+ `tezgah-researcher` (`hooks/tezgah_agents.py::SPECIALISTS`). The steering line names the agent per
26
+ task class (`hooks/tezgah_agents.py::STEER`).
27
+ Software design, invariants and unknown-cause debugging go to `tezgah-frontier`.
28
+ A UI, screen or component build or redesign goes to `tezgah-standard`.
29
+ Every tier worker's brief tells a UI build to read the `design-contract` skill, and
30
+ `design-library` for critique (`hooks/tezgah_agents.py::_worker_body`).
31
+ It then derives and checks with `~/.config/tezgah/bin/tezgah-design` before editing.
32
+ Running-app UI or design analysis stays with `tezgah-ui`. A specialist's
26
33
  description names its slot from `AGENT_SLOT`. The tier a host shows and the
27
34
  model line it runs therefore cannot disagree, and `tezgah-agents --list` prints
28
35
  both. A cheaper worker that meets work above its tier answers `ESCALATE: <why>`,
@@ -33,15 +40,31 @@ field or judgement, and only a second miss restarts the task on `tezgah-frontier
33
40
  with the original brief rather than handing the failed trajectory up: continuing a
34
41
  cheap trajectory on a frontier model was the most expensive option measured
35
42
  (arXiv 2608.24358, Table 1: 1.61 cost units against 0.72 for frontier-only).
43
+ A question only the owner can answer climbs past every tier, frontier included.
44
+ It is choosing a variant or option a research, analysis or review recommends, a
45
+ way around a tezgah refusal, or deciding about another session's work. The
46
+ worker answers `ESCALATE: owner` with the options and a recommended default
47
+ (`hooks/tezgah_agents.py::OWNER_ESCALATE`). The orchestrator puts it to the
48
+ user in the approval batch and does not re-brief it.
36
49
 
37
50
  ## The table (snapshot 2026-09-30)
38
51
 
39
- | slot | agents | anthropic | zai (omp's own provider) | openai | any (OpenRouter id) |
40
- |---|---|---|---|---|
41
- | cheap | tezgah-cheap, tezgah-tester | Opus 5.5 @low | `zai/glm-5.3-flash` | GPT-6.1 Sol @low | GLM-5.3 Flash |
42
- | explore | omp's bundled `scout` | Opus 5.5 @medium | `zai/glm-5.3-flash` | GPT-6.1 Sol @low | DeepSeek V4.1 Flash |
43
- | standard | tezgah-standard, tezgah-docs, tezgah-ui | Opus 5.5 @medium | `zai/glm-5.3` | GPT-6.1 Sol @high | GPT-6.1 Sol @high |
44
- | frontier | tezgah-frontier, tezgah-reviewer, tezgah-security, tezgah-researcher | Opus 5.5 @high | `zai/glm-5.3` | GPT-6 Astra @high | Opus 5.5 @high |
52
+ | slot | agents | anthropic | zai (omp's own provider) | openai | any (OpenRouter id) | experientiallabs (models.yml provider) |
53
+ |---|---|---|---|---|---|---|
54
+ | cheap | tezgah-cheap, tezgah-tester | Opus 5.5 @low | `zai/glm-5.3-flash` | GPT-6.1 Sol @low | GLM-5.3 Flash | DeepSeek V4.1 Flash Uncensored @low |
55
+ | explore | omp's bundled `scout` | Opus 5.5 @medium | `zai/glm-5.3-flash` | GPT-6.1 Sol @low | DeepSeek V4.1 Flash | DeepSeek V4.1 Flash Uncensored @low |
56
+ | standard | tezgah-standard, tezgah-docs, tezgah-ui | Opus 5.5 @medium | `zai/glm-5.3` | GPT-6.1 Sol @high | GPT-6.1 Sol @high | DeepSeek V4.1 Flash Uncensored @high |
57
+ | frontier | tezgah-frontier, tezgah-reviewer, tezgah-security, tezgah-researcher | Opus 5.5 @high | `zai/glm-5.3` | GPT-6 Astra @high | Opus 5.5 @high | DeepSeek V4.1 Flash Uncensored @high |
58
+
59
+ The `experientiallabs` column runs omp through the custom provider of the same
60
+ name in `~/.omp/agent/models.yml` (`OMP_AUTH`, `hooks/tezgah_models.py::OMP_AUTH`).
61
+ omp resolves its key from `~/.omp/.env` as `EXPERIMENTALLABS_API_KEY`.
62
+ The gateway's uncensored DeepSeek V4.1 Flash serves efforts none/low/high/max
63
+ only (gateway model metadata, read 2026-10-20). Cheap and explore therefore
64
+ carry `low` where the Anthropic column carries `medium`. The column has no
65
+ `SNAPSHOT` row: `SNAPSHOT` holds OpenRouter ids, and `refresh` compares against
66
+ OpenRouter's list. The provider's prices live in the models.yml `cost` block
67
+ instead.
45
68
 
46
69
  Why these, briefly. Inside the Anthropic family the lever is effort, not model:
47
70
  Opus 5.5 and Sonnet 5.5 read cache at the same $0.20 per 1M tokens, and on
@@ -64,7 +87,7 @@ invoices).
64
87
  | Claude Code | anthropic | the agent file's alias and `effort:` (`_model_lines`): an alias follows the provider and keeps the main session's variant, where a full id breaks on Bedrock, Vertex and a gateway (code.claude.com/docs/en/sub-agents) |
65
88
  | Codex | openai | `model` and `model_reasoning_effort` in `$CODEX_HOME/agents/*.toml` |
66
89
  | opencode | any | a selector `--refresh` found in `opencode models` for the slot's model under any configured provider (`resolve_opencode`); none found, no model line, so the agent inherits. The slot's effort rides the JSON agent config as `reasoningEffort` (opencode.ai/docs/agents) |
67
- | omp | anthropic when the session default is an Anthropic model, any otherwise (`omp_mode`); a non-Anthropic default is `any`, never a silent fall back to the Anthropic column | `task.agentModelOverrides`, which omp resolves before the agent or bundled model (omp's own docs: `omp://task-agent-discovery.md`, *Model and structured-output precedence*); every slot is written, the frontier row included, so no agent in the row runs on the session default; each override is a **fallback chain** (`omp_overrides`, `_chain`): the mode's family first, then what `fallback` in `~/.config/tezgah/config.json` allows (`tp.fallback_policy`) over the families this machine holds a credential for (`funded_families` reads omp's auth store and the provider env keys; a family it cannot see is left out, never guessed in) - `vendor`, the default, keeps only the session vendor's model (`openrouter/anthropic/claude-opus-5.5:<effort>` behind an Anthropic session, `OPENROUTER_ID`), so a 429 never moves an Opus session's subagent onto GPT or GLM; `any` adds every other funded family, rotated per agent; `none` writes the first entry alone - omp splits the chain into per-spawn patterns (omp's own docs: `omp://settings.md (its `retry.fallbackChains` section)`), so one provider's 429 falls through instead of killing the spawn, measured before this: 24 of 26 post-routing 429s hit a subagent's first request, all on one Opus account every slot shared; `apply_omp` also writes `modelRoles.plan` and `.slow` on that frontier row (same record, same ownership) so plan mode designs on it, and their fallbacks go to `retry.fallbackChains.<role>` under the same `fallback` rule, the only chain keys tezgah owns (`default` and provider-keyed chains stay the user's); `apply_omp` writes through the installer's own binary and agent dir, from HOME so a repository's `.omp/config.yml` never leaks machine-wide, and touches only the entries tezgah wrote (recorded in `~/.config/tezgah/models.json` as `omp_written`; a machine written before that record is adopted by its value, `_ours_by_shape`); a changed `fallback` reaches omp on the next `tezgah-route --refresh` or `tezgah-setup --install` |
90
+ | omp | the saved `--mode` family, else anthropic when the session default is an Anthropic model, `experientiallabs` when it is an `experientiallabs/` selector, `any` otherwise (`omp_mode`); a non-Anthropic default is `any`, never a silent fall back to the Anthropic column | `task.agentModelOverrides`, which omp resolves before the agent or bundled model (omp's own docs: `omp://task-agent-discovery.md`, *Model and structured-output precedence*); every slot is written, the frontier row included, so no agent in the row runs on the session default; each override is a **fallback chain** (`omp_overrides`, `_chain`): the mode's family first, then what `fallback` in `~/.config/tezgah/config.json` allows (`tp.fallback_policy`) over the families this machine holds a credential for (`funded_families` reads omp's auth store and the provider env keys; a family it cannot see is left out, never guessed in) - `vendor`, the default, keeps only the session vendor's model (`openrouter/anthropic/claude-opus-5.5:<effort>` behind an Anthropic session, `OPENROUTER_ID`), so a 429 never moves an Opus session's subagent onto GPT or GLM; `any` adds every other funded family, rotated per agent; `none` writes the first entry alone - omp splits the chain into per-spawn patterns (omp's own docs: `omp://settings.md (its `retry.fallbackChains` section)`), so one provider's 429 falls through instead of killing the spawn, measured before this: 24 of 26 post-routing 429s hit a subagent's first request, all on one Opus account every slot shared; `apply_omp` also writes `modelRoles.plan` and `.slow` on that frontier row (same record, same ownership) so plan mode designs on it, and their fallbacks go to `retry.fallbackChains.<role>` under the same `fallback` rule, the only chain keys tezgah owns (`default` and provider-keyed chains stay the user's); `apply_omp` writes through the installer's own binary and agent dir, from HOME so a repository's `.omp/config.yml` never leaks machine-wide, and touches only the entries tezgah wrote (recorded in `~/.config/tezgah/models.json` as `omp_written`; a machine written before that record is adopted by its value, `_ours_by_shape`); a changed `fallback` reaches omp on the next `tezgah-route --refresh` or `tezgah-setup --install` |
68
91
  | dsh | - | none: no model setting was found to write |
69
92
 
70
93
  The orchestrator agent keeps `model: inherit`: it is the main thread's own agent.
@@ -215,7 +238,7 @@ moved against the snapshot (`SNAPSHOT`, `hooks/tezgah_models.py::SNAPSHOT`;
215
238
  re-applies omp's overrides. Scores are not re-read - they need a key - so
216
239
  `tezgah-route --check` reports the snapshot's age and exits 1 past 60 days or with
217
240
  a flag (`check`, `hooks/tezgah_models.py::check`); that is the moment to re-read
218
- the leaderboards and edit `SLOTS`. `tezgah-route --mode anthropic|zai|any|openai|auto|off` pins
241
+ the leaderboards and edit `SLOTS`. `tezgah-route --mode anthropic|zai|any|experientiallabs|openai|auto|off` pins
219
242
  omp's family instead of following the session default; `off` removes every entry
220
243
  and role the table wrote and writes nothing, which is the way back when the
221
244
  provider those selectors need has no budget - a measured case, not a
@@ -229,6 +252,11 @@ omp status report carries a row for them.
229
252
  login (`OMP_OPENAI`, `hooks/tezgah_models.py::OMP_OPENAI`). Its ids are not the
230
253
  Codex host's `openai` column, which omp does not list. The mode is never a
231
254
  fallback for the others, and with no `openai-codex` login it writes nothing.
255
+ `experientiallabs` pins the custom models.yml provider of the same name
256
+ (`FAMILY_PREFIX`, `hooks/tezgah_models.py::FAMILY_PREFIX`). The selector is
257
+ `experientiallabs/<model id>`, and omp reads its key from `~/.omp/.env`. The
258
+ mode therefore applies even where that env var is not exported to the shell
259
+ tezgah runs in.
232
260
 
233
261
  ## Source of truth
234
262
 
@@ -19,8 +19,8 @@ before an install is considered.
19
19
  | `--install` | Arm the `--hosts` (default: every detected host): writes `~/.config/tezgah/config.json`, the contract hash, the `~/.config/tezgah/bin` symlinks and every host file, then prints the report. Installs the missing optional tools first unless `--no-deps`; third-party host CLIs (cursor-agent, pnpm, dsh) only with `--host-deps`, otherwise their exact install command is printed. Exits 1 when a requested tool is still missing, naming the cause (`installer failed with exit N`, or `exited 0 but not on PATH`) (`bin/tezgah-setup::main`, `bin/tezgah-setup::install_all`, `bin/tezgah-setup::install_deps`). It also exits 1 when a planned host is left unarmed, and names it under `not armed:`. Only the arming rows count: hooks wired, the contract current, and the row a host's own CLI arms where that CLI exists: omp's extension row with an omp CLI, Claude's `plugin copy current` with a `claude` CLI. Codex `hooks trusted` and the provider-key rows stay out, because a correct fresh install leaves them MISS (`ARMING_ROWS`, `arming_miss()`). A host config that does not parse as a JSON object is refused: the run names the file and the parse error, never writes it, and exits 1 (`read_config()`); tezgah's own `config.json` is refused the same way. Claude is registered through its own CLI (`register_claude_plugin()`): the run renders `.claude-plugin/{plugin,marketplace}.json` from the release version into the tree it runs from (untracked; a pair under another marketplace name is kept), runs `claude plugin marketplace add <tree>` (a directory source pinned to that tree) and `claude plugin install tezgah@tezgah-local`, and skips both when any `tezgah@*` row is already in `installed_plugins.json`, because a second row fires every hook twice. `--reply-lang tr|en|any` stores `reply_lang` in `config.json`; without it the stored value stays, and a config with none reads as `tr`. |
20
20
  | `--wizard` | Ask the install questions and write only after the final yes; the other flags supply the defaults, so `--wizard --hosts omp` asks only the rest (`bin/tezgah-setup::wizard`). |
21
21
  | `--report` | Print what is armed, per host, and stop (`bin/tezgah-setup::main`, `bin/tezgah-setup::report`). |
22
- | `--report --live` | Proves the hooks run, not only that they are written (audit Phase 1.2). For each host, one synthetic PostToolUse (`true`) goes through that host's own wiring: the command in `~/.codex/hooks.json`, `~/.cursor/hooks.json`, the enabled Claude plugin copy's `hooks/hooks.json` (with `CLAUDE_PLUGIN_ROOT`), the hooks.json named by dsh's `cordis.patch.yml`; the opencode plugin is imported with node the way opencode imports it; the omp extension `.ts` is loaded with node `--experimental-strip-types` after checking it is in omp's `extensions` list. A ledger row for a dedicated `tezgah-live-<pid>-<ms>` session must appear; the event runs against a throwaway root (`TEZGAH_ROOTS`) and every cache file named for that session is deleted afterwards. A second probe per host proves the gate: one PreToolUse for `git commit --no-verify -m x` through the same wiring must come back as that host's deny (Claude, Codex and dsh `permissionDecision: deny`, Cursor `permission: deny`, omp `block: true`, opencode a throw) and leave a `deny` row in the ledger; under `pretooluse-off` or `verify-off` it reads UNVERIFIED and names the switch (`live_probe()`, `LIVE_DENY_COMMAND`). The omp bridge must also match a fresh render byte for byte, from the renderer the install writes with (`omp_bridge()`). Rows read `ok live <host>` / `ok live <host> deny`, `MISS live <host>: <cause>` (no tezgah command in the host file, the command wrote no row, no deny envelope or no deny row, a hand-edited omp bridge, Codex does not trust tezgah's group) or `UNVERIFIED live <host>: <why>` (node missing or older than 22.6, the omp CLI did not answer, a switch that stands the refusal down). It exits 1 when any host is MISS; UNVERIFIED never fails the run and is never shown as ok. No model is called. |
23
- | `--refresh` | Re-render every always-on contract artifact of the armed hosts - the managed blocks of `CLAUDE.md`, Codex's `AGENTS.md` and omp's `RULES.md`, opencode's contract and skill routers - after a policy edit or a kill switch; prints the paths it refreshed, else `contract is current`. Before the first install there is no hash record, so it changes nothing (`refresh_contract`, `bin/tezgah-setup::refresh_contract`). |
22
+ | `--report --live` | Proves the hooks run, not only that they are written (audit Phase 1.2). For each host, one synthetic PostToolUse (`true`) goes through that host's own wiring: the command in `~/.codex/hooks.json`, `~/.cursor/hooks.json`, `~/.qwen/settings.json` (a `run_shell_command` payload), `~/.factory/hooks.json` (an `Execute` payload), `~/.commandcode/settings.json` (a `shell_command` payload), `$COPILOT_HOME/hooks/tezgah.json` (a `Bash` payload), `~/.gemini/extensions/tezgah/hooks/hooks.json` (a `run_shell_command` payload), the `tezgah` name of `~/.gemini/config/hooks.json` (a camelCase `run_command` payload, the event on the command line), `~/.agents/plugins/tezgah/hooks/hooks.json` (a `shell` payload, the event in `event`), the enabled Claude plugin copy's `hooks/hooks.json` (with `CLAUDE_PLUGIN_ROOT`), the hooks.json named by dsh's `cordis.patch.yml`; the opencode plugin is imported with node the way opencode imports it; the omp extension `.ts` is loaded with node `--experimental-strip-types` after checking it is in omp's `extensions` list; Amp's plugin `tezgah.ts` is loaded the same way and fed Amp's own `tool.call`/`tool.result` events (a `Bash` call carrying `cmd`). A ledger row for a dedicated `tezgah-live-<pid>-<ms>` session must appear; the event runs against a throwaway root (`TEZGAH_ROOTS`) and every cache file named for that session is deleted afterwards. A second probe per host proves the gate: one PreToolUse for `git commit --no-verify -m x` through the same wiring must come back as that host's deny (Claude, Codex, dsh, Qwen, Droid and Command Code `permissionDecision: deny` under `hookSpecificOutput`, Copilot the same at the top level, Gemini and Antigravity a top-level `decision: deny`, Goose a top-level `decision: block`, Cursor `permission: deny`, omp `block: true`, Amp `action: reject-and-continue`, opencode a throw) and leave a `deny` row in the ledger; under `pretooluse-off` or `verify-off` it reads UNVERIFIED and names the switch (`live_probe()`, `LIVE_DENY_COMMAND`). The omp bridge and the Amp plugin must also match a fresh render byte for byte, from the renderer the install writes with (`omp_bridge()`, `hooks/tezgah_attest.py::amp_plugin`). Rows read `ok live <host>` / `ok live <host> deny`, `MISS live <host>: <cause>` (no tezgah command in the host file, the command wrote no row, no deny envelope or no deny row, a hand-edited omp bridge or Amp plugin, Codex does not trust tezgah's group) or `UNVERIFIED live <host>: <why>` (node missing or older than 22.6, the omp CLI did not answer, a switch that stands the refusal down, and always for Amp, whose own Bun loader is not what ran the plugin). It exits 1 when any host is MISS; UNVERIFIED never fails the run and is never shown as ok. No model is called, so the probe proves the hook command, not that the host binary obeys it: for Qwen that is `TEZGAH_E2E_SPEND=1 python3 tests/e2e_qwen.py` and for Droid `TEZGAH_E2E_SPEND=1 python3 tests/e2e_droid.py`, each spending a model call; Command Code, Copilot, Gemini, Antigravity, Goose and Amp have no such script yet, so their obedience is unverified. |
23
+ | `--refresh` | Re-render every always-on contract artifact of the armed hosts - the managed blocks of `CLAUDE.md`, Codex's `AGENTS.md`, omp's `RULES.md`, Qwen's `QWEN.md`, Droid's, Command Code's and Amp's `AGENTS.md`, Copilot's `copilot-instructions.md`, the `GEMINI.md` Gemini and Antigravity share, Goose's `.goosehints`, opencode's contract and skill routers - after a policy edit or a kill switch; prints the paths it refreshed, else `contract is current`. Before the first install there is no hash record, so it changes nothing (`refresh_contract`, `bin/tezgah-setup::refresh_contract`). |
24
24
  | `--uninstall` | Remove everything tezgah installed — per host the wiring it wrote, plus (a full run) the Claude plugin copy with its registry rows, the generated config state, the kill switches, the caches and the versioned install tree — then verify the removal; nonzero exit while anything tezgah wrote survives (`bin/tezgah-setup::verify_uninstall`, `bin/tezgah-setup::uninstall`). |
25
25
  | `--adopt` | Move pre-tezgah wiring aside instead of deleting it; alone it stops there, with `--install` it runs first (`bin/tezgah-setup::main`, `bin/tezgah-setup::adopt`). |
26
26
  | `--sync` | Copy this checkout over the Claude plugin [copy](glossary.md#plugin-copy) `installed_plugins.json` names, or over every copy when it names none (`bin/tezgah-setup::sync`, `bin/tezgah-setup::live_plugin_copies`). An older version dir is Claude's cache to collect, so it is left alone. Each copy is built in a staging tree beside the plugin cache and swapped in with two renames, its `.git` carried over, so a failed or killed sync leaves the previous copy whole (`bin/tezgah-setup::_swap`). Every copied file is 0644, or 0755 when the tree marks it executable, whatever mode the source has (`bin/tezgah-setup::_copy_normalised`). |
@@ -41,7 +41,7 @@ before an install is considered.
41
41
  | `update` | `tezgah update [--dry-run]` moves this install to the newest release through the channel it came from, then re-arms the hosts from the new tree. A release prefix goes through `--upgrade`. A Homebrew keg runs `brew upgrade r1z4x/tezgah/tezgah`, an npm tree runs `npm install -g @r1z4x/tezgah@latest`, and a git checkout runs `git pull --ff-only` (`update()`, `hooks/tezgah_update.py`). Before re-arming it prints every tezgah hook entry the new tree adds, removes or changes, per host. Paths compare with the tree root taken out, so a move to the new release's own path is no change. A real change on a terminal waits for a yes; Enter is no. A piped run goes on without asking (decision 12; `hooks/tezgah_update.py::confirm_rearm`). A no exits 1 after the fetch and says what it left. A checkout or an npm package is replaced in place, and the prefix's `current` already points at the new tree, so there the hooks run the new code and only the changed entries wait. A Homebrew keg is new beside the old one, so hooks wired to the old keg's path run the old code until the re-arm (`NOT_REARMED`, `hooks/tezgah_update.py::NOT_REARMED`). |
42
42
  | `--version` | Print the plugin version and exit (`bin/tezgah-setup::main`, `hooks/tezgah_context.py::version`). |
43
43
  | `--roots R` | Set the roots for this install, `os.pathsep`-separated. Without `--install` it exits 1: `--roots only means something with --install` (`bin/tezgah-setup::main`). |
44
- | `--hosts H` | Comma-separated subset of `claude,codex,opencode,cursor,dsh,omp`; an unknown name exits 1 before anything is written, and naming hosts switches off the re-detection that follows a tool install (`bin/tezgah-setup::main`, `bin/tezgah-setup::install_all`). |
44
+ | `--hosts H` | Comma-separated subset of `claude,codex,opencode,cursor,dsh,omp,qwen,droid,commandcode,copilot,gemini,antigravity,goose,amp`; an unknown name exits 1 before anything is written, and naming hosts switches off the re-detection that follows a tool install (`bin/tezgah-setup::main`, `bin/tezgah-setup::install_all`). `--install --hosts X` adds X to the hosts recorded in `config.json` and keeps the others. |
45
45
  | `-h`, `--help` | Usage and the list above (`bin/tezgah-setup::main`). |
46
46
 
47
47
  A green `--report` says the wiring is on disk; `--report --live` says it ran. What it cannot cover is the host binary itself: it runs the command the host would run, not the host, so a host that refuses to load its own config (a Claude plugin disabled in the UI after the check, a dsh build whose bridge drops the event) still needs a real session to show.
@@ -186,7 +186,7 @@ too, from the same `hosts_row`, so the mismatch reaches the surface a session
186
186
  checks its own health with. Two places deliberately do not: the status line's
187
187
  marks are the armed/used checklist and are redrawn by a fresh process on every
188
188
  host (omp re-renders per tool result), while "wired" is `HOST_CHECKS`, the
189
- installer's own reading of six host files — a second reading of it in `hooks/`
189
+ installer's own reading of eight host files — a second reading of it in `hooks/`
190
190
  would be the drift `AGENTS.md` names as the report's source of truth; and
191
191
  `bin/tezgah-doctor` accounts for the bytes the hosts' stores hold and never reads
192
192
  a host's config, so a wiring row there would belong to a different tool.
@@ -233,7 +233,7 @@ After a change to the contract text (`hooks/tezgah_policy.py`,
233
233
  - `--install` re-renders every host file, the opencode contract and the skill
234
234
  router, and rewrites `~/.config/tezgah/contract.sha256`, which holds one
235
235
  `<sha> <path>` line per rendered artifact - the managed blocks of
236
- `CLAUDE.md`, `AGENTS.md` and `RULES.md`, `opencode-contract.md` and the
236
+ `CLAUDE.md`, Codex's, Droid's, Command Code's and Amp's `AGENTS.md`, `RULES.md`, `QWEN.md`, `copilot-instructions.md`, `GEMINI.md` and `.goosehints`, `opencode-contract.md` and the
237
237
  `opencode-skills*.md` routers - rather than one hash over the sources
238
238
  (`bin/tezgah-setup::record_shas`, `bin/tezgah-setup::contract_artifacts`).
239
239
  - `--refresh` does that without a reinstall, for every armed host's static
@@ -401,6 +401,19 @@ extension the engine has no parser for and an extensionless script it cannot key
401
401
  on at all. The extensionless case is why `bin/*` carries `.py` twins, and the
402
402
  report counts a tracked `bin/x` as covered when the index holds `bin/x.py`.
403
403
 
404
+ A linked worktree starts with its main checkout's index. Git ignores
405
+ `.codegraph/`, so a new worktree has none. When the main checkout has one, the
406
+ auto-index copies it into the worktree before it starts the worker
407
+ (`hooks/tezgah_context.py::seed_index`, called from
408
+ `hooks/tezgah_context.py::autoindex`). The copy uses sqlite's backup API. The
409
+ worker then runs `codegraph sync`, not `init` (`hooks/tezgah_index.py::command`).
410
+ The database stores repo-relative paths, so the synced copy reads the
411
+ worktree's own files. On this
412
+ repository a sync over the copy took 1 s, and a fresh `init` took 10 s.
413
+ `tezgah-task start` run inside a worktree seeds and starts the index the same
414
+ way (`bin/tezgah-task::cmd_start`). A copy that fails leaves the worktree to
415
+ `init`, as before.
416
+
404
417
  ## Opt-in taste: capture, learn, apply
405
418
 
406
419
  Taste learns the user's coding preferences from their own corrections. It is
@@ -631,6 +644,103 @@ it costs nothing there. On held-out Turkish phrasings of the docs index,
631
644
  meaning alone found the page in the top three for 0.91 with `embed-mrl` and 0.78
632
645
  with `embed-m2v`. The fusion found it for 0.75 and 0.74, BM25 for 0.68.
633
646
 
647
+ ## Opt-in OCR review spec: `ocr`
648
+
649
+ The `ocr` feature id adds open-code-review (OCR) to a plan's review. It is off by
650
+ default (`"default": False` in `hooks/tezgah_apps.py::REGISTRY`). Turn it on with
651
+ `tezgah-setup --enable ocr`, which runs
652
+ `npm install -g @alibaba-group/open-code-review@1.13.2`, the release whose prompts,
653
+ delegate and rules match the vendored 375f64c texts. The binary is
654
+ found by `ocr_bin()` (`hooks/tezgah_paths.py::ocr_bin`): `TEZGAH_OCR_BIN` first,
655
+ then `ocr` on PATH. The verification step uses it only while `features` in
656
+ config.json lists `ocr`, so an `ocr` installed for other
657
+ work changes nothing. The report prints one `ocr on PATH` row
658
+ (`bin/tezgah-setup::report`). Without `ocr` nothing changes: the verification
659
+ step prints the same lines as before.
660
+
661
+ With `ocr` installed, round one of the verification step adds an OCR review spec
662
+ (`bin/tezgah-task::print_ocr_spec`). It runs `ocr delegate preview` and
663
+ `ocr delegate rule` over `<base>..HEAD`. Both are deterministic and call no model
664
+ (`bin/tezgah-task::ocr_spec`). The spec is input to the review, never a verdict.
665
+ A failed or timed-out call prints one `OCR spec skipped:` line and the step
666
+ goes on without it (`bin/tezgah-task::ocr_json`).
667
+
668
+ The spec prints these lines:
669
+
670
+ - The reviewable files OCR selected.
671
+ - The files OCR excluded, with OCR's reason. OCR excludes tests and `.md` files.
672
+ They stay in the reviewer's scope: one more tezgah-reviewer reads them over the
673
+ usual dimensions.
674
+ - The reviewer split, which follows OCR's own bundling thresholds. Under 4 files
675
+ and under 200 changed lines, one reviewer reads the whole change set. Under 4
676
+ files, one reviewer reads each file. From 4 files, one reviewer reads each OCR
677
+ rule group. Each brief carries its group's rule text verbatim and names the
678
+ vendored `main_task_system.md` as an appendix (`bin/tezgah-task::OCR_PROMPTS`).
679
+ Without a rule group, the per-dimension fan-out stands.
680
+ - The refuter pass. Once the review merges its findings, one fresh tezgah-reviewer reads
681
+ the vendored `review_filter_task_system.md` as its instructions. It removes
682
+ only findings the diff proves wrong.
683
+ - The quote check, `tezgah-review-quote` over the merged findings.
684
+
685
+ The reviewer brief carries the matching rule
686
+ (`hooks/tezgah_agents.py::_reviewer_body`). A reviewer given an OCR rule group
687
+ accounts for every listed file as reviewed or skipped with a reason. It still
688
+ applies the rest of its brief.
689
+
690
+ The reviewer also has a plan-readiness mode for a plan file instead of a diff
691
+ (`hooks/tezgah_agents.py::_reviewer_body`). It restates each section's intent in
692
+ one sentence. A section it cannot restate is a major finding. A build choice the
693
+ plan leaves to the implementer is a major finding too. A file the plan will
694
+ create is not a missing reference. `skills/plan-add/SKILL.md` runs this review
695
+ once before the `implementation` phase.
696
+
697
+ `tezgah-review-quote --from BASE [--to HEAD] FINDINGS.json` places each finding by
698
+ its quoted code (`bin/tezgah-review-quote::main`). Each finding needs `path` and
699
+ `quote`, and may carry the `start_line` it cites. The tool adds a `status`.
700
+ `located` means the quote is in the finding's own file. The match covering the
701
+ cited line wins, else the one new-side match, else the one match. `unlocated`
702
+ with `reason: "ambiguous: N matches"` means several matches and no cited line
703
+ among them. `relocated` means no match in its own file and exactly one in
704
+ another changed file, and `path` moves there. Any other `unlocated` finding goes
705
+ back to its reviewer. A placed finding gets `start_line` and `end_line`, and
706
+ `side: "old"` when the lines are pre-change (`bin/tezgah-review-quote::resolve`).
707
+ It ports OCR's comment positioning from `internal/diff/resolver.go`.
708
+
709
+ `tezgah-ocr-review [--from REF --to REF | --commit SHA] [--model SELECTOR]
710
+ [--output FILE] [--allow-secrets]` runs OCR's own review loop on omp only. It
711
+ starts one `omp auth-gateway stdio` child (`bin/tezgah-ocr-review::Gateway`).
712
+ OCR then reviews on omp's model with omp's own credentials.
713
+
714
+ - A loopback HTTP shim forwards OCR's requests to that child
715
+ (`bin/tezgah-ocr-review::handler`). It accepts `POST /v1/chat/completions` and
716
+ `GET /v1/models` only, with the per-run bearer token the tool hands OCR.
717
+ Another local process cannot spend omp's credentials during a run.
718
+ - The tool writes no OCR provider config. OCR runs with a private, empty `HOME`.
719
+ A `~/.opencodereview/config.json` from standalone OCR use cannot redirect the
720
+ review.
721
+ - Only the OCR process loses the caller's `OCR_*`, `ANTHROPIC_*` and `OPENAI_*`
722
+ variables (`bin/tezgah-ocr-review::run`). Git under OCR keeps the user's
723
+ global config and excludes, so a globally ignored file stays ignored. The omp
724
+ child keeps the caller's environment, because it needs omp's own credentials.
725
+ - A path that looks like a secret stops the run with exit 3
726
+ (`bin/tezgah-ocr-review::first_secret`). In workspace mode the check covers
727
+ tracked, untracked and ignored files. In range or commit mode it covers the
728
+ tree of the reviewed ref. `--allow-secrets` skips the check. The patterns are
729
+ OCR's own (`bin/tezgah-ocr-review::SECRET_PATTERNS`).
730
+ - A missing `ocr` or `omp` exits 2. A setup failure of the tool itself exits 4
731
+ with one line (`bin/tezgah-ocr-review::SetupError`). Three failures count:
732
+ no git repository, omp cannot start, the gateway never reports ready.
733
+
734
+ Its findings are candidates for a tezgah-reviewer, never a verdict.
735
+
736
+ `tezgah-setup` links both CLIs into `~/.config/tezgah/bin`
737
+ (`bin/tezgah-setup::install_common`).
738
+
739
+ The two OCR prompts live under `third_party/open-code-review/`. Tezgah copies them
740
+ verbatim from alibaba/open-code-review at commit `375f64c`, under the Apache
741
+ License 2.0, with its `LICENSE` beside them. Each prompt has one added first
742
+ line, the modification notice (`third_party/open-code-review/README.md`).
743
+
634
744
  ## Plan records: the lock, `landed`, the close commit
635
745
 
636
746
  Every `tezgah-task` writer of a plan record holds an exclusive lock on the
@@ -746,6 +856,10 @@ that was active when it opened, and only that plan's records count. A record
746
856
  with no plan counts when it changed after the plan's checkpoint commit. A
747
857
  `resumed` record hands the guard to its re-dispatch's own record
748
858
  (`bin/tezgah-task::unfinished_review`).
859
+ `tezgah-task review` also refuses an approve with no record of that reviewer for the plan. A
860
+ reviewer with no status did not run. A host that keeps no slice journal passes
861
+ `--no-slice "<why>"`, and the plan's `review:` line keeps that reason
862
+ (`bin/tezgah-task::cmd_review`). A `changes` verdict needs no record.
749
863
  The lever map is a closed set. `rate_limit` and `quota` point at the
750
864
  `hooks/tezgah_models.py` fallback chain. `cut_off` and `timeout` point at a
751
865
  per-slice deadline, `aborted` at the `wip:` commit cadence, a duplicate job at
@@ -761,6 +875,24 @@ The `~/.config/tezgah/slices-off` switch
761
875
  stops the hooks from writing records (`hooks/tezgah_paths.py::UNCLASSIFIED_SWITCHES`).
762
876
  A cwd outside a git repository writes nothing either.
763
877
 
878
+ ## A repository that is not this harness's
879
+
880
+ Tezgah arms every repository under a root, because `roots()` is the only switch
881
+ that decides. Every other switch is global (`~/.config/tezgah/*.off`) or
882
+ per-feature (`.no-ponytail`, `.no-graph`). A project whose workspace is not this
883
+ harness's says so itself, in a `tezgah.owner` file it commits at its own top:
884
+
885
+ | Setting | What stops |
886
+ |---|---|
887
+ | `tasks: off` | the plan and task machine: no active task (`hooks/tezgah_task.py::_phased`), so no per-turn phase line and no scope held to a plan, the record rule holds no write to its own plan files (`hooks/tezgah_task.py::phased_record`), and every `tezgah-task` command that writes a record - the plan writers, the slice journal and `sweep` - is refused with the file named (`bin/tezgah-task::writes_a_record`, `bin/tezgah-task::owner_mark`). The scope gate, `bin/run-tool`, research and lessons keep reading the repository |
888
+ | `harness: excluded` | everything: `root_for` answers None, so no contract text is injected, no workspace is set up, no plan, task or lesson record is written, and the gate passes every call (`hooks/tezgah_paths.py::harness_excluded`) |
889
+ | `owner: <name>` | nothing - it names who owns the workspace, for the person reading the diff |
890
+
891
+ The file comes from the nearest `.git` top at or above the path, so a repository
892
+ cloned inside a marked one answers for itself. A missing or unreadable file, an
893
+ unknown key and a blank value decide nothing
894
+ (`hooks/tezgah_paths.py::owner_marker`).
895
+
764
896
  ## Troubleshooting
765
897
 
766
898
  | Symptom | First check | Likely cause |
@@ -911,6 +1043,10 @@ page exits 1 with the message it always printed (`available()`,
911
1043
  spawn parser, reconcile, resume, prune and stats.
912
1044
  - `hooks/tezgah_paths.py`, `hooks/tezgah_context.py` — the paths and `off()`; the
913
1045
  marks and the kill-switch filtering.
1046
+ - `bin/tezgah-task`, `bin/tezgah-review-quote`, `bin/tezgah-ocr-review`,
1047
+ `third_party/open-code-review/` — the opt-in OCR review spec, the quote check,
1048
+ OCR's own loop on omp, and the vendored prompts. `tests/test_task.py`,
1049
+ `tests/test_review_quote.py` and `tests/test_ocr_review.py` pin them.
914
1050
  - `RELEASING.md`, `README.md`, `AGENTS.md`, `.gitignore`, `tests/test_setup.py` —
915
1051
  the version rule, the install and configuration sections, the layer map, what
916
1052
  stays untracked, and the behaviour these checks pin.