12k
All articles

Что находится в вашей папке .claude

Что лежит в папке .claude: CLAUDE.md, settings.json, rules, skills, agents, MCP-серверы, приоритеты и что коммитить или игнорировать.

OpenReplay Team
OpenReplay Team
Что находится в вашей папке .claude

Ваша папка .claude содержит два разных типа сущностей: инструкции, которые загружаются в контекст Claude в начале каждой сессии (CLAUDE.md, rules/, skills/, agents/), и конфигурацию, которая определяет поведение самого инструмента (settings.json, хуки, MCP-серверы). Оба типа разделены между директорией проекта, которую вы коммитите, и директорией ~/.claude в домашней папке, которую вы не коммитите никогда.

Кроме того, папка имеет свойство разрастаться сама по себе. Подтверждение запроса на разрешение создаёт файл, который вы не создавали, /init добавляет CLAUDE.md, а в pull request может незаметно попасть .claude/settings.local.json, набитый allow-правилами одного разработчика.

Это построчная экскурсия по файлам: что делает каждый путь, какой файл побеждает, когда два из них задают одно и то же, и вердикт по каждому файлу — место ли ему в репозитории.

Ключевые выводы

  • Claude Code разрешает конфигурацию тремя разными способами: значения settings.json подчиняются пятиуровневому порядку приоритета, где побеждает наивысшая область видимости; файлы CLAUDE.md наслаиваются от корня файловой системы вниз, а не заменяют друг друга; правила разрешений объединяются, так что каждое правило из каждой области видимости остаётся в силе.
  • Пять областей видимости настроек, от наивысшего приоритета: managed settings, аргументы командной строки, .claude/settings.local.json, .claude/settings.json и ~/.claude/settings.json.
  • Коммитьте CLAUDE.md, .claude/settings.json, .claude/rules/, .claude/skills/, .claude/agents/ и .mcp.json; держите .claude/settings.local.json, CLAUDE.local.md и всё содержимое ~/.claude вне репозитория.
  • Claude Code добавляет .claude/settings.local.json в ваши глобальные git excludes при первой записи в этот файл в репозитории, который его ещё не игнорирует, поэтому созданная вручную копия по-прежнему нуждается в собственной записи в .gitignore.

Где находятся две локации .claude?

Claude Code читает два корня .claude. Один располагается в проекте, путешествует вместе с репозиторием и предназначен для всей команды; другой, ~/.claude в домашней папке, принадлежит только вам и следует за вами во все проекты на этой машине. Это разделение — самое полезное, что стоит усвоить. Справочник по директориям Claude Code проводит ту же границу: файлы проекта коммитьте, файлы домашней папки оставьте на месте. В Windows домашний корень находится по пути %USERPROFILE%\.claude, а указание CLAUDE_CONFIG_DIR на другое расположение перемещает всё содержимое.

my-project/
├── CLAUDE.md                    # instructions loaded every session
├── CLAUDE.local.md              # private preferences, gitignored
├── .mcp.json                    # team-shared MCP servers
└── .claude/
    ├── settings.json            # permissions, hooks, env, model defaults
    ├── settings.local.json      # your personal overrides, gitignored
    ├── rules/*.md               # topic-scoped instructions, optionally path-gated
    ├── skills/<name>/SKILL.md   # reusable prompts invoked with /name
    ├── commands/*.md            # single-file prompts, same mechanism as skills
    ├── agents/*.md              # subagent definitions with their own prompt and tools
    ├── workflows/*.js           # workflow scripts saved from /workflows
    ├── output-styles/*.md       # instruction sets that adjust how Claude works
    └── agent-memory/<name>/     # persistent memory for subagents
~/.claude.json                   # app state, OAuth, personal MCP servers
~/.claude/
├── CLAUDE.md                    # your instructions, across every project
├── settings.json                # personal defaults
├── rules/*.md                   # user-level rules, applied to every project
├── keybindings.json             # custom keyboard shortcuts
├── themes/*.json                # custom colour themes
├── plugins/                     # cloned marketplaces and per-plugin data
├── projects/<project>/memory/   # auto memory Claude writes itself
└── .credentials.json            # login credentials

На практике почти вся правка приходится на два файла: CLAUDE.md и settings.json. Всё остальное опционально.

CLAUDE.md, импорты и правила с привязкой к путям

CLAUDE.md — это файл, который Claude Code загружает в контекст в начале каждой сессии, и читается он из четырёх мест: managed policy, ~/.claude/CLAUDE.md, проект (./CLAUDE.md или ./.claude/CLAUDE.md) и ./CLAUDE.local.md для личных заметок. Документация по памяти ясно говорит, что эти файлы наслаиваются, а не конкурируют: каждый найденный Claude Code файл добавляется в контекст последовательно, начиная с корня файловой системы и спускаясь к вашей рабочей директории, а внутри одной директории CLAUDE.local.md идёт после CLAUDE.md. Файл в родительской директории загружается при запуске; файл в поддиректории ждёт, пока Claude не откроет файл в этом месте.

Синтаксис @path/to/file подтягивает другой файл, путь разрешается относительно импортирующего файла, с глубиной до четырёх переходов. Разбиение длинного файла на импорты наводит порядок, но не возвращает контекст, поскольку всё импортируемое тоже разворачивается при запуске. Парсер импортов игнорирует всё внутри обратных кавычек или блока кода — именно так можно упомянуть путь в инструкциях, не подтягивая сам файл.

Важны два ограничения. Цифра в 200 строк — это ориентир, а не потолок: сверх неё файл съедает больше контекста, и Claude следует ему менее надёжно. Реальный предел — 4 MiB. Claude Code загружает CLAUDE.md такого размера целиком и пропускает файл, который его превышает.

.claude/rules/*.md — модульная альтернатива. Файлы правил обнаруживаются рекурсивно, по одной теме на файл. Оставьте правило без frontmatter — и оно загрузится при запуске, наравне с .claude/CLAUDE.md; добавьте поле paths — и оно останется вне контекста, пока Claude не обратится к файлу, подходящему под glob-шаблон.

---
paths:
  - "src/components/**/*.tsx"
---

Prefer function components with explicitly typed props.
Co-locate the test file beside the component it covers.

Противоречащие друг другу инструкции в разных файлах разрешаются произвольно, так что запоминать здесь нечего. Выполните /context или /memory, чтобы увидеть, что загрузилось на самом деле, а если инструкция действительно должна выполняться в фиксированной точке, оформите её как хук PreToolUse. Хук запускается как shell-команда в фиксированной точке сессии — независимо от того, выбрал бы это Claude или нет.

Какое место занимает AGENTS.md?

Репозиторию, в котором уже есть AGENTS.md для других кодовых агентов, ничего дополнительного не нужно: Claude Code читает эти файлы сам — как отдельно, так и рядом с CLAUDE.md. Если в рабочей директории и её родителях нет CLAUDE.md, загружается именно AGENTS.md. Набор загружаемых файлов задаётся параметром «Project instructions» в /config, и этот параметр появляется только в сессиях, способных получить feature-флаги Anthropic, поэтому на Bedrock, Vertex и Foundry его нет.

Для сессии, которая не может загрузить AGENTS.md, или когда вы хотите сохранить существующий CLAUDE.md, добавьте рядом с AGENTS.md файл CLAUDE.md, который его импортирует:

@AGENTS.md

## Claude Code

Run `pnpm typecheck` before proposing any change under `packages/api/`.

Символьная ссылка тоже сработает, если специфичный для Claude контент не нужен: ln -s AGENTS.md CLAUDE.md. Windows не создаст её без прав администратора или режима разработчика, так что там надёжнее вариант с импортом. Напрямую прочитанный AGENTS.md не отображается в разделе Memory files в /context или /memory. Вместо этого сессия выводит строку «AGENTS.md loaded».

Не путайте AGENTS.md с CLAUDE.local.md. Последний — личный, исключённый из git спутник CLAUDE.md, и к межинструментальной совместимости отношения не имеет.

В чём разница между skills/, commands/ и agents/?

Команды и навыки работают на одном и том же механизме и оба вызываются через /name. Справочник по директориям рекомендует для новой работы использовать skills/<name>/SKILL.md, поскольку директория навыка может содержать вспомогательные файлы рядом с инструкциями, тогда как команда — это один markdown-файл. Существующая директория commands/*.md продолжает работать. О том, как структурировать навык для фронтенд-задач, читайте в нашем руководстве по навыкам Claude Code для фронтенд-воркфлоу.

agents/*.md содержит определения субагентов, у каждого из которых свой промпт и список инструментов. Обе директории существуют как на уровне проекта, так и в ~/.claude, и обе подхватываются по своему расположению, а не по регистрации в файле настроек.

Приоритет конфигурации Claude Code: settings.json против settings.local.json

settings.json — это общий файл проекта, а settings.local.json — ваш личный per-project override, и когда оба задают один и тот же ключ, побеждает локальный файл. Справочник по настройкам приводит пять уровней приоритета, от наивысшего: managed settings, аргументы командной строки, .claude/settings.local.json, .claude/settings.json и ~/.claude/settings.json. JSON, передаваемый через --settings, встраивается сразу под managed settings и выше всех трёх ваших собственных файлов.

Что сбивает людей с толку — так это то, что не каждый ключ следует этому порядку. Ключи-списки, такие как permissions.allow, permissions.ask и permissions.deny, объединяются между областями видимости, а не заменяют друг друга, так что deny-правило в общем settings.json коллеги продолжает действовать, даже если ваш локальный файл разрешает тот же инструмент. Четыре ключа, связанных с моделями, — исключение из этого слияния. fallbackModel представляет собой упорядоченную цепочку, поэтому файл с наивысшим приоритетом, который его задаёт, поставляет значение целиком. modelPicker работает так же, за исключением того, что он читается только из managed settings, --settings и пользовательских настроек, а в проектных и локальных файлах ключ игнорируется (Claude Code v2.1.242 и новее). Managed-список availableModels применяется как есть, а ваши собственные добавления отбрасываются, хотя между пользовательским, проектным и локальным файлами эти массивы всё же объединяются. modelSettings разрешается отдельно для каждой модели.

Общий файл:

{
  "$schema": "https://json.schemastore.org/claude-code-settings.json",
  "cleanupPeriodDays": 30,
  "permissions": {
    "deny": ["Read(./.env)"]
  }
}

Локальный файл:

{
  "cleanupPeriodDays": 7,
  "permissions": {
    "allow": ["Bash(npm run lint)"]
  }
}

В итоговой сессии используется cleanupPeriodDays: 7, потому что локальный файл имеет приоритет над общим для скалярного ключа. При этом оба правила разрешений остаются активными: npm run lint выполняется без запроса, а чтение .env по-прежнему заблокировано. Файлы настроек — это строгий JSON: добавьте комментарий // или запятую в конце, и файл не распарсится. Строка $schema даёт автодополнение в редакторе, а поскольку опубликованная схема иногда отстаёт от свежих релизов CLI, предупреждение о ключе, задокументированном на прошлой неделе, говорит больше о схеме, чем о вашем файле. Выполните /status, чтобы убедиться, какие файлы настроек загрузились.

Где живут хуки и MCP-серверы?

Хуки — не отдельные файлы. Они находятся под ключом hooks в settings.json, на той области видимости, где вы хотите их применить, и правка вступает в силу без перезапуска сессии. MCP-серверы разделены по аудитории: .mcp.json лежит в корне проекта, поставляется вместе с репозиторием и представляет собой командный список. Личные MCP-серверы живут в ~/.claude.json, который также хранит состояние приложения, данные OAuth и серверы локальной области видимости с ключом по пути проекта, — так что относитесь к нему как к состоянию машины, а не как к конфигурационному файлу, который вы правите вручную.

Что коммитить, а что добавлять в gitignore

ПутьЧто этоВердикт
CLAUDE.mdИнструкции, загружаемые каждую сессиюКоммитить
.claude/settings.jsonКомандные разрешения, хуки, envКоммитить
.claude/rules/*.mdТематические инструкции, опционально привязанные к путямКоммитить
.claude/skills/, .claude/commands/Промпты, вызываемые через /nameКоммитить
.claude/agents/*.mdОпределения субагентовКоммитить
.mcp.jsonКомандные MCP-серверыКоммитить
.claude/settings.local.jsonВаши личные переопределенияИгнорировать
CLAUDE.local.mdВаши личные предпочтенияИгнорировать
~/.claude/*, ~/.claude.jsonЛичное и машинное состояниеНикогда не в репозитории

При первой записи этого локального файла в репозитории, который его ещё не игнорирует, Claude Code дописывает **/.claude/settings.local.json в ваши глобальные git excludes. Такая запись происходит, когда вы отвечаете «Yes, and don’t ask again» на запрос разрешения. Если вы создали файл вручную, за вас ничего добавлено не будет, поэтому пропишите запись явно:

# Claude Code personal config
# settings.local.json is usually auto-excluded already; this covers hand-created files
.claude/settings.local.json
CLAUDE.local.md

Общие настройки — это ещё и то, что видят облачные сессии, поскольку они работают со свежим клоном. Пользовательские и локальные файлы остаются на вашей машине и до них никогда не доходят.

Всё в ~/.claude хранится в открытом виде

Транскрипты сессий, вывод инструментов, вставленный текст и лог промптов history.jsonl — всё это попадает на диск в виде простого текста, и единственное, что их защищает, — права доступа к файлам. Если во время сессии команда напечатала токен, этот токен лежит в транскрипте. .credentials.json хранит ваши учётные данные для входа и переживает очистку по сроку хранения, которая в остальном удаляет подходящие файлы по истечении cleanupPeriodDays: 30 дней по умолчанию, минимум 1, а 0 отклоняется как недопустимое значение.

Папка меньше, чем кажется, стоит её разложить по полочкам: инструкции конкатенируются, настройки подчиняются приоритету, разрешения объединяются, а домашняя директория никогда не попадает в систему контроля версий. Откройте собственную .claude/ и сверьте её с деревом выше, удалите файлы, которые никто не создавал намеренно, и добавьте двухстрочный блок в .gitignore, пока это за вас не сделал следующий pull request.

FAQ

Нужно ли подтверждать MCP-серверы, пришедшие в закоммиченном .mcp.json коллеги?

Да. В интерактивной сессии Claude Code спрашивает разрешение перед использованием любого сервера проектной области видимости, объявленного в .mcp.json, и каждый разработчик отвечает за себя, а не один раз за весь репозиторий. Выполните claude mcp reset-project-choices, чтобы сбросить эти ответы. Неинтерактивные контексты не могут показать запрос: запуски claude -p, сессии Agent SDK и облачные сессии загружают серверы проектной области видимости без вопросов, поэтому используйте disabledMcpjsonServers, чтобы заблокировать сервер во всех режимах разрешений.

Как переопределить настройку Claude Code для одной сессии, не редактируя файл?

Передайте --settings с путём к JSON-файлу или встроенной JSON-строкой. Этот источник располагается ниже managed settings и выше ваших пользовательских, проектных и локальных файлов. У некоторых ключей также есть собственный флаг или переменная окружения, и кто из них побеждает, решается для каждого ключа отдельно: --model и /model превосходят ANTHROPIC_MODEL, тогда как CLAUDE_CODE_EFFORT_LEVEL превосходит /effort.

Вступает ли правка settings.json в силу немедленно посреди сессии?

Некоторые ключи перезагружаются на месте, а некоторые читаются один раз при старте сессии, поэтому правка может выглядеть проигнорированной до следующего запуска. Разрешения и хуки перезагружаются без перезапуска, тогда как model, effortLevel и modelSettings читаются один раз при старте. Изменение outputStyle применяется со следующего вашего сообщения начиная с v2.1.251, хотя в терминале файл стиля, созданный или отредактированный посреди сессии, подхватывается только после перезапуска. Если после перезапуска значение всё ещё выглядит неверным, выполните /status и проверьте приоритет: тот же ключ может задавать файл более высокой области видимости, например .claude/settings.local.json.

Что я потеряю, если удалю папку projects в ~/.claude?

Удаление projects/ убирает сохранённые транскрипты и может лишить вас возможности возобновлять прошлые сессии, хотя на новые сессии это не влияет. Команда claude project purge — точечная альтернатива: она удаляет транскрипты, автоматическую память, задачи и записи истории файлов для одного проекта, соответствующие строки промптов в history.jsonl и запись этого проекта в ~/.claude.json. Каталоги shell-snapshots/ и backups/ остаются на месте. Передайте -i, чтобы пройти по плану удаления пошагово.

Understand every bug

Uncover frustrations, understand bugs and fix slowdowns like never before with OpenReplay — self-hosted, with full data ownership.

Star on GitHub

We use cookies to improve your experience. By using our site, you accept cookies.