Можливості
Копіювання наявного налаштування
Цю сторінку перекладено з англійської машинним способом. Виправлення вітаються. Редагувати цю сторінку на GitHub
Якщо ви користувалися Claude Code до ccam, ваше налаштування міститься в ~/.claude і ~/.claude.json. ccam migrate копіює його до спільної групи, тож кожен обліковий запис, який спільно використовує ці елементи через групу, починає з налаштування, яке у вас уже є. Вихідна тека лише читається, а звичайний claude і далі працює як раніше. Виконайте команду один раз після першого ccam add і знову щоразу, коли якийсь обліковий запис починає спільно використовувати сервери MCP.
Використання
ccam migrate # ~/.claude into group default, checklist on a terminal
ccam --dry-run migrate # show the plan, copy nothing
ccam migrate --settings --mcp # only these items, no checklist
ccam migrate --history --yes # conversation history only, no questions
ccam migrate ~/.claude-work --group workУ терміналі, без прапорців елементів і без --yes, ccam спершу показує контрольний список:
Copy into group default
From /home/me/.claude
? Choose what to copy (Space to toggle)
› [x] MCP servers
[x] settings.json
[x] global CLAUDE.md
[x] agents, commands, skills
[ ] conversation history
Enter show the plan · Esc cancelSpace (або x) перемикає елемент під курсором, клавіші зі стрілками або j/k переміщують курсор, Enter показує план, а Esc, q або Ctrl+C виводить Cancelled.. Елементи, для яких у джерелі нічого немає, позначено not found. Якщо зняти всі позначки, ccam виводить Nothing selected. і зупиняється.
Потім ccam виводить план і запитує підтвердження перед копіюванням:
$ ccam migrate --yes
Copy from /home/me/.claude into group default (/home/me/.local/share/ccam/groups/default):
mcp ~/.claude.json new: fs, linear
sign-ins linear → personal; skipped: work (not logged in yet)
settings settings.json new: 61 B
memory CLAUDE.md new: 11 B
extensions agents/ add 1 file the group lacks (6 B)
skills/ add 1 file the group lacks (13 B)
not found, skipped: commands/, plugins/, output-styles/, rules/
Conversation history (projects/, history.jsonl) is not included; add --history to copy it.
✓ Copied into group default: 2 MCP servers, settings.json, CLAUDE.md, agents/, skills/, MCP sign-ins for personal
MCP sign-ins were not copied to: work (not logged in yet). Sign in to those servers there with /mcp.
Accounts that share these through group default:
mcp personal, work
settings personal, work
memory personal, work
extensions personal, workГрупа доходить лише до облікових записів, які спільно використовують через неї елемент, тому підсумок перелічує їх для кожного елемента. Для облікових записів, які цього не роблять, ccam виводить команди ccam share <name> --<item> on, що вмикають спільне використання.
Параметри
| Параметр | Дія | За замовчуванням |
|---|---|---|
[folder] |
Тека Claude Code, з якої копіювати | ~/.claude |
--settings |
Копіювати settings.json |
вимкнено |
--memory |
Копіювати глобальний CLAUDE.md |
вимкнено |
--extensions |
Копіювати agents/, commands/, skills/, plugins/, output-styles/, rules/ |
вимкнено |
--mcp |
Копіювати користувацькі сервери MCP (mcpServers у .claude.json) |
вимкнено |
--history |
Копіювати історію розмов (projects/, history.jsonl) |
вимкнено |
-g, --group string |
Спільна група, до якої копіювати | default |
-y, --yes |
Копіювати без запитань; у разі конфлікту зберігається копія групи | вимкнено |
--dry-run (глобальний) |
Вивести план і зупинитися перед будь-яким запитанням чи копіюванням | вимкнено |
Без прапорця елемента в терміналі вирішує контрольний список. Поза терміналом або з --yes ccam копіює все, крім історії розмов. Історію за замовчуванням пропущено, бо projects/ може бути великою.
--group on означає default. --group off і --group local відхиляються з повідомленням --group takes a group name, not "off". ccam migrate враховує --dry-run, і контрольний список з'являється й під час пробного запуску, тож можна попередньо переглянути вибір.
Як це працює
internal/cli/migrate.go вибирає елементи, потім migrate.Build читає джерело та групу й повертає план. Нічого не записується до Plan.Apply, тобто доки ви не підтвердите.
- Пошук джерела.
checkSourceвідхиляє шлях, який відсутній, не є текою або не містить жодного відомого запису Claude Code.migrate.ClaudeJSONзнаходить.claude.json, що належить теці: усередині неї або, для~/.claudeбез власного файлу всередині,~/.claude.jsonпоруч із нею. Саме там Claude Code зберігає його, колиCLAUDE_CONFIG_DIRне задано. - Зіставлення елементів зі шляхами. Кожен шлях береться з
share.Layout, того самого списку дозволених шляхів, який використовуєccam share. Сервери MCP зчитуються з.claude.jsonчерезmcp.LocalServers, який використовує сканерprofile.TopLevelValueзамість розбору всього файлу. - Копіювати, ніколи не переміщувати. Файли потрапляють до
~/.local/share/ccam/groups/<group>/черезfsutil.AtomicWriteабоfsutil.CopyFile; сервери MCP потрапляють доmcp.jsonгрупи.
Кожен елемент зіставляє один вихідний шлях з одним шляхом групи:
Два рядки історії позначено пунктиром, бо вони копіюються лише з --history. .credentials.json і .claude.json перелічено в share.Never, і вони ніколи не потрапляють до групи: Build повертає внутрішню помилку, якщо хтось із них колись з'явиться в структурі, а обхід теки пропускає їх за назвою.
buildEntry призначає кожному шляху стан, і саме його описує кожен рядок плану:
- Missing: немає в джерелі або файл там, де очікується тека. Виводиться один раз для елемента як
not found, skipped. - Linked: вихідний шлях уже вказує на копію групи, наприклад коли джерелом є тека профілю ccam.
- Same: група вже має ідентичний вміст.
- New: у групі цього немає, тож його копіюють повністю.
- Merge: тека з обох боків.
copyMissingдодає лише файли, яких бракує групі; відмінні файли залишаються такими, як у групі, і план повідомляєgroup copies kept. Дляplugins/реєстриinstalled_plugins.jsonіknown_marketplaces.jsonоб'єднуються, а абсолютні шляхи до плагінів переписуються так, щоб вказувати на теку групи. - Conflict: файл з обох боків із різним вмістом. Ви вибираєте для кожного файлу:
keep group,use mine, а такожmerge JSONдля файлів.json(глибоке об'єднання, у якому при конфлікті значень перемагає група) абоmerge by lineдляhistory.jsonl. Сервер MCP з відмінним визначенням теж є конфліктом, з варіантамиkeep groupабоuse mine. Перший наведений варіант діє за замовчуванням, коли ви натискаєте Enter;--yesзавжди зберігає копію групи.
Сам контрольний список — це tui.MigratePicker, побудований на компоненті checklist, який використовує ccam add; migrate.Found позначає відсутні елементи за допомогою викликів lstat і списку серверів MCP.
Входи MCP
Сервери MCP, що виконують вхід через OAuth, зберігають свої токени у файлі входу, .credentials.json у mcpOAuth, а не в списку серверів. Claude Code формує ключ кожного запису як <name>| плюс перші 16 символів хешу sha256 від type, url і headers сервера. Ключ не залежить від теки, тож скопійований запис працює в іншому обліковому записі, якщо визначення сервера ідентичне. Тому buildLogins в internal/migrate/logins.go копіює лише записи серверів, які зрештою опиняються в групі з визначенням із джерела: нові, уже однакові або конфліктні, для яких ви вибрали use mine. Входи серверів плагінів (ключі, що починаються з plugin:) копіюються разом із розширеннями, якщо джерело має plugins/.
Записи потрапляють до власного .credentials.json кожного облікового запису-одержувача, записаного через fsutil.AtomicWrite з режимом 0600. До групи вони ніколи не потрапляють. Обліковий запис отримує їх, лише якщо спільно використовує mcp (або, для серверів плагінів, extensions) через цільову групу, і додаються лише ключі, яких у нього немає: записи, які в нього вже є, можливо новіші, зберігаються. Рядок плану sign-ins перелічує сервери, облікові записи-одержувачі та пропущені. ccam пропускає обліковий запис і називає його з причиною, коли він:
- зареєстрований на місці через
ccam import, бо звичайнийclaudeможе використовувати його файл входу; - запущений, бо Claude Code переписує свій файл входу (перевіряється знову безпосередньо перед записом, повідомляється як
started meanwhile); - ще не має входу;
- зберігає вхід у в'язці ключів macOS, у яку ccam не записує.
Увійдіть у сервери в пропущеному обліковому записі через /mcp. Обліковий запис, який почне спільно використовувати сервери MCP пізніше, отримає входи, коли ви знову виконаєте ccam migrate; підсумок повідомляє про це рядком Then run `ccam migrate` again to give them the MCP sign-ins too.
Безпека та граничні випадки
- Джерело лише читається. Жоден файл у ньому не переміщується, не пов'язується й не змінюється, і вхід джерела ніколи не записується, зокрема на macOS, де його можуть читати з в'язки ключів.
- Перш ніж файл групи буде замінено через
use mine, об'єднання або нові сервери MCP у наявномуmcp.json, копію групи зберігають у<group>/.ccam-backup/<time>/. Назва теки унікальна для кожного запуску, тож два запуски в ту саму секунду не перезаписують резервні копії один одного. Підсумок виводить шлях. - З
--yesкожен конфлікт зберігає копію групи, і ccam пояснює, як вибрати натомість: виконати ту саму команду без--yes. - Якщо нічого не змінилося б, ccam виводить
Nothing to copy.; якщо кожен конфлікт зберігає копію групи —Nothing to copy: the group keeps its own copies. - Якщо копіювання зазнає невдачі посередині, ccam зупиняється з повідомленням
The source folder was not changed. Group files replaced so far are saved in, після якого йде тека резервних копій. - Відсутнє джерело завершується повідомленням
no Claude Code folder at <path>. Give the folder to copy from: ccam migrate <folder>.