* feat(spec): add project-template skill init and check flow * refactor(spec): remove repo-init migrate references to project-template * test(spec): structural tests for project-template skill and command * fix(test): wrap long lines and use non_templated var in project template tests * fix(ci): reformat test_project_template_skill.py for ruff format --------- Co-authored-by: opencode-agent <agent@opencode.local>
96 lines
4 KiB
Markdown
96 lines
4 KiB
Markdown
---
|
||
name: add-skill
|
||
description: Use when creating a new opencode skill. Covers file location, frontmatter format, commit, push, and post-instructions for restart. Also when user says "добавь скилл", "создай скилл", "новый навык".
|
||
---
|
||
|
||
# Add Skill
|
||
|
||
Процесс создания нового скилла в opencode.
|
||
|
||
## 1. Куда создавать
|
||
|
||
```
|
||
.opencode/skills/<skill-name>/SKILL.md
|
||
```
|
||
|
||
В корне текущего репо (`<repo-root>` = `git rev-parse --show-toplevel`),
|
||
в `.opencode/skills/`. НЕ в `~/.config/opencode/` — эта папка синхронизируется из репо.
|
||
|
||
## 2. Формат SKILL.md
|
||
|
||
```markdown
|
||
---
|
||
name: <skill-name>
|
||
description: <when to load this skill, in English. Example: Use when ... Also when user says "русские фразы-триггеры">
|
||
---
|
||
|
||
# Skill Title
|
||
|
||
Содержание скилла.
|
||
```
|
||
|
||
### Правила
|
||
|
||
- `name` — kebab-case, совпадает с именем директории
|
||
- `description` — must be in English. Contains specific triggers (when the agent should load this skill). Format: `Use when ... Also when user says "..."`. The `Also when user says "..."` part may contain Russian trigger phrases since the user speaks Russian.
|
||
- Язык тела — русский с английскими техническими терминами (как в существующих скиллах)
|
||
- Один скилл — одна директория с одним `SKILL.md`
|
||
|
||
### Примеры существующих скиллов
|
||
|
||
```
|
||
.opencode/skills/
|
||
├── add-skill/SKILL.md ← этот скилл
|
||
├── branch/SKILL.md
|
||
├── code-standards/SKILL.md
|
||
├── configure-opencode/SKILL.md
|
||
├── get-project-map/SKILL.md
|
||
├── issue/SKILL.md
|
||
├── memory/SKILL.md
|
||
├── python-development/SKILL.md
|
||
├── release/SKILL.md
|
||
├── project-template/SKILL.md
|
||
├── run-pipeline/SKILL.md
|
||
├── run-tests/SKILL.md
|
||
├── spec/SKILL.md
|
||
└── tunnel/SKILL.md
|
||
```
|
||
|
||
## 3. Скиллы авто-дискаверятся
|
||
|
||
Opencode сканирует все под-директории `.opencode/skills/` и подхватывает любой `SKILL.md`. Регистрировать ничего не нужно.
|
||
|
||
Список скиллов загружается **при старте opencode**. Новый скилл станет доступен только после рестарта.
|
||
|
||
## 4. Commit и Push (для implementing agent)
|
||
|
||
Implementing agent (subagent, которому делегировано создание) после создания файла — сразу коммит и пуш по правилам `commit` tool (формат валидируется tool'ом):
|
||
|
||
```bash
|
||
cd "$(git rev-parse --show-toplevel)"
|
||
git add .opencode/skills/<skill-name>/SKILL.md
|
||
git status # проверь staged set — только SKILL.md, без лишнего
|
||
```
|
||
|
||
> `commit` tool НЕ делает `git add` — коммитит только уже staged файлы. Если
|
||
> в индексе лишнее (например `memory-save` stage'нул всё через `git add -A`)
|
||
> — не коммить: сначала `git restore --staged <file>` или не stage'и его
|
||
> изначально. Используй `git add <конкретные-пути>`, НЕ `git add -A`.
|
||
|
||
Затем через `commit` tool (НЕ raw `git commit` — заблокирован deny):
|
||
|
||
```
|
||
commit({ message: "feat(skills): add <skill-name> skill for <purpose>" })
|
||
```
|
||
|
||
Затем `git push`.
|
||
|
||
## 5. Инструкция пользователю
|
||
|
||
После push сообщить пользователю:
|
||
|
||
> Скилл создан и запушен. Чтобы он заработал:
|
||
> 1. На хосте: `git pull` в репозитории opencode
|
||
> 2. Рестарт opencode
|
||
>
|
||
> После рестарта скилл появится в `available_skills` и будет загружаться по триггерам из `description`.
|