К основному содержанию
скилл CX Codex

harness:health — скилл для Claude Code: проверка датасета и автоисправление

Проверяет качество eval-датасета: размер, распределение по сложности, мёртвые примеры, покрытие категорий и сплиты. Найденные проблемы исправляет сам.

Установить в Claude Code · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add raphaelchristi/harness-evolver --skill health -a claude-code
Открыть на GitHub

Что делает harness:health

Скилл запускает диагностику через dataset_health.py и складывает результат в health_report.json. В отчёте — оценка здоровья датасета по десятибалльной шкале, число примеров и список замечаний с уровнем важности. Дальше скрипт сам применяет правки, если они там перечислены.

Что именно он умеет поправлять: разбить примеры на train и held_out в пропорции 70/30, догенерировать сложные примеры через субагента harness-testgen, закрыть пробелы по категориям продакшена и увести мёртвые примеры в сплит retired. Работает с LangSmith, поэтому нужен установленный пакет langsmith и доступ к датасету.

Перед запуском в проекте должен лежать .evolver.json — без него скилл просто отправит вас выполнять /harness:setup. Путь к инструментам берётся из EVOLVER_TOOLS или .evolver/tools, интерпретатор Python — из EVOLVER_PY или $HOME/.evolver/venv/bin/python. Если виртуального окружения нет, используется python3 из системы.

Какие задачи решает

  • проверить датасет перед запуском эволюции
  • найти мёртвые примеры, на которых агент стабильно спотыкается
  • увидеть перекос датасета в сторону лёгких задач
  • разбить примеры на train и held_out
  • закрыть категории продакшена, которых нет в датасете

Примеры запросов агенту

  • Проверь качество датасета через /harness:health
  • Прогони диагностику и покажи отчёт health_report.json
  • Датасет перекошен в лёгкую сторону — исправь это

Как установить harness:health

1Через Skills CLI (Vercel)

npx skills add raphaelchristi/harness-evolver --skill health -a claude-code

2Вручную: положить файлы

~/.claude/skills/health/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/health/

По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов

Вопросы о harness:health

Как установить harness:health в Claude Code?

Выполните npx skills add raphaelchristi/harness-evolver --skill health -a claude-code. Скилл встанет в ~/.claude/skills/health/SKILL.md.

Что делает harness:health?

Считает метрики датасета, ищет проблемы и применяет исправления: сплиты, генерацию сложных примеров, покрытие категорий, вывод мёртвых примеров из работы.

Что нужно, чтобы скилл заработал?

Файл .evolver.json в проекте. Если его нет, скилл попросит сначала выполнить /harness:setup. Для правок сплитов нужен доступ к датасету в LangSmith.

Исходный текст

SKILL.md · MIT
---
name: harness:health
description: "Use when the user wants to check dataset quality, diagnose eval issues, or before running evolve. Checks size, difficulty distribution, dead examples, coverage, and splits. Auto-corrects issues found."
allowed-tools: [Read, Write, Edit, Bash, Glob, Grep, Agent, AskUserQuestion]
---

# /harness:health

Check eval dataset quality and auto-correct issues. Can be run independently or is invoked by `/harness:evolve` before the iteration loop.

## Prerequisites

`.evolver.json` must exist. If not, tell user to run `/harness:setup`.

## Resolve Tool Path and Python

```bash
TOOLS="${EVOLVER_TOOLS:-$([ -d ".evolver/tools" ] && echo ".evolver/tools" || echo "$HOME/.evolver/tools")}"
EVOLVER_PY="${EVOLVER_PY:-$([ -f "$HOME/.evolver/venv/bin/python" ] && echo "$HOME/.evolver/venv/bin/python" || echo "python3")}"
```

## 1. Run Health Diagnostic

```bash
$EVOLVER_PY $TOOLS/dataset_health.py \
    --config .evolver.json \
    --production-seed production_seed.json \
    --output health_report.json 2>/dev/null
```

Print summary:
```bash
python3 -c "
import json, os
if os.path.exists('health_report.json'):
    r = json.load(open('health_report.json'))
    print(f'Dataset Health: {r[\"health_score\"]}/10 ({r[\"example_count\"]} examples)')
    for issue in r.get('issues', []):
        print(f'  [{issue[\"severity\"]}] {issue[\"message\"]}')
    if not r.get('issues'):
        print('  No issues found.')
"
```

## 2. Auto-Correct Issues

If `health_report.json` has corrections, apply them automatically:

```bash
CORRECTIONS=$(python3 -c "
import json, os
if os.path.exists('health_report.json'):
    r = json.load(open('health_report.json'))
    for c in r.get('corrections', []):
        print(c['action'])
" 2>/dev/null)
```

For each correction:

**If `create_splits`**: Assign 70/30 train/held_out splits:
```bash
$EVOLVER_PY -c "
from langsmith import Client
import json, random
client = Client()
config = json.load(open('.evolver.json'))
examples = list(client.list_examples(dataset_name=config['dataset']))
random.shuffle(examples)
sp = int(len(examples) * 0.7)
for ex in examples[:sp]:
    client.update_example(ex.id, split='train')
for ex in examples[sp:]:
    client.update_example(ex.id, split='held_out')
print(f'Assigned splits: {sp} train, {len(examples)-sp} held_out')
"
```

**If `generate_hard`**: Spawn testgen agent to generate hard examples:
```
Agent(
  subagent_type: "harness-testgen",
  description: "Generate hard examples to rebalance dataset",
  prompt: "The dataset is skewed toward easy examples. Generate {count} HARD examples that the current agent is likely to fail on. Focus on edge cases, adversarial inputs, and complex multi-step queries. Read .evolver.json and production_seed.json for context."
)
```

**If `fill_coverage`**: Spawn testgen agent for missing categories:
```
Agent(
  subagent_type: "harness-testgen",
  description: "Generate examples for missing categories",
  prompt: "The dataset is missing these production categories: {categories}. Generate 5 examples per missing category. Read .evolver.json and production_seed.json for context."
)
```

**If `retire_dead`**: Move dead examples to retired split:
```bash
$EVOLVER_PY -c "
from langsmith import Client
import json
client = Client()
report = json.load(open('health_report.json'))
dead_ids = report.get('dead_examples', {}).get('ids', [])
config = json.load(open('.evolver.json'))
examples = {str(e.id): e for e in client.list_examples(dataset_name=config['dataset'])}
retired = 0
for eid in dead_ids:
    if eid in examples:
        client.update_example(examples[eid].id, split='retired')
        retired += 1
print(f'Retired {retired} dead examples')
"
```

After corrections, log what was done.

## 3. Report

Print final health status. If critical issues remain that couldn't be auto-corrected, warn the user.

© raphaelchristi · MIT · raphaelchristi/harness-evolver

Похожие скиллы

Все скиллы по теме «Настройка агента: память, контекст, субагенты» →
eval-harness-first Seth Hobson Собирает оценочный контур до начала fine-tuning: goldens, graders, калибровку judge и baseline базовой модели. Нужен для контроля регрессий. CX Codex 2 600установок llm-eval-harness daymade Скилл гоняет чужой LLM-эндпоинт по шести измерениям: доступность, доходимость запроса, скорость, конкурентность, протокол и регрессия качества. CX Codex +1 372установок digital-health-clinical-asr-eval Ben Randoing Скилл оценивает NeMo-манифест клинической ASR-модели, считает WER, CER, KER и SER и строит лидерборд из пяти секций. Нужен, когда пора решать: дообучать модель или чинить произношение. CX Codex +1 1 900установок digital-health-clinical-asr-build Ben Randoing Собирает список клинических терминов, озвучивает их через Magpie TTS и пишет манифест NeMo для оценки ASR. Второй этап Clinical ASR Flywheel. CX Codex +1 1 900установок langsmith akillness Разбирает задачу по LangSmith на один рабочий пакет: отладка трейсов, офлайн-оценка, ревью, реестр промптов, сквозная трассировка или аудит. CX Codex +1 327установок agent-observability-session-classify datadog-labs Оценивает удовлетворённость пользователя в трейсах и сессиях Datadog Agent Observability. Возвращает вердикт yes, partial или no с коротким пояснением. CX Codex +1 529установок

Из того же набора3

Спонсоры проекта

Компании, которые помогают держать аналитику открытой