@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/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
|
|
@@ -217,6 +311,12 @@ Every other surface reads the store.
|
|
|
217
311
|
legend on hover, pins it on click (16-19,35,47-52,63-64).
|
|
218
312
|
- **Codex** — hosts/codex/hook.py puts the plain line in `systemMessage`
|
|
219
313
|
(182-184,195-198).
|
|
314
|
+
- **Amp** — the plugin draws the widest plain tier
|
|
315
|
+
(`hosts/amp/hook.py::status_line`) on Amp's experimental status item
|
|
316
|
+
(`createStatusItem`, TUI only, plain text). It draws only for the thread the
|
|
317
|
+
user is looking at. It redraws on `session.start`, `agent.end` and each
|
|
318
|
+
watched tool result, and shows `hook✗` while the hook fails. A build without
|
|
319
|
+
the API has no status surface (`hosts/amp/tezgah-plugin.ts.in`).
|
|
220
320
|
|
|
221
321
|
## Seeing and debugging the line
|
|
222
322
|
|
|
@@ -227,6 +327,7 @@ see a line by hand:
|
|
|
227
327
|
tezgah-status /path/to/repo <session-id> # the line for one repo and session
|
|
228
328
|
tezgah-status /path/to/repo <id> --json # segments: key/state/glyph/text/group
|
|
229
329
|
tezgah-status /path/to/repo <id> --counters # the evidence ledger's counters
|
|
330
|
+
tezgah-status --rates --since A --until B # the ledger folded between two dates
|
|
230
331
|
tezgah-status --legend # what each mark means
|
|
231
332
|
tezgah-status --rule-yield # live gate rules that stopped firing
|
|
232
333
|
tezgah-status --enforcers # what enforces each always-on rule
|
|
@@ -259,6 +360,25 @@ three places: no session id (used marks stay `○`), a surface that passed
|
|
|
259
360
|
`--observable=` and so renders dim where you expected a state, or a store a
|
|
260
361
|
sandboxed host could not write (`hooks/tezgah_paths.py::cache_dir`).
|
|
261
362
|
|
|
363
|
+
`--rates --since DATE --until DATE` is the windowed reader over the same
|
|
364
|
+
ledgers (`rates`, `hooks/tezgah_integrity.py::rates`). It folds the rows stamped
|
|
365
|
+
in `[since, until)` per window and per calendar day. The fold carries turns,
|
|
366
|
+
`claim` rows and the Stop classes that blocked them. It also carries the shape
|
|
367
|
+
flags of each judged reply, and denies by rule. The rates are blocks per 100
|
|
368
|
+
turns and denies per 100 sessions. They also carry the claim block and Stop
|
|
369
|
+
shape shares, and blocked claims per 100 sessions by class. `counters_all` still
|
|
370
|
+
totals a lifetime on purpose, and the window is this reader's, so the two cannot
|
|
371
|
+
disagree about a row. The dates are local calendar days. `until` is exclusive,
|
|
372
|
+
which makes two adjacent windows a partition of the span rather than an
|
|
373
|
+
approximation of one. A repeated `--since`/`--until` pair prints one block per
|
|
374
|
+
window. It also prints the pp delta between adjacent windows, the unit the
|
|
375
|
+
observation rows in `.tezgah/plans` state their bars in. A window that read more
|
|
376
|
+
than one row contract prints the split. A delta whose two windows lean on
|
|
377
|
+
different contracts says so. There, `claims` is every judged reply under `v2`
|
|
378
|
+
and only a reply that claimed under `v3` (plan 135). `--json` prints
|
|
379
|
+
`{"windows": [...]}` - one shape for one window and for many. A window that
|
|
380
|
+
cannot be read, or `--since`/`--until` without `--rates`, exits 2.
|
|
381
|
+
|
|
262
382
|
`--rule-yield` is a corpus report, not a mark: every live gate rule - the labels
|
|
263
383
|
`hooks/tezgah_gate.py` passes to `_deny`, read from the code with `ast`, so a
|
|
264
384
|
removed rule drops out on its own - with its fires over the real ledgers written
|
package/docs/testing.md
CHANGED
|
@@ -66,7 +66,9 @@ conclude from either.
|
|
|
66
66
|
`.github/workflows/ci.yml` runs on a push to `main` and on a pull request, so
|
|
67
67
|
a branch commit runs once, through its pull request, not twice. A tag push does
|
|
68
68
|
not start it. `release.yml` calls it (`ci.yml:13`) as its `ci` job, so npm and
|
|
69
|
-
brew publish only after CI passed on the release commit.
|
|
69
|
+
brew publish only after CI passed on the release commit. Its first job,
|
|
70
|
+
`on-main`, fails the release when the tag's commit is not on `origin/main`.
|
|
71
|
+
Then no job builds or uploads anything. A newer push to the
|
|
70
72
|
same ref cancels the run it replaces, except on a release (`concurrency`). Every
|
|
71
73
|
job has a `timeout-minutes`, so a hung test cannot hold a runner for six hours.
|
|
72
74
|
No matrix cancels its other legs when one fails (`fail-fast: false`).
|
package/hooks/hooks.json
CHANGED
|
@@ -10,10 +10,10 @@
|
|
|
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
|
-
{ "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 } ] },
|
|
16
|
+
{ "matcher": "Agent|agent|Task|task|Grep|grep|Bash|bash|PowerShell|pwsh|Shell|shell|Monitor|monitor|subagent|Edit|Write|MultiEdit|NotebookEdit|AskUserQuestion", "hooks": [ { "type": "command", "command": "\"${TEZGAH_PYTHON:-python3}\" \"${CLAUDE_PLUGIN_ROOT}/hooks/projects-pretooluse.py\"", "timeout": 5 } ] },
|
|
17
17
|
{ "matcher": "^mcp__(?:.*[^A-Za-z0-9])?(?:append|cancel|clear|click|close|comment|commit|copy|create|delete|deploy|drag|edit|email|evaluate|exec|execute|fill|insert|install|kill|launch|merge|message|mkdir|move|navigate|notify|patch|pause|post|press|print|publish|push|put|release|remove|rename|replace|reply|resume|review|run|save|send|set|share|skip|start|stop|submit|swipe|tag|tap|terminate|type|uninstall|update|upload|write)(?:[^A-Za-z0-9].*)?$", "hooks": [ { "type": "command", "command": "\"${TEZGAH_PYTHON:-python3}\" \"${CLAUDE_PLUGIN_ROOT}/hooks/projects-pretooluse.py\"", "timeout": 5 } ] }
|
|
18
18
|
],
|
|
19
19
|
"PostToolUse": [
|
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
|
]
|
|
@@ -214,6 +224,9 @@
|
|
|
214
224
|
"plan_build": [
|
|
215
225
|
"\\bplans?\\b[^.?!\\n]{0,40}\\b(?:is ready|ready|written|drafted)\\b|\\b(?:wrote|opened|drafted|added|created) (?:the |a |this )?plans?\\b|\\b(?:build|implement|execute|start on|start) (?:the |this |that )?plans?\\b"
|
|
216
226
|
],
|
|
227
|
+
"owner_choice": [
|
|
228
|
+
"\\bwhich (?:variant|option|approach|design)s?\\b|\\b(?:v\\d+|option [a-h1-9]|variant [a-z0-9]+),? or (?:v\\d+|option [a-h1-9]|variant [a-z0-9]+)\\b|\\b(?:another|other|the other) session\\w*|\\bsession'?s (?:line|plan|branch)\\b|\\bclos\\w*\\b[^?\\n]{0,40}\\bline\\b|--allow-open|--limit\\b|\\.staging\\b|\\bhidden (?:dir|directory|folder)\\b|\\b(?:another|a different) (?:folder|dir|directory)\\b|\\b(?:work ?)?around\\b[^?\\n]{0,40}\\brefusal\\b"
|
|
229
|
+
],
|
|
217
230
|
"spend": [
|
|
218
231
|
"spend\\w*|\\bpaid\\b|billing|\\bcost\\w*|\\bbudget\\w*|\\busd\\b|\\$\\s?\\d"
|
|
219
232
|
],
|
|
@@ -226,6 +239,12 @@
|
|
|
226
239
|
"cheap_answer": [
|
|
227
240
|
"yes|yep|yeah|ok(?:ay)?|sure|go(?: on| ahead)?|continue|proceed|do it|carry on|keep going|approved"
|
|
228
241
|
],
|
|
242
|
+
"hand_over": [
|
|
243
|
+
"\\bplease\\s+(?:run|execute)\\b|\\byour\\s+(?:step|turn|move)\\b(?=\\s*[:.;,!]|\\s*$)|\\bover to you\\b"
|
|
244
|
+
],
|
|
245
|
+
"ran_it": [
|
|
246
|
+
"\\bi (?:ran|tested|verified|checked|executed)\\b|\\bran the (?:tests?|suite|build|lint|checks?)\\b|\\bwe ran\\b"
|
|
247
|
+
],
|
|
229
248
|
"outward": {
|
|
230
249
|
"push": "\\bpush\\w*",
|
|
231
250
|
"release": "\\brelease\\w*|\\btag(?:s|ged|ging)?\\b|version bump|bump the version",
|
|
@@ -319,6 +338,8 @@
|
|
|
319
338
|
"slice_lead": "",
|
|
320
339
|
"ready_lead": "",
|
|
321
340
|
"ask_lead": "",
|
|
341
|
+
"handed_lead": "",
|
|
342
|
+
"plan_lead": "",
|
|
322
343
|
"approval_heading": "Approval questions",
|
|
323
344
|
"recommended": "Recommended",
|
|
324
345
|
"grant_examples": "\"push without asking\", \"I approve\""
|
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*"
|
|
@@ -258,6 +268,9 @@
|
|
|
258
268
|
"plan_build": [
|
|
259
269
|
"\\bplan\\w*[^.?!\\n]{0,40}(?:hazır|yazıldı|yazdım|oluşturdum|oluşturuldu|açtım|açıldı|eklendi|uygula\\w*|başla\\w*|kur\\w*)|(?:yazdığım|açtığım|hazırladığım|oluşturduğum) plan\\w*"
|
|
260
270
|
],
|
|
271
|
+
"owner_choice": [
|
|
272
|
+
"\\b(?:v\\d+|seçenek \\w+|varyant \\w+)(?:'\\w+)? m[ıiuü]\\b,? (?:v\\d+|(?:seçenek |varyant )?\\w+)(?:'\\w+)? m[ıiuü]\\b|\\bhangi (?:varyant|seçenek|opsiyon|yaklaşım|tasarım)\\w*|\\bhangisini seç\\w*|\\b(?:başka|diğer) (?:bir )?oturum\\w*|\\bhatt[ıi]\\w* kapat\\w*|--allow-open|--limit\\b|\\.staging\\b|\\bgizli (?:dizin|klasör)\\w*|\\b(?:başka|farklı) (?:bir )?(?:klasör|dizin)\\w*|\\bred\\w* (?:aş|etrafından)\\w*|\\bengel\\w* (?:aş|etrafından)\\w*"
|
|
273
|
+
],
|
|
261
274
|
"spend": [
|
|
262
275
|
"ücret\\w*|ödeme\\w*|harca\\w*|bütçe\\w*|maliyet\\w*|\\bpara\\b|dolar\\w*|\\$\\s?\\d"
|
|
263
276
|
],
|
|
@@ -270,6 +283,12 @@
|
|
|
270
283
|
"cheap_answer": [
|
|
271
284
|
"evet|tamam|olur|devam(?: et)?|yap|başla|ilerle|okey|onay(?:lıyorum)?"
|
|
272
285
|
],
|
|
286
|
+
"hand_over": [
|
|
287
|
+
"\\b(?:sen|siz)\\b[^.!?\\n]{0,32}?\\bçalıştır(?:ın|ınız)?\\b|\\bsenin adımın\\b|\\badım(?:ı)? sende\\b|\\bsıradaki adım(?:ı)? sen\\b"
|
|
288
|
+
],
|
|
289
|
+
"ran_it": [
|
|
290
|
+
"\\b(?:test(?:ler)?i|suite'?i|komutu|kontrolü|denetimi)?\\s*(?:çalıştırdım|koştum|çalıştırdık)\\b|\\btest ettim\\b|\\bdoğruladım\\b|\\bkontrol ettim\\b|\\bdenetledim\\b"
|
|
291
|
+
],
|
|
273
292
|
"outward": {
|
|
274
293
|
"push": "\\bpush\\w*",
|
|
275
294
|
"release": "versiyon\\w*|sürüm\\w*|\\brelease\\w*|etiket\\w*",
|
|
@@ -340,6 +359,8 @@
|
|
|
340
359
|
"slice_lead": "Durmuş bir dilim var. ",
|
|
341
360
|
"ready_lead": "Hazır adımlar bekliyor. ",
|
|
342
361
|
"ask_lead": "Bu soruyu sorma: kararı ver ya da önerili onay sorusuna çevir. ",
|
|
362
|
+
"handed_lead": "Bu adımı sen çalıştır, kullanıcıya bırakma. ",
|
|
363
|
+
"plan_lead": "Plan modunda hiçbir şey koşmadı. ",
|
|
343
364
|
"approval_heading": "Onay için sorular",
|
|
344
365
|
"recommended": "Öneri",
|
|
345
366
|
"grant_examples": "\"bana sormadan pushla\", \"onay veriyorum\""
|
package/hooks/projects-stop.py
CHANGED
|
@@ -64,7 +64,8 @@ def main():
|
|
|
64
64
|
# a core that cannot answer has refused nothing, so the turn ends: the rule
|
|
65
65
|
# never traps a session, and that holds for its own failure too
|
|
66
66
|
reason = safe(session_id, stop_reason, p.get("last_assistant_message"),
|
|
67
|
-
session_id, cwd=cwd, after_block=bool(p.get("stop_hook_active"))
|
|
67
|
+
session_id, cwd=cwd, after_block=bool(p.get("stop_hook_active")),
|
|
68
|
+
mode=p.get("permission_mode"))
|
|
68
69
|
if reason:
|
|
69
70
|
json.dump({"decision": "block", "reason": reason}, sys.stdout)
|
|
70
71
|
|