@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.
- package/CHANGELOG.md +415 -1
- package/MANIFEST +404 -144
- package/README.de.md +1 -1
- package/README.es.md +1 -1
- package/README.fr.md +1 -1
- package/README.md +5 -4
- package/README.tr.md +1 -1
- package/bin/codegen +5 -2
- package/bin/tezgah-design +288 -1
- package/bin/tezgah-docs +1 -1
- package/bin/tezgah-doctor +39 -2
- package/bin/tezgah-import-ai-research +26 -12
- package/bin/tezgah-ocr-review +296 -0
- package/bin/tezgah-research +255 -44
- package/bin/tezgah-review-quote +185 -0
- package/bin/tezgah-setup +1365 -55
- package/bin/tezgah-skill +1 -1
- package/bin/tezgah-status +201 -3
- package/bin/tezgah-task +258 -20
- package/commands/adhd.md +2 -2
- package/commands/ponytail.md +4 -4
- package/docs/architecture.md +2 -2
- package/docs/citations-baseline.json +3 -3
- package/docs/clarity-baseline.json +11 -5
- package/docs/contract.md +91 -43
- package/docs/environment.md +5 -2
- package/docs/evidence.md +109 -17
- package/docs/feature-audit.md +2 -2
- package/docs/gate.md +60 -33
- package/docs/glossary.md +6 -3
- package/docs/hosts.md +313 -17
- package/docs/index.json +34 -8
- package/docs/judge.md +4 -2
- package/docs/layers.md +4 -4
- package/docs/models.md +37 -9
- package/docs/operations.md +141 -5
- package/docs/research.md +815 -8
- package/docs/skills.md +137 -13
- package/docs/status-line.md +121 -1
- package/docs/testing.md +3 -1
- package/hooks/hooks.json +2 -2
- package/hooks/lang/en.json +21 -0
- package/hooks/lang/tr.json +22 -1
- package/hooks/projects-stop.py +2 -1
- package/hooks/tezgah_agents.py +65 -25
- package/hooks/tezgah_apps.py +18 -0
- package/hooks/tezgah_attest.py +79 -10
- package/hooks/tezgah_components.py +4 -0
- package/hooks/tezgah_context.py +207 -55
- package/hooks/tezgah_extension.py +337 -0
- package/hooks/tezgah_gate.py +267 -79
- package/hooks/tezgah_integrity.py +864 -143
- package/hooks/tezgah_judge.py +6 -4
- package/hooks/tezgah_models.py +59 -19
- package/hooks/tezgah_orca.py +1 -1
- package/hooks/tezgah_paths.py +145 -8
- package/hooks/tezgah_policy.py +128 -57
- package/hooks/tezgah_rank.py +9 -6
- package/hooks/tezgah_replay.py +12 -6
- package/hooks/tezgah_research.py +1414 -76
- package/hooks/tezgah_research_capture.py +1544 -0
- package/hooks/tezgah_research_evidence.py +842 -0
- package/hooks/tezgah_research_stats.py +258 -0
- package/hooks/tezgah_skill_pick.py +408 -106
- package/hooks/tezgah_stack.py +236 -1
- package/hooks/tezgah_stopspec.py +8 -1
- package/hooks/tezgah_task.py +14 -5
- package/hooks/tezgah_taste_ledger.py +1 -1
- package/hosts/amp/hook.py +217 -0
- package/hosts/amp/tezgah-plugin.ts.in +386 -0
- package/hosts/antigravity/hook.py +255 -0
- package/hosts/codex/hook.py +2 -1
- package/hosts/commandcode/hook.py +239 -0
- package/hosts/copilot/hook.py +284 -0
- package/hosts/cursor/hook.py +31 -3
- package/hosts/droid/hook.py +259 -0
- package/hosts/dsh/hooks.json +1 -1
- package/hosts/gemini/hook.py +213 -0
- package/hosts/goose/hook.py +145 -0
- package/hosts/omp/hook.py +4 -1
- package/hosts/omp/tezgah-hook.ts.in +30 -7
- package/hosts/opencode/plugins/tezgah.js +309 -48
- package/hosts/opencode/tui/cli/tui.tsx +100 -0
- package/hosts/opencode/tui/tezgah-tui.tsx +2 -1
- package/hosts/qwen/hook.py +206 -0
- package/output-styles/tezgah.md +20 -15
- package/package.json +1 -1
- package/skills/ai-research/SKILL.md +21 -14
- package/skills/ai-research/SOURCE +7 -5
- package/skills/ai-research/index/1-frame.md +6 -6
- package/skills/ai-research/index/2-data.md +9 -9
- package/skills/ai-research/index/3-train.md +36 -36
- package/skills/ai-research/index/4-measure.md +13 -13
- package/skills/ai-research/index/5-run.md +11 -11
- package/skills/ai-research/index/6-write.md +23 -23
- package/skills/ai-research/library.json +104 -104
- package/skills/analyze-app/SKILL.md +17 -12
- package/skills/design-contract/SKILL.md +42 -7
- package/skills/design-contract/data-views.md +2 -2
- package/skills/design-library/EVALS.md +1 -1
- package/skills/design-library/INDEX.md +39 -39
- package/skills/design-library/SKILL.md +19 -13
- package/skills/design-library/SOURCE +45 -43
- package/skills/feature-audit/SKILL.md +20 -14
- package/skills/hallmark/LICENSE +21 -0
- package/skills/hallmark/SKILL.md +154 -0
- package/skills/hallmark/SOURCE +207 -0
- package/skills/hallmark/agents/openai.yaml +13 -0
- package/skills/hallmark/references/anatomy.md +71 -0
- package/skills/hallmark/references/brand-truth.md +40 -0
- package/skills/hallmark/references/comp.md +104 -0
- package/skills/hallmark/references/craft.md +116 -0
- package/skills/hallmark/references/dark-mode.md +49 -0
- package/skills/hallmark/references/data-viz.md +48 -0
- package/skills/hallmark/references/design-md.md +53 -0
- package/skills/hallmark/references/direction.md +52 -0
- package/skills/hallmark/references/export-formats.md +80 -0
- package/skills/hallmark/references/flow.md +131 -0
- package/skills/hallmark/references/fonts.md +58 -0
- package/skills/hallmark/references/gates.md +243 -0
- package/skills/hallmark/references/genres/atmospheric.md +24 -0
- package/skills/hallmark/references/genres/editorial.md +24 -0
- package/skills/hallmark/references/genres/modern-minimal.md +24 -0
- package/skills/hallmark/references/genres/playful.md +24 -0
- package/skills/hallmark/references/imagery.md +99 -0
- package/skills/hallmark/references/interaction-and-states.md +89 -0
- package/skills/hallmark/references/layout.md +104 -0
- package/skills/hallmark/references/macrostructures/01-bento-grid.md +21 -0
- package/skills/hallmark/references/macrostructures/02-long-document.md +35 -0
- package/skills/hallmark/references/macrostructures/03-marquee-hero.md +21 -0
- package/skills/hallmark/references/macrostructures/04-stat-led.md +21 -0
- package/skills/hallmark/references/macrostructures/05-workbench.md +21 -0
- package/skills/hallmark/references/macrostructures/06-conversational-faq.md +28 -0
- package/skills/hallmark/references/macrostructures/07-manifesto.md +28 -0
- package/skills/hallmark/references/macrostructures/08-photographic.md +21 -0
- package/skills/hallmark/references/macrostructures/09-quote-led.md +21 -0
- package/skills/hallmark/references/macrostructures/10-specimen.md +21 -0
- package/skills/hallmark/references/macrostructures/11-catalogue.md +21 -0
- package/skills/hallmark/references/macrostructures/12-letter.md +21 -0
- package/skills/hallmark/references/macrostructures/13-index-first.md +21 -0
- package/skills/hallmark/references/macrostructures/14-narrative-workflow.md +21 -0
- package/skills/hallmark/references/macrostructures/15-split-studio.md +21 -0
- package/skills/hallmark/references/macrostructures/16-feature-stack.md +23 -0
- package/skills/hallmark/references/macrostructures/17-type-specimen.md +19 -0
- package/skills/hallmark/references/macrostructures/18-portfolio-grid.md +21 -0
- package/skills/hallmark/references/macrostructures/19-map-diagram.md +21 -0
- package/skills/hallmark/references/macrostructures/20-ecosystem-index.md +19 -0
- package/skills/hallmark/references/macrostructures/21-component-playground.md +21 -0
- package/skills/hallmark/references/macrostructures.md +119 -0
- package/skills/hallmark/references/microinteractions.md +80 -0
- package/skills/hallmark/references/patterns.md +202 -0
- package/skills/hallmark/references/redesign.md +88 -0
- package/skills/hallmark/references/responsive.md +46 -0
- package/skills/hallmark/references/review-finish.md +19 -0
- package/skills/hallmark/references/review-hero.md +20 -0
- package/skills/hallmark/references/scroll-choreography.md +110 -0
- package/skills/hallmark/references/texture.md +90 -0
- package/skills/hallmark/references/themes/README.md +58 -0
- package/skills/hallmark/references/themes/almanac.jpg +0 -0
- package/skills/hallmark/references/themes/almanac.md +103 -0
- package/skills/hallmark/references/themes/arcade.jpg +0 -0
- package/skills/hallmark/references/themes/arcade.md +102 -0
- package/skills/hallmark/references/themes/atelier.jpg +0 -0
- package/skills/hallmark/references/themes/atelier.md +98 -0
- package/skills/hallmark/references/themes/bloom.jpg +0 -0
- package/skills/hallmark/references/themes/bloom.md +102 -0
- package/skills/hallmark/references/themes/blueprint.jpg +0 -0
- package/skills/hallmark/references/themes/blueprint.md +103 -0
- package/skills/hallmark/references/themes/broadside.jpg +0 -0
- package/skills/hallmark/references/themes/broadside.md +108 -0
- package/skills/hallmark/references/themes/brutal.jpg +0 -0
- package/skills/hallmark/references/themes/brutal.md +95 -0
- package/skills/hallmark/references/themes/carnival.jpg +0 -0
- package/skills/hallmark/references/themes/carnival.md +104 -0
- package/skills/hallmark/references/themes/cobalt.jpg +0 -0
- package/skills/hallmark/references/themes/cobalt.md +101 -0
- package/skills/hallmark/references/themes/console.jpg +0 -0
- package/skills/hallmark/references/themes/console.md +99 -0
- package/skills/hallmark/references/themes/coral.jpg +0 -0
- package/skills/hallmark/references/themes/coral.md +102 -0
- package/skills/hallmark/references/themes/darkroom.jpg +0 -0
- package/skills/hallmark/references/themes/darkroom.md +99 -0
- package/skills/hallmark/references/themes/dose.jpg +0 -0
- package/skills/hallmark/references/themes/dose.md +98 -0
- package/skills/hallmark/references/themes/dusk.jpg +0 -0
- package/skills/hallmark/references/themes/dusk.md +105 -0
- package/skills/hallmark/references/themes/editorial.jpg +0 -0
- package/skills/hallmark/references/themes/editorial.md +97 -0
- package/skills/hallmark/references/themes/formwork.jpg +0 -0
- package/skills/hallmark/references/themes/formwork.md +107 -0
- package/skills/hallmark/references/themes/furrow.jpg +0 -0
- package/skills/hallmark/references/themes/furrow.md +98 -0
- package/skills/hallmark/references/themes/garden.jpg +0 -0
- package/skills/hallmark/references/themes/garden.md +97 -0
- package/skills/hallmark/references/themes/grid.jpg +0 -0
- package/skills/hallmark/references/themes/grid.md +101 -0
- package/skills/hallmark/references/themes/halftone.jpg +0 -0
- package/skills/hallmark/references/themes/halftone.md +106 -0
- package/skills/hallmark/references/themes/hedgerow.jpg +0 -0
- package/skills/hallmark/references/themes/hedgerow.md +104 -0
- package/skills/hallmark/references/themes/hum.jpg +0 -0
- package/skills/hallmark/references/themes/hum.md +99 -0
- package/skills/hallmark/references/themes/index.json +2191 -0
- package/skills/hallmark/references/themes/ink.jpg +0 -0
- package/skills/hallmark/references/themes/ink.md +106 -0
- package/skills/hallmark/references/themes/kiln.jpg +0 -0
- package/skills/hallmark/references/themes/kiln.md +108 -0
- package/skills/hallmark/references/themes/loom.jpg +0 -0
- package/skills/hallmark/references/themes/loom.md +106 -0
- package/skills/hallmark/references/themes/lumen.jpg +0 -0
- package/skills/hallmark/references/themes/lumen.md +103 -0
- package/skills/hallmark/references/themes/manifesto.jpg +0 -0
- package/skills/hallmark/references/themes/manifesto.md +101 -0
- package/skills/hallmark/references/themes/midnight.jpg +0 -0
- package/skills/hallmark/references/themes/midnight.md +97 -0
- package/skills/hallmark/references/themes/newsprint.jpg +0 -0
- package/skills/hallmark/references/themes/newsprint.md +102 -0
- package/skills/hallmark/references/themes/overprint.jpg +0 -0
- package/skills/hallmark/references/themes/overprint.md +101 -0
- package/skills/hallmark/references/themes/pasteup.jpg +0 -0
- package/skills/hallmark/references/themes/pasteup.md +100 -0
- package/skills/hallmark/references/themes/piste.jpg +0 -0
- package/skills/hallmark/references/themes/piste.md +99 -0
- package/skills/hallmark/references/themes/ribbon.jpg +0 -0
- package/skills/hallmark/references/themes/ribbon.md +106 -0
- package/skills/hallmark/references/themes/rim.jpg +0 -0
- package/skills/hallmark/references/themes/rim.md +96 -0
- package/skills/hallmark/references/themes/riso.jpg +0 -0
- package/skills/hallmark/references/themes/riso.md +98 -0
- package/skills/hallmark/references/themes/solstice.jpg +0 -0
- package/skills/hallmark/references/themes/solstice.md +104 -0
- package/skills/hallmark/references/themes/specimen.jpg +0 -0
- package/skills/hallmark/references/themes/specimen.md +100 -0
- package/skills/hallmark/references/themes/spore.jpg +0 -0
- package/skills/hallmark/references/themes/spore.md +104 -0
- package/skills/hallmark/references/themes/sport.jpg +0 -0
- package/skills/hallmark/references/themes/sport.md +101 -0
- package/skills/hallmark/references/themes/squeeze.jpg +0 -0
- package/skills/hallmark/references/themes/squeeze.md +99 -0
- package/skills/hallmark/references/themes/sticker.jpg +0 -0
- package/skills/hallmark/references/themes/sticker.md +106 -0
- package/skills/hallmark/references/themes/studio.jpg +0 -0
- package/skills/hallmark/references/themes/studio.md +99 -0
- package/skills/hallmark/references/themes/terminal.jpg +0 -0
- package/skills/hallmark/references/themes/terminal.md +96 -0
- package/skills/hallmark/references/themes/terrazzo.jpg +0 -0
- package/skills/hallmark/references/themes/terrazzo.md +106 -0
- package/skills/hallmark/references/themes/ultraviolet.jpg +0 -0
- package/skills/hallmark/references/themes/ultraviolet.md +106 -0
- package/skills/hallmark/references/themes/vellum.jpg +0 -0
- package/skills/hallmark/references/themes/vellum.md +105 -0
- package/skills/hallmark/references/themes/wayfind.jpg +0 -0
- package/skills/hallmark/references/themes/wayfind.md +105 -0
- package/skills/hallmark/references/themes/werkstatt.jpg +0 -0
- package/skills/hallmark/references/themes/werkstatt.md +105 -0
- package/skills/hallmark/scripts/capture.mjs +125 -0
- package/skills/hallmark/scripts/fixtures/exemplars/atmospheric.html +324 -0
- package/skills/hallmark/scripts/fixtures/exemplars/editorial.html +363 -0
- package/skills/hallmark/scripts/fixtures/exemplars/modern-minimal.html +527 -0
- package/skills/hallmark/scripts/fixtures/exemplars/playful.html +353 -0
- package/skills/hallmark/scripts/fixtures/eyebrow-fail/index.html +118 -0
- package/skills/hallmark/scripts/fixtures/eyebrow-pass/index.html +137 -0
- package/skills/hallmark/scripts/fixtures/kept/after.html +27 -0
- package/skills/hallmark/scripts/fixtures/kept/before.html +26 -0
- package/skills/hallmark/scripts/fixtures/slopped.html +145 -0
- package/skills/hallmark/scripts/fixtures/tailwind-fail/Feature.vue +14 -0
- package/skills/hallmark/scripts/fixtures/tailwind-fail/Hero.tsx +33 -0
- package/skills/hallmark/scripts/fixtures/tailwind-fail/index.html +74 -0
- package/skills/hallmark/scripts/fixtures/tailwind-fail/style.css +6 -0
- package/skills/hallmark/scripts/fixtures/tailwind-pass/Hero.tsx +33 -0
- package/skills/hallmark/scripts/fixtures/tailwind-pass/index.html +57 -0
- package/skills/hallmark/scripts/fixtures/tailwind-pass/style.css +15 -0
- package/skills/hallmark/scripts/fixtures/waiver/index.html +54 -0
- package/skills/hallmark/scripts/imagegen.mjs +85 -0
- package/skills/hallmark/scripts/install-hook.mjs +70 -0
- package/skills/hallmark/scripts/install.mjs +141 -0
- package/skills/hallmark/scripts/lint-hook.mjs +49 -0
- package/skills/hallmark/scripts/photos.json +1 -0
- package/skills/hallmark/scripts/picture.mjs +71 -0
- package/skills/hallmark/scripts/refcheck.mjs +352 -0
- package/skills/hallmark/scripts/sloplint-render.mjs +1252 -0
- package/skills/hallmark/scripts/sloplint.mjs +4422 -0
- package/skills/hallmark/scripts/theme.mjs +650 -0
- package/skills/harness/SKILL.md +17 -8
- package/skills/i-have-adhd/SKILL.md +32 -12
- package/skills/no-ai-slop/SKILL.md +15 -1
- package/skills/plan-add/SKILL.md +38 -27
- package/skills/plan-status/SKILL.md +13 -7
- package/skills/plan-sync/SKILL.md +18 -12
- package/skills/pm-frameworks/SKILL.md +19 -10
- package/skills/pm-frameworks/SOURCE +7 -5
- package/skills/ponytail/SKILL.md +19 -14
- package/skills/product-analysis/SKILL.md +22 -18
- package/skills/product-flow/SKILL.md +14 -9
- package/skills/research/SKILL.md +97 -48
- package/skills/rl-env/SKILL.md +25 -13
- package/skills/rl-env/SOURCE +8 -6
- package/skills/tezgah-contract/SKILL.md +65 -47
- package/statusline.py +20 -9
- package/workflows/graph-review.js +14 -2
- package/bin/tezgah-skill.py +0 -59
- /package/skills/ai-research/0-autoresearch-skill/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/01-model-architecture/litgpt/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/01-model-architecture/mamba/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/01-model-architecture/nanogpt/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/01-model-architecture/rwkv/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/01-model-architecture/torchtitan/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/02-tokenization/huggingface-tokenizers/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/02-tokenization/sentencepiece/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/03-fine-tuning/axolotl/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/03-fine-tuning/llama-factory/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/03-fine-tuning/peft/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/03-fine-tuning/unsloth/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/04-mechanistic-interpretability/nnsight/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/04-mechanistic-interpretability/pyvene/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/04-mechanistic-interpretability/saelens/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/04-mechanistic-interpretability/transformer-lens/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/05-data-processing/nemo-curator/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/05-data-processing/ray-data/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/06-post-training/grpo-rl-training/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/06-post-training/miles/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/06-post-training/openrlhf/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/06-post-training/simpo/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/06-post-training/slime/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/06-post-training/torchforge/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/06-post-training/trl-fine-tuning/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/06-post-training/verl/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/07-safety-alignment/constitutional-ai/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/07-safety-alignment/llamaguard/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/07-safety-alignment/nemo-guardrails/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/07-safety-alignment/prompt-guard/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/08-distributed-training/accelerate/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/08-distributed-training/deepspeed/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/08-distributed-training/megatron-core/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/08-distributed-training/pytorch-fsdp2/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/08-distributed-training/pytorch-lightning/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/08-distributed-training/ray-train/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/09-infrastructure/lambda-labs/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/09-infrastructure/modal/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/09-infrastructure/skypilot/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/10-optimization/awq/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/10-optimization/bitsandbytes/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/10-optimization/flash-attention/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/10-optimization/gguf/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/10-optimization/gptq/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/10-optimization/hqq/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/10-optimization/ml-training-recipes/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/11-evaluation/bigcode-evaluation-harness/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/11-evaluation/lm-evaluation-harness/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/11-evaluation/nemo-evaluator/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/12-inference-serving/llama-cpp/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/12-inference-serving/sglang/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/12-inference-serving/tensorrt-llm/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/12-inference-serving/vllm/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/13-mlops/mlflow/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/13-mlops/swanlab/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/13-mlops/tensorboard/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/13-mlops/weights-and-biases/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/14-agents/a-evolve/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/14-agents/autogpt/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/14-agents/crewai/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/14-agents/langchain/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/14-agents/llamaindex/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/15-rag/chroma/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/15-rag/faiss/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/15-rag/pinecone/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/15-rag/qdrant/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/15-rag/sentence-transformers/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/16-prompt-engineering/dspy/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/16-prompt-engineering/guidance/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/16-prompt-engineering/instructor/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/16-prompt-engineering/outlines/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/17-observability/langsmith/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/17-observability/phoenix/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/18-multimodal/audiocraft/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/18-multimodal/blip-2/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/18-multimodal/clip/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/18-multimodal/cosmos-policy/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/18-multimodal/llava/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/18-multimodal/openpi/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/18-multimodal/openvla-oft/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/18-multimodal/segment-anything/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/18-multimodal/stable-diffusion/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/18-multimodal/whisper/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/19-emerging-techniques/knowledge-distillation/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/19-emerging-techniques/long-context/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/19-emerging-techniques/model-merging/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/19-emerging-techniques/model-pruning/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/19-emerging-techniques/moe-training/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/19-emerging-techniques/speculative-decoding/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/20-ml-paper-writing/academic-plotting/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/20-ml-paper-writing/ml-paper-writing/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/20-ml-paper-writing/presenting-conference-talks/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/20-ml-paper-writing/systems-paper-writing/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/21-research-ideation/brainstorming-research-ideas/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/21-research-ideation/creative-thinking-for-research/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/22-agent-native-research-artifact/compiler/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/22-agent-native-research-artifact/research-manager/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/22-agent-native-research-artifact/rigor-reviewer/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/adaptive-interfaces/skills/colour-independence/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/adaptive-interfaces/skills/flexible-typography/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/adaptive-interfaces/skills/information-density/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/adaptive-interfaces/skills/preference-audit/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/adaptive-interfaces/skills/responsive-accessibility/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/adaptive-interfaces/skills/responsive-review/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/adaptive-interfaces/skills/simplified-views/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/adaptive-interfaces/skills/specify/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/adaptive-interfaces/skills/user-preference-respect/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/cognitive-accessibility/skills/adaptive-personalisation/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/cognitive-accessibility/skills/assess-load/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/cognitive-accessibility/skills/cognitive-load-assessment/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/cognitive-accessibility/skills/contextual-help-design/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/cognitive-accessibility/skills/error-prevention-recovery/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/cognitive-accessibility/skills/focus-attention-design/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/cognitive-accessibility/skills/memory-load-reduction/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/cognitive-accessibility/skills/plain-language-design/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/cognitive-accessibility/skills/review/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/cognitive-accessibility/skills/simplify/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/cognitive-accessibility/skills/wayfinding-navigation/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/design-research/skills/behavioural-analytics/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/design-research/skills/qual-quant-triangulation/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/inclusive-interaction/skills/audit/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/inclusive-interaction/skills/design-flow/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/inclusive-interaction/skills/feedback-and-status/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/inclusive-interaction/skills/gesture-alternatives/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/inclusive-interaction/skills/keyboard-navigation/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/inclusive-interaction/skills/keyboard-review/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/inclusive-interaction/skills/motion-sensitivity/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/inclusive-interaction/skills/multi-modal-input/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/inclusive-interaction/skills/touch-target-design/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/inclusive-interaction/skills/voice-interaction/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/visual-critique/skills/critique-affordance/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/visual-critique/skills/critique-brand-consistency/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/visual-critique/skills/critique-color/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/visual-critique/skills/critique-composition/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/visual-critique/skills/critique-information-density/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/visual-critique/skills/critique-typography/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/visual-critique/skills/critique-visual-hierarchy/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/pm-frameworks/intended-vs-implemented/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/pm-frameworks/opportunity-solution-tree/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/rl-env/generate-nemo-gym-env/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/rl-env/generate-openenv-env/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/rl-env/generate-ors-env/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/rl-env/generate-verifiers-env/{SKILL.md → ENTRY.md} +0 -0
- /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:
|
|
122
|
-
|
|
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
|
|
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/
|
|
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:
|
|
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:
|
|
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`).
|
|
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
|
|
package/docs/operations.md
CHANGED
|
@@ -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
|
|
23
|
-
| `--refresh` | Re-render every always-on contract artifact of the armed hosts - the managed blocks of `CLAUDE.md`, Codex's `AGENTS.md` and
|
|
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
|
|
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`
|
|
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.
|