CLI-агенти: розбираємось з Claude Code

💡 Усі статті, обговорення, новини про AI — в одному місці. Приєднуйтесь до AI спільноти!

Привіт! Мене звати Володимир, я Microsoft MVP та працюю в beeDynamics на позиції розробника Business Central. Я регулярно пишу технічні статті в своєму блозі. Також підтримую декілька open-source проєктів, детальніше в профілі github.

У першій частині ми розглянули, чому агенти CLI є ефективним інструментом взаємодії з LLM. Тепер настав час перейти до практичних аспектів. У цій статті йдеться про те, що саме робить Claude Code ефективним: правильне налаштування, context management, permissions modes, субагенти, skills та інтеграція з MCP. Ця інформація буде корисною не лише в контексті Claude Code, але й майже для будь-якого популярного AI агенту. Наступна стаття планується вже з прикладами використання на справжніх задачах.

Зміст

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 які зараз активні, і навіть редагувати їх безпосередньо з терміналу:

Memory.png

Запуск Claude Code з різними модами

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

ClaudeHelp.png

Я рекомендую звернути увагу на прапорець --permission-mode, оскільки він дозволяє контролювати, як Claude Code взаємодіє з файлами та викликає інструменти. Прочитати про режими можна тут.

РежимЗначення прапорцяОписНайкращий варіант використання
DefaultdefaultСтандартна поведінка — запитує дозвіл при першому використанні кожного інструментаЗвичайна розробка, безпека насамперед
Accept EditsacceptEditsАвтоматично схвалює зміни файлів; інші інструменти (bash, MCP) все ще потребують дозволуПрототипування, швидка ітерація на довіреному коді
PlanplanРежим тільки для читання — може аналізувати, але не може змінювати файли або виконувати командиДослідження кодової бази, планування архітектури
Don’t AskdontAskАвтоматично відхиляє всі інструменти, якщо вони явно не дозволені правилом allow в settings.json. Жодних запитів не показуєтьсяCI/CD, пакетна обробка, неінтерактивні середовища
DelegatedelegateПов’язано з робочими процесами делегування subagent (наразі не задокументовано)Робочі процеси Subagent
Bypass PermissionsbypassPermissionsПропускає ВСІ запити дозволів — повний доступ до системиЛише контейнери, ізольовані середовища

Наприклад, ви можете запустити 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», вона дуже добре пояснює цю проблему, вона досі актуальна.

ContextRot.webp

Виходячи з цього, ми також можемо зробити висновок, що не варто соромитися почати нову розмову або використовувати /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 для мого проєкту:

alStatus.png

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:

PlaywrightMCP.png

Далі ми можемо просто проінструктувати агента зробити щось, використовуючи 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 та вашою уявою.

PlaywrightMCPInAction.png

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, експериментуйте з іншим і будуйте далі.

👍ПодобаєтьсяСподобалось13
До обраногоВ обраному12
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Було б гарно додати що compact збиває префікс кешу що буде швидше жерти ліміти і що MCP грузить контекст, тому з ними теж треба бути акуратно. Це дуже актуально для тих, хто на підписках за 20.

Було б гарно додати що compact збиває префікс кешу що буде швидше жерти ліміти

це як?

без компакта:
200к кеш токенів + N дорогих токенів (нові месседжі)

після компакта:
~5к дорогих токенів (1 раз після компакта, далі кеш) + N дорогих токенів (нові месседжі)

По ціні буде приблизно таке саме, тільки в другому випадку свіжий контекст і розумна модель (моделі сильно тупіють коли контекст за 100-200к перевалює)

Але краще свій самописний handoff якийсь юзати, клодовський компакт не дуже

що MCP грузить контекст, тому з ними теж треба бути акуратно

Клод якось виборочно, динамічно дефінішини підгружає, не запихує все в системний промт як раніше чи як інші агенти. Так що це вже не така велика проблема. Але все-одно, з МСР інший оверхед і обмеження, тому да, МСР це минуле сторіччя (півріччя в світі динамічного ШІ стека).

Я більше про розуміння трейдофа компакта в додаток до втрати контексту, бо можна компакт після 2–3 повідомлень запускати і думати, що економиш, як перезаряка в контрі на 29/30 вийде) Так само з MCP, бо можна підключити все на світі бо для всього вже є MCP (я так робив), а потім дивитись як ліміти в трубу летять.

Із особистого досвіду, і спостережень інших колег, до компакта приходять з досвідом. Тобто немає такого що компакт неправильно використовується за незнанням. Коли немає досвіду, взагалі про нього не знають, не знають про контекст ініжінірінг, і долбляться в ту саму сесію, яку агент вже 5 раз компактив, і скаржаться на результат. Тут починається зазвичай дві стежини.

1. Починають розбиратися що не так, читати про сесії, контекст інжінірінг, починають слідкувати за чистотою контекста (діло ж не тільки в його розмірі, а що там)

2. Йдуть на ДОУ розказувати що пробував я ваш ШІ, не працює, а ті, хто розказують що працює, то інфоцигани і продавці лопат. Попутно продовжують довбитися, врубати опус для всіх задач в надії що він покращить ситуацію, результат все-одно паршивий но рахунки для компанії кратно більші, ніж у більш ШІ досвідчених колег, які трохи вміють в контекст ініжінірінг.

Я б в принципі не дуже той компакт юзав би. Зазвичай, набагато краще перейти в нову сесію, зберігши артефакти роботи в файл.

Таким чином історія зберігається та й приколів з компактом не буде.

Щодо MCP то це залежить від кількості думаю. Якщо налаштувати 100500 MCP то ефект буде негативний, а якщо ми говоримо про декілька штук, то навряд чи будуть будь які проблеми.

Я взагалі вважаю, що нам не потрібно упорюватись в купу скіллів, MCP, і т.д.

Ставлять собі якісь монстроузні SuperClaude, а потім не розуміють, чому агент не може вирішити якісь задачі.

Наразі той же ClaudeCode дуже добре працює й сам по собі, а для покращення роботи вистачить декількох скілів та MCP.

Тут ще залежить під самого MCP, нарпиклад хром дев тул/фігма/контекст7 потягне 5-6к токенів на запиті за рахунок tool definition, і це на кожному запиті. А якщо при цьому ще з опусом спілкуватись, трохи дорого виходить)

Підписатись на коментарі