ru
Feedback
Алексей | AI PROKA4

Алексей | 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, на
🤟🏻А вот и вышел 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/. Теперь - как реально написа
🔥 Как написать свой 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 читает её в начале ка
🔥 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

⚡️Как только закрою серию постов про #skills , выложу обьедененную методичку!

Эмм, они еще и 1млн контекста забрали🙃
Эмм, они еще и 1млн контекста забрали🙃

🔥 Скилл - это не только 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 заранее предупреждала государство о релизе и получила
🫠UPD. Вскрылись детали - и это уже просто абсурд. Оказалось, Anthropic заранее предупреждала государство о релизе и получила одобрение на запуск. А через день ей дали 90 минут, чтобы всё свернуть. Полтора часа на то, чтобы выключить флагман. И теперь понятно, кто это завёл - Amazon. Их CEO с компанией обзванивали чиновников и пугали возможностями модели: мол, Fable находит реальные уязвимости в чужом софте. И вот тут самое смешное: это ровно то, о чём я писал. Дело не в «узком jailbreak», дело в том, что штука реально мощная. Я её потрогать успел - интуиция не подвела. А эксперт, которому показали тот самый отчёт, назвал реакцию власти несоразмерной: модель находила дыры, отвечая на обычные вопросы защитника. Ровно то, для чего её и делали. Но пугает не это. Пугает формулировка из инсайдов - «де-факто лицензионный режим». То есть выключили не одну модель. Показали, что так теперь можно с любым, чей продукт окажется слишком хорош. Вот от этого и не по себе. Очень хочется ошибаться.

⚡️Вот и приехали... Правительство США только что заставило Anthropic выключить две свои топовые модели - Fable 5 и Mythos 5🙂
⚡️Вот и приехали... Правительство США только что заставило Anthropic выключить две свои топовые модели - Fable 5 и Mythos 5🙂 Не оштрафовало, не пригрозило, а буквально: вырубите доступ. Экспортная директива, ссылка на нацбезопасность, запрет для любого иностранца - и внутри Штатов, и снаружи. Даже для своих же сотрудников без американского паспорта. И так как разделить «иностранцев» и «всех остальных» на лету нельзя - модели просто выключили для всех. Я сижу с этим пол дня и ловлю странное чувство. Мне теперь по закону нельзя притронуться к инструменту, который вышел буквально на этой неделе. И самое жесткое - повод. Узкий jailbreak, который, по словам самой Anthropic, спокойно воспроизводится и на других публичных моделях. То есть отрубить флагман на сотни миллионов людей можно из-за дырки, которая есть у всех. Если так начнут делать со всей индустрией - выкатка новых моделей встанет в принципе. Я обычно про это пишу с позиции «строю, экспериментирую, кайфую». А сегодня впервые поймал себя на том, что мне немного не по себе. Вот, собственно, и показатель - когда даже мне, который во всём этом варится каждый день, становится чуть-чуть страшно. Честно, я не верю, что причина в jailbreak, так как я успел прикоснуться к Fable 5 и это жесть... Думаю причина в этом. Посмотрим, откатят ли. Anthropic говорит, что это недоразумение и что они борются за восстановление. Очень надеюсь, что да.

🔥 Как написать свой скилл за 5 минут В прошлый раз разобрали, что такое скиллы. Теперь делаем свой - возни меньше, чем кажет
🔥 Как написать свой скилл за 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, который грузится в контекст в начал
🔥 Скиллы в 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 - самый важный файл в проекте, на который многие забивают Вы работаете с 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 рефакторингов. 🟢Цель важнее инструкций - сначала тест, потом код, который его проходит. Полезно держать в голове в любом случае, даже если сам файл не ставите!