kodu 2.2.0 → 3.0.2
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/README.md +24 -3
- package/bin/kodu.js +40 -0
- package/package.json +12 -67
- package/scripts/install.js +68 -0
- package/scripts/postinstall.js +22 -0
- package/AGENTS.md +0 -214
- package/__tests__/core/fs/fs.service.test.ts +0 -72
- package/__tests__/core/registry/registry.service.test.ts +0 -82
- package/__tests__/shared/cleaner/cleaner.service.test.ts +0 -102
- package/__tests__/shared/git/git.service.test.ts +0 -84
- package/__tests__/shared/runbook/runbook.service.test.ts +0 -104
- package/__tests__/shared/tokenizer/tokenizer.service.test.ts +0 -45
- package/biome.json +0 -50
- package/dist/package.json +0 -96
- package/dist/src/app.module.d.ts +0 -2
- package/dist/src/app.module.js +0 -42
- package/dist/src/app.module.js.map +0 -1
- package/dist/src/commands/clean/clean.command.d.ts +0 -37
- package/dist/src/commands/clean/clean.command.js +0 -240
- package/dist/src/commands/clean/clean.command.js.map +0 -1
- package/dist/src/commands/clean/clean.module.d.ts +0 -2
- package/dist/src/commands/clean/clean.module.js +0 -26
- package/dist/src/commands/clean/clean.module.js.map +0 -1
- package/dist/src/commands/init/init.command.d.ts +0 -10
- package/dist/src/commands/init/init.command.js +0 -96
- package/dist/src/commands/init/init.command.js.map +0 -1
- package/dist/src/commands/init/init.module.d.ts +0 -2
- package/dist/src/commands/init/init.module.js +0 -22
- package/dist/src/commands/init/init.module.js.map +0 -1
- package/dist/src/commands/ops/ops-add.command.d.ts +0 -18
- package/dist/src/commands/ops/ops-add.command.js +0 -102
- package/dist/src/commands/ops/ops-add.command.js.map +0 -1
- package/dist/src/commands/ops/ops-init.command.d.ts +0 -22
- package/dist/src/commands/ops/ops-init.command.js +0 -130
- package/dist/src/commands/ops/ops-init.command.js.map +0 -1
- package/dist/src/commands/ops/ops-list.command.d.ts +0 -12
- package/dist/src/commands/ops/ops-list.command.js +0 -73
- package/dist/src/commands/ops/ops-list.command.js.map +0 -1
- package/dist/src/commands/ops/ops-path.command.d.ts +0 -9
- package/dist/src/commands/ops/ops-path.command.js +0 -52
- package/dist/src/commands/ops/ops-path.command.js.map +0 -1
- package/dist/src/commands/ops/ops-runbook.command.d.ts +0 -12
- package/dist/src/commands/ops/ops-runbook.command.js +0 -81
- package/dist/src/commands/ops/ops-runbook.command.js.map +0 -1
- package/dist/src/commands/ops/ops-status.command.d.ts +0 -11
- package/dist/src/commands/ops/ops-status.command.js +0 -62
- package/dist/src/commands/ops/ops-status.command.js.map +0 -1
- package/dist/src/commands/ops/ops-use.command.d.ts +0 -12
- package/dist/src/commands/ops/ops-use.command.js +0 -76
- package/dist/src/commands/ops/ops-use.command.js.map +0 -1
- package/dist/src/commands/ops/ops.command.d.ts +0 -7
- package/dist/src/commands/ops/ops.command.js +0 -56
- package/dist/src/commands/ops/ops.command.js.map +0 -1
- package/dist/src/commands/ops/ops.helpers.d.ts +0 -2
- package/dist/src/commands/ops/ops.helpers.js +0 -11
- package/dist/src/commands/ops/ops.helpers.js.map +0 -1
- package/dist/src/commands/ops/ops.module.d.ts +0 -2
- package/dist/src/commands/ops/ops.module.js +0 -36
- package/dist/src/commands/ops/ops.module.js.map +0 -1
- package/dist/src/commands/pack/pack.command.d.ts +0 -51
- package/dist/src/commands/pack/pack.command.js +0 -355
- package/dist/src/commands/pack/pack.command.js.map +0 -1
- package/dist/src/commands/pack/pack.module.d.ts +0 -2
- package/dist/src/commands/pack/pack.module.js +0 -27
- package/dist/src/commands/pack/pack.module.js.map +0 -1
- package/dist/src/core/config/config.module.d.ts +0 -2
- package/dist/src/core/config/config.module.js +0 -23
- package/dist/src/core/config/config.module.js.map +0 -1
- package/dist/src/core/config/config.schema.d.ts +0 -19
- package/dist/src/core/config/config.schema.js +0 -56
- package/dist/src/core/config/config.schema.js.map +0 -1
- package/dist/src/core/config/config.service.d.ts +0 -7
- package/dist/src/core/config/config.service.js +0 -49
- package/dist/src/core/config/config.service.js.map +0 -1
- package/dist/src/core/config/prompt.service.d.ts +0 -10
- package/dist/src/core/config/prompt.service.js +0 -80
- package/dist/src/core/config/prompt.service.js.map +0 -1
- package/dist/src/core/file-system/fs.module.d.ts +0 -2
- package/dist/src/core/file-system/fs.module.js +0 -21
- package/dist/src/core/file-system/fs.module.js.map +0 -1
- package/dist/src/core/file-system/fs.service.d.ts +0 -27
- package/dist/src/core/file-system/fs.service.js +0 -203
- package/dist/src/core/file-system/fs.service.js.map +0 -1
- package/dist/src/core/registry/registry.module.d.ts +0 -2
- package/dist/src/core/registry/registry.module.js +0 -22
- package/dist/src/core/registry/registry.module.js.map +0 -1
- package/dist/src/core/registry/registry.schema.d.ts +0 -24
- package/dist/src/core/registry/registry.schema.js +0 -21
- package/dist/src/core/registry/registry.schema.js.map +0 -1
- package/dist/src/core/registry/registry.service.d.ts +0 -16
- package/dist/src/core/registry/registry.service.js +0 -91
- package/dist/src/core/registry/registry.service.js.map +0 -1
- package/dist/src/core/ui/ui.module.d.ts +0 -2
- package/dist/src/core/ui/ui.module.js +0 -22
- package/dist/src/core/ui/ui.module.js.map +0 -1
- package/dist/src/core/ui/ui.service.d.ts +0 -22
- package/dist/src/core/ui/ui.service.js +0 -43
- package/dist/src/core/ui/ui.service.js.map +0 -1
- package/dist/src/main.d.ts +0 -2
- package/dist/src/main.js +0 -16
- package/dist/src/main.js.map +0 -1
- package/dist/src/shared/cleaner/cleaner.service.d.ts +0 -23
- package/dist/src/shared/cleaner/cleaner.service.js +0 -223
- package/dist/src/shared/cleaner/cleaner.service.js.map +0 -1
- package/dist/src/shared/cleaner/cleaner.types.d.ts +0 -21
- package/dist/src/shared/cleaner/cleaner.types.js +0 -3
- package/dist/src/shared/cleaner/cleaner.types.js.map +0 -1
- package/dist/src/shared/constants.d.ts +0 -4
- package/dist/src/shared/constants.js +0 -113
- package/dist/src/shared/constants.js.map +0 -1
- package/dist/src/shared/deps/deps.module.d.ts +0 -2
- package/dist/src/shared/deps/deps.module.js +0 -21
- package/dist/src/shared/deps/deps.module.js.map +0 -1
- package/dist/src/shared/deps/deps.service.d.ts +0 -15
- package/dist/src/shared/deps/deps.service.js +0 -114
- package/dist/src/shared/deps/deps.service.js.map +0 -1
- package/dist/src/shared/git/git.module.d.ts +0 -2
- package/dist/src/shared/git/git.module.js +0 -21
- package/dist/src/shared/git/git.module.js.map +0 -1
- package/dist/src/shared/git/git.service.d.ts +0 -5
- package/dist/src/shared/git/git.service.js +0 -56
- package/dist/src/shared/git/git.service.js.map +0 -1
- package/dist/src/shared/runbook/runbook.module.d.ts +0 -2
- package/dist/src/shared/runbook/runbook.module.js +0 -22
- package/dist/src/shared/runbook/runbook.module.js.map +0 -1
- package/dist/src/shared/runbook/runbook.service.d.ts +0 -20
- package/dist/src/shared/runbook/runbook.service.js +0 -118
- package/dist/src/shared/runbook/runbook.service.js.map +0 -1
- package/dist/src/shared/runbook/runbook.templates.d.ts +0 -6
- package/dist/src/shared/runbook/runbook.templates.js +0 -49
- package/dist/src/shared/runbook/runbook.templates.js.map +0 -1
- package/dist/src/shared/tokenizer/tokenizer.module.d.ts +0 -2
- package/dist/src/shared/tokenizer/tokenizer.module.js +0 -21
- package/dist/src/shared/tokenizer/tokenizer.module.js.map +0 -1
- package/dist/src/shared/tokenizer/tokenizer.service.d.ts +0 -10
- package/dist/src/shared/tokenizer/tokenizer.service.js +0 -36
- package/dist/src/shared/tokenizer/tokenizer.service.js.map +0 -1
- package/dist/tsconfig.build.tsbuildinfo +0 -1
- package/docs/todo.md +0 -7
- package/knip.json +0 -10
- package/kodu.json +0 -63
- package/kodu.schema.json +0 -100
- package/lefthook.yml +0 -11
- package/nest-cli.json +0 -8
- package/registry.schema.json +0 -39
- package/scripts/generate-json-schema.ts +0 -27
- package/skills/ac/SKILL.md +0 -239
- package/skills/al/SKILL.md +0 -98
- package/skills/audit/SKILL.md +0 -205
- package/skills/audit/audit-baseline-template.yml +0 -188
- package/skills/audit/runtime-detect.md +0 -64
- package/skills/audit/stacks/_generic.md +0 -41
- package/skills/audit/stacks/_registry.md +0 -47
- package/skills/audit/stacks/go.md +0 -66
- package/skills/audit/stacks/java.md +0 -44
- package/skills/audit/stacks/node.md +0 -57
- package/skills/audit/stacks/python.md +0 -45
- package/skills/audit/stacks/rust.md +0 -44
- package/skills/audit-api-contracts/SKILL.md +0 -201
- package/skills/audit-architecture/SKILL.md +0 -200
- package/skills/audit-bugs/SKILL.md +0 -226
- package/skills/audit-concurrency/SKILL.md +0 -197
- package/skills/audit-deployment/SKILL.md +0 -218
- package/skills/audit-docs/SKILL.md +0 -209
- package/skills/audit-errors/SKILL.md +0 -216
- package/skills/audit-logging/SKILL.md +0 -197
- package/skills/audit-matrix/SKILL.md +0 -245
- package/skills/audit-meta/SKILL.md +0 -120
- package/skills/audit-naming/SKILL.md +0 -200
- package/skills/audit-owasp/SKILL.md +0 -223
- package/skills/audit-performance/SKILL.md +0 -199
- package/skills/audit-reinvention/SKILL.md +0 -214
- package/skills/audit-secrets/SKILL.md +0 -198
- package/skills/audit-tests/SKILL.md +0 -210
- package/skills/audit-validation/SKILL.md +0 -206
- package/skills/audit-verify/SKILL.md +0 -139
- package/skills/audit-yagni/SKILL.md +0 -188
- package/skills/doc-gen/SKILL.md +0 -490
- package/skills/doc-gen/scripts/doc_gen.py +0 -911
- package/skills/generate-project-docs/SKILL.md +0 -380
- package/skills/implement-project/SKILL.md +0 -409
- package/skills/liteend-init/SKILL.md +0 -84
- package/skills/litefront-init/SKILL.md +0 -96
- package/skills/litefront-prototype/SKILL.md +0 -484
- package/skills/ops/SKILL.md +0 -94
- package/skills/post-call-task-builder/SKILL.md +0 -419
- package/skills/project-setup-standardizer/SKILL.md +0 -285
- package/skills/skills-best-practices/SKILL.md +0 -415
- package/skills/start/SKILL.md +0 -319
- package/skills/tech-blueprint/SKILL.md +0 -890
- package/skills/tech-blueprint/scripts/blueprint_validator.py +0 -417
- package/src/app.module.ts +0 -29
- package/src/commands/clean/clean.command.ts +0 -235
- package/src/commands/clean/clean.module.ts +0 -13
- package/src/commands/init/init.command.ts +0 -92
- package/src/commands/init/init.module.ts +0 -9
- package/src/commands/ops/ops-add.command.ts +0 -83
- package/src/commands/ops/ops-init.command.ts +0 -125
- package/src/commands/ops/ops-list.command.ts +0 -57
- package/src/commands/ops/ops-path.command.ts +0 -38
- package/src/commands/ops/ops-runbook.command.ts +0 -74
- package/src/commands/ops/ops-status.command.ts +0 -47
- package/src/commands/ops/ops-use.command.ts +0 -76
- package/src/commands/ops/ops.command.ts +0 -42
- package/src/commands/ops/ops.helpers.ts +0 -20
- package/src/commands/ops/ops.module.ts +0 -23
- package/src/commands/pack/pack.command.ts +0 -347
- package/src/commands/pack/pack.module.ts +0 -14
- package/src/core/config/config.module.ts +0 -10
- package/src/core/config/config.schema.ts +0 -58
- package/src/core/config/config.service.ts +0 -43
- package/src/core/config/prompt.service.ts +0 -80
- package/src/core/file-system/fs.module.ts +0 -8
- package/src/core/file-system/fs.service.ts +0 -248
- package/src/core/registry/registry.module.ts +0 -9
- package/src/core/registry/registry.schema.ts +0 -46
- package/src/core/registry/registry.service.ts +0 -128
- package/src/core/ui/ui.module.ts +0 -9
- package/src/core/ui/ui.service.ts +0 -39
- package/src/main.ts +0 -12
- package/src/shared/cleaner/cleaner.service.ts +0 -289
- package/src/shared/cleaner/cleaner.types.ts +0 -23
- package/src/shared/constants.ts +0 -118
- package/src/shared/deps/deps.module.ts +0 -8
- package/src/shared/deps/deps.service.ts +0 -175
- package/src/shared/git/git.module.ts +0 -8
- package/src/shared/git/git.service.ts +0 -47
- package/src/shared/runbook/runbook.module.ts +0 -9
- package/src/shared/runbook/runbook.service.ts +0 -164
- package/src/shared/runbook/runbook.templates.ts +0 -66
- package/src/shared/tokenizer/tokenizer.module.ts +0 -8
- package/src/shared/tokenizer/tokenizer.service.ts +0 -30
- package/tsconfig.build.json +0 -7
- package/tsconfig.json +0 -28
|
@@ -1,415 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: skills-best-practices
|
|
3
|
-
description: Design reusable AI agent skills in SKILL.md format — activation rules, constraints, workflow, output requirements, failure handling, and YAML frontmatter. Use when the user wants to create, improve, or standardize another skill for an AI agent.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
## PURPOSE
|
|
7
|
-
|
|
8
|
-
Мета-скилл для проектирования других skills.
|
|
9
|
-
Часть 1 — принципы качества. Часть 2 — пошаговый процесс создания и улучшения.
|
|
10
|
-
|
|
11
|
-
---
|
|
12
|
-
|
|
13
|
-
# Часть 1. Принципы
|
|
14
|
-
|
|
15
|
-
## Skill vs промпт
|
|
16
|
-
|
|
17
|
-
Skill — это SOP, а не инструкция чат-боту. Хороший skill описывает:
|
|
18
|
-
|
|
19
|
-
1. Когда использовать / когда НЕ использовать.
|
|
20
|
-
2. Как принимать решения.
|
|
21
|
-
3. Какие инструменты применять.
|
|
22
|
-
4. Что делать при неопределённости.
|
|
23
|
-
5. Как выглядит хороший / плохой результат.
|
|
24
|
-
|
|
25
|
-
## 6 ключевых паттернов
|
|
26
|
-
|
|
27
|
-
| # | Паттерн | Плохо | Хорошо |
|
|
28
|
-
|---|---------|-------|--------|
|
|
29
|
-
| 1 | Роль + ограничения раздельно | «Ты эксперт по K8s» | ROLE + CONSTRAINTS |
|
|
30
|
-
| 2 | Ветка «не знаю» | «Ответь на вопрос» | Если данных нет — остановись, перечисли |
|
|
31
|
-
| 3 | Позитивные инструкции | «Не будь многословным» | «Используй 3-7 предложений» |
|
|
32
|
-
| 4 | Few-shot примеры | Только инструкции | INPUT / GOOD OUTPUT / BAD OUTPUT |
|
|
33
|
-
| 5 | Явная иерархия | 20 правил | PRIORITY 1 > 2 > 3 |
|
|
34
|
-
| 6 | Инструменты отдельно | «Используй поиск если нужно» | SEARCH TOOL: когда, когда нет, что после |
|
|
35
|
-
|
|
36
|
-
## Антипаттерны
|
|
37
|
-
|
|
38
|
-
- простыня без структуры;
|
|
39
|
-
- десятки запретов подряд;
|
|
40
|
-
- расплывчатые слова («будь умным», «по возможности»);
|
|
41
|
-
- отсутствие примеров, критериев остановки, ветки неопределённости;
|
|
42
|
-
- бизнес-логика и форматирование в одном разделе.
|
|
43
|
-
|
|
44
|
-
## What not to optimize
|
|
45
|
-
|
|
46
|
-
- **бесконечные примеры** — 1-2 пар GOOD/BAD достаточно, остальное в appendix;
|
|
47
|
-
- **перегруженный YAML** — только name + description, никакой логики;
|
|
48
|
-
- **skill-учебник** — не объясняй основы языка или технологии, это SOP, не туториал;
|
|
49
|
-
- **идеальную изоляцию** — повторяющийся паттерн лучше вынести в reference, чем дублировать;
|
|
50
|
-
- **waterfall-структуру** — если секция не нужна, оставь «(not applicable)», а не удаляй.
|
|
51
|
-
|
|
52
|
-
---
|
|
53
|
-
|
|
54
|
-
# Часть 2. Процесс
|
|
55
|
-
|
|
56
|
-
Сначала определи режим: **CREATE** (новый skill) или **IMPROVE** (существующий).
|
|
57
|
-
|
|
58
|
-
---
|
|
59
|
-
|
|
60
|
-
## Pre-flight gate
|
|
61
|
-
|
|
62
|
-
**Не начинай генерацию финального SKILL.md, пока не определены все критичные поля.**
|
|
63
|
-
|
|
64
|
-
Критичные (без них — STOP, запроси у пользователя):
|
|
65
|
-
- [ ] цель навыка
|
|
66
|
-
- [ ] платформа (OpenCode / Claude Code / универсальный)
|
|
67
|
-
- [ ] аудитория (разработчик / тимлид / QA / AI-агент)
|
|
68
|
-
|
|
69
|
-
Второстепенные (если нет — генерируй с явными допущениями):
|
|
70
|
-
- [ ] тип навыка (аналитический / генеративный / ревью / диагностика / утилита)
|
|
71
|
-
- [ ] нужны ли инструменты
|
|
72
|
-
- [ ] ожидаемый формат результата
|
|
73
|
-
- [ ] нужен ли контекст существующего проекта
|
|
74
|
-
|
|
75
|
-
Если хотя бы одно критичное поле отсутствует — **не пиши финальный файл, задай вопросы**.
|
|
76
|
-
|
|
77
|
-
---
|
|
78
|
-
|
|
79
|
-
## Skill Type Inference
|
|
80
|
-
|
|
81
|
-
Если тип навыка не указан пользователем — определи его до начала работы над brief.
|
|
82
|
-
|
|
83
|
-
| Тип | Характерный паттерн | На что влияет |
|
|
84
|
-
|-----|---------------------|---------------|
|
|
85
|
-
| Аналитический | Проверка, поиск проблем, сравнение | PROCESS: крайние случаи, ветвление по данным |
|
|
86
|
-
| Генеративный | Создание текста, кода, документации | OUTPUT REQUIREMENTS: точная структура результата |
|
|
87
|
-
| Диагностический | Поиск причины, расследование сбоев | FAILURE HANDLING: 3+ сценария отказа |
|
|
88
|
-
| Ревью | Оценка, классификация, вердикт | DECISION RULES: чёткая шкала severity |
|
|
89
|
-
| Утилита | Преобразование, запуск, миграция | TOOL USAGE: точные команды, флаги |
|
|
90
|
-
|
|
91
|
-
Если тип всё ещё неясен — выбери наиболее вероятный, запиши в brief и отметь как inferred.
|
|
92
|
-
|
|
93
|
-
---
|
|
94
|
-
|
|
95
|
-
## CREATE: новый skill
|
|
96
|
-
|
|
97
|
-
### Step 1. Skill Brief (единственный источник правды)
|
|
98
|
-
|
|
99
|
-
Заполни brief. Поля имеют жёсткий формат, а не произвольный текст.
|
|
100
|
-
|
|
101
|
-
```yaml
|
|
102
|
-
brief:
|
|
103
|
-
purpose: '<глагол + что делает. Одна фраза.>'
|
|
104
|
-
activation: ['<триггер 1>', '<триггер 2>'] # 2-4 элемента
|
|
105
|
-
do_not_use: ['<условие 1>', '<условие 2>'] # 2+ элемента
|
|
106
|
-
required_inputs: ['<поле 1>', '<поле 2>'] # обязательные + опциональные
|
|
107
|
-
tools: ['<инструмент>: <когда>'] # или пустой []
|
|
108
|
-
output_format: '<структура результата. Один абзац.>'
|
|
109
|
-
failure_handling: ['<сценарий 1>: <действие>', '<сценарий 2>: <действие>'] # 2+
|
|
110
|
-
examples: # 1-2 элемента
|
|
111
|
-
- input: '<вход>'
|
|
112
|
-
good: '<правильный ответ>'
|
|
113
|
-
bad: '<неправильный ответ>'
|
|
114
|
-
```
|
|
115
|
-
|
|
116
|
-
Пока brief не заполнен целиком — не переходи к рендерингу.
|
|
117
|
-
|
|
118
|
-
### Step 2. YAML frontmatter
|
|
119
|
-
|
|
120
|
-
```yaml
|
|
121
|
-
---
|
|
122
|
-
name: <kebab-case>
|
|
123
|
-
description: <глагол + объект>. Use when <триггер>.
|
|
124
|
-
---
|
|
125
|
-
```
|
|
126
|
-
|
|
127
|
-
Формула description:
|
|
128
|
-
> **глагол в активном залоге + что делает + «. Use when / Use for» + триггер**
|
|
129
|
-
|
|
130
|
-
Правила:
|
|
131
|
-
- глагол + объект: «Analyze Node.js dependencies», «Review code changes»
|
|
132
|
-
- 1-2 триггера: «Use when reviewing package.json»
|
|
133
|
-
- **запрещены** `help with`, `assist`, `support` без конкретного действия
|
|
134
|
-
- без платформенных деталей (кроме strict single-platform)
|
|
135
|
-
- без логики, примеров, инструкций
|
|
136
|
-
- один абзац, макс 3 предложения
|
|
137
|
-
|
|
138
|
-
Тест на проверяемость: **прочитай только description. Сразу ясно, когда skill нужен, а когда нет?** Если нет — перепиши.
|
|
139
|
-
|
|
140
|
-
Запрещено:
|
|
141
|
-
```yaml
|
|
142
|
-
description: Helps with code stuff. Use when needed.
|
|
143
|
-
```
|
|
144
|
-
Правильно:
|
|
145
|
-
```yaml
|
|
146
|
-
description: Review code changes for bugs, security issues, and convention violations. Use when reviewing a PR or diff before merge.
|
|
147
|
-
```
|
|
148
|
-
|
|
149
|
-
### Step 3. Render SKILL.md
|
|
150
|
-
|
|
151
|
-
Каждое поле brief маппится на секцию. Порядок фиксирован. Это единственный шаблон.
|
|
152
|
-
|
|
153
|
-
| Brief field | → | Section | Формат содержимого |
|
|
154
|
-
|-------------|---|---------|-------------------|
|
|
155
|
-
| `purpose` | → | `## PURPOSE` | Один абзац |
|
|
156
|
-
| `activation` | → | `## ACTIVATION` | Маркированный список триггеров |
|
|
157
|
-
| `do_not_use` | → | `## DO NOT USE WHEN` | Маркированный список условий |
|
|
158
|
-
| `required_inputs` | → | `## INPUTS` | Маркированный список полей |
|
|
159
|
-
| _(выводится)_ | → | `## PROCESS` | Нумерованный список конкретных действий (не «проанализируй», а «собери данные» → «проверь ограничения» → «выбери вариант»), минимум 3 шага |
|
|
160
|
-
| _(выводится)_ | → | `## DECISION RULES` | Маркированный список приоритетов. Минимум одно правило приоритизации (PRIORITY 1 / 2 / 3) |
|
|
161
|
-
| `tools` | → | `## TOOL USAGE` | Описание или «(not applicable)» |
|
|
162
|
-
| `output_format` | → | `## OUTPUT REQUIREMENTS` | Один абзац или список |
|
|
163
|
-
| `failure_handling` | → | `## FAILURE HANDLING` | Маркированный список сценариев |
|
|
164
|
-
| `examples` | → | `## EXAMPLES` | INPUT / GOOD OUTPUT / BAD OUTPUT |
|
|
165
|
-
|
|
166
|
-
Обязательность секций:
|
|
167
|
-
|
|
168
|
-
| Секция | Всегда содержательна | Может быть «(not applicable)» |
|
|
169
|
-
|--------|---------------------|------------------------------|
|
|
170
|
-
| PURPOSE | да | нет |
|
|
171
|
-
| ACTIVATION | да | нет |
|
|
172
|
-
| DO NOT USE WHEN | да | нет |
|
|
173
|
-
| INPUTS | да | нет |
|
|
174
|
-
| PROCESS | да (>=3 шага) | нет |
|
|
175
|
-
| DECISION RULES | да | нет |
|
|
176
|
-
| TOOL USAGE | нет | да |
|
|
177
|
-
| OUTPUT REQUIREMENTS | да | нет |
|
|
178
|
-
| FAILURE HANDLING | да (>=2 сценария) | нет |
|
|
179
|
-
| EXAMPLES | нет (но >=1 если есть) | да |
|
|
180
|
-
|
|
181
|
-
### Step 4. Conflict check
|
|
182
|
-
|
|
183
|
-
1. **Межсекционные** — ACTIVATION не противоречит DO NOT USE; PROCESS не дублирует DECISION RULES.
|
|
184
|
-
2. **С запросом пользователя** — приоритет у запроса, но skill не нарушает принципы качества.
|
|
185
|
-
3. **Рантайм-конфликт** — если две инструкции могут противоречить, расставь PRIORITY явно.
|
|
186
|
-
4. **Двусмысленность** — нет фраз «по возможности», «если уместно», «будь внимателен».
|
|
187
|
-
5. **Длина** — skill должен быть настолько коротким, насколько возможно, но настолько длинным, насколько необходимо. Если документ содержит большие примеры, справочники или команды — рассмотри вынос в reference-файлы.
|
|
188
|
-
|
|
189
|
-
### Step 5. Modularity check
|
|
190
|
-
|
|
191
|
-
- [ ] Паттерн повторяется >2 раз? → вынеси в reference-файл
|
|
192
|
-
- [ ] Пример >30 строк? → сократи или вынеси в appendix
|
|
193
|
-
- [ ] Инструменты с длинными командами? → вынеси в TOOL USAGE reference
|
|
194
|
-
- [ ] Skill ссылается на внешние документы? → сделай автономным или пропиши зависимость явно
|
|
195
|
-
- [ ] Расползается? → сокращай в порядке: examples → process → пояснения
|
|
196
|
-
|
|
197
|
-
### Step 6. Quality check
|
|
198
|
-
|
|
199
|
-
Общие минимумы:
|
|
200
|
-
- PURPOSE — одно полное предложение с глаголом
|
|
201
|
-
- ACTIVATION — минимум 2 триггера
|
|
202
|
-
- DO NOT USE — минимум 2 условия отказа
|
|
203
|
-
- PROCESS — минимум 3 нумерованных шага с конкретными действиями, а не с оценками
|
|
204
|
-
- DECISION RULES — минимум одно правило приоритизации (PRIORITY 1 / 2 / 3)
|
|
205
|
-
- FAILURE HANDLING — минимум 2 сценария с конкретными действиями
|
|
206
|
-
- EXAMPLES — минимум 1 пара GOOD / BAD
|
|
207
|
-
- OUTPUT REQUIREMENTS — формат вывода описан так, что результат проверяем
|
|
208
|
-
|
|
209
|
-
Дополнительно по типу навыка:
|
|
210
|
-
|
|
211
|
-
| Тип | Приоритет | Особое внимание |
|
|
212
|
-
|-----|-----------|-----------------|
|
|
213
|
-
| Аналитический | Conflict detection | PROCESS покрывает крайние случаи (нет данных, битые данные) |
|
|
214
|
-
| Генеративный | Output format | OUTPUT REQUIREMENTS содержит точную структуру результата |
|
|
215
|
-
| Диагностический | Failure handling | FAILURE HANDLING покрывает 3+ сценария |
|
|
216
|
-
| Ревью | Severity classification | DECISION RULES чётко делит findings по severity |
|
|
217
|
-
| Утилита | Tool usage | TOOL USAGE содержит точные команды, флаги, примеры |
|
|
218
|
-
|
|
219
|
-
### Step 7. Three test scenarios
|
|
220
|
-
|
|
221
|
-
Если хоть один не проходит — вернись к Step 3.
|
|
222
|
-
|
|
223
|
-
| Кейс | Проверка |
|
|
224
|
-
|------|----------|
|
|
225
|
-
| Простой | Идеальные данные → корректный результат без лишних действий |
|
|
226
|
-
| Неполные | Данных не хватает → FAILURE HANDLING: запрос конкретных данных, без гадания |
|
|
227
|
-
| Вне зоны | Запрос вне DO NOT USE → отказ или делегирование, без выполнения |
|
|
228
|
-
|
|
229
|
-
### Step 8. Activation Coverage Test
|
|
230
|
-
|
|
231
|
-
Проверь, что skill срабатывает тогда, когда нужно, и молчит тогда, когда не нужно.
|
|
232
|
-
|
|
233
|
-
Сгенерируй:
|
|
234
|
-
|
|
235
|
-
- **3 should-trigger запроса** — пользователь явно находится в зоне skill
|
|
236
|
-
- **3 should-not-trigger запроса** — пользователь вне зоны skill или рядом, но не в ней
|
|
237
|
-
|
|
238
|
-
Проверь:
|
|
239
|
-
|
|
240
|
-
- все should-trigger запросы активируют skill (по ACTIVATION и description)
|
|
241
|
-
- все should-not-trigger запросы **не** активируют skill (попадают в DO NOT USE или не совпадают с триггерами)
|
|
242
|
-
|
|
243
|
-
Если тест не проходит — перепиши description и ACTIVATION триггеры.
|
|
244
|
-
|
|
245
|
-
### Step 9. Meta decision rules
|
|
246
|
-
|
|
247
|
-
- **Brief не закрыт** → не переходи к рендерингу.
|
|
248
|
-
- **Конфликт краткости и полноты** → в core секциях (PROCESS, FAILURE HANDLING) предпочитай полноту; в примерах — краткость.
|
|
249
|
-
- **Шаблон vs запрос** → приоритет у запроса. Если запрос нарушает принципы качества — объясни why и предложи компромисс.
|
|
250
|
-
- **Не знаешь, нужна ли секция** → добавь с пометкой «(not applicable)», а не удаляй.
|
|
251
|
-
|
|
252
|
-
---
|
|
253
|
-
|
|
254
|
-
## IMPROVE: улучшить существующий skill
|
|
255
|
-
|
|
256
|
-
### Step 0. Найди повторы и конфликты ДО переписывания
|
|
257
|
-
|
|
258
|
-
Прежде чем что-то менять, зафиксируй проблемные места. Не начинай править, пока не составлен полный список дефектов.
|
|
259
|
-
|
|
260
|
-
### Step 1. Полный аудит
|
|
261
|
-
|
|
262
|
-
- **Покрытие секций**: какие есть, каких нет.
|
|
263
|
-
- **Содержательность**: секция полезна или заглушка («...», «TBD»).
|
|
264
|
-
- **Конфликты**: инструкции противоречат друг другу.
|
|
265
|
-
- **Неопределённость**: есть ли фразы «по возможности», «если нужно».
|
|
266
|
-
- **Длина**: не превышает разумных пределов. Если есть большие примеры или справочники — их место в reference.
|
|
267
|
-
- **YAML**: name в kebab-case, description по формуле.
|
|
268
|
-
- **Примеры**: отражают реальные use-case или абстрактны.
|
|
269
|
-
- **FAILURE HANDLING**: покрывает типичные отказы или пустой.
|
|
270
|
-
- **Output contract**: описан ли формат результата.
|
|
271
|
-
- **Платформа**: соответствует ли целевой.
|
|
272
|
-
|
|
273
|
-
### Step 2. Классифицируй дефекты
|
|
274
|
-
|
|
275
|
-
| Категория | Дефекты | Действие |
|
|
276
|
-
|-----------|---------|----------|
|
|
277
|
-
| Missing | Нет секции, примеров, YAML | Добавить |
|
|
278
|
-
| Shallow | Секция-заглушка, абстрактные примеры | Заполнить по контексту |
|
|
279
|
-
| Conflict | PROCESS дублирует DECISION RULES | Переписать, расставить PRIORITY |
|
|
280
|
-
| Vague | «по возможности», «будь внимателен» | Заменить на конкретные условия |
|
|
281
|
-
| Bloated | Много повторов, большие примеры, справочники внутри | Сократить: examples → process → пояснения; вынести в reference
|
|
282
|
-
| Wrong platform | YAML/формат не под платформу | Переписать под целевую платформу |
|
|
283
|
-
|
|
284
|
-
### Step 3. Примени исправления
|
|
285
|
-
|
|
286
|
-
По каждому дефекту — одно действие из таблицы. Не меняй то, что работает.
|
|
287
|
-
|
|
288
|
-
### Step 4. Re-validate
|
|
289
|
-
|
|
290
|
-
Прогони через шаги 4-9 режима CREATE.
|
|
291
|
-
|
|
292
|
-
---
|
|
293
|
-
|
|
294
|
-
## Output contract (обязательный)
|
|
295
|
-
|
|
296
|
-
При любом ответе выдавай строго этот набор блоков:
|
|
297
|
-
|
|
298
|
-
```
|
|
299
|
-
## Assumptions
|
|
300
|
-
<допущения, сделанные в процессе>
|
|
301
|
-
|
|
302
|
-
## Brief / Analysis
|
|
303
|
-
<для CREATE: brief из Step 1>
|
|
304
|
-
<для IMPROVE: аудит из Step 1>
|
|
305
|
-
|
|
306
|
-
## Final SKILL.md
|
|
307
|
-
<готовый файл целиком, включая YAML>
|
|
308
|
-
|
|
309
|
-
## Validation
|
|
310
|
-
<результаты проверки: конфликты, модульность, качество (Step 6), 3 теста (Step 7) — пройдены/не пройдены>
|
|
311
|
-
|
|
312
|
-
## Open Questions
|
|
313
|
-
<вопросы, если остались>
|
|
314
|
-
```
|
|
315
|
-
|
|
316
|
-
Если пользователь просит только фрагмент — выдай его с пометкой «это неполный output».
|
|
317
|
-
|
|
318
|
-
---
|
|
319
|
-
|
|
320
|
-
# Platform compatibility
|
|
321
|
-
|
|
322
|
-
Этот мета-скилл проектирует skills. По умолчанию тело skill считается **платформо-независимым**.
|
|
323
|
-
|
|
324
|
-
Универсальные правила (всегда):
|
|
325
|
-
- YAML frontmatter с name + description
|
|
326
|
-
- Все секции PURPOSE–EXAMPLES присутствуют
|
|
327
|
-
- PROCESS нумерованный, FAILURE HANDLING конкретный
|
|
328
|
-
- OUTPUT REQUIREMENTS содержит проверяемый формат
|
|
329
|
-
|
|
330
|
-
Платформа → формат:
|
|
331
|
-
|
|
332
|
-
| Платформа | Формат файла | Особенности |
|
|
333
|
-
|-----------|-------------|-------------|
|
|
334
|
-
| **universal** (default) | `SKILL.md` | name + description, минимум полей |
|
|
335
|
-
| **opencode-only** | `SKILL.md` | description максимально лаконичный |
|
|
336
|
-
| **claude-code-only** | `CLAUDE.md` / `AGENTS.md` | Возможны доп. поля платформы |
|
|
337
|
-
|
|
338
|
-
Правила:
|
|
339
|
-
- Если платформа не указана → universal
|
|
340
|
-
- Если платформа требует специальных секций, ресурсов или структуры — адаптируй skill под неё, но в базовом виде тело считается платформо-независимым
|
|
341
|
-
- Если skill строго single-platform, отметь в description: «OpenCode-only: ...» или «Claude Code: ...»
|
|
342
|
-
|
|
343
|
-
---
|
|
344
|
-
|
|
345
|
-
# Canonical example
|
|
346
|
-
|
|
347
|
-
```markdown
|
|
348
|
-
---
|
|
349
|
-
name: code-reviewer
|
|
350
|
-
description: Review code changes for bugs, security issues, and convention violations. Use when reviewing a PR, diff, or changed files before merge.
|
|
351
|
-
---
|
|
352
|
-
|
|
353
|
-
## PURPOSE
|
|
354
|
-
Catch regressions, security holes, and style violations before code reaches production.
|
|
355
|
-
|
|
356
|
-
## ACTIVATION
|
|
357
|
-
- User asks to review a PR, diff, or changed files
|
|
358
|
-
- User says «review this code» / «check my changes»
|
|
359
|
-
|
|
360
|
-
## DO NOT USE WHEN
|
|
361
|
-
- Code is a generated artifact (protobuf, GraphQL schema)
|
|
362
|
-
- User explicitly asks for formatting only (use linter)
|
|
363
|
-
- File is lockfile, binary, or vendored dependency
|
|
364
|
-
|
|
365
|
-
## INPUTS
|
|
366
|
-
- git diff or list of changed files (or inline code snippet)
|
|
367
|
-
- (optional) severity threshold — skip INFO if asked
|
|
368
|
-
|
|
369
|
-
## PROCESS
|
|
370
|
-
1. Scan diff for security red flags: eval, exec, SQL injection, hardcoded secrets.
|
|
371
|
-
2. Check for logic bugs: off-by-one, null dereference, missing await.
|
|
372
|
-
3. Check code quality: dead code, excessive complexity, copy-paste.
|
|
373
|
-
4. Verify consistency with surrounding code (naming, patterns, imports).
|
|
374
|
-
5. Report findings grouped by severity.
|
|
375
|
-
6. For each finding: file:line, problem, suggested fix.
|
|
376
|
-
|
|
377
|
-
## DECISION RULES
|
|
378
|
-
- BLOCKER = security or data loss → always report
|
|
379
|
-
- CRITICAL = logic bug → breaks in production
|
|
380
|
-
- WARNING = maintainability concern
|
|
381
|
-
- INFO = style nit — skip if user said «quick review»
|
|
382
|
-
|
|
383
|
-
## TOOL USAGE
|
|
384
|
-
(not applicable — pure analysis)
|
|
385
|
-
|
|
386
|
-
## OUTPUT REQUIREMENTS
|
|
387
|
-
- Grouped: BLOCKER > CRITICAL > WARNING > INFO
|
|
388
|
-
- Each finding: location, problem, fix
|
|
389
|
-
- Summary line: X BLOCKER + Y CRITICAL + Z WARNING
|
|
390
|
-
- If zero findings: «No issues found — lgtm»
|
|
391
|
-
|
|
392
|
-
## FAILURE HANDLING
|
|
393
|
-
- No diff provided → ask for it, don't proceed
|
|
394
|
-
- File binary or >500 lines → warn, ask to narrow scope
|
|
395
|
-
- Language not recognised → generic review (logic + security only)
|
|
396
|
-
|
|
397
|
-
## EXAMPLES
|
|
398
|
-
INPUT: diff with `eval(userInput)` in express handler
|
|
399
|
-
GOOD OUTPUT: [BLOCKER] src/handler.ts:42 — eval() on user input allows arbitrary code execution. Fix: use safe JSON.parse or whitelist-based approach.
|
|
400
|
-
BAD OUTPUT: «This is potentially unsafe» — no explanation, no fix.
|
|
401
|
-
```
|
|
402
|
-
|
|
403
|
-
---
|
|
404
|
-
|
|
405
|
-
## Pareto Optimization (финальный шаг)
|
|
406
|
-
|
|
407
|
-
Перед выдачей результата:
|
|
408
|
-
|
|
409
|
-
1. Найди 20% инструкций, которые дают 80% качества (обычно это PROCESS, FAILURE HANDLING, DECISION RULES).
|
|
410
|
-
2. Проверь: можно ли удалить остальные 80% инструкций без существенной потери качества?
|
|
411
|
-
3. Если можно — сократи skill.
|
|
412
|
-
|
|
413
|
-
Большинство плохих skills становятся лучше после удаления 20-40% текста.
|
|
414
|
-
Не добавляй то, без чего skill будет работать так же хорошо.
|
|
415
|
-
```
|