agent-skills-eval
- title
- agent-skills-eval
- type
- toolbox
- summary
- Исполнитель тестов, измеряющий прирост от skill'а сопоставлением прогонов с ним и без него
- tags
- typescript, ai, testing, skill-bundle, watchlist
- language
- TypeScript
- license
- MIT
- created
- 2026-05-10
- updated
- 2026-05-10
- lang
- ru
- translation_of
- agent-skills-eval
- source_updated
- 2026-05-10
- translated
- 2026-09-01
- translator
- lllm/antigravity/gemini-3.7-flash-medium
Исполнитель тестов для Agent Skills - открытого стандарта от Anthropic для передачи агентам предметных знаний. Исходная предпосылка: написать SKILL.md просто; доказать, что он действительно помогает модели лучше справляться с задачей, куда сложнее. agent-skills-eval запускает каждый eval дважды: один раз with_skill с загрузкой в контекст, второй - without_skill (базовый уровень). Затем модель-судья оценивает оба результата по одним и тем же утверждениям (assertions) и формирует сравнительный отчёт.
Это недостающий инструмент измерений для экосистемы skill'ов, рассмотренной в mcp-vs-skills, library-skills, cli-anything, impeccable, agent-skill-linter. Другие инструменты этого кластера закрывают задачи создания, распространения, валидации и бандлинга. agent-skills-eval отвечает на эмпирический вопрос: изменил ли этот skill поведение модели измеримым образом?
Внесён в список наблюдения - один автор, четыре дня проекту на момент ingest'а, 257 звёзд. Строгое соответствие спецификации и чёткая изоляция от конкретного runtime'а говорят в пользу жизнеспособности, но сама экосистема agentskills.io пока молода, и подходящий паттерн оценки skill'ов ещё не проверен достаточной практикой.
Как устроен
┌─────────────────────────────┐
│ same prompt │
└───────────────┬─────────────┘
│
┌───────────────┴─────────────┐
▼ ▼
┌──────────────┐ ┌──────────────┐
│ with_skill │ │without_skill │
│ SKILL.md in │ │ baseline, │
│ context │ │ no skill │
└──────┬───────┘ └──────┬───────┘
│ │
▼ ▼
target model target model
│ │
▼ ▼
output output
│ │
└──────────┬──────────────────┘
▼
┌─────────────┐
│ judge │ scores both against
│ model │ the same assertions
└──────┬──────┘
▼
pass / fail per side
Флаг --baseline как раз и включает сравнение. Без него выполняется только прогон with_skill.
Быстрый старт
npx agent-skills-eval ./skills \
--target gpt-4o-mini \
--judge gpt-4o-mini \
--baseline \
--strict
Структура каталога результатов:
agent-skills-workspace/
└── iteration-1/
├── meta.json # run metadata
├── benchmark.json # rolled-up pass/fail per skill
├── eval-basic/
│ ├── with_skill/ # output, timing, judge grading
│ └── without_skill/ # ↑ same, with the skill stripped
└── report/
└── index.html # the visual report
Структура skill'а
Стандартный формат agentskills.io. Минимальный набор - SKILL.md плюс evals/evals.json:
{
"skill_name": "my-skill",
"evals": [
{
"id": "basic",
"prompt": "Use the attached data to summarize revenue.",
"files": ["evals/files/input.csv"],
"expected_output": "The response identifies the highest revenue month.",
"assertions": ["The output identifies the highest revenue month."]
}
]
}
Если пропустить assertions, но указать expected_output, SDK автоматически преобразует ожидаемый результат в утверждение для судьи: минимальный eval всё равно выдаст осмысленную оценку pass / fail.
Модель провайдеров
По умолчанию совместим с OpenAI - работает с OpenAI, Together, Groq, Anthropic через слои совместимости с OpenAI, а также локальными серверами Llama. Подключить любой backend можно реализацией интерфейса Provider (пять полей, один метод): это пригодится для Ollama / vLLM / llama.cpp, внутренних API, mock-провайдеров в unit-тестах и слоёв маршрутизации.
SDK
Для CI-пайплайнов и собственных дашбордов:
import { OpenAICompatibleProvider, evaluateSkills } from "agent-skills-eval";
const provider = new OpenAICompatibleProvider({
baseUrl: "https://api.openai.com/v1",
apiKey: process.env.OPENAI_API_KEY!,
model: "gpt-4o-mini",
providerName: "openai",
});
await evaluateSkills({
root: "./skills",
workspace: "./agent-skills-workspace",
baseline: true,
concurrency: 4,
workspaceLayout: "iteration",
strict: true,
target: { model: provider.model, provider },
judge: { model: provider.model, provider },
onEvent: consoleReporter(),
});
Потоковая передача в формате JSONL поддерживается через jsonlReporter({ file: "./events.jsonl" }).
Соответствие спецификации
Реализует спецификацию agentskills.io полностью:
- YAML frontmatter в
SKILL.md: обязательныеnameиdescription, опциональныеlicense,compatibility,metadata,allowed-tools - Строгая валидация: длина имени, формат в нижнем регистре через дефис, совпадение с именем родительского каталога, длина описания
- Опциональные каталоги
scripts/,references/,assets/ - Схема
evals/evals.json:skill_name,evals[].id,prompt,expected_output,files,assertions - Официальная структура артефактов:
iteration-N/<eval>/<mode>/outputs,timing.json,grading.json,benchmark.json - Сравнение с базовым уровнем:
with_skillпротивwithout_skill
Сверх спецификации инструмент добавляет defaults для отдельных eval'ов, params модели, определения инструментов (tools), детерминированные tool_assertions и плоский workspaceLayout для дашбордов по нескольким skill'ам.
В чём отличия
Разделение на with_skill / without_skill - главное методологическое решение. Большинство фреймворков для оценки skill'ов или промптов измеряют абсолютную долю успешных прогонов (pass rate); здесь же измеряется прирост, полученный именно за счёт skill'а. Благодаря этому фреймворк подходит для регрессионного контроля при доработке skill'а: изменила ли новая редакция SKILL.md хоть что-то, или улучшение лишь кажется?
Подход с моделью-судьёй вполне традиционен, но фреймворк честен в деталях: статический HTML-отчёт показывает рассуждения судьи по каждому утверждению, а не только итоговый балл, поэтому отладка нестабильного судьи остаётся вполне разрешимой задачей.
Ограничения
- Подход с моделью-судьёй наследует обычную для таких решений нестабильность; детерминированные
tool_assertionsслужат страховкой там, где поведение поддаётся прямой проверке. - Только TypeScript / Node; проектам со skill'ами на Python потребуется Node-окружение (sidecar) для запуска eval'ов.
- Расходы удваиваются (2×: с skill'ом и без на каждой итерации); для набора из 50 eval'ов каждый прогон требует 100 вызовов целевой модели и 100 вызовов судьи.
- Выбор модели-судьи ощутимо влияет на результат; фреймворк не даёт рекомендаций по выбору, оставляя это на усмотрение пользователя.
Критерии списка наблюдения
Внесён в watchlist - один автор, 4 дня проекту на момент ingest'а. Повторная проверка 2026-08-10 по критериям: число контрибьюторов, паттерны снижения нестабильности судьи, интеграция с остальной экосистемой agentskills.io, а также сохранение достаточной стабильности спецификации agentskills.io для инструментов этого уровня.
Связанные страницы
- mcp-vs-skills (skill'ы как знания, MCP как возможности)
- library-skills (модель распространения через распределённый реестр)
- cli-anything (генерация skill'ов вместе с CLI)
- impeccable, agent-skill-linter (валидация skill'ов, соседний уровень)
- flue (каркас агентных сред, использующий skill'ы)
- features-to-steal-from-npmx (контекст проектирования реестра)