CLI-агенти: розбираємось з Claude Code
Привіт! Мене звати Володимир, я Microsoft MVP та працюю в beeDynamics на позиції розробника Business Central. Я регулярно пишу технічні статті в своєму блозі. Також підтримую декілька open-source проєктів, детальніше в профілі github.
Зміст
- CLAUDE.md
- Запуск Claude Code з різними модами
- Context management
- Subagents
- Custom slash commands aka Skills
- MCP
- Multi-Claude Workflows
- Підсумок
CLAUDE.md
Файл CLAUDE.md — це важливий елемент для ефективного використання Claude Code. Це спеціальний файл, який Claude автоматично підтягує в контекст в процесі комуніікації з агентом. Кожен ваш запит буде включати інформацію з CLAUDE.md.
Це текстовий файл зі спеціальними інструкціями для агента, який може містити:
- Як тестувати/запускати/компілювати проєкт
- Правила стилю коду та архітектурні ідеї
- Конвенції, специфічні для репозиторію (іменування, структура папок, патерни)
- Запобіжники безпеки «Не роби цього» (без прямих змін у prod, не комітити секрети)
- Як писати зміни, готові до PR (тести, документація, очікування)
Підказка: Якщо ви помічаєте, що правила «Не роби...» ігноруються, спробуйте переформулювати їх як «Надавай перевагу X над Y». Цей патерн позитивних інструкцій працює надійніше, особливо в сесіях з великим контекстом.
Не існує суворих правил створення CLAUDE.md, але є загальні рекомендації, яких варто дотримуватися. Намагайтеся тримати обсяг тексту якомога меншим, а інструкції — простими та зрозумілими. Наприклад, якщо ваш проєкт збирається конкретною локальною командою, явно зазначте це у файлі:
# Build - `<yourBuildCommand>`
А ще краще створіть окремий Skill чи автоматичний Hook (але про це пізніше).
Ви також можете створити декілька CLAUDE.md файлів одночасно, і всі вони будуть включені в контекст агента. Наприклад, ви можете тримати CLAUDE.md рівня проєкту в кореневій папці ./CLAUDE.md або ./.claude/CLAUDE.md із загальними правилами та навігацією, а потім додавати більш специфічні інструкції в дочірніх папках для кожного компонента.
Claude Code також дозволяє створювати та використовувати глобальний CLAUDE.md для всіх проєктів. Це може бути дуже зручно, якщо у вас є спільні правила роботи з проєктами. Ви можете створити файл за шляхом ~\.claude\CLAUDE.md, що на Windows є еквівалентом:
C:\Users\YourName\.claude\CLAUDE.md
Це означає, що кожен CLAUDE.md з різних рівнів директорій буде додаватися в контекст ваших промптів. Насправді, рівнів більше, ніж просто рівень проєкту та глобальний рівень. Ви можете прочитати більше про ці рівні в документації Claude Code:
code.claude.com/docs/en/settings
Ви також можете спробувати ініціалізувати CLAUDE.md рівня проєкту за допомогою команди /init. Claude Code спробує прочитати загальну структуру проєкту та згенерувати файл. Однак на практиці він часто видає досить неоптимізований і дещо випадковий результат, тому краще не покладатися на нього.
До речі, ви можете використовувати команду /memory, щоб побачити поточну пам’ять сессії, та файли CLAUDE.md які зараз активні, і навіть редагувати їх безпосередньо з терміналу:

Запуск Claude Code з різними модами
Ви можете запускати Claude Code з різними налаштуваннями та режимами. Щоб побачити детальний опис цих опцій, використовуйте команду claude --help у терміналі.

Я рекомендую звернути увагу на прапорець --permission-mode, оскільки він дозволяє контролювати, як Claude Code взаємодіє з файлами та викликає інструменти. Прочитати про режими можна тут.
| Режим | Значення прапорця | Опис | Найкращий варіант використання |
|---|---|---|---|
| Default | default | Стандартна поведінка — запитує дозвіл при першому використанні кожного інструмента | Звичайна розробка, безпека насамперед |
| Accept Edits | acceptEdits | Автоматично схвалює зміни файлів; інші інструменти (bash, MCP) все ще потребують дозволу | Прототипування, швидка ітерація на довіреному коді |
| Plan | plan | Режим тільки для читання — може аналізувати, але не може змінювати файли або виконувати команди | Дослідження кодової бази, планування архітектури |
| Don’t Ask | dontAsk | Автоматично відхиляє всі інструменти, якщо вони явно не дозволені правилом allow в settings.json. Жодних запитів не показується | CI/CD, пакетна обробка, неінтерактивні середовища |
| Delegate | delegate | Пов’язано з робочими процесами делегування subagent (наразі не задокументовано) | Робочі процеси Subagent |
| Bypass Permissions | bypassPermissions | Пропускає ВСІ запити дозволів — повний доступ до системи | Лише контейнери, ізольовані середовища |
Наприклад, ви можете запустити Claude Code у режимі, в якому він автоматично виконуватиме будь-які дії з файлами та викликатиме будь-які інструменти без запиту.
claude --permission-mode bypassPermissions
або
claude --dangerously-skip-permissions
Звичайно, це дуже небезпечно і повинно використовуватися лише в ізольованому середовищі, але це забезпечує максимальну автономію.
Context management
Контекст — це все, що AI Agent «бачить» і «пам’ятає» протягом однієї сесії діалогу. Тобто, це робоча пам’ять AI Agent-у, обмежений простір, у який повинна вміститися вся інформація. У випадку Claude Code контекст включає:
- Ваші промпти та запитання
- Відповіді Claude Code
- Файли, які прочитав Claude Code
- Результати команд (bash, тести, лінтери)
- Результати викликів tools
- Вміст CLAUDE.md
- Опис та заголовки Skills
Вікно контексту обмежене можливостями конкретної моделі LLM. Це дуже спрощене пояснення, ви можете прочитати більш детальний опис в офіційній документації.
Якщо ви подивитеся на вікно контексту найновіших моделей Anthropic, то побачите, що заявлене значення за замовчуванням — 1 мільйон токенів. Однак я б ставився до цих лімітів з обережністю, реальність полягає в тому, що чим більше інформації ви додаєте в контекст, тим гіршими можуть бути результати.
На практиці, працюючи з AI агентами, ми завжди балансуємо між наданням достатнього контексту для вирішення завдання та перевантаженням вікна контексту. Саме тому ми прагнемо описувати завдання якомога коротше та чіткіше.
Що відбувається, коли вікно контексту наближається до свого ліміту? Claude Code автоматично запускає /compact, який, по суті, підсумовує розмову та зберігає лише найважливішу інформацію(autocompact можна відключити). Це означає, що важливі деталі контексту можуть бути втрачені під час підсумовування. Крім того, ми також втрачаємо частину вікна контексту, оскільки сам підсумок займає місце. І як я вже згадував раніше, чим більше вільного місця у вікні контексту, тим краще.
Я рекомендую прочитати статтю про «context rot», вона дуже добре пояснює цю проблему, вона досі актуальна.

Виходячи з цього, ми також можемо зробити висновок, що не варто соромитися почати нову розмову або використовувати /clear, щоб очистити засмічене вікно контексту.
За допомогою команди /context ви можете детально відстежувати поточне вікно контексту. Як ви можете бачити на скріншоті, прямо з самого початку наш контекст вже зайнятий CLAUDE.md, системним промптом, системними інструментами, поточною історією розмови (Messages) тощо. У результаті близько 25k токенів вікна контексту фактично зайняті з самого початку розмови.

Subagents
Subagent — це спеціалізований instance Claude, який виконує сфокусоване підзавдання у власному вікні контексту, з власним системним промптом, списком дозволених/заборонених інструментів, режимом дозволів і навіть вибором моделі. Claude делегує роботу йому, коли ваш запит відповідає опису subagent, потім subagent повертає підсумок назад в основну розмову.
Це корисно, оскільки дозволяє свідомо розділити роботу, яка є:
- Важкою за токенами/багатослівною (тести, логи, великі grep, скрапінг документації) — тримайте шумні деталі поза основним потоком.
- Ризикованою (shell-команди, редагування) — можна жорстко обмежити інструменти та дозволи, щоб агент не міг «допомогою» нашкодити.
- Спеціалізованою (огляд безпеки, аудит продуктивності, валідація SQL) — можна дати одну доменно-специфічну інструкцію, не засмічуючи свій повсякденний промпт.
- Чутливою до вартості — направляти певні завдання до швидших/дешевших моделей, як-от Sonnet/Haiku.
Одна важлива деталь: subagent не отримує повний системний промпт Claude Code, він отримує лише свій системний промпт (плюс базові деталі середовища, як-от робочий каталог). Це значною мірою чому вони залишаються «чистими» та сфокусованими.
За допомогою команди /agents ми можемо створювати агентів на рівні користувача або на рівні проєкту. Якщо у вас вже є завантажений у пам’ять CLAUDE.md, цей контекст буде використано при створенні агента. Після створення агент з’являється як .md файл усередині папки .claude, або персональної, або проєктної, залежно від того, що ви виберете.
Хорошими прикладами таких агентів є test-runner.md і code-reviewer.md. Наприклад, створивши агента code-reviewer.md, ми можемо делегувати огляд коду без забивання нашого основного вікна контексту, і ми можемо налаштувати дозволи лише для читання. Зрештою, ми хочемо лише огляд коду, а не виправлення чи зміни коду.
Ми можемо викликати агентів безпосередньо у нашому промпті, посилаючись на них за іменем. Ви також можете використовувати декількох агентів у ланцюгу одночасно. Наприклад, ви можете написати такий промпт:
Use test-runner-al first. If compilation fails, summarize errors. Then use code-reviewer-al to review the impacted objects and suggest minimal fixes.
Custom slash commands aka Skills
Slash команди або Skills у Claude Code — це промпти, що зберігаються як Markdown файли, які ви запускаєте, ввівши /command-name. Вони підтримують проєктну та персональну область, аргументи, попереднє виконання bash, посилання на файли та frontmatter для контролю поведінки. Вони розміщуються в .claude/commands або .claude/skills/. Вони викликаються так само, як стандартні вбудовані команди. Я рекомендую прочитати про slash команди в документації.
Опис та назва кожного Skill автоматично завантажуються в контекст з кожним запитом до агента. Тому Claude Code може проактивно використовувати Skill на основі контексту запиту.
Тут ми розглянемо досить простий, але все ж корисний приклад користувацької slash команди. Дуже часто, після роботи над git гілкою, нам потрібно описати, що було змінено для pull request. Саме тому нова команда /al-status може бути корисною для порівняння поточних змін робочого дерева з HEAD та генерації опису для майбутнього PR. Це також просто зручний спосіб переглянути, що було зроблено і що заслуговує на увагу. Просто створіть файл al-status.md у .claude/commands з таким вмістом:
--- description: Summarize current AL work: what changed, likely impacted objects, and next steps (compile/test/review). Great before committing. argument-hint: (no args) allowed-tools: Bash(git status:*), Bash(git diff:*) context: fork agent: general-purpose --- ## Auto context - Status: !`git status` - Changed files: !`git diff --name-only` - Diff summary: !`git diff --stat` - Name/status: !`git diff --name-status` ## Task Create a short, PR-ready summary: 1) What changed (bullets) 2) Risk areas to double-check (filters/keys, SetLoadFields, COMMIT/locking, events, labels, tests) 3) Next steps checklist (compile app, compile test, run tests if possible) Keep it concise.
Результат виконання /al-status у Claude Code для мого проєкту:

MCP
MCP має величезний вплив на те, наскільки добре працюють агенти. Цей цикл зворотного зв’язку між агентом та зовнішнім світом справді ефективний крок вперед. Я коротко згадував MCP у моєму попередньому блог-пості, а тепер хотів би перейти до практичного боку його використання.
Я вже згадував Business Central MCP, який дозволяє працювати з різними API сторінками. Однак сьогодні я хочу використати інший приклад і розповісти про дуже популярний Playwright MCP.
Playwright MCP дозволяє LLM виконувати різноманітні дії в браузері. Для роботи з розробкою та тестуванням Business Central це може стати дуже корисним інструментом. Перейдемо до встановлення та налаштування Playwright MCP на рівні проєкту. Для цього ми можемо використати наступну команду:
claude mcp add --transport stdio playwright -- npx -y @playwright/mcp@latest
Після цього ми можемо перевірити, чи доступний цей MCP сервер, за допомогою команди /mcp:

Далі ми можемо просто проінструктувати агента зробити щось, використовуючи Playwright MCP безпосередньо в промпті. Для демонстраційних цілей я попросив Claude Code відкрити Business Central, знайти сторінку та описати, які кнопки видимі — все через MCP. Ось мій промпт:
Use playwright mcp to open Business Central URL http://bc273us/BC/?company=CRONUS%20USA%2C%20Inc.&tenant=default for login you can use login VLD and password Qwerty123! After search for page "VDV Notifications" and let me know what actions are available in action pane
В результаті LLM використав MCP для виконання всіх необхідних дій, а потім доповів мені результат. Іншими словами, ви можете автоматично валідувати результати та виконувати дії з різноманітнітними сервісами, все обмежується лише вашим набором MCP та вашою уявою.

Multi-Claude Workflows
Однією з цікавих особливостей LLM агентів є можливість запускати кілька агентів паралельно. Для цього ви можете просто запустити кілька сесій Claude Code одночасно. Однак у цьому випадку агенти можуть конфліктувати, якщо вони змінюють один і той самий файл. То що ж робити?
Git worktrees дозволяють мати кілька робочих директорій, пов’язаних з одним і тим самим репозиторієм. Кожна директорія може мати checkout різної гілки, але всі вони спільно використовують одну папку .git. Це означає, що ви отримуєте повну ізоляцію між робочими просторами без дублювання всього вашого репо, лише тих файлів, з якими ви фактично потребуєте працювати.
Створіть worktrees для ваших функцій:
# Navigate to your project cd /path/to/your-project # Create worktree for feature A git worktree add ../your-project-feature-a -b feature-a # Create worktree for feature B git worktree add ../your-project-feature-b -b feature-b # Or use existing branch git worktree add ../your-project-bugfix bugfix-123
Відкрийте окремі термінали для кожного worktree:
# Terminal 1 cd ../your-project-feature-a claude # Terminal 2 cd ../your-project-feature-b claude
Керуйте та очищайте:
# List all worktrees git worktree list # Remove worktree when done git worktree remove ../your-project-feature-a # Clean up stale worktree metadata git worktree prune
Підсумок
Для розробників Claude Code пропонує практичний спосіб прискорити розробку, але лише за умови правильного налаштування. Хороший CLAUDE.md зі структурою вашого репозиторію, скіллами компіляції чи запуску тестів та найкращими практиками це фундамент. Режими permissions дають вам контроль над тим, наскільки автономним може бути агент. Управління контекстом тримає розмови сфокусованими та запобігає погіршенню якості. Subagents дозволяють ізолювати завдання, як-от code review чи запуск тестів. Користувацькі slash команди, як-от /al-status, автоматизують ваш PR робочий процес. А MCP відкриває такі можливості, як автоматизація браузера за допомогою Playwright. Почніть з CLAUDE.md, експериментуйте з іншим і будуйте далі.
6 коментарів
Додати коментар Підписатись на коментаріВідписатись від коментарівБуло б гарно додати що compact збиває префікс кешу що буде швидше жерти ліміти і що MCP грузить контекст, тому з ними теж треба бути акуратно. Це дуже актуально для тих, хто на підписках за 20.
це як?
без компакта:
200к кеш токенів + N дорогих токенів (нові месседжі)
після компакта:
~5к дорогих токенів (1 раз після компакта, далі кеш) + N дорогих токенів (нові месседжі)
По ціні буде приблизно таке саме, тільки в другому випадку свіжий контекст і розумна модель (моделі сильно тупіють коли контекст за 100-200к перевалює)
Але краще свій самописний handoff якийсь юзати, клодовський компакт не дуже
Клод якось виборочно, динамічно дефінішини підгружає, не запихує все в системний промт як раніше чи як інші агенти. Так що це вже не така велика проблема. Але все-одно, з МСР інший оверхед і обмеження, тому да, МСР це минуле сторіччя (півріччя в світі динамічного ШІ стека).
Я більше про розуміння трейдофа компакта в додаток до втрати контексту, бо можна компакт після2–3 повідомлень запускати і думати, що економиш, як перезаряка в контрі на 29/30 вийде) Так само з MCP, бо можна підключити все на світі бо для всього вже є MCP (я так робив), а потім дивитись як ліміти в трубу летять.
Із особистого досвіду, і спостережень інших колег, до компакта приходять з досвідом. Тобто немає такого що компакт неправильно використовується за незнанням. Коли немає досвіду, взагалі про нього не знають, не знають про контекст ініжінірінг, і долбляться в ту саму сесію, яку агент вже 5 раз компактив, і скаржаться на результат. Тут починається зазвичай дві стежини.
1. Починають розбиратися що не так, читати про сесії, контекст інжінірінг, починають слідкувати за чистотою контекста (діло ж не тільки в його розмірі, а що там)
2. Йдуть на ДОУ розказувати що пробував я ваш ШІ, не працює, а ті, хто розказують що працює, то інфоцигани і продавці лопат. Попутно продовжують довбитися, врубати опус для всіх задач в надії що він покращить ситуацію, результат все-одно паршивий но рахунки для компанії кратно більші, ніж у більш ШІ досвідчених колег, які трохи вміють в контекст ініжінірінг.
Я б в принципі не дуже той компакт юзав би. Зазвичай, набагато краще перейти в нову сесію, зберігши артефакти роботи в файл.
Таким чином історія зберігається та й приколів з компактом не буде.
Щодо MCP то це залежить від кількості думаю. Якщо налаштувати 100500 MCP то ефект буде негативний, а якщо ми говоримо про декілька штук, то навряд чи будуть будь які проблеми.
Я взагалі вважаю, що нам не потрібно упорюватись в купу скіллів, MCP, і т.д.
Ставлять собі якісь монстроузні SuperClaude, а потім не розуміють, чому агент не може вирішити якісь задачі.
Наразі той же ClaudeCode дуже добре працює й сам по собі, а для покращення роботи вистачить декількох скілів та MCP.
Тут ще залежить під самого MCP, нарпиклад хром дев тул/фігма/контекст7 потягне 5-6к токенів на запиті за рахунок tool definition, і це на кожному запиті. А якщо при цьому ще з опусом спілкуватись, трохи дорого виходить)