Agent Skill
Готовый Agent Skill, который учит кодового ассистента правильно писать на svir: тот же материал, что и на этом сайте, но переупакованный под модель, а не под читателя.
Скачать svir-skill.zipИсходники: skill/svir.
Сам скилл написан по-английски: его читает модель, а не человек.
Зачем это нужно
svir устроен не так, как LLM SDK, под которые написана большая часть кода.
Диалог — это запрос, системный промпт — поле, ответ — один поток, последний
элемент которого — весь ответ целиком, а ошибка — вид, по которому делают
match. Ассистент, пишущий по привычке, тянется к сообщению с ролью
system, к choices[0].delta.content или к клиенту, который помнит чат.
Такой код здесь не компилируется — или, что хуже, компилируется и теряет
вызовы инструментов.
Скилл выносит ровно эти ловушки вперёд — четырнадцать обязательных правил, — а за подробностями отправляет в нужный файл.
Что внутри
| Файл | О чём |
|---|---|
SKILL.md | Определение версии и фич, работающие вызов и цикл инструментов, обязательные правила, маршрутизация |
references/requests.md | Системный промпт, сообщения и части, вложения, глубина рассуждений, структурированный вывод, диалоги, сохранение и восстановление |
references/streaming.md | События, итоговый ответ и причины завершения, рассуждения, расход токенов и скорость, отмена, строгий и мягкий режимы, лимиты, сбои |
references/tools.md | Tool, реестр Tools, схемы из типов, цикл, цикл с потоком, обязательный или запрещённый вызов, свой Toolbox |
references/client.md | Базовый URL, API-ключи, дополнительные заголовки, таймауты, список моделей, слои, провайдеры TLS, собственный HTTP-бэкенд, тесты без сервера |
references/codec.md | Прокси, ретранслирующий поток, Encoder и Decoder сами по себе, собственный транспорт |
references/errors.md | Виды ошибок и «симптом → причина» во время выполнения и при компиляции |
SKILL.md намеренно короткий: это точка входа, которую агент читает всегда,
и шесть справочников, которые он подгружает только под задачу.
Установка
Формат SKILL.md — общий стандарт, поэтому установка везде одинаковая:
распаковать и скопировать каталог svir/ в папку скиллов инструмента,
сохранив имя каталога — оно обязано совпадать с полем name во frontmatter.
| Инструмент | Персонально | В проекте |
|---|---|---|
| Claude Code | ~/.claude/skills/svir/ | .claude/skills/svir/ |
| opencode | ~/.config/opencode/skills/svir/ | .opencode/skills/svir/ |
| Codex CLI | ~/.codex/skills/svir/ | .codex/skills/svir/ |
unzip svir-skill.zip
mkdir -p ~/.claude/skills && cp -r svir ~/.claude/skills/
После этого перезапустите ассистента: скиллы обнаруживаются при старте.
opencode также читает .claude/skills/ и .agents/skills/, поэтому одна
копия внутри проекта может обслуживать несколько инструментов.
Всё остальное
Подойдёт любой ассистент, который умеет читать файлы. Укажите ему на
SKILL.md и дайте пройти по ссылкам или добавьте строку в AGENTS.md
проекта:
For Rust code that talks to LLMs with the `svir` crate, read
`.agents/skills/svir/SKILL.md` and the reference file it routes you to.
Код в нём компилируется
Каждый Rust-сниппет в скилле — законченный набор элементов, и каждый
компилируется против опубликованного крейта svir в CI этого репозитория, с
включёнными фичами schemars и tracing. То, что ассистент из него скопирует,
соберётся. В этом и смысл поставлять скилл, а не пересказ: ассистент, который
вставляет правдоподобно выглядящий API, хуже того, который вставляет
проверенный.
Код на этом сайте проходит ту же проверку. Запустить её самостоятельно после правок:
python3 ci/check-snippets.py --docs-dir skill
Версия
Скилл соответствует svir 0.1.5: OpenAI-совместимый Chat Completions, потоком. Это записано во frontmatter, чтобы ассистент мог понять, подходит ли скилл к крейту перед ним:
metadata:
svir-version: "0.1.5"
msrv: "1.85"
wire-api: "OpenAI-compatible Chat Completions, streaming"
Ещё он рассказывает ассистенту, что менялось между релизами 0.1, — для проекта, зафиксированного на более старом.