From 931330bf31d9ffef26d0a9311fe467984b588344 Mon Sep 17 00:00:00 2001 From: vitya Date: Wed, 26 Aug 2026 10:18:27 +0300 Subject: [PATCH] =?UTF-8?q?feat(skill):=20writing-skills=20v0.2.0=20?= =?UTF-8?q?=E2=80=94=20placement=20rule:=20=D0=BF=D1=80=D0=BE=D0=B5=D0=BA?= =?UTF-8?q?=D1=82=D0=BD=D1=8B=D0=B9=20=D1=81=D0=BA=D0=B8=D0=BB=20=E2=86=92?= =?UTF-8?q?=20.agents/skills/=20(cwd),=20=D0=BD=D0=B5=20~/.agents/skills/?= =?UTF-8?q?=20=D0=B8=20=D0=BD=D0=B5=20=D0=BA=D0=B0=D1=82=D0=B0=D0=BB=D0=BE?= =?UTF-8?q?=D0=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dist/writing-skills.skill | Bin 4386 -> 5054 bytes skills/writing-skills/SKILL.md | 18 ++++++++++++++++-- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/dist/writing-skills.skill b/dist/writing-skills.skill index e3118e1d2e143fbaefe764cb44aa741947872ef4..1e112fb80f671283e8fcf01f127d1a281bc3b761 100644 GIT binary patch delta 5016 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 delta 4349 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 Authoring agent skills TDD-style — RED-GREEN-REFACTOR applied to SKILL.md documents. Use when creating a new skill, editing an existing one, or @@ -89,9 +89,21 @@ content for hypothetical cases. ### Skill structure (our catalog conventions) ``` -skills//SKILL.md +skills//SKILL.md # общий каталог (catalog, версионируется, ставится install.sh) ``` +**Куда класть скил — определи ДО написания (три варианта, не путать):** + +| Тип скила | Место | Когда | +|---|---|---| +| Общий каталог | `~/projects/skills/skills//SKILL.md` + deploy (lint/build/install) | полезен всем проектам/агентам | +| **Проектный (зона проекта)** | `/.agents/skills//SKILL.md` (pi грузит из cwd; Claude Code: `.claude/skills/`) | привязан к одному проекту/роли (пример: `.admin` ops-скилы, `books/.agents/skills/`) | +| ~~Глобальная установка руками~~ | ~~`~/.agents/skills/`~~ | **НЕ сюда** — это установочная копия (перезапишется update-skills), не место разработки | + +Правило: если скил про зону одного проекта (admin, books, …) — проектный путь +(`.agents/skills/` в cwd проекта), НЕ общий каталог и НЕ `~/.agents/skills/`. +Если скил общий — каталог `skills/` + deploy-цикл. При сомнении — спросить. + Frontmatter (YAML): - `name` — letters, numbers, hyphens only. Verb-first, active voice: @@ -158,6 +170,8 @@ discipline skills. - [ ] Description = when to use only, no workflow summary - [ ] Frontmatter: name (verb-first, hyphens), description (triggers), version (bumped), provenance (author/adapted-from with real pin) +- [ ] Placement decided: project skill → `/.agents/skills/` (cwd), NOT + `~/.agents/skills/`; catalog skill → `skills//` + deploy cycle - [ ] Lint passes (catalog: `scripts/lint-skills.py`), dist rebuilt (`scripts/build.sh`), installed (`scripts/install.sh `) - [ ] README provenance table updated (catalog)