TIP
mattpocock/skills — это набор AI-навыков для кодинга, построенный экспертом по TypeScript Мэттом Пококом; GitHub-репозиторий: github.com/mattpocock/skills. Если вы использовали такие инструменты, как Claude Code или Codex, но чувствуете, что качество выдачи то высокое, то нестабильное — эти Skills подготовлены именно для вас.
Обзор проекта
mattpocock/skills — это набор «инженерных методологий» для инструментов AI-программирования. Его главный посыл очень прост: инструменты для AI-кодинга быстры, но это не значит, что они надежны.
В ходе множества практических сессий Мэтт По коком обнаружил четыре наиболее частых сценария провалов в AI-кодинге:
- Несовпадение с требованиями: вам кажется, что ИИ всё понял, но он уходит в сторону
- Слишком многословный вывод: ИИ тратит 20 слов, чтобы сказать то, что можно выразить 1 словом
- Код не работает: нет петли обратной связи — ИИ пишет «в темноте» как в черном ящике
- Архитектура быстро превращается в мусор: AI ускоряет разработку, но так же ускоряет рост программного «энтропийного распада»
Эти проблемы — не баги инструментов, а провал методологии. mattpocock/skills «бьет в цель»: уплотняет decades инженерного опыта в набор компонуемых Skills, чтобы ИИ на любой модели соблюдал одну и ту же инженерную дисциплину.
Сложность / Длительность / Что вы получите
Сложность: начальный уровень — не нужен опыт TDD, достаточно уметь пользоваться командной строкой и инструментами AI-кодинга
Длительность: около 30 минут на полный проход процесса
Результат: выстроите полноценный рабочий процесс от выравнивания требований → TDD → структурированной отладки → архитектурного переосмысления
Портрет целевой аудитории
- Backend / full-stack разработчики с опытом 1–5 лет
- Те, кто уже пользовался Claude Code, Codex или подобными AI-инструментами для программирования
- Чувствуют, что код, сгенерированный ИИ, «вроде работает, но нестабилен», и хотят установить управляемый ритм разработки
- Интересуются TDD, но никак не находят подходящую точку входа
Ключевые зависимости и окружение
| Зависимость | Минимальная версия | Описание |
|---|---|---|
| Node.js | 18+ | Skills распространяются через npx |
| pnpm / npm | любая стабильная версия | менеджер пакетов, можно выбрать один из двух |
| AI-инструмент для кодинга | любая версия, поддерживающая Skills | Claude Code, Codex и т. п. |
WARNING
mattpocock/skills вызывается через команду /slash, поэтому AI-инструмент должен поддерживать механику Skills. Прежде чем продолжить, убедитесь, что в вашем инструменте включена функция Skills.
Полное дерево структуры проекта
skills/
├── CLAUDE.md # Спецификация правил для каталога Skills
├── README.md # Обзор и документация по использованию
├── skills/
│ ├── engineering/
│ │ ├── diagnose/
│ │ │ └── SKILL.md # Процесс структурированной отладки
│ │ ├── grill-with-docs/
│ │ │ └── SKILL.md # Глубинное интервью с опорой на документацию
│ │ ├── improve-codebase-architecture/
│ │ │ └── SKILL.md # Диагностика для улучшения архитектуры
│ │ ├── setup-matt-pocock-skills/
│ │ │ └── SKILL.md # Точка входа для инициализации
│ │ ├── tdd/
│ │ │ ├── SKILL.md # Вертикальный срез: workflow под TDD
│ │ │ ├── tests.md # Примеры хороших / плохих тестов
│ │ │ ├── mocking.md # Лучшие практики для Mock
│ │ │ ├── refactoring.md # Когда пора рефакторить
│ │ │ ├── deep-modules.md # Принципы проектирования «глубоких модулей»
│ │ │ └── interface-design.md # Проектирование интерфейсов под тестирование
│ │ ├── to-issues/
│ │ │ └── SKILL.md # Разбиение требований на GitHub Issues
│ │ ├── to-prd/
│ │ │ └── SKILL.md # Генерация PRD
│ │ ├── triage/
│ │ │ └── SKILL.md # Состояния/машина для разборки Issue
│ │ └── zoom-out/
│ │ └── SKILL.md # Интерпретация кода с глобальной перспективы
│ ├── productivity/
│ │ ├── caveman/
│ │ │ └── SKILL.md # Сжатая коммуникация: экономия 75% токенов
│ │ ├── grill-me/
│ │ │ └── SKILL.md # Глубинное интервью по требованиям
│ │ └── write-a-skill/
│ │ └── SKILL.md # Руководство по написанию собственных Skills
│ └── misc/
│ ├── git-guardrails-claude-code/
│ │ └── SKILL.md # Git: защитные ограждения
│ └── scaffold-exercises/
│ └── SKILL.md # Скэффолдинг для упражнений
└── .claude-plugin/
└── plugin.json # Метаданные плагина
Пошагово
Шаг первый: установите mattpocock Skills
В любом AI-инструменте для программирования, который поддерживает Skills, выполните команду ниже, чтобы установить:
npx skills@latest add mattpocock/skills
Установочный скрипт проведет вас через выбор Skills, которые нужно активировать, и привязку этих Skills к конкретному AI-инструменту. Ключевой шаг: убедитесь, что вы выбрали /setup-matt-pocock-skills — это точка инициализации всех последующих Skills.
TIP
Процесс установки не требует sudo и не нуждается в изменении кода проекта. Skills хранятся в каталоге конфигурации вашего AI-инструмента и полностью изолированы от текущего рабочего пространства.
Шаг второй: инициализация конфигурации
После установки выполните в AI-инструменте:
/setup-matt-pocock-skills
Этот Skill последовательно спросит вас:
- Issue Tracker: каким инструментом вы управляете Issue (GitHub / Linear / локальные файлы)
- Triage Labels: какие слова использовать для тегов Issue (
/triageskill будет это использовать) - Путь для сохранения документов: где будут храниться сгенерированные ADR и документы
После завершения настройки в корне проекта появится файл CONTEXT.md — как «словарь общего языка» между AI и вами. Этот файл крайне важен: он унифицирует употребление терминов в проекте, а затем все последующие именования и комментарии AI будут строиться на нем.
Шаг третий: выравнивание требований через /grill-me
Когда у вас появляется новое требование или проектное решение, которое вы хотите отдать ИИ на выполнение — не приступайте сразу. Сначала выполните:
/grill-me
ИИ будет задавать вопросы по очереди, перебирая каждую ветку дерева решений. Например, если вы собираетесь «добавить в модуль платежей функциональность возврата средств», AI уточнит:
- Возврат полный или частичный?
- Каковы условия триггера возврата (пользователь вручную / риск-автоматически / оператор вручную)?
- Что происходит с остатком на складе после возврата?
- Нужно ли делать возвратные логи персистентными?
На каждый вопрос ИИ будет предлагать вариант ответа, а вам останется подтвердить или скорректировать. Этот процесс похож на структурированное интервью: он гарантирует, что AI действительно понимает, что вы хотите сделать, а не уходит в сторону «буквальным образом».
TIP
/grill-me подходит для не-кодовых сценариев. Если вы работаете с проектом в уже существующем кодобазе, можно использовать /grill-with-docs — там то же интервью, но дополнительно обновляются CONTEXT.md и ADRs (записи архитектурных решений).
Шаг четвертый: /tdd и вертикальные срезы с тест-драйвом
После выравнивания требований переходите к разработке. Здесь — самая ключевая часть mattpocock/skills: запрещены горизонтальные срезы.
Что такое горизонтальный срез? Сначала вы пишете все тесты целиком, потом — весь код целиком. Это «зона наибольшего риска» при неправильном понимании TDD: AI особенно часто так и делает. В итоге тесты «проверяют воображаемое поведение», а не реальное.
Правильный подход: делать только один вертикальный срез за раз.
RED: Напишите тест — опишите первое поведение → тест падает
GREEN: Напишите минимальный код, чтобы тест прошел → тест проходит
REFACTOR: рефакторинг (по желанию)
Повторяйте этот цикл. Как только AI заканчивает тест, он уже «увидел» реализацию, связанную с ним, поэтому проверяет именно реальное поведение, а не предполагаемое.
Посмотрим на конкретном примере. Допустим, нужно реализовать функциональность оформления заказа в корзине:
// Первая итерация: проверяем только «в корзину можно добавить товар»
import { describe, it, expect } from 'vitest';
import { Cart } from './cart';
describe('Cart', () => {
it('allows adding an item', () => {
const cart = new Cart();
cart.addItem({ id: 'book-1', name: 'TypeScript 入门', price: 59 });
expect(cart.items).toHaveLength(1);
});
});
// cart.ts — минимальная реализация, чтобы тест прошел
export interface CartItem {
id: string;
name: string;
price: number;
}
export class Cart {
items: CartItem[] = [];
addItem(item: CartItem) {
this.items.push(item);
}
}
// Вторая итерация: тестируем «корзина может вычислить общую стоимость»
it('calculates total price', () => {
const cart = new Cart();
cart.addItem({ id: 'book-1', name: 'TypeScript 入门', price: 59 });
cart.addItem({ id: 'book-2', name: 'React 实战', price: 79 });
expect(cart.totalPrice()).toBe(138);
});
// cart.ts — добавляем метод totalPrice
export class Cart {
items: CartItem[] = [];
addItem(item: CartItem) {
this.items.push(item);
}
totalPrice(): number {
return this.items.reduce((sum, item) => sum + item.price, 0);
}
}
Каждая итерация — это: тест падает → минимальный код проходит → следующая итерация. Это и есть главный ритм вертикального среза.
WARNING
/tdd запрещает «сразу написать все тесты, а потом сразу написать весь код». Нарушение этого правила делает тесты нечувствительными к рефакторингу: после рефакторинга тесты могут стать полностью красными, хотя фактическое поведение не изменилось.
Шаг пятый: /diagnose и структурированная отладка
Если в коде что-то пошло не так, не просите ИИ «починить баг». Сначала создайте петлю обратной связи — выполните:
/diagnose
/diagnose заставляет AI пройти весь шестистадийный цикл отладки:
| Стадия | Ключевое действие |
|---|---|
| 1. Build a feedback loop | Найдите повторяемый сигнал падения |
| 2. Reproduce | Добейтесь стабильного воспроизведения бага |
| 3. Hypothesise | Сгенерируйте 3–5 опровергаемых гипотез |
| 4. Instrument | Изменяйте только одну переменную за раз, чтобы найти корневую причину |
| 5. Fix + regression test | Сначала добавьте регрессионный тест, затем чините |
| 6. Cleanup + post-mortem | Очистите отладочные логи и сформулируйте план предотвращения |
Почему этот процесс важен? Потому что самый частый способ отладки у ИИ — «угадать, что сломалось, поменять, посмотреть результат; если не то — угадать снова». Без петли обратной связи это все равно что метать дротики в темноте. /diagnose превращает отладку в инженерную дисциплину, а не в магию.
Типичный сценарий: допустим, ваш платежный интерфейс внезапно начал возвращать 500.
// Стадия 1: построить петлю обратной связи — напишите тест, который локализует проблему до конкретного интерфейса
import { describe, it, expect } from 'vitest';
import { createHonoServer } from './server';
import fetch from 'node-fetch';
describe('Payment API', () => {
it('returns 200 for valid checkout', async () => {
const app = createHonoServer();
const response = await fetch('http://localhost:3000/api/checkout', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
items: [{ id: 'book-1', quantity: 1 }],
userId: 'user-123',
}),
});
expect(response.status).toBe(200); // сейчас тест падает, фактически возвращается 500
});
});
Стадия 3 сгенерирует список гипотез:
- Если проблема в том, что «сервис складов таймаутит и из-за этого возникает необработанное исключение», то mock-сервис склада, возвращающий success, уберет 500
- Если «транзакция с базой данных не фиксируется», то проверка вызова transaction.commit() обнаружит проблему
- Если «парсинг формата от платежного шлюза не проходит», то валидация mock-данных шлюза сможет воспроизвести проблему
ИИ будет проверять гипотезы по одной, а не складывать все правки сразу.
Шаг шестой: /write-a-skill — создайте собственный Skill
Когда вы накопили набор уникальных рабочих процессов в рамках какого-то проекта, вы можете упаковать их в Skill — чтобы ИИ мог вызывать их в этом проекте в любой момент:
/write-a-skill
AI по очереди спросит вас:
- Этот Skill покрывает какую область?
- Какие есть конкретные сценарии использования?
- Нужно прикладывать скрипты или достаточно чистых инструкций?
- Есть ли справочные материалы?
Затем будет сгенерирована стандартная структура:
my-custom-skill/
├── SKILL.md # Основной файл команд (обязателен)
├── REFERENCE.md # Подробная документация (разбивайте, если контент > 100 строк)
├── EXAMPLES.md # Примеры использования
└── scripts/
└── helper.ts # Скрипт-инструмент (опционально)
Поле description в SKILL.md — это единственный вход для восприятия этого Skill ИИ, и у него строгий формат:
---
name: my-custom-skill
description: Сгенерирует типобезопасный API-клиент из JSON Schema и внедрит Mock-данные.
Use when user mentions "API client", "generate types", or "mock data".
---
В description первая фраза должна говорить «что он делает», вторая — «в каких сценариях срабатывает», а срабатывающие триггер-слова должны подталкивать ИИ к автоматической загрузке.
TIP
description максимум 1024 символа — нужно писать точно. Обобщенные описания (например, «помогает работать с документацией») не позволят ИИ отличить этот Skill от других.
Частые проблемы / Troubleshooting
1. ИИ не выполняет тесты и сразу пишет код
Симптом: вы вызываете /tdd, но AI сразу переходит к реализации и пропускает стадию RED.
Как проверить:
- Убедитесь, что в
CONTEXT.mdопределены тестовый фреймворк проекта и соглашения по тестам - В начале
/tddявно скажите «пишите только один тест, не пишите другой код» - Если AI все равно пропускает — вручную в разговоре напишите «сначала напишите падающий тест», чтобы вернуть его в RED
Причина: ИИ понимает TDD буквально — считает, что раз «написали тест», то это TDD, но не понимает, что «падение теста» — это сам по себе сигнал.
2. Ловушка горизонтального среза — сразу написать все тесты
Симптом: AI в /tdd генерирует 10 тестовых файлов за раз, а затем так же разом пишет всю реализацию.
Как проверить:
- Прямое вмешательство: скажите AI «сначала напиши только первый тест — и реализуй его»
- Добавьте в
CONTEXT.mdпредупреждение об анти-паттерне: «запрещен горизонтальный срез; каждый раз делайте только один вертикальный срез»
Причина: ИИ любит иллюзию «сделал разом все». Горизонтальные срезы создают ощущение полноты, но на деле результат оказывается хрупким.
3. В отладочном цикле нет сигнала обратной связи
Симптом: вы вызываете /diagnose, но AI лишь постоянно правит код, не создавая повторяемый сигнал падения.
Как проверить:
- Если Phase 1 не проходит, не переходите к Phase 2. Скажите AI прямо: «еще нет повторяемого сигнала падения; продолжайте строить петлю обратной связи»
- Попробуйте собрать end-to-end сигнал через
node-fetchи реальные HTTP-запросы, а не просто замокать весь модуль
Причина: петля обратной связи — это ядро отладки; без нее все последующие действия — вслепую.
4. Описание Skill не срабатывает — Skill не запускается автоматически
Симптом: вы написали кастомный Skill, но AI его не загружает.
Как проверить:
- Проверьте, зарегистрирован ли этот Skill в
plugin.json - Убедитесь, что в description есть триггерные слова (те слова, которые пользователь реально будет говорить)
- Убедитесь, что
SKILL.mdсодержит корректныеnameиdescriptionв требуемом формате (YAML frontmatter)
Причина: загрузка Skills зависит от совпадения ключевых слов в description; если описание неточное — Skill не сработает.
5. Интервью /grill-me превращается в односторонний отчет
Симптом: при выполнении /grill-me AI получает вашу информацию и ничего не уточняет — не задает вопросов.
Как проверить:
- Сообщайте, что AI зашел в режим интервью, только когда он задает вопросы: продолжайте отвечать и не обрывайте процесс
- Если AI молчит дольше 3 раундов — вручную скажите: «продолжай задавать вопросы, у меня есть еще больше информации»
- Обычно корень в том, что AI «решает, что уже понял», хотя на самом деле это лишь буквальное понимание
Причина: AI склонен быстро «сходиться» к состоянию «похоже, понял», вместо того чтобы перебрать все ветви.
6. Слишком большой CONTEXT.md — взрыв токенов
Симптом: по мере продвижения проекта CONTEXT.md становится все больше, и AI начинает ловить переполнение контекста или отвечает медленнее.
Как проверить:
- Регулярно рефакторьте
CONTEXT.md: оставляйте «уже стабильные универсальные термины», а «временные решения» переносите в каталогdocs/adr/ /improve-codebase-architectureможет помочь определить, какие части стоит вынести изCONTEXT.md
Причина: CONTEXT.md — файл, который динамически растет; если им не заниматься, он станет вторым monorepo.
Дополнительное чтение / Направления развития
Расширение методологии: сам Мэтт По коком — сторонник TypeScript type gymnastics; его курс Total TypeScript — отличное дополнение для понимания типо-ориентированной разработки.
От TDD к улучшению архитектуры: когда ваш кодобаз пройдет несколько циклов TDD-рефакторинга, можно провести архитектурную диагностику через /improve-codebase-architecture. Она опирается на доменную лексику из CONTEXT.md и на записи решений в docs/adr/, чтобы выявлять «поверхностные модули» (сложные интерфейсы при малом функционале) и возможности для рефакторинга.
Экосистема кастомных Skills: философия дизайна mattpocock/skills — «маленькие и компонуемые». Вы не обязаны устанавливать все Skills, которые он предлагает: можно оставить только /tdd и /diagnose и постепенно вводить остальное в ежедневной разработке. Также в сообществе есть и другие разработчики, которые собирают наборы Skills на базе этого фреймворка — за ними тоже стоит следить.