# Спільне використання між обліковими записами

> Як ccam share пов'язує налаштування, CLAUDE.md, розширення та історію з текою групи, з планом, резервними копіями й вибором у разі конфліктів, і як off копіює їх назад.

Source: https://ccam.dev/uk/features/share/ · Updated 2026-10-19

Кожен обліковий запис має власну теку, але більша частина її вмісту не мусить бути окремою. `ccam share` вмикає або вимикає спільне використання для одного облікового запису й одного елемента за раз: файл або теку облікового запису переміщують до теки групи й замінюють символьним посиланням, тож кожен обліковий запис у групі читає й записує ту саму копію. Використовуйте цю команду після `ccam add`, щоб змінити, що обліковий запис використовує спільно, або щоб виділити кілька облікових записів в окрему групу.

## Використання

```sh
ccam share work                       # show what work shares, and with which group
ccam share work --history on          # share conversation history with the default group
ccam share side --history team        # share it with the group team instead
ccam share work --settings off        # give work its own copy of settings.json again
ccam share work --memory off --fresh  # stop sharing CLAUDE.md and start with no file
ccam share work --settings on --yes --prefer merge   # no questions; merge JSON on conflicts
ccam --dry-run share work --history on               # print the plan, change nothing
```

Без параметрів елементів `ccam share` виводить поточний стан:

```console
$ ccam share work
Sharing for work
  MCP servers                        shared (group default)  --mcp
  settings.json                      shared (group default)  --settings
  global CLAUDE.md                   shared (group default)  --memory
  agents, commands, skills, plugins  shared (group default)  --extensions
  conversation history               local                   --history
```

З параметрами ccam виводить план, запитує про кожен файл, що відрізняється від копії групи, і запитує `Proceed? [y/N]`, перш ніж щось змінити. Новий обліковий запис спільно використовує все, крім історії розмов; сторінка [Спільні сервери MCP, налаштування та історія](https://ccam.dev/uk/docs/sharing.md) описує кожен елемент з погляду користувача.

## Параметри

| Параметр | Дія | За замовчуванням |
| --- | --- | --- |
| `--mcp <on\|off\|group>` | Сервери MCP | без змін |
| `--settings <on\|off\|group>` | `settings.json` | без змін |
| `--memory <on\|off\|group>` | глобальний `CLAUDE.md` | без змін |
| `--extensions <on\|off\|group>` | `agents/`, `commands/`, `skills/`, `plugins/`, `output-styles/`, `rules/` | без змін |
| `--history <on\|off\|group>` | `projects/` і `history.jsonl` | без змін |
| `--fresh` | під час вимкнення спільного використання почати з порожнього стану замість копіювання вмісту групи | вимкнено |
| `--prefer <group\|mine\|merge>` | як вирішувати конфлікти | запитувати; з `--yes` — варіант за замовчуванням для кожного елемента |
| `-y`, `--yes` | виконати без запитань; конфлікти вирішуються згідно з `--prefer` | вимкнено |
| `-h`, `--help` | довідка для `share` | |
| `--dry-run` (глобальний) | враховується: запитує про конфлікти, виводить план, нічого не змінює | вимкнено |

Значення `on` означає групу `default`, `off` означає локальний стан (без спільного використання), а будь-яке інше значення є назвою групи. Назви груп стають назвами тек у `~/.local/share/ccam/groups/`, тож `ccam share side --history ../x` завершується помилкою `invalid group name: "../x"`. Обліковий запис указують за назвою або за номером, і змінюються лише ті елементи, які ви назвали.

## Як це працює

Задіяні файли:

- `~/.config/ccam/config.toml`: таблиця `[profile.share]` кожного облікового запису, по одному значенню на елемент.
- `~/.local/share/ccam/profiles/<name>/`: `CLAUDE_CONFIG_DIR` облікового запису.
- `~/.local/share/ccam/groups/<group>/`: спільні копії.

1. `internal/cli/share.go` читає конфігурацію, застосовує кожне значення `--<item>` до копії налаштувань облікового запису через `config.Share.Set` і відмовляє, якщо обліковий запис запущено.
2. `share.Build` порівнює поточні налаштування з цільовими й перелічує кроки. Він лише читає диск: `os.Lstat` і `os.Readlink` для кожного шляху в `share.Layout`. План — це список операцій: перемістити в порожнє місце групи (adopt), перемістити файли, яких бракує групі (merge dir), записати вирішений конфлікт до групи, створити резервну копію, видалити посилання, створити посилання, скопіювати назад, переписати шляхи до плагінів і об'єднати реєстр плагінів.
3. Конфлікти вирішуються через запитання або через `--prefer`.
4. `Plan.Describe` виводить план, і ccam запитує підтвердження.
5. Цільові налаштування записуються в `config.toml` до того, як щось переміщується. Якщо `Plan.Apply` зупиняється посередині, `ccam doctor --fix` і повторний запуск будують свій план до збереженої цілі й завершують зміну.
6. `Plan.Apply` виконує кроки по черзі. Кожен крок переміщує дані до групи або до теки резервних копій; нічого не видаляється.

`share.Layout` — це список дозволених шляхів, які охоплює кожен елемент. Усе, чого в ньому немає, ніколи не може потрапити до групи. `share.Never` називає `.credentials.json` і `.claude.json`, і `Build` зупиняється з внутрішньою помилкою, якщо хтось із них колись з'явиться в структурі. Елемент `mcp` не має шляхів: список серверів зберігається всередині `.claude.json`, тож [спільне використання MCP](https://ccam.dev/uk/features/mcp.md) натомість працює через `mcp.json` групи, а `--mcp` лише змінює налаштування.

Ось що відбувається з однією текою, `projects/`, коли `side` вмикає історію, а група вже має вміст:

Якщо в групі за цим шляхом ще нічого немає, обліковий запис першим спільно використовує його, і його теку переміщують туди як є, без резервної копії. Інакше `mergeDir` переміщує до групи кожен файл, якого їй бракує, а файли, що є з обох боків, залишаються в теці облікового запису, тож версія групи зберігається. Потім тека облікового запису переходить до `.ccam-backup/<time>/` усередині теки облікового запису, а `os.Symlink` ставить на її місце посилання. Файли розмов мають назви за ідентифікатором сеансу, тож історії з кількох облікових записів об'єднуються без конфліктів.

Для переміщення використовується `rename(2)`, а між різними файловими системами — копіювання й видалення. Відносне посилання всередині переміщеного дерева, що вказувало за його межі, переписується як абсолютне (`fsutil.PortableLink`), тож воно й далі розв'язується з нового місця. Реєстри `plugins/` (`installed_plugins.json`, `known_marketplaces.json`) зберігають абсолютні шляхи через теку облікового запису; ccam спрямовує їх на теку групи, а коли група вже має реєстр, об'єднує з ним записи облікового запису.

Вимкнення елемента змінює посилання у зворотний бік:

ccam видаляє посилання, лише якщо воно вказує всередину теки груп, а потім копіює поточний вміст групи до облікового запису через `CopyTree`. З `--fresh` копіювання пропускається, і обліковий запис починає без нічого за цим шляхом. Група зберігає свій вміст для інших облікових записів. Перенесення елемента з однієї групи до іншої видаляє посилання й пов'язує його з новою групою, залишаючи стару групу як є; план повідомляє про це рядком `Note:`.

Окремий файл, що є з обох боків із різним вмістом, є конфліктом:

`share.NewConflict` перелічує варіанти, що підходять для файлу. `history.jsonl` пропонує `merge by line`, `keep group` і `use mine`, з об'єднанням на першому місці. Інші файли `.json` пропонують `keep group`, `use mine` і `merge JSON`. Усе інше пропонує `keep group` і `use mine`. Перший варіант діє за замовчуванням:

```console
history.jsonl differs from the group's copy.
  mine:  ~/.local/share/ccam/profiles/side/history.jsonl
  group: ~/.local/share/ccam/groups/default/history.jsonl
  1) merge by line
  2) keep group
  3) use mine
Choice [1]:
```

`merge JSON` (`MergeJSONBytes`) рекурсивно об'єднує об'єкти, з'єднує масиви без дублікатів і зберігає значення групи, коли обидві сторони задають той самий ключ по-різному, тож інші облікові записи не бачать змін у поведінці. `merge by line` зберігає рядки групи, а потім додає ваші рядки, яких у ній немає. Кожен варіант, крім `keep group`, спершу зберігає копію групи до `.ccam-backup/<time>/group/` у теці облікового запису, а потім записує результат через `fsutil.AtomicWrite`. Ваш власний файл завжди потрапляє до резервної копії.

`--prefer group`, `mine` або `merge` вирішує кожен конфлікт без запитань; `merge` означає `merge JSON` або `merge by line`, залежно від того, що пропонує файл, а файл, який не пропонує жодного з них, отримує варіант за замовчуванням. Сам лише `--yes` бере варіант за замовчуванням для кожного файлу.

Під час кожного запуску `share.Check` порівнює кожен шлях у структурі з налаштуванням, використовуючи лише `lstat` і `readlink`, тож перевірка досить дешева для шляху запуску. Відсутнє посилання створюється одразу, бо втрачати нічого. Справжній файл там, де має бути посилання, посилання не туди або застаріле посилання зупиняє запуск:

```console
ccam: stopped because of share link problems:
  ~/.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
```

`ccam doctor --fix` запускає `share.Build` зі збереженими налаштуваннями з обох боків, що виводить кожен крок із того, що є на диску, зберігає вміст групи в разі конфліктів і створює резервну копію всього, що замінює.

## Безпека та граничні випадки

- **Запущені облікові записи.** ccam не змінює спільне використання, поки Claude Code працює від імені облікового запису (`account work is running; quit it first, then change its sharing`), бо сеанс і далі записує у файли, які переміщуються, і рядки, які він тим часом допише, було б утрачено. `--dry-run` усе одно виводить план.
- **Резервні копії.** Кожен план отримує власну теку `.ccam-backup/<time>/` у теці облікового запису, з числовим суфіксом, коли два плани починаються в ту саму секунду. ccam ніколи їх не видаляє.
- **Часткові збої.** Якщо крок зазнає невдачі, ccam виводить помилку й місце, де лежать оригінали, і радить завершити через `ccam doctor --fix`. Ціль уже збережено, тож виправлення продовжується до неї.
- **Ваші власні посилання.** Якщо шлях уже є посиланням, яке ви створили, наприклад на репозиторій dotfiles, а група порожня, ccam копіює ціль посилання до групи, а саме посилання переміщує до резервної копії. Ціль не змінюється.
- **Файли входу.** `.credentials.json` і `.claude.json` ніколи не пов'язуються з групою, не переміщуються й не копіюються до неї.
- **Два облікові записи в одній теці.** Облікові записи, які спільно використовують історію, записують ті самі файли. Коли другий обліковий запис тієї самої групи історії запускається в теці, де вже працює перший, ccam попереджає й запитує, перш ніж продовжити.

## Пов'язані сторінки

- [Спільні сервери MCP, налаштування та історія](https://ccam.dev/uk/docs/sharing.md)
- [Спільні сервери MCP](https://ccam.dev/uk/features/mcp.md)
- [Копіювання наявного налаштування](https://ccam.dev/uk/features/migrate.md)
- [Усі команди](https://ccam.dev/uk/docs/commands.md)
