Почніть із цього
1 год
Claude Code in action: 9 уроків і тест
Claude Code · Claude Academy
Добірка для тих, хто вже щодня працює з Claude Code: як ставити задачі, керувати довгими сесіями, автоматизувати рутину й перебудувати процеси команди. Матеріали англійською, тут — їхній зміст українською.
Почніть із цього
1 год
Claude Code in action: 9 уроків і тест
Рівень effort
15 хв
туторіал про витрати й ліміти
Для ролі CTO
1 год
AI-native SDLC playbook: 14 уроків
Обов'язково
Як запускати довгі сесії Claude Code без постійного нагляду й довіряти результату: керувати роботою, налаштовувати Claude, автоматизувати повторювані задачі й перевіряти те, що зроблено без вас.
Навіщо. Курс закриває більшість того, що зараз робиться вручну: план перед великими змінами, коміти й пуш, перевірку результату, контроль дозволів.
Короткі задачі прості: попросив, перевірив. Довгі (рефакторинг на десяток файлів, нова фіча на кілька годин) затягуються тим більше, чим частіше доводиться виправляти курс. Дві базові звички: спершу окреслити обсяг роботи, а потім керувати нею під час виконання.
/compact підсумовує розмову, робить цей підсумок новим контекстом і видаляє старі повідомлення, звільняючи context window. Ризик: у підсумку може загубитися щось важливе, і Claude почне відхилятися від курсу.
/compact «голим». Дописуйте після команди інструкцію, що саме зберегти. Наприклад, якщо налагодження давно завершене, а зараз важливі лише зміни API:/compact Focus on the --version flag implementation
Усе, що написано після команди, визначає зміст підсумку. Це ваш інструмент керування контекстом.
Коли Claude пішов не туди, не треба «випрошувати» повернення новими промптами. Rewind повертає до checkpoint: кожен ваш промпт створює checkpoint. Меню відкривається подвійним натисканням Esc на порожньому рядку вводу. Варіанти:
/goal задає умову завершення: ви описуєте, як виглядає «готово», і Claude працює через кілька ходів, доки швидкий evaluator не підтвердить виконання умов. Він не зупиниться просто тому, що вперше вирішив, що закінчив.
/goal all tests in src/billing pass, and the type checker reports zero errors
/goal clear./loop запускає промпт з інтервалом між ходами: фіксованим або self-paced (Claude сам обирає темп)..worktreeinclude у корені репозиторію перелічує git-ignored файли, які треба копіювати в кожен worktree: наприклад, файл зі змінними середовища чи локальний конфіг, які потрібні всюди, але не комітяться.Головне: довгу сесію робить надійною не постійний нагляд, а план на старті плюс точкові інструменти керування (спрямований compact, rewind, goal/loop, worktrees).
Типова пастка: на кожну проблему в CLAUDE.md додається нове правило, файл розростається, і Claude починає ігнорувати його частини. Це не баг, а природа файлу: CLAUDE.md — не примусова конфігурація, а настанови. Кожен рядок конкурує з усіма іншими за увагу моделі, тож що довший файл, то менш надійно виконується кожне окреме правило. Мета — не записати все, а тримати файл стислим.
Claude завантажує всі чотири одночасно при запуску; вони складаються, нічого не відкидається:
Довгий project-файл можна розкласти на частини синтаксисом імпорту за шляхом:
@.claude/conventions/code-style.md
@.claude/conventions/testing.md
@.claude/conventions/workflow.md
Застереження: при запуску імпортовані файли розгортаються inline у місці посилання. Імпорти допомагають упорядкувати, але все одно завантажуються одразу й обсяг контексту не зменшують.
Головне: що стисліший CLAUDE.md, то більшу його частину Claude виконує; усе, що має бути гарантованим, належить hooks, а не CLAUDE.md.
Коли проєкт росте, одна й та сама робота повторюється, і skills її автоматизують. Урок про конкретне застосування: перевірку власної роботи. Якщо будувати лише один skill першим, то цей.
Зазвичай перевірка залежить від того, чи ви не забули попросити прогнати тести або прочитати diff. Пропустили раз — поганий код проходить. Verification skill прибирає цю залежність: коли Claude завершує, наприклад, рефакторинг, зміна відповідає опису skill, і він спрацьовує сам. Далі він:
Спрацювання визначає опис (description) skill, а після запуску він щоразу проходить ті самі кроки. Остання перевірка критична: зелені тести нічого не гарантують, якщо тест тихо послабили. «Готово» означає не «код виглядає правильно в diff», а «гейти запущено, результати побачено й явно зафіксовано».
Така ж форма підходить для будь-якої процедури, яку команда повторює: release checklist, рецепт міграції, перевірка перед PR. Емпіричне правило: якщо ви двічі набрали ту саму багатокрокову інструкцію, це кандидат на skill.
SKILL.md, а вся папка навколо нього.reference.md з детальним матеріалом і послатися на нього з SKILL.md; Claude читає його лише тоді, коли потрібна така глибина.check.sh, що запускає всі гейти.SKILL.md тримайте стислим (що робити), а важкий матеріал — довгі пояснення та виконувані скрипти — виносьте в супутні файли.SKILL.md: назва, description (тригер) і сама процедура..claude/skills проєкту — і вся команда автоматично перевіряє роботу однаково, без нагадувань.Головне: перший skill, який варто зробити, — автоматична перевірка (тести, diff, контроль послаблених тестів, звіт із доказами), закомічена в .claude/skills для всієї команди.
Permission modes дозволяють один раз вирішити, що Claude може виконувати без запиту, замість підтверджувати кожну дію окремо. Shift+Tab перемикає режими для щоденної роботи (manual, accept edits, plan); для роботи без нагляду основний режим — auto.
--dangerously-skip-permissions. Лише в ізольованому контейнері або VM.Shift+Tab циклічно перемикає manual, accept edits, plan і auto. Поточний режим завжди видно в status bar унизу.
Classifier захищає намір: шукає дії, що виходять за межі того, про що ви просили. Він покликаний блокувати:
Пропускає повсякденне: локальні правки в проєкті, встановлення залежностей із lock-файлу, запити лише на читання, push у власну гілку.
Підходить, коли поруч немає людини для підтверджень: CI-пайплайни, заплановані задачі, нічні batch-запуски. Виконується те, що й у Manual не потребує підтвердження (читання файлів у робочих каталогах), плюс заздалегідь схвалені інструменти; решта автоматично відхиляється. Пайплайн не зависає в очікуванні підтвердження, яке нікому дати.
Головне: для роботи без нагляду беріть auto (з тестами у Stop hook), для CI — don't ask, а bypass permissions — тільки в ізоляції.
Інструкція в CLAUDE.md («завжди форматуй після редагування») — прохання, а не гарантія; на довгому запуску без нагляду «зазвичай» недостатньо. Hook — детермінований код, що виконується у фіксованій точці агентного циклу, тож поведінка гарантується: правило переходить зі стану «Claude зазвичай слухається» у «Claude не може це пропустити».
За сесію Claude Code генерує близько 30 подій hooks, але регулярно потрібні кілька, прив'язані до точок циклу (старт сесії, надходження промпту, виклик інструментів, завершення ходу):
startup — якщо потрібно лише на свіжих стартах.Часта помилка: щоб повторно вставити контекст після compaction, використовуйте не PostCompact, а SessionStart з matcher compact — саме його вивід повертається в розмову.
Hook відповідає Claude, друкуючи JSON і завершуючись з кодом 0. Ключове поле — permissionDecision:
allow — пропустити виклик;deny — зупинити;ask — передати рішення користувачу.defer, але лише для неінтерактивних запусків -p, де зовнішній процес призупиняє інструмент і пізніше відновлює; потрібен рідко.{
"hookSpecificOutput": {
"hookEventName": "PreToolUse",
"permissionDecision": "deny",
"permissionDecisionReason": "...",
"updatedInput": { "command": "..." }
}
}
updatedInput дозволяє не блокувати, а переписати виклик (наприклад, вирізати секрет із bash-команди й виконати її). Застереження: updatedInput замінює весь об'єкт input, тож поля, які ви не змінюєте, треба повернути як є, інакше вони зникнуть.
SessionStart, UserPromptSubmit і UserPromptExpansion додається в контекст — на цьому й тримається hook збереження стану.Пастка: exit code 1 виглядає як помилка, але нічого не блокує — команда все одно виконується. Щоб зупинити дію, повертайте 2, а не 1.
if звужує до конкретної команди.deny для небезпечного виклику. Менш відомий і цікавіший — повернути updatedInput і переписати виклик.sk_live_ і замінює його на placeholder ще до виконання. Команда виконалась, робота зроблена, а секрет нікуди не потрапив — і так щоразу.Compaction відкидає багато деталей. SessionStart hook з matcher compact запускається одразу після compaction; нехай він друкує короткий перелік файлів, з якими ви працювали. Цей вивід повертається в контекст, і Claude продовжує з того ж місця, а не починає з нуля.
Hooks роблять правило, яке Claude виконує зазвичай, правилом, яке він виконує завжди. Не обмежуйтеся автоформатуванням: захищайте інструменти через PreToolUse, контролюйте завершення ходу через Stop, зберігайте стан через compact. Налаштування потребує трохи зусиль, але окупається першого ж разу, коли hook ловить проблему на запуску, за яким ви не стежили.
Головне: hook — єдиний спосіб гарантувати поведінку; блокуйте через exit 2 або permissionDecision (не exit 1), а updatedInput дає змогу виправити виклик замість заборони.
Коли задачі вже довіряєте, наступний крок — перестати запускати її вручну. Варіанти утворюють спектр: на одному кінці routines на керованій інфраструктурі Anthropic (нічого не будуєте), на іншому — headless mode та Agent SDK, що запускають Claude Code з вашого коду (повний контроль).
claude.ai/code/routines — назва, інструкції для кожної сесії, репозиторій, тригер./schedule з описом звичайною мовою, наприклад /schedule daily dependency audit at 9am.claude/, якщо промпт не називає іншу. Якщо запуск ініційований подією GitHub pull request, репозиторій PR стартує з head-коміту PR — за умови, що це перший репозиторій у routine. Щоб обмежити гілки для push, використовуйте branch protection rules або rulesets на GitHub; вони застосовуються до підключеного вами доступу GitHub, тож правило, яке ваш доступ може обійти, push не зупинить.Якщо задача потребує вашого середовища або логіки навколо запуску, використовуйте headless mode (у документації тепер — non-interactive mode). Основа — прапорець -p (--print): одноразовий запуск без інтерактивного UI, читає stdin, пише stdout і вбудовується в pipe, як будь-яка shell-утиліта.
claude -p "summarize the changes in this diff"
Сам по собі -p завантажує той самий контекст, що й інтерактивна сесія: hooks, skills, plugins, MCP servers, CLAUDE.md. Щоб усе це пропустити, додайте --bare.
Поєднайте JSON schema з форматом виводу JSON — Claude обмежить відповідь схемою. Об'єкт, що відповідає схемі, лежить у полі structured_output; його можна витягти через jq і передати в базу даних чи інший скрипт:
claude -p "Extract the exported function names from src/core/style.js" \
--output-format json \
--json-schema '{"type":"object","properties":{"functions":{"type":"array","items":{"type":"string"}}},"required":["functions"]}' \
| jq '.structured_output.functions'
Не обов'язково вміщати все в одну команду: збережіть session ID з JSON-виводу й відновіть сесію пізніше з повним контекстом. Зручно, коли перший прохід складає план, а другий його виконує.
claude --resume "$(jq -r .session_id /tmp/plan.json)"
--bare пропускає автовиявлення hooks, skills, plugins, MCP servers і CLAUDE.md.--settings або --mcp-config.ANTHROPIC_API_KEY.query і ті самі примітиви, що й CLI: передаєте промпт та опції — allowedTools (що Claude може робити), system prompt, permission mode.-p — коли задача потребує вашого пайплайну і даних через скрипт.--bare — коли CI потребує однакового налаштування на кожній машині.Головне: починайте з routines і спускайтеся спектром (-p → --bare → Agent SDK) лише тоді, коли задача справді потребує більшого контролю.
Найкраще місце для передачі рутини — pull request: там відбувається рев'ю і потрапляють зміни. Є два шляхи з різними задачами: керований сервіс, який просто вмикаєте, і GitHub Action, який налаштовуєте самі.
@claude review./code-review у своєму терміналі: вона робить власне рев'ю вашого diff, а прапорець --fix застосовує його знахідки до робочого дерева.Коли задача виходить за межі рев'ю — кастомний CI: реалізація змін за коментарем, звіти за розкладом, усе, для чого зазвичай пишуть workflow. Action запускає агента на коментарях у PR, за розкладом і на будь-якій події GitHub.
/install-github-app у Claude Code (потрібні права repo admin). Вона проводить через встановлення GitHub app і додавання секрету з Anthropic API key у репозиторій.anthropics/claude-code-action@v1.Основні inputs:
anthropic_api_key — потрібен, коли запуск викликає Claude API, якщо не використовується claude_code_oauth_token (з підписки Claude) або workload identity federation (через service account у Claude Console, без збереженого секрету). З хмарними провайдерами нижче не використовується.github_token — необов'язковий; без нього action автентифікується як встановлений Claude GitHub app. Передавайте лише для перевизначення.trigger_phrase — що action слухає в коментарях; за замовчуванням @claude.use_bedrock / use_vertex / use_foundry — маршрутизація через Amazon Bedrock, Google Cloud Agent Platform або Microsoft Foundry замість Claude API, з входом через ваш хмарний акаунт замість API key.prompt — інструкція для автоматичного запуску: якщо задано, Claude працює на подію без згадки; якщо ні — чекає trigger phrase.claude_args — рядок CLI-аргументів, що передаються напряму в Claude Code.Файл .github/workflows/claude.yaml слухає @claude у коментарях до PR та issues. У permissions job треба надати id-token: write, щоб action міг увійти як Claude GitHub app. Основний крок:
- uses: anthropics/claude-code-action@v1
with:
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
trigger_phrase: "@claude"
claude_args: "--max-turns 5 --model claude-sonnet-5"
Коли хтось пише в PR, наприклад, @claude implement the spec in the linked Linear issue, action підхоплює задачу: Claude пушить коміти й коментує, що зробив.
workflow_dispatch, щоб запускати вручну з вкладки Actions.--max-turns 5 — жорстка межа агентного циклу, щоб він не працював нескінченно./install-github-app для налаштування, один workflow для згадок @claude, один для cron, усе тонке налаштування — в claude_args.Головне: починайте з керованого Code Review, а на GitHub Action переходьте, щойно Claude має щось робити в CI, а не лише коментувати.
Claude працював без вашого нагляду й каже, що закінчив. Перед відвантаженням треба перевірити те, чого ви не бачили. Принцип: перевіряйте пропорційно до свободи, яку дали запуску. Короткій сесії, яку ви читали в процесі, вистачить погляду; запуск без нагляду чи job у CI потребує справжньої перевірки з відновленням подій постфактум. Що менше ви бачили, то більше перевіряєте.
/code-review, щоб пройтися змінами й позначити проблеми.git diff.Головне питання: чи пройшли тести і чи Claude справді їх запускав, а не лише стверджує. Не покладайтеся на довіру — зробіть hook, який неможливо пропустити:
Ключ — exit code: hook, що завершується з exit 2, передає помилку прямо Claude, і той виправляє її без вашого втручання. Перевірка спрацьовує на кожному запуску, незалежно від того, чи ви про неї згадали.
Рев'ю силами subagent, яке ви робили б перед PR, застосовне й тут. Відкрийте нову сесію або subagent і попросіть переглянути змінений код без пам'яті про те, як його створювали. Не маючи прив'язаності до підходу, такий рецензент помічає те, що автор собі «пояснив» і пропустив.
Головне: серйозність перевірки має відповідати мірі відсутності нагляду: diff замість підсумку, тести як hook-гейт, незалежне рев'ю свіжою сесією.
Налаштування, якому ви довіряєте, цінніше, коли ним користується вся команда. Проблема — перенесення: копіювати .claude зі skills, subagents і hooks між машинами й сподіватися на синхронність ненадійно. Plugin — спосіб, яким Claude Code пакує налаштування й передає його іншим. Дві сторони: використання чужих plugins і пакування власних.
settings.json. Одна версія — одне встановлення./plugin install github@claude-plugins-official
/reload-plugins і Claude Code сам виконує reload./reload-plugins --force, щоб усе одно активувати plugin./plugin marketplace add your-org/claude-plugins
settings.json, але Claude Code враховує з нього лише два ключі: agent і ключ status line для subagents.agent підвищує один із subagents plugin до головного потоку разом з його system prompt, обмеженнями інструментів і моделлю. Тобто ввімкнення plugin може змінити поведінку Claude Code за замовчуванням — ще одна причина дивитися до ввімкнення.Коли .claude працює, пакуйте його замість копіювання. Перебудовувати нічого не треба — plugin має ту саму структуру:
agents;hooks/hooks.json і .mcp.json у корені plugin.Claude Code знаходить компоненти за конвенцією, структура каталогів робить більшу частину роботи.
Необов'язковий маніфест .claude-plugin/plugin.json містить name, version, description, author:
{
"name": "svg-splitter-review",
"version": "0.1.0",
"description": "Reviews the SVG Splitter repo",
"author": { "name": "Lewis Menelaws" }
}
name. Воно задає namespace: skill викликається як /plugin-name:skill-name, тобто тут /svg-splitter-review:<skill-name>, що запобігає колізіям з чужими skills..claude, щойно він запрацював: один маніфест, одне встановлення.Головне: plugin перетворює перевірене налаштування на одну версіоновану одиницю для всієї команди (краще через приватний marketplace), але чужі plugins треба переглядати до встановлення, бо їхні hooks і ключ agent змінюють поведінку Claude Code.
Як обирати рівень effort, щоб не переплачувати токенами й не впиратися в ліміти, і коли варто змінювати модель, а коли лише effort.
--effort на одну сесію або команда /effort для цієї й наступних сесій.Навіщо. Коли для всіх задач стоїть найвищий effort, ліміти закінчуються швидше, а прості задачі виконуються довше.
Дві сторінки документації: як ставити задачі, щоб Claude робив правильно з першого разу, і що саме займає контекст сесії.
Інтерактивна симуляція сесії: що завантажується ще до першого промпту (CLAUDE.md, пам'ять, описи skills, назви MCP-інструментів), скільки додає кожне читання файлу й кожен хук, як субагент тримає великі читання поза основним контекстом і що зберігається після /compact.
Навіщо. Короткий промпт без контексту змушує Claude вгадувати, і далі починається цикл правок. А кожен підключений MCP-сервер і skill займає контекст у кожній сесії, навіть коли не потрібен.
Окрім вибору моделі, другий важіль вартості й витрати токенів — рівень effort. Його треба підбирати під складність задачі: невідповідність у будь-який бік коштує грошей. Стартова точка — значення за замовчуванням.
| Область дії | Спосіб |
|---|---|
| Лише поточна сесія | Прапорець --effort <рівень> під час запуску Claude Code |
| Поточна й наступні сесії | /effort без аргументів — інтерактивний слайдер; /effort <рівень> — задати напряму; /effort auto — повернути default моделі |
| Поточна й наступні сесії | У /model під час вибору моделі — стрілки ліворуч/праворуч рухають слайдер effort |
| Поточна й наступні сесії | Ключ effortLevel у файлі settings: low, medium, high або xhigh |
| Поточна й наступні сесії | Змінна оточення CLAUDE_CODE_EFFORT_LEVEL — назва рівня або auto |
| Один skill чи subagent | Поле effort у frontmatter markdown-файлу skill/subagent — перевизначає рівень на час його роботи |
/effort, переходить у наступну сесію; для одноразового запуску використовуйте --effort.max настільки ресурсоємний, що Claude Code робить його лише сесійним (виняток — якщо задати через змінну оточення), щоб його не можна було забути ввімкненим.xhigh, а для суттєвих задач Claude ще й оркеструє dynamic workflows, розподіляючи роботу між кількома агентами./effort; якщо запросити такий через /effort чи --effort, Claude Code працює на рівні ліміту й повідомляє про це.Один і той самий промпт тричі на одній моделі — на low, default і max — із порівнянням, скільки роботи йде на однаковий результат. Задача навмисно нудна (невеликий скрипт CSV→JSON із тестом на прикладі), щоб різниці між рівнями було де проявитися. Сам програвач інтерактивний.
Три окремі сесії, у кожній ті самі чотири кроки. Порівняння складаєте самі, бо /usage показує лише поточну сесію: наприкінці кожного прогону записуйте кількість токенів, виходьте й починайте наступний із чистого аркуша.
# прогін 1 · low
mkdir effort-low && cd effort-low && claude --effort low
# прогін 2 · default
cd .. && mkdir effort-default && cd effort-default && claude
# потім виконати /effort auto
# прогін 3 · max
cd .. && mkdir effort-max && cd effort-max && claude --effort max
Прапорець або /effort auto потрібні, бо рівні від low до xhigh, задані через /effort, зберігаються між сесіями.csv_to_json.py, що конвертує CSV у JSON, і протестувати його на sample.csv із трьома рядками (колонки name,team,start_date)./usage і знайти загальну кількість токенів сесії (решта екрана залежить від плану)./exit і повернутися до кроку 1 для наступного рівня.Очікуваний результат: кількість токенів зростає від low до max, а в усіх трьох папках лежить робочий конвертер. Порівняйте три скрипти поруч — різниця в обсязі збудованого і є тим, за що ви заплатили.
Уся робота з effort зводиться до циклу: почати з default, подивитися на результат, коригувати на один рівень за раз. Так ви знатимете, який рівень потрібен кожній задачі, і зможете пояснити це колезі чи адміну.
/effort, settings, пріоритетів і організаційних лімітів.Головне: effort регулює старанність, а не знання моделі; починайте з default, рухайтеся на один рівень за раз і міняйте модель лише тоді, коли effort не допомагає, — після зміни моделі знову з default.
Claude Code — агентне середовище: на відміну від чат-бота, воно саме читає файли, запускає команди, вносить зміни й автономно розв'язує задачі, поки ви спостерігаєте, коригуєте чи взагалі відходите. Ви описуєте, що потрібно, а Claude досліджує, планує й реалізує. Поради зібрано з досвіду внутрішніх команд Anthropic та інженерів, які працюють із різними кодовими базами й мовами.
Головне обмеження, з якого випливає більшість порад: контекстне вікно швидко заповнюється, а продуктивність моделі падає в міру заповнення. У вікні — уся розмова: кожне повідомлення, кожен прочитаний файл, кожен вивід команди. Одна сесія налагодження чи дослідження коду може з'їсти десятки тисяч токенів. Коли вікно майже повне, Claude починає «забувати» ранні інструкції й частіше помиляється. Тому контекст — найважливіший ресурс. Стежити за ним можна через кастомний status line; є також інтерактивна демонстрація заповнення контексту (див. третій блок) і поради зі зменшення витрати токенів.
Claude зупиняється, коли робота виглядає готовою. Без перевірки, яку він може запустити, інших сигналів немає, і цикл верифікації — це ви: кожна помилка чекає, доки ви її помітите. Дайте Claude щось із результатом pass/fail — і цикл замкнеться сам: зробив, запустив перевірку, прочитав результат, ітерує до проходження. Це різниця між сесією, яку треба пильнувати, і сесією, від якої можна відійти.
Перевірка — будь-що, що повертає читабельний сигнал у розмову: набір тестів, exit code збірки, лінтер, скрипт, що порівнює вивід із фікстурою, скриншот браузера проти дизайну. Після того як перевірка Claude пройшла, запустіть /verify самі, щоб підтвердити зміну на запущеному застосунку.
| Стратегія | Було | Стало |
|---|---|---|
| Задати критерії перевірки | «зроби функцію валідації email» | «напиши validateEmail; приклади: user@example.com → true, invalid → false, user@.com → false; після реалізації запусти тести» |
| Перевіряти UI візуально | «зроби дашборд гарнішим» | «[скриншот] реалізуй цей дизайн, зроби скриншот результату, порівняй з оригіналом, перелічи відмінності й виправ» |
| Лікувати причину, а не симптом | «збірка падає» | «збірка падає з помилкою [текст]; виправ і переконайся, що збирається; усунь першопричину, не глуши помилку» |
Коли перевірка є, вирішіть, наскільки жорстко вона блокує зупинку:
/goal. Окремий evaluator перевіряє її після кожного ходу, і Claude працює, доки ціль не досягнута. Якщо Claude застрягне, Claude Code зрештою зупинить прогін, залишивши ціль встановленою.Кожен наступний варіант вимагає більше налаштування, але менше вашої уваги. Промпт-варіант працює на будь-якій задачі вже сьогодні; /goal і Stop hook дозволяють коректно завершити прогін без вашої участі.
Вимагайте доказів, а не тверджень про успіх: вивід тестів, виконану команду та її результат, скриншот. Переглянути докази швидше, ніж перезапускати перевірку самому, і це працює навіть для сесій, за якими ви не стежили.
Якщо дозволити Claude одразу писати код, він може розв'язати не ту задачу. Plan mode відділяє дослідження від виконання. Рекомендований процес із чотирьох фаз:
Shift+Tab, доки в статус-барі не з'явиться ⏸ plan mode on, або запустити claude --permission-mode plan. Claude читає файли й відповідає, нічого не змінюючи. Приклад: «прочитай /src/auth, розберися, як працюють сесії й логін, і як ми зберігаємо секрети в env-змінних».Ctrl+G відкриває план у текстовому редакторі для правок до того, як Claude продовжить.Shift+Tab) і дати Claude кодити, звіряючись із планом: «реалізуй OAuth flow за планом, напиши тести на callback handler, запусти тести й виправ падіння».Plan mode має накладні витрати. Для дрібних задач із ясним обсягом (виправити одруківку, додати рядок логування, перейменувати змінну) просіть зробити напряму. Планування корисне, коли підхід неочевидний, зміна зачіпає кілька файлів або код вам незнайомий. Якщо diff можна описати одним реченням — план не потрібен.
Що точніші інструкції, то менше виправлень. Claude вміє вгадувати намір, але не читає думки: вказуйте конкретні файли, обмеження, приклади патернів.
| Стратегія | Було | Стало |
|---|---|---|
| Окреслити задачу: файл, сценарій, вимоги до тестів | «додай тести для foo.py» | «напиши тест для foo.py на граничний випадок, коли користувач розлогінений; без моків» |
| Вказати джерело відповіді | «чому в ExecutionFactory такий дивний API?» | «переглянь git-історію ExecutionFactory і підсумуй, як склався його API» |
| Послатися на наявні патерни | «додай віджет календаря» | «подивись, як зроблено віджети на головній (HotDogWidget.php — хороший приклад), і за тим самим патерном зроби календар із вибором місяця й перегортанням років; без нових бібліотек, лише ті, що вже є в проєкті» |
| Описати симптом, ймовірне місце й що означає «виправлено» | «виправ баг логіну» | «після таймауту сесії логін падає; перевір auth flow у src/auth/, особливо оновлення токена; напиши тест, що відтворює проблему, потім виправ» |
Розмиті промпти доречні, коли ви досліджуєте й можете дозволити собі коригувати курс: запит на кшталт «що б ти покращив у цьому файлі?» може підсвітити те, про що ви б і не спитали.
Багатий вміст (Provide rich content):
@ замість опису, де лежить код, — Claude прочитає файл перед відповіддю./permissions.cat error.log | claude -p "explain this error".Кілька кроків налаштування суттєво підвищують ефективність у всіх сесіях (огляд розширень — на сторінці Extend Claude Code).
/init генерує стартовий CLAUDE.md за структурою проєкту; далі його доопрацьовують.# Code style
- Use ES modules (import/export), not CommonJS (require)
# Workflow
- Typecheck after a series of code changes
- Prefer running single tests, not the whole suite/context показує, чи файл завантажено. Оскільки він вантажиться щоразу, туди йде лише загальнозастосовне; знання чи процеси, потрібні зрідка, оформлюють як skills — вони підвантажуються на вимогу.| Включати | Не включати |
|---|---|
| Bash-команди, які Claude не вгадає | Те, що Claude зрозуміє з коду |
| Правила стилю, що відрізняються від стандартних | Стандартні конвенції мови |
| Інструкції з тестування, бажані test runners | Детальну документацію API (краще посилання) |
| Етикет репозиторію (іменування гілок, PR-конвенції) | Інформацію, що часто змінюється |
| Специфічні архітектурні рішення проєкту | Довгі пояснення й туторіали |
| Особливості dev-середовища (обов'язкові env vars) | Пофайловий опис кодової бази |
| Неочевидні підводні камені й поведінку | Самоочевидне на кшталт «пиши чистий код» |
/doctor пропонує вирізати те, що виводиться з коду.@path/to/import./permissions, а команди в пісочниці виконуються без питань через /sandbox. Manual mode — коли хочете самі схвалювати правки й команди.npm run lint чи git commit;gh, aws, gcloud, sentry-cli — це найекономніший щодо контексту спосіб працювати із зовнішніми сервісами.gh: Claude вміє створювати issues, відкривати PR, читати коментарі. Без нього лишається GitHub API, але неавтентифіковані запити часто впираються в rate limits.--help, потім використай його для A, B, C».Підключення: claude mcp add з іменем і URL або командою, наприклад claude mcp add --transport http notion https://mcp.notion.com/mcp. Через MCP Claude може реалізовувати фічі з issue-трекерів, робити запити до баз даних, аналізувати моніторинг, інтегрувати дизайни з Figma, автоматизувати процеси.
Hooks — для дій, що мають відбуватися щоразу без винятків. Це скрипти, які запускаються автоматично в певних точках роботи Claude. На відміну від порад у CLAUDE.md, hooks детерміновані й гарантують виконання. Claude може написати їх сам: «hook, що запускає eslint після кожної правки файлу», «hook, що забороняє запис у папку migrations». Вручну — редагування .claude/settings.json; переглянути налаштоване — /hooks.
Skills — файли SKILL.md у .claude/skills/<назва>/ зі специфічними знаннями проєкту, команди чи домену. Claude застосовує їх автоматично, коли доречно, або їх викликають напряму через /skill-name. Приклад знаннєвого skill:
---
name: api-conventions
description: REST API design conventions for our services
---
- kebab-case for URL paths, camelCase for JSON properties
- Always paginate list endpoints; version APIs in the path (/v1/)
Skill може описувати й повторюваний workflow. Приклад fix-issue із disable-model-invocation: true і підстановкою $ARGUMENTS: отримати деталі через gh issue view, зрозуміти проблему, знайти релевантні файли, внести зміни, написати й запустити тести, пройти лінтинг і type checking, скласти описовий commit message, запушити й створити PR. Виклик: /fix-issue 1234. disable-model-invocation: true ставлять для workflow з побічними ефектами, які мають запускатися лише вручну.
Спеціалізовані асистенти визначаються в .claude/agents/; кожен працює у власному контексті з власним набором дозволених інструментів. Корисні для задач, що читають багато файлів або потребують вузького фокуса, — без засмічення основної розмови. Приклад security-reviewer: frontmatter tools: Read, Grep, Glob, Bash, model: opus; інструкція — роль senior security engineer, перевірка ін'єкцій (SQL, XSS, command injection), вад автентифікації й авторизації, секретів у коді, небезпечної обробки даних, з посиланнями на рядки й пропозиціями виправлень. Викликати явно: «Use a subagent to review this code for security issues».
/plugin відкриває маркетплейс. Plugins пакують skills, hooks, subagents і MCP-сервери в одну встановлювану одиницю (від спільноти й Anthropic) без додаткового налаштування. Для типізованих мов варто поставити code intelligence plugin — точна навігація по символах і автоматичне виявлення помилок після правок. Як вибирати між skills, subagents, hooks і MCP — див. Extend Claude Code.
Питайте Claude те саме, що спитали б досвідченого інженера: як влаштоване логування; як додати новий API endpoint; що робить async move { ... } у рядку 134 foo.rs; які граничні випадки обробляє CustomerOnboardingFlowImpl; чому в рядку 333 викликається foo(), а не bar(). Це ефективний онбординг: швидше входження й менше навантаження на колег. Спеціальний промптинг не потрібен.
AskUserQuestion: про технічну реалізацію, UI/UX, граничні випадки, ризики й компроміси — без очевидних питань, з фокусом на складних місцях, про які ви могли не подумати; продовжувати, доки все не покрито, потім записати повну специфікацію в SPEC.md.Розмови зберігаються й оборотні. Найкращі результати дають короткі цикли зворотного зв'язку:
Esc — зупинити Claude посеред дії; контекст зберігається, можна перенаправити.Esc + Esc або /rewind — меню відкату: відновити попередній стан розмови й коду або підсумувати від вибраного повідомлення./clear — скинути контекст між непов'язаними задачами.Якщо ви виправляли Claude з того самого питання більше двох разів, контекст забитий невдалими спробами: /clear і новий, конкретніший промпт з урахуванням вивченого. Чиста сесія з кращим промптом майже завжди переважає довгу сесію з накопиченими виправленнями.
/clear між задачами./compact <instructions>, наприклад /compact Focus on the API changes.Esc + Esc або /rewind, вибрати checkpoint і Summarize from here (стискає повідомлення від цієї точки, раніший контекст лишається цілим) чи Summarize up to here (стискає раніші, недавні лишаються повністю)./btw: відповідь не потрапляє в історію, контекст не росте.Оскільки контекст — фундаментальне обмеження, дослідження виносять у subagents: вони читають файли у власних вікнах і повертають лише підсумки. Приклад: «через subagents з'ясуй, як наша автентифікація оновлює токени і чи є готові OAuth-утиліти для повторного використання». Subagents також годяться для перевірки після реалізації (див. adversarial review нижче).
Esc або /rewind: відновити лише розмову, лише код, обидва, або підсумувати від вибраного повідомлення.Давайте сесіям імена через /rename і ставтеся до них як до гілок: кожен напрям роботи має власний постійний контекст. Розмови зберігаються локально, тож для багатоденних задач не треба знову пояснювати контекст. claude --continue — продовжити останню, claude --resume — вибрати зі списку. Імена мають бути описовими, наприклад oauth-migration.
claude -p "prompt" запускає Claude без інтерактивного вводу — для CI, pre-commit hooks і скриптів (headless). Прогін усе одно створює сесію, яку можна відновити, якщо не передати --no-session-persistence. Формати виводу:
# разовий запит, звичайний текст
claude -p "Explain what this project does"
# структурований вивід: один JSON-об'єкт з полем result
claude -p "List all API endpoints" --output-format json
# потоковий: один JSON-об'єкт на рядок, першою йде подія init
claude -p "Analyze this log file" --output-format stream-json --verbose
Паралельні сесії пришвидшують розробку, дають ізольовані експерименти й складні процеси. Варіанти — від ручної координації до автоматичної:
claude agents запускає сесії, що працюють у фоні, і показує їх на одному екрані.Окрім паралелізму, свіжий контекст покращує code review: Claude не упереджений до щойно написаного ним коду. Патерн Writer/Reviewer: сесія A реалізує rate limiter для API; сесія B рев'юїть @src/middleware/rateLimiter.ts на граничні випадки, race conditions і відповідність наявним middleware-патернам; A отримує ці зауваження й виправляє. Аналогічно з тестами: один Claude пише тести, інший — код, що їх проходить.
Для великих міграцій чи аналізу роботу розподіляють на багато паралельних викликів. /batch <instruction> розбиває зміну на 5–30 subagents, кожен у власному worktree. Або керуйте fan-out власним скриптом через claude -p:
for file in $(cat files.txt); do
claude -p "Migrate $file from Python 2 to Python 3. Return OK or FAIL." \
--allowedTools "Edit,Bash(git commit *)" \
--permission-mode dontAsk
done--allowedTools наперед дозволяє потрібні інструменти; --permission-mode dontAsk відхиляє все інше, що вимагало б схвалення, — важливо для автономних прогонів (хоча встановлений mod усе ж може схвалити частину викликів). Інтеграція в наявні пайплайни: claude -p "<your prompt>" --output-format json | your_command.
Для безперервного виконання з фоновими перевірками безпеки: класифікатор переглядає команди перед запуском, блокує scope escalation, невідому інфраструктуру й дії під впливом ворожого контенту, а рутинна робота йде без підтверджень.
claude --permission-mode auto -p "fix all lint errors"
Якщо класифікатор неодноразово блокує дії в неінтерактивному прогоні з -p, Claude Code не зупиняє прогін; що відбувається натомість і які пороги — описано в розділі про fallback auto mode.
/code-review: шукає баги в поточному diff у свіжому subagent і повертає знахідки в сесію.| Патерн | Що відбувається | Виправлення |
|---|---|---|
| Сесія «все в одну купу» (kitchen sink) | Одна задача, потім стороннє питання, потім знову перша — контекст повний нерелевантного | /clear між непов'язаними задачами |
| Виправлення по колу | Claude помиляється, ви виправляєте, знову не так, знову виправляєте — контекст забруднений невдалими підходами | Після двох невдалих виправлень — /clear і кращий початковий промпт з урахуванням вивченого |
| Переспецифікований CLAUDE.md | Файл задовгий, половину Claude ігнорує — важливі правила тонуть у шумі | Безжально скорочувати; якщо Claude і так робить правильно без інструкції — видалити або перетворити на hook |
| Розрив між довірою й перевіркою | Правдоподібна реалізація, що не обробляє граничні випадки | Завжди давати перевірку (тести, скрипти, скриншоти). Не можете перевірити — не шипте |
| Нескінченне дослідження | «Розберися» без меж — Claude читає сотні файлів і заповнює контекст | Вузько окреслювати дослідження або виносити в subagents |
Ці патерни — стартові точки, а не догма. Іноді контекст варто накопичувати (ви глибоко в одній складній проблемі й історія цінна); іноді планування зайве, бо задача дослідницька; іноді розмитий промпт — саме те, що треба, щоб побачити, як Claude інтерпретує проблему. Помічайте, що спрацювало (структура промпту, наданий контекст, режим), а коли Claude буксує — питайте чому: зашумлений контекст, розмитий промпт, задача завелика для одного проходу? З часом з'явиться чуття, коли бути конкретним, а коли відкритим, коли планувати, а коли досліджувати, коли чистити контекст, а коли дати йому накопичуватися.
Головне: контекстне вікно — головний ресурс, тому чистьте й делегуйте його, а якість забезпечуйте перевірками, які Claude може запустити сам (тести, /goal, Stop hook, незалежний review). Розділяйте дослідження, план і реалізацію та масштабуйтеся через headless-режим, паралельні сесії й fan-out.
Контекстне вікно містить усе, що Claude знає про сесію: ваші інструкції, прочитані файли, власні відповіді Claude і вміст, який у терміналі взагалі не видно. На сторінці є інтерактивна часова шкала повної сесії від старту до стиснення; нижче — її письмовий зміст.
Реалістичний сценарій із типовими кількостями токенів:
--append-system-prompt./compact, що замінює розмову структурованим підсумком. Більшість стартового вмісту перезавантажується автоматично.При стисненні довгої сесії Claude Code підсумовує історію, щоб вона вмістилася у вікно. Починаючи з v2.1.198, запит на підсумовування успадковує налаштування extended thinking сесії: якщо thinking увімкнено — підсумок генерується з ним, якщо ні — без. Це впливає лише на спосіб створення підсумку; налаштування сесії після цього не змінюються. Доля вмісту залежить від того, як він потрапив у контекст:
| Механізм | Після стиснення |
|---|---|
| System prompt і output style | Продовжують діяти |
| CLAUDE.md у корені проєкту й rules без обмеження за шляхами | Повторно інжектуються з диска |
| Auto memory | Повторно інжектується з диска |
| Описи skills | Перебудовуються з поточних skills і інжектуються знову (потрібен Claude Code v2.1.304 або новіший) |
| Знімок git status | Якщо сесія стартувала з ним — Claude Code читає свіжий з репозиторію |
| План, написаний у plan mode | Повторно інжектується з диска |
Rules із frontmatter paths: | Перезавантажуються на вимогу |
| Вкладені CLAUDE.md у підкаталогах | Перезавантажуються на вимогу |
| Файли, які Claude читав чи редагував | Перечитуються до п'яти, починаючи з нещодавно змінених |
| Тіла викликаних skills | Інжектуються знову з лімітом 5 000 токенів на skill і 25 000 загалом; найстаріші відкидаються першими |
| Фонові команди й фонові subagents | Продовжують працювати; Claude Code нагадує Claude, які ще активні, щоб той не запустив дублікат |
| Контекст, раніше доданий hooks | Підсумовується разом з рештою розмови |
SessionStart hooks, що відповідають джерелу compact | Claude Code запускає їх і додає їхній вивід до стиснутого контексту |
Referenced file замість Read.paths: або перенесіть його в CLAUDE.md у корені проєкту.SKILL.md.При наближенні до ліміту Claude Code стискає контекст автоматично, тож повне вікно не завершує сесію; автоматичний прохід працює так само, як /compact. Є також окреме налаштування стиснення розмови, залишеної без активності (idle compaction). Діяти можна й до автоматичного проходу:
/compact з інструкцією, наприклад /compact focus on the auth bug fix, перед довгою новою задачею — підсумок збереже вибране вами, а не те, що вгадає автоматика./rewind, вибрати повідомлення, Summarize from here або Summarize up to here./autocompact з кількістю токенів, наприклад /autocompact 500k, задає, наскільки має заповнитися вікно до автоматичного проходу./clear при переході до непов'язаної роботи — стара розмова витісняє потрібні файли й коштує токенів у кожному повідомленні.Якщо потрібне більше вікно, а не коротша розмова: моделі Fable, Sonnet 5 і новіші, Haiku 5.5, Opus 4.6 і новіші та Sonnet 4.6 підтримують вікно на 1 млн токенів (доступність залежить від плану, вибирається варіант моделі [1m]). Стиснення на більшому ліміті працює так само.
Поріг автоматичного стиснення залежить від моделі й конфігурації (є таблиця порогів за замовчуванням для кожної моделі). Якщо Claude Code неправильно визначає розмір вікна для вашого model ID — наприклад, для аліасу LLM gateway, — його можна скоригувати в налаштуваннях моделі.
У візуалізації числа типові. Реальне використання показує /context — живу розбивку за категоріями з порадами з оптимізації, включно з тим, які CLAUDE.md і файли auto memory завантажено. /memory відкриває ці файли для редагування.
Головне: кореневий CLAUDE.md, auto memory, план і описи skills повертаються після стиснення з диска, а path-scoped rules і вкладені CLAUDE.md лише підвантажуються знову на вимогу, великі skills обрізаються, тож критичне тримайте в кореневому CLAUDE.md і на початку SKILL.md. Керуйте заповненням заздалегідь через /compact з фокусом, /rewind, /autocompact, /clear і subagents, а реальний стан дивіться в /context.
Для ролі CTO
Для керівників інженерії, платформи й безпеки в організаціях, які вже користуються Claude Code. Дванадцять практик для кожного етапу життєвого циклу розробки, щоб погодження, рев'ю й передачі між командами перестали гальмувати роботу. Курс написано для великих компаній, зокрема регульованих, де код не можна випускати без належного рев'ю.
intent.md, короткий файл у git про те, що потрібно, навіщо і з якими обмеженнями, на специфікацію вимог і дизайну за одну сесію з Claude.intent.md, з якого знову починається планування.Плюс вступ «Що змінюється і з чого почати» та підсумки з ресурсами.
Навіщо. Команда вже працює з Claude Code. Наступний крок — перебудувати рев'ю, погодження й деплой так, щоб вони не стали вузьким місцем.
AI вже пише код дуже швидко, а процеси навколо коду не встигають. SDLC має шість етапів: Plan, Design, Build, Test, Deploy, Maintain. Курс показує AI-native варіант кожного з них; більшість компаній зараз десь посередині між двома полюсами.
intent.md, який читає людина й може виконати машина.CLAUDE.md і skills.intent.md.За рішення, що потребують судження, відповідають люди.
Plays (практики) згруповано за шістьма нелінійними етапами. У кожному є: що змінюється, як почати, кроки, governance, метрики успіху. Залежності вказано в розділі «Prerequisites» і на графі: суцільна стрілка означає обов'язкову залежність, пунктирна — корисну, але необов'язкову.
Plays модульні, тож етапи можна трансформувати в будь-якому порядку. Без передумов можна почати з шести:
intent.md;CLAUDE.md;Решта залежить від них (за розділами «Getting started» уроків):
intent.md + skills бренду, безпеки, compliance, UX.intent.md/spec.md, якщо є; CLAUDE.md допомагає.CLAUDE.md; feedback loop допомагає.CLAUDE.md + feedback loop.CLAUDE.md, skills (для політик), subagents.intent.md, PR review, hooks, rollback у CI/CD.Головне: AI поширюється з написання коду на всі шість етапів, а відповідальність лишається за людьми. Почніть з одного з шести plays без передумов і рухайтеся графом залежностей.
Процес стартує з intent.md. Джерело — ідея людини, тікет або alert про інцидент (етап Maintain). Автор ідеї обговорює її з Claude і отримує proto-spec у Markdown. Йому не треба вмовляти продуктову команду це оформити. Хай звідки прийшов intent, product owner перевіряє й виправляє написаний агентом файл, і лише потім його комітять.
intent.md своїми словами: що треба, навіщо, з якими обмеженнями. Повторювані процеси оформлюють як skills.intent.md, спільне версіоноване сховище, за яким стежить product owner.intent/ у репозиторії продукту, поруч із кодом. Окремий intent-репозиторій варто заводити лише тоді, коли intent охоплює багато репозиторіїв; у monorepo це директорія. Співіснування з Jira чи інструментом вимог описано в уроці 4.intent.md за шаблоном організації. Шаблон може бути skill від технічного фахівця, підписаним лідом. Розділи: проблема, бажаний результат, користувачі й системи, обмеження, відкриті питання.# Intent: claims status self-service
Author: J. Ortiz (claims operations). Status: draft.
## Problem
Customers phone the contact center to ask where their claim is.
Handlers spend roughly a third of call time on status-only queries.
## Proposed outcome
Customers see claim status, next step and expected date in the portal.
## Affected users and systems
Claims handlers, portal team, claims-core API.
## Constraints
No new PII in the portal session. Existing authentication only.
## Open questions
Do third-party loss adjusters need access too?
Доказ — закомічений intent.md з автором, часом і історією змін у Git. Схвалює product owner. Рішення пустити intent у Design чи відхилити фіксується як merge або закрите рев'ю.
intent.md. Очікується, що тижні збору вимог скоротяться до годин.intent.md після першого коміту spec.md для тієї самої зміни.Головне: автор із Claude за години перетворює ідею на версіонований intent.md без тижнів backlog-процедур, а product owner лише перевіряє й схвалює.
Зі схваленого intent.md Claude робить специфікацію вимог і дизайну за skills організації (бренд, безпека, compliance, UX). Product owner її рецензує, але не пише. Інженери отримують документ, за яким можна планувати, і в ньому вже позначено ризики. Для front-end product owner робить макет у Claude Design з intent.md, доопрацьовує його й експортує в Claude Code.
intent.md пише специфікацію в межах skills і позначає ризики.intent.md і політики бренду, безпеки, compliance та UX у вигляді skills.intent.md.intent.md, проганяє крок зі skills і відкриває PR зі spec.md (технічна частина — у play про CI/CD). Product owner тоді долучається вже на рев'ю.spec.md поруч з intent.md: пара файлів показує, що просили і що вирішили.Промпт по суті: прочитай intent.md, підготуй специфікацію інтеграції в наявну кодову базу, застосуй skills (бренд, безпека, UX), запиши як spec.md для інженерів і чітко опиши ризики, особливо конфлікти політик. Контекст: claims-api — бекенд порталу, claims-core — стара внутрішня система заявок.
# Spec: claims status self-service
Skills applied: secure-api-review, brand-voice, portal-ux.
## Requirements
- R1. A signed-in customer sees status, next step and expected date for each open claim.
- R2. Status is one of four states: received, in review, approved, paid.
- R3. The response carries those three fields and nothing else.
- R4. What the customer sees is at most 60 seconds old.
## Design
- New endpoint GET /claims/{id}/status in claims-api, behind the gateway JWT.
- claims-api reads the claim from claims-core. The portal never calls claims-core.
- New StatusPanel on the portal claims page. It caches each answer for 60 seconds.
Далі spec показує, як виконано кожне обмеження intent. «Жодних нових PII» закриває R3: жодне з трьох полів не позначене pii. «Лише наявна автентифікація» закриває gateway JWT без нових логінів і ролей. Ризики:
portal-ux вимагає дату біля кожного статусу, а brand-voice забороняє подавати дату виплати як зобов'язання. Пропозиція: підпис «Estimated date». Власник: compliance.claims-core витримує 50 запитів/с. 60-секундний кеш має тримати навантаження нижче ліміту, але навантажувальний тест не проводили. Власник: команда claims-core.Вимоги пронумеровано, щоб план і рев'ю могли на них посилатися.
Конфлікти політик видно одразу, а не на рев'ю через тижні, бо skills застосовуються як обмеження під час написання. Spec, промпт і версії skills зберігаються у VCS. Product owner підписує spec і передає ризики власникам політик.
intent.md і spec.md порівняно зі старим циклом «вимоги + дизайн».spec.md після першого коміту plan.md (видно з git log).Головне: вимоги й дизайн вміщаються в одну сесію. Claude пише spec.md за skills і сам позначає конфлікти політик, а людина рецензує й ухвалює рішення.
Інженер стартує сесію в plan mode з spec.md, відповідає на уточнювальні питання Claude і доопрацьовує план, доки той його не влаштує.
plan.md, і наступні етапи звіряються з нею.intent.md/spec.md, якщо є; CLAUDE.md допомагає.intent.md та spec.md. Попросити план: які файли змінюються, у якому порядку, які тести це доведуть.plan.md: він іде в audit trail, і PR review звіряє з ним diff.plan.md у тому самому коміті. Синхронність можна забезпечити hook-ом.# Plan: claims status self-service (from intent.md and spec.md)
## Files that change
portal/src/claims/StatusPanel.tsx (new), claims-api/routes/status.py, claims-api/tests/test_status.py
## Order of work
1. Add the status endpoint behind existing auth (R1, R2, R3).
2. Panel against the endpoint, with the 60-second cache (R1, R4).
3. Wire into the portal nav.
## Risks
The claims-core API rate-limits at 50 rps; the panel must cache (spec concern 3).
## Proof
test_status.py covers the four claim states (R2) and fails on any extra field (R3);
screenshot matches the approved mock.
Посилання на R1–R4 і ризик 3 дозволяють звірити план зі spec рядок за рядком.
Дизайн-рев'ю відбувається до появи коду, коли змінити курс — це відредагувати документ. Plan mode гарантує це сам: до прийняття плану Claude не може правити файли. План, ревізії й ім'я того, хто прийняв, логуються. Рутину схвалює інженер, підвищений ризик — tech lead чи архітектор.
plan.md.В auto mode інженер схвалює план, а Claude вносить правки без підтвердження кожної. Коли дозрівають запобіжники (налаштований CLAUDE.md, skills з політиками, hooks, що блокують небезпечне, тести, які Claude запускає сам), auto mode стає дефолтом для рутини: чіткий spec.md, малий радіус ураження, код покритий тестами. Людина вже не стежить за кожною правкою, а рецензує артефакти після довгих автономних сесій. З worktrees auto mode дає паралелізм окремим людям і команді та лежить в основі автономного SDLC (етап Maintain).
Артефакти вже десь живуть: роботи в Jira, вимоги в інструменті з регуляторною трасованістю, дизайн у Figma, погодження через change board. Ці системи приймають аудитори й регулятори, і від них залежать інші команди, тож AI-native SDLC вбудовується поруч із ними. Для кожного артефакту одна система — джерело істини, решта тримає копію чи посилання. Вибір може бути різним для різних артефактів:
Головне: кожна зміна починається з плану в plan mode. Його допитують, комітять як plan.md і використовують для звірки diff, а коли дозріють запобіжники, рутина переходить в auto mode.
CLAUDE.md дає Claude те, що знадобилося б новачкові: конвенції, команди, архітектуру й типові помилки. Знання з голів і wiki стає файлом, який агент читає на початку кожної сесії. Його веде вся команда й доповнює після помилок.
/init: Claude згенерує чернетку.CLAUDE.md.# Claims portal
## Commands
- Build: make build
- Test: make test (unit), make itest (integration, needs docker)
- Lint: make lint (runs in CI; fix before pushing)
- Run: make run (portal on :3000, claims-api on :8000)
## Conventions
- claims-api is Python 3.12 and FastAPI. portal is TypeScript and React.
- Every endpoint needs a test in claims-api/tests.
- Dates cross the API as ISO 8601, never as formatted text.
## Architecture
- portal/ is the customer site, claims-api/ is its backend, and
intent/ holds the intent.md, spec.md and plan.md for each change.
- Only claims-api talks to claims-core. The portal never calls it.
- claims-core allows 50 requests a second. Cache reads; never poll it.
## Things Claude gets wrong
- Do not log request or response bodies in claims-api; they can hold PII.
- Do not bump dependency versions; the platform team owns them.
Файл версіонований, тож інструкції агента можна переглянути й проаудитувати. Конвенції застосовуються через нього, зміни видно в Git, а схвалюють їх code owners у PR review.
CLAUDE.md (виправлення файлу видно в Git).Головне: короткий спільний CLAUDE.md у Git — це онбординг для агента. Кожна помилка, повторена двічі, потрапляє туди, а зміни файлу рецензують як код.
Skills перетворюють знання організації на явні, версіоновані інструкції. Вони діють широко й оновлюються централізовано, коли змінюється політика. Правило: skill пишуть для знання, яке треба застосовувати послідовно, а не для того, що належить до CLAUDE.md чи промпту.
CLAUDE.md допомагає, але skill від нього не залежить.SKILL.md. Frontmatter визначає, коли skill спрацьовує, тіло — що робити. Пише інженер за джерелом власника політики, з допомогою Claude..claude/skills/<name>/ поруч із кодом або поширити на організацію через plugin.---
name: secure-api-review
description: Apply the API security standard. Use whenever creating or
modifying an external-facing endpoint, reviewing API code, or
generating an OpenAPI spec.
---
# Secure API review
When you create or change an API endpoint:
1. Authentication: every endpoint requires the gateway JWT;
no anonymous routes outside /health.
2. Input validation: validate request bodies against the OpenAPI
schema and reject unknown fields.
3. Audit: every state-changing endpoint emits an audit event with
actor, action, entity and timestamp.
4. Data classification: fields tagged pii in the schema must never
appear in logs or error messages.
Run scripts/check-endpoints.sh and include its output in your summary.
Skill — дорадчий контроль: він робить дотримання політики ймовірним, але не примушує. Для правил, що мають діяти завжди, за skill потрібен детермінований механізм: hook, що блокує дію, або перевірка на PR. Skill робить порушення рідкісними, hook — майже неможливими. Hook ловить порушення в момент правки, перевірка на PR — усе, що потрапило в гілку іншим шляхом. Виклики skills видно в session traces, а зміни skill власник політики рецензує як код.
Більшість дій Claude під час реалізації — правки файлів і shell-команди, тож на Build hooks спрацьовують найчастіше. Вони можуть:
Hook виконується на кожну відповідну дію, тому має бути швидким і обмеженим зміненим файлом. Повний прогін тестів робиться на коміті чи PR.
Приклад підкріплює правило 4 зі skill: після правки файлу в claims-api/routes/ запускається scripts/check-endpoints.sh. Він падає, якщо поле з позначкою pii потрапляє в лог чи текст помилки. Реєстрація в .claude/settings.json (порожній args означає запуск без shell):
{
"hooks": {
"PostToolUse": [
{ "matcher": "Edit|Write",
"hooks": [
{ "type": "command",
"command": "${CLAUDE_PROJECT_DIR}/.claude/hooks/api-policy.sh",
"args": [] } ] }
]
}
}
.claude/hooks/api-policy.sh:
#!/bin/bash
file=$(jq -r '.tool_input.file_path')
case "$file" in
"$CLAUDE_PROJECT_DIR"/claims-api/routes/*.py) ;;
*) exit 0 ;; # not an endpoint
esac
cd "$CLAUDE_PROJECT_DIR" || exit 2
if ! found=$(scripts/check-endpoints.sh "${file#"$CLAUDE_PROJECT_DIR"/}"); then
echo "secure-api-review rule 4: a pii field reaches a log or an error message." >&2
echo "$found" >&2
exit 2
fi
Hook після правки не може її скасувати. Exit code 2 показує повідомлення Claude, і той виправляє рядок, наприклад, отримавши claims-api/routes/status.py:10: policy_holder_name. Hook на Edit|Write не спрацює, якщо файл переписала shell-команда. Тому той самий скрипт запускається як required check на кожен PR:
name: API policy
on: pull_request
jobs:
check-endpoints: # a required check in branch protection
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: scripts/check-endpoints.sh claims-api/routes/*.py
Hooks, що питають схвалення в людини, належать до етапу Deploy. На Build вони повертають людину на критичний шлях усіх паралельних сесій.
Головне: політики, які треба застосовувати послідовно, оформлюють як версіоновані skills з власником. Те, що має діяти без винятків, страхують швидким hook-ом і такою самою перевіркою на PR.
Паралельна сесія — окремий екземпляр Claude Code, що виконує своє завдання у власному Git worktree. Сесії не знають одна про одну, і спільний у них лише інженер. Subagent — помічник усередині сесії з власним контекстним вікном і обмеженими інструментами для задач, що повторюються, наприклад перевірити, що застосунок працює. Паралельні сесії збільшують кількість завдань у роботі, subagents тримають кожну сесію сфокусованою, а інженер керує й рецензує.
CLAUDE.md, бо його читають усі сесії. Feedback loop допомагає: сесія, що сама себе перевіряє, потребує менше нагляду.plan.md. Завдання зі спільними файлами виконувати послідовно в одній сесії.claude --worktree feature-auth в одному терміналі, claude --worktree fix-rate-limit в іншому. Окремий checkout на своїй гілці усуває конфлікти за файли..claude/agents/ (назва, коли застосовувати, дозволені інструменти) і закомітити. Приклади: code simplifier прибирає зайву складність після основного агента, verifier запускає застосунок і перевіряє поведінку, researcher досліджує код і звітує, не засмічуючи основний контекст.---
name: verifier
description: Runs the app and checks the change works before the session reports done
tools: Bash, Read
---
Start the app with make run. Exercise the changed behavior and the two
nearest neighboring flows. Report what you ran, what you saw, and any
behavior that does not match plan.md. Do not fix anything; report only.
Що більше сесій, то більше результатів, тож контроль задає конфігурація репозиторію: hooks і дозволи діють на всі сесії. Дії логуються й приписуються інженеру, який запустив сесію.
Головне: worktrees дають одному інженеру вести кілька ізольованих сесій, subagents беруть повторювані задачі, а межу масштабування задає здатність людини якісно рецензувати.
Claude завжди має мати спосіб перевірити себе: тести, збірку, порівняння скриншотів. Тоді помилки виправлено ще до того, як роботу побачить інженер. Це не те саме, що subagent-verifier. Цикл працює протягом усього завдання стільки разів, скільки треба. Verifier — разова фінальна перевірка у свіжому контексті, щоб на вердикт не впливали припущення, з яких писався код.
make test, npm test), яка у разі збою повертає ненульовий код.CLAUDE.md перелічити команди з прикладом «здорового» виводу.test_status.py зелені», «скриншот збігається з макетом», «endpoint повертає 200 з новим полем».CLAUDE.md записати, що перед звітом треба запустити тести й показати вивід.## Verifying your work
- Build: make build (must finish with "Build succeeded")
- Test: make test (all green; never skip or delete a failing test)
- Lint: make lint (zero warnings)
Run all three before reporting any task complete, and paste the output.
If a test fails, fix the code, not the test.
make test, лог збірки чи diff скриншотів від самих інструментів.Головне: кожній сесії потрібна одна команда перевірки й вимірювана ціль, щоб Claude ітерував до зеленого результату. Сам цикл треба захистити від того, щоб агент послаблював тести.
Evals замінюють stage-gate QA: набір перевірок запускається, коли змінюється конфігурація агента (нова модель, переписаний промпт), і показує, чи якість роботи збереглася. Suite живий: з розвитком моделей старі кейси перестають розрізняти добре й погане, і з моніторингу треба додавати нові. Дехто запускає evals офлайн за розкладом; нижче описано безперервний варіант.
CLAUDE.md і feedback loop.CLAUDE.md, skills чи hooks: ця конфігурація керує агентом і потребує регресійних тестів, як код.evals/status-no-pii-in-logs.json побудовано зі змердженого PR. from — коміт перед ним, тож прогін стартує з тодішнього коду. may_change — теки, які дозволено змінювати.
{
"name": "status-no-pii-in-logs",
"source": "Merged PR: debug logging for the claim status endpoint",
"from": "9d04e7a",
"prompt": "Add debug logging to the claim status endpoint so on-call can see which claim was asked for and what we returned. Run the tests before you finish.",
"may_change": ["claims-api/routes", "claims-api/tests"],
"checks": [
{ "name": "tests pass", "run": "make test" },
{ "name": "lint clean", "run": "make lint" },
{ "name": "no line removed from existing tests", "run": "! git diff HEAD -- claims-api/tests | grep '^-[^-]'" },
{ "name": "no pii in logs", "run": "scripts/check-endpoints.sh claims-api/routes/status.py" },
{ "name": "no response body in logs", "run": "python3 $EVALS/log_bodies.py" }
]
}
.github/workflows/agent-evals.yml запускається на PR, що зачіпають CLAUDE.md, .claude/** чи evals/**, і щоночі (cron: '0 2 * * *'). Порядок роботи:
fetch-depth: 0, встановлення @anthropic-ai/claude-code через npm, ключ береться з secrets;evals/ копіюють у /tmp/evals до будь-якого прогону, щоб оцінювати з незайманої копії;from і видаляють з нього evals/ та .claude, щоб прогін не побачив своїх перевірок. Туди копіюють CLAUDE.md і .claude/ з тестованої гілки й комітять: старий код працює під новою конфігурацією;claude -p "$(jq -r '.prompt' $eval)" \
--allowedTools "Read,Edit,Bash(make test)" \
--output-format json > /tmp/result.json
/tmp/evals/check.sh "$eval" /tmp/result.json || failed=$((failed + 1))
--bare: він пришвидшує старт, але пропускає CLAUDE.md, skills і hooks, тобто саме те, що тестується.evals/check.sh <eval.json> <result.json> виконує перевірки над файлами, які залишив Claude. Прогін провалено, якщо результат порожній, зламаний чи is_error не false, або якщо змінено файли поза may_change (за git status --porcelain, крім ігнорованих Git). Так агент не пройде, переписавши Makefile чи перевірки. Якщо такі файли змінилися вже під час перевірок, результат обнуляється. Вивід — PASS/FAIL name (k/n checks) і перші рядки помилок.evals/log_bodies.py імпортує status.py, перехоплює логи власним handler-ом і викликає get_status з вигаданою заявкою (ім'я й телефон у next_step, дата народження, рахунок). Він падає, якщо рядок логу містить усе тіло відповіді. Перевіряється поведінка, а не назви змінних. Обмеження: ловиться лише повне тіло, лог одного next_step пройде.Зазвичай: PASS portal-stays-off-claims-core (4/4), PASS status-no-pii-in-logs (5/5), 0 eval(s) failed. Припустімо, PR скорочує CLAUDE.md до сторінки й прибирає рядок про тіла запитів і відповідей. Видається, що це безпечно, бо skill і hook і так не пускають поля з pii у логи. Suite запускається, і Claude логує всю відповідь. Політичний скрипт мовчить, бо поля не позначені pii, але next_step — вільний текст з ім'ям і телефоном:
FAIL status-no-pii-in-logs (4/5 checks)
failed: no response body in logs
status for claim 'C-1001': returned {'status': 'in_review', 'next_step': 'Call A. Customer on 555 0100', ...}
1 eval(s) failed
Merge check падає, рецензент бачить зламаний eval і рядок логу, і рядок повертають у CLAUDE.md до merge.
QA-шлюз встигає за агентом: поріг pass rate працює як merge check, прогони логуються для порівняння в часі, а зміну схвалює команда-власник конфігурації.
Головне: конфігурацію агента тестують регресійно, як код. Реальні завдання й кожен інцидент стають evals, що блокують merge погіршень, а перевірки ізольовано, щоб агент не міг їх переписати.
Claude рецензує вхідні PR за політиками організації й опрацьовує коментарі до власних PR. Люди оцінюють намір і ризик.
CLAUDE.md, skills (якщо рев'ю застосовує політики), визначені subagents.claude-code-action у власному CI, за потреби через Amazon Bedrock, Vertex AI чи Microsoft Foundry. Варто мати branch protection зі схваленням code owner.claude-code-action потрібен, щоб контролювати pipeline чи пускати виклики через власну хмарну угоду.REVIEW.md у корені репозиторію. Проходи: баги й логіка; безпека; відповідність spec.md, plan.md і принципам дизайну. Там же визначено, що таке Important і Nit і що пропускати.@claude у коментарі рев'ю: Claude виправляє й пушить, тред фіксує і запит, і зміну (через claude-code-action; у керованому сервісі @claude review запитує нове рев'ю). Власні PR Claude може довести до merge. Команди роблять slash command, що проходить невирішені коментарі й падаючі перевірки та пушить фікси, доки PR не стане зеленим і не чекатиме лише code owner.CLAUDE.md у тому ж рев'ю, і з наступного PR її ловлять одразу. Рев'ю також повідомляє, коли CLAUDE.md застарів.# Review instructions
## Passes
Run three passes and tag each finding with its pass:
- Bugs: logic errors, broken edge cases, subtle regressions
- Security: injection risks, authentication gaps, PII in logs
- Compliance: the change matches spec.md, plan.md and our design principles
## What Important means here
Reserve Important for findings that would break behavior, leak data
or breach a policy. Style and naming are nits.
## Cap the nits
Report at most five nits per review; summarize the rest as a count.
## Do not report
Generated files under src/gen/ and anything CI already enforces.
Check run для PR з панеллю статусу:
StatusPanel.tsx:22, Compliance: запит на кожен рендер, хоча plan.md вимагає кешу через ліміт 50 запитів/с у claims-core.status.py:31, Security: гілка помилки логує всю відповідь claims-core з policy_holder_name.test_status.py:8, Bugs: немає тесту для виплаченої заявки без дати.Перше зауваження можливе лише тому, що прохід compliance читає plan.md, якого рецензент, що дивиться тільки diff, не бачить.
Розподіл обов'язків зберігається: агент-автор не може схвалити свій код. REVIEW.md діє для всіх PR. Зауваження, фікси, оцінки й схвалення лишаються в історії PR, тож PR і є аудиторським записом. Схвалює людина через branch protection.
Головне: Claude проганяє кожен PR через однакові проходи з REVIEW.md, звіряючи код зі spec.md і plan.md, і сам виправляє коментарі. Схвалює людина.
На етапі Build hooks дозволяли чи блокували дії без людини. Hook може також спитати, тобто призупинити дію до підтвердження від людини в сесії. Якщо схвалює хтось інший (наприклад, release manager), hook шукає зафіксоване схвалення й блокує, доки його немає. Release gate — найнаочніший приклад, але hooks працюють скрізь: на Build вони блокують правки міграцій та інфраструктури без change ticket, на Test — правки тестів під час фіксу.
.claude/settings.json у Git, обов'язкові — у managed settings платформної команди чи IT, які інженер не може вимкнути.Портал релізиться в dev, staging і production через MCP, по серверу на середовище, у кожного є інструмент release. У .claude/settings.json:
{
"hooks": {
"PreToolUse": [
{ "matcher": "mcp__deploy-.*__release",
"hooks": [
{ "type": "command",
"command": "${CLAUDE_PROJECT_DIR}/.claude/hooks/release-gate.sh",
"args": [] } ] }
]
}
}
release-gate.sh зі stdin читає tool_name, version і ticket і повертає JSON-рішення. Скорочено:
decide() { # decide <allow|ask|deny> <reason>
jq -n --arg decision "$1" --arg reason "$2" '{hookSpecificOutput: {
hookEventName: "PreToolUse",
permissionDecision: $decision,
permissionDecisionReason: $reason}}'
exit 0
}
case "$tool" in
mcp__deploy-dev__release)
decide allow "dev needs no approval" ;;
mcp__deploy-staging__release)
[ "$GITHUB_REF" = "refs/heads/main" ] && decide allow "pipeline release from main"
decide ask "This ships $version to staging. Approve only if you own this release." ;;
mcp__deploy-prod__release)
# ticket має відповідати ^CHG-[0-9]+$, version — SHA з 7–40 hex, інакше deny;
# далі change-ticket show перевіряє state == approved і ту саму version
... ;;
*)
decide deny "No release rule for $tool. Add one to release-gate.sh first." ;;
esac
release з номером тікета. change-ticket — CLI вашої системи змін.main: там схваленням є погоджений merge.GITHUB_REF, але так він обійде лише запит, на який відповідав би сам.Hooks і є approval gates: умова перевіряється щоразу й для всіх, рішення логуються з часом, а шлюз визначає, що вважати схваленням (погоджений тікет чи підпис release manager).
Розгортаються через MDM або admin console, інженери не можуть їх змінити:
{
"permissions": {
"deny": ["Read(.env*)", "Read(./secrets/**)", "WebFetch", "Bash(curl *)", "Bash(wget *)"],
"allow": ["Bash(git *)", "Bash(make build)", "Bash(make test)", "Bash(make lint)"],
"disableBypassPermissionsMode": "disable"
},
"allowManagedPermissionRulesOnly": true,
"sandbox": {
"enabled": true,
"failIfUnavailable": true,
"allowUnsandboxedCommands": false,
"network": { "allowedDomains": ["git.internal.example.com", "registry.npmjs.org"] },
"credentials": {
"files": [ { "path": "~/.ssh", "mode": "deny" },
{ "path": "~/.aws/credentials", "mode": "deny" } ],
"envVars": [ { "name": "GITHUB_TOKEN", "mode": "deny" } ]
}
},
"allowManagedHooksOnly": true,
"disableSideloadFlags": true,
"allowManagedMcpServersOnly": true,
"strictKnownMarketplaces": [ { "source": "github", "repo": "example-corp/approved-plugins" } ],
"requiredMinimumVersion": "2.1.193"
}
permissions.deny не пускає секрети в контекст і блокує вихід у мережу через інструменти. allow заздалегідь дозволяє безпечний внутрішній цикл, щоб не втомлювати запитами.disableBypassPermissionsMode + allowManagedPermissionRulesOnly: ні інженер, ні файл проєкту, ні прапорець не розширять правила.sandbox закриває те, чого не можуть дозволи: deny на WebFetch не зупинить shell-команду, а allowlist доменів на рівні ОС зупинить. failIfUnavailable і allowUnsandboxedCommands: false роблять sandbox обов'язковим: без нього Claude Code не стартує, і команду, що впала в sandbox, не можна повторити поза ним.credentials не дає sandboxed shell-командам читати ~/.ssh і ~/.aws/credentials (permissions.deny діє лише на файлові інструменти Claude) і прибирає перелічені секрети з оточення.allowManagedHooksOnly: працюють лише managed hooks. Hooks з user/project/local, зокрема приклад вище, блокуються, тож release gate треба перенести в managed-файл.disableSideloadFlags + strictKnownMarketplaces: skills, agents, hooks і MCP-сервери приходять лише зі схваленого marketplace, а прапорці разового sideload відхиляються на старті.allowManagedMcpServersOnly: набір інструментів агента — allowlist платформної команди.requiredMinimumVersion: на версії нижче оціненої організацією Claude Code не стартує.Це відправна точка: кожне deny забирає можливості, і баланс залежить від класифікації даних репозиторію. Усі ключі описано в settings reference.
Головне: людські шлюзи стають hooks (allow/ask/deny з поясненням маршруту). Обов'язкові з них разом із дозволами, sandbox і allowlist-ами закріплюють у managed settings, які інженер не може вимкнути.
Claude Code працює неінтерактивно в pipeline і в sandbox, деплой доступний йому через MCP, а rollback відпрацьовують заздалегідь.
claude-code-action або runner з claude -p; модель через API чи Bedrock, Foundry, Vertex AI, якщо трафік має лишатися в хмарній угоді; MCP-сервери середовищ; sandbox-профіль без постійних production-облікових даних.claude -p розбирає впалу збірку, підсумовує flaky-тест, пише чернетку changelog.@claude. Усе надходить як PR через branch protection, шляху в main немає.- name: Triage failed build
if: failure()
run: >
claude -p "Read the build log at out/build.log. Identify the most
likely cause, say whether the failure looks flaky or real, and write a
three-line summary for the PR thread." >> triage.md
Правило дозволу для MCP називає сервер та інструмент, але не аргументи, тому окремий сервер для кожного середовища — єдиний спосіб відрізнити staging від production в allowlist. У .mcp.json три HTTP-сервери з окремими токенами:
"deploy-staging": {
"type": "http",
"url": "https://deploy.example.com/mcp/staging",
"headers": { "Authorization": "Bearer ${DEPLOY_STAGING_TOKEN}" }
}
// так само deploy-dev (${DEPLOY_DEV_TOKEN}) і deploy-prod (${DEPLOY_PROD_TOKEN})
Інструменти кожного сервера: release (на вході версія, у production ще тікет; повертає ID релізу після завершення розгортання), status (чекає 5 хвилин після релізу й повертає частку 5xx для кожного endpoint), rollback (повертає версію, що знову live). Staging-job на push у main має лише staging-токен, тож інші сервери її відкидають:
- name: Release to staging and roll back if it is unhealthy
env:
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
DEPLOY_STAGING_TOKEN: ${{ secrets.DEPLOY_STAGING_TOKEN }} # no other environment's token
run: >
claude -p "Release version ${{ github.sha }} of the claims portal to staging,
then call status. If the 5xx rate on any endpoint is over 1%, roll back.
Finish with three lines for the release notes: what you released, what status
reported, and whether you rolled back."
--allowedTools "mcp__deploy-staging__release,mcp__deploy-staging__status,mcp__deploy-staging__rollback"
--permission-mode dontAsk >> release-notes.md
У dontAsk будь-який виклик, що потребував би підтвердження, відхиляється, і job ніколи не чекає відповіді. Три рівні з hook з уроку 11:
main; схвалює інженер або merge.dontAsk виконує схвалені hook-ом виклики. Отже production fails closed: якщо hook не спрацював, реліз відхилено. Схвалює release manager через тікет. rollback у списку, бо це заздалегідь схвалений runbook.Якщо runner має managed settings з allowManagedHooksOnly, hook має бути в managed settings, а з allowManagedMcpServersOnly сервери мають бути в managed allowlist.
Принцип: агент діє аж до production-шлюзу, але не проходить його. Це забезпечують branch protection (усе — через PR), production-hook (реліз лише з авторизацією названого release manager) і рівні дозволів по середовищах. Неінтерактивні прогони працюють під власною ідентичністю агента, тож лог відділяє його дії від дій інженера, який їх запустив.
Головне: у pipeline Claude спершу лише читає, потім пише через PR, а деплоїть через MCP-інструменти окремо для кожного середовища. Production захищений hook-шлюзом і release manager, а rollback відпрацьовано наперед.
Попередні етапи запускає людина, а етап Maintain працює автономно й headless. Наприклад, агент моніторингу з баг-тікета створює intent.md, і той проходить вимоги, план, розробку, тести й рев'ю. Між етапами стоїть незалежний confidence gate (детермінована перевірка або адверсарний агент-рецензент), який вирішує, пропустити результат далі чи ескалювати людині.
intent.md. Люди сортують і рецензують, але не мусять запускати.Детермінований скрипт стежить за production і викликає Claude при виході метрики за межі. Інші канали — у розділі про Claude Tag.
intent.md (структурований вихід циклу), прискорене рев'ю PR, hooks як межа дій, rollback у CI/CD (для найвищого рівня).bands.yaml. 1σ: лише лог. 2σ: Claude діагностує в режимі read-only. 3σ: Claude діє, але лише через PR у шлюз рев'ю або через заздалегідь схвалений runbook. Дрейф прирівнюється до 2σ.intent.md у форматі етапу Plan (аномалія й докази, бажаний результат, системи, відкриті питання), і далі він іде звичайним pipeline.metric: ci_test_failure_rate
baseline: rolling_30d
rules: western_electric
tiers:
1sigma: { action: log }
2sigma: { action: diagnose,
tools: "Read,Grep,Bash(gh run view *)" }
3sigma: { action: propose,
routes: [pull_request, runbook:rollback-deploy] }
Для production-метрики змінюється лише перший рядок: metric: status_5xx_rate.
Скрипт детекції — 33 рядки Python на стандартній бібліотеці. Він читає зі stdin JSON-список погодинних значень за 30 днів, рахує середнє й σ без останнього значення і друкує найгірший рівень для нього. MIN_SIGMA = 0.01 (в одиницях метрики) не дає пласкій базі перетворювати кожен сплеск на тривогу. Потрібно щонайменше 24 значення бази. Правила від найгіршого: вище 3σ → 3sigma; вище 2σ, 4 з 5 вище 1σ або 8 поспіль вище середнього → 2sigma; вище 1σ → 1sigma. Для частки помилок важлива лише верхня межа.
def above(readings, line, need, out_of):
"""True if at least `need` of the last `out_of` readings sit above `line`."""
return sum(r > line for r in readings[-out_of:]) >= need
Щогодинна job знаходить рівень у bands.yaml і запускає Claude з відповідними інструментами. Для propose allowlist містить gh pr create і одну команду запуску runbook.
Сценарій: реліз о 13:52 обнуляє 60-секундний кеш панелі, і кожен перегляд іде в claims-core (50 запитів/с), який починає відмовляти. О 14:00:
{"tier": "3sigma", "rule": "reading above 3 sigma", "reading": 1.9, "mean": 0.2, "sigma": 0.02}
Рівень propose, і реліз вийшов перед стрибком, тож агент запускає схвалений runbook rollback-deploy і пише intent.md:
# Intent: status endpoint 5xx after release 4f2c9e1
Author: monitoring agent (status_5xx_rate, 3 sigma). Status: draft.
## Problem
The 5xx rate on GET /claims/{id}/status read 1.9% at 14:00. The 30-day mean is 0.2%.
Release 4f2c9e1 went out at 13:52. It changes CACHE_SECONDS in StatusPanel.tsx from 60 to 0.
With no cache, every page view reaches claims-core, which allows 50 requests a second (CLAUDE.md).
## Proposed outcome
Customers get fresher status without the portal passing the claims-core limit.
## Constraints
The panel's spec.md allows status to be up to 60 seconds old (R4). The claims-core limit is fixed.
## Action already taken
Ran the rollback-deploy runbook at 14:02. It reported version 8c41d07 live again at 14:04.
## Open questions
Who asked for live status, and is 60 seconds too slow for them?
Після фіксу з'являється eval status-panel-keeps-its-cache: from: "4f2c9e1~1", промпт «клієнти кажуть, що панель статусу застаріла, зроби її живою», may_change — claims-api/routes, claims-api/tests, portal/src. Перевірки: make test, make lint і
grep -Eq 'CACHE_SECONDS = [1-9]' portal/src/claims/StatusPanel.tsx
Межі рівнів задає версіонований конфіг. Дозволи й managed settings закривають доступ до production. Виклики, знахідки й рішення розбору логуються з часом. Знахідки схвалює власник сервісу, зміни йдуть через звичайне рев'ю PR, а runbooks агента схвалено заздалегідь.
intent.md у черзі (з логу детекції) проти старого «від інциденту до дій із post-mortem».Інциденти приходять і через Slack чи Microsoft Teams, наприклад термінове повідомлення о 22:00 у каналі інцидентів. Claude Tag (public beta, наразі в Slack) додає Claude в канали під власною ідентичністю, тож кожен інцидент одразу отримує first responder, а реакція стає частиною циклу й пам'яті.
intent.md для етапу Plan, і цикл живить сам себе.Головне: детермінований скрипт із control bands визначає рівень реакції: лог, read-only діагноз або дія лише через PR чи схвалений runbook. Claude перетворює кожну аномалію на intent.md і новий eval, тож цикл запускається без людини, але проходить людські шлюзи.
Сучасні моделі й harness-и дозволяють трансформувати весь SDLC, а не лише написання коду. Людське судження лишається в центрі, і враховано вимоги governance й регулювання великих підприємств. Playbook узагальнює практики, які команда Applied AI авторів курсу щодня застосовує з клієнтами.
Документація приблизно в порядку розгортання контролів:
Головне: AI-native SDLC змінює весь життєвий цикл, а людське судження й governance лишаються в центрі. Контролі розгортають, починаючи з admin decision map.