Claude Code — settings.json

managed-settings · Повний довідник з поясненнями

schema 2026
🔒

permissions

Що Claude може і не може робити з файлами та командами

permissions.allowarray
🔵 що робить

Список операцій які Claude виконує без запиту підтвердження. Claude просто робить — не питає.

🟢 що зміниться

Додавши правило — Claude більше не зупинятиметься для підтвердження. Прибравши — знову питатиме або блокуватиме залежно від defaultMode.

👥 команда Django/Vue
"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)"
]
Синтаксис: Tool · Tool(pattern) · Tool(glob*) · mcp__server__tool
permissions.denyarray
🔵 що робить

Жорстка заборона. Перевіряється першою — блокує навіть якщо операція є в 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:*)"
]
⚠ deny > allow. Якщо є в обох — завжди блокується.
permissions.askarray
🔵 що робить

Операції де 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 *)"
]
permissions.defaultModeenum
🔵 що робить

Поведінка для операцій яких немає в жодному з масивів (allow/deny/ask). Режим за замовчуванням для всього нового.

🟢 що зміниться

Визначає скільки підтверджень побачать розробники: від повного авто-прийняття до read-only. Вибір режиму кардинально впливає на автономність Claude.

"default" При першому використанні інструменту питає. Потім запам'ятовує вибір на сесію. ✓ Рекомендовано для команди
"acceptEdits" Авто-приймає всі редагування файлів. Bash команди — все одно питає. Добре для швидкого рефакторингу
"plan" Тільки читання: може аналізувати, але не може нічого змінювати. Корисно для code review без ризику
"dontAsk" Авто-відхиляє операції яких немає в allow. Тільки явно дозволене працює
"bypassPermissions" ⚠ Пропускає всі перевірки. ТІЛЬКИ в ізольованих CI/CD. Ніколи на машині розробника
permissions.disableBypassPermissionsModeenummanaged only
🔵 що робить

Повністю забороняє режим bypassPermissions для всієї організації. Ніхто не може його увімкнути.

🟢 що зміниться

Спроба запустити з --dangerously-skip-permissions призведе до помилки. Захист від випадкового або зловмисного обходу прав на рівні організації.

"disableBypassPermissionsMode": "disable"
✓ Рекомендовано для всіх enterprise налаштувань
allowManagedPermissionRulesOnlybooleanmanaged only
🔵 що робить

Блокує можливість юзерам і проектам додавати власні правила allow/deny/ask. Діють лише правила з managed settings.

🟢 що зміниться

true — розробник не зможе у свій ~/.claude/settings.json додати "allow: [Bash(rm -rf *)]". Повна централізація контролю прав через managed settings.

"allowManagedPermissionRulesOnly": true
permissions.additionalDirectoriesarray
🔵 що робить

Розширює "зону дозволів" Claude за межі поточної директорії проекту.

🟢 що зміниться

Без цього Claude працює тільки в директорії де запущено. Додавши шляхи — Claude отримає доступ до спільних бібліотек, конфігів чи суміжних проектів.

"additionalDirectories": [
  "//home/shared/libs",  // абсолютний шлях (подвійний //)
  "~/company/shared",    // відносно home
  "../backend-api"        // відносно поточного проекту
]
🌐

env

Змінні середовища — встановлюються автоматично в кожній сесії

envobject
🔵 що робить

Встановлює змінні середовища при кожному старті 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

Вибір моделі, рівень обчислень, швидкий режим

modelstring
🔵 що робить

Встановлює основну модель для всіх сесій організації. Перевизначає особистий вибір кожного розробника.

🟢 що зміниться

Всі в команді автоматично використовуватимуть цю модель. Дешевша — менше витрат на токени. Потужніша — краща якість, вищий cost.

"model": "claude-sonnet-4-6"          // баланс ціна/якість
"model": "claude-opus-4-6"            // максимальна якість
"model": "claude-haiku-4-5-20251001"  // найшвидша та найдешевша
availableModelsarray
🔵 що робить

Обмежує список моделей з яких розробники можуть обирати через /model команду.

🟢 що зміниться

["sonnet","haiku"] — розробники не зможуть переключитись на Opus і витрачати більше токенів. [] = жодних (тільки дефолтна).

"availableModels": ["sonnet", "haiku"]
// Opus виключено — контроль витрат
effortLevelenum
🔵 що робить

Керує глибиною "думання" Opus 4. Визначає скільки токенів витрачається на внутрішні міркування перед відповіддю.

🟢 що зміниться

low — швидко, дешево, для простих задач. high — глибокий аналіз, більше токенів. Для рутинного коду low достатньо.

"effortLevel": "low"    // прості задачі — typo, rename
"effortLevel": "medium" // більшість задач
"effortLevel": "high"   // архітектура, складний debugging
fastMode / fastModePerSessionOptInboolean
🔵 що робить

Fast Mode для Opus 4 — та ж модель, але 2.5x швидший output. Потребує увімкненого Extra Usage в Organization.

🟢 що зміниться

fastMode true = всі сесії у швидкому режимі. fastModePerSessionOptIn true = юзери самі вмикають /fast коли потрібно — контроль витрат.

"fastMode": false,
"fastModePerSessionOptIn": true  // вмикають /fast вручну
⚠ Потребує Extra Usage в Organization Settings → Usage
alwaysThinkingEnabledboolean
🔵 що робить

Вмикає Extended Thinking за замовчуванням для всіх сесій. Claude показує ланцюжок міркувань.

🟢 що зміниться

true = Claude думає вголос перед кожною відповіддю — повільніше, але значно краща якість для складних задач. false = звична поведінка.

"alwaysThinkingEnabled": true
🪝

hooks

Автоматичні дії до/після операцій. Exit code 2 блокує виконання

hooks.PreToolUsearray
🔵 що робить

Виконується до того як Claude запускає інструмент. Exit code 2 = операція блокується і Claude отримує feedback чому.

🟢 що зміниться

Дозволяє перехоплювати операції для валідації: перевірити чи безпечна команда через LLM, відправити в аудит-лог. Без PreToolUse — Claude діє відразу.

🔴 LLM-валідація перед push
"PreToolUse": [{
  "matcher": "Bash(git push*)",
  "hooks": [{
    "type": "prompt",          // LLM оцінює через Claude
    "prompt": "Перевір чи $ARGUMENTS безпечний для push. Якщо ні — exit 2",
    "timeout": 15
  }]
}]
hooks.PostToolUsearray
🔵 що робить

Виконується після інструменту. 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
  }]
}]
hooks.TaskCompletedarray
🔵 що робить

Спрацьовує коли 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
  }]
}]
hooks.Stop / SessionStart / SessionEndarray
🔵 що робить

Stop — після кожної відповіді. SessionStart — при запуску. SessionEnd — при завершенні сесії.

🟢 що зміниться

Stop + async = сповіщення Telegram/Slack після відповідей. SessionStart = логування хто і коли запустив. SessionEnd = статистика використання.

💜 Telegram нотифікація
"Stop": [{
  "hooks": [{
    "type": "command",
    "command": "python3 ~/.claude/notify.py",
    "async": true,
    "statusMessage": "Відправляю сповіщення..."
  }]
}]
hooks.InstructionsLoadedarray
🔵 що робить

Спрацьовує щоразу як завантажується CLAUDE.md файл. Тільки для аудиту — не може блокувати.

🟢 що зміниться

Дозволяє логувати які CLAUDE.md інструкції завантажуються — виявлення prompt injection атак через підкинуті CLAUDE.md файли.

"InstructionsLoaded": [{
  "hooks": [{ "type": "command", "command": "echo $ARGUMENTS >> ~/.claude/audit.log", "async": true }]
}]
disableAllHooks / allowManagedHooksOnlybooleanmanaged only
🔵 що робить

disableAllHooks — вимикає ВСІ хуки включно з managed. allowManagedHooksOnly — блокує user/project хуки, залишає тільки managed.

🟢 що зміниться

disableAllHooks: true — для troubleshooting коли хуки ламають workflow. allowManagedHooksOnly: true — розробники не можуть додати власні хуки що можуть витікати дані.

"disableAllHooks": false       // default — хуки активні
"allowManagedHooksOnly": true  // тільки managed хуки
📦

sandbox

Ізоляція bash-команд від файлової системи і мережі

sandbox.enabledboolean
🔵 що робить

Вмикає ізольоване середовище для всіх bash-команд з обмеженим доступом до файлів і мережі.

🟢 що зміниться

true = будь-яка bash команда виконується в обмеженому просторі. Навіть "rm -rf ~" — sandbox не дасть. false = повний доступ до системи.

"sandbox": { "enabled": true }
sandbox.filesystemobject
🔵 що робить

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/**"]
}
sandbox.networkobject
🔵 що робить

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.excludedCommandsarray
🔵 що робить

Команди які ніколи не запускаються через sandbox — виконуються напряму в системі.

🟢 що зміниться

Корисно для інструментів що несумісні з ізоляцією: git потребує ~/.gitconfig, docker потребує unix socket. Без виключення — вони ламаються в sandbox.

"excludedCommands": ["git", "docker", "ssh-add"]
🔌

MCP servers

Управління підключенням до зовнішніх сервісів через MCP протокол

allowedMcpServersarraymanaged only
🔵 що робить

Whitelist MCP серверів. Якщо визначено — тільки ці сервери можна підключити. Denylist має пріоритет.

🟢 що зміниться

[] = жодних MCP. undefined = всі дозволені. Список = тільки вказані. Блокує довільні MCP що розробники можуть спробувати підключити.

"allowedMcpServers": [
  { "serverName": "github" },
  { "serverName": "trello" },
  { "serverUrl": "https://*.company.com/*" },
  { "serverCommand": ["npx", "-y", "@company/mcp-server"] }
]
deniedMcpServersarraymanaged only
🔵 що робить

Blacklist — має пріоритет над allowedMcpServers. Якщо сервер в обох списках — заблокований.

🟢 що зміниться

Блокує потенційно небезпечні MCP сервери з доступом до файлів або інтернету що можуть витікати дані з проекту.

"deniedMcpServers": [
  { "serverName": "filesystem" },
  { "serverUrl": "https://untrusted-mcp.io/*" }
]
enabledMcpjsonServers / disabledMcpjsonServersarray
🔵 що робить

Керує серверами з .mcp.json файлу проекту — дозволяє або забороняє без зміни самого файлу репо.

🟢 що зміниться

Якщо .mcp.json містить сервери що не потрібні всій команді — вибірково увімкни тільки потрібні без редагування файлу.

"enabledMcpjsonServers": ["github", "trello"],
"disabledMcpjsonServers": ["filesystem"],
"enableAllProjectMcpServers": false
// false = не авто-схвалювати всі MCP з .mcp.json
allowManagedMcpServersOnlybooleanmanaged only
🔵 що робить

Тільки сервери з allowedMcpServers managed settings можна використовувати. Власні MCP розробника ігноруються.

🟢 що зміниться

true = розробники не можуть підключити власний MCP сервер. Повна централізація. false (default) = можуть якщо немає в denied.

"allowManagedMcpServersOnly": true
🔧

plugins

Розширення Claude Code через систему плагінів і маркетплейси

enabledPluginsobject
🔵 що робить

Увімкнені плагіни у форматі "plugin@marketplace". Плагіни додають нові інструменти і команди.

🟢 що зміниться

Додавши плагін — всі в організації автоматично отримають його функціональність. Прибравши — більше не завантажується.

"enabledPlugins": {
  "formatter@anthropic-tools": true,
  "linter@anthropic-tools": true
}
strictKnownMarketplacesarraymanaged only
🔵 що робить

Whitelist маркетплейсів з яких можна встановлювати плагіни. [] = жодних маркетплейсів.

🟢 що зміниться

Розробники зможуть встановлювати плагіни тільки з корпоративного GitHub або npm. Не можна встановити з незнайомих джерел з потенційно шкідливим кодом.

"strictKnownMarketplaces": [
  { "source": "github", "repo": "acme-corp/approved-plugins" },
  { "source": "npm", "package": "@acme/claude-plugins" }
]
pluginTrustMessagestringmanaged only
🔵 що робить

Кастомне повідомлення що додається до попередження безпеки при встановленні плагінів.

🟢 що зміниться

Розробники бачитимуть твій текст при кожній спробі встановити плагін. Корисно для посилання на internal policy або контакт для схвалення.

"pluginTrustMessage": "Схвалюйте тільки з корпоративного реєстру. Питання: security@company.com"
🏢

enterprise locks

Тільки для managed settings — не перевизначаються на рівні юзера/проекту

forceLoginMethod / forceLoginOrgUUIDenum / stringmanaged only
🔵 що робить

Примусово встановлює метод авторизації для всієї організації. Ніхто не може змінити спосіб входу.

🟢 що зміниться

"claudeai" = через Claude Pro/Max акаунти. "console" = через Anthropic Console API key — для командного billing через організаційний акаунт.

"forceLoginMethod": "console",
"forceLoginOrgUUID": "xxxx-xxxx-xxxx-xxxx"
// UUID організації в Anthropic Console
apiKeyHelperstringmanaged only
🔵 що робить

Шлях до скрипта який динамічно генерує API ключ при кожному старті Claude.

🟢 що зміниться

Без нього — ключ статичний. З ним — інтегрується HashiCorp Vault, AWS IAM, або будь-яка ротація токенів. Ключ ніколи не зберігається на диску розробника.

"apiKeyHelper": "/opt/company/get-claude-key.sh"
// Скрипт виводить ключ в stdout: echo "sk-ant-..."
companyAnnouncementsarraymanaged only
🔵 що робить

Масив рядків — одне рандомно показується при старті кожної сесії. Власний "message of the day" для команди.

🟢 що зміниться

Розробники бачитимуть оголошення щоразу при запуску. Корисно для нагадувань про security policy, нові інструменти, планові роботи.

"companyAnnouncements": [
  "🔒 Нагадування: секрети — тільки у Vault!",
  "📋 Новий MCP для Jira — деталі в Confluence",
  "🚀 Оновлено managed settings v2.4 — changelog"
]
cleanupPeriodDaysinteger
🔵 що робить

Скільки днів зберігати локальні транскрипти сесій (~/.claude/projects/). Після — автоматично видаляються.

🟢 що зміниться

Менше — швидше видалення, менше місця, краща приватність. 0 = очищення вимкнено. Важливо для compliance вимог (GDPR, SOC2).

"cleanupPeriodDays": 7   // тиждень — для compliance
"cleanupPeriodDays": 0   // ніколи не видаляти
"cleanupPeriodDays": 30  // default
otelHeadersHelperstring
🔵 що робить

Скрипт що виводить OpenTelemetry headers. Прокидає трейсинг Claude Code в корпоративну observability систему.

🟢 що зміниться

Всі API запити Claude Code матимуть trace headers. Можна бачити запити Claude в Datadog/Grafana/Jaeger поряд з іншими сервісами компанії.

"otelHeadersHelper": "/opt/company/otel-headers.sh"

загальні

Мова, оновлення, пам'ять, стиль відповідей

languagestring
🔵 що робить

Встановлює мову відповідей Claude для всієї організації незалежно від мови запиту.

🟢 що зміниться

"ukrainian" = Claude відповідатиме українською навіть якщо запит англійською. Корисно для стандартизації мови в команді.

"language": "ukrainian"
autoMemoryEnabledboolean
🔵 що робить

Claude автоматично зберігає корисний контекст до .claude/memory/ — архітектурні рішення, патерни, уподобання команди.

🟢 що зміниться

true = Claude "навчається" від сесії до сесії. false = кожна сесія ізольована, нічого не пишеться. Для compliance (GDPR) — false.

"autoMemoryEnabled": true   // зберігає контекст між сесіями
"autoMemoryEnabled": false  // кожна сесія з нуля
autoUpdatesChannelenum
🔵 що робить

З якого каналу отримувати автооновлення Claude Code CLI.

🟢 що зміниться

"stable" = версія ~тиждень після релізу, перевірена на регресії. "latest" = завжди найновіше. Для команд краще "stable" — менше сюрпризів.

"autoUpdatesChannel": "stable"  // ✓ рекомендовано для команд
outputStylestring
🔵 що робить

Задає стиль відповідей Claude — наскільки детально пояснювати кроки.

🟢 що зміниться

"Explanatory" = детальні пояснення кожного кроку. "Learning" = пояснює чому, а не тільки що. "default" = стандарт. Корисно для onboarding junior розробників.

"outputStyle": "default"
plansDirectorystring
🔵 що робить

Де зберігати план-файли що Claude Code створює в режимі планування.

🟢 що зміниться

Default ~/.claude/plans. Перемістивши в ./plans/ — плани в репозиторії, доступні всій команді через git і code review.

"plansDirectory": "./plans" // в репо поряд з CLAUDE.md
📝

git / attribution

Підпис Claude в комітах і PR

attributionobject
🔵 що робить

Кастомізує текст атрибуції що 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>" }
includeGitInstructionsboolean
🔵 що робить

Вмикає/вимикає вбудовані інструкції Anthropic для git workflow в system prompt Claude.

🟢 що зміниться

false = Claude не використовує стандартні git інструкції. Корисно якщо є власний CLAUDE.md з кастомними git конвенціями — уникнення конфлікту інструкцій.

"includeGitInstructions": false // є свій CLAUDE.md з git правилами

UI / spinner

Кастомізація інтерфейсу терміналу

statusLineobject
🔵 що робить

Кастомний рядок статусу внизу терміналу. Скрипт читає JSON зі stdin (контекст, cost, git) і виводить рядок.

🟢 що зміниться

Без цього — стандартний статус Anthropic. З скриптом — показуй що завгодно: git branch, витрачені токени, час сесії, кастомні метрики.

"statusLine": { "type": "command", "command": "~/.claude/statusline.sh", "padding": 1 }
spinnerVerbs / spinnerTipsEnabled / showTurnDuration / prefersReducedMotionmixed
🔵 що робить

Кастомізує анімований спінер: текст дій, підказки, тривалість ходу, анімації. Чисто косметично.

🟢 що зміниться

spinnerTipsEnabled false = без підказок. showTurnDuration false = не показувати "відповів за 12с". prefersReducedMotion true = вимкнути анімацію (accessibility).

"spinnerVerbs": { "mode": "replace", "verbs": ["Думаю...", "Пишу..."] },
"spinnerTipsEnabled": false,
"showTurnDuration": true,
"prefersReducedMotion": false
fileSuggestionobject
🔵 що робить

Власний скрипт для автокомпліту файлів при наборі "@filename". Замінює стандартний пошук.

🟢 що зміниться

Дозволяє інтегрувати fzf, fd, або кастомний індекс. Без цього — стандартний glob пошук по директорії.

"fileSuggestion": { "type": "command", "command": "fd --type f | fzf --filter" }
📄

повний приклад

Готовий managed-settings.json для Django/Vue команди

managed-settings.json — логістична компанія
{
  "$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
}