English | Русский
Skill profiles и variants/ (v1.4 polish — B8-pre)
TAUSIK skills имеют один SKILL.md плюс опциональные двухосные оверлеи: per-IDE поведение и per-model стиль. Оси композируются независимо — cursor-gpt-5 сессия использует тот же model/gpt-5.md overlay что и claude-gpt-5 (DRY).
Структура (актуальная)
harness/skills/<skill-name>/
SKILL.md # Общие инструкции + YAML frontmatter
variants/
ide/
claude.md # Подмешивается когда активный IDE = claude
cursor.md # ...cursor
qwen.md # ...qwen
codex.md # ...codex
model/
opus.md # Подмешивается когда активная модель = opus
sonnet.md
haiku.md
gpt-4.md # Добавлено в v14b-gpt-model-profile (B8)
gpt-5.md # то же
gpt-5-5.md # то же (форма `gpt-5.5` через точку нормализуется сюда)
qwen.mdGPT overlays для /plan, /task, /ship намеренно телеграфные (≤25 строк каждый, императив, только delta — без перепечатывания base SKILL.md). Они подталкивают: агрессивные параллельные tool calls (особенно gpt-5/gpt-5-5), zero narrative reasoning, single-turn task completion. См. harness/skills/{plan,task,ship}/variants/model/gpt-*.md.
Старая плоская структура (variants/<slug>.md) всё ещё резолвится через merge_skill_markdown(skill_dir, requested_profile=<slug>) — оставлена для backward compatibility с внешними skill-репозиториями. Новые skills должны использовать двухосную структуру.
Auto-detect на старте сессии
scripts/hooks/session_start.py::_auto_rebuild_skills резолвит (ide, model) по приоритету:
- Env override:
TAUSIK_IDE_PROFILE,TAUSIK_MODEL_PROFILE - Project config:
.tausik/config.jsonключиide_profile,model_profile - Auto-detect:
scripts/skill_profile_detect.pyчитает известные IDE env vars (CLAUDE_CODE_*,CURSOR_*,QWEN_*,CODEX_*) и model env vars (ANTHROPIC_MODEL,OPENAI_MODEL,QWEN_MODELи др.). Модель частоNoneпотому что Cursor/Qwen не выставляют активную модель в env — это нормально, IDE overlay всё равно применяется.
Hook сравнивает результат с .tausik/.session.json. На mismatch вызывает rebuild_skills — пересклеивает каждый .claude/skills/<slug>/SKILL.md на диске. Cache hit (нет изменений) = no-op (микросекунды). Re-merge идемпотентен — каждое склеивание сначала strip'ит существующие маркеры <!-- tausik-profile:... --> из base.
Ручной override
tausik config show # показать (ide, model, source)
tausik config set ide_profile cursor # сохранить override в .tausik/config.json
tausik config set model_profile gpt-5 # сохранить model override
tausik skill rebuild # ручной триггер; no-op когда нечего менять
tausik skill rebuild --force # переписать даже если sha256 совпадаетПорядок merge
Двухосный merge (в этом порядке):
base SKILL.md + variants/ide/<ide>.md + variants/model/<model>.mdIDE constraints первыми (как host вызывает tools, runtime quirks). Model overlay последним (стилевые подсказки). Любой или оба overlay-а могут отсутствовать — молча пропускаются.
Идемпотентность
merge_skill_markdown strip'ит всё начиная с первого маркера <!-- tausik-profile: перед re-merge. Это значит rebuild можно запускать многократно без накопления секций — merged файл всегда base + ide + model, никогда base + ide + model + ide + model.
Frontmatter (legacy — только плоская структура)
| Поле | Значение |
|---|---|
profile_fallback | Когда merge_skill_markdown(requested_profile=<slug>) не находит variants/<slug>.md, пытается этот профиль для overlay lookup (только legacy flat — НЕ применяется к двухосной структуре). |
Token economy
- Overlays должны быть телеграфные (≤30 строк каждый, императив). Длинные пояснения убивают экономию.
- Disk pre-merge → runtime cost = чтение файла. Никакого in-memory templating, никакого merge per-call.
- Anthropic API prompt caching: merged SKILL.md стабилен для (ide, model) tuple, повторные вызовы внутри сессии попадают в cache.
Reference
scripts/skill_profile.py—merge_skill_markdown,resolve_variant_overlay,_strip_existing_overlaysscripts/skill_profile_detect.py—detect_ide,detect_model,normalize_model_profile_slug,VALID_IDES,VALID_MODELSscripts/skill_profile_session.py—load_session_state,save_session_state,resolve_profilescripts/skill_profile_rebuild.py—rebuild_skillsс sha256 cachescripts/hooks/session_start.py::_auto_rebuild_skills— SessionStart hook интеграция
Миграция со старой плоской структуры
Если вы поддерживаете TAUSIK skill repo на legacy flat variants/<slug>.md:
- Решите, IDE-specific это overlay или model-specific.
- Переместите
variants/<slug>.md→variants/ide/<slug>.mdилиvariants/model/<slug>.md. - Запустите
tausik skill rebuild --forceчтобы пересгенерить merged файлы. - Плоская структура всё ещё работает (backward compat) — миграция опциональна но рекомендована.