Кейсовое исследование продукта · 30 октября 2026

Обзор двух папок с помощью Claude Code --add-dir

Используйте Claude Code --add-dir, чтобы сравнить контракт клиента с контрактом API-партнёра, проверить внесённое несоответствие и убедиться, что исходные файлы остались без изменений.

Время чтения
6 мин
Проверено
30 октября 2026
Два бумажных папки, соединенные узким мостиком, с увеличительным стеклом, сравнивающим синие и охровые формы доказательств
Объедините две стороны контракта в один обзор, не перемещая их файлы.
Итог

Добавьте только папку-партнёр, необходимую обзору, затем проверьте находку на обоих файлах перед разрешением исправления.

Клиент может выглядеть правильно сам по себе и при этом читать поле, которое API никогда не возвращает. В этом упражнении клиент и контракт располагаются в отдельных папках, папка контракта добавляется в сессию Claude Code, и запрашивается обзор с доказательствами в виде файлов. Вы завершите с выводом, который можно проверить вручную, и записью о том, изменились ли исходные файлы.

Источники проверены 30 октября 2026 года. Мы проверили официальную документацию и справку установленного Claude Code 2.1.304, а также локально запустили настройку фикстуры и проверку хэшей. Мы не проводили аутентифицированный обзор Claude. Ожидаемые выводы ниже — это составленный ключ ответов, а не результат модели.

Вам нужны Bash, Python 3 и установленный, аутентифицированный Claude Code CLI. первый урок проекта-сессии охватывает начало работы. Для первой попытки используйте ниже вымышленные файлы вместо приватных репозиториев.

Подготовьте две стороны сломанного контракта

Запустите это в Bash. Держите терминал открытым, чтобы lab_root оставался доступным:

lab_root=$(mktemp -d /tmp/claude-contract-lab.XXXXXX)
mkdir -p "$lab_root/client "$lab_root/api "$lab_root/evidence
кот > "$lab_root/client/display.js <<'JS'
export function displayName(profile) {
  return profile.name.toUpperCase();
}
JS
кот > "$lab_root/api/profile-contract.json <<'JSON'
{
  "эндпоинт": "/profile",
  "required": ["display_name"],
  "example": {"display_name": "River"}
}
JSON
кот > "$lab_root/evidence/snapshot.py <<'PY'
import hashlib
import json
from pathlib import Path

root = Path(__file__).resolve().parent.parent
пути = ["client/display.js", "api/profile-contract.json"]
print(json.dumps({)
    path: hashlib.sha256((root / path).read_bytes()).hexdigest()
    для path в paths
}, indent=2, sort_keys=True))
PY
python3 "$lab_root/evidence/snapshot.py > "$lab_root/evidence/before.json"
клод --version > "$lab_root/evidence/cli-version.txt
cd "$lab_root/client
printf 'Папка лаборатории: %s\n' "$lab_root"

JSON — это небольшой удобочитаемый тестовый пример, а не полноценная схема OpenAPI. В нем указано, что пример ответа содержит display_name. Клиент читает name. Для проверки этого несоответствия сервер, зависимости или шаг установки не требуются.

Две папки представляют отдельные репозитории. Они намеренно не имеют истории Git или конфигурации проекта, чтобы упражнение оставалось сосредоточенным на обзоре. Сохраняйте evidence папку рядом с ними для собственных заметок.

Начните с конкретного каталога-соседа

Из client каталог, запустите:

клод --permission-mode plan --add-dir ../api

С Справочник CLI documents --add-dir как принимающий существующие каталоги для дополнительного доступа к файлам. Здесь ../api разрешения относятся к каталогу, из которого вы запускаете Claude. Файлы не копируются и репозитории не объединяются. Проверьте каталог запуска и отображаемый режим разрешений перед отправкой задачи.

Дополнительные каталоги следуют правилам разрешений файлов сеанса; сам флаг не делает их доступными только для чтения. Режим plan — это настройка обзора для этого упражнения. Держите сеанс в этом режиме и отклоняйте запрос на выполнение реализации. Не добавляйте весь ваш домашний каталог, чтобы разрешить отсутствующий путь. См. рекомендации Anthropic по разрешениям и рабочему каталогу.

Вставьте этот запрос:

Проверьте display.js в соответствии с ../api/profile-contract.json.
Прочитайте оба файла и сообщите точные пути, которые вы проверили.
Определите любое несоответствие имен полей и укажите соответствующие номера строк.
Объясните, что подразумевает предоставленный пример для displayName.
Предложите минимальную корректировку и один тест, но не внедряйте и не запускайте его.
Верните обзор в чате. Не редактируйте файлы, не устанавливайте пакеты, не получайте доступ к
сети и не выходите из режима плана. Если какой-либо файл недоступен, сообщите
об этом ограничении вместо того, чтобы делать вывод о его содержимом.

Следите за чтением файлов. Ответ, который называет оба пути, не читая оба, является неполным доказательством. Сохраните окончательный ответ вручную в evidence/review.txt после выхода из сессии; используйте полный путь лаборатории, указанный ранее. Не просите агента записывать этот файл доказательства в рамках проверки только для чтения.

Оцените результат перед принятием исправления

Используйте этот ключ ответов для оценки сохраненного ответа:

ПроверитьДоказательства, которые должен содержать ответ
Поле клиентаclient/display.js, строка 2, читает profile.name.
Поле контрактаapi/profile-contract.json, строки 3–4, требует и демонстрирует display_name.
ПоследствияДля приведенного примера, profile.name неопределено, поэтому вызов его toUpperCase() вызовет ошибку.
Минимальное предложениеЧитать profile.display_name если предоставленный контракт является авторитетным.
Предлагаемый тестПередайте пример объекта и ожидайте RIVER после исправления.
Лимит доказательствВ этом обзоре не проводилось тестирование во время выполнения и не выполнялся запрос к реальному конечному пункту.

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

Для реальной пары репозиториев добавьте вопрос, на который этот фикстур не может ответить: какая версия контракта развернута? Файл в соседнем чекауте может быть устаревшим. Запишите версии и предоставьте фактический результат теста перед тем, как делать вывод о релизе.

Проверьте, что исходные файлы остались без изменений

После закрытия Claude вернитесь в ту же оболочку и выполните:

python3 "$lab_root/evidence/snapshot.py > "$lab_root/evidence/after.json
cmp "$lab_root/evidence/before.json" "$lab_root/evidence/after.json
find "$lab_root/client "$lab_root/api -type ф -print

cmp должен завершаться с кодом ноль без вывода, когда два исходных файла имеют одинаковые байты. Список файлов позволяет также проверить добавления: ожидайте display.js и profile-contract.json, и исследуйте всё остальное. Эти проверки охватывают практические папки, а не каждое действие на машине.

Запишите версию CLI, команду запуска, проверенные пути, пропуски в ответах и результат хэша вместе с обзором. Если исходный файл изменился, сохраните доказательства и исследуйте различия. Создайте новую лабораторию, повторно запустив блок настройки, а не удаляя или сбрасывая не связанный проект.

Понимайте, какие инструкции передаются с доступом

Доступ к файлам и автоматическая загрузка инструкций — это отдельные элементы управления. Anthropic’s памяти говорит о дополнительной директории CLAUDE.md по умолчанию не загружаются. Чтобы выбрать участие в проверенном проекте-сопернике, его задокументированная форма в Bash выглядит следующим образом:

CLAUDE_CODE_ADDITIONAL_DIRECTORIES_CLAUDE_MD=1 \
  клод --permission-mode plan --add-dir ../api

Это необязательно для последующего упражнения; фикстура не имеет CLAUDE.md. Перед включением ознакомьтесь с инструкциями реального проекта-соперника. Текст инструкции направляет модель и не гарантирует правильность.

Не предполагается, что добавление каталога активирует всю его конфигурацию. Справочник о разрешениях документирует исключения, включая навыки, команды и подагентов из папок, добавленных с флагом. Это еще одна причина для проверки реального каталога перед предоставлением доступа.

Восстановление после неполного обзора

СимптомСледующее действие
Добавленный каталог не существуетВыйти и проверить pwd и ls ../api; начните снова с папки лаборатории client .
Один файл не был прочитанСохраните обзор как неполный. Проверьте ошибку инструмента и активные разрешения перед повторной попыткой.
Агент предлагает исправление немедленноДержите сеанс в режиме плана и сначала запросите два указанных имени полей.
Кажется, инструкции для родственных элементов отсутствуютПроверьте, включали ли вы намеренно загрузку памяти из дополнительного каталога.
Ревью утверждает, что тест пройденПопросите команду и зафиксированный вывод; это упражнение требует только предложения.
Хэши исходников различаютсяПроверьте измененный файл перед выполнением дальнейшей работы; не рассматривайте ревью как доказательство неизменности исходника.

Завершите, выйдя из учебной сессии. Для последующей несвязанной задачи начните новую сессию в предназначенной директории без добавленного пути; случайно не продолжайте эту лабораторную работу. Сохраняйте временную папку, пока не проверите свои доказательства.

Официальные заметки источника

Проверено 30 октября 2026 г.:

Запустите это в работу

Различайте доступ к дополнительным файлам и загрузку инструкций, а также права на редактирование.

Попробовать

Ознакомьтесь с вымышленным клиентом и контрактом API в двух временных папках.

Докажите, что это сработало

Совпадите ответ с ключом ответов и убедитесь, что оба исходных хэша остались неизменными.

Держите в поле зрения

  • Предоставьте одноразовый доступ к определенной смежной директории.
  • Найдите намеренно несоответствующее поле, используя данные из обоих файлов.
  • Проверьте хэши исходников перед утверждением любой реализации.
Изучите рабочий процесс: настройте первую сессию проекта Claude Code