Возможности
Проверка и исправление
Эта страница переведена с английского машинным способом. Исправления приветствуются. Редактировать эту страницу на GitHub
ccam doctor проверяет вашу установку ccam: исполняемый файл Claude Code, папку, вход и ссылки общего доступа каждого аккаунта, общие MCP-серверы, эндпоинт использования и ваши короткие команды. ccam doctor --fix исправляет то, что можно исправить без потери данных, и предварительно перемещает каждый заменяемый файл в папку резервных копий. Запускайте его, когда ccam <name> останавливается из-за проблемы со ссылкой общего доступа, после того как вы восстановили файлы вручную, или после обновления Claude Code.
Использование
ccam doctor # check everything, change nothing
ccam doctor --fix # check, then repair what is safe to repair
ccam --dry-run doctor --fix # report only: what --fix would repairКаждый результат занимает одну строку с отметкой: ✓ всё в порядке, · информация, ! предупреждение, ✗ ошибка. Результаты по аккаунтам начинаются с имени аккаунта.
$ ccam doctor
✓ Claude Code 2.1.302 (Claude Code) (/home/me/.local/bin/claude)
! personal: folder permissions are 755 (should be 0700)
! personal: .credentials.json permissions are 644 (should be 0600)
✓ personal: login valid (me@example.com)
✗ personal: /home/me/.local/share/ccam/profiles/personal/settings.json: set to shared but is a real file, not a link
· personal: unknown entries (Claude Code layout may have changed): newthing
! work: not logged in → `ccam login work`
✓ work: share links OK
! missing shortcuts in /home/me/.local/bin: ccp
`ccam doctor --fix` repairs what it can.С --fix каждый исправленный результат заканчивается на → fixed:
$ ccam doctor --fix
✓ Claude Code 2.1.302 (Claude Code) (/home/me/.local/bin/claude)
! personal: folder permissions are 755 (should be 0700) → fixed
! personal: .credentials.json permissions are 644 (should be 0600) → fixed
✓ personal: login valid (me@example.com)
✗ personal: /home/me/.local/share/ccam/profiles/personal/settings.json: set to shared but is a real file, not a link → fixed
· personal: unknown entries (Claude Code layout may have changed): newthing
! work: not logged in → `ccam login work`
✓ work: share links OK
! missing shortcuts in /home/me/.local/bin: ccp → fixedПараметры
| Параметр | Действие | По умолчанию |
|---|---|---|
--fix |
Исправить то, что безопасно исправить (для изменённых файлов создаются резервные копии) | выкл. |
--dry-run (глобальный) |
Выполнить все проверки, но ничего не исправлять, даже с --fix |
выкл. |
ccam doctor не принимает аргументов. Он учитывает --dry-run: ccam --dry-run doctor --fix выводит те же результаты, что и ccam doctor, и ничего не меняет.
Код возврата равен 1, если остался хотя бы один неисправленный результат ✗, и 0 в остальных случаях. Предупреждения и информация никогда не приводят к ошибке. Если запуск без --fix завершился ошибкой, ccam в конце выводит пустую строку и `ccam doctor --fix` repairs what it can.. Если конфигурацию не удаётся загрузить, команда также завершается с 1 и ошибкой ccam:.
Как это работает
internal/cli/doctor.go загружает ~/.config/ccam/config.toml и вызывает doctor.Run в internal/doctor/doctor.go, который выполняет проверки в фиксированном порядке и возвращает результаты. --fix передаётся как Options.Fix, а в пробном запуске устанавливается в false.
Средний блок выполняется один раз для каждого аккаунта. Проверки и то, что делает --fix для каждой из них:
- Версия Claude Code (
checkClaude). Находит исполняемый файлclaudeтак же, как это делает запуск, и выполняетclaude --version. Если версия не начинается с2.1.302, то есть с версии, для которой проверялась структура папок ccam (doctor.LayoutVersion), добавляется· ccam was verified against the folder layout of Claude Code 2.1.302. Any 'unknown entries' below may mean the layout changed. Отсутствующий исполняемый файл или ошибка--versionсчитаются ошибкой. Не исправляется. - Данные входа в окружении (
checkAuthEnv). Предупреждает, если заданаCLAUDE_CODE_OAUTH_TOKEN,ANTHROPIC_API_KEYилиANTHROPIC_AUTH_TOKEN: каждый аккаунт, запущенный из этой оболочки, наследует её, и Claude Code предпочитает её собственному входу аккаунта. Не исправляется; удалите переменную сами. - Папка (
checkProfile). Отсутствующая папка аккаунта считается ошибкой и завершает проверки этого аккаунта. Права, в которых установлены биты группы или остальных, дают предупреждение;--fixвыполняетchmod 0700. - Файл входа (
checkCredentials)..credentials.jsonпроверяется черезlstat. Символическая ссылка считается ошибкой, потому что у каждого аккаунта должен быть собственный токен, и не исправляется. Права, отличные от0600, дают предупреждение;--fixвыполняетchmod 0600. Затем читается вход (в macOS сначала из Связки ключей). Отсутствие входа даёт предупреждение со ссылкой наccam login <name>. Истёкший токен обновления даёт ошибкуlogin expired; истёкший токен доступа считается только информацией, так как Claude Code обновит его при следующем запуске. Ничего из этого не исправляется. - Ссылки общего доступа (
share.Check). Сравнивает каждый путь вshare.Layoutс настройками общего доступа аккаунта, используя толькоlstatиreadlink. Сообщает о четырёх видах проблем: отсутствующая ссылка, ссылка, указывающая в другое место, настоящий файл там, где должна быть ссылка, и оставшаяся ссылка для элемента, который теперь локальный. Отсутствующая ссылка даёт предупреждение, остальные случаи считаются ошибками. - Неизвестные записи (
checkUnknownEntries). Перечисляет имена верхнего уровня в папке аккаунта, которых ccam не знает (share.Known), как подсказку, что структура Claude Code изменилась. Только информация. - Пути плагинов (
checkPlugins). Реестры плагинов (installed_plugins.json,known_marketplaces.json) хранят абсолютные пути. Вplugins/каждой группы пути, проходящие через папку одного аккаунта, ломаются, когда этот аккаунт удаляют или переименовывают.--fixпереписывает их на папку группы черезprofile.RewritePluginPaths, атомарно записывая файл реестра. - MCP-серверы (
checkMCP). Загружаетmcp.jsonкаждой группы один раз. Файл, который не удаётся прочитать, считается ошибкой; сервер, не прошедшийmcp.Validate, даёт предупреждение. Не исправляется. - Формат ответа об использовании (
checkUsageFormat). Запрашивает эндпоинт использования без кэша и с обычным ограничением в 3 секунды для одного аккаунта за другим, пока какой-нибудь не ответит. Если ответ больше не разбирается, выводится предупреждение, чтоccam usageпереходит на кэш строки состояния. Это единственная проверка, которая обращается к сети. - Короткие команды (
checkShims). Только если у аккаунта есть короткая команда. Отсутствующие ссылки в~/.local/binдают предупреждение;--fixвызываетshim.Install, который только создаёт отсутствующие ссылки и никогда не трогает другие файлы. Папка bin, которой нет вPATH, даёт предупреждение и не исправляется.
Исправление ссылок общего доступа
При запуске отсутствующая ссылка создаётся на месте, но всё, что может привести к потере данных, останавливает запуск и отправляет сюда:
$ ccam work
ccam: stopped because of share link problems:
/home/me/.local/share/ccam/profiles/work/CLAUDE.md: set to shared but is a real file, not a link
Repair them with `ccam doctor --fix`, then run againПри любой проблеме со ссылкой общего доступа --fix вызывает share.Build, передавая настройки общего доступа аккаунта и как текущее, и как целевое состояние, а затем Plan.Apply. Build заново выводит каждый шаг из того, что находится на диске, и строит тот же план, что и ccam share, поэтому исправление следует тем же правилам, что и включение общего доступа.
Здесь settings.json является настоящим файлом. Поскольку в группе уже есть другой settings.json, для конфликта выбирается вариант по умолчанию, KeepGroup, и копия группы остаётся. Файл аккаунта перемещается в .ccam-backup/<time>/settings.json внутри папки аккаунта, а os.Symlink связывает путь с группой. Другие случаи:
- Если у группы ещё нет копии, файл аккаунта перемещается в группу и становится её первым содержимым.
- Для папки файлы, которых нет в группе, перемещаются в группу; остальное попадает в резервную копию.
- Для
history.jsonlпо умолчанию используетсяmerge by line: строки группы, затем ваши новые строки. Прежняя копия группы сохраняется в.ccam-backup/<time>/group/. - Ссылка на другую группу заменяется. Ссылка на папку вне ccam попадает в резервную копию, а её содержимое становится начальным содержимым группы, если группа пуста.
- Оставшаяся ссылка для элемента, который теперь локальный, удаляется, и аккаунт получает копию содержимого группы.
Кроме удаления ссылок, каждый шаг перемещает данные в группу или в папку резервных копий. Ничего не удаляется.
Безопасность и особые случаи
- Обычный
ccam doctorникогда ничего не меняет. В скриптах для надёжности используйте--dry-runвместе с--fix. doctor --fixне проверяет, запущен ли аккаунт. Завершите Claude Code для аккаунта, прежде чем исправлять его ссылки общего доступа, потому что сессия продолжает записывать в эти файлы.- Если исправить общий доступ не удалось, ccam сообщает
could not repair share links: <error>для этого аккаунта и пропускает для него проверку неизвестных записей. Остальные аккаунты всё равно проверяются. - Если
ccam shareпрерывается на середине, он сначала сохраняет целевые настройки и предлагает завершить работу командойccam doctor --fix. - О символической ссылке на
.credentials.json, истёкшем входе и данных входа в окружении сообщается, но они никогда не изменяются. - Перезапись реестров плагинов выполняется атомарно, но не копируется в
.ccam-backup/.