Проблема: неструктурована робота з AI
Коли розробник просто спілкується з Claude чат-інтерфейсом або напряму через API без структури, він стикається з проблемами:
- Повторення контексту — кожен запит вимагає повного пояснення контексту проєкту
- Неконсистентність — один запит виконується інакше, ніж інший
- Плутанина у моделях — невідомо, яка саме модель оптимальна для конкретного завдання
- Витрата токенів — відсутність фокусування призводить до надлишкових запитів
Рішення: команди, скіли та субагенти
Команди/Скіли — це структуровані інструкції у вигляді Markdown-файлів у каталозі .claude/. Станом на 2026 рік команди (commands) та скіли (skills) об’єднані в єдину систему: файл .claude/commands/deploy.md і скіл .claude/skills/deploy/SKILL.md рівнозначно створюють команду /deploy. Скіли — це більш потужний формат, що підтримує папку з допоміжними файлами, YAML frontmatter для керування запуском, і можливість автоматичного завантаження за контекстом.
Субагенти — це спеціалізовані AI-асистенти з власним контекстним вікном, системним промптом і правами доступу до інструментів. Кожен субагент:
- Виконується в ізольованому контексті, не засмічуючи основну розмову
- Може використовувати конкретний набір інструментів (наприклад, лише read-only)
- Може бути налаштований на конкретну модель (наприклад, Haiku для дешевих задач)
- Повертає лише стислий результат до основної сесії (але власні запити субагента теж рахуються у ваші витрати — див. розділ про витрати)
Актуальна структура проєкту (2026)
проєкт/ ├── .claude/ │ ├── CLAUDE.md # Пам'ять проєкту (або ./CLAUDE.md у корені) │ ├── settings.json # Спільні налаштування (комітити) │ ├── settings.local.json # Локальні override (gitignore) │ ├── agents/ # Субагенти (Markdown + YAML frontmatter) │ │ ├── feature-agent.md │ │ ├── bugfix-agent.md │ │ ├── code-reviewer.md │ │ └── commit-agent.md │ ├── commands/ # Slash-команди (legacy, сумісні зі skills) │ │ └── optimize.md # → /optimize │ ├── skills/ # Скіли (сучасний формат) │ │ ├── new-feature/ │ │ │ └── SKILL.md │ │ ├── fix-bug/ │ │ │ └── SKILL.md │ │ └── code-review/ │ │ └── SKILL.md │ ├── rules/ # Модульні правила (*.md); з paths: у frontmatter вантажаться лише для потрібних файлів │ ├── workflows/ # Збережені dynamic workflows │ └── hooks/ # Скрипти, що викликаються з hooks у settings.json ├── CLAUDE.local.md # Особисті нотатки проєкту (у корені, не в .claude/; додати в .gitignore) ├── src/ ├── tests/ └── package.json
CLAUDE.md завантажується в кожну сесію автоматично. Скіли — лише коли вони потрібні. Тому довгі процедури краще виносити в скіли, а не в CLAUDE.md. Орієнтир — до 200 рядків на файл; докладно про місця розташування, імпорти, rules і auto memory — у розділі про пам’ять.
Приклад скілу: розробка нової фічі
--- name: new-feature description: > Запускай цей скіл, коли потрібно реалізувати нову функціональність. Отримує опис фічі і веде розробку від планування до PR. disable-model-invocation: true # лише ручний виклик /new-feature --- ## Розробка нової фічі ### Процес виконання 1. Аналіз вимог — розбери вимоги, визнач область змін 2. Архітектурне планування — список файлів для змін 3. Реалізація — написати код відповідно до плану 4. Тести — написати юніт-тести для нової логіки 5. Документація — оновити коментарі та README 6. Підготовка коміту — Conventional Commits
Приклад скілу: виправлення бага
--- name: fix-bug description: > Запускай цей скіл для виправлення багів. Вимагає опис проблеми та кроки для відтворення. disable-model-invocation: true --- ### Процес виконання 1. Відтворення — зрозуміти де і чому виникає проблема 2. Root cause analysis — знайти першопричину 3. Фікс — написати мінімальний, цільовий код 4. Регресійний тест — тест, який покриває баг 5. Коміт — Conventional Commits з типом fix:
Актуальні моделі (жовтень 2026)
| Модель | API string / alias | Ціна in/out, $/MTok | Призначення |
|---|---|---|---|
| Claude Fable 5.1 | claude-fable-5-1 · fable |
$10 / $50 | Mythos-tier найскладніші long-horizon задачі |
| Claude Opus 5.5 | claude-opus-5-5 · opus |
$4 / $20 | Default у Claude Code архітектура, autonomous coding, fast mode |
| Claude Sonnet 5.5 | claude-sonnet-5-5 · sonnet |
$2 / $10 | Щоденний робочий кінь фічі, review, debugging |
| Claude Haiku 5.5 | claude-haiku-5-5 · haiku |
$0.10 / $0.50 (до 100K; понад — $0.50 / $2.50) | Low-cost пошук, коміти, прості задачі |
Усі чотири актуальні моделі мають контекст 1M токенів і до 128K вихідних. Legacy (ще доступні через API): Fable 5, Opus 5, Sonnet 5, Opus 4.8 / 4.7 / 4.6 / 4.5, Sonnet 4.6, Haiku 4.5 (виведення — не раніше 15.10.2026). Sonnet 4.5 — deprecated, вимикається 30.11.2026.
opus / sonnet / haiku / fable вже вказують на нові моделі, тому у frontmatter краще писати аліаси, а не повні ID. Але пам’ятай: до якої саме моделі веде аліас, залежить від провайдера та від моделі головної сесії — див. розділ «Аліаси моделей» нижче.
Аліаси моделей
Скрізь, де приймається модель (--model, /model, model у settings і frontmatter, ANTHROPIC_MODEL), можна писати як повний ID, так і аліас:
| Аліас | Що означає |
|---|---|
default | Скидає override і повертає модель за замовчуванням для твого акаунта |
best | Модель Fable там, де вона доступна, інакше Opus |
fable | Fable 5.1 (у сесіях Claude apps gateway — Fable 5) |
opus, sonnet, haiku | Найновіша модель відповідного сімейства — залежить від провайдера (таблиця нижче) |
sonnet[1m], opus[1m] | Суфікс [1m] вмикає контекст 1M. На моделях з нативним 1M (Sonnet 5+, Opus 4.7+) суфікс нічого не змінює |
opusplan | Гібрид: у plan mode працює opus, під час виконання — sonnet (деталі — у розділі «Оркестрація») |
inherit | У frontmatter субагента чи скіла: взяти модель головної сесії |
Як аліаси розв’язуються залежно від провайдера
| Провайдер | opus | sonnet | haiku |
|---|---|---|---|
| Anthropic API | Opus 5.5 | Sonnet 5.5 | Haiku 5.5 |
| Claude Platform on AWS | Opus 5.5 | Sonnet 4.6 | Haiku 4.5 |
| Bedrock / Agent Platform | Opus 5.5 | Sonnet 4.5 | Haiku 4.5 |
| Foundry | Opus 4.6 | Sonnet 4.5 | Haiku 4.5 |
Тобто на Bedrock model: sonnet у frontmatter дасть Sonnet 4.5, а не Sonnet 5.5. Якщо потрібна конкретна версія — задай її через ANTHROPIC_DEFAULT_SONNET_MODEL (див. таблицю змінних нижче) або повним ID.
| Аліас | Вказує на | Версія Claude Code, з якої перемкнувся |
|---|---|---|
fable | Fable 5.1 | v2.1.257 |
opus | Opus 5.5 | v2.1.280 |
sonnet | Sonnet 5.5 | v2.1.284 |
haiku | Haiku 5.5 | v2.1.293 |
Це ж мінімальні версії Claude Code, які підтримують відповідні моделі: Fable 5.1 — v2.1.257+, Opus 5.5 — v2.1.280+, Sonnet 5.5 — v2.1.284+, Haiku 5.5 — v2.1.293+.
sonnet/opus/haiku у frontmatter розв’язується в точну модель головної сесії, якщо вона належить до цього ж сімейства — разом із суфіксом [1m]. Приклад: головна сесія на Sonnet 4.6 → субагент з model: sonnet теж піде на Sonnet 4.6, а не на Sonnet 5.5. Тобто model: sonnet гарантовано дає Sonnet 5.5 лише коли головна сесія не на Sonnet (або вже на Sonnet 5.5) і провайдер — Anthropic API.Модель за замовчуванням
- Opus 5.5 — Pro, Max, Team, Enterprise, API, Claude Platform on AWS, Bedrock, Agent Platform.
- Sonnet 4.5 — Foundry.
- Fable ніколи не є default: його треба вибрати явно. Використання Fable може тарифікуватися з usage credits — Claude Code спершу показує запит на згоду.
Пріоритет вибору моделі
Від найвищого до найнижчого:
/modelпід час сесії--modelпри запускуANTHROPIC_MODEL- ключ
modelу settings ANTHROPIC_DEFAULT_MODEL(з v2.1.236)
У пікері /model клавіша s перемикає модель лише для поточної сесії (без збереження в settings).
Логіка вибору моделей
Effort Levels (адаптивне мислення)
Effort керує глибиною міркувань моделі. Рівні: low, medium, high, xhigh, max. Задається на рівні сесії, у settings.json або — з 2026 року — прямо у frontmatter субагента чи скілу:
# Усі 5 рівнів: Fable 5.x, Opus 5.5 / 5 / 4.8 / 4.7, Sonnet 5.5 / 5, Haiku 5.5 # Opus 4.6 / Sonnet 4.6 — без xhigh (непідтримуваний рівень «опускається» нижче) # Haiku 4.5 effort не підтримує взагалі claude --effort low # Швидко, дешево — для простих задач claude --effort medium # Default для Opus 5.5 / Sonnet 5.5 / Haiku 5.5 claude --effort high # Default для більшості моделей (крім 5.5-моделей — medium, і Opus 4.7 — xhigh) claude --effort xhigh # Глибоке міркування для складних задач claude --effort max # Коли коректність важливіша за вартість (діє лише на поточну сесію) # Всередині сесії: /effort high # /effort зберігає рівень для поточної моделі в modelSettings (user settings) # max у settings не приймається — його зберігає лише CLAUDE_CODE_EFFORT_LEVEL # Env: CLAUDE_CODE_EFFORT_LEVEL=auto|low|...|max — найвищий пріоритет
effort: тепер підтримується у frontmatter субагента (.claude/agents/*.md) і скілу (SKILL.md). Поля субагента (camelCase, чутливі до регістру; обов’язкові лише name і description): name, description, tools, disallowedTools, model, effort, permissionMode, maxTurns, skills, mcpServers, hooks, memory, background, isolation, omitClaudeMd, color, initialPrompt, experimental. Невідомі поля мовчки ігноруються — тож permission-mode (kebab-case) просто не спрацює. Повна таблиця полів із типами, значеннями за замовчуванням і версіями — у розділі «Субагенти».
Effort: рівні та значення за замовчуванням по моделях
| Модель | Рівні | Default у Claude Code |
|---|---|---|
| Fable 5.x | low · medium · high · xhigh · max | high |
| Opus 5.5, Sonnet 5.5, Haiku 5.5 | усі 5 | medium |
| Opus 5, Sonnet 5, Opus 4.8 | усі 5 | high |
| Opus 4.7 | усі 5 | xhigh |
| Opus 4.6, Sonnet 4.6 | без xhigh | high |
| Haiku 4.5 | effort не підтримується | — |
Для Sonnet 5.5 дефолт на рівні API — high, але Claude Code свідомо стартує з medium. Організація також може задати власний default effort для своєї моделі за замовчуванням. Шкала effort відкалібрована окремо для кожної моделі: Opus 5.5 на medium приблизно відповідає Opus 5 на high, тому при міграції починай із medium. max схильний до «передумування» — вмикай його точково.
Як визначається рівень effort
- Явний вибір: змінна
CLAUDE_CODE_EFFORT_LEVEL, прапор--effortабо команда/effort - Settings: збережений рівень у
modelSettingsабо ключeffortLevel - Default моделі (таблиця вище)
Значення CLAUDE_CODE_EFFORT_LEVEL (auto = default моделі) перебиває навіть effort у frontmatter субагента. Верхню межу задають managed-ключ maxEffortLevel та (на Enterprise) ліміти effort по ролях.
modelSettings проти effortLevel
{
"modelSettings": {
"claude-opus-5-5": { "effortLevel": "high" }
}
}/effort low|medium|high|xhighі слайдер у/modelзберігають рівень по моделях уmodelSettingsuser settings (з v2.1.251). Запис іде під канонічним іменем моделі, а аліаси та[1m]-варіанти відображаються на той самий запис.- Верхньорівневий
effortLevelу user settings — старий формат: він працює для Opus 5, Fable 5.1 і старіших моделей, але ігнорується для Opus 5.5 і новіших. - Верхньорівневий
effortLevelу project / local / managed settings або через--settingsдіє для всіх моделей. В одному файлі записmodelSettingsмає перевагу над верхньорівневим ключем. maxне приймається ні вeffortLevel, ні вmodelSettings.--effort maxта/effort maxдіють лише на поточну сесію; зберегтиmaxможна тільки черезCLAUDE_CODE_EFFORT_LEVEL./effort autoочищає збережений рівень для поточної моделі; у слайдері клавішаsзастосовує рівень лише на сесію (з v2.1.257).
ultrathink та ultracode
ultrathinkу тексті промпту — глибше міркування лише на цей хід. Effort, який іде в API, не змінюється. Фрази «think hard», «think more» ключовими словами не є.- Ultracode — це налаштування Claude Code (автоматична оркестрація workflows), а не рівень effort моделі.
--effort ultracodeставитьxhigh+ ultracode (з v2.1.203);/effort ultracodeлишає рівень effort без змін (з v2.1.284); постійно — ключ"ultracode": true. Недоступний, якщо workflows вимкнені або модель не підтримуєxhigh. Деталі — у розділі «Dynamic workflows».
Thinking
- На Opus 5.5, Sonnet 5.5, Haiku 5.5 та Fable thinking вимкнути не можна — лише змінювати effort.
Option+T/Alt+Tперемикає thinking там, де це можливо; ключіalwaysThinkingEnabled,showThinkingSummaries, зміннаMAX_THINKING_TOKENS.CLAUDE_CODE_DISABLE_ADAPTIVE_THINKINGпрацює лише на моделях 4.6.- Токени thinking тарифікуються як вихідні (output).
- Субагенти успадковують увімкнено/вимкнено extended thinking головної сесії; окремого налаштування thinking для субагента немає (з v2.1.198).
Fast mode
Fast mode — режим «до 2,5x швидше за вищу ціну за токен». Та сама модель і та сама якість, лише швидше інференс; функція — research preview.
| Параметр | Деталі |
|---|---|
| Підтримують | лише Opus 5.5, Opus 5 і Opus 4.8. З Opus 4.7 fast mode прибрано 24.07.2026 |
| Ціна, $/MTok in/out | Opus 5.5 — $8 / $40; Opus 5 та Opus 4.8 — $10 / $50. Ціна однакова на всьому контексті 1M |
| Підписки | тарифікується лише з usage credits — навіть якщо на плані лишилися ліміти |
| Team / Enterprise | Owner має спершу увімкнути fast mode |
| Недоступний | Bedrock, Vertex/Agent Platform, Foundry, Claude Platform on AWS |
| Окремий rate-limit | свій пул лімітів; при вичерпанні — автоматичний відкат до звичайної швидкості. Значок ↯ показує, що режим увімкнено |
| Як керувати | Що робить |
|---|---|
/fast | увімкнути/вимкнути режим у сесії |
"fastMode": true | зберегти режим як постійний (settings) |
fastModePerSessionOptIn | вимагати окремого вмикання в кожній сесії |
CLAUDE_CODE_DISABLE_FAST_MODE=1 | вимкнути можливість повністю |
Контекст 1M
| Модель | Як отримати 1M |
|---|---|
| Fable, Sonnet 5+, Haiku 5.5, Opus 4.7+ | нативно, без суфікса |
| Opus 4.6 | через [1m]; входить у Max / Team / Enterprise, на Pro — usage credits |
| Sonnet 4.6 | через [1m]; на будь-якій підписці (включно з Max) потрібні usage credits, на API — повний доступ |
- Надбавки за довгий контекст немає, окрім Haiku 5.5 понад 100K ($0.50 / $2.50).
- Auto-compact спрацьовує приблизно на 967K токенів.
- Керування:
CLAUDE_CODE_DISABLE_1M_CONTEXT=1, команда/autocompact, ключautoCompactWindow, зміннаCLAUDE_CODE_AUTO_COMPACT_WINDOW. - Вікно контексту субагента визначається його власною моделлю.
Fallback-моделі
--fallback-model sonnet,haikuабо ключfallbackModel— ланцюжок до 3 моделей, на які Claude Code переходить при недоступності основної. Для субагентів ланцюжки теж діють (з v2.1.247).- Автоматичний safety-fallback: Fable та Opus 5.5 за bio-тематикою переходять на Opus 5, за cyber — на Opus 4.8; Sonnet 5.5 за cyber — на Sonnet 5, а bio-запити відхиляє. Ключ
switchModelsOnFlagвизначає, чи питати перед перемиканням.
Змінні оточення для моделей
| Змінна | Призначення |
|---|---|
ANTHROPIC_MODEL | модель сесії (див. пріоритет вище) |
ANTHROPIC_DEFAULT_MODEL | найнижчий за пріоритетом default (v2.1.236+) |
ANTHROPIC_DEFAULT_{FABLE,OPUS,SONNET,HAIKU}_MODEL | до якої моделі веде кожен аліас. …_HAIKU_MODEL також використовується для фонової функціональності. Існують варіанти _NAME, _DESCRIPTION, _SUPPORTED_CAPABILITIES |
CLAUDE_CODE_SUBAGENT_MODEL | модель за замовчуванням для субагентів, teammate-ів Agent Teams і агентів workflow |
CLAUDE_CODE_SUBAGENT_MODEL_FORCE=1 | примусово одна модель для всіх субагентів/teammate-ів/workflow-агентів, ігнорує model з frontmatter (v2.1.257+) |
ANTHROPIC_CUSTOM_MODEL_OPTION | додає власний пункт у пікер /model |
DISABLE_PROMPT_CACHING (+ _FABLE / _OPUS / _SONNET / _HAIKU) | вимкнути prompt caching глобально або для однієї моделі |
ANTHROPIC_SMALL_FAST_MODEL | deprecated — використовуй ANTHROPIC_DEFAULT_HAIKU_MODEL |
Для адміністраторів: обмежити вибір моделей можна ключами availableModels (allowlist; при блокуванні підставляється найновіша дозволена модель того ж сімейства) та enforceAvailableModels, а також deniedModels / availableModelsMatch (v2.1.283+) і modelOverrides.
Кеш та знижки
- Читання з кешу коштує 0.05x від базової ціни на Opus 5.5 і Sonnet 5.5, та 0.025x на Fable 5.1. Batch API — знижка 50%.
- Виведення з обігу — не раніше ніж: Fable 5.1 — 01.09.2027, Opus 5.5 — 22.09.2027, Sonnet 5.5 — 28.09.2027, Haiku 5.5 — 07.10.2027.
Субагенти — це Markdown-файли з YAML frontmatter у каталозі .claude/agents/ (проєктні) або ~/.claude/agents/ (особисті). Для разових сесій їх також можна передати JSON-ом через прапор --agents. Команда /agents більше не є інтерактивним редактором — файли створюються та редагуються вручну.
Тіло файлу стає системним промптом субагента. Субагент не отримує системний промпт Claude Code — лише свій плюс базові відомості про оточення (наприклад, робочий каталог).
Feature Agent
--- name: feature-agent description: > Спеціаліст з реалізації нових функцій. Делегуй цьому агенту, коли потрібно реалізувати нову фічу від планування до готового коду. model: sonnet # аліас сімейства Sonnet (див. «Як визначається модель») effort: high tools: Read, Write, Edit, Bash, Glob, Grep --- Ти — досвідчений fullstack-розробник. Твій процес роботи: 1. Аналізуй вимоги і визнач мінімальний набір змін 2. Переглянь існуючий код для розуміння контексту 3. Напиши реалізацію відповідно до існуючих патернів 4. Додай юніт-тести 5. Поверни стислий звіт: що зроблено, які файли змінено
Bugfix Agent
--- name: bugfix-agent description: > Спеціаліст з виправлення багів. Делегуй коли є конкретна проблема з описом та кроками відтворення. model: sonnet tools: Read, Write, Edit, Bash, Glob, Grep permissionMode: acceptEdits # діє лише коли головна сесія в default/dontAsk/plan --- Ти — досвідчений debugger. Твій пріоритет — мінімальний, цільовий фікс. Твій процес: 1. Відтвори проблему, знайди root cause 2. Напиши мінімальний фікс (не рефакторинг!) 3. Додай регресійний тест 4. Поверни звіт: причина та що змінено
Code Reviewer
--- name: code-reviewer description: > Code review спеціаліст. Використовуй для перевірки PR або окремих файлів перед мержем. Код проєкту не змінює. model: sonnet tools: Read, Glob, Grep permissionMode: plan # діє лише якщо головна сесія НЕ в acceptEdits/auto/bypass memory: project # пам’ять між сесіями; автоматично вмикає Read/Write/Edit для файлів пам’яті --- Ти — senior code reviewer. Перевіряй на: - Коректність логіки та edge cases - Потенційні security вразливості - Продуктивність (лише суттєві проблеми) - Відповідність існуючим патернам проєкту Формат: APPROVE / REQUEST CHANGES / COMMENT + список зауважень з рівнем (critical/major/minor)
Commit Agent
--- name: commit-agent description: > Генератор commit messages. Використовуй після завершення роботи для якісного Conventional Commits повідомлення. model: haiku # аліас сімейства Haiku effort: low tools: Read, Bash --- Аналізуй `git diff --staged` та генеруй Conventional Commits. Формат: type(scope): short description - Деталь 1 - Деталь 2 BREAKING CHANGE: ... (якщо є)
permissionModeу субагента ігнорується, якщо головна сесія працює вbypassPermissions,acceptEditsабо auto: субагент виконується в тому ж режимі. Тожplanу code-reviewer «зафіксує» read-only лише коли батьківська сесія вdefault,dontAskчиplan; так самоacceptEditsу bugfix-agent.bypassPermissionsу frontmatter діє лише якщо головна сесія вже працює в ньому (v2.1.267+).memoryавтоматично вмикаєRead,Write,Edit— щоб агент міг вести файли пам’яті. Отже, «суворо read-only» рев’юер зmemory— не read-only. Для справжньої гарантії додайdisallowedToolsабо вимкниmemory.
Приклад: Vue test writer в ізольованому worktree
--- name: vue-test-writer description: > Пише Vitest-тести для Vue 3 компонентів. Використовуй проактивно після змін у frontend/src/components/. model: sonnet effort: medium tools: Read, Write, Edit, Bash, Glob, Grep disallowedTools: WebFetch, WebSearch skills: - vue-testing-conventions isolation: worktree maxTurns: 30 color: green experimental: cacheTtl: 5m --- Ти пишеш Vitest + @vue/test-utils тести. Не чіпай код компонентів. Після роботи запусти `npm run test:unit -- --run` і поверни список створених файлів та результат запуску.
Де зберігаються субагенти і хто виграє
| Пріоритет | Розташування | Область дії |
|---|---|---|
| 1 (найвищий) | Managed settings: .claude/agents/ у каталозі managed settings | уся організація |
| 2 | Прапор --agents (JSON) | поточна сесія |
| 3 | .claude/agents/ у проєкті | проєкт (у git — для всієї команди) |
| 4 | ~/.claude/agents/ | усі твої проєкти |
| 5 (найнижчий) | agents/ у плагіні | де встановлено плагін |
- Каталоги скануються рекурсивно; підпапки не впливають на ідентичність агента. У плагінах підпапки, навпаки, входять в ID:
my-plugin:review:security. - Проєктні агенти шукаються вгору до кореня репозиторію; перемагає найближчий. Каталоги з
--add-dirтакож завантажуються. - Зміни підхоплюються watcher-ом «за кілька секунд». Перезапуск потрібен, якщо створено новий каталог agents, для каталогів
--add-dirта з--disable-slash-commands. - Дублікати імен в одному каталозі: переможець залежить від порядку файлової системи;
/doctorповідомляє про дублікати. - Попередження при старті з’являється, якщо сумарні
descriptionкастомних агентів перевищують 15 000 токенів — довгі описи «з’їдають» контекст кожної сесії.
name (вважається документацією), --- не на першому рядку, некоректне ім’я, є name без description, або невалідний YAML. Шукай причину через --debug. Перевірити YAML можна командою claude plugin validate .claude/agents (v2.1.233+).Довідник полів frontmatter
Обов’язкові — лише name і description. Імена полів — camelCase і точні; невідомі поля мовчки ігноруються.
| Поле | Тип / значення | За замовчуванням | Семантика |
|---|---|---|---|
name | рядок, ≤256 символів; без :, не починається з - | обов’язкове | Унікальний ідентифікатор. Hooks отримують його як agent_type. Ім’я файлу може відрізнятися. Двокрапка зарезервована для plugin-ID |
description | рядок | обов’язкове | Коли Claude має делегувати цьому субагенту. Фраза «use proactively» заохочує автоматичне делегування |
tools | рядок через кому або YAML-список | усі інструменти, доступні субагентам | Allowlist. Підтримує mcp__<server>, mcp__<server>__* та Agent(type) (лише для main-thread, див. «Оркестрація»). Для preload скілів використовуй skills, не Skill. Якщо жодна позиція не розв’язалась, субагент зазвичай не запускається з помилкою з переліком позицій (з v2.1.208; раніше стартував без інструментів) |
disallowedTools | як у tools | немає | Інструменти, які треба прибрати. Застосовується до tools; інструмент в обох списках видаляється. Запис зі специфікатором (Bash(git push *)) все одно прибирає інструмент повністю. mcp__* прибирає всі MCP-інструменти |
model | sonnet / opus / haiku / fable / повний ID / inherit | за порядком вибору моделі (нижче) | Приймає ті ж значення, що й --model |
permissionMode | default / acceptEdits / auto / dontAsk / bypassPermissions / plan; manual = alias default | режим головної сесії | Див. callout вище про випадки, коли поле ігнорується. Для plugin-субагентів ігнорується |
maxTurns | ціле число | не зазначено | Максимум агентних ходів до зупинки. Результат позначається як partial, Claude може відновити субагента (маркування partial — з v2.1.246) |
skills | список | немає | Скіли для preload: у контекст вставляється повний вміст, а не лише опис. Субагент усе одно може викликати інші скіли через інструмент Skill. Скіли з disable-model-invocation: true (зокрема /verify) попередньо завантажити не можна. Відсутній скіл пропускається з попередженням у debug-log |
mcpServers | список імен або inline-конфігів (stdio/http/sse/ws) | немає | Inline-сервери підключаються при старті субагента й відключаються по завершенню; іменовані — ділять з’єднання з батьком. Inline-сервери з проєктного .claude/agents/ завантажуються лише після довіри до папки (з v2.1.238). Для plugin-субагентів ігнорується |
hooks | мапа hooks | немає | Lifecycle-hooks у межах цього субагента. Stop перетворюється на SubagentStop. Проєктні агенти потребують workspace trust, інакше hooks пропускаються (з v2.1.218). Для plugin-субагентів ігнорується |
memory | user / project / local | вимкнено | Постійна пам’ять між сесіями. Шляхи: ~/.claude/agent-memory/<name>/, .claude/agent-memory/<name>/, .claude/agent-memory-local/<name>/. У контекст вставляються перші 200 рядків або 25 КБ MEMORY.md; автоматично вмикаються Read/Write/Edit. Не діє, якщо вимкнено auto memory (autoMemoryEnabled / CLAUDE_CODE_DISABLE_AUTO_MEMORY). Рекомендований scope — project |
background | boolean | false | Тримати субагента у фоні, навіть якщо Claude просить запустити його у foreground |
omitClaudeMd | boolean | false | Запуск без user/project/local CLAUDE.md (managed policy-файли все одно завантажуються, крім managed-субагентів). Ігнорується при запуску через --agent. v2.1.271+ |
effort | low / medium / high / xhigh / max | рівень сесії | Перекриває effort сесії, але не змінну CLAUDE_CODE_EFFORT_LEVEL. Обмежується maxEffortLevel та орг-лімітами. Параметр effort на окремому виклику перекриває поле й зберігається при resume (v2.1.292+) |
isolation | worktree | немає | Запуск у тимчасовому git worktree, що за замовчуванням відгалужується від default-гілки, а не від HEAD батьківської сесії. Автоматично видаляється, якщо змін немає. Bash-команди, що цілять у основний checkout, блокуються (перевірка cwd — v2.1.203 / v2.1.210) |
color | red / blue / green / yellow / purple / orange / pink / cyan | не зазначено | Колір у списку задач і транскрипті. У --agents JSON не приймається |
initialPrompt | рядок | немає | Автоматично подається як перший user-хід, коли агент працює як головна сесія (--agent або ключ agent); команди та скіли обробляються. Для plugin-субагентів ігнорується |
experimental | мапа: cacheTtl: 5m | 1h | немає | Час життя prompt-кешу для цього субагента. Писати всередині experimental, не на верхньому рівні. 1h ігнорується, поки підписка працює на usage credits; читається лише з файлів субагентів. v2.1.248+ |
Прапор --agents: субагенти як JSON
Для разових сесій, CI або тестів. Кожен ключ верхнього рівня — ім’я агента, поле prompt — системний промпт (може бути порожнім, з v2.1.281).
claude --agents '{
"django-migration-reviewer": {
"description": "Перевіряє Django-міграції на небезпечні операції. Використовуй проактивно перед MR.",
"prompt": "Ти рев’юер міграцій Django. Шукай RunPython без reverse, видалення колонок, NOT NULL без default.",
"tools": ["Read", "Grep", "Glob", "Bash"],
"model": "sonnet",
"maxTurns": 15
}
}'
# Додатковий системний промпт для субагентів у -p (v2.1.205+; з файлу — v2.1.261+)
claude -p --append-subagent-system-prompt "Відповідай українською" "..."- Приймаються поля:
description,tools,disallowedTools,model,permissionMode,mcpServers,hooks,maxTurns,skills,initialPrompt,memory,effort,background,omitClaudeMd,isolation. colorтаexperimentalу JSON ігноруються.- У режимі
-pзамість JSON-рядка можна передати шлях до JSON-файлу (v2.1.281+).
Субагенти з плагінів
Плагінні субагенти лежать у каталозі agents/ плагіна, мають ID виду plugin:name. З міркувань безпеки поля hooks, mcpServers і permissionMode у них ігноруються; так само ігнорується initialPrompt. Потрібен такий агент з hooks чи MCP — скопіюй його у .claude/agents/ або ~/.claude/agents/.
Як викликати субагента
| Спосіб | Приклад | Нотатки |
|---|---|---|
| Природна мова | Use the django-migration-reviewer agent on apps/orders/ | Claude сам вирішує, чи делегувати, орієнтуючись на description |
| @-згадка | @"code-reviewer (agent)" (з пікера) або @agent-code-reviewer, @agent-plugin:name | гарантує виклик саме цього агента |
| Вся сесія як агент | claude --agent code-reviewer | промпт агента замінює дефолтний системний промпт; CLAUDE.md все одно завантажується; вибір зберігається при resume |
| Постійно для проєкту | "agent": "code-reviewer" у .claude/settings.json | CLI-прапор --agent має вищий пріоритет |
| Проактивне делегування | фраза «use proactively» в description | Claude частіше делегує без явного прохання |
Як визначається модель субагента
Від найвищого пріоритету:
- Параметр
modelокремого виклику. Mod-hookagent.spawnможе його замінити. - Поле
modelз frontmatter (inherit= модель головної сесії). - Змінна
CLAUDE_CODE_SUBAGENT_MODEL. - Модель головної сесії.
- До v2.1.251 змінна оточення стояла першою.
CLAUDE_CODE_SUBAGENT_MODEL=inherit= «не задано» (до v2.1.196 вона примусово ставила inherit). - Сама по собі
CLAUDE_CODE_SUBAGENT_MODELне змінює Explore і Plan. CLAUDE_CODE_SUBAGENT_MODEL_FORCE=1(v2.1.257+) примусово ставить одну модель усім субагентам, teammate-ам і workflow-агентам і ігноруєmodelз frontmatter. Fork-и таcontext: forkскіли зmodel: inheritусе одно йдуть на модель головної сесії.- Підстановка
availableModelsдіє й на субагентів: береться найновіша дозволена версія сімейства (з v2.1.222). - Модель окремого виклику зберігається при resume (v2.1.211+). Перемикання через
/modelдоходить і до субагентів, що наслідують модель. /tasksпоказує модель та effort кожного субагента (v2.1.242+).
Вбудовані субагенти
| Агент | Модель | Інструменти / особливості |
|---|---|---|
Explore | модель головної сесії. Якщо головна — Fable: аліас opus (підписка, Console, LLM gateway через ANTHROPIC_BASE_URL); на Bedrock, Agent Platform, Foundry, Claude Platform on AWS та apps gateway лишається модель головної сесії | read-only (Write/Edit заборонені); рівні ретельності quick / medium / very thorough; не читає CLAUDE.md і git status; одноразовий — відновити не можна. Користувацький або проєктний агент з іменем Explore перекриває вбудований |
Plan | модель головної сесії (змінна лише з FORCE) | read-only; використовується в plan mode; пропускає CLAUDE.md та git status; відновити не можна |
general-purpose | CLAUDE_CODE_SUBAGENT_MODEL | інакше модель головної сесії; усі інструменти субагента |
claude | власної моделі немає — діє порядок вибору | усі інструменти; catch-all; агент за замовчуванням для background-сесій |
statusline-setup | Sonnet | використовується командою /statusline |
claude-code-guide | Haiku | відповіді про Claude Code |
fork | модель головної сесії | спеціальний тип для форків — див. розділ «Виконання субагентів» |
Як вимкнути вбудованих:
permissions.deny: ["Agent(Explore)"]або--disallowedTools "Agent(Explore)"— конкретний тип; deny наAgent— будь-яке делегування.CLAUDE_CODE_DISABLE_EXPLORE_PLAN_AGENTS=1(v2.1.198+) — прибрати Explore і Plan.CLAUDE_AGENT_SDK_DISABLE_BUILTIN_AGENTS=1— для режимів-p/SDK.- Інструмент
Taskперейменовано наAgentу v2.1.63; записTask(...)досі працює як alias.
Виконання субагентів — фон, інструменти, ліміти, resume, форки
Що відбувається після того, як Claude вирішив делегувати: як агент запускається, що бачить і скільки їх може бути.
Foreground і background
- В інтерактивних сесіях fork-режим увімкнено за замовчуванням (з v2.1.232): усі запущені субагенти працюють у фоні, і Claude не може попросити foreground.
- У режимах
-p/SDK субагенти за замовчуванням у фоні; foreground — коли Claude потрібен результат для продовження. CLAUDE_CODE_DISABLE_BACKGROUND_TASKS=1примусово переводить усе у foreground.Ctrl+Bвідправляє запущену задачу у фон.- Поле
background: trueу frontmatter тримає конкретного агента у фоні, навіть якщо Claude просить foreground. - Запити дозволів від background-субагентів з’являються в головній сесії.
- Для швидких побічних питань використовуй
/btw— це краще, ніж запускати для цього субагента.
Які інструменти бачить субагент
Незалежно від tools, з субагента завжди прибираються:
Agent— на межі ліміту глибини;AskUserQuestion,EndConversation,EnterPlanMode,ScheduleWakeup,WaitForMcpServers,Workflow;ExitPlanMode— крім випадку, колиpermissionMode: plan.
Background-субагенти (а це дефолт) зберігають лише такі вбудовані інструменти:
| Група | Інструменти |
|---|---|
| Файли та пошук | Read, Grep, Glob, LSP (v2.1.280+), Edit, Write, NotebookEdit |
| Виконання | Bash, PowerShell, Monitor, TaskStop |
| Веб | WebFetch, WebSearch |
| Координація | TodoWrite, Skill, ToolSearch, SendMessage, Artifact, EnterWorktree, ExitWorktree |
| MCP | усі MCP-інструменти |
Ліміти конкурентності та глибини
| Змінна / ліміт | За замовчуванням | Опис |
|---|---|---|
CLAUDE_CODE_MAX_CONCURRENT_SUBAGENTS | 20 | Максимум одночасних субагентів (v2.1.217+). Не застосовується при увімкненому ultracode. Загального ліміту на кількість за сесію немає |
CLAUDE_CODE_MAX_SUBAGENT_SPAWN_DEPTH | 3 | Глибина вкладеності; 1 вимикає вкладені субагенти |
CLAUDE_CODE_DISABLE_BACKGROUND_TASKS | вимкнено | 1 — лише foreground |
CLAUDE_CODE_FORK_SUBAGENT | увімкнено (інтерактив) | 1/0 — увімкнути чи вимкнути fork-режим |
CLAUDE_CODE_SUBAGENT_MODEL / _FORCE | — | модель субагентів — див. розділ «Моделі» |
CLAUDE_AUTOCOMPACT_PCT_OVERRIDE | — | поріг автокомпактації, що діє й на субагентів |
CLAUDE_ASYNC_AGENT_STALL_TIMEOUT_MS | 600000 (10 хв) | тайм-аут «зависання» субагента в мс; з v2.1.286 діє й для агентів workflow |
Відновлення субагента (resume)
Claude повертається до вже запущеного субагента через SendMessage, вказуючи його ID або ім’я — тобто субагент продовжує з накопиченим контекстом, а не стартує заново. Agent teams для цього не потрібні. Explore і Plan відновити не можна — вони одноразові. Якщо агент зупинився через maxTurns, його результат позначено як partial, і Claude може відновити агента, щоб той завершив роботу.
Транскрипти та очищення
~/.claude/projects/{project}/{sessionId}/subagents/agent-{agentId}.jsonl- Транскрипти видаляються через
cleanupPeriodDays(за замовчуванням 30 днів). - Субагенти автоматично компактують свій контекст (діє
CLAUDE_AUTOCOMPACT_PCT_OVERRIDE). - З v2.1.210 вивід субагентів сканується перед поверненням у головну сесію.
Форки та /subtask
Fork — це субагент, що успадковує всю розмову головної сесії, її системний промпт, інструменти та модель. Оскільки префікс однаковий, форк ділить prompt cache з батьком і тому дешевший за свіжого субагента, якому треба все пояснювати з нуля.
/subtask Перевір, чи всі ендпоїнти apps/orders/api/ мають permission_classes
# До v2.1.212 (з v2.1.161) команда називалась /fork- Форк не може породжувати інші форки.
CLAUDE_CODE_FORK_SUBAGENT=0вимикає fork-режим (Claude більше не створює форки сам, а субагенти знову можуть працювати у foreground);/subtaskпрацює незалежно від fork-режиму. Заборонити Claude створювати форки, не вимикаючи режим, — правиломAgent(fork)у deny.- Панель форків:
↑/↓вибір,Enterвідкрити транскрипт,xзупинити (або прибрати рядок завершеного),Escповернутися до поля вводу. - Коли використовувати: побічне дослідження, яке потребує контексту поточної розмови (наприклад, «знайди всіх споживачів цього Vue-composable»), але не має засмічувати основну сесію. Якщо контекст не потрібен — краще окремий субагент з вузьким промптом.
Концепція: Головна сесія як менеджер
Замість жорсткої ролі "Opus = оркестратор", сучасний підхід виглядає так:
- Головна сесія (Opus 5.5 за замовчуванням) розуміє задачу і делегує роботу
- Субагенти виконують спеціалізовані завдання в ізольованих контекстах — паралельно (до 20 одночасно) і за замовчуванням у фоні
- Вбудований Explore агент виконує read-only дослідження кодової бази. Увага: тепер він працює на моделі головної сесії, а не на Haiku
.claude/agents/explore.md з name: Explore, model: haiku і tools: Read, Glob, Grep — він перекриє вбудований.
Claude Code автоматично делегує задачі субагентам на основі їхніх description. Також можна явно викликати субагента:
# Явний виклик субагента природною мовою claude "Use the code-reviewer agent to review auth/ directory" # @-згадка у промпті (гарантований виклик саме цього агента) @agent-code-reviewer перевір auth/ # Вся сесія як конкретний агент claude --agent code-reviewer # Виклик через скіл /fix-bug "В фільтрі дат краш при виборі однакових дат" # Нова фіча через скіл /new-feature "Додати фільтрацію по датах. Критерії: діапазон дат"
Схема делегування
Режим opusplan (для складних задач)
claude --model opusplan "Redesign the authentication system to support OAuth2 + API keys" # plan mode → Opus 5.5 для глибокого архітектурного аналізу # exec mode → автоматично Sonnet 5.5 для генерації коду # На Anthropic API обидві фази вже мають нативний 1M, тож opusplan[1m] не потрібен; # він має сенс лише там, де opus/sonnet не мають нативного 1M (задавати через /model — v2.1.265+)
Вкладені субагенти
Субагенти можуть породжувати власних субагентів — за замовчуванням до 3 рівнів вкладеності (обмежується CLAUDE_CODE_MAX_SUBAGENT_SPAWN_DEPTH; щоб заборонити конкретному агенту, прибери Agent з його tools).
| Версії Claude Code | Дефолтна глибина |
|---|---|
| v2.1.172 – v2.1.216 | до 5 рівнів, не налаштовується |
| v2.1.217 – v2.1.218 | 1 (вкладені субагенти вимкнені) |
| v2.1.219 і новіші | 3 (регулюється CLAUDE_CODE_MAX_SUBAGENT_SPAWN_DEPTH) |
Agent(code-reviewer, django-migration-reviewer) у tools обмежує, яких субагентів можна породжувати, лише для агента, запущеного як main thread через claude --agent. У визначенні звичайного субагента Agent у tools дозволяє вкладене делегування в межах ліміту глибини, але перелік типів у дужках ігнорується.--- name: lead description: Тімлід, що делегує лише перевіреним агентам tools: Agent(code-reviewer, django-migration-reviewer, vue-test-writer), Read, Bash --- Розбий задачу на підзадачі й делегуй їх лише дозволеним агентам. Сам код не пиши.
Запуск: claude --agent lead.
Для масштабних задач (міграції, аудит усього репозиторію, deep research) є dynamic workflows — скрипт, що у фоні оркеструє десятки–сотні субагентів. Детально — у розділі Dynamic workflows.
Деталі opusplan
- Plan mode використовує аліас
opus, виконання —sonnet. Фази керуються зміннимиANTHROPIC_DEFAULT_OPUS_MODELтаANTHROPIC_DEFAULT_SONNET_MODEL. - Якщо задано allowlist
availableModels, підставляється найновіший дозволений Opus. - Альтернатива: інструмент advisor.
Який механізм обрати
| Механізм | Коли брати | Ціна |
|---|---|---|
| Субагент | вузьке завдання в ізольованому контексті з коротким підсумком (review, пошук, генерація тестів) | нижча; результат повертається викликачу |
Fork (/subtask) | побічне завдання, що потребує поточної розмови | дешевший за субагента завдяки спільному кешу |
| Agent Teams | паралельна робота, де виконавцям треба обговорювати між собою | вища — кожен teammate має повний контекст |
| Dynamic workflow | масові однотипні операції та багатофазні конвеєри з перевіркою (міграція, аудит) | найвища; контролюється size guideline |
Приклад: паралельний review MR
Переглянь MR !482 у GitLab. Паралельно запусти: 1) code-reviewer на backend-змінах (Django, apps/orders/) — безпека і N+1 запити; 2) vue-test-writer на змінених Vue-компонентах (frontend/src/components/); 3) django-migration-reviewer на нових міграціях. Зведи результати в один коментар для MR, не публікуй його без мого підтвердження.
Вартість делегування
- Запити субагентів рахуються в ті ж ліміти використання, що й основна сесія.
/usageпоказує, скільки пішло на субагентів, скіли, плагіни та MCP. - Подешевшати:
model: haikuдля механічних агентів абоCLAUDE_CODE_SUBAGENT_MODELразом з_FORCEдля всіх одразу. - Орієнтир: у середньому по Enterprise ≈ $13 на розробника за активний день, $150–250 на місяць; у 90% користувачів — менше $30 за активний день. Фонове використання зазвичай менше $0.04 за сесію.
- Тримай CLAUDE.md коротшим за 200 рядків; процедури виносять у скіли.
- Thinking-токени тарифікуються як output. Ultracode змушує кожен запит використовувати більше токенів, тому ліміти плану вичерпуються швидше.
export CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1
-p і не в Agent SDK), API та поведінка можуть змінитися — не покладайся на неї у production-воркфлоу.
Увімкнути можна й без export — через env у settings:
{
"env": {
"CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS": "1"
}
}name), запускається як teammate — а Claude може називати субагентів і сам. Тож команда може з’явитись, навіть коли ти її не просив, — і Claude не запитує підтвердження. Щоб цього не було, постав CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=0; зміна з settings діє «наживо», без перезапуску.Для задач, де потрібні декілька агентів одночасно, Claude Code підтримує agent teams — окремі сесії, що координуються між собою. Team lead (головна сесія) створює teammates — окремі інстанси Claude зі спільним списком задач (з залежностями та блокуванням) і поштовою скринькою для обміну повідомленнями.
Режим відображення задається налаштуванням teammateMode або прапором --teammate-mode: in-process (default), auto, tmux, iterm2 (split-панелі). Для контролю якості є hooks TeammateIdle, TaskCreated, TaskCompleted.
| Характеристика | Субагенти | Agent Teams |
|---|---|---|
| Контекст | Ізольований, у межах сесії | Окремі незалежні сесії |
| Паралельність | Паралельно, у фоні (до 20 одночасно) | Паралельно; жорсткого ліміту на кількість teammate-ів немає (рекомендовано 3–5). Не входять у ліміт 20 субагентів — мають власні ліміти |
| Комунікація | Повертають результат викликачу | Пишуть одне одному напряму, спільний task list |
| Вкладеність | До 3 рівнів субагентів | Одна команда на сесію, без вкладених команд |
| Вартість токенів | Нижча | Вища — кожен teammate має повний контекст |
| Використання | Більшість задач | Великі паралельні роботи |
Архітектура
| Компонент | Як працює |
|---|---|
| Team lead | головна сесія; фіксований на весь час життя команди |
| Teammates | окремі інстанси Claude Code; завантажують CLAUDE.md, MCP, скіли та spawn-промпт, але не історію лідера |
| Task list | стани pending / in progress / completed; залежності розблоковуються автоматично; claim через file locking; лідер призначає задачі або teammate-и беруть самі |
| Mailbox | повідомлення: ~/.claude/teams/{team-name}/inboxes/{agent-name}.json. Адресат — один на повідомлення (broadcast немає). Idle-сповіщення містять фінальну відповідь teammate-а |
| Назва команди | session- + перші 8 символів ID сесії |
| Конфіг команди | ~/.claude/teams/{team-name}/config.json з масивом members (лідер має тип team-lead). Видаляється в кінці сесії — не редагуй |
| Задачі | ~/.claude/tasks/{team-name}/ — зберігаються |
Проєктного конфігу команди немає: файл .claude/teams/teams.json не розпізнається.
Керування у режимі in-process
| Клавіша / команда | Дія |
|---|---|
↑ / ↓ | вибір teammate-а |
Enter | відкрити транскрипт і написати teammate-у |
Esc | зняти вибір або перервати teammate-а, якого переглядаєш |
x | зупинити teammate-а |
Ctrl+T | показати/сховати список задач |
| Завершення | попроси лідера: «Ask the researcher teammate to shut down». Teammate може погодитись або відхилити |
/model, /fast | з вікна teammate-а не виконуються (вони змінили б модель і fast mode лідера); модель і fast mode teammate-а фіксуються при spawn |
Коли всі агенти в панелі простоюють, idle-рядки ховаються через 30 секунд (teammate при цьому працює далі й доступний за іменем). Якщо idle-teammate-ів більше трьох, рядки понад перші три згортаються в один рядок «N idle agents».
Режими відображення: нюанси
- Прапор
--teammate-modeекспериментальний і не показується уclaude --help. iterm2потребує CLIit2та ввімкненого Python API (iTerm2 → Settings → General → Magic). Для iTerm2 також радятьtmux -CC.- Split-панелі не підтримуються у терміналі VS Code, Windows Terminal і Ghostty; для них використовуй in-process.
Модель і дозволи teammate-ів
Модель teammate-а визначається за порядком:
- модель, названа в spawn-промпті;
modelз визначення субагента;CLAUDE_CODE_SUBAGENT_MODEL;- модель лідера.
- Ключ
teammateDefaultModelприбрано у v2.1.234. Teammate-и успадковують effort лідера. - Режим дозволів — як у лідера, окрім
dontAsk;--dangerously-skip-permissionsпоширюється на всіх. Режим окремого teammate-а можна змінити після spawn, але не задати при spawn. Запити дозволів з’являються в лідера. - Якщо лідер у plan mode, teammate-и, запущені в цей час, спершу планують, а лідер автоматично схвалює їхні плани.
Визначення субагентів як teammate-ів
| Поле / частина | Чи застосовується |
|---|---|
tools | так; in-process teammate-у додаються SendMessage та інструменти задач |
model | так |
disallowedTools | лише in-process |
effort | лише in-process |
| Тіло файлу (промпт) | in-process — додається до системного промпту; split-pane — замінює його |
skills | не застосовується |
mcpServers | лише split-pane |
Обмеження
/resumeта/rewindне відновлюють in-process teammate-ів.- Статус задач може запізнюватись; завершення teammate-а повільне.
- Лідер фіксований; одна команда на сесію, вкладених команд немає.
- In-process teammate-и не можуть запускати background-субагентів.
- Дозволи задаються при spawn.
- Split-панелі потребують tmux або iTerm2; фіча працює лише в інтерактивних сесіях (без
-pта SDK).
Вартість і розмір команди
- Agent Teams використовують значно більше токенів; ≈ 7x порівняно зі звичайною сесією, коли teammate-и працюють у plan mode.
- Для teammate-ів бери Sonnet. Починай із 3–5 teammate-ів і 5–6 задач на кожного. Завершуй teammate-ів, коли вони закінчили.
- Кеш in-process teammate-а живе 5 хвилин за замовчуванням; для 1 години —
subagentPromptCacheTtl: "1h"(запис у кеш на 1 годину тарифікується дорожче).
Коли команда виправдана, а коли ні
Почни з не-кодових задач: review MR, дослідження. Приклад spawn-промпту:
Create an agent team to review MR !482 in GitLab: - one teammate on Django API security (permissions, serializers), - one on Vue 3 component accessibility, - one on test coverage gaps. Use Sonnet for each teammate. Ask them to report findings, not to edit code.
Альтернатива, коли окремі сесії треба лише зв’язати між собою, — cross-session messaging.
Dynamic workflows — масштабна оркестрація скриптом
Коли задача більша за один контекст або однотипна для сотень елементів: скрипт керує агентами, а не модель крок за кроком.
Dynamic workflow — це JavaScript-скрипт, який пише Claude, а окремий runtime виконує його у фоні: скрипт розкладає велику задачу на фази й запускає десятки–сотні агентів. Проміжні результати лишаються у змінних скрипта, а не в контексті розмови — ти отримуєш один підсумок замість покрокового транскрипту.
Доступність
- Усі платні плани, API, Bedrock, Agent Platform та Foundry.
- На Pro вмикається в
/config— рядок Dynamic workflows. - Вбудований workflow:
/deep-research <питання>— веб-пошук з кількох кутів, перехресна перевірка джерел, голосування за кожне твердження і звіт з цитатами (потрібен інструмент WebSearch). Запускається лише на твій виклик.
Як запустити
| Спосіб | Що відбувається |
|---|---|
Ключове слово ultracode у промпті | Claude пише workflow лише для цього завдання, effort сесії не змінюється |
| Прохання своїми словами | наприклад «use a workflow» — теж рахується як opt-in |
/effort ultracode | Claude планує workflow для кожного суттєвого завдання сесії (одне прохання може дати кілька workflow поспіль: розібратись → змінити → перевірити). Вимкнути: /effort ultracode off |
claude --effort ultracode | старт сесії з ultracode; ставить також xhigh (v2.1.203+) |
Збережена команда /name | запуск існуючого workflow (вбудованого, власного чи з плагіна) |
ultracode: проаудитуй усі DRF-в’юхи в apps/ на відсутні permission_classes і перевір кожну знахідку скептично
- Ключове слово підсвічується у полі вводу.
Option+W/Alt+Wзнімає підсвітку для цього промпта; постійно вимкнути — перемикач «Ultracode keyword trigger» у/config. - Ключове слово спрацьовує лише у промпті, який друкуєш ти сам (інтерактив, IDE, Remote Control, SDK з людським
origin). Воно не запускає workflow з-p, з SDK-вводу без позначки людського введення, зі scheduled tasks, з webhook-ів і коментарів до PR (з v2.1.210; раніше спрацьовувало й звідти). - Ultracode — налаштування Claude Code (ключ
"ultracode": trueдля постійного вмикання), а не рівень effort моделі. Коли воно увімкнене: немає попередження «Large workflow», не діє ліміт одночасних субагентів для Agent tool, а в auto-режимі не питають підтвердження першого запуску.
Підтвердження плану
Перед запуском CLI показує заплановані фази і варіанти: Yes, run it · Yes, and don’t ask again (лише для вбудованих, збережених і плагінних workflow, не для одноразового скрипта) · View raw script · No. Ctrl+G відкриває скрипт у редакторі.
| Режим дозволів | Коли питає |
|---|---|
| Manual, acceptEdits | кожен запуск (якщо не вибрано «don’t ask again») |
| Auto | лише перший запуск; будь-яке «Yes» записує згоду у user settings. Не питає при ultracode |
| Bypass permissions | не питає |
-p / SDK | не питає, але дозвіл потрібен через правило Workflow або Workflow(<name>) в allow, auto-режим, bypass, hook PreToolUse чи callback хоста |
Субагенти workflow працюють за твоїми правилами дозволів. Щоб довгий запуск не зупинявся на промптах, додай потрібні інструменти в allow ще до старту.
Керування запуском: /workflows
| Клавіша | Дія |
|---|---|
↑ / ↓ | вибір фази чи агента |
Enter / → | зайти у фазу, потім у деталі агента (у деталях Enter розгортає/згортає) |
Esc / ← | крок назад |
j / k | прокрутка деталей агента |
f | фільтр агентів у фазі за статусом (повторне натискання — наступний) |
p | пауза / продовження запуску |
x | зупинити вибраного агента або весь workflow |
r | перезапустити вибраного агента |
s | зберегти скрипт як команду |
Деталі агента показують його промпт, останні виклики інструментів, результат і власний task list; також видно токени кожного агента. Запуск можна відновити (resume) у межах тієї ж сесії; скрипт кожного запуску лежить у ~/.claude/projects/.
Збереження і повторне використання
- У
/workflowsвибери запуск і натисниs;Tabперемикає місце:.claude/workflows/проєкту (ділиться з командою через git) або~/.claude/workflows/(лише ти, усі проєкти). Workflow далі запускається як/<name>. - Проєктний workflow перемагає особистий з тим же іменем. У монорепо береться найближчий каталог
.claude/workflows/до робочого каталогу. - У плагіні — каталог
workflows/у корені; ім’я з простором:/acme-tools:release-audit. - Вхідні дані: «Run /triage-issues on issues 1024, 1025» — Claude передає список як структуровані дані в глобальну змінну
args.
Скрипт: огляд API
| Елемент | Призначення |
|---|---|
export const meta | перший оператор; чистий літерал (без змінних і викликів): name, description, необов’язково phases |
agent(prompt, opts) | запустити один субагент; повертає текст або (зі schema) валідований об’єкт; null — якщо зупинено або впав. Опції: schema, label, phase, stallMs, model, effort, agentType, isolation: 'worktree' |
pipeline(items, ...stages) | прогнати кожен елемент крізь стадії незалежно, без бар’єра між ними — варіант за замовчуванням |
parallel(thunks) | виконати набір задач одночасно й дочекатися всіх (бар’єр). Збій елемента = null |
phase(title) | згрупувати наступні агенти під заголовком у прогресі |
log(msg) | повідомлення над деревом прогресу |
args | вхідні дані запуску |
export const meta = {
name: 'drf-permission-audit',
description: 'Аудит DRF-в’юх на відсутні permission_classes',
phases: [
{ title: 'Discover', detail: 'знайти файли з в’юхами' },
{ title: 'Audit', detail: 'по одному агенту на файл' },
{ title: 'Verify', detail: 'скептична перевірка знахідок' },
],
}
const FILES = {
type: 'object',
required: ['files'],
properties: { files: { type: 'array', items: { type: 'string' } } },
}
const FINDINGS = {
type: 'object',
required: ['findings'],
properties: { findings: { type: 'array', items: { type: 'string' } } },
}
const VERDICT = {
type: 'object',
required: ['real'],
properties: { real: { type: 'boolean' }, why: { type: 'string' } },
}
phase('Discover')
const found = await agent(`List every views.py and viewsets.py under ${args.dir}.`, {
schema: FILES, label: 'discover',
})
// pipeline: кожен файл проходить Audit -> Verify незалежно, без бар’єра
const results = await pipeline(
found.files,
file => agent(`Find DRF views in ${file} without permission_classes.`, {
phase: 'Audit', label: file, schema: FINDINGS,
}),
(audit, file) => audit && audit.findings.length
? agent(`Try to refute these findings for ${file}: ${audit.findings.join('; ')}`, {
phase: 'Verify', label: `verify ${file}`, schema: VERDICT,
}).then(v => ({ file, findings: audit.findings, confirmed: v && v.real }))
: null,
)
return results.filter(Boolean).filter(r => r.confirmed)- Скрипт — звичайний JavaScript (не TypeScript).
Date.now(),Math.random()таnew Date()без аргументів кидають помилку (інакше resume не відтворив би виклики);import()заборонено; прямого доступу до файлів чи shell у скрипта немає — це роблять агенти. - Якщо вивід агента не проходить валідацію за
schemaпісля 5 спроб, виклик падає з помилкою; кількість спроб змінюєMAX_STRUCTURED_OUTPUT_RETRIES. - Перед редагуванням збереженого скрипта запусти скіл
/workflow-authoring(v2.1.248+) — він підвантажує довідник із написання скриптів; після змін виконай/reload-skills.
Ліміти та змінні
| Обмеження | Значення |
|---|---|
| Одночасні агенти | 16 за замовчуванням (менше на слабкому CPU). CLAUDE_CODE_WORKFLOW_MAX_CONCURRENT_AGENTS — від 1 до 256 (v2.1.269+) |
Елементів у одному parallel()/pipeline() | до 4 096; довший список — помилка |
| Агентів за запуск | 1 000 |
| Введення користувача під час запуску | немає; для узгодження між етапами запускай кожен етап окремим workflow |
| Затримка старту заради кешу | агенти зі спільним префіксом стартують із затримкою до 5 с (CLAUDE_CODE_WORKFLOW_PREFIX_STAGGER_MS, 0 вимикає) |
| Перезапуск «завислих» агентів | до 5 разів (CLAUDE_ASYNC_AGENT_STALL_TIMEOUT_MS або stallMs в agent()) |
| Пауза на usage limit | з v2.1.271: агенти чекають скидання, макс. 2 очікування, скидання має бути в межах 24 год; потрібна інтерактивна підписка та увімкнений autoContinueAtUsageLimit |
Вартість і розмір
- Один запуск може коштувати суттєво більше токенів, ніж та ж задача в розмові; запуски рахуються в ліміти плану. Спершу проганяй на малому зрізі (один каталог замість усього репо).
- Попередження Large workflow з’являється при понад 25 агентах або понад 1,5 млн прогнозованих токенів. Воно дорадче — запуск не зупиняє.
- Модель агента workflow вибирається за тим же порядком, що й для субагентів; модель, названа скриптом для стадії, — це «модель окремого виклику».
| workflowSizeGuideline | Орієнтир кількості агентів |
|---|---|
unrestricted | без обмежень — Claude сам визначає |
small | менше 5 |
medium | менше 10 (default; small на Pro) |
large | менше 50 |
Змінити guideline: рядок Dynamic workflow size у /config, команда /config workflowSizeGuideline=small або ключ у будь-якому settings-файлі (v2.1.219+; має пріоритет над /config). Це порада для Claude, а не жорсткий ліміт.
Як вимкнути
- Перемикач Dynamic workflows у
/config. "disableWorkflows": trueу settings абоCLAUDE_CODE_DISABLE_WORKFLOWS=1(читається при старті).- Для організації —
"disableWorkflows": trueу managed settings. - Наслідки: зникають
/workflows, workflow-команди, скіл/workflow-authoring, ключове словоultracodeта перемикач Ultracode в/effort. Запуск, що вже йде, продовжується.
CLAUDE.md, rules та auto memory: як Claude пам’ятає проєкт
Усі розташування, порядок завантаження, імпорти, path-scoped rules, AGENTS.md та пам’ять субагентів
Кожна сесія Claude Code починається з порожнього контекстного вікна. Знання між сесіями переносять два механізми: CLAUDE.md — інструкції, які пишете ви, і auto memory — нотатки, які Claude веде собі сам. Обидва вантажаться на початку розмови.
| CLAUDE.md | Auto memory | |
|---|---|---|
| Хто пише | Ви | Claude |
| Що містить | Інструкції та правила | Нотатки й закономірності |
| Охоплення | Проєкт, користувач або організація | Репозиторій; спільна для worktrees |
| Вантажиться | Щосесії | Щосесії (перші 200 рядків або 25 KB) |
| Для чого | Стандарти коду, workflows, архітектура | Ваші вподобання, виправлення, контекст, якого не видно з коду |
PreToolUse hook або permissions. Для інструкцій на рівні system prompt є --append-system-prompt (більше для скриптів).Де лежить CLAUDE.md і в якому порядку вантажиться
Таблиця подана в порядку завантаження: від найширшого охоплення до найвужчого, тож проєктна інструкція стоїть у контексті після користувацької.
| Охоплення | Розташування | Для кого |
|---|---|---|
| Managed policy | macOS: /Library/Application Support/ClaudeCode/CLAUDE.mdLinux/WSL: /etc/claude-code/CLAUDE.mdWindows: C:\Program Files\ClaudeCode\CLAUDE.md | Усі користувачі організації; виключити не можна |
| Користувацькі | ~/.claude/CLAUDE.md | Лише ви, усі проєкти |
| Проєктні | ./CLAUDE.md або ./.claude/CLAUDE.md | Команда через git |
| Локальні | ./CLAUDE.local.md (у корені проєкту, не в .claude/); додайте в .gitignore | Лише ви, поточний проєкт |
Замість окремого файлу організація може покласти текст у ключ claudeMd в managed-settings.json (діє лише в managed/policy settings). Керувати технічним примусом (deny, sandbox, env) треба через managed settings, а CLAUDE.md лишається для поведінкових настанов.
Правила завантаження
- Claude Code вантажить
CLAUDE.mdіCLAUDE.local.mdз поточного каталогу й усіх каталогів над ним при старті. Файли конкатенуються, а не перекривають одне одного; порядок — від кореня файлової системи до робочого каталогу, у кожному каталозіCLAUDE.local.mdстоїть післяCLAUDE.md. Найближчі до вас інструкції читаються останніми. - CLAUDE.md у підкаталогах вантажаться лише коли Claude читає, пише чи редагує файл у цьому підкаталозі (у тому числі
cat/headодного файлу). Для monorepo Django + Vue це природне місце дляbackend/CLAUDE.mdіfrontend/CLAUDE.md. - Файли з
--add-dirза замовчуванням не вантажаться; увімкнітьCLAUDE_CODE_ADDITIONAL_DIRECTORIES_CLAUDE_MD=1. - У великому monorepo пропускайте чужі файли через
claudeMdExcludes(масив glob-шляхів, зливається між шарами; managed-файли виключити не можна). - Блокові HTML-коментарі
<!-- нотатки для супровідників -->вилучаються до потрапляння в контекст, тож не коштують токенів. У блоках коду коментарі зберігаються. - CLAUDE.md до 4 MiB вантажиться повністю, більший файл пропускається.
/clear, /compact або перезапуску. Вкладені CLAUDE.md і правила з paths підтягуються пізніше за потреби: якщо відредагувати такий файл до його завантаження — зміна підхопиться, а після завантаження вона вже частина історії.@-імпорти
У CLAUDE.md можна імпортувати файли синтаксисом @шлях/до/файлу. Імпортовані файли розгортаються й вантажаться при старті поруч із файлом-джерелом.
- Шляхи відносні (до файлу з імпортом, а не до робочого каталогу) або абсолютні; рекурсивні імпорти — максимум чотири переходи.
- Імпорти пропускають code spans і fenced-блоки:
`@README`у бектиках лишається текстом. - Шлях з пробілами — з бекслешем перед кожним пробілом; у лапках шлях не імпортується.
- Імпорти допомагають організувати довгий файл, але не зменшують вартість контексту: імпортоване теж вантажиться при старті.
- Імпорт, що виходить за межі робочого каталогу (наприклад, з домашнього), спершу викликає діалог підтвердження в проєктних файлах; користувацькі файли довіряються без діалогу.
Огляд проєкту — @README.md, команди npm — @frontend/package.json
# Індивідуальні вподобання
- @~/.claude/my-project-instructions.md.gitignore існує лише в тому worktree, де ви його створили. Щоб ділитися особистими нотатками між worktrees, імпортуйте файл з домашнього каталогу, як у прикладі вище. З CLAUDE_CODE_NEW_INIT=1 варіант «personal» у /init сам додає файл у .gitignore..claude/rules/: модульні правила
Для великих проєктів інструкції розбивають на теми у .claude/rules/ (testing.md, api-design.md…). Усі .md знаходяться рекурсивно, тож можна робити підкаталоги backend/ і frontend/. Правила без paths вантажаться при старті з тим самим пріоритетом, що й .claude/CLAUDE.md.
Єдине поле frontmatter, яке Claude Code читає з правила, — paths (YAML-список або рядок через кому; решта полів ігнорується). Правило з paths вантажиться, коли Claude використовує Read/Write/Edit на відповідному файлі (або переглядає його через cat/head).
| Шаблон | Збігається з |
|---|---|
**/*.py | Усі Python-файли в будь-якому каталозі |
backend/**/*.py | Python у backend/ |
src/**/*.{ts,vue} | Brace expansion: кілька розширень в одному шаблоні |
*.md | Markdown у корені проєкту |
- Бюджет розгортання фігурних дужок: 1 000 шаблонів і 4 MiB на весь список
pathsправила (шаблони без дужок не враховуються). - Правила з
pathsпідтягуються в історію розмови, тож компактизація їх вимиває до наступного збігу. Якщо правило має жити завжди — приберітьpaths. - Підтримуються symlink-и (спільні правила для кількох проєктів:
ln -s ~/shared-claude-rules .claude/rules/shared); цілі поза робочим каталогом працюють як зовнішні імпорти й потребують підтвердження. - Користувацькі правила —
~/.claude/rules/, діють у всіх проєктах і вантажаться перед проєктними; при конфлікті Claude може піти за будь-яким, тож тримайте їх узгодженими.
AGENTS.md
З v2.1.277 Claude Code вміє читати AGENTS.md як проєктні інструкції (корисно, якщо репозиторій спільний з іншими агентами). За замовчуванням його читають лише тоді, коли в робочому каталозі й вище немає жодного CLAUDE.md, .claude/CLAUDE.md чи CLAUDE.local.md. Файли ~/.claude/CLAUDE.md, managed CLAUDE.md та .claude/rules/ на це не впливають. Увага: створення CLAUDE.local.md вимикає читання AGENTS.md.
Значення Project instructions (у /config) | Що читає Claude |
|---|---|
claude-md-or-agents-md (за замовчуванням) | CLAUDE.md; якщо його немає — AGENTS.md |
claude-md-and-agents-md | Обидва: у кожному каталозі спершу CLAUDE.md, потім AGENTS.md |
claude-md | Лише CLAUDE.md |
managed-only | Лише managed CLAUDE.md і auto memory; вкладені файли й path-правила — за потреби |
@AGENTS.md
## Claude Code
Для змін у `backend/billing/` спершу використовуй plan mode.Альтернатива — symlink ln -s AGENTS.md CLAUDE.md, але на Windows краще імпорт (symlink потребує прав, а git може віддати текстовий файл).
Auto memory
Claude сам веде нотатки чотирьох типів (поле type у frontmatter): user (роль, досвід, вподобання), feedback (виправлення й підтверджені підходи), project (поточна робота, дедлайни, рішення, яких не видно з коду) і reference (де шукати зовнішню інформацію: трекер, дашборд). Він пропускає те, що виводиться з коду чи вже є в CLAUDE.md, і не зберігає нічого кожну сесію.
| Аспект | Деталі |
|---|---|
| Розташування | ~/.claude/projects/<project>/memory/: індекс MEMORY.md + файли тем. Шлях виводиться з git-репозиторію, тож усі worktrees і підкаталоги ділять одну пам’ять |
| Що вантажиться | Перші 200 рядків або 25 KB (що настане раніше) MEMORY.md. Файли тем Claude читає за потреби. Решта індексу відсікається |
| Вмикання | За замовчуванням увімкнена. Перемикач у /memory, "autoMemoryEnabled": false у settings (можна для одного проєкту) або CLAUDE_CODE_DISABLE_AUTO_MEMORY=1 |
| Інше місце | autoMemoryDirectory (абсолютний шлях або ~/…) |
| Охоплення | Локальна для машини; між машинами й хмарними середовищами не ділиться. Файли пам’яті виключені з очищення за cleanupPeriodDays |
| Субагенти | Auto memory головної розмови до субагентів не потрапляє (виняток — форк) |
Коли ви кажете «запам’ятай, що API-тести потребують локального Redis», Claude зберігає це в auto memory. Щоб записати в CLAUDE.md, скажіть прямо: «додай це в CLAUDE.md».
Пам’ять субагента: поле memory
У frontmatter субагента memory дає йому власний каталог, що переживає розмови. Перші 200 рядків або 25 KB його MEMORY.md додаються в system prompt, а Read/Write/Edit вмикаються автоматично. Якщо auto memory вимкнено, поле нічого не робить.
| Значення | Каталог | Коли |
|---|---|---|
user | ~/.claude/agent-memory/<name>/ | Знання для всіх проєктів |
project | .claude/agent-memory/<name>/ | Рекомендований дефолт: ділиться через git, комітьте |
local | .claude/agent-memory-local/<name>/ | Для проєкту, але не комітити |
--- name: code-reviewer description: Рев’ю Django/Vue коду за конвенціями команди memory: project --- Перед рев’ю прочитай свою пам’ять: які патерни й помилки траплялися раніше. Після рев’ю збережи в пам’ять нові повторювані зауваження.
Команди: /memory, /init, /context, /doctor
| Команда | Що робить |
|---|---|
/memory | Перелік CLAUDE.md, CLAUDE.local.md та інших файлів пам’яті (також ще не створених), перемикач auto memory, відкриття теки auto memory. Вибраний файл відкривається в редакторі |
/init | Генерує стартовий CLAUDE.md (команди збірки, тести, конвенції). Якщо файл уже є — пропонує покращення, а не перезаписує. Підтягує правила Cursor і Copilot. З CLAUDE_CODE_NEW_INIT=1 запускає інтерактивний потік, що пропонує CLAUDE.md, скіли та hooks |
/import [codex|gemini|cursor] | Одноразово переносить конфігурацію іншого агента (з v2.1.213) |
/context | Показує, що завантажено, у списку Memory files (вкладені CLAUDE.md там не видно, бо вантажаться за потреби) |
/doctor | Пропонує скоротити закомічений CLAUDE.md: прибрати те, що виводиться з коду |
/doctor prompt-audit [шлях] | Аудит інструкцій (з v2.1.283): застарілі для старих моделей правила, посилання на неіснуючі файли/команди, суперечності. Нічого не змінює без вашої команди |
Що писати і який розмір
Ключова перевірка для кожного рядка: «Чи призведе до помилок Claude, якщо це прибрати?» Якщо ні — вилучайте.
| Включати | Не включати |
|---|---|
| Bash-команди, які Claude не вгадає | Те, що видно з коду |
| Правила стилю, що відрізняються від стандартних | Стандартні конвенції мови |
| Інструкції для тестів і бажаний test runner | Детальну API-документацію (дайте посилання) |
| Етикет репозиторію: назви гілок, вимоги до MR | Інформацію, що часто змінюється |
| Архітектурні рішення проєкту | Довгі пояснення й туторіали |
| Особливості середовища (потрібні env-змінні) | Опис файлів по одному |
| Відомі підводні камені | Очевидні практики на кшталт «пиши чистий код» |
- Розмір: цільове значення — менше 200 рядків на файл CLAUDE.md. Довші споживають контекст і знижують виконання. Вузькі інструкції переносьте в path-scoped rules або скіли. Для файлів, що перевищують рекомендовану довжину (чи разом переходять сукупний ліміт), є попередження при старті та в
/status; кожен CLAUDE.md, rule і@-імпорт рахується окремо. - Конкретність: «Використовуй відступ у 2 пробіли», а не «форматуй акуратно»; «Запускай
pytest backend/…::testперед комітом», а не «тестуй зміни». - Структура: заголовки й марковані списки. Суперечливі інструкції Claude може обрати довільно, тож періодично чистіть CLAUDE.md, вкладені файли й rules.
- Акцент: якщо Claude ігнорує одне правило, додайте «IMPORTANT» лише до цього рядка; якщо виділити багато — не виділиться жодне.
- Коли додавати: Claude вдруге робить ту саму помилку; рев’ю виявило те, що він мав би знати; ви набираєте те саме виправлення, що й минулої сесії.
- Якщо дія має виконуватись у певний момент (перед кожним комітом) — це hook, не рядок у CLAUDE.md.
Приклад для Django + Vue 3 проєкту
проєкт/ ├── CLAUDE.md # короткий корінь (комітити) ├── CLAUDE.local.md # особисте (в .gitignore) ├── backend/ │ └── CLAUDE.md # завантажиться при роботі з файлами backend/ ├── frontend/ │ └── CLAUDE.md └── .claude/ ├── rules/ │ ├── backend-python.md # paths: backend/**/*.py │ └── frontend-vue.md # paths: frontend/**/*.{vue,ts} └── agent-memory/ # пам’ять субагентів memory: project (комітити)
# Проєкт: Shop (Django 5 + DRF, Vue 3 + Vite) ## Команди - Backend dev: `python manage.py runserver` - Один тест: `pytest backend/apps/orders/tests/test_api.py::test_create_order -x` - Усі тести бекенду: `pytest backend/` - Міграції: `python manage.py makemigrations && python manage.py migrate` - Frontend dev: `cd frontend && npm run dev`; перевірка: `npm run lint && npm run type-check` ## Конвенції - Python: ruff + black, типізація обов’язкова для нових функцій - Vue: Composition API з `<script setup lang="ts">`, стан у Pinia - API: DRF ViewSet-и, серіалізатори в `serializers.py`, URL у kebab-case ## Робочий процес - Гілки: `feature/<ticket>-<slug>`, коміти за Conventional Commits - MR у GitLab: заголовок з номером задачі, обов’язково зелений пайплайн - IMPORTANT: не змінюйте застосовані міграції, лише створюйте нові ## Середовище - Потрібні змінні: `DATABASE_URL`, `REDIS_URL` (див. `.env.example`) - Тести API вимагають локального Redis <!-- Для супровідників: розширену інструкцію деплою тримати в скілі /deploy, не тут -->
--- paths: - "backend/**/*.py" --- # Правила для Python-коду - Усі ендпоінти валідують вхід через DRF-серіалізатори - Запити з join-ами — через `select_related` / `prefetch_related`, без N+1 - Нові моделі: міграція + фабрика в `tests/factories.py` - Тести: pytest-django, без реальних зовнішніх викликів
--- paths: - "frontend/**/*.{vue,ts}" --- # Правила для Vue/TypeScript - Компоненти: `<script setup lang="ts">`, props типізовані через `defineProps<…>()` - HTTP-виклики лише через `frontend/src/api/`, не напряму з компонентів - Стилі: scoped, без глобальних селекторів
Діагностика: Claude не дотримується CLAUDE.md
/context: файл має бути в списку Memory files; вкладені підтягуються лише після читання файлу в їхньому каталозі (з’являється рядок Loaded)includeGitInstructions і attributionInstructionsLoaded/compact — вона була лише в розмові, у вкладеному CLAUDE.md чи path-правилі, що ще не збіглося: додайте її в кореневий CLAUDE.mdКонтекст і компактизація
/context, пороги автокомпактизації, /compact із фокусом, що переживає стиснення
Головне обмеження роботи з Claude Code — контекстне вікно: у ньому всі повідомлення, кожен прочитаний файл і вивід кожної команди. Чим воно повніше, тим гірше працює модель: може «забувати» ранні інструкції й частіше помилятись. Тож контекст — найважливіший ресурс, яким треба керувати.
Подивитись, що в контексті: /context
/context (з аргументом all — докладніше) малює кольорову сітку використання контексту, показує розбивку за категоріями, підказки з оптимізації та список завантажених Memory files і auto memory. Перед початком сесії вантажаться CLAUDE.md, auto memory, назви MCP-інструментів (схеми відкладені), описи скілів та, за потреби, output style.
Автоматична компактизація
Коли контекст наближається до межі, Claude Code компактує розмову сам: спершу очищає старі виводи інструментів, а якщо цього мало — підсумовує розмову. Повне вікно не завершує сесію.
| Ситуація | Поріг компактизації |
|---|---|
| Звичайна модель, налаштувань немає | Межа контексту моделі |
| Моделі з нативним вікном 1M (Fable, Sonnet 5+, Haiku 5.5, Opus 4.7+) | Приблизно 967K токенів за замовчуванням, до заповнення вікна |
| Sonnet 4.6 / Opus 4.6 без extended context | 200K |
CLAUDE_CODE_DISABLE_1M_CONTEXT=1 | Моделі з 1M компактують на 200K |
| Невідомий ID моделі (шлюз) | Вікно, яке Claude Code припускає для ID; виправляється через CLAUDE_CODE_MAX_CONTEXT_TOKENS |
| Як змінити вікно компактизації | Деталі |
|---|---|
/autocompact 500k | Для поточної моделі зараз і надалі (зберігається в modelSettings); /autocompact auto повертає значення за замовчуванням. Формати: 200000, 500k, 1M, або число 100–1000 як тисячі |
autoCompactWindow у settings | Значення для всіх моделей, 100000–1000000 |
--autocompact (з v2.1.221) | Лише на цей запуск; не перекривається вищим шаром, як managed settings |
CLAUDE_CODE_AUTO_COMPACT_WINDOW | Для скриптів і хмари; лише звичайне число (500000, не 500k); перекриває команду, прапорець і налаштування |
DISABLE_AUTO_COMPACT=1 / autoCompactEnabled | Вимикає автоматичну компактизацію; ручний /compact лишається |
Якщо один завеликий файл чи вивід інструмента заповнює контекст одразу після кожного підсумку, Claude Code припиняє автокомпактизацію після кількох спроб і показує помилку — це сигнал, що пора зробити /clear або делегувати читання субагентам.
/compact із фокусом
/compact [інструкції] стискає розмову вручну й каже, що зберегти: /compact Focus on code samples and API usage, /compact фокус на виправленні помилки в авторизації. Робіть це перед довгою новою задачею, а не коли контекст уже переповнений. Ті самі настанови можна закласти в CLAUDE.md — вони діятимуть і для автокомпактизації:
# Compact instructions
При компактизації зберігай повний список змінених файлів, команди запуску тестів
та результати останніх прогонів pytest.Для часткового стиснення відкрийте /rewind (або Esc Esc), оберіть повідомлення й виберіть Summarize from here (стиснути від цього місця вперед) або Summarize up to here (стиснути все до цього місця, пізніші повідомлення лишаються повними). Можна додати побажання у рядку «add context (optional)». Файли на диску не змінюються, а оригінальні повідомлення лишаються в транскрипті.
Що переживає компактизацію
| Механізм | Після компактизації |
|---|---|
| System prompt і output style | Діють далі |
Кореневий CLAUDE.md і правила без paths | Знову підтягуються з диска |
| Auto memory | Знову підтягується з диска |
| Git status | Читається свіжий знімок |
| План з plan mode | Знову підтягується |
Правила з paths: і вкладені CLAUDE.md | Перевантажуються за потреби (до наступного збігу їх немає) |
| Прочитані/редаговані файли | Перечитуються до 5 штук, найсвіжіші першими; файл понад 5 000 токенів повертається лише як посилання на шлях |
| Тіла викликаних скілів | Підтягуються, але до 5 000 токенів на скіл і 25 000 загалом; найстаріші відкидаються. Найважливіше розміщуйте на початку SKILL.md |
| Перелік скілів (описи) | Не підтягується повторно |
| Фонові команди й субагенти | Продовжують працювати; Claude отримує нагадування про них |
| Контекст, доданий hooks раніше | Підсумовується разом з розмовою |
SessionStart hooks з matcher compact | Запускаються, їхній вивід додається до стисненого контексту |
З v2.1.198 запит на підсумок успадковує налаштування extended thinking сесії. Інструкції, що були лише в розмові, після компактизації можуть пропасти — важливе фіксуйте в CLAUDE.md. Хочете гарантовано повертати нагадування після стиснення — використайте hook:
{
"hooks": {
"SessionStart": [
{
"matcher": "compact",
"hooks": [
{
"type": "command",
"command": "echo 'Нагадування: міграції не редагувати, тести — pytest backend/, гілка feature/<ticket>-<slug>'"
}
]
}
]
}
}/clear, /btw і субагенти
| Інструмент | Коли використовувати |
|---|---|
/clear (аліаси /reset, /new) | Перехід до нерелевантної задачі. Нічого не коштує. Перед цим /rename, щоб повернутись через /resume. Якщо ви виправляли Claude більше ніж двічі з одного питання — /clear і новий, точніший промпт |
/compact [фокус] | Хочете продовжити ту саму задачу, але з меншим контекстом |
/rewind → Summarize | Стиснути лише частину розмови (докладно — розділ про checkpoints) |
/btw <питання> | Побічне питання: відповідь не потрапляє в історію, інструментів немає, а при теплому кеші дешево |
| Субагент | Дослідження й читання багатьох файлів: у вашому контексті лишається лише підсумок |
Що ще займає контекст
- Скіли: описи завантажуються при старті;
disable-model-invocation: trueтримає скіл поза контекстом до виклику. Опис +when_to_useобрізаються до 1 536 символів. Для сторонніх скілів єskillOverrides. - MCP: визначення інструментів за замовчуванням відкладені (tool search) — у контексті лише назви. Вимикайте невикористані сервери через
/mcp. - Вивід команд: довгі логи й тести з’їдають контекст — фільтруйте hook-ом (див. розділ про витрати) або делегуйте субагентам.
- Вікно 1M: Fable, Sonnet 5+, Haiku 5.5 та Opus 4.7+ працюють з 1M за замовчуванням без суфікса
[1m]. Більше вікно не скасовує потреби чистити контекст.
Типові антипатерни
| Антипатерн | Що відбувається | Виправлення |
|---|---|---|
| The kitchen sink session | Одна задача, потім несуміжна, потім знову перша: контекст повний зайвого | /clear між несуміжними задачами |
| Correcting over and over | Claude помиляється, ви виправляєте, знову помилка: контекст забруднений невдалими спробами | Після двох невдалих виправлень — /clear і кращий початковий промпт |
| The over-specified CLAUDE.md | Надто довгий файл: половину правил Claude ігнорує | Безжально скорочуйте; те, що Claude і так робить правильно, видаліть або перенесіть у hook |
| The trust-then-verify gap | Правдоподібна реалізація без обробки крайніх випадків | Завжди давайте перевірку: тести, скрипти, скріншоти |
| The infinite exploration | «Дослідь» без меж: сотні прочитаних файлів | Звужуйте дослідження або віддайте субагенту |
Checkpoints і /rewind: відкат коду й розмови
Esc Esc, варіанти відновлення, строки зберігання та межі застосування
Claude Code автоматично знімає знімок файлів перед кожним промптом, що починає хід, тож змінений Claude код можна швидко відкотити. Це страховка рівня сесії, не заміна git.
Як відкрити меню відкату
Esc Esc(подвійний Escape) на порожньому полі вводу, або команда/rewind(аліаси/checkpoint,/undo).- Якщо в полі є текст, подвійний
Escлише очищає його (текст зберігається в історії вводу — повернути можна клавішею «вгору»). - Меню показує промпти сесії; виберіть точку, потім дію.
| Дія | Що робить |
|---|---|
| Restore code and conversation | Повертає і код, і розмову до цієї точки |
| Restore conversation | Відкочує розмову, залишаючи поточний код |
| Restore code | Відкочує зміни файлів, залишаючи розмову |
| Summarize from here | Стискає розмову від цієї точки вперед, звільняючи контекст |
| Summarize up to here | Стискає розмову до цієї точки, пізніші повідомлення лишаються |
| Never mind | Повернутися без змін |
Дії з кодом з’являються лише якщо після цієї точки були відстежені зміни файлів. Після відновлення розмови чи Summarize from here оригінальний промпт повертається в поле вводу, щоб його можна було повторити або відредагувати. Summarize не змінює файли, а оригінальні повідомлення лишаються в транскрипті.
Скільки зберігається
- Кожен промпт, що починає хід, створює checkpoint. Знімки файлів тримаються для 100 останніх checkpoint-ів сесії.
- Checkpoint-и зберігаються разом з розмовою, тож
/rewindпрацює і після відновлення сесії. - Знімки видаляються при очищенні приблизно через 30 днів після останнього збереження в сесії (
cleanupPeriodDays); якщо їх уже немає, відкат може завершитись помилкоюNo files were restored. - Після
/clearу тому ж процесі в меню з’являється запис/resume <session-id> (previous session)для повернення до розмови до очищення.
/rewind обрізає розмову до префікса, який уже закешований, тож наступний запит читає ранній кеш. Це дешевше, ніж компактизація, яка будує новий префікс. Якщо ви пішли хибним шляхом, відкат часто кращий за стиснення.Що НЕ відкочується
| Обмеження | Подробиці |
|---|---|
| Зміни через Bash | Відстежуються лише правки інструментами редагування Claude. rm, mv, cp відкотити не можна |
| Правки субагентів | Зазвичай не відновлюються — використайте git. Виняток: скіл context: fork, що працює на передньому плані |
| Зовнішні зміни | Ручні правки поза Claude Code та правки інших паралельних сесій зазвичай не фіксуються |
| Повідомлення посеред ходу | Повідомлення з черги, що потрапило в поточний хід, не отримує окремого checkpoint-а; відкотіть до промпта, що почав хід |
| Symlink і hard link | Такі шляхи пропускаються під час відновлення коду (з попередженням Restored the code, but skipped N files) |
| Побічні ефекти поза файлами | База даних, API, деплої не відкочуються |
python manage.py migrate, checkpoint не скасує зміни в базі й не поверне видалених через Bash файлів. Відкочуйте міграцію вручну (migrate <app> <попередня>) і коміть у git перед ризикованими кроками./rewind проти /branch
Summarize тримає вас у тій самій сесії й діє як цілеспрямований /compact. Щоб випробувати інший підхід, зберігши оригінальну сесію неторканою, використайте /branch [name] або claude --continue --fork-session.
- Дослідження варіантів: спробуйте два підходи, не втрачаючи початкової точки.
- Відновлення після помилки: швидко скасуйте зміни, що зламали код.
- Звільнення контексту: стисніть вербозну сесію налагодження від середини, залишивши початкові інструкції.
Витрати, токени та prompt caching
Реальні ціни, вимірювання, що ламає кеш, TTL, моделі субагентів і ліміти команди
Claude Code тарифікується за токенами (на підписці — за ліміти плану). Вартість росте разом з розміром контексту, тому майже всі прийоми економії зводяться до двох речей: тримати контекст малим і не ламати prompt cache. Нижче — реальні цифри з документації, інструменти вимірювання, повний перелік того, що інвалідує кеш, налаштування TTL, керування моделями субагентів і поради для команди.
Скільки це коштує насправді
Ціни моделей (за 1 млн токенів)
| Модель | Вхід | Запис кешу 5 хв | Запис кешу 1 год | Читання з кешу | Вихід |
|---|---|---|---|---|---|
| Fable 5.1 | $10 | $12.50 | $20 | $0.25 | $50 |
| Opus 5.5 | $4 | $5 | $8 | $0.20 | $20 |
| Sonnet 5.5 | $2 | $2.50 | $4 | $0.10 | $10 |
| Haiku 5.5, промпт до 100 000 токенів | $0.10 | $0.125 | $0.20 | $0.01 | $0.50 |
| Haiku 5.5, промпт понад 100 000 токенів | $0.50 | $0.625 | $1 | $0.05 | $2.50 |
Множники кешу відносно базової ціни входу: запис на 5 хвилин — 1.25x, запис на 1 годину — 2x, читання — 0.1x (0.05x для Opus 5.5 і Sonnet 5.5, 0.025x для Fable 5.1). Кеш окупається вже після одного читання для 5-хвилинного запису або двох читань для годинного.
Як виміряти: /usage, /cost, /stats
/usage (аліаси /cost і /stats) показує блок Session: вартість, тривалість, токени по кожній моделі (вхід, вихід, читання й запис кешу). Суму Claude Code рахує локально за прейскурантом — це оцінка, а не рахунок; точні цифри дивіться в Claude Console. На Pro/Max вартість сесії для білінгу не важлива — там замість неї смуги використання плану. Підсумки скидаються після /clear (з v2.1.211).
Total cost: $0.55 Total duration (API): 6m 20s Usage by model: claude-sonnet-4-6: 1.2k input, 5.3k output, 940.0k cache read, 50.0k cache write ($0.55) Prompt cache (main): 14 requests · 91% of input tokens from cache · 2 misses (last 6m 10s ago, 310.2k tokens re-cached) · warm (1h TTL, last activity 40s ago)
| Що показує | Деталі |
|---|---|
Рядок Prompt cache (main) (з v2.1.251) | Кількість запитів, частка вхідних токенів з кешу, промахи, «очікувані перебудови» після компактизації, чи кеш зараз «теплий» і який TTL. З v2.1.260 для останнього промаху може бути вказана ймовірна причина. Лише головна розмова, субагенти не враховуються. |
| Розбивка плану (Pro/Max/Team/Enterprise) | Частки використання за скілами, субагентами, плагінами та окремими MCP-серверами; позначає поведінку, що дає ≥10% (довгий контекст, промахи кешу); рядки для найважчих /loop-задач. Клавіші d / w перемикають 24 години / 7 днів. Дані — з локальної історії цієї машини. |
/insights | HTML-звіт про те, як ви працюєте (тертя, поради), зберігається в ~/.claude/usage-data/report.html. Сам аналіз теж витрачає токени. |
modelPricing (managed settings, з v2.1.242) | Адміністратор може задати ваші контрактні ставки, щоб цифри в /usage, status line й OpenTelemetry збігалися з рахунком. Змінює лише відображення, не тарифікацію. |
Як працює prompt cache
Кожне повідомлення — новий API-запит, і Claude Code знову надсилає весь контекст. API кешує префікс запиту; збіг має бути точним, тому зміна будь-де в префіксі перераховує все після неї. Порядок шарів — від найстабільнішого до найрухливішого:
| Шар | Вміст | Змінюється, коли |
|---|---|---|
| System prompt | Базові інструкції, визначення інструментів | Змінився набір визначень інструментів |
| Project context | CLAUDE.md, auto memory, правила без paths | Старт сесії, /clear, /compact |
| Conversation | Ваші повідомлення, відповіді, результати інструментів | Щоходу |
Окрім шарів, у ключ кешу входять модель (у кожної свій кеш) і — на більшості моделей — рівень effort. Кеш живе на боці сервера й, за документацією, фактично прив’язаний до однієї машини й каталогу: сесії в різних каталогах будують різні префікси; паралельні сесії в одному каталозі читають кеш одна одної.
Що ламає кеш
Після такої дії наступний запит один раз читає всю історію без попадань у кеш: повільніше й дорожче, далі новий префікс знову кешується.
| Дія | Що відбувається | Як уникнути |
|---|---|---|
Зміна моделі (/model) | У кожної моделі окремий кеш; навіть однакова розмова перераховується повністю. Поки кеш теплий, Claude Code просить підтвердження. | Обирайте модель на початку сесії. Підтвердженням можна керувати hook-ом PreModelSwitch. |
opusplan | Opus у plan mode, Sonnet при виконанні: кожне перемикання plan mode — це зміна моделі. | Враховуйте при частому вході/виході з plan mode. |
| Автоматичний fallback моделі | На моделях Fable, Opus 5.5, Sonnet 5.5 та Opus 5: якщо класифікатор безпеки перенаправив запит на запасну модель, сесія продовжується на ній — це теж зміна моделі. | Не керується; просто знайте про причину промаху. |
Скіл/команда з model: у frontmatter | Хід, у якому скіл має іншу модель, — зміна моделі: усю історію читає без кешу; на наступному промпті повертається модель сесії. | Для скілів з іншою моделлю ставте context: fork — тоді модель задає форкнутий субагент зі своїм кешем. |
| Зміна effort | На більшості моделей кожен рівень має свій кеш. На Opus 5.5, Sonnet 5.5, Haiku 5.5 та Fable 5.1 (API-ключ або підписка) кеш зберігається; не діє на Bedrock, Google Cloud Agent Platform, через Claude apps gateway, за CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS чи з HIPAA-конфігурацією організації. | Ставте effort на початку сесії. |
| Увімкнення fast mode | Заголовок запиту входить у ключ кешу: перший запит з fast mode читає все без кешу за тарифом fast mode. Платиться один раз за розмову. | Вмикайте на початку сесії, а не в середині довгої. |
| Підключення/видалення MCP-сервера | Якщо інструменти не відкладені (tool search вимкнено або нижче порога auto), додавання чи навмисне видалення визначення інвалідує кеш. Зі штатним відкладеним завантаженням набір інструментів фіксується з першого запиту. | Не змінюйте набір серверів посеред задачі; змінений конфіг застосується лише після перезапуску. |
| Плагіни з MCP-серверами | Діють ті самі правила, що й для MCP. Скіли, команди, агенти, hooks, monitors і теми плагіна кеш не ламають. | — |
| Deny-правило на цілий інструмент | Просте Bash / WebFetch у deny: коли tool search вимкнено, визначення прибирається з запиту, кеш інвалідується (і при зніманні правила теж). Вужчі правила на кшталт Bash(rm *) та всі allow/ask кеш не чіпають. | Додавайте глобальні deny до старту сесії. |
Компактизація (/compact та авто) | Замінює історію підсумком — шар розмови інвалідується за задумом. Саме стиснення для теплого кешу дешеве (читає префікс з кешу); після перерви довшої за TTL читає все без кешу. | Компактуйте на природних межах між задачами, а не посеред роботи. |
| Багато зображень | Коли запит перевищує ліміт зображень/PDF, Claude Code вилучає пачку найстаріших; змінені повідомлення перераховуються. Claude більше їх не бачить. | Не накопичуйте скріншоти; за потреби надішліть потрібне зображення повторно. |
| Оновлення Claude Code | Нова версія зазвичай змінює system prompt чи інструменти — перша розмова після перезапуску будує кеш з нуля. Застосовується лише при наступному запуску. | DISABLE_AUTOUPDATER=1, щоб самим обирати момент. |
Що кеш не ламає
/clear, /compact чи перезапуску)opusplan) та output style (з v2.1.251 ще й застосовується одразу)/recap (додає підсумок, а не замінює історію)/rewind: повертає до префікса, що вже закешований/compact — ламають (таблиця вище)/compact лишайте для природних пауз між задачами. Що менше змін посеред задачі, то вищий hit rate кешу.Час життя кешу (TTL)
Кеш спливає після періоду бездіяльності; кожне попадання скидає таймер. Claude Code вирішує TTL для кожного запиту окремо, і запити діляться на два фіксовані «відра»: головна розмова (інтерактив, -p, Agent SDK та допоміжні запити поруч) і все інше (субагенти, workflows, teammates, форки, компактизація, назви сесій).
| Відро | Підписка, у межах ліміту плану | Usage credits, API-ключ, хмарний провайдер |
|---|---|---|
| Головна розмова | 1 година | 5 хвилин |
| Все інше | 5 хвилин (окрім серверних допоміжних запитів — 1 година) | 5 хвилин |
Коли ви виходите за ліміт плану й витрачаєте usage credits, головна розмова падає до 5 хвилин. Годинний TTL має дорожчий запис кешу (2x проти 1.25x): він окупається при простоях, але коштує більше на коротких серіях роботи.
| Налаштування / змінна | Що робить |
|---|---|
promptCacheTtl / CLAUDE_CODE_PROMPT_CACHE_TTL | 5m або 1h для головної розмови (з v2.1.242). З API-ключем поставте 1h, щоб отримати годину. |
subagentPromptCacheTtl / CLAUDE_CODE_SUBAGENT_PROMPT_CACHE_TTL | 5m або 1h для всього, що поза головною розмовою: субагенти, workflows, фонові запити (з v2.1.242). |
experimental.cacheTtl у frontmatter субагента | TTL для конкретного субагента (з v2.1.248). Значення 1h ігнорується, поки підписка витрачає usage credits. |
ENABLE_PROMPT_CACHING_1H=1 | Просить 1 годину для обох відер (призначено для API-ключа, Bedrock, Google Cloud Agent Platform, Foundry, Claude Platform on AWS). |
FORCE_PROMPT_CACHING_5M=1 | Примусово 5 хвилин для обох відер; перекриває решту. Для налагодження, порівнянь чи перекриття довшого TTL з managed settings. |
DISABLE_PROMPT_CACHING, _HAIKU, _SONNET, _OPUS, _FABLE | Вимикає кеш для всіх моделей або лише для моделі, на яку вказує аліас haiku / sonnet / opus (_FABLE — для всіх Fable). Корисно лише для налагодження. |
Пріоритет, коли застосовується кілька: FORCE_PROMPT_CACHING_5M → змінна відра → налаштування відра → experimental.cacheTtl субагента → ENABLE_PROMPT_CACHING_1H → значення за замовчуванням. Перевірити, який TTL реально використаний: claude -p "hello" --output-format json і поле usage.cache_creation (ephemeral_1h_input_tokens проти ephemeral_5m_input_tokens). Через LLM-шлюз потрібно, щоб він пересилав заголовок anthropic-beta без змін.
{
"promptCacheTtl": "1h",
"subagentPromptCacheTtl": "5m"
}Субагенти й кеш
- Субагент починає власну розмову з власним system prompt і набором інструментів, тому його перший запит не читає кеш батька і прогріває свій. Кеш батька при цьому не страждає.
- Субагенти поза відром головної розмови: навіть на підписці вони отримують 5 хвилин, поки не задасте TTL самі.
- Форк успадковує system prompt, інструменти й історію батька точно, тож його перший запит читає кеш батька.
- Продовжений (resumed) субагент може прочитати кеш свого першого запуску; у workflow fan-out Claude Code затримує всіх, крім першого агента, до 5 секунд за замовчуванням (
CLAUDE_CODE_WORKFLOW_PREFIX_STAGGER_MS), щоб їхні перші запити прочитали префікс першого. - Власні запити субагента все одно рахуються у ваші витрати.
--- name: repo-auditor description: Аудит великого репозиторію та звіт про знахідки experimental: cacheTtl: 1h --- Ти аудитор репозиторію. Повертай лише стислий звіт.
Модель для всіх субагентів: CLAUDE_CODE_SUBAGENT_MODEL
Порядок вибору моделі субагента: (1) параметр model у конкретному виклику, (2) model у frontmatter (inherit = модель розмови), (3) змінна CLAUDE_CODE_SUBAGENT_MODEL (аліас або повний ID), (4) модель головної розмови. Тобто сама змінна — лише значення за замовчуванням.
| Змінні | Результат |
|---|---|
Лише CLAUDE_CODE_SUBAGENT_MODEL=haiku | Діє як дефолт, коли модель не задана іншим способом. Вбудовані Explore і Plan не змінює. |
CLAUDE_CODE_SUBAGENT_MODEL + CLAUDE_CODE_SUBAGENT_MODEL_FORCE=1 (з v2.1.257) | Одна модель для всіх субагентів, teammates і workflow-агентів, включно з Explore. Поле model у визначеннях ігнорується, Claude не може передати іншу модель. |
Лише CLAUDE_CODE_SUBAGENT_MODEL_FORCE=1 | Субагенти йдуть на модель головної розмови (Explore — на свою вбудовану). |
{
"env": {
"CLAUDE_CODE_SUBAGENT_MODEL": "haiku",
"CLAUDE_CODE_SUBAGENT_MODEL_FORCE": "1"
}
}Винятки при FORCE: форк і скіл у субагенті з model: inherit лишаються на моделі головної розмови. Перевірити модель працюючого субагента можна в /tasks (з v2.1.242). Значення, заборонене організаційним availableModels, підміняється іншою моделлю з попередженням.
Thinking та effort
Thinking-токени тарифікуються як вихідні, а дефолтний бюджет може сягати десятків тисяч токенів на запит. Вимкнути thinking на Opus 5.5, Sonnet 5.5, Haiku 5.5 та моделях Fable не можна — знижуйте /effort (або effort: low у frontmatter механічних агентів). MAX_THINKING_TOKENS працює лише для моделей з фіксованим бюджетом; адаптивні моделі ігнорують ненульові значення.
Умовна ілюстрація: що потрапляє в основний контекст
Правила для економії токенів
- Мінімальний контекст — кожен субагент отримує лише потрібні інструменти; CLAUDE.md тримайте до 200 рядків, процедури виносьте в скіли.
- Правильна модель — не давати Opus задачі, що добре виконує Sonnet; не давати Sonnet те, з чим справляється Haiku. Пам’ятайте про поріг 100K токенів у Haiku 5.5.
- Правильний effort —
effort: lowу frontmatter для механічних агентів (коміти, пошук). - Правило скілів — довгі інструкції завантажуються лише за потреби, не в кожну сесію.
disable-model-invocation: trueтримає скіл поза контекстом до виклику. - Ізольований контекст — вербозні операції (тести, логи, документація) делегуйте субагентам: у розмову повертається лише підсумок.
- Очищайте між задачами —
/clearнічого не коштує, а застарілий контекст дорожчає з кожним повідомленням. Перед цим/rename, щоб потім/resume. - Конкретні запити — «додай валідацію в login-функцію у auth.py» замість «покращ проєкт»: менше зайвих читань файлів.
- Plan mode для складного, перервати помилковий напрям
Escодразу,/rewind— щоб відкотитись. - Дайте перевірку — тести, очікуваний вивід, скріншот: Claude сам ловить помилки без зайвих ітерацій.
- MCP та LSP — визначення MCP-інструментів за замовчуванням відкладені (tool search), але вимикайте невикористані сервери через
/mcp; CLI на зразокgh/glabекономніші за MCP. Плагіни code intelligence (Python, TypeScript) зменшують зайві читання файлів.
function selectSubagentModel(task) {
if (task.isLongHorizonAutonomous) {
return 'fable'; // Fable 5.1 — багатогодинні автономні сесії
} else if (task.requiresDeepArchitecture || task.codebaseSize > 'large') {
return 'opus'; // Opus 5.5 — складна архітектура
} else if (task.requiresCodeGeneration || task.requiresAnalysis) {
return 'sonnet'; // Sonnet 5.5 — основна робота з кодом
} else {
return 'haiku'; // Haiku 5.5 — прості задачі (стежте за порогом 100K токенів промпта)
}
}Hook, що фільтрує вивід тестів
Hook може обробити дані до того, як їх побачить Claude: замість 10 000 рядків логу — лише рядки з помилками, тобто сотні токенів замість десятків тисяч. Офіційний приклад — PreToolUse hook, який переписує команди тестів через updatedInput.
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [
{ "type": "command", "command": "$CLAUDE_PROJECT_DIR/.claude/hooks/filter-test-output.sh" }
]
}
]
}
}#!/bin/bash input=$(cat) cmd=$(echo "$input" | jq -r '.tool_input.command') # Для тестових команд залишаємо лише збої if [[ "$cmd" =~ ^(npm test|pytest|go test) ]]; then filtered_cmd="$cmd 2>&1 | grep -A 5 -E '(FAIL|ERROR|error:)' | head -100" echo "$input" | jq --arg filtered "$filtered_cmd" \ '{hookSpecificOutput: {hookEventName: "PreToolUse", permissionDecision: "allow", updatedInput: (.tool_input + {command: $filtered})}}' else echo "{}" fi
- Зробіть скрипт виконуваним:
chmod +x .claude/hooks/filter-test-output.sh. Перевірка:/hooksабоclaude --debug-file ./claude-debug.txt(рядокmodified tool input keys). - Приклад повертає
permissionDecision: "allow"для переписаної команди, тобто вона виконується без запиту дозволу. Для всіх інших команд повертається{}. - Після
| headкод завершення команди — це кодhead, а не pytest. Для Django додайте у regexpython manage.py testі./manage.py test, якщо запускаєте тести так.
Чому використання росте в довгій сесії
- Довгий контекст — повна розмова йде з кожним запитом (за ціною читання кешу), тож одне коротке запитання у сесії, відкритій цілий день, ще й оплачує весь контекст.
- Промахи кешу — перше повідомлення після перерви довшої за TTL перераховує все. На Pro/Max при поверненні до великої сесії Claude Code пропонує відновити з підсумку.
- Заплановані задачі й
/loop, субагенти, workflows і teammates — кожен робить власні запити. - Компактизація —
/compactчитає розмову, яку стискає (дорогий після простою);/clearнічого не коштує. - Фонові процеси (підсумки для
--resumeтощо) зазвичай коштують менше $0.04 на сесію; підказки наступного промпта додають короткі запити, які в основному читають кеш, і їх можна вимкнути.
Витрати команди
| Ваш сетап | Де бачити витрати | Чим обмежити |
|---|---|---|
| Claude for Teams / Enterprise | Spend report в аналітиці організації (оцінка по користувачах і моделях, CSV) | Стеля за замовчуванням — квота місця (seat) у 5-годинному та тижневому вікнах; понад неї — usage credits з лімітами на рівні організації, групи чи людини |
| Claude Console (API) | Сторінка Usage та дашборд Claude Code у Console, Claude Code Analytics API | Ліміти витрат на workspace |
| Bedrock / Google Cloud Agent Platform / Foundry | Біллінг хмари; аналітика Anthropic цього не бачить | Бюджети хмари; OpenTelemetry чи LLM-шлюз для розбивки по людях |
Для API-організацій Console автоматично створює workspace «Claude Code» (ключів для нього створити не можна). На ньому ставлять ліміт витрат і, за потреби, ліміт швидкості, щоб Claude Code не з’їв квоту інших сервісів.
Рекомендовані ліміти TPM/RPM на користувача
| Розмір команди | TPM на користувача | RPM на користувача |
|---|---|---|
| 1–5 | 200k–300k | 5–7 |
| 5–20 | 100k–150k | 2.5–3.5 |
| 20–50 | 50k–75k | 1.25–1.75 |
| 50–100 | 25k–35k | 0.62–0.87 |
| 100–500 | 15k–20k | 0.37–0.47 |
| 500+ | 10k–15k | 0.25–0.35 |
Приклад: 200 користувачів по 20k TPM — це 4 млн TPM загалом. Ліміти діють на рівні організації, тож хтось може тимчасово перевищувати свою «частку». Для заходів з високою одночасністю (навчання з великою групою) потрібен запас. Agent teams вмикаються через CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1; щоб стримати витрати — Sonnet для teammates, малі команди, сфокусовані spawn-промпти, зупиняти teammates після роботи.
Status line: витрати й кеш перед очима
Налаштуйте /statusline (або ключ statusLine у settings.json), щоб постійно бачити контекст і вартість. Скрипт отримує JSON зі stdin; корисні поля:
| Поле | Значення |
|---|---|
cost.total_cost_usd | Оцінка вартості сесії (за прейскурантом), скидається після /clear |
context_window.used_percentage, remaining_percentage | Заповненість вікна контексту |
context_window.context_window_size | 200000 або 1000000 |
context_window.current_usage | Токени останнього виклику, включно з cache_creation_input_tokens і cache_read_input_tokens |
rate_limits.five_hour.used_percentage, rate_limits.seven_day.used_percentage | Використання 5-годинного та 7-денного лімітів підписки |
prompt_cache.hit_ratio, warm, ttl, misses, expires_at (з v2.1.251) | Статистика кешу головної розмови |
model.display_name, effort.level, fast_mode | Поточна модель, effort, fast mode |
#!/bin/bash input=$(cat) MODEL=$(echo "$input" | jq -r '.model.display_name') PCT=$(echo "$input" | jq -r '(.context_window.used_percentage // 0) | floor') COST=$(echo "$input" | jq -r '.cost.total_cost_usd // 0') HIT=$(echo "$input" | jq -r '((.prompt_cache.hit_ratio // 0) * 100) | floor') printf '[%s] ctx %s%% | cache %s%% | $%.2f' "$MODEL" "$PCT" "$HIT" "$COST"
{
"statusLine": {
"type": "command",
"command": "~/.claude/statusline.sh",
"padding": 2
}
}Необов’язкове поле refreshInterval (мінімум 1 с) перезапускає скрипт за таймером, а не лише за подіями.
Hooks — детерміновані обробники, що запускаються на події життєвого циклу (зазвичай shell-команди; також доступні типи http, mcp_tool, prompt та експериментальний agent). Дані події hook отримує як JSON у stdin — наприклад, шлях до файлу лежить у .tool_input.file_path. Повний довідник (усі події, поля, формати відповіді) — на сторінці Налаштування → hooks; тут лише рецепти автоматизації саме для роботи з агентами.
Рецепт 1: форматування після кожної правки
Для Django + Vue потрібні різні форматери, тому фільтр за розширенням краще винести в скрипт. Hook спрацьовує на Edit і Write без поля if — про причину нижче.
{
"hooks": {
"PostToolUse": [
{
"matcher": "Edit|Write",
"hooks": [
{
"type": "command",
"command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/format.sh"
}
]
}
]
}
}#!/bin/bash # PostToolUse: форматуємо файл, який щойно змінив Claude f=$(jq -r '.tool_input.file_path // empty') [ -z "$f" ] && exit 0 case "$f" in *.py) ruff format "$f" >/dev/null 2>&1 ;; *.vue|*.ts|*.js) npx prettier --write "$f" >/dev/null 2>&1 ;; esac exit 0
matcher фільтрує лише за назвою інструменту (точна назва, список через | або regex). Для фільтра за аргументами є окреме поле "if" із синтаксисом правил дозволів ("Bash(git *)", "Edit(*.ts)"), але воно містить рівно одне правило: синтаксису &&, || чи списку немає — для кількох умов роби окремий handler на кожну. Крім того, if працює лише на подіях інструментів (PreToolUse, PostToolUse, PostToolUseFailure, PermissionRequest, PermissionDenied); на інших подіях hook з if не запуститься взагалі. Правила Edit(…) у системі дозволів стосуються всіх вбудованих інструментів редагування, але документація не гарантує, що hook-if "Edit(*.py)" спрацює й на Write — тому в рецепті вище фільтр винесено в скрипт. Також if — best-effort: для жорсткої заборони використовуй permissions.deny, а не hook. Змінної $CLAUDE_FILE_PATH не існує — доступні $CLAUDE_PROJECT_DIR, $CLAUDE_PLUGIN_ROOT тощо.Рецепт 2: захист файлів (PreToolUse)
{
"hooks": {
"PreToolUse": [
{
"matcher": "Edit|Write",
"hooks": [
{
"type": "command",
"command": "jq -r '.tool_input.file_path' | grep -qE '\\.(env|lock)$' && { echo 'Захищений файл' >&2; exit 2; } || exit 0"
}
]
}
]
}
}0 = успіх (stdout у форматі JSON розбирається як рішення), 2 = блокувати (stderr повертається Claude як пояснення), інший код = неблокуюча помилка, дія продовжується. Активні hooks: /hooks.sed -i, cp, перенаправлення виводу), і такі зміни матчер Edit|Write не побачить. Якщо hook має бачити кожну зміну (аудит, перевірки), додай Stop-hook, що раз за хід сканує робоче дерево (рецепт 3), або матч Bash|PowerShell зі скриптом, який виводить змінені файли через git status --porcelain. Для реакції на зміну конкретного файлу, ким би він не був записаний, є подія FileChanged.Рецепт 3: Stop-hook як ворота перед завершенням ходу
Hook на Stop може не пустити Claude закінчити, повернувши {"decision": "block", "reason": "…"} — Claude отримає причину й продовжить роботу. Оскільки такий hook працює раз за хід і бачить дерево цілком, він ловить і зміни, зроблені через Bash.
#!/bin/bash INPUT=$(cat) # Не зациклюватися: якщо ми вже продовжуємо через Stop-hook — дозволити зупинку [ "$(echo "$INPUT" | jq -r '.stop_hook_active')" = "true" ] && exit 0 # cwd з події, а не $CLAUDE_PROJECT_DIR: у worktree це різні каталоги cd "$(echo "$INPUT" | jq -r '.cwd')" || exit 0 changed=$(git status --porcelain | awk '{print $NF}' | grep -E '\.py$' \ | while read -r f; do [ -f "$f" ] && echo "$f"; done) [ -z "$changed" ] && exit 0 if ! out=$(echo "$changed" | xargs ruff check 2>&1); then jq -n --arg r "ruff check знайшов проблеми, виправ їх: $out" '{decision: "block", reason: $r}' fi exit 0
{
"hooks": {
"Stop": [
{
"hooks": [
{ "type": "command", "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/stop-gate.sh" }
]
}
]
}
}stop_hook_active, як вище; за потреби ліміт піднімає CLAUDE_CODE_STOP_HOOK_BLOCK_CAP. Для м’якшої підказки замість блокування поверни hookSpecificOutput.additionalContext. Вбудована команда /goal — це готова сесійна версія prompt-based Stop-hook. Типи prompt та agent теж підходять для воріт (наприклад, «перевір, що всі тести проходять»), але agent — експериментальний.Рецепт 4: повернути важливе після компакції
Компакція стискає розмову й може «з’їсти» домовленості. Hook SessionStart з матчером compact додає stdout у контекст щоразу після неї:
{
"hooks": {
"SessionStart": [
{
"matcher": "compact",
"hooks": [
{
"type": "command",
"command": "echo 'Нагадування: тести — pytest, фронтенд — npm run test:unit; коміти — Conventional Commits; git push не виконувати.'"
}
]
}
]
}
}Замість echo може бути будь-яка команда з динамічним виводом, наприклад git log --oneline -5. Для інструкцій, потрібних на кожному старті, краще CLAUDE.md. Якщо потрібно перезавантажувати середовище (direnv) при зміні каталогу, є події CwdChanged/SessionStart і файл $CLAUDE_ENV_FILE.
Рецепт 5: скоротити вивід тестів (PreToolUse + updatedInput)
Офіційний приклад з документації щодо витрат: hook переписує команду тестів, лишаючи у виводі тільки збої, — менше токенів у контексті. Він напряму підходить для pytest.
#!/bin/bash input=$(cat) cmd=$(echo "$input" | jq -r '.tool_input.command') # Якщо це запуск тестів — залишаємо лише збої if [[ "$cmd" =~ ^(npm test|pytest|go test) ]]; then filtered_cmd="$cmd 2>&1 | grep -A 5 -E '(FAIL|ERROR|error:)' | head -100" echo "$input" | jq --arg filtered "$filtered_cmd" \ '{hookSpecificOutput: {hookEventName: "PreToolUse", permissionDecision: "allow", updatedInput: (.tool_input + {command: $filtered})}}' else echo "{}" fi
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [
{ "type": "command", "command": "~/.claude/hooks/filter-test-output.sh" }
]
}
]
}
}permissionDecision: "allow", тобто обходить запит дозволу для команди, що збіглася з regex — тримай regex вузьким (тільки тестові раннери). Якщо кілька PreToolUse-hooks повертають updatedInput для одного інструмента, діє той, що завершився останнім, а hooks працюють паралельно — тож не роби двох hooks, які переписують ту саму команду.Події, корисні для роботи з агентами
| Подія | Коли | Для чого |
|---|---|---|
SubagentStart / SubagentStop | Субагент стартує / завершується | Логування, перевірка результату субагента (SubagentStop теж може блокувати завершення) |
TaskCreated / TaskCompleted | Створення задачі / її позначають виконаною | Ворота якості для списків задач і agent teams |
TeammateIdle | Учасник agent team збирається простоювати | Дати йому ще роботу |
Stop / StopFailure | Кінець ходу / помилка API | Перевірки, сповіщення |
SessionStart | Старт, resume, clear, compact, fork (matcher) | Контекст, змінні середовища |
PreCompact / PostCompact | Навколо компакції (manual/auto) | Зберегти або повернути важливе |
WorktreeCreate / WorktreeRemove | Створення / видалення worktree | Власна логіка для не-git VCS; копіювання локальних файлів |
FileChanged, CwdChanged | Зміна файлу на диску / каталогу | Реакція на зміни незалежно від того, хто їх вніс |
InstructionsLoaded, ConfigChange | Завантаження CLAUDE.md і rules / зміна конфігу | Налагодження пам’яті, аудит налаштувань |
Типи hooks і таймаути
| Тип | Таймаут за замовчуванням | Примітка |
|---|---|---|
command, http, mcp_tool | 600 с | На UserPromptSubmit — 30 с, бо hook блокує обробку промпта |
prompt | 30 с | Рішення приймає модель |
agent | 60 с | Експериментальний |
SessionEnd | бюджет 1,5 с | Збільшується, якщо в налаштуваннях задано більший timeout |
Тут зібрано все, що стосується git у роботі з агентами: власний skill для комітів, керування вбудованими git-інструкціями й атрибуцією, зв’язок сесій із merge request у GitLab та вбудовані команди рев’ю. Паралельні гілки через worktrees — у розділі «Паралельна робота», запуск у CI — у «Headless і GitLab CI».
Skill smart-commit (виправлена версія)
--- name: smart-commit description: > Аналізує staged зміни і створює коміт у форматі Conventional Commits. Запускай після git add. disable-model-invocation: true context: fork model: haiku allowed-tools: Bash(git diff *) Bash(git log *) Bash(git status *) Bash(git commit *) --- Ти не бачиш попередньої розмови — працюй тільки зі staged змінами. 1. Виконай `git status --short` і `git diff --staged`. Якщо нічого не staged — зупинись і скажи про це. 2. Подивись `git log --oneline -5`, щоб підхопити стиль scope у проєкті. 3. Створи коміт (`git commit -m`) у форматі Conventional Commits: type(scope): короткий опис (не більше 72 символів) - Деталь 1: що і чому - Деталь 2 BREAKING CHANGE: ... (тільки якщо є) Refs: номер задачі GitLab (якщо відомий) Типи: feat, fix, docs, style, refactor, perf, test, chore, ci. Не виконуй `git push` і не змінюй файли.
Що змінено порівняно зі «спрощеною» версією і чому:
| Зміна | Причина |
|---|---|
context: fork | Без нього model: haiku діє на решту ходу в тій самій розмові. Це перемикання моделі: наступний запит читає всю історію розмови без cache hits, тож у довгій сесії /smart-commit може коштувати дорожче, а не дешевше. З context: fork поле model задає модель окремого субагента з власним кешем, а після коміту діє знову модель сесії. Субагент не бачить історії розмови, тому інструкції в skill мають бути самодостатніми |
allowed-tools з git commit | Поле — це попереднє схвалення інструментів на хід, який викликав skill, а не обмеження: решта інструментів лишається доступною, а дозвіл знімається після наступного повідомлення. У старій версії були лише git diff/git log, тож git commit усе одно питав дозвіл. Тепер він схвалений наперед; git push — ні. Для обох правил пробіл перед * важливий: Bash(git diff *) не збігається з git diff-index |
| Перевірка вмісту репозиторного skill | Workspace trust не блокує allowed-tools: skill із репозиторію може сам дати собі широкі права, навіть у -p у непевній теці. Перевіряй allowed-tools у чужих skills перед запуском |
Крок «нічого не staged — зупинись», заборона git push | Субагент без історії розмови не знає контексту, тож межі дій треба прописати прямо в тексті skill. Вбудовані git-інструкції Claude Code можуть конфліктувати з цим форматом — див. наступний підрозділ |
Атрибуція та вбудовані git-інструкції
Claude Code додає Claude власні інструкції про те, як писати коміти й pull/merge request (в описі Bash-інструмента), а також знімок git-стану (поточна гілка, головна гілка, вивід git status, останні коміти), зчитаний на початку розмови. До коміту додається трейлер Co-Authored-By, до опису PR — рядок про генерацію. Якщо у вас свій формат комітів (skill, CLAUDE.md), ці налаштування варто узгодити.
| Ключ | Що робить |
|---|---|
includeGitInstructions | false прибирає і вбудовані commit/PR-інструкції, і знімок git-стану. Рекомендовано, коли використовуєш власні git-skills. Те саме через змінну середовища CLAUDE_CODE_DISABLE_GIT_INSTRUCTIONS=1 (має пріоритет над ключем) |
attribution.commit | Текст/трейлер у комітах. За замовчуванням Co-Authored-By: <назва моделі> <noreply@anthropic.com>; порожній рядок ховає |
attribution.pr | Текст в описі PR/MR. За замовчуванням рядок «Generated with Claude Code» з посиланням; порожній рядок ховає |
attribution.sessionUrl | false прибирає посилання на сесію з комітів хмарних сесій і Remote Control |
attribution: false | Ховає всю атрибуцію (з v2.1.281; ранні версії відхиляють таке значення й пропускають увесь файл налаштувань) |
includeCoAuthoredBy | Застарілий; використовуй attribution |
prUrlTemplate | Шаблон посилань на PR у власному code-review-інструменті; посилання на GitLab MR залишаються GitLab’івськими |
{
"includeGitInstructions": false,
"attribution": {
"commit": "",
"pr": "",
"sessionUrl": false
}
}Власні інструкції про атрибуцію (CLAUDE.md, пам’ять) Claude Code ставить вище за ці рядки — крім значень, заданих у managed settings.
Merge request у GitLab: glab, значок і --from-pr
- Сесія зв’язується з PR/MR, коли Claude виконує
gh pr createабоglab mr create. Потім сесію можна знайти:claude --from-pr 123або за URL merge request. - Значок
MR !Nу футері (v2.1.234+): зелене підкреслення — GitLab вважає MR придатним до злиття, жовте — інший відкритий стан, сіре — draft. Потрібні remote на ваш GitLab (gitlab.com чи self-managed) іglabуPATHз виконанимglab auth login. Змінні токена на кшталтGITLAB_TOKENClaude Code для цієї перевірки ігнорує, а наявністьglabперевіряє раз за сесію — після встановлення перезапусти Claude Code. Значок оновлюється після успішнихgit pushтаglab mr create/glab mr merge. claude --worktree "https://gitlab.com/group/repo/-/merge_requests/123"(або"#123") створює worktreepr-123з head цього MR (v2.1.233+). Докладніше — у розділі «Паралельна робота».
# знайти сесію, що створила MR claude --from-pr https://gitlab.example.com/group/repo/-/merge_requests/123 # попросити Claude відкрити MR (дозволи нижче) claude "Створи MR у main через glab mr create --fill з описом змін"
{
"permissions": {
"allow": [
"Bash(glab mr view *)",
"Bash(glab mr diff *)",
"Bash(glab mr create *)"
],
"deny": ["Bash(git push --force *)"]
}
}git push *, то glab mr create, якому потрібна відправлена гілка, вимагатиме від тебе ручного пушу або окремого дозволу — залежно від того, як ви вирішили розподілити відповідальність.Рев’ю: /code-review, /security-review, /simplify
| Команда | Що робить | Деталі |
|---|---|---|
/code-review (псевдонім /review) | Шукає помилки коректності (та, залежно від рівня, зауваження щодо повторного використання, спрощення, ефективності) у diff, PR/MR, гілці чи шляху | Синтаксис: [low|medium|high|xhigh|max|ultra] [--fix] [--comment] [--max-findings n|all|default] [pr#|гілка|шлях]. Без рівня береться останній використаний. ultra — глибоке мультиагентне рев’ю в хмарі. --fix застосовує знахідки до робочого дерева |
/code-review … --comment для GitLab | Публікує знахідки в MR однією приміткою (на GitHub — інлайн-коментарями) | Через glab (v2.1.257+). Якщо glab не встановлено, знахідки друкуються в терміналі. MR передавай як URL або !123: голий номер чи назву гілки Claude Code вважає MR лише коли origin на gitlab.com; для self-managed використовуй URL або !123 |
/security-review | Рев’ю безпеки змін поточної гілки відносно головної гілки origin | Потрібен налаштований origin |
/simplify | Чистить змінений код: повторне використання, спрощення, ефективність. Запускає чотири паралельні агенти і застосовує правки | Помилки не шукає — для цього /code-review |
/diff | Показує зміни робочого дерева | Швидкий огляд перед комітом |
/code-review high --comment !123 /code-review https://gitlab.example.com/group/repo/-/merge_requests/123 --comment /security-review /simplify
Паралельна робота: worktrees, фонові задачі, agent view
Кілька агентів одночасно без конфліктів у файлах
Паралельна робота потребує двох речей: щоб агенти не псували файли один одного і щоб ти не сидів і не чекав. Перше вирішують git worktrees, друге — фонові команди та фонові сесії.
| Механізм | Що розділяє | Коли брати |
|---|---|---|
| Субагенти | Контекст (у межах однієї сесії) | Дослідження чи перевірка, що засмічують головну розмову |
Worktrees (claude -w) | Файли й гілку | Дві і більше сесій, що редагують код одночасно |
isolation: worktree | Файли для одного субагента | Субагент робить масові правки, що можуть конфліктувати |
/batch | Автоматично: по субагенту з worktree на частину | Однотипна міграція на десятки файлів |
Фонові задачі (Ctrl+B, /tasks) | Не блокують термінал | Довгі команди: dev-сервер, збірка, тести |
Фонові сесії (--bg, claude agents) | Цілу сесію | Кілька незалежних завдань; керуєш з одного екрана |
| Agent teams | Окремі сесії-учасники з координацією | Див. розділ «Agent Teams» |
Worktrees: claude --worktree
Git worktree — окрема робоча тека з власними файлами й гілкою, але з тією самою історією та remote. --worktree (-w) створює її й запускає в ній Claude. Без імені назву генерує сам Claude.
claude --worktree feature-export # .claude/worktrees/feature-export/, гілка worktree-feature-export claude -w fix-login # друга ізольована сесія в іншому терміналі # гілка з head існуючого MR (GitLab) або PR claude --worktree "https://gitlab.com/group/repo/-/merge_requests/123" claude --worktree "#123" # лапки обов’язкові: # інакше початок коментаря в shell
- Додай
.claude/worktrees/у.gitignore, щоб вміст worktree не світився як untracked. - Worktree — свіжий checkout: залежності треба поставити (
pip install,npm install) — попроси Claude або зроби сам. - Інтерактивний запуск вимагає workspace trust: у новій теці спершу запусти звичайний
claude. - Для MR URL Claude Code читає лише номер і завжди тягне з remote
origin: на gitlab.com —merge-requests/<n>/head, на self-managed GitLab та інших хостах пробуєpull/<n>/head, потімmerge-requests/<n>/head. Теку названоpr-<номер>. Запит пароля чи passphrase не чекається — завантаж ключ уssh-agentі раз виконайgit fetchвручну. - Можна й попросити Claude посеред сесії: «працюй у worktree» (інструмент
EnterWorktree).
.worktreeinclude: перенести .env у нові worktree
Файл у корені проєкту з синтаксисом .gitignore. Копіюються лише файли, що і збігаються з патерном, і ігноруються git, тож відслідковувані файли не дублюються. Діє для --worktree, worktrees субагентів і паралельних сесій desktop-застосунку.
.env .env.local config/secrets.json
Налаштування worktree
| Ключ | Значення |
|---|---|
worktree.baseRef | "fresh" (за замовчуванням) — гілка від головної гілки remote; "head" — від локального HEAD разом з ненапушеними комітами. Назву гілки задати не можна — для цього створюй worktree через git worktree add. Для "fresh" Claude Code оновлює origin/HEAD (не частіше за раз на 24 год, до 5 с) |
worktree.sparsePaths | Масив каталогів (відносно кореня репозиторію): у кожному worktree через git sparse-checkout з’являються лише вони й файли кореня — швидше у великих монорепозиторіях |
worktree.symlinkDirectories | Масив каталогів основного репозиторію, які в кожен worktree підключаються символьним посиланням, щоб не дублювати їх на диску — наприклад, ["node_modules", ".cache"] |
worktree.bgIsolation | "none" вимикає автоматичний перехід фонових сесій у worktree |
{
"worktree": {
"baseRef": "head"
}
}Прибирання та повторне використання
- При виході з неіменованої чистої сесії worktree і його гілка видаляються автоматично; для іменованої Claude спитає. Якщо там є зміни чи нові коміти — запропонує залишити або видалити. Залишене можна відновити командою
claude --worktree <name> --resume, яку Claude Code друкує при виході. - Запуски з
-pнічого не прибирають: видали вручнуgit worktree remove(якщо заблоковано — спершуgit worktree unlock). - Якщо передати ім’я вже існуючого worktree, відкриється він же. Чистий worktree на своїй гілці без власних комітів (або чий MR злито, а remote-гілку видалено) при
"fresh"скидається на актуальну головну гілку. - Worktrees субагентів і фонових сесій періодично прибирає sweep за терміном
cleanupPeriodDays, але не чіпає ті, де лишилися зміни чи ненапушені коміти.
Що worktree ділить з основним checkout
- Каталог
.git(томуgit commitпрацює й із ввімкненим sandbox). - Плагіни рівня проєкту (v2.1.200+).
- Схвалення «більше не питати» зберігаються в
settings.local.jsonосновного checkout і діють в усіх worktrees (v2.1.211+). - Невідслідковувані skills, agents і commands: якщо у worktree немає власного
.claude/skills, підхоплюється каталог основного checkout (для skills — v2.1.277+).
$CLAUDE_PROJECT_DIR у hooks не переходить у worktree — він лишається коренем проєкту, де стартувала сесія. Шлях worktree бери з поля cwd у JSON події; воно змінюється й після cd (приклад — у stop-gate.sh у розділі Hooks). Ізоляція також блокує правки основного checkout зі сесії у worktree: це стосується Edit/Write, робочого каталогу Bash, перенаправлень git (git -C, GIT_DIR) і команд, у яких не можна перевірити, що git лишається у worktree. Звичайні cp/перенаправлення вона не перехоплює — їх стримують дозволи та sandbox.Субагент у власному worktree
--- name: refactorer description: Робить механічні рефакторинги на багатьох файлах. Використовуй для масових змін. isolation: worktree model: sonnet --- Застосуй запитаний рефакторинг до всіх потрібних файлів, потім запусти тести й повідом результат.
Субагент отримує тимчасовий worktree, який Claude Code прибирає, якщо змін немає; якщо зміни є — залишає. Гілка береться за тими самими правилами worktree.baseRef. Субагент у worktree бере стартові інструкції з головної розмови, а не зі свого worktree: CLAUDE.md і .claude/rules/ із кореня такого worktree він не підвантажує. Можна й просто попросити: «використай worktrees для агентів».
/batch: масові правки з ізоляцією
/batch <інструкція> розбиває роботу на 5–30 незалежних частин і запускає по одному фоновому субагенту в ізольованому worktree на кожну. Підходить для однотипних міграцій (наприклад, оновити виклики застарілого API у всьому Django-проєкті). Поза git-репозиторієм працює, якщо налаштований hook WorktreeCreate (v2.1.281+).
Фонові задачі: Ctrl+B, /tasks
Ctrl+Bпереносить запущену Bash-команду чи агента у фон (у tmux — двічі). Просто сказати Claude «запусти у фоні» теж можна.- Команда, що досягла таймауту, автоматично йде у фон (крім команд, що починаються з
sleep); вивід — у файл, керування —/tasks(псевдонім/bashes). Задачі вбиваються при 5 ГБ виводу й прибираються при виході. - Субагент у фоні: поле
background: trueу frontmatter. Його запити дозволів з’являються в головній сесії.Ctrl+X Ctrl+K(двічі за 3 с) зупиняє всіх фонових субагентів сесії. - Вимкнути фонові задачі:
CLAUDE_CODE_DISABLE_BACKGROUND_TASKS=1. У режимі--bareїх теж немає. Ctrl+Tпоказує чекліст задач Claude (це не фонові задачі),Ctrl+O— transcript viewer.
Фонові сесії: --bg і claude agents
Agent view (дослідницький preview) — один екран для багатьох фонових сесій: що робить кожна, кому потрібен твій ввід, що завершилось. Сесії працюють на твоїй машині, витрачають квоту підписки незалежно й зупиняються при вимкненні комп’ютера (сон переживають).
claude agents # відкрити agent view claude agents --cwd ~/projects/my-app # лише сесії з цього каталогу claude --bg "розберися з нестабільним тестом test_export" claude --bg --name flaky-fix "розберися з нестабільним тестом" claude --agent code-reviewer --bg "відреагуй на коментарі до MR 123" claude --resume <session-id> --bg "продовж з того місця" claude --bg --exec 'pytest -x' # shell-команда як фонова робота
--bgне поєднується з-p/--print.- Усередині сесії:
/background(/bg) переносить розмову у фон;/forkкопіює розмову у нову фонову сесію, а оригінал продовжує працювати (v2.1.212+); на порожньому промпті←теж відправляє у фон. - Перед правками диспатчена сесія переходить у власний worktree в
.claude/worktrees/— крім випадків, коли її винесено у фон вже відкритою, вона вже у worktree або каталог не git-репозиторій безWorktreeCreate. Вимкнути:"worktree": {"bgIsolation": "none"}. - Видалення сесії в agent view прибирає її worktree разом з незакоміченими змінами;
claude rmзберігає worktree зі змінами і відмовляє, якщо є ненапушені коміти (без--discard-unpushed). Транскрипти лишаються —claude --resume. - Вимкнути:
disableAgentView: trueабоCLAUDE_CODE_DISABLE_AGENT_VIEW; відкривати agent view за замовчуванням:/config defaultToAgentsView=true.
| Команда | Призначення |
|---|---|
claude agents --json [--all] [--cwd path] | Список сесій у JSON — підтримуваний спосіб прочитати стан |
claude attach <id|name> | Під’єднатись у цьому терміналі (за іменем — з v2.1.290) |
claude logs <id|name> | Останній вивід сесії |
claude stop <id> (або claude kill) | Зупинити |
claude respawn <id> / --all | Перезапустити |
claude rm <id> | Прибрати зі списку |
claude daemon status|logs|stop | Керування супервізором |
| Стан | Значення |
|---|---|
| Working | Claude виконує інструменти або генерує відповідь |
| Needs input | Чекає на відповідь, рішення про дозвіл чи наступний промпт |
| Idle | Готова до наступного промпта |
| Completed / Failed | Завершилась успішно / з помилкою |
| Stopped | Зупинена через Ctrl+X або claude stop |
У agent view: Space — peek (швидка відповідь без входу), Enter/→ — під’єднатися, ← на порожньому промпті — від’єднатися, Ctrl+X — зупинити (повторно протягом 2 с — видалити), Ctrl+T — закріпити, Ctrl+R — перейменувати, ? — усі комбінації. Задати значення за замовчуванням для сесій, запущених з agent view, можна прапорами: claude agents --permission-mode plan --model opus --effort high.
Патерн Writer/Reviewer
Свіжий контекст рев’юера не упереджений до коду, який він сам щойно написав. Тому писати й перевіряти варто в різних сесіях.
# термінал A: пише код claude -w feature-export # термінал B (основний checkout): окрема сесія з агентом-рев’юером claude --agent code-reviewer \ "Перевір git diff main...worktree-feature-export: коректність, тести, безпека. Звітуй лише про те, що впливає на правильність."
Гілку, на якій працює worktree, не можна одночасно відкрити в основному checkout, тому рев’юер читає diff, а не перемикається на цю гілку. Інший варіант: після пушу запустити /code-review high --comment !<номер> із нової сесії.
claude -p "…" запускає Claude Code без інтерактивного інтерфейсу: результат іде в stdout, код виходу 0 означає успіх, ненульовий — помилку (при SIGTERM — 143). Так Claude вбудовується в скрипти, git-hooks і CI. Це та сама агентна петля й ті самі інструменти, що й у терміналі (Agent SDK у режимі CLI).
Прапори claude -p
| Прапор | Призначення |
|---|---|
-p, --print | Неінтерактивний режим. Не всі прапори сумісні: --bg відхиляється |
--output-format text|json|stream-json | text — за замовчуванням; json — об’єкт із result, session_id, total_cost_usd і розбивкою по моделях; stream-json — події рядок за рядком |
--json-schema '<schema>' | Відповідь за JSON Schema; результат у полі structured_output. Недійсна схема дає помилку (до v2.1.205 мовчки ігнорувалася); format трактується як анотація й не перевіряється |
--verbose, --include-partial-messages | Використовуються зі stream-json: --verbose — повний вивід подій, --include-partial-messages — токени в процесі генерації |
--forward-subagent-text | У stream-json додати текст і thinking субагентів (v2.1.211+), не лише tool_use/tool_result |
--bare | Пропустити авто-виявлення hooks, skills, commands, субагентів, плагінів, MCP, auto memory і CLAUDE.md; потрібен ANTHROPIC_API_KEY (OAuth/keychain не читаються) |
--allowedTools, --disallowedTools, --tools | Попередньо схвалити / заборонити / обмежити набір інструментів. Приклад: "Bash(git diff *),Read,Edit" — пробіл перед * важливий |
--permission-mode | default (псевдонім manual), acceptEdits, plan, auto, dontAsk, bypassPermissions |
--permission-prompts none | Усе, що викликало б запит, відхиляється (і Claude знає, що ніхто не відповість) — v2.1.259+ |
--max-turns N | Обмеження кількості ходів |
--max-budget-usd 5.00 | Ліміт витрат (лише print-режим; витрати субагентів враховуються) |
--no-session-persistence | Не зберігати сесію на диск |
-c/--continue, -r/--resume <id> | Продовжити останню / конкретну розмову |
--append-system-prompt[-file], --system-prompt[-file] | Додати до системного промпта / повністю замінити |
--append-subagent-system-prompt[-file] | Додати до промптів субагентів (лише з -p) |
--exclude-dynamic-system-prompt-sections | Краще повторне використання кешу між машинами CI |
--model, --effort, --fallback-model | Модель, рівень зусиль, резервні моделі |
--mcp-config, --settings, --agents | Підключити MCP / налаштування / агентів з файлу чи JSON (--agents з -p приймає шлях до JSON-файлу з v2.1.281) |
Корисні рецепти
# повідомлення коміту (офіційний приклад) claude -p "Look at my staged changes and create an appropriate commit" \ --allowedTools "Bash(git diff *),Bash(git log *),Bash(git status *),Bash(git commit *)" # лог збірки в аналіз причини cat build-error.txt | claude -p 'concisely explain the root cause of this build error' > output.txt # diff у рев’ю безпеки; для GitLab замість gh pr diff підставте glab mr diff (адаптація, у документації приклад для gh) glab mr diff 123 | claude -p \ --append-system-prompt "You are a security engineer. Review for vulnerabilities." \ --output-format json | jq -r '.result' # структурований вивід claude -p "Extract the main function names from auth.py" \ --output-format json \ --json-schema '{"type":"object","properties":{"functions":{"type":"array","items":{"type":"string"}}},"required":["functions"]}' \ | jq '.structured_output' # цикл по файлах (fan-out) без жодних запитів for f in $(cat files.txt); do claude -p "Migrate $f to the new API" --allowedTools "Edit,Bash(git commit *)" --permission-mode dontAsk done
- Вхід через pipe (stdin) обмежений 10 МБ; більші дані клади у файл і давай шлях у промпті.
- Користувацькі skills працюють:
/skill-nameу рядку промпта розгортається перед запуском. Вбудовані термінальні команди (/login) недоступні./model sonnet,/effort,/config key=valueі/output-style <style>приймають значення аргументом. - Після завершення ходу
-pможе чекати фонову роботу (фонові команди, субагенти, Monitor): ліміт простою — 10 хв, змінюєтьсяCLAUDE_CODE_PRINT_BG_WAIT_CEILING_MS(0— без ліміту). Досягнутий--max-budget-usdзупиняє залишок фонової роботи. - Мережеві помилки API з повтором видають події
system/api_retry;system/initу stream-json повідомляє про MCP-сервери (mcp_server_errors) і плагіни (plugin_errors) — по них CI може впасти, якщо щось не завантажилось.
Дозволи в CI
| Режим | Поведінка | Для CI |
|---|---|---|
default / manual | Питає про все, що не схвалено правилами | Не підходить: нікому відповісти |
acceptEdits | Правки файлів і прості файлові команди (mkdir, mv, cp…) без запитів; решта shell-команд і мережа — лише з --allowedTools / permissions.allow | Для джобів, що змінюють код (офіційний приклад GitLab) |
plan | Лише аналіз, без змін | Для «план без коду» |
auto | Класифікатор оцінює дії. Це може бути режим за замовчуванням, тож у CI вказуй режим явно | З --permission-prompts none |
dontAsk | Відхиляє все, що викликало б запит; працює лише те, що вже дозволено (читання у робочих теках, read-only команди, --allowedTools, permissions.allow) | Найкращий для заблокованого CI |
bypassPermissions | Без перевірок | Лише в одноразовому ізольованому контейнері без секретів |
GitLab CI/CD: інтеграція від GitLab
Офіційна сторінка інтеграції — у бета-статусі, її підтримує GitLab. Основа — те саме CLI та Agent SDK, що запускається в джобі на ваших runner’ах; усі зміни проходять через MR, тож діють branch protection і approvals. Мінімальний офіційний джоб:
stages: - ai claude: stage: ai image: node:24-alpine3.21 rules: - if: '$CI_PIPELINE_SOURCE == "web"' - if: '$CI_PIPELINE_SOURCE == "merge_request_event"' variables: GIT_STRATEGY: fetch before_script: - apk update - apk add --no-cache git curl bash - curl -fsSL https://claude.ai/install.sh | bash - export PATH="$HOME/.local/bin:$PATH" script: # необов’язково: GitLab MCP-сервер, якщо ваш runner його має - /bin/gitlab-mcp-server || true - > claude -p "${AI_FLOW_INPUT:-'Review this MR and implement the requested changes'}" --permission-mode acceptEdits --allowedTools "Bash Read Edit Write mcp__gitlab" --debug
| Елемент | Деталі |
|---|---|
| Змінні | ANTHROPIC_API_KEY — masked змінна CI/CD (Settings → CI/CD → Variables). CI_JOB_TOKEN за замовчуванням або Project Access Token зі scope api у masked GITLAB_ACCESS_TOKEN для операцій GitLab API |
AI_FLOW_INPUT, AI_FLOW_CONTEXT, AI_FLOW_EVENT | Контекст, який передає pipeline trigger (промпт, обговорення, подія) — для web/API-запусків |
Тригер @claude | Потребує власного webhook-слухача на «Comments (notes)», який викликає API запуску pipeline зі змінними AI_FLOW_*. У коментарі має бути саме @claude, не /claude |
| Bedrock / Vertex (Google Cloud’s Agent Platform) | Без статичних ключів: OIDC-токен із блоку id_tokens (GITLAB_OIDC_TOKEN) обмінюється на хмарні облікові дані. Bedrock: AWS_ROLE_TO_ASSUME, AWS_REGION, CLAUDE_CODE_USE_BEDROCK: "1". Vertex: Workload Identity Federation, GCP_WORKLOAD_IDENTITY_PROVIDER, GCP_SERVICE_ACCOUNT, GCP_PROJECT_ID, CLAUDE_CODE_USE_VERTEX: "1" |
| Вартість | Витрачаються хвилини runner’а й токени. Став доречні --max-turns та timeout джоба, обмежуй паралельність |
/install-github-app налаштовує GitHub Actions (anthropics/claude-code-action@v1 з prompt, claude_args, anthropic_api_key або claude_code_oauth_token) і для GitLab-remote не працює. Для GitLab інтеграція — це джоб у .gitlab-ci.yml та змінні CI/CD, як нижче. Токен для CI за підпискою (OAuth) створює claude setup-token, але --bare OAuth не читає — з ним потрібен ANTHROPIC_API_KEY.Повний приклад: рев’ю MR з публікацією нотатки
Джоб нижче запускається на кожну подію merge request, дає Claude лише читання коду, повертає знахідки за JSON-схемою і публікує їх в MR однією приміткою. Публікацію виконує окремий curl, тому Claude токена GitLab API не отримує.
stages: - review claude-mr-review: stage: review image: node:24-alpine3.21 rules: - if: '$CI_PIPELINE_SOURCE == "merge_request_event"' allow_failure: true # рев’ю не блокує злиття timeout: 15m variables: GIT_DEPTH: "0" # повна історія — потрібна для diff проти цільової гілки REVIEW_SCHEMA: '{"type":"object","properties":{"summary":{"type":"string"},"findings":{"type":"array","items":{"type":"object","properties":{"file":{"type":"string"},"line":{"type":"integer"},"severity":{"type":"string","enum":["high","medium","low"]},"message":{"type":"string"}},"required":["file","severity","message"]}}},"required":["summary","findings"]}' before_script: - apk add --no-cache git curl bash jq - curl -fsSL https://claude.ai/install.sh | bash # інсталятор кладе claude у ~/.local/bin, якого немає в PATH цього образу - export PATH="$HOME/.local/bin:$PATH" script: - git fetch origin "$CI_MERGE_REQUEST_TARGET_BRANCH_NAME" - git diff "origin/$CI_MERGE_REQUEST_TARGET_BRANCH_NAME...HEAD" > mr.diff # конвенції беремо з ЦІЛЬОВОЇ гілки, а не з MR: автор MR не може підмінити інструкції рев’юера - git show "origin/$CI_MERGE_REQUEST_TARGET_BRANCH_NAME:CLAUDE.md" > /tmp/conventions.md || echo "" > /tmp/conventions.md # env -u: токен GitLab API не потрапляє в оточення Claude; # --tools без Bash + blockReadsOutsideWorkingDirectories: читання лише в теці проєкту - | env -u GITLAB_ACCESS_TOKEN claude --bare -p "Review the merge request diff in mr.diff. Report only bugs, security issues and missing tests. No style nitpicks. Answer in Ukrainian." \ --append-system-prompt-file /tmp/conventions.md \ --tools "Read,Grep,Glob" \ --settings '{"permissions":{"blockReadsOutsideWorkingDirectories":true}}' \ --permission-mode dontAsk \ --max-turns 15 \ --max-budget-usd 2.00 \ --no-session-persistence \ --output-format json \ --json-schema "$REVIEW_SCHEMA" > review.json - jq -e '.structured_output' review.json > findings.json - | jq -r '"## Claude review\n\n" + .summary + "\n\n" + ([.findings[] | "- **" + .severity + "** `" + .file + (if .line then ":" + (.line | tostring) else "" end) + "` — " + .message] | join("\n"))' findings.json > note.md # публікує окремий curl: токен GitLab API у Claude не передається - | curl --fail --silent --request POST \ --header "PRIVATE-TOKEN: $GITLAB_ACCESS_TOKEN" \ --data-urlencode "body@note.md" \ "$CI_API_V4_URL/projects/$CI_PROJECT_ID/merge_requests/$CI_MERGE_REQUEST_IID/notes" artifacts: when: always expire_in: 1 week paths: - review.json
GITLAB_ACCESS_TOKEN— Project Access Token зі scopeapi, masked.ANTHROPIC_API_KEYтакож masked. Protected-змінні недоступні на незахищених гілках MR — якщо рев’ю потрібне на всіх гілках, змінні мають бути не protected.- У
mr.diffлежить diff цільової гілки та HEAD; Claude читає його інструментомReadі за потреби відкриває файли черезRead/Grep/Glob.--toolsобмежує набір інструментів, тож Bash у сесії немає взагалі (а саме--allowedToolsлише попередньо схвалює, і вdontAskread-only команди Bash на кшталтcatусе одно виконувалися б). На LinuxGrepіGlobза замовчуванням відсутні — їх повертає саме згадка в--tools.permissions.blockReadsOutsideWorkingDirectories(v2.1.257+) не дає файловим інструментам читати поза текою проєкту, аenv -uприбираєGITLAB_ACCESS_TOKENз оточення процесу Claude — prompt injection у diff не зможе витягти токен у нотатку. - Для проєктів із
.claude/CLAUDE.mdзмініть шлях уgit show.--bareCLAUDE.md не читає, тому конвенції передані через--append-system-prompt-file. - Альтернатива: вбудоване
/code-review … --commentтеж вміє публікувати нотатку в GitLab MR черезglab(v2.1.257+); безglabзнахідки лише друкуються. Документація описує це як команду сесії й окремого рецепта для CI не дає — запуск у джобі (авторизованийglab, ширші права, токен у оточенні Claude) є нашою адаптацією: перевір на тестовому MR, перш ніж робити обов’язковим.
Безпека CI-джобів
--tools "Read,Grep,Glob" (обмежує набір, на відміну від --allowedTools); dontAsk гарантує, що все, що потребує дозволу, буде відхилено, а не зависне на запиті.--max-turns, --max-budget-usd, timeout на джобі, обмеження паралельності.--bare у CI. Без нього -p виконує hooks з .claude/settings.json і підключає сервери з .mcp.json навіть у теці, якій ти ніколи не довіряв, без діалогу trust..gitlab-ci.yml.bypassPermissions і широкий Bash в джобах, що читають чужий код.Ставтеся до MR від Claude як до MR від будь-якого іншого учасника: рев’ю, approvals і branch protection мають лишатися. Документація наголошує: інтеграція працює на ваших runner’ах із вашими правилами захисту гілок.
Output style — набір інструкцій, що задає роль, тон і формат відповідей на всю сесію. Це інструкція, яку Claude виконує, а не гарантія: для того, що має відбуватися завжди, потрібен hook, для знань про проєкт — CLAUDE.md.
Вбудовані стилі
| Стиль | Що змінює | Коли |
|---|---|---|
| Default | Нічого не додає — стандартні інструкції для програмної інженерії | За замовчуванням |
| Proactive | Одразу береться за задачу, робить розумні припущення замість питань про рутину; перед видаленням даних чи змінами спільних/production систем питає в розмові | Рутинні задачі, коли виправиш курс по ходу |
| Concise (v2.1.237+) | Перше речення — результат; без вступів, переказу кроків і підсумків. Помилки, збої тестів, попередження безпеки — повністю | Коли відповіді задовгі |
| Explanatory | Додає блоки Insight з поясненням рішень (у розмові, не в коментарях коду) | Знайомство з кодовою базою |
| Learning | Як Explanatory, і ще залишає шматки коду для тебе (TODO(human)) | Практика |
Як перемкнути
/output-style concise(v2.1.269+; без аргументу — список). Працює й у-p./config→ Output style, або полеoutputStyleу settings: значення чутливе до регістру ("Explanatory"); неправильне дає Default. Команда і меню зберігають вибір у.claude/settings.local.json.- Стиль за замовчуванням для всіх проєктів —
outputStyleу~/.claude/settings.json; налаштування проєкту мають пріоритет. - Зміна посеред сесії діє з наступного повідомлення (до v2.1.251 — лише після
/clear).
Власний стиль для команди
Markdown-файл у ~/.claude/output-styles/ або .claude/output-styles/ (також у каталозі managed settings і в плагінах). Назва файлу стає назвою стилю, якщо не задано name. Файли читаються при старті — після створення перезапусти Claude Code.
--- name: MR review description: Рев’ю у форматі, зручному для коментаря в GitLab MR keep-coding-instructions: true --- Відповідай українською. Структура відповіді завжди така: ## Висновок Одне речення: можна зливати чи ні. ## Критичне Помилки коректності та безпеки: файл:рядок і що не так. Якщо нічого немає — так і напиши. ## Рекомендації Не більше трьох пунктів, за пріоритетом.
| Поле | Значення |
|---|---|
name | Назва в меню /config; за замовчуванням ім’я файлу |
description | Опис у меню |
keep-coding-instructions | true зберігає вбудований блок інструкцій інженерії поряд зі стилем (за замовчуванням false: власний стиль його прибирає). Діє лише на повному системному промпті |
force-for-plugin | Лише стилі плагінів: застосовувати автоматично при ввімкненому плагіні, перекриваючи вибір користувача |
- Стилі діють на головну розмову та на
fork; інші субагенти мають власний системний промпт, тож стиль на них не впливає. - Помилка написання поля у frontmatter мовчки ігнорується; якщо YAML не розбирається, стиль завантажується під іменем файлу без полів — шукай причину у
claude --debug.
Стиль, CLAUDE.md, skill, hook чи субагент?
| Що потрібно | Інструмент |
|---|---|
| Голос, довжина чи формат усіх відповідей; інша роль | Output style |
| Знання про проєкт: команди, структура, конвенції | CLAUDE.md |
| Інструкції для одного типу задач (чекліст релізу, процедура рев’ю) | Skill |
| Дія, що мусить відбуватися завжди (форматування, блок команди) | Hook |
| Помічник з власними інструкціями, моделлю та інструментами в окремому контексті | Субагент |
| Додати щось до системного промпта при запуску | --append-system-prompt |
Status line: контекст і вартість завжди на виду
Status line — рядок унизу інтерфейсу, що виконує ваш shell-скрипт: він отримує JSON сесії в stdin і друкує те, що треба показати. Налаштувати можна командою /statusline (опиши, що хочеш, і Claude напише скрипт) або вручну:
{
"statusLine": {
"type": "command",
"command": "~/.claude/statusline.sh",
"padding": 2,
"refreshInterval": 30
}
}#!/bin/bash input=$(cat) MODEL=$(echo "$input" | jq -r '.model.display_name') PCT=$(echo "$input" | jq -r '.context_window.used_percentage // 0' | cut -d. -f1) COST=$(echo "$input" | jq -r '.cost.total_cost_usd // 0') BRANCH=$(git branch --show-current 2>/dev/null) printf '[%s] ctx %s%% | $%.2f | %s\n' "$MODEL" "$PCT" "$COST" "$BRANCH"
| Поле JSON | Що містить |
|---|---|
model.id, model.display_name | Поточна модель |
context_window.used_percentage | Відсоток заповнення контексту за вхідними токенами (без output); на початку сесії може бути null |
cost.total_cost_usd | Оцінка вартості сесії за прайсом (клієнтська, може відрізнятися від рахунку); скидається після /clear |
rate_limits.five_hour.used_percentage, rate_limits.seven_day.used_percentage | Використання лімітів (лише підписки Pro/Max, після першої відповіді API; кожне вікно може бути відсутнє — використовуй // empty) |
- Скрипт запускається подіями (нове повідомлення, зміна команди тощо);
refreshInterval(мінімум 1 с) додає періодичний запуск — корисно для годинника чи коли фонові субагенти змінюють git, поки основна сесія простоює. paddingдодає горизонтальний відступ у символах. Видалити:/statusline deleteабо прибрати полеstatusLine.- Status line не замінює вбудований футер, але при власному рядку Claude Code ховає більшість підказок на клавіші.
- Це найдешевший спосіб бачити заповненість контексту й вартість без окремих команд — доповнення до
/contextі/usage.
Що робити
.claude/rules/.model: (аліас sonnet/haiku/opus) і за потреби effort: у frontmatter субагентаWrite, explore-агент лише read-only.claude/ у git, але не settings.local.json, agent-memory-local/, worktrees/ і CLAUDE.local.md (останній лежить у корені проєкту, і в .gitignore його треба додати самому)description: є критичним: Claude делегує задачі саме на його основі/goal або Stop-hook (розділ Hooks). Перевірка за доказами надійніша за слова «готово»Чого уникати
/clear і новий, точніший промпт зазвичай кращий за третє виправлення в забрудненому контекстіeffort: low у frontmatter або --effort low суттєво дешевше.claude/agents/ (JSON підтримується лише через прапор --agents)claude-sonnet-4-6 у frontmatter застаріває з кожним релізом; аліаси оновлюються автоматично. Актуальні назви — на code.claude.com/docsЩо комітити, що ні
проєкт/ ├── CLAUDE.md ← комітити (або .claude/CLAUDE.md); цільовий розмір до 200 рядків ├── CLAUDE.local.md ← НЕ комітити: у корені проєкту, додай у .gitignore вручну ├── .worktreeinclude ← комітити (які ігноровані файли копіювати у worktrees) └── .claude/ ├── settings.json ← комітити (спільні налаштування команди) ├── settings.local.json ← НЕ комітити (Claude Code сам додає у глобальні git excludes при першому записі) ├── agents/ ← комітити ├── agent-memory/ ← комітити (memory: project) ├── agent-memory-local/ ← НЕ комітити (memory: local) ├── skills/ ← комітити ├── commands/ ← комітити (legacy, сумісні) ├── rules/ ← комітити ├── output-styles/ ← комітити ├── workflows/ ← комітити ├── hooks/ ← комітити (скрипти для settings.json) └── worktrees/ ← НЕ комітити (додай у .gitignore)
CLAUDE.md (приклад для Django + Vue 3 проєкту)
# Project: My Web App ## Stack - Backend: Django 4.2, DRF, PostgreSQL, Redis - Frontend: Vue 3, Pinia, Vite, TypeScript - Infra: Docker, nginx ## Commands - `make dev` — запустити локально - `make test` — усі тести - `make lint` — перевірка якості коду - `pytest path/to/test_file.py::test_name` — один тест (швидше за весь набір) - `npm run test:unit -- path/to/file.spec.ts` — один фронтенд-тест - `python manage.py makemigrations --check` — перевірити, що міграції актуальні ## Environment - Скопіюй `.env.example` у `.env`; без `DATABASE_URL` і `REDIS_URL` тести не стартують ## Conventions - Conventional Commits обов’язково; гілки `feature/<тема>`, `fix/<тема>` - MR у `main` через GitLab; перед MR — `make lint && make test` - Тести обов’язкові для нової бізнес-логіки - API endpoints мають вхідну валідацію через DRF serializers - Vue компоненти — Composition API з <script setup> IMPORTANT: ніколи не редагуй застосовані міграції — створюй нову.
Тримай такий файл у межах 200 рядків. Включай те, чого Claude не вгадає з коду: команди (зокрема запуск одного тесту), нюанси середовища, правила гілок і MR, архітектурні рішення. Не пиши очевидного й загальноприйнятого — мірило: «чи помилиться Claude без цього рядка?». Слово IMPORTANT ставлять в окремому рядку.
settings.json
{
"permissions": {
"allow": [
"Bash(make *)",
"Bash(git status)",
"Bash(git diff *)",
"Bash(git add *)",
"Bash(pytest *)",
"Bash(npm run *)",
"Bash(glab mr view *)",
"Bash(glab mr diff *)"
],
"deny": [
"Bash(git push *)",
"Bash(rm -rf *)"
]
},
"hooks": {
"PostToolUse": [
{
"matcher": "Edit|Write",
"hooks": [
{
"type": "command",
"command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/format.sh"
}
]
}
]
}
}Hook викликає скрипт format.sh із розділу Hooks (ruff для .py, prettier для .vue/.ts/.js). Фільтр за розширенням винесено в скрипт, бо поле if приймає лише одне правило й гарантовано працює для Edit, а не обов’язково для Write. git push заборонено дозволами — тому MR створюйте самі або додайте окреме правило для glab mr create (див. «Git і GitLab»).
Найкорисніше для роботи з агентами на одному екрані. Повний список — /help і довідник команд.
Slash-команди
| Команда | Призначення |
|---|---|
/agents | Друкує нагадування (інтерактивного редактора більше немає; у v2.1.197 і раніше був майстер) |
/context [all] | Кольорова сітка заповнення контексту з підказками оптимізації; показує Memory files |
/compact [інструкції] | Стиснути розмову; напр. /compact Focus on code samples and API usage |
/autocompact <токени|auto> | Поріг автокомпакції (напр. 500k); зберігається в налаштуваннях користувача (v2.1.221+) |
/clear [назва] (/reset, /new) | Нова розмова; нічого не коштує. Спершу /rename, щоб потім зробити /resume |
/rewind (/checkpoint, /undo) | Відкат коду й/або розмови, або стиснення «від цього місця»; те саме Esc Esc |
/btw <питання> | Побічне питання, що не потрапляє в історію розмови; без інструментів |
/usage (/cost, /stats) | Витрати й токени сесії, розбивка; /insights — HTML-звіт |
/memory | Файли пам’яті (CLAUDE.md тощо), перемикач auto memory |
/init | Створити CLAUDE.md або запропонувати покращення наявного |
/doctor [prompt-audit] (/checkup) | Діагностика; prompt-audit (v2.1.283+) шукає застарілі, мертві й суперечливі інструкції |
/model, /effort, /fast | Модель, рівень зусиль, швидкий режим |
/plan [опис] | Режим планування |
/goal [умова|clear] | Продовжувати, доки не виконається умова (сесійний Stop-hook) |
/loop [інтервал] [промпт] | Повторювати промпт чи команду за розкладом |
/branch [назва], /fork, /subtask | Розгалуження розмови; /fork — у нову фонову сесію (v2.1.212+); /subtask — як субагент (v2.1.212+) |
/background (/bg), /tasks (/bashes) | У фон / фонові задачі |
/batch <інструкція> | Масові правки: 5–30 субагентів у worktrees |
/resume, /rename | Повернутись до розмови; назвати сесію |
/code-review (/review), /security-review, /simplify, /diff | Рев’ю, безпека, чистка, зміни дерева |
/hooks, /permissions, /sandbox, /fewer-permission-prompts | Hooks, дозволи, ізоляція, автоформування allowlist |
/output-style [стиль], /statusline | Стиль відповідей (v2.1.269+); status line |
/config key=value | Налаштування; працює і в -p |
/skills, /workflows, /mcp, /plugin | Skills, збережені workflows, MCP-сервери, плагіни |
/import [codex|gemini|cursor] | Імпорт налаштувань з інших інструментів (v2.1.213+) |
/export | Експорт розмови |
/ultraplan видалено — використовуй режим планування.
Прапори CLI
| Прапор | Призначення |
|---|---|
--agent, --agents | Запустити сесію як конкретний агент; визначити агентів JSON-ом або файлом |
--model, --effort, --fallback-model | Модель; зусилля low…max|ultracode; резерв (напр. sonnet,haiku) |
--permission-mode | default, acceptEdits, plan, auto, dontAsk, bypassPermissions |
--allowedTools, --disallowedTools, --tools | Права на інструменти |
--add-dir | Додаткові каталоги (їх CLAUDE.md підвантажуються лише з CLAUDE_CODE_ADDITIONAL_DIRECTORIES_CLAUDE_MD=1) |
--mcp-config + --strict-mcp-config | MCP лише з вказаної конфігурації |
--settings, --setting-sources user,project,local | Додатковий файл налаштувань; які джерела читати |
-c, -r, --fork-session, --session-id, -n/--name | Продовжити, відновити, форкнути, задати ID, назвати сесію |
-w/--worktree, --tmux | Worktree (--tmux лише разом із ним) |
--bg, --from-pr | Фонова сесія (не з -p); знайти сесію за PR/MR (номер чи URL GitLab) |
--autocompact | Поріг автокомпакції (v2.1.221+) |
-p, --output-format, --json-schema, --bare | Headless — див. розділ «Headless і GitLab CI» |
--max-turns, --max-budget-usd, --no-session-persistence | Ліміти й сесія для скриптів |
--debug[=категорії], --debug-file, --verbose, --safe-mode | Діагностика; --safe-mode — для усунення проблем |
--forward-subagent-text | Текст субагентів у stream-json |
Підкоманди
| Підкоманда | Призначення |
|---|---|
claude agents | Agent view (фонові сесії) |
claude attach|logs|stop|rm|respawn <id> | Керування фоновими сесіями |
claude doctor | Діагностика встановлення |
claude setup-token | OAuth-токен для CI |
claude mcp, claude plugin | Керування MCP та плагінами |
claude ultrareview | Глибоке рев’ю |
claude purge | Очищення даних |
Гарячі клавіші
| Клавіші | Дія |
|---|---|
Esc Esc | Меню відкату (на порожньому вводі) |
Shift+Tab | Перемикання режимів дозволів |
Ctrl+B | Команду чи агента у фон (tmux: двічі) |
Ctrl+X Ctrl+K | Зупинити всіх фонових субагентів (двічі за 3 с) |
Ctrl+T | Чекліст задач Claude |
Ctrl+O | Transcript viewer |
Ctrl+G | Редагувати план чи промпт у зовнішньому редакторі |
! на початку | Режим shell-команди |
Написання власних скілів та субагентів у .claude/ — це стратегічна переорієнтація розробки.
/usage, а не очікуй готових відсотківpermissions.deny і sandbox, бо if працює як best-effort, а hook на Edit|Write не бачить змін, зроблених через Bash.claude/ у git дає всій команді однакове середовищеКрок за кроком
- Почніть з CLAUDE.md — зафіксуйте конвенції проєкту (найбільший leverage)
- Додайте 2–3 скіли —
fix-bug,new-feature,code-review - Визначте субагентів — reviewer, commit-agent як мінімум
- Налаштуйте hooks — форматування, блокування небезпечних операцій, Stop-перевірки
- Винесіть рутину в CI — рев’ю MR у GitLab CI через
claude -pз обмеженими інструментами й бюджетом - Розпаралелюйте — worktrees та фонові сесії для незалежних задач
- Розширюйте поступово — додавайте нових агентів за реальною потребою