@r1z4x/tezgah 1.9.0 → 1.11.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 +98 -1
- package/MANIFEST +382 -144
- package/README.de.md +1 -1
- package/README.es.md +1 -1
- package/README.fr.md +1 -1
- package/README.md +1 -1
- 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 +216 -40
- package/bin/tezgah-review-quote +185 -0
- package/bin/tezgah-setup +136 -33
- package/bin/tezgah-skill +1 -1
- package/bin/tezgah-status +201 -3
- package/bin/tezgah-task +203 -3
- package/commands/adhd.md +2 -2
- package/commands/ponytail.md +4 -4
- package/docs/architecture.md +2 -2
- package/docs/citations-baseline.json +2 -2
- package/docs/clarity-baseline.json +2 -2
- package/docs/contract.md +87 -42
- package/docs/environment.md +5 -3
- package/docs/evidence.md +28 -9
- package/docs/feature-audit.md +2 -2
- package/docs/gate.md +54 -31
- package/docs/glossary.md +5 -2
- package/docs/hosts.md +17 -3
- package/docs/index.json +34 -8
- package/docs/judge.md +4 -2
- package/docs/layers.md +3 -3
- package/docs/models.md +31 -9
- package/docs/operations.md +148 -8
- package/docs/research.md +786 -5
- package/docs/skills.md +137 -13
- package/docs/status-line.md +115 -1
- package/hooks/hooks.json +1 -1
- package/hooks/lang/en.json +10 -0
- package/hooks/lang/tr.json +11 -1
- package/hooks/tezgah_agents.py +38 -22
- package/hooks/tezgah_apps.py +18 -0
- package/hooks/tezgah_components.py +4 -0
- package/hooks/tezgah_context.py +189 -50
- package/hooks/tezgah_extension.py +337 -0
- package/hooks/tezgah_gate.py +188 -56
- package/hooks/tezgah_integrity.py +652 -105
- 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 +102 -6
- package/hooks/tezgah_policy.py +94 -45
- package/hooks/tezgah_rank.py +9 -6
- package/hooks/tezgah_replay.py +4 -4
- package/hooks/tezgah_research.py +1260 -65
- 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_stopspec.py +8 -1
- package/hooks/tezgah_task.py +12 -4
- package/hooks/tezgah_taste_ledger.py +1 -1
- package/hosts/cursor/hook.py +29 -2
- package/hosts/opencode/plugins/tezgah.js +307 -46
- package/hosts/opencode/tui/cli/tui.tsx +100 -0
- package/hosts/opencode/tui/tezgah-tui.tsx +2 -1
- package/output-styles/tezgah.md +10 -10
- package/package.json +1 -1
- package/packaging/install.ps1 +36 -3
- package/packaging/install.sh +13 -3
- package/packaging/upgrade.sh +61 -7
- 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 +15 -8
- package/skills/i-have-adhd/SKILL.md +22 -11
- package/skills/no-ai-slop/SKILL.md +15 -1
- package/skills/plan-add/SKILL.md +33 -26
- 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 +75 -39
- package/skills/rl-env/SKILL.md +25 -13
- package/skills/rl-env/SOURCE +8 -6
- package/skills/tezgah-contract/SKILL.md +47 -42
- 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/skills.md
CHANGED
|
@@ -11,11 +11,30 @@ install step that links them. The always-on rule text a session is told is
|
|
|
11
11
|
A skill is `skills/<name>/SKILL.md`: YAML frontmatter carrying `name` and
|
|
12
12
|
`description`, then a markdown body. The body is instructions for the model - the
|
|
13
13
|
read tool opens it, nothing executes it. `plan-add` and `ponytail` also declare
|
|
14
|
-
`argument-hint` in that frontmatter (`skills/plan-add/SKILL.md:
|
|
15
|
-
`skills/ponytail/SKILL.md:
|
|
14
|
+
`argument-hint` in that frontmatter (`skills/plan-add/SKILL.md:7`,
|
|
15
|
+
`skills/ponytail/SKILL.md:6`), and Claude exposes each skill as
|
|
16
16
|
`/tezgah:<name>` - a bare `/plan-add` is a command that does not exist
|
|
17
17
|
(`tests/test_skills.py::SkillStandards.test_slash_commands_carry_the_prefix_the_plugin_registers`).
|
|
18
18
|
|
|
19
|
+
Every host shows the `description`, and hosts cut it.
|
|
20
|
+
The omp host keeps about twelve words.
|
|
21
|
+
Codex and Claude drop descriptions once the skill list passes their budget. So a shipped description opens with `Use when`, names its
|
|
22
|
+
English and Turkish triggers, and stays within 160 characters
|
|
23
|
+
(`tests/test_skills.py::DESCRIPTION_CAP`).
|
|
24
|
+
The routing word `tests/routing-fixtures.md` pins for the skill sits in its first
|
|
25
|
+
100 characters (`tests/test_skills.py::DESCRIPTION_KEPT`).
|
|
26
|
+
The longer text a description used to carry opens the body, under `## When to use`.
|
|
27
|
+
A skill body that calls a tezgah CLI writes its installed path,
|
|
28
|
+
`~/.config/tezgah/bin/<cmd>`: no host but Claude puts that directory on PATH.
|
|
29
|
+
|
|
30
|
+
A vendored library entry nested under a skill is `ENTRY.md`, not `SKILL.md`.
|
|
31
|
+
Codex and Cursor list every `SKILL.md` below a skills directory, nested ones
|
|
32
|
+
included. There are 144 vendored entries: 98 in `ai-research`, 39 in
|
|
33
|
+
`design-library`, 5 in `rl-env` and 2 in `pm-frameworks`.
|
|
34
|
+
Those hosts listed each one as a skill, which pushed codex past its skills budget. Each keeps its bytes and upstream path under the new
|
|
35
|
+
name, and `bin/tezgah-import-ai-research` writes `ENTRY.md` on a re-vendor
|
|
36
|
+
(`bin/tezgah-import-ai-research::vendored`).
|
|
37
|
+
|
|
19
38
|
Two neighbours are not skills. A **slash command** is a file under `commands/`
|
|
20
39
|
wired only through the Claude plugin channel - `commands/ponytail.md` and
|
|
21
40
|
`commands/adhd.md` are shells over `tezgah-pony` and `tezgah-adhd`, and no other
|
|
@@ -67,8 +86,11 @@ A line is cut at 140 characters with a trailing `...`; a description with no
|
|
|
67
86
|
trigger sentence keeps its first sentence.
|
|
68
87
|
|
|
69
88
|
The on-demand file also carries a **collision table**: the pairs among tezgah's
|
|
70
|
-
own skills whose
|
|
71
|
-
|
|
89
|
+
own skills whose `## When to use` trigger lines share three or more subject words
|
|
90
|
+
(`skill_collisions()`, `bin/tezgah-setup::skill_collisions`).
|
|
91
|
+
`skill_when_line()` reads that line from the body (`bin/tezgah-setup::skill_when_line`).
|
|
92
|
+
The short bilingual description shares too few words for two near-neighbours to pair.
|
|
93
|
+
The longer `## When to use` text still tells them apart.
|
|
72
94
|
It rides `opencode-skills.full.md` and never the always-on file, because it is
|
|
73
95
|
read when a session is about to choose, not every turn. It is a view, not a
|
|
74
96
|
rename: it names `plan-add` / `plan-status` / `plan-sync` and
|
|
@@ -124,9 +146,37 @@ CLI into `~/.config/tezgah/bin` beside the other tezgah commands.
|
|
|
124
146
|
On a turn the judgement does not answer, the same search runs on its own,
|
|
125
147
|
default on and with no model (`hooks/tezgah_skill_pick.py::section_hint`). It
|
|
126
148
|
keeps its index as SQLite in the tezgah cache dir (`skill-search.sqlite`). It
|
|
127
|
-
rebuilds that index only when a SKILL.md's mtime or size moves
|
|
128
|
-
|
|
129
|
-
|
|
149
|
+
rebuilds that index only when a SKILL.md's mtime or size moves, or when an older
|
|
150
|
+
`INDEX_VERSION` wrote the index
|
|
151
|
+
(`hooks/tezgah_skill_pick.py::_open_index`, `hooks/tezgah_skill_pick.py::INDEX_VERSION`).
|
|
152
|
+
A prompt reads its own terms' postings and the length column, never the corpus.
|
|
153
|
+
|
|
154
|
+
The hint reads the project's skills from the session's cwd (`section_hint(..., cwd=)`).
|
|
155
|
+
`project_roots()` finds the nearest `.git` top and takes its `.claude/skills`,
|
|
156
|
+
`.agents/skills` and `skills/` directories (`hooks/tezgah_skill_pick.py::project_roots`).
|
|
157
|
+
A project that ships its own skills gets its own index file,
|
|
158
|
+
`skill-search-<hash>.sqlite`.
|
|
159
|
+
Two sessions in two such projects then do not rebuild each other's index on every turn.
|
|
160
|
+
|
|
161
|
+
Ranking runs in two tiers (`hooks/tezgah_skill_pick.py::search`).
|
|
162
|
+
tezgah's own skills and the project's rank first.
|
|
163
|
+
The hosts' machine-wide directories (omp's, Claude's, `~/.agents`, Codex's,
|
|
164
|
+
opencode's) answer only when the first tier cannot (`hooks/tezgah_skill_pick.py::_second_tier`).
|
|
165
|
+
Before the split, 16 of 54 live hints in one transcript set pointed at cyber skills.
|
|
166
|
+
In another set, 3 of 7 pointed at marketing skills. Both sets came from product repositories.
|
|
167
|
+
The search covers `tezgah-contract`, but the hint never names it (`hooks/tezgah_skill_pick.py::HINT_SKIP`).
|
|
168
|
+
Replayed over 1331 owner prompts, it still took 76 of 123 hints.
|
|
169
|
+
|
|
170
|
+
A skill's frontmatter description rides its first section twice
|
|
171
|
+
(`hooks/tezgah_skill_pick.py::DESC_WEIGHT`).
|
|
172
|
+
On the 18 English owner prompts of the adoption set, top-1 moved from 10 to 16.
|
|
173
|
+
Every term folds Turkish letters to ASCII on both sides (`ç ğ ö ş ü` to `c g o s u`).
|
|
174
|
+
A word longer than five letters also indexes its five-letter prefix
|
|
175
|
+
(`hooks/tezgah_skill_pick.py::STEM`, `hooks/tezgah_skill_pick.py::terms`).
|
|
176
|
+
A Turkish word carries case and possessive in suffixes, so "tasarımını" meets
|
|
177
|
+
"tasarım" only through the prefix. Before folding, the Turkish hint matched 0 of 18 prompts.
|
|
178
|
+
The full word stays a term too, so an exact match outscores a prefix-only one.
|
|
179
|
+
A link is an address, not a topic: the hint drops URLs from the prompt before ranking.
|
|
130
180
|
|
|
131
181
|
Some skills route through their own `INDEX.md`, like design-library's 39 entries.
|
|
132
182
|
The search indexes each routed entry as one row for the whole file, addressed
|
|
@@ -136,10 +186,33 @@ common words.
|
|
|
136
186
|
|
|
137
187
|
The hook then appends one line, `A local skill search matched this request:
|
|
138
188
|
skill://<name>:<start>-<end>`, with the section title. Every host but omp also
|
|
139
|
-
gets the absolute path.
|
|
189
|
+
gets the absolute path. Claude's manifest declares `TEZGAH_HOST=claude`.
|
|
190
|
+
There the line names a plugin skill by the Skill tool's `tezgah:<name>`, with
|
|
191
|
+
the file's line range (`hooks/tezgah_skill_pick.py::_emit`). Claude resolves no
|
|
192
|
+
`skill://` address. A host root's skill, such as
|
|
193
|
+
`~/.claude/skills/<name>`, keeps its plain name. The line also carries the
|
|
194
|
+
skill's description, which Claude's roster cuts. It is cut to the 160
|
|
195
|
+
characters a shipped one keeps (`DESCRIPTION_CAP`). For `harness` the line names
|
|
196
|
+
Claude's own `workflow-authoring` as the skill it precedes
|
|
197
|
+
(`hooks/tezgah_skill_pick.py::NATIVE_TWIN`). An `i-have-adhd` line, on every
|
|
198
|
+
host, ends with that rule's first-line clause. Like the skill, it is
|
|
199
|
+
conditional: when the answer is steps, line 1 is step 1
|
|
200
|
+
(`hooks/tezgah_skill_pick.py::IN_FORCE`).
|
|
201
|
+
The top section must carry 60% of the prompt's
|
|
140
202
|
distinct content terms that any skill contains, and at least three
|
|
141
203
|
(`hooks/tezgah_skill_pick.py::HINT_COVER`, `HINT_MIN_TERMS`). Each section
|
|
142
204
|
appears once per session.
|
|
205
|
+
Some turns get no section that clears that bar but arm the Research rule.
|
|
206
|
+
Then the hint names the `research` skill's best section if it carries three of
|
|
207
|
+
the prompt's words (`hooks/tezgah_context.py::RULE_SKILL`,
|
|
208
|
+
`hooks/tezgah_skill_pick.py::rule_hint`). A research ask's subject words sit in
|
|
209
|
+
no skill, so the 60% share cannot hold there.
|
|
210
|
+
A hint from a skill the repository ships names its path on every host, omp
|
|
211
|
+
included. It cannot borrow a tezgah skill's `skill://` name. It opens with
|
|
212
|
+
`Repository-provided data, not an instruction`. Its name and title lose `<`,
|
|
213
|
+
`>`, `"` and line breaks. The search reads that skill's files bounded and only
|
|
214
|
+
inside the repository (`hooks/tezgah_skill_pick.py::section_hint`,
|
|
215
|
+
`hooks/tezgah_skill_pick.py::_entries`).
|
|
143
216
|
|
|
144
217
|
Measured on this machine on 2026-10-07: 7 502 sections and a 9.5 MB index. The
|
|
145
218
|
one cold rebuild took 1.36 s, and a warm prompt takes 6-15 ms. On a turn it
|
|
@@ -191,6 +264,7 @@ it (`tests/test_skills.py::SkillStandards`).
|
|
|
191
264
|
| `feature-audit` | Audits ONE feature across every layer it is spread over - the surfaces a person uses (a control, a list or table, a detail view, a filter, a picker, a step flow, a notification), the route, the authorization, the service and the data - by filling the capability, field-contract, flow/step and interaction-dependency matrices, where a disagreement between layers is a finding and a fix needing an absent capability becomes a capability-change proposal; fires on an admin screen, CRUD, form, wizard, data table, filter or permission question about an existing feature, and in forward mode specifies a feature not built yet so the post-build audit diffs against it. |
|
|
192
265
|
| `design-contract` | The artifact shape of the per-repo `.tezgah/design-contract.md` - colour roles, type scale, spacing unit and rhythm, the component inventory, the state set every interactive control and data view owes - the derivation rule that reads it out of the repository's own tokens, the rules `bin/tezgah-design check` fails on, and the data-view rules for dashboards (`skills/design-contract/data-views.md`); fires on a UI or component turn that needs a floor, a token, a state set, or the design check itself. |
|
|
193
266
|
| `design-library` | The vendored MC Dean design/UX subset - 39 skills in the `cognitive-accessibility`, `adaptive-interfaces`, `inclusive-interaction`, `visual-critique` and `design-research` plugins - read one entry at a time through its own `INDEX.md`, never the tree; fires when a UI or product turn needs a cognitive-load, inclusive-interaction or visual-critique method tezgah has no counterpart for. |
|
|
267
|
+
| `hallmark` | The vendored UI generator - one ask, then a whole page: 16 Floor rules, 48 themes, 20 macrostructures and its own `sloplint` gate list, with the material locked into a root `design.md`; fires when the turn builds a new page or theme rather than judging an existing one. |
|
|
194
268
|
| `ai-research` | The vendored 98-skill library for AI/ML machinery - training and serving a model, benchmarks, interpretability, retrieval pipelines; read one entry, never the tree. |
|
|
195
269
|
| `rl-env` | The vendored FineEnvs skill set for authoring an RL environment from a description - OpenEnv, OpenReward/ORS, Verifiers and NeMo Gym, plus the orchestrator that ports one description across all four; read one entry, never the tree. |
|
|
196
270
|
|
|
@@ -236,7 +310,7 @@ adaptation changed - the same record an added adaptation is expected to carry.
|
|
|
236
310
|
`skills/ai-research` is the large vendored tree: 98 upstream skills in 23
|
|
237
311
|
categories, bodies byte-for-byte upstream including frontmatter and `author`
|
|
238
312
|
lines, at revision `773a52944ba4747a18bd4ae9ade53fff041adcbc`
|
|
239
|
-
([skills/ai-research/SOURCE:1-
|
|
313
|
+
([skills/ai-research/SOURCE:1-22]). No machine-scraped reference dumps and no
|
|
240
314
|
LaTeX template trees were copied, and every drop is named in that file.
|
|
241
315
|
`bin/tezgah-import-ai-research --check` verifies the tree against its manifest.
|
|
242
316
|
|
|
@@ -270,17 +344,58 @@ trap cases the library is scored against. Two bodies depart from upstream, and
|
|
|
270
344
|
`skills/design-library/SOURCE` and `NOTICE` name both: the touch-target entry
|
|
271
345
|
paired `44x44 CSS pixels` with `WCAG 2.2 Level AA`, where SC 2.5.8 is Level AA at
|
|
272
346
|
24x24 and SC 2.5.5 is Level AAA at 44x44 - 24 is the floor `bin/tezgah-design`
|
|
273
|
-
enforces - and `adaptive-personalisation/
|
|
347
|
+
enforces - and `adaptive-personalisation/ENTRY.md` carried the sibling
|
|
274
348
|
`contextual-help-design` skill's `name`, which a host that loads a skill from its
|
|
275
349
|
directory skips. `tests/test_skills.py` hashes every listed body, fails on an
|
|
276
350
|
unlisted directory, and fails on a body that pairs 44x44 with Level AA again.
|
|
277
351
|
|
|
352
|
+
`skills/hallmark` is the generator, vendored whole: 178 upstream files at
|
|
353
|
+
revision `7ec8682` (2026-10-22), MIT, with upstream's `LICENSE` beside its
|
|
354
|
+
`SOURCE` ([skills/hallmark/SOURCE:1-19]). `SOURCE` carries a sha256 for every
|
|
355
|
+
file and the checkout command for a re-vendor. `tests/test_skills.py::HallmarkVendor`
|
|
356
|
+
fails on a drifted body, a missing listed file, and a file the table leaves out.
|
|
357
|
+
Its `SKILL.md` is upstream's workflow and ships as upstream's bytes. `SOURCE`
|
|
358
|
+
lists it too, because tezgah writes no entry point of its own for this tree.
|
|
359
|
+
That listing is what exempts the file from the frontmatter lint
|
|
360
|
+
(`tests/test_skills.py::Frontmatter`). The name sits in `SKILLS`
|
|
361
|
+
(`bin/tezgah-setup::SKILLS`), so every host links it and the router lists it.
|
|
362
|
+
|
|
363
|
+
## The design layer: two floors
|
|
364
|
+
|
|
365
|
+
A UI turn answers to two floors. Hallmark's `design.md` owns the material:
|
|
366
|
+
genre, shape, theme, the OKLCH palette, the font roles and the motion character.
|
|
367
|
+
The contract owns the state set, the component inventory, the measured evidence
|
|
368
|
+
and the facts. Neither floor may overrule the other by silence.
|
|
369
|
+
|
|
370
|
+
`derive` reads a root `design.md` or `DESIGN.md` before any token file, writes
|
|
371
|
+
its palette as hex and stamps `source: design-md`
|
|
372
|
+
(`bin/tezgah-design::design_md_tokens`). The contract's `precedence` block is
|
|
373
|
+
the only tie-break, and the code reads it rather than a session. `ours` keeps
|
|
374
|
+
states, components, evidence and facts. `theirs` hands material and motion
|
|
375
|
+
character to Hallmark. `shared` covers contrast, focus-visible, reduced motion
|
|
376
|
+
and the tap target, where both sides want the same thing and the numbers stay
|
|
377
|
+
ours.
|
|
378
|
+
|
|
379
|
+
`precedence_problem` refuses an ambiguous table with exit 2. It refuses a key
|
|
380
|
+
named twice, `facts` handed to a waiver or to the user's words, and a `verbatim`
|
|
381
|
+
value other than `style` (`bin/tezgah-design::precedence_problem`).
|
|
382
|
+
`tezgah-design slop` is the verb that merges both verdicts. It runs Hallmark's
|
|
383
|
+
vendored gate list and then the contract check over the same tree. It writes
|
|
384
|
+
`.tezgah/design/slop.json` and stays not clean when either floor fails, when the
|
|
385
|
+
render tier never ran, or when no measurement judged a component
|
|
386
|
+
(`bin/tezgah-design::slop_cli`). The Stop rule reads that file as UI evidence
|
|
387
|
+
beside `measurement.json` (`hooks/tezgah_integrity.py::DESIGN_SLOP`). The long
|
|
388
|
+
form, the state set and the rest of the contract shape live in the skill
|
|
389
|
+
(`skills/design-contract/SKILL.md:103-130`).
|
|
390
|
+
|
|
278
391
|
## Adding a skill
|
|
279
392
|
|
|
280
393
|
1. Write `skills/<name>/SKILL.md` with frontmatter carrying `name` and a
|
|
281
|
-
`description`
|
|
282
|
-
|
|
283
|
-
|
|
394
|
+
`description` that opens `Use when ...`, names its English and Turkish
|
|
395
|
+
triggers and stays within 160 characters. That sentence is the router line,
|
|
396
|
+
and it must carry the words a session would match on
|
|
397
|
+
(`bin/tezgah-setup::skill_description`). Put the longer text in the body's
|
|
398
|
+
first section, `## When to use`. The collision table reads it.
|
|
284
399
|
2. Add the name to `SKILLS` (`bin/tezgah-setup::SKILLS`). `SKILLS` drives the
|
|
285
400
|
router, the linking, the uninstall and the budget; a name without a
|
|
286
401
|
`SKILL.md`, or a directory without a `SKILLS` entry, is not a shipped skill.
|
|
@@ -318,6 +433,15 @@ unlisted directory, and fails on a body that pairs 44x44 with Level AA again.
|
|
|
318
433
|
its index and its three trap cases
|
|
319
434
|
- `skills/rl-env/SOURCE` - the vendored FineEnvs environment-authoring set, its
|
|
320
435
|
upstream revision and the per-file sha256
|
|
436
|
+
- `skills/hallmark/SOURCE` - the vendored generator, its revision and a sha256
|
|
437
|
+
per file
|
|
438
|
+
- `bin/tezgah-design` and its `.py` twin - `derive`, `design_md_tokens`,
|
|
439
|
+
`precedence_problem`, `check` and `slop_cli`: the two floors and the one verb
|
|
440
|
+
that merges them
|
|
441
|
+
- `skills/design-contract/SKILL.md` - the contract shape, the state set and the
|
|
442
|
+
precedence classes
|
|
443
|
+
- `hooks/tezgah_integrity.py` - `DESIGN_SLOP`, the Stop rule's reader of
|
|
444
|
+
`.tezgah/design/slop.json`
|
|
321
445
|
- `bin/tezgah-skill` - the section search CLI over every installed skill root;
|
|
322
446
|
`hooks/tezgah_skill_pick.py` - `sections`, `search`, `skill_roots`,
|
|
323
447
|
`section_of`, the hint that carries the address
|
package/docs/status-line.md
CHANGED
|
@@ -25,9 +25,13 @@ hosts/dsh/statusline/lib/client.js:86-90).
|
|
|
25
25
|
| 1 | `consult`, `research`, `graph`, `orch`, `judge` | the on-demand capabilities |
|
|
26
26
|
| 2 | `idx` | a per-repo fact: code-graph readiness |
|
|
27
27
|
| 3 | `plans` | a per-repo fact, its own group |
|
|
28
|
+
| ≥4 | a repository's [extension](#a-repositorys-own-marks-extension) chips | one cluster per extension, after every built-in |
|
|
28
29
|
|
|
29
30
|
Groups 0 and 1 come from `_GROUP` (`hooks/tezgah_context.py::_GROUP`); the prefix
|
|
30
|
-
carries -1 and `idx` and `plans` carry 2 and 3 where they are appended (`hooks/tezgah_context.py::version_segment`, `hooks/tezgah_context.py::health_segments`).
|
|
31
|
+
carries -1 and `idx` and `plans` carry 2 and 3 where they are appended (`hooks/tezgah_context.py::version_segment`, `hooks/tezgah_context.py::health_segments`). An
|
|
32
|
+
extension declares no group. `health_segments()` puts its chips in the group after
|
|
33
|
+
the highest built-in one, so a chip never splits the armed/used run
|
|
34
|
+
(`hooks/tezgah_context.py::health_segments`). Outside every
|
|
31
35
|
[root](glossary.md#root) the checklist still prints — tezgah loads globally on
|
|
32
36
|
opencode, so the indicator must not go silent — and only the per-repo extras are
|
|
33
37
|
omitted (`hooks/tezgah_context.py::health_segments`, `tests/test_statusline.py::test_outside_roots_still_shows_segment`).
|
|
@@ -124,6 +128,94 @@ instead of forking (`hooks/tezgah_context.py::health_segments`). `plans` is `pla
|
|
|
124
128
|
plan files carry `status: blocked` in their first 400 bytes — `ready` with a
|
|
125
129
|
blocked plan, else `info` (`plan_mark()`, `hooks/tezgah_context.py::plan_mark`).
|
|
126
130
|
|
|
131
|
+
### A repository's own marks (extension)
|
|
132
|
+
|
|
133
|
+
A repository adds chips to the line without tezgah naming it. It drops one
|
|
134
|
+
manifest at `<repo>/.tezgah/extension.json`. That manifest names a command
|
|
135
|
+
printing structured segments on stdout:
|
|
136
|
+
|
|
137
|
+
```json
|
|
138
|
+
{"statusline": {"command": ["bin/my-statusline", "--segments"], "timeout_ms": 300}}
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
`segments()` walks up from the working directory to the first manifest
|
|
142
|
+
(`manifest_path()`, `hooks/tezgah_extension.py::manifest_path`). It runs the
|
|
143
|
+
command once per render, with the repo root as cwd. It appends what comes back
|
|
144
|
+
after every built-in mark (`segments()`, `hooks/tezgah_extension.py::segments`,
|
|
145
|
+
`hooks/tezgah_context.py::health_segments`). A relative `command[0]` resolves
|
|
146
|
+
against the repo root, so a manifest travels with its clone.
|
|
147
|
+
|
|
148
|
+
The walk stops after `MAX_WALK` levels. Past that, a working directory under
|
|
149
|
+
`$TEZGAH_ENGAGEMENTS_ROOT/<slug>` still reads `<slug>/.tezgah/extension.json`
|
|
150
|
+
(`_engagement_manifest()`, `hooks/tezgah_extension.py::_engagement_manifest`).
|
|
151
|
+
An unset root, a cwd outside it and an engagement without a manifest cost one
|
|
152
|
+
`isfile` and no chips. `tezgah-status --manifest=FILE` names the manifest
|
|
153
|
+
outright (`given_manifest()`, `hooks/tezgah_extension.py::given_manifest`). A
|
|
154
|
+
FILE that is not there costs the chips, never the line.
|
|
155
|
+
|
|
156
|
+
Every call hands the child its own envelope on stdin, as one JSON object:
|
|
157
|
+
|
|
158
|
+
```json
|
|
159
|
+
{"api": 1, "event": "statusline", "cwd": "/repo/sub", "repo_root": "/repo",
|
|
160
|
+
"session_id": "s-42"}
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
An extension therefore reads which repository and which session asked it, rather
|
|
164
|
+
than inferring that from its own environment (`call_envelope()`,
|
|
165
|
+
`hooks/tezgah_extension.py::call_envelope`). `api` is the envelope's version: an
|
|
166
|
+
extension that meets a higher one says so on the line rather than drawing a chip
|
|
167
|
+
it cannot trust. A command that never reads its stdin sees the same closed, empty
|
|
168
|
+
input it always did.
|
|
169
|
+
|
|
170
|
+
The contract is **data, not a line**. The extension produces `{key, state, glyph,
|
|
171
|
+
text}` segments, and tezgah draws them. So color, the narrow-surface drop and the
|
|
172
|
+
group separators stay identical for every extension. An extension never has to
|
|
173
|
+
know the gutter. It must name `text` and `state`. tezgah fills a missing `glyph`
|
|
174
|
+
from the state's own mark, so a chip reads like a built-in. The per-extension cap
|
|
175
|
+
(`MAX_SEGMENTS`) and the hard timeout (`timeout_ms`, default
|
|
176
|
+
`DEFAULT_TIMEOUT_MS`) bound one row.
|
|
177
|
+
|
|
178
|
+
It is a subprocess and not an import on purpose. The extension is the user's
|
|
179
|
+
repo, in whatever language, and may be slow or broken. A bounded child keeps a
|
|
180
|
+
broken extension costing one chip on one line, never the turn. Every way it can
|
|
181
|
+
fail answers no segments. A missing manifest, an absent command, a non-zero exit,
|
|
182
|
+
a timeout and malformed output all cost the extension its chips
|
|
183
|
+
(`run_manifest()`, `hooks/tezgah_extension.py::run_manifest`, `tests/test_extension.py`). A repo with no
|
|
184
|
+
manifest pays one `os.path.isfile` per level and nothing else.
|
|
185
|
+
|
|
186
|
+
tezgah-cyber is the first extension. Its `bin/engagement-statusline --segments`
|
|
187
|
+
turns an engagement's `notes/status.json` into `cyber-eng`/`cyber-needs`/
|
|
188
|
+
`cyber-running`/`cyber-steps`/`cyber-verified`/`cyber-severity` chips. An operator
|
|
189
|
+
then reads an engagement's state at a glance, in the line they already read.
|
|
190
|
+
|
|
191
|
+
#### The manifest's other keys
|
|
192
|
+
|
|
193
|
+
The same manifest carries four more keys. One function in
|
|
194
|
+
`hooks/tezgah_extension.py` reads each, and one caller consumes it. Each reader
|
|
195
|
+
checks its value the way `statusline` does. A wrong type, a malformed entry or
|
|
196
|
+
an unreadable manifest costs that key or that entry, never the line or the gate.
|
|
197
|
+
|
|
198
|
+
```json
|
|
199
|
+
{"checks": ["./bin/run-tool", "bin/audit --strict"],
|
|
200
|
+
"untrusted": ["nmap", "sqlmap"],
|
|
201
|
+
"agents": [{"match": "(?i)\\brecon\\b", "agent": "recon"}],
|
|
202
|
+
"statusline": {"command": ["bin/my-statusline"], "override": true}}
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
| Key | Read by | Consumed by | Effect | Fail posture | Bound |
|
|
206
|
+
|---|---|---|---|---|---|
|
|
207
|
+
| `checks` | `repo_checks()` | `hooks/tezgah_integrity.py::repo_checks`, folded into `_check_runs` | a shell command whose words start with one prefix is a check, so its run records `verify_ok`/`verify_fail` and `passing_check` accepts a pass | fail-open to the built-in vocabulary: a non-list, a non-string entry or one shlex rejects is dropped; a prefix that is one of the five no-op programs `echo`, `true`, `cat`, `printf`, `ls` alone (any path to them, `/bin/true` too) is dropped, since its run would license a pass that checked nothing, while further words after the program (`echo tested`) keep it a check (`hooks/tezgah_extension.py::NO_OP_PROGRAMS`); a dropped prefix costs its credit, never the gate; a prefix inside a quoted argument or a quoted heredoc body (`<<'EOF'`) is no run, while an unquoted heredoc's body (`<<EOF`) is read as commands, so a prefix line there counts as a run - the built-in vocabulary's own ceiling (`hooks/tezgah_integrity.py::_repo_check_runs`); a check whose status a pipe or a later `;` command owns records as ran, as `pytest; echo` does | `MAX_CHECKS` entries |
|
|
208
|
+
| `untrusted` | `untrusted_programs()` | `hooks/tezgah_integrity.py::untrusted_source` | a shell command that runs a listed program (at a command position, `shell_programs`) is the `repo` channel: its result is labelled and the next effect carries the taint notice, as a `network` read does | fail-open to no channel: a non-list or a non-name entry is dropped | `MAX_UNTRUSTED` names |
|
|
209
|
+
| `agents` | `repo_agent()` | `hooks/tezgah_models.py::route` (`_repo_route`) | after the harness judgement, the first entry whose `match` regex finds the brief names the agent; the tier, `via` and the judge stay the harness's, and a brief the override rule pinned keeps its agent | fail-open to the harness pick: a pattern `re` rejects, a non-string pattern or an agent that is no one-word name is dropped | `MAX_AGENTS` entries, `MAX_PATTERN` characters a pattern, `MAX_BRIEF` characters of brief read |
|
|
210
|
+
| `statusline.override` | `override()` | `bin/tezgah-status` | literally `true`: the project owns its line and points its own `statusLine` at `tezgah-status`, which then reads the host payload on stdin (`cwd`/`workspace.current_dir`, `session_id`) when no PATH is given; the built-in marks stay and the chips follow them | anything but `true` is no override and stdin is not read; a malformed payload draws the line from the process directory | `PAYLOAD_MAX` bytes, `PAYLOAD_WAIT` seconds on a silent pipe |
|
|
211
|
+
|
|
212
|
+
The `checks` and `untrusted` readers need the call's directory. The PostToolUse
|
|
213
|
+
row passes its `cwd`, and the gate's `began` row passes its own, so `_pair`
|
|
214
|
+
finds the pass. Lacking one, the untrusted reader uses the call's `cwd`
|
|
215
|
+
argument, else the hook's own directory. opencode's in-process
|
|
216
|
+
classifier (`hosts/opencode/plugins/tezgah.js`) does not read the manifest.
|
|
217
|
+
There a declared program stays unlabelled: a missed label, never a false one.
|
|
218
|
+
|
|
127
219
|
### The two skill-read marks, and `--observable=`
|
|
128
220
|
|
|
129
221
|
`pony` and `adhd` mean "the full skill text reached the session" — the only signal
|
|
@@ -207,6 +299,8 @@ Every other surface reads the store.
|
|
|
207
299
|
segment from the active theme and rebuilding the separator from `seg.group`
|
|
208
300
|
(56-88,hosts/opencode/tui/tezgah-tui.tsx:108-111). Its `tezgah: status legend` command opens a dialog running
|
|
209
301
|
`--legend` (141-147).
|
|
302
|
+
On opencode 2 the same line comes from hosts/opencode/tui/cli/tui.tsx, a
|
|
303
|
+
`Plugin.define` CLI plugin listed in `cli.json`. It reuses the v1 file's `run`.
|
|
210
304
|
- **dsh** — hosts/dsh/statusline/lib/index.js serves `GET /api/tezgah.status`
|
|
211
305
|
behind the Web UI's own authenticated fetch fence, so the browser fetches it
|
|
212
306
|
same-origin with no extra token handling (14,34-38); it always passes
|
|
@@ -227,6 +321,7 @@ see a line by hand:
|
|
|
227
321
|
tezgah-status /path/to/repo <session-id> # the line for one repo and session
|
|
228
322
|
tezgah-status /path/to/repo <id> --json # segments: key/state/glyph/text/group
|
|
229
323
|
tezgah-status /path/to/repo <id> --counters # the evidence ledger's counters
|
|
324
|
+
tezgah-status --rates --since A --until B # the ledger folded between two dates
|
|
230
325
|
tezgah-status --legend # what each mark means
|
|
231
326
|
tezgah-status --rule-yield # live gate rules that stopped firing
|
|
232
327
|
tezgah-status --enforcers # what enforces each always-on rule
|
|
@@ -259,6 +354,25 @@ three places: no session id (used marks stay `○`), a surface that passed
|
|
|
259
354
|
`--observable=` and so renders dim where you expected a state, or a store a
|
|
260
355
|
sandboxed host could not write (`hooks/tezgah_paths.py::cache_dir`).
|
|
261
356
|
|
|
357
|
+
`--rates --since DATE --until DATE` is the windowed reader over the same
|
|
358
|
+
ledgers (`rates`, `hooks/tezgah_integrity.py::rates`). It folds the rows stamped
|
|
359
|
+
in `[since, until)` per window and per calendar day. The fold carries turns,
|
|
360
|
+
`claim` rows and the Stop classes that blocked them. It also carries the shape
|
|
361
|
+
flags of each judged reply, and denies by rule. The rates are blocks per 100
|
|
362
|
+
turns and denies per 100 sessions. They also carry the claim block and Stop
|
|
363
|
+
shape shares, and blocked claims per 100 sessions by class. `counters_all` still
|
|
364
|
+
totals a lifetime on purpose, and the window is this reader's, so the two cannot
|
|
365
|
+
disagree about a row. The dates are local calendar days. `until` is exclusive,
|
|
366
|
+
which makes two adjacent windows a partition of the span rather than an
|
|
367
|
+
approximation of one. A repeated `--since`/`--until` pair prints one block per
|
|
368
|
+
window. It also prints the pp delta between adjacent windows, the unit the
|
|
369
|
+
observation rows in `.tezgah/plans` state their bars in. A window that read more
|
|
370
|
+
than one row contract prints the split. A delta whose two windows lean on
|
|
371
|
+
different contracts says so. There, `claims` is every judged reply under `v2`
|
|
372
|
+
and only a reply that claimed under `v3` (plan 135). `--json` prints
|
|
373
|
+
`{"windows": [...]}` - one shape for one window and for many. A window that
|
|
374
|
+
cannot be read, or `--since`/`--until` without `--rates`, exits 2.
|
|
375
|
+
|
|
262
376
|
`--rule-yield` is a corpus report, not a mark: every live gate rule - the labels
|
|
263
377
|
`hooks/tezgah_gate.py` passes to `_deny`, read from the code with `ast`, so a
|
|
264
378
|
removed rule drops out on its own - with its fires over the real ledgers written
|
package/hooks/hooks.json
CHANGED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
{ "hooks": [ { "type": "command", "command": "TEZGAH_CORE_IN_FILE=1 \"${TEZGAH_PYTHON:-python3}\" \"${CLAUDE_PLUGIN_ROOT}/hooks/projects-auto-init.py\"", "timeout": 10 } ] }
|
|
11
11
|
],
|
|
12
12
|
"UserPromptSubmit": [
|
|
13
|
-
{ "hooks": [ { "type": "command", "command": "\"${TEZGAH_PYTHON:-python3}\" \"${CLAUDE_PLUGIN_ROOT}/hooks/projects-auto-init.py\"", "timeout": 10 } ] }
|
|
13
|
+
{ "hooks": [ { "type": "command", "command": "TEZGAH_HOST=claude \"${TEZGAH_PYTHON:-python3}\" \"${CLAUDE_PLUGIN_ROOT}/hooks/projects-auto-init.py\"", "timeout": 10 } ] }
|
|
14
14
|
],
|
|
15
15
|
"PreToolUse": [
|
|
16
16
|
{ "matcher": "Agent|agent|Task|task|Grep|grep|Bash|bash|PowerShell|pwsh|Shell|shell|subagent|Edit|Write|MultiEdit|NotebookEdit|AskUserQuestion", "hooks": [ { "type": "command", "command": "\"${TEZGAH_PYTHON:-python3}\" \"${CLAUDE_PLUGIN_ROOT}/hooks/projects-pretooluse.py\"", "timeout": 5 } ] },
|
package/hooks/lang/en.json
CHANGED
|
@@ -153,11 +153,21 @@
|
|
|
153
153
|
"research|literature|hypothes(is|es)|experiment(al)?|ablation|hyperparameter|benchmark|survey|paper|dataset|compar\\w*|(a/?b|ab) tests?|user interview\\w*|root[ -]?cause (analys|investigat)\\w*|reference review|lit(erature)?[ -]review|evaluat(e|ing) (whether|the (librar|technique|approach|tool|option|alternative))|measure(?! how (?:long|fast|much time)| the (?:time|duration|latency|speed|runtime))\\w*|post[ -]?mortem|error budget|incident (review|report)|is (this|that|it) (actually )?(true|right)|does (this|that) (claim )?hold"
|
|
154
154
|
],
|
|
155
155
|
"product": [
|
|
156
|
+
"(?:like|as) an? pm|pm (?:review|lens|perspective|eye|hat)\\w*|intended[- ]vs\\.?[- ]implemented|opportunity solution tree\\w*",
|
|
156
157
|
"product(?!ion|ivity|ive)\\w*|feature(?!s?[ -](?:flags?|toggles?|gates?|branch\\w*))\\w*|roadmap|backlog|prd|north star|jtbd|retention|churn|onboarding|cohort|funnel|conversion rate|pricing|prioriti[sz]\\w*|user research|user interview\\w*|ab test|a/b test|activations?\\b|churn(ed|ing|s)?|funnels?|cohorts?|drop-?off|roadmaps?|priorit(y|ies)|adoption|conversion (rate|funnel|drop\\w*)|packaging|monetiz\\w*|price\\w*|tier(?!s?[ -]lists?)\\w*|positioning|value proposition|\\bicp\\b|ideal customer profile|persona\\w*|segment(?!(?:ation)?[ -]faults?)\\w*|(customer|user|product|problem) discovery|opportunity (tree|solution|space|score)|\\bnps\\b|net promoter|\\bcsat\\b|satisfaction|(customer|user)[ -]?feedback\\w*|support ticket\\w*|competitor\\w*|competitive (analysis|landscape|teardown|benchmark)\\w*|wizard|crud|form (validation|field|error|label)|data table|step flow|search (dropdown|box)|form validation|user management|(admin|users?) (panel|screen|page|list)",
|
|
157
158
|
{
|
|
158
159
|
"ui_ask": "(?:admin|users?) table"
|
|
159
160
|
}
|
|
160
161
|
],
|
|
162
|
+
"design": [
|
|
163
|
+
"ui(?![ -]threads?\\b)|ux|design (?:system|token|language|guide|review|critique|audit|library)\\w*|wireframe\\w*|mockups?|figma|(?<!memory )(?<!data )(?<!disk )(?<!file )(?<!struct )(?<!record )(?<!keyboard )layout|responsive|(?:ui|react|vue|svelte|angular|frontend|front-end|button|form|card|modal|input|nav\\w*|header|footer|sidebar)[ -]components?|components? librar\\w*|ui kit|style guides?|typography|colou?rs? (?:palette|scheme|token|contrast)\\w*|palette|dark mode|a11y|wcag\\w*|accessibility|usability|visual (?:hierarchy|design|consistency|critique|review)|landing page|(?:design|sketch|mock)\\w* (?:\\w+ ){0,3}(?:dashboard|screen|page|form|view|layout|landing)s?|improve (?:this|the|our) (?:screen|page|view|form|layout|dashboard)s?|click(?:ing)? through (?:\\w+ ){0,2}(?:screens?|pages?|app|ui)",
|
|
164
|
+
{
|
|
165
|
+
"ui_ask": "confusing|inconsistent|cluttered|ugly|clunky"
|
|
166
|
+
},
|
|
167
|
+
{
|
|
168
|
+
"ui_ask": "redesign\\w*|restyle\\w*|revamp\\w*|accessible"
|
|
169
|
+
}
|
|
170
|
+
],
|
|
161
171
|
"graph": [
|
|
162
172
|
"who calls|callers?|call sites?|who uses|what breaks|blast radius|where is|where's|definition of|who invokes|impact (analysis|assessment|of (changing|renaming|removing|deleting|editing))|change impact|ripple effect|(who|what|anything)( else)? (depends on|uses)|dependents? of|dependenc(y|ies) (graph|direction|inversion|cycle)|layer (violation|boundar\\w*|direction)|layering|who imports|which (files|modules) import|call (graph|chain|path|tree|hierarchy)|transitive callers?|callers? of|usages? of|find usages|references? to|is \\w+ (still )?(used|referenced|called)|never called|dead code|unused (code|function|method|module|export|class|variable|import|param\\w*)|unreachable code|orphan(ed)? (module|file|code)|circular (import|dependenc\\w*)|(import|dependenc\\w*) cycle|cycle (between|detection)|(code|app|program|service|main|server|cli|boot) entry ?points?|boot (path|sequence|order)|startup (path|sequence|order)|how is (this|it|\\w+) wired|wired up|rename\\w*"
|
|
163
173
|
]
|
package/hooks/lang/tr.json
CHANGED
|
@@ -196,7 +196,17 @@
|
|
|
196
196
|
"araştır\\w*|literatür\\w*|hipotez\\w*|deney|karşılaştır\\w*|karşılaştırmalı analiz|kıyaslama\\w*|varyant\\w*|a/b testi|(kullanıcı|müşteri) (interview\\w*|görüşme\\w*|mülakat\\w*)|user (görüşme\\w*|mülakat\\w*)|anket\\w*|kök neden (analiz|araştır)\\w*|kaynak tarama\\w*|referans tarama\\w*|(yöntem|yaklaşım|kütüphane|varyant|seçenek)\\w* karşılaştır\\w*|ölçüm\\w*|deneysel\\w*|deneyler\\w*|makale\\w*|veri (seti|kümesi)|olay sonrası (analiz|değerlendirme)\\w*|hata bütçe\\w*|gerçekten (doğru|öyle) mu|kanıt\\w*|test kapsam\\w*|kapsam oran\\w*|kapsamı (artır|yükselt)\\w*|doküman(tasyon)?\\w* (yetersiz|eksik|kötü|zayıf)"
|
|
197
197
|
],
|
|
198
198
|
"product": [
|
|
199
|
-
"
|
|
199
|
+
"pm (?:g[öo]z[üu]yle|gibi|olarak|bak[ıi][şs]\\w*|perspektif\\w*|a[çc][ıi]s[ıi]ndan)|urun(?!\\w*_)\\w*|[öo]zellik\\w*|[öo]zelli[ğg]\\w*[^.!?\\n]{0,40}\\b(?:denetle|incele|analiz|de[ğg]erlendir|g[öo]zden ge[çc]ir)\\w*|[öo]nceliklendir\\w*|(?:[öo]zellik|[üu]r[üu]n|backlog|roadmap|yol harita|talep|istek)\\w* (?:\\w+ ){0,2}[öo]ncelik\\w*|[öo]ncelik\\w* (?:\\w+ ){0,2}(?:[öo]zellik|[üu]r[üu]n|backlog|roadmap|yol harita|talep|istek)\\w*|de[ğg]erlendir\\w* (?:\\w+ ){0,2}(?:uygulama|[üu]r[üu]n|[öo]zellik)\\w*|(?:uygulama|[üu]r[üu]n|[öo]zellik)\\w* (?:\\w+ ){0,2}de[ğg]erlendir\\w*",
|
|
200
|
+
"ürün(?!\\w*_)\\w*|yol harita\\w*|kuzey yıldız\\w*|aktivasyon\\w*|dönüşüm\\w*|fiyatlandır\\w*|önceliklendir\\w*|kullanıcı araştırma\\w*|ürün keşf\\w*|müşteri geri bildirim\\w*|benimsen\\w*|konumlandır\\w*|segmentasyon\\w*|hedef kitle\\w*|(kullanıcı|müşteri) discovery|keşif (görüşme|çalışma)\\w*|fırsat\\w*|memnuniyet\\w*|anket\\w*|(kullanıcı|müşteri)[ -]?(feedback|geri bildirim)\\w*|(customer|user)[ -]?geri bildirim\\w*|şikayet\\w*|rakip\\w*|rekabet\\w*|pazar pay\\w*|terk oran\\w*|elde tutma\\w*|abonelik\\w*|gelir model\\w*|özellik\\w*|sayfa(?! numara)\\w*|ekran(?! kart)(?!a\\b[^.!?\\n]{0,40}\\b(?:yaz|bas)\\w*)\\w*|arayüz\\w*|arama kutu\\w*|filtre\\w*|tablo(?![^.!?\\n]{0,60}\\b(?:sütun|kolon|sql|index|indeks)\\w*)\\w*|adım(?! sayı)\\w*|kullanıcı liste\\w*|form(u|un|da|daki|lar|ları|unu)\\w*[^.!?\\n]{0,40}\\b(?:incele|denetle|analiz|de[ğg]erlendir|iyile[şs]tir|sadele[şs]tir|kontrol)\\w*"
|
|
201
|
+
],
|
|
202
|
+
"design": [
|
|
203
|
+
"(?:(?<![\\w'’] )|(?<=\\bbu )|(?<=\\bşu ))tasar[ıi]m\\w*|(?:dashboard|pano|g[öo]sterge panel|ekran|sayfa|aray[üu]z|landing|logo|ikon)\\w* (?:\\w+ ){0,2}(?:tasarla|tasar[ıi]m|redesign)\\w*|(?:web[ -]?)?site\\w* tasar[ıi]m\\w*|(?:mobil |web )?uygulama\\w* tasar[ıi]m\\w*|(?:web|mobil) tasar[ıi]m\\w*|tasar[ıi]m (?:sistem|token|dil|rehber)\\w*|yeniden tasarla\\w*|ba[şs]tan tasarla\\w*|design [çc]al[ıi][şs]ma\\w*|aray[üu]z\\w*|(?:ui|aray[üu]z|form|buton|d[üu][ğg]me|kart|men[üu]|sayfa|ekran|react|vue)\\w* (?:\\w+ )?bile[şs]en\\w*|bile[şs]en (?:k[üu]t[üu]phane|sistem)\\w*|tipografi\\w*|renk\\w*|tema(?:s[ıi]|y[ıi]|lar\\w*)?|kullan[ıi]labilirlik\\w*|eri[şs]ilebilirli[kğg]\\w*|g[öo]rsel (?:hiyerar[şs]i|tutarl[ıi]l[ıi]k|denetim|ele[şs]tiri)\\w*",
|
|
204
|
+
{
|
|
205
|
+
"ui_ask": "iyile[şs]tir\\w*|g[üu]zelle[şs]tir\\w*|d[üu]zenle\\w*|kar[ıi][şs][ıi]k\\w*|tutars[ıi]z\\w*|da[ğg][ıi]n[ıi]k\\w*|[çc]irkin\\w*"
|
|
206
|
+
},
|
|
207
|
+
{
|
|
208
|
+
"ui_ask": "eri[şs]ilebilir\\w*"
|
|
209
|
+
}
|
|
200
210
|
],
|
|
201
211
|
"graph": [
|
|
202
212
|
"kim çağır\\w*|çağrı yerleri|nerede tanımlı|nasıl bağlan\\w*|etkilenir\\w*|hangi dosyalar etkilen\\w*|etki (analiz|alan)\\w*|neyi etkile\\w*|neleri etkile\\w*|etkilen\\w*|bağımlı\\w*|kullanılmayan\\w*|kullanılmıyor|ölü kod|döngüsel (bağımlılık|import)\\w*|giriş nokta\\w*|uygulama (nerede|nereden) başl\\w*|kim import ed\\w*|(fonksiyon|metod|sınıf|modül|api)\\w* (kim|nerede) kullan\\w*|nerede (kullanıl|çağrıl)\\w*|tanım\\w* nerede|kullanım yerleri|çağrı (zinciri|grafiği)|bağımlılık (grafiği|ağacı)|yeniden adlandır\\w*"
|
package/hooks/tezgah_agents.py
CHANGED
|
@@ -89,9 +89,11 @@ EMPTY_IS_NOT_PROOF = (
|
|
|
89
89
|
# The task class each generated specialist is for, in the order the steering
|
|
90
90
|
# line names them. The orchestrator is not here: it is a primary agent, not one
|
|
91
91
|
# the main thread delegates to.
|
|
92
|
-
STEER = (("mechanical edit (tier from
|
|
92
|
+
STEER = (("mechanical edit (tier from `~/.config/tezgah/bin/tezgah-route`)", "tezgah-cheap"),
|
|
93
93
|
("bounded code or tests", "tezgah-standard"),
|
|
94
|
-
("design, invariants, unknown-cause debugging", "tezgah-frontier"),
|
|
94
|
+
("software design, invariants, unknown-cause debugging", "tezgah-frontier"),
|
|
95
|
+
("UI/screen/component build or redesign (brief loads design-contract)",
|
|
96
|
+
"tezgah-standard"),
|
|
95
97
|
("review of a diff", "tezgah-reviewer"),
|
|
96
98
|
("running the impacted checks", "tezgah-tester"),
|
|
97
99
|
("docs and path:line citations", "tezgah-docs"),
|
|
@@ -231,13 +233,18 @@ def _reviewer_body(host):
|
|
|
231
233
|
"security, tests and performance) or per file group: when your brief\n"
|
|
232
234
|
"names a dimension or files, review only those - a sibling owns the rest.\n"
|
|
233
235
|
"Round two reads only the delta since the sha round one recorded\n"
|
|
234
|
-
"(
|
|
235
|
-
"callers of the symbols that delta touches
|
|
236
|
+
"(`~/.config/tezgah/bin/tezgah-task review` prints it), plus the\n"
|
|
237
|
+
"round-one hunks and direct callers of the symbols that delta touches,\n"
|
|
238
|
+
"and marks every round-one\n"
|
|
236
239
|
"finding closed or open: re-reading the whole diff re-reports what was\n"
|
|
237
240
|
"already triaged. Test results are input, not a task - read the author's\n"
|
|
238
241
|
"output file; do not run the suite, and run at most one `-k` test when a\n"
|
|
239
242
|
"specific accusation needs it. The same defect family confirmed in both\n"
|
|
240
243
|
"rounds is a sign the design needs a pivot, not another patch.\n\n"
|
|
244
|
+
"When the brief carries an OCR rule group, its rule text is the checklist\n"
|
|
245
|
+
"for those files: account for every listed file as reviewed or skipped\n"
|
|
246
|
+
"with a reason, and still apply everything above - OCR output is input,\n"
|
|
247
|
+
"never a verdict.\n\n"
|
|
241
248
|
"%s" % (_graph_howto(host), _blast_radius(host), EMPTY_IS_NOT_PROOF,
|
|
242
249
|
decision, decision, _may_use(host)))
|
|
243
250
|
|
|
@@ -259,6 +266,9 @@ def _worker_body(tier):
|
|
|
259
266
|
"progress, but never redefine the work. Never widen or narrow the brief's\n"
|
|
260
267
|
"scope, budget or question. If the brief cannot be met as written, say\n"
|
|
261
268
|
"so and stop rather than answering a different question.\n%s\n"
|
|
269
|
+
"A brief that builds or changes UI: read the `design-contract` skill\n"
|
|
270
|
+
"(and `design-library` for critique) and derive/check with\n"
|
|
271
|
+
"`~/.config/tezgah/bin/tezgah-design` before editing.\n"
|
|
262
272
|
"Never spawn subagents.\n%s" % (tier, tier, scope, WORKER_OUTPUT))
|
|
263
273
|
return body
|
|
264
274
|
|
|
@@ -330,19 +340,22 @@ SPECIALISTS = {
|
|
|
330
340
|
"shell and browser/device tools; no source edits",
|
|
331
341
|
"Read the running app, never only its source: a UI claim inferred from\n"
|
|
332
342
|
"code is not evidence. Measure against `.tezgah/design-contract.md` when\n"
|
|
333
|
-
"it exists (
|
|
334
|
-
"breakpoint and state it came from and a 0-4 severity
|
|
335
|
-
"do not edit source files."),
|
|
343
|
+
"it exists (`~/.config/tezgah/bin/tezgah-design check`). Every finding\n"
|
|
344
|
+
"names the screen, breakpoint and state it came from and a 0-4 severity.\n"
|
|
345
|
+
"Report findings; do not edit source files."),
|
|
336
346
|
"tezgah-researcher": (
|
|
337
347
|
"Runs one research line through OpenResearch: hypotheses, experiments, "
|
|
338
348
|
"literature, a report - the protocol frozen before the run.",
|
|
339
349
|
("research", "ai-research"),
|
|
340
|
-
"shell for `orx` and
|
|
350
|
+
"shell for `orx` and `~/.config/tezgah/bin/tezgah-research`; writes only "
|
|
351
|
+
"under .tezgah/research",
|
|
341
352
|
"Load the OpenResearch manual first (`orx skill`) and follow its\n"
|
|
342
353
|
"experiment-tree rules. Work inside the one line the brief names; never\n"
|
|
343
|
-
"open a second line while one is open
|
|
354
|
+
"open a second line while one is open\n"
|
|
355
|
+
"(`~/.config/tezgah/bin/tezgah-research status`). Freeze\n"
|
|
344
356
|
"the protocol and the criteria before any run; a correction after a run\n"
|
|
345
|
-
"goes in `amendments.md`. Run
|
|
357
|
+
"goes in `amendments.md`. Run `~/.config/tezgah/bin/tezgah-research check`\n"
|
|
358
|
+
"before reporting.\n"
|
|
346
359
|
"If `orx` is not installed, say so and stop."),
|
|
347
360
|
}
|
|
348
361
|
|
|
@@ -351,7 +364,7 @@ def _specialist_desc(name):
|
|
|
351
364
|
what, skills, tools, _role = SPECIALISTS[name]
|
|
352
365
|
named = ", ".join(s + (" (host-installed)" if s in HOST_SKILLS else "")
|
|
353
366
|
for s in skills)
|
|
354
|
-
return "%s Skills: %s. Tier: %s (tezgah-route). Tools: %s." % (
|
|
367
|
+
return "%s Skills: %s. Tier: %s (~/.config/tezgah/bin/tezgah-route). Tools: %s." % (
|
|
355
368
|
what, named or "none", tm.AGENT_SLOT[name], tools)
|
|
356
369
|
|
|
357
370
|
|
|
@@ -386,12 +399,13 @@ ROLES = (
|
|
|
386
399
|
("tezgah-cheap",
|
|
387
400
|
"Mechanical, fully specified edits on the cheapest model tier: renames, "
|
|
388
401
|
"fixtures, formatting, version bumps, commit messages, a listed migration. "
|
|
389
|
-
"Chosen by
|
|
402
|
+
"Chosen by `~/.config/tezgah/bin/tezgah-route`; answers ESCALATE when the "
|
|
403
|
+
"work needs judgement.",
|
|
390
404
|
lambda infra: True, _worker_body("cheap"), False),
|
|
391
405
|
("tezgah-standard",
|
|
392
406
|
"Bounded code, tests, search-and-summarise or a small review on the standard "
|
|
393
|
-
"model tier. Chosen by
|
|
394
|
-
"judgement above it.",
|
|
407
|
+
"model tier. Chosen by `~/.config/tezgah/bin/tezgah-route`; answers ESCALATE "
|
|
408
|
+
"when the work needs judgement above it.",
|
|
395
409
|
lambda infra: True, _worker_body("standard"), False),
|
|
396
410
|
("tezgah-frontier",
|
|
397
411
|
"Design, stored-data or ordering invariants, security-sensitive code, "
|
|
@@ -447,23 +461,25 @@ def _orch_body(names):
|
|
|
447
461
|
"on its slice id. Never `wait` while a ready step exists. Once every\n"
|
|
448
462
|
"open item is blocked on a running slice, `wait` or end the turn - the\n"
|
|
449
463
|
"host wakes you on the result. You integrate the branches in the order\n"
|
|
450
|
-
"
|
|
451
|
-
"and the citation baseline. The per-turn\n"
|
|
464
|
+
"`~/.config/tezgah/bin/tezgah-task slice merge-plan` prints, and own\n"
|
|
465
|
+
"CHANGELOG.md, MANIFEST and the citation baseline. The per-turn\n"
|
|
452
466
|
"checks of what changed still run in the turn, in the background; only\n"
|
|
453
467
|
"the heavy tier (full suite, neuter, e2e) is joined at merge.\n"
|
|
454
468
|
"A slice commits `wip: <step>` after each step. A stopped slice is\n"
|
|
455
|
-
"resumed (
|
|
456
|
-
"silently absorbed inline; run
|
|
469
|
+
"resumed (`~/.config/tezgah/bin/tezgah-task slice resume <id>`) or\n"
|
|
470
|
+
"re-dispatched, never silently absorbed inline; run\n"
|
|
471
|
+
"`~/.config/tezgah/bin/tezgah-task slice reconcile --prune`\n"
|
|
457
472
|
"before the turn that merged slices ends.\n\n"
|
|
458
473
|
"Route reviews to tezgah-reviewer, with the changed files and symbols in\n"
|
|
459
474
|
"the brief: where it has no shell it cannot run `git diff` itself. Checks\n"
|
|
460
475
|
"go to tezgah-tester, docs and citations to tezgah-docs, a security review\n"
|
|
461
476
|
"to tezgah-security, a running app to tezgah-ui, a research line to\n"
|
|
462
477
|
"tezgah-researcher. Brief a code-discovery task to a tier worker with the\n"
|
|
463
|
-
"codegraph tools; a second opinion (
|
|
464
|
-
"thread. Other work goes to the tier worker\n"
|
|
465
|
-
"
|
|
466
|
-
"tezgah-frontier). A report missing an
|
|
478
|
+
"codegraph tools; a second opinion (`~/.config/tezgah/bin/consult`) stays\n"
|
|
479
|
+
"with the main thread. Other work goes to the tier worker\n"
|
|
480
|
+
"`~/.config/tezgah/bin/tezgah-route \"<brief>\"` names (tezgah-cheap,\n"
|
|
481
|
+
"tezgah-standard, tezgah-frontier). A report missing an\n"
|
|
482
|
+
"`Output to orchestrator` field,\n"
|
|
467
483
|
"or an ESCALATE, gets one narrower re-brief of the same role naming the\n"
|
|
468
484
|
"missing field or the escalated judgement; only a second miss is\n"
|
|
469
485
|
"restarted on tezgah-frontier with the original brief, never continued.\n"
|
package/hooks/tezgah_apps.py
CHANGED
|
@@ -127,6 +127,10 @@ def _probe_orx():
|
|
|
127
127
|
return _tp("orx_bin")()
|
|
128
128
|
|
|
129
129
|
|
|
130
|
+
def _probe_ocr():
|
|
131
|
+
return _tp("ocr_bin")()
|
|
132
|
+
|
|
133
|
+
|
|
130
134
|
# The fetch-and-convert step of an embedding row, run by the installer as its
|
|
131
135
|
# `cmd`, and the probe that answers whether the pinned file is in place.
|
|
132
136
|
_EMBED = os.path.join(os.path.dirname(os.path.abspath(__file__)), "tezgah_embed.py")
|
|
@@ -209,6 +213,20 @@ REGISTRY = (
|
|
|
209
213
|
"cmd": ["sh", "-c",
|
|
210
214
|
"curl -LsSf https://openresearch.sh/install.sh | sh"],
|
|
211
215
|
"why": "research routing (OpenResearch)"}},
|
|
216
|
+
# Opt-in, not a server: open-code-review's deterministic review spec
|
|
217
|
+
# (`ocr delegate preview|rule`, no model call) for the reviewer brief, and
|
|
218
|
+
# on omp its own loop on omp's model (bin/tezgah-ocr-review). Plan 125.
|
|
219
|
+
{"id": "ocr",
|
|
220
|
+
"name": "ocr",
|
|
221
|
+
"why": "review spec: file selection and per-file rules (open-code-review)",
|
|
222
|
+
"command": None,
|
|
223
|
+
"env": None,
|
|
224
|
+
"default": False,
|
|
225
|
+
"dep": {"name": "ocr", "probe": _probe_ocr, "needs": ("npm",),
|
|
226
|
+
# 1.13.2 is the release under 375f64c (the vendored prompts' commit);
|
|
227
|
+
# its prompts, delegate and rules are identical to 375f64c's
|
|
228
|
+
"cmd": ["npm", "install", "-g", "@alibaba-group/open-code-review@1.13.2"],
|
|
229
|
+
"why": "the review spec in the reviewer brief"}},
|
|
212
230
|
# Opt-in, not servers: a static embedding model fused with BM25 for the
|
|
213
231
|
# per-turn lessons and the docs fallback (hooks/tezgah_embed.py). Enabling
|
|
214
232
|
# one fetches and converts its pinned file; the first selected one is used.
|
|
@@ -106,6 +106,10 @@ COMPONENTS = [
|
|
|
106
106
|
"skills/feature-audit/SKILL.md", "skills/product-flow/SKILL.md",
|
|
107
107
|
"hooks/tezgah_product.py"],
|
|
108
108
|
"switch": "research-off", "editable": True, "revert": "git"},
|
|
109
|
+
{"key": "design", "label": "design",
|
|
110
|
+
"files": ["hooks/tezgah_policy.py", "skills/design-contract/SKILL.md",
|
|
111
|
+
"skills/design-library/SKILL.md", "bin/tezgah-design"],
|
|
112
|
+
"switch": "design-off", "editable": True, "revert": "git"},
|
|
109
113
|
{"key": "attribution", "label": "attribution",
|
|
110
114
|
"files": ["hooks/tezgah_policy.py", "hooks/tezgah_gate.py"],
|
|
111
115
|
"switch": "none", "editable": False, "revert": "git"},
|