Skillpulse: ваши AI-скиллы летят вслепую без телеметрии
PostToolUse хук, который логирует каждую активацию скилла в локальный JSONL. Ни один существующий инструмент не отслеживает, выполнила ли модель инструкции скилла.
Вы устанавливаете 16 скиллов. Видите, как они срабатывают. Но вот вопрос, который никто не задает: модель действительно им следует?
Я проверил каждый инструмент телеметрии в экосистеме Claude Code — встроенный OTel, claude_telemetry, claude-code-otel, даже метрики платформы skills.sh. Ни один из них не отслеживает adherence. Они говорят, что скилл загрузился, но не то, выполнила ли модель его инструкции.
Поэтому я сделал skillpulse.
Разрыв
Встроенный OpenTelemetry Claude Code (через CLAUDE_CODE_ENABLE_TELEMETRY=1) захватывает общие метрики: длительность сессии, токены, стоимость, вызовы инструментов. С OTEL_LOG_TOOL_DETAILS=1 он даже записывает skill_name в события tool result. Но это сигнал загрузки, а не следования.
Разница принципиальна. Скилл может успешно загрузиться и быть полностью проигнорирован моделью. Без отслеживания adherence вы оптимизируете вслепую.
| Инструмент | Отслеживает загрузку | Отслеживает следование |
|---|---|---|
| Встроенный OTel | Да | Нет |
| claude_telemetry | Нет | Нет |
| claude-code-otel | Нет | Нет |
| skills.sh | Только установки | Нет |
| skillpulse | Да | Да (planned) |
Как это работает
Skillpulse — это PostToolUse хук, который срабатывает на каждый вызов Skill tool. Он пишет одну строку JSONL на активацию:
{
"skill_id": "signum:signum",
"timestamp": "2026-03-11T08:48:18Z",
"session_id": "20260311_114818_93074",
"loaded": true,
"followed": null,
"plugin_name": "skillpulse"
}
Реализация — 60 строк bash. Несколько проектных решений:
2-секундный watchdog. PostToolUse хуки выполняются синхронно — зависший хук блокирует всю сессию. Skillpulse запускает self-kill watchdog, который отправляет SIGKILL через 2 секунды. На практике хук завершается за <50ms.
Фильтр только Skill. PostToolUse срабатывает на каждый вызов инструмента — Read, Write, Bash, все подряд. Skillpulse проверяет tool_name == "Skill" и немедленно выходит для всего остального. Нулевой overhead на не-скилловых вызовах.
Append-only JSONL. Никакой базы данных, ротации, конфигурации. Один файл в ~/.local/share/emporium/activation.jsonl. Переживает крэши, легко инспектировать, тривиально бэкапить.
Что я узнал из 4 записей
Да, четырех. Skillpulse был создан 4 марта и потом… не установлен. Классика. Я исправил это сегодня.
Но даже 4 записи рассказали кое-что полезное:
Skill Acts Sess Load% Age
-----------------------------------------------------
herald:news-digest 2 2 100% 7d
arbiter 1 1 100% 7d
signum:signum 1 1 100% 7d
Три скилла покрывают все активации. У меня установлено 16. Это 81% dormancy rate. Большинство моих скиллов — мертвый груз, потребляющий контекстные токены.
Агрегатор
90-строчный Python скрипт читает JSONL и выдает per-skill статистику:
python3 scripts/aggregate.py # таблица
python3 scripts/aggregate.py --json # для пайплайнов
Никаких зависимостей. Читает timestamps, группирует по skill_id, вычисляет частоту, уникальные сессии, loaded rate и дней с последней активации.
Куда это ведет
Skillpulse — это Phase 1 более крупного пайплайна, который я называю EvoSkill — скиллы, которые улучшают себя на основе данных использования.
Пайплайн:
skillpulse (лог)
|
aggregator (статистика)
|
bench (тест на задачах)
|
evolver (предлагает улучшения)
Поле followed сейчас null — для его заполнения нужен tool-pattern fingerprinting, определяющий, выполнила ли модель ожидаемое поведение скилла. Это сложная часть, и я намеренно откладываю ее, пока не наберется достаточно данных активации для валидации подхода.
Вещи, которые я осознанно пропускаю на текущем масштабе (<20 сессий/неделю, 16 скиллов):
- Hotelling T-squared drift detection — нужно 50+ траекторий на скилл
- Bayesian calibration — нужны размеченные outcome-данные
- Hierarchical routing — актуально при 50+ скиллах
- Automated gates — human review пока мой gate
Исследования, на которых это основано: EvoSkill, AutoSkill и ASI drift framework.
Попробуйте
claude mcp add-json skillpulse '{"source": {"source": "url", "url": "https://github.com/heurema/skillpulse.git"}}'
Код: github.com/heurema/skillpulse
Все данные остаются локально. MIT лицензия. Нулевые зависимости — только bash и jq.