Алексей | AI PROKA4
رفتن به کانال در Telegram
AI Transformation Lead Из 8 лет QA-автоматизации - в интеграцию AI решений в процессы разработки и бизнеса на уровне всей компании.
نمایش بیشترکشور مشخص نشده استدسته بندی مشخص نشده است
657
مشترکین
اطلاعاتی وجود ندارد24 ساعت
+47 روز
+1030 روز
آرشیو پست ها
🔥 Закончили задачу - почистите контекст
Контекст - рабочая память Claude на сессию. Она не резиновая, и качество падает ещё до того, как окно переполнится: чем больше лишнего, тем хуже Claude держит важное.
Поэтому чистить нужно по ходу, а не «когда упёрлись».
Две команды под две ситуации:
🟢
/clear - стирает историю полностью, старт с чистого листа (CLAUDE.md и правки в файлах остаются). Используйте, когда уходите на другую, не связанную задачу.
🟢 /compact - сворачивает историю в резюме: нить цела, место освобождается. Используйте, когда продолжаете по той же тебе, но окно уже забивается.
Правило: не связано с предыдущим - /clear, связано но тяжело - /compact. Проверить загрузку - /context (перевалило за 80% - пора).Чистый контекст - это прямее ответы и меньше токенов на ветер. #claude_code
🤟🏻А вот и вышел Sonnet 5
Пытаются, хотя бы что-то выпустить после запрета Fable 5🙂
По кодингу не плохо, почти как Opus, на практике тоже в целом хорошо, могу подтвердить близость к опусу!
Это уже диагноз?)
«Клодуууу заплатите чеканной монетой, чеканной монетой, о-о-оу»
🔥 Раскидайте раздутый CLAUDE.md по rules
Как писать rule мы уже разобрали. Теперь применим это к жизни!
У вас наверняка есть
CLAUDE.md, который уже оброс - стиль кода, правила API, требования к тестам, заметки про БД, инструкции по деплою. И всё это грузится каждую сессию, даже когда вы правите одну кнопку на фронте.
Разносим за три шага.
Шаг 1. Решите, что остаётся в CLAUDE.md. Сюда - только то, что нужно всегда и везде:
🟢 архитектура и структура проекта
🟢 команды: сборка, тесты, линт
🟢 общие договорённости - язык, формат коммитов, стиль
Шаг 2. Всё, что про конкретную область кода - выносите в rules с привязкой к путям:
.claude/
CLAUDE.md # only project-wide essentials
rules/
api.md # paths: src/api/**/*.ts
testing.md # paths: "**/*.test.ts"
db.md # paths: src/db/**/*.ts
Теперь правила API подтянутся, только когда Claude работает в src/api/. Если работаете над фронтом - то в контексте их нет. (Как именно писать paths: и маски - мы разбирали в прошлом посте.)
Шаг 3. Выпилите перенесённое из CLAUDE.md.
Это важно: если правило уехало в rule, не оставляйте его копию в CLAUDE.md. Иначе при конфликте двух версий поведение становится непредсказуемым.
Как понять, что куда - простой критерий:
🟢 нужно всегда → CLAUDE.md (или rule без paths:)
🟢 нужно только в части кода → rule с paths:
🟢 одна тема - один файл, не сваливайте API и тесты в кучу
Один момент при разносе. Правило, которое должно срабатывать при СОЗДАНИИ файла («у каждого нового модуля - такой-то заголовок»), через paths: не выстрелит - триггер срабатывает на чтении, а не на создании. Такое оставляйте в CLAUDE.md.
Проверьте результат. Команда /memory покажет, что реально подгрузилось.
И живой тест: откройте файл из src/api/ - правило про API должно появиться в контексте. Откройте фронт - не должно.
Выхлоп простой: CLAUDE.md худеет, контекст не забит тем, что сейчас не нужно, а Claude видит ровно то, что относится к текущей задаче, - и меньше путается.
#rules🔥 Как написать свой rule (на примере)
В прошлый раз разобрали, зачем нужна папка
.claude/rules/.
Теперь - как реально написать правило, чтобы оно срабатывало именно там, где надо.
Допустим, ты каждый раз напоминаешь Claude одно и то же про свой API-слой: валидируй вход, держи единый формат ошибки.
Выноси это в правило.
Шаг 1. Создай файл .claude/rules/api.md и опиши правила:
---
paths:
- "src/api/**/*.ts"
---
# API rules
- Validate every request body with Zod
- Return errors as { error: string, code: number }
- Log each request with a correlation id
Шаг 2. Разберись, как оно грузится. Всё решает frontmatter:
🟢 без paths: - правило грузится всегда, каждую сессию, как кусок CLAUDE.md
🟢 с paths: - подтянется только когда Claude откроет файл, попадающий под маску
То есть правило про API не висит в контексте, пока ты пилишь фронт. Тронул файл из src/api/ - правило включилось.
Про маски - тут чаще всего и спотыкаются:
🟢 ** - любая вложенность, * - один уровень. src/*.ts не достанет src/api/users.ts, а src/**/*.ts достанет
🟢 кавычки обязательны: пиши "**/*.ts", а не **/*.ts - YAML ругается на * и { без кавычек
🟢 несколько типов разом - через фигурные скобки: "src/**/*.{ts,tsx}"
Одна важная засада. Path-правило срабатывает, когда Claude ЧИТАЕТ подходящий файл, а не когда создаёт новый. Поэтому правило «у каждого нового файла должен быть такой-то заголовок» при создании не выстрелит. Такие вещи держи в CLAUDE.md или в правиле без paths:.
Пара принципов:
• один файл - одна тема: api.md, testing.md, security.md. Не вали всё в кучу
• пиши только сами правила, коротко, как в CLAUDE.md - без длинных «почему»
• не дублируй между CLAUDE.md и rules: при конфликте поведение непредсказуемо
Проверка: команда /memory показывает, какие правила реально подгрузились. Нет твоего файла в списке - значит маска не совпала.
И главное правило - это не закон, а сильная подсказка. Если что-то должно выполняться железно всегда - это уже про хуки, а не про rules.
#rules🔥 rules - когда CLAUDE.md раздулся
Как вы помните
CLAUDE.md - это память проекта и ограничения. Claude читает её в начале каждой сессии. Удобно, пока файл небольшой (~200 строк).
Но он пухнет: стиль кода, правила API, требования к тестам, заметки про БД - и всё это грузится каждую сессию, даже когда ты правишь одну кнопку на фронте.
Решение - папка .claude/rules/
Вместо одного раздутого файла - несколько маленьких, по темам:
.claude/
CLAUDE.md
rules/
api.md
testing.md
security.md
db.md
Каждый файл - обычный markdown с инструкциями, как кусок CLAUDE.md, только вынесенный отдельно.
➡️Главное - понять, как они грузятся:
• правило без привязки к путям грузится всегда, каждую сессию - то же, что писать в CLAUDE.md, просто аккуратнее разложено
• правило можно привязать к части кода - тогда оно подтянется, только когда Claude работает с этими файлами. Не трогаешь БД - правила про БД не висят в контексте
Вот второе и даёт главный выигрыш: контекст не забивается тем, что сейчас не нужно, а нужное включается ровно в тему.
Как это укладывается в общую картину:
• CLAUDE.md - что нужно всегда (архитектура, команды сборки, общие договорённости)
• rules - что нужно в конкретной части кода (для API - правила API, для тестов - про тесты)
• skills - что нужно под конкретную задачу (грузится, когда позвал)
Запомните практическое правило: если кусок CLAUDE.md длиннее ~15-20 строк и касается одной области - пора выносить его в отдельный rule.
🙌А как именно написать правило и привязать к нужным файлам - в следующем посте.
#rulesКак и обещал, по итогу постов про Skills дропаю вам методичку, чтобы было все в одном месте🤟🏻
🔥 Фишка: скилл, который сам тебя спрашивает (полный разбор)
Скилл можно сделать интерактивным - чтобы он остановился, спросил, что тебе нужно, и пошёл по выбранной ветке. Отвечает за это встроенный инструмент AskUserQuestion (нужен Claude Code от 2.0.21). Он рисует в терминале структурированный вопрос с вариантами, ты выбираешь стрелками.
Разберём, как им пользоваться в работе.
КАК УСТРОЕН ОДИН ВЫЗОВ
За один вызов можно задать до 4 вопросов сразу. У каждого вопроса:
🟢
question - сам вопрос
🟢header - короткая подпись-чип, до 12 символов
🟢options - от 2 до 4 вариантов, у каждого label (1-5 слов) и description (что это значит)
🟢multiSelect - разрешить выбрать несколько вариантов или нет
Вариант «Other» инструмент добавляет сам - всегда можно вписать свой ответ текстом, ты его не прописываешь.
Например, спросить язык и базу одним вызовом:
questions:
- header: "Language"
question: "Which language for the new service?"
multiSelect: false
options:
- label: "TypeScript"
description: "Node + TS, strict mode."
- label: "Python"
description: "FastAPI, type hints."
- header: "DB"
question: "Which database?"
multiSelect: false
options:
- label: "Postgres"
description: "Relational, default choice."
- label: "SQLite"
description: "Zero-config, local and dev."
МОЖНО ОТМЕТИТЬ НЕСКОЛЬКО ВАРИАНТОВ РАЗОМ
Если у вопроса стоит multiSelect:true, он превращается из «выбери одно» в «отметь сколько нужно» - чекбоксы вместо радиокнопок. Отмечаешь нужные, подтверждаешь - и скилл получает список ответов, а не один.
Когда это в тему - когда ответ по природе «несколько сразу»:
🟢какие тесты поднять: unit + e2e
🟢какие части системы аудитить: API + воркеры + БД
🟢какие проверки прогнать перед релизом
А для взаимоисключающего выбора (язык, уровень объёма) оставляй multiSelect: false - одно и только одно.
- header: "Surfaces"
question: "Which surfaces should the audit cover?"
multiSelect: true
options:
- label: "API"
description: "HTTP routes and handlers."
- label: "Workers"
description: "Background jobs and queues."
- label: "DB"
description: "Schema and migrations."
Тут пользователь отметит, скажем, API и DB - и скилл пройдётся ровно по ним, не трогая остального.
МОЖНО НЕСКОЛЬКО ВЫЗОВОВ ПОДРЯД
Один вызов - не предел. Скилл умеет спрашивать пошагово и ветвиться: сначала узнать объём, а если выбрал «Full» - задать второй вопрос, по каким частям системы идти. Диалог получается адаптивный, а не один экран на всё.
В скилле это просто несколько шагов с вопросами:
# Execution flow
0. Ask the audit scope (AskUserQuestion).
1. If scope == "Full":
Ask which surfaces to cover (AskUserQuestion, multiSelect).
2. Apply ONLY the chosen scope and surfaces.
3. Write docs/architecture.md and print a short summary.
КАК ЗВАТЬ ЕГО В СКИЛЛЕ
Два способа:
🟢Человеческим языком: «спроси у пользователя объём аудита, предложи Overview / Overview+risks / Full». Claude сам соберёт вызов и придумает варианты.
🟢Структурой, как выше: пишешь question / header / options руками. Дольше, зато предсказуемо и одинаково каждый раз.
Пара советов:
🟢header - до 12 символов, иначе обрежется
🟢держи 2-4 варианта, не вываливай десять
🟢хочешь подсказать выбор - поставь рекомендуемый вариант первым и допиши «(Recommended)» в label
🟢«Other» уже есть из коробки, руками не добавляй
И ограничение, чтоб не словить сюрприз: в фоновых сабагентах и headless-режиме (без терминала) AskUserQuestion не сработает - ему нужен живой ввод. Плюс на ответ есть таймаут порядка минуты.
Перебери свои скиллы, которые делают «всё и сразу», и поставь в начало вопрос. Где надо - дай выбрать несколько галочками. А где ветвится - второй вопрос по итогам первого.
#skillsБыстренько прошелся, в целом мини-ачивка)
Как говорится "Why not?"
Практически все я уже знал до курса🤟
🔥 Скилл-дроп: разбор ошибки по стектрейсу
Первый готовый скилл. Кидаешь агенту простыню стектрейса - получаешь причину и минимальный фикс, без «давайте посмотрим, возможно, наверное»
Вот он целиком, клади в
~/.claude/skills/explain-error/SKILL.md:
--- name: explain-error description: Explains an error or stack trace: finds the cause and suggests a minimal fix. Trigger when the user pastes a trace, a failure log, or an error message. --- # What to do: 1. Find the lowest line of your own code in the trace (not libraries) 2. State the cause in one sentence, no fluff 3. Give a minimal fix - only what fixes the error 4. If info is missing (versions, code snippet) - ask, don't guess 5. No "you could also try" and no ten-item listsПункт 4 даёт больше всего - вместо уверенной чуши агент задаёт один уточняющий вопрос. Адаптируй под себя: впиши в шаги свой стек (куда смотреть в твоём фреймворке) - и точность вырастет. #skills
🔥 Скилл - это не только SKILL.md
SKILL.md - это вход. Но рядом в папке можно положить ещё кучу всего, и вот тут скиллы становятся по-настоящему мощными.
Три типа соседей:
🟢 references/ - справочники, гайдлайны, примеры. Длинные доки, которые не нужны каждую секунду
🟢 scripts/ - реальные скрипты (Python, bash), которые скилл запускает
🟢 assets/ - шаблоны и файлы-болванки
Вся соль в том, КОГДА это грузится. Помните такую вещь, как прогрессивная загрузка (загрузка слоями)? Вот её третий слой: содержимое этих папок попадает в контекст только в момент, когда скилл до него дотянулся.
Лежат двадцать референсов - пока не понадобились, контекст они не занимают.
Зачем scripts/ отдельно от инструкций. Инструкция - это «модель читает и делает по-своему». Скрипт - это «запусти ровно вот это».
Если шаг должен отрабатывать одинаково каждый раз (распарсить лог, посчитать, переформатировать), не проси модель импровизировать - дай ей скрипт.
Пример. Скилл проверки покрытия:
coverage-check/
SKILL.md # когда звать + что делать
scripts/
run.sh # прогоняет тесты с покрытием, парсит результат
references/
thresholds.md # какие пороги считаем нормой
В SKILL.md строчка вида «запусти scripts/run.sh, сравни с references/thresholds.md». Модель не считает покрытие в уме - она дёргает скрипт и читает цифры. Меньше галлюцинаций, стабильный результат.
Правило: всё, что должно быть детерминированным - в скрипт. Всё, что справочное и длинное - в references. SKILL.md держи коротким.
Лайфак: перед тем как очищать сессию или компактить, спросите Claude «Что из текущей сессии можно трансформировать в Skill?»#skills
🫠UPD. Вскрылись детали - и это уже просто абсурд.
Оказалось, Anthropic заранее предупреждала государство о релизе и получила одобрение на запуск. А через день ей дали 90 минут, чтобы всё свернуть. Полтора часа на то, чтобы выключить флагман.
И теперь понятно, кто это завёл - Amazon. Их CEO с компанией обзванивали чиновников и пугали возможностями модели: мол, Fable находит реальные уязвимости в чужом софте.
И вот тут самое смешное: это ровно то, о чём я писал. Дело не в «узком jailbreak», дело в том, что штука реально мощная. Я её потрогать успел - интуиция не подвела.
А эксперт, которому показали тот самый отчёт, назвал реакцию власти несоразмерной: модель находила дыры, отвечая на обычные вопросы защитника. Ровно то, для чего её и делали.
Но пугает не это. Пугает формулировка из инсайдов - «де-факто лицензионный режим». То есть выключили не одну модель. Показали, что так теперь можно с любым, чей продукт окажется слишком хорош.
Вот от этого и не по себе. Очень хочется ошибаться.
⚡️Вот и приехали...
Правительство США только что заставило Anthropic выключить две свои топовые модели - Fable 5 и Mythos 5🙂
Не оштрафовало, не пригрозило, а буквально: вырубите доступ.
Экспортная директива, ссылка на нацбезопасность, запрет для любого иностранца - и внутри Штатов, и снаружи. Даже для своих же сотрудников без американского паспорта.
И так как разделить «иностранцев» и «всех остальных» на лету нельзя - модели просто выключили для всех.
Я сижу с этим пол дня и ловлю странное чувство. Мне теперь по закону нельзя притронуться к инструменту, который вышел буквально на этой неделе.
И самое жесткое - повод. Узкий jailbreak, который, по словам самой Anthropic, спокойно воспроизводится и на других публичных моделях.
То есть отрубить флагман на сотни миллионов людей можно из-за дырки, которая есть у всех. Если так начнут делать со всей индустрией - выкатка новых моделей встанет в принципе.
Я обычно про это пишу с позиции «строю, экспериментирую, кайфую». А сегодня впервые поймал себя на том, что мне немного не по себе. Вот, собственно, и показатель - когда даже мне, который во всём этом варится каждый день, становится чуть-чуть страшно.
Честно, я не верю, что причина в jailbreak, так как я успел прикоснуться к Fable 5 и это жесть... Думаю причина в этом.
Посмотрим, откатят ли.
Anthropic говорит, что это недоразумение и что они борются за восстановление. Очень надеюсь, что да.
🔥 Как написать свой скилл за 5 минут
В прошлый раз разобрали, что такое скиллы.
Теперь делаем свой - возни меньше, чем кажется.
Скилл - это папка с одним файлом SKILL.md. Файл из двух частей: YAML-шапка и тело.Шапка (между ---) говорит Claude, КОГДА звать скилл. Тело - что делать, когда позвал.
--- name: commit-msg description: Пишет аккуратное сообщение коммита по staged-диффу. Звать, когда пользователь просит закоммитить или сформулировать коммит. --- # Что делать: 1. Прочитай git diff --staged 2. Заголовок до 50 символов в стиле Conventional Commits 3. Тело: что изменилось и зачем, без воды 4. Покажи сообщение, дождись подтверждения, потом коммитьКуда положить: •
~/.claude/skills/commit-msg/SKILL.md - личный, во всех проектах
• .claude/skills/commit-msg/SKILL.md - проектный, в гит на всю команду
Имя папки = имя скилла. Перезапускать ничего не надо: Claude подхватит его в следующей сессии.
И главное - описание. По нему модель решает, звать скилл или нет. Пиши не «про коммиты», а «когда пользователь просит закоммитить». Чем конкретнее триггер, тем надёжнее срабатывает. Размытое описание - и скилл лежит мёртвым грузом.
С чего начать: возьми одно действие, которое повторяешь каждый день, и опиши его шаги. Один скилл - одна задача. Дальше распробуешь.
#skills⚡️Мой YouTube канал тоже оживет в скором времени)
Контент соответственно будет про AI, разработку, кастомные решения и прочее!
🔥 Скиллы в Claude Code: научил один раз, работает всегда
Прошлый пост был про CLAUDE.md, который грузится в контекст в начале каждой сессии. Скиллы устроены иначе: лежат и ждут, пока понадобятся.
Скилл - это папка с файлом SKILL.md внутри. Там ты пишешь, как делать конкретную задачу: шаги, правила, что на входе, что на выходе. Рядом можно положить скрипты и шаблоны, и скилл их дёрнет, когда дойдёт до дела.Зачем они, если уже есть CLAUDE.md? Затем, что CLAUDE.md сидит в контексте всю сессию и ест токены, даже когда ты пишешь код, к которому он вообще не относится. А скиллов у тебя может накопиться полсотни. Запихни их все разом - и под саму задачу места не останется. Поэтому скиллы грузятся слоями. На старте Claude читает только имя и описание каждого, одна строчка, копейки по токенам. Совпало описание с задачей - подтянул тело SKILL.md с инструкциями. Внутри лежат скрипты или примеры - подгрузятся ещё позже, когда до них дойдёт дело, и лишнего в контексте не висит. Из-за этого описание решает почти всё. По нему Claude понимает, звать скилл или нет. Напишешь размыто - скилл будет молча простаивать, а ты не поймёшь почему. Где они лежат. Личные кладёшь в ~/.claude/skills/<имя>/SKILL.md, они видны во всех проектах. Проектные - в .claude/skills/<имя>/SKILL.md проекта, эти коммитятся в гит и едут с кодом на всю команду. Ещё есть плагины со своим неймспейсом plugin:skill, чтобы имена не сталкивались. Имя папки заодно становится слэш-командой: зови руками через / или дай Claude подхватить самому. И чтобы не было каши: скилл говорит агенту, как себя вести. MCP даёт ему новые руки - сходить в гитхаб, дёрнуть базу, написать в слак. Вещи разные, в связке дополняют друг друга. Живой пример - скилл, который разбирает флаки-тест. Кладём в ~/.claude/skills/flaky-triage/SKILL.md:
--- name: flaky-triage description: Разбирает нестабильно падающий тест. Звать, когда тест флакает или просят понять причину рандомных падений. --- # Что делать: 1. Прогони тест 5 раз подряд, собери статистику падений 2. Проверь типовые причины: гонки, неявные ожидания, общий стейт между тестами, зависимость от порядка 3. Не лечи через time.sleep, ставь явные ожидания 4. Дай минимальную правку и объясни, почему тест флакалТеперь я кидаю агенту упавший тест, и он идёт по этим шагам сам, а не гадает каждый раз заново. И вот это и есть самое важное в скиллах. Не выдумывай умные навыки ради галочки. Лови моменты, когда делаешь одно и то же по второму-третьему разу: объясняешь агенту один и тот же разбор, копипастишь один и тот же кусок промпта. Каждый такой повтор - готовый скилл. Записал шаги один раз, дальше к этому не возвращаешься. P.S. У меня в claude-code-python-stack собрано 20 скиллов под Python и QA, от генерации тестов до разбора CI-логов. #skills
🧠 CLAUDE.md - самый важный файл в проекте, на который многие забивают
Вы работаете с Claude Code и в каждой новой сессии заново объясняете ему, какой у вас стек, как запускать тесты и куда не лезть потому что он забыл?)
Для этого как раз и существует
CLAUDE.md
На деле, это просто markdown-файл в корне проекта. Claude Code сам подтягивает его в контекст в начале каждой сессии - без команд, без настройки. Открыл проект и он уже знает правила.
Что туда кладут: стек с версиями (он не угадает, что у тебя Next.js 15, а не 14), команды сборки и тестов, код-стайл, что трогать нельзя. Всё, что агент не вытащит, просто читая код.
➡️И вот главное, что многие не понимают. CLAUDE.md - это не промпт «будь умнее, пожалуйста». Это документ-ограничитель. Он перехватывает дефолтное поведение агента до того, как оно сработало. Как чеклист на ревью, ты не держишь все правила в голове, а сверяешься со списком.
Самое главное, не раздувайте. Всё, что лежит в файле, ест токены каждую сессию. Многословие = меньше места под саму задачу.
Где живёт? Ну тут прям интересно, ибо он не один:
🟢./CLAUDE.md - командный, в гите
🟢CLAUDE.local.md - твои личные хотелки, в .gitignore
🟢~/.claude/CLAUDE.md - глобальный, на все проекты сразу
🟢не знаешь, с чего начать - запусти /init, он соберёт стартовый по твоему проекту. Дальше читаешь, выкидываешь очевидное, дописываешь как реально работаешь.
📎 В приложении - пример
Прикрепил уже нащумевший «карпатовский» CLAUDE.md, 100K+ звёзд на гитхабе.
Сразу честно: написал его не Карпатый, а Forrest Chang. Он взял вирусный тред Карпатого (январь 2026) про то, как LLM факапят в коде, и упаковал в четыре правила:
🟢Не делай молчаливых допущений - не уверен, спроси. Один вопрос в начале экономит пять кругов правок.
🟢Не переусложняй - решается в 20 строк, не пиши 200.
🟢Хирургическая точность - трогай только то, о чём попросили. Без drive-by рефакторингов.
🟢Цель важнее инструкций - сначала тест, потом код, который его проходит.
Полезно держать в голове в любом случае, даже если сам файл не ставите!