permissions
Що Claude може і не може робити з файлами та командами
Список операцій які Claude виконує без запиту підтвердження. Claude просто робить — не питає.
Додавши правило — Claude більше не зупинятиметься для підтвердження. Прибравши — знову питатиме або блокуватиме залежно від defaultMode.
"allow": [ "Bash(git status)", "Bash(git diff *)", "Bash(git log *)", "Bash(git add *)", "Bash(python manage.py showmigrations)", "Bash(npm run lint)", "Bash(npm run test:unit)", "Edit(/src/**/*.vue)", // тільки Vue файли без питань "Edit(/src/**/*.ts)", "WebFetch(domain:docs.djangoproject.com)" ]
Жорстка заборона. Перевіряється першою — блокує навіть якщо операція є в allow. Claude взагалі не може виконати цю дію.
Додавши правило — Claude отримає помилку і повідомить що дія заблокована. Прибравши — знову дозволено або питатиме.
"deny": [ "Read(**/.env)", "Read(**/.env.*)", // .env — ніколи "Read(~/.ssh/**)", "Read(~/.aws/**)", "Bash(sudo:*)", "Bash(su:*)", "Bash(rm -rf /)", "Bash(dd:*)", "Bash(curl:*)", "Bash(wget:*)", "Bash(ssh:*)" ]
Операції де Claude завжди питає підтвердження — навіть якщо є в allow. Показує що саме збирається зробити.
Додавши в ask — Claude зупиниться перед виконанням. Корисно для незворотних операцій: push, migrate, deploy. Дає контроль без повного блокування.
"ask": [ "Bash(git commit *)", "Bash(git push *)", "Bash(git merge *)", "Bash(python manage.py migrate)", "Bash(docker compose up *)", "Bash(docker compose down *)", "Bash(gh pr create *)" ]
Поведінка для операцій яких немає в жодному з масивів (allow/deny/ask). Режим за замовчуванням для всього нового.
Визначає скільки підтверджень побачать розробники: від повного авто-прийняття до read-only. Вибір режиму кардинально впливає на автономність Claude.
| "default" | При першому використанні інструменту питає. Потім запам'ятовує вибір на сесію. ✓ Рекомендовано для команди |
| "acceptEdits" | Авто-приймає всі редагування файлів. Bash команди — все одно питає. Добре для швидкого рефакторингу |
| "plan" | Тільки читання: може аналізувати, але не може нічого змінювати. Корисно для code review без ризику |
| "dontAsk" | Авто-відхиляє операції яких немає в allow. Тільки явно дозволене працює |
| "bypassPermissions" | ⚠ Пропускає всі перевірки. ТІЛЬКИ в ізольованих CI/CD. Ніколи на машині розробника |
Повністю забороняє режим bypassPermissions для всієї організації. Ніхто не може його увімкнути.
Спроба запустити з --dangerously-skip-permissions призведе до помилки. Захист від випадкового або зловмисного обходу прав на рівні організації.
"disableBypassPermissionsMode": "disable"
Блокує можливість юзерам і проектам додавати власні правила allow/deny/ask. Діють лише правила з managed settings.
true — розробник не зможе у свій ~/.claude/settings.json додати "allow: [Bash(rm -rf *)]". Повна централізація контролю прав через managed settings.
"allowManagedPermissionRulesOnly": true
Розширює "зону дозволів" Claude за межі поточної директорії проекту.
Без цього Claude працює тільки в директорії де запущено. Додавши шляхи — Claude отримає доступ до спільних бібліотек, конфігів чи суміжних проектів.
"additionalDirectories": [ "//home/shared/libs", // абсолютний шлях (подвійний //) "~/company/shared", // відносно home "../backend-api" // відносно поточного проекту ]
env
Змінні середовища — встановлюються автоматично в кожній сесії
Встановлює змінні середовища при кожному старті Claude Code. Аналог export у .bashrc, але тільки для Claude — не впливає на shell.
Централізовано задати модель, таймаути, вимкнути телеметрію для всіх без ручного налаштування кожної машини. Зміна тут = зміна для всієї організації.
"env": { "CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC": "1", // ↑ один прапор вимикає все нижче одразу "DISABLE_AUTOUPDATER": "1", // вимкнути автооновлення "DISABLE_TELEMETRY": "1", // вимкнути аналітику "DISABLE_ERROR_REPORTING": "1" // вимкнути звіти про помилки }👥 вибір моделей
"env": { "ANTHROPIC_MODEL": "claude-sonnet-4-6", // ↑ основна модель — override для всіх "ANTHROPIC_SMALL_FAST_MODEL": "claude-haiku-4-5-20251001", // ↑ модель для швидких внутрішніх задач "CLAUDE_CODE_SUBAGENT_MODEL": "claude-sonnet-4-6" // ↑ модель для підагентів (Task tool) }⚡ таймаути і поведінка
"env": { "BASH_DEFAULT_TIMEOUT_MS": "60000", // ↑ таймаут bash команд у мс. Default 30000 // Збільшити якщо тести довгі і обриваються "CLAUDE_AUTOCOMPACT_PCT_OVERRIDE": "85", // ↑ % заповнення контексту для авто-стиснення // Менше = частіше стискає, більше = довше тримає "MAX_THINKING_TOKENS": "10000" // ↑ ліміт токенів для extended thinking }
model / effort / fastMode
Вибір моделі, рівень обчислень, швидкий режим
Встановлює основну модель для всіх сесій організації. Перевизначає особистий вибір кожного розробника.
Всі в команді автоматично використовуватимуть цю модель. Дешевша — менше витрат на токени. Потужніша — краща якість, вищий cost.
"model": "claude-sonnet-4-6" // баланс ціна/якість "model": "claude-opus-4-6" // максимальна якість "model": "claude-haiku-4-5-20251001" // найшвидша та найдешевша
Обмежує список моделей з яких розробники можуть обирати через /model команду.
["sonnet","haiku"] — розробники не зможуть переключитись на Opus і витрачати більше токенів. [] = жодних (тільки дефолтна).
"availableModels": ["sonnet", "haiku"] // Opus виключено — контроль витрат
Керує глибиною "думання" Opus 4. Визначає скільки токенів витрачається на внутрішні міркування перед відповіддю.
low — швидко, дешево, для простих задач. high — глибокий аналіз, більше токенів. Для рутинного коду low достатньо.
"effortLevel": "low" // прості задачі — typo, rename "effortLevel": "medium" // більшість задач "effortLevel": "high" // архітектура, складний debugging
Fast Mode для Opus 4 — та ж модель, але 2.5x швидший output. Потребує увімкненого Extra Usage в Organization.
fastMode true = всі сесії у швидкому режимі. fastModePerSessionOptIn true = юзери самі вмикають /fast коли потрібно — контроль витрат.
"fastMode": false, "fastModePerSessionOptIn": true // вмикають /fast вручну
Вмикає Extended Thinking за замовчуванням для всіх сесій. Claude показує ланцюжок міркувань.
true = Claude думає вголос перед кожною відповіддю — повільніше, але значно краща якість для складних задач. false = звична поведінка.
"alwaysThinkingEnabled": true
hooks
Автоматичні дії до/після операцій. Exit code 2 блокує виконання
Виконується до того як Claude запускає інструмент. Exit code 2 = операція блокується і Claude отримує feedback чому.
Дозволяє перехоплювати операції для валідації: перевірити чи безпечна команда через LLM, відправити в аудит-лог. Без PreToolUse — Claude діє відразу.
"PreToolUse": [{ "matcher": "Bash(git push*)", "hooks": [{ "type": "prompt", // LLM оцінює через Claude "prompt": "Перевір чи $ARGUMENTS безпечний для push. Якщо ні — exit 2", "timeout": 15 }] }]
Виконується після інструменту. matcher вказує на які інструменти реагувати. Типи: command, prompt, agent, http.
Додавши — можна автоматично форматувати код після збереження, відправляти аудит-лог, запускати лінтер. Без нього — нічого автоматичного не відбувається.
"PostToolUse": [{ "matcher": "Edit|Write|MultiEdit", "hooks": [{ "type": "command", "command": "~/.claude/format.sh", "async": true, // не блокує Claude "timeout": 10, "statusMessage": "Форматую код..." }] }]🔴 HTTP аудит-лог
"PostToolUse": [{ "matcher": "Bash", "hooks": [{ "type": "http", "url": "https://audit.company.com/log", "headers": { "Authorization": "Bearer $AUDIT_TOKEN" }, "allowedEnvVars": ["AUDIT_TOKEN"], // ↑ тільки ці env змінні можна використати в headers "async": true }] }]
Спрацьовує коли Claude збирається позначити таску виконаною. Exit 2 = не закривати, відправити фідбек назад.
Ідеально для pipeline: "перед закриттям — запусти тести". Тести впали → таска не закривається. Без хука — Claude закриває одразу.
"TaskCompleted": [{ "hooks": [{ "type": "command", "command": "cd $CLAUDE_PROJECT_DIR && python manage.py test --failfast 2>&1 | tail -10", // exit 2 = тести впали = таска не закривається "timeout": 120 }] }]
Stop — після кожної відповіді. SessionStart — при запуску. SessionEnd — при завершенні сесії.
Stop + async = сповіщення Telegram/Slack після відповідей. SessionStart = логування хто і коли запустив. SessionEnd = статистика використання.
"Stop": [{ "hooks": [{ "type": "command", "command": "python3 ~/.claude/notify.py", "async": true, "statusMessage": "Відправляю сповіщення..." }] }]
Спрацьовує щоразу як завантажується CLAUDE.md файл. Тільки для аудиту — не може блокувати.
Дозволяє логувати які CLAUDE.md інструкції завантажуються — виявлення prompt injection атак через підкинуті CLAUDE.md файли.
"InstructionsLoaded": [{ "hooks": [{ "type": "command", "command": "echo $ARGUMENTS >> ~/.claude/audit.log", "async": true }] }]
disableAllHooks — вимикає ВСІ хуки включно з managed. allowManagedHooksOnly — блокує user/project хуки, залишає тільки managed.
disableAllHooks: true — для troubleshooting коли хуки ламають workflow. allowManagedHooksOnly: true — розробники не можуть додати власні хуки що можуть витікати дані.
"disableAllHooks": false // default — хуки активні "allowManagedHooksOnly": true // тільки managed хуки
sandbox
Ізоляція bash-команд від файлової системи і мережі
Вмикає ізольоване середовище для всіх bash-команд з обмеженим доступом до файлів і мережі.
true = будь-яка bash команда виконується в обмеженому просторі. Навіть "rm -rf ~" — sandbox не дасть. false = повний доступ до системи.
"sandbox": { "enabled": true }
allowWrite — куди можна писати. denyWrite — заборона запису. denyRead — заборона читання навіть через bash команди.
Додавши denyRead ~/.aws — Claude взагалі не зможе прочитати AWS credentials. allowWrite тільки ./src — запис поза src заблокований на рівні OS.
"filesystem": { "allowWrite": ["./src/**", "./tests/**", "~/.cache/**"], "denyWrite": ["./config/prod.json"], "denyRead": ["~/.ssh/**", "~/.aws/**"] }
Whitelist доменів для мережевих запитів з bash. Всі домени яких немає в списку — заблоковані.
Без allowedDomains — sandbox блокує ВСІ мережеві запити. Додавши домени — дозволяєш curl/fetch тільки до них. allowLocalBinding = dev-сервери на localhost.
"network": { "allowedDomains": ["*.github.com", "registry.npmjs.org", "pypi.org"], "allowLocalBinding": true, // localhost:8000 — ok "allowUnixSockets": ["/var/run/docker.sock"] // docker }
Команди які ніколи не запускаються через sandbox — виконуються напряму в системі.
Корисно для інструментів що несумісні з ізоляцією: git потребує ~/.gitconfig, docker потребує unix socket. Без виключення — вони ламаються в sandbox.
"excludedCommands": ["git", "docker", "ssh-add"]
MCP servers
Управління підключенням до зовнішніх сервісів через MCP протокол
Whitelist MCP серверів. Якщо визначено — тільки ці сервери можна підключити. Denylist має пріоритет.
[] = жодних MCP. undefined = всі дозволені. Список = тільки вказані. Блокує довільні MCP що розробники можуть спробувати підключити.
"allowedMcpServers": [ { "serverName": "github" }, { "serverName": "trello" }, { "serverUrl": "https://*.company.com/*" }, { "serverCommand": ["npx", "-y", "@company/mcp-server"] } ]
Blacklist — має пріоритет над allowedMcpServers. Якщо сервер в обох списках — заблокований.
Блокує потенційно небезпечні MCP сервери з доступом до файлів або інтернету що можуть витікати дані з проекту.
"deniedMcpServers": [ { "serverName": "filesystem" }, { "serverUrl": "https://untrusted-mcp.io/*" } ]
Керує серверами з .mcp.json файлу проекту — дозволяє або забороняє без зміни самого файлу репо.
Якщо .mcp.json містить сервери що не потрібні всій команді — вибірково увімкни тільки потрібні без редагування файлу.
"enabledMcpjsonServers": ["github", "trello"], "disabledMcpjsonServers": ["filesystem"], "enableAllProjectMcpServers": false // false = не авто-схвалювати всі MCP з .mcp.json
Тільки сервери з allowedMcpServers managed settings можна використовувати. Власні MCP розробника ігноруються.
true = розробники не можуть підключити власний MCP сервер. Повна централізація. false (default) = можуть якщо немає в denied.
"allowManagedMcpServersOnly": true
plugins
Розширення Claude Code через систему плагінів і маркетплейси
Увімкнені плагіни у форматі "plugin@marketplace". Плагіни додають нові інструменти і команди.
Додавши плагін — всі в організації автоматично отримають його функціональність. Прибравши — більше не завантажується.
"enabledPlugins": { "formatter@anthropic-tools": true, "linter@anthropic-tools": true }
Whitelist маркетплейсів з яких можна встановлювати плагіни. [] = жодних маркетплейсів.
Розробники зможуть встановлювати плагіни тільки з корпоративного GitHub або npm. Не можна встановити з незнайомих джерел з потенційно шкідливим кодом.
"strictKnownMarketplaces": [ { "source": "github", "repo": "acme-corp/approved-plugins" }, { "source": "npm", "package": "@acme/claude-plugins" } ]
Кастомне повідомлення що додається до попередження безпеки при встановленні плагінів.
Розробники бачитимуть твій текст при кожній спробі встановити плагін. Корисно для посилання на internal policy або контакт для схвалення.
"pluginTrustMessage": "Схвалюйте тільки з корпоративного реєстру. Питання: security@company.com"
enterprise locks
Тільки для managed settings — не перевизначаються на рівні юзера/проекту
Примусово встановлює метод авторизації для всієї організації. Ніхто не може змінити спосіб входу.
"claudeai" = через Claude Pro/Max акаунти. "console" = через Anthropic Console API key — для командного billing через організаційний акаунт.
"forceLoginMethod": "console", "forceLoginOrgUUID": "xxxx-xxxx-xxxx-xxxx" // UUID організації в Anthropic Console
Шлях до скрипта який динамічно генерує API ключ при кожному старті Claude.
Без нього — ключ статичний. З ним — інтегрується HashiCorp Vault, AWS IAM, або будь-яка ротація токенів. Ключ ніколи не зберігається на диску розробника.
"apiKeyHelper": "/opt/company/get-claude-key.sh" // Скрипт виводить ключ в stdout: echo "sk-ant-..."
Масив рядків — одне рандомно показується при старті кожної сесії. Власний "message of the day" для команди.
Розробники бачитимуть оголошення щоразу при запуску. Корисно для нагадувань про security policy, нові інструменти, планові роботи.
"companyAnnouncements": [ "🔒 Нагадування: секрети — тільки у Vault!", "📋 Новий MCP для Jira — деталі в Confluence", "🚀 Оновлено managed settings v2.4 — changelog" ]
Скільки днів зберігати локальні транскрипти сесій (~/.claude/projects/). Після — автоматично видаляються.
Менше — швидше видалення, менше місця, краща приватність. 0 = очищення вимкнено. Важливо для compliance вимог (GDPR, SOC2).
"cleanupPeriodDays": 7 // тиждень — для compliance "cleanupPeriodDays": 0 // ніколи не видаляти "cleanupPeriodDays": 30 // default
Скрипт що виводить OpenTelemetry headers. Прокидає трейсинг Claude Code в корпоративну observability систему.
Всі API запити Claude Code матимуть trace headers. Можна бачити запити Claude в Datadog/Grafana/Jaeger поряд з іншими сервісами компанії.
"otelHeadersHelper": "/opt/company/otel-headers.sh"
загальні
Мова, оновлення, пам'ять, стиль відповідей
Встановлює мову відповідей Claude для всієї організації незалежно від мови запиту.
"ukrainian" = Claude відповідатиме українською навіть якщо запит англійською. Корисно для стандартизації мови в команді.
"language": "ukrainian"
Claude автоматично зберігає корисний контекст до .claude/memory/ — архітектурні рішення, патерни, уподобання команди.
true = Claude "навчається" від сесії до сесії. false = кожна сесія ізольована, нічого не пишеться. Для compliance (GDPR) — false.
"autoMemoryEnabled": true // зберігає контекст між сесіями "autoMemoryEnabled": false // кожна сесія з нуля
З якого каналу отримувати автооновлення Claude Code CLI.
"stable" = версія ~тиждень після релізу, перевірена на регресії. "latest" = завжди найновіше. Для команд краще "stable" — менше сюрпризів.
"autoUpdatesChannel": "stable" // ✓ рекомендовано для команд
Задає стиль відповідей Claude — наскільки детально пояснювати кроки.
"Explanatory" = детальні пояснення кожного кроку. "Learning" = пояснює чому, а не тільки що. "default" = стандарт. Корисно для onboarding junior розробників.
"outputStyle": "default"
Де зберігати план-файли що Claude Code створює в режимі планування.
Default ~/.claude/plans. Перемістивши в ./plans/ — плани в репозиторії, доступні всій команді через git і code review.
"plansDirectory": "./plans" // в репо поряд з CLAUDE.md
git / attribution
Підпис Claude в комітах і PR
Кастомізує текст атрибуції що Claude додає до git комітів як co-author trailer та в описи Pull Request.
"" = Claude не додає co-author підпис. Кастомний текст = замінює стандартний. Корисно якщо internal policy не дозволяє AI-атрибуцію в комітах.
"attribution": { "commit": "", "pr": "" } // або кастомний текст: "attribution": { "commit": "Co-authored-by: AI Dev <ai@company.com>" }
Вмикає/вимикає вбудовані інструкції Anthropic для git workflow в system prompt Claude.
false = Claude не використовує стандартні git інструкції. Корисно якщо є власний CLAUDE.md з кастомними git конвенціями — уникнення конфлікту інструкцій.
"includeGitInstructions": false // є свій CLAUDE.md з git правилами
UI / spinner
Кастомізація інтерфейсу терміналу
Кастомний рядок статусу внизу терміналу. Скрипт читає JSON зі stdin (контекст, cost, git) і виводить рядок.
Без цього — стандартний статус Anthropic. З скриптом — показуй що завгодно: git branch, витрачені токени, час сесії, кастомні метрики.
"statusLine": { "type": "command", "command": "~/.claude/statusline.sh", "padding": 1 }
Кастомізує анімований спінер: текст дій, підказки, тривалість ходу, анімації. Чисто косметично.
spinnerTipsEnabled false = без підказок. showTurnDuration false = не показувати "відповів за 12с". prefersReducedMotion true = вимкнути анімацію (accessibility).
"spinnerVerbs": { "mode": "replace", "verbs": ["Думаю...", "Пишу..."] }, "spinnerTipsEnabled": false, "showTurnDuration": true, "prefersReducedMotion": false
Власний скрипт для автокомпліту файлів при наборі "@filename". Замінює стандартний пошук.
Дозволяє інтегрувати fzf, fd, або кастомний індекс. Без цього — стандартний glob пошук по директорії.
"fileSuggestion": { "type": "command", "command": "fd --type f | fzf --filter" }
повний приклад
Готовий managed-settings.json для Django/Vue команди
{
"$schema": "https://json.schemastore.org/claude-code-settings.json",
// Модель і рівень thinking
"model": "claude-sonnet-4-6",
"availableModels": ["sonnet", "opus"],
"effortLevel": "high",
"fastModePerSessionOptIn": true,
// Мова відповідей
"language": "ukrainian",
// Дозволи
"permissions": {
"defaultMode": "default",
"disableBypassPermissionsMode": "disable",
"allow": [
"Bash(git status)", "Bash(git diff *)", "Bash(git log *)",
"Bash(git add *)",
"Bash(python manage.py showmigrations)",
"Bash(npm run lint)", "Bash(npm run test:unit)",
"Bash(docker compose ps)", "Bash(docker compose logs *)"
],
"ask": [
"Bash(git commit *)", "Bash(git push *)",
"Bash(python manage.py migrate)",
"Bash(docker compose up *)", "Bash(docker compose down *)"
],
"deny": [
"Read(**/.env)", "Read(**/.env.*)",
"Read(~/.ssh/**)", "Read(~/.aws/**)",
"Bash(sudo:*)", "Bash(su:*)",
"Bash(rm -rf /)", "Bash(dd:*)"
]
},
// Змінні середовища
"env": {
"DISABLE_TELEMETRY": "1",
"DISABLE_AUTOUPDATER": "1",
"BASH_DEFAULT_TIMEOUT_MS": "60000"
},
// Хуки
"hooks": {
"PostToolUse": [{
"matcher": "Edit|Write|MultiEdit",
"hooks": [{ "type": "command", "command": "~/.claude/format.sh", "async": true }]
}],
"TaskCompleted": [{
"hooks": [{ "type": "command", "command": "cd $CLAUDE_PROJECT_DIR && python manage.py test --failfast 2>&1 | tail -5", "timeout": 120 }]
}],
"Stop": [{
"hooks": [{ "type": "command", "command": "python3 ~/.claude/notify-telegram.py", "async": true }]
}]
},
// Enterprise
"forceLoginMethod": "console",
"autoUpdatesChannel": "stable",
"cleanupPeriodDays": 14,
"allowManagedPermissionRulesOnly": true,
"allowManagedHooksOnly": true,
"companyAnnouncements": ["🔒 Секрети — тільки у Vault, не в .env!"],
// Git
"attribution": { "commit": "", "pr": "" },
"includeGitInstructions": false
}