# SEED: кілька підписок Claude на одному компʼютері > Це насіннєвий файл для Claude Code. Віддай його своєму Claude і скажи: «розгорни це в мене». > Усе нижче — виміряно на реальній машині (Windows 11, Claude Desktop + Claude Code 2.1.x, > три підписки Max 20x, вересень 2026), включно з описом трьох способів, які НЕ працюють. > Автор досвіду: Ярослав Максимович, AI Advisory Board. --- ## 0. Що саме цей файл вирішує Одна підписка Max 20x при інтенсивній роботі вичерпується за 2–3 дні. Другу/третю підписку купити легко — складно **працювати ними так, щоб нічого не губилось**: список чатів, заплановані задачі, скіли, памʼять, доступи до MCP. Нижче — схема, яка це тримає, і межа, за яку не варто заходити. **Головне розділення, з якого все випливає:** | Що | Де лежить | Прив'язано до акаунта | |---|---|---| | Тексти розмов (транскрипти) | `~/.claude/projects/<проєкт>/*.jsonl` | ні | | Налаштування, CLAUDE.md, скіли, памʼять, MCP | `~/.claude/` | ні | | Список чатів у лівій панелі застосунку | `%APPDATA%\Claude\claude-code-sessions\\\local_*.json` | **так** | | Сесії агентного режиму | `%APPDATA%\Claude\local-agent-mode-sessions\\\` | **так** | | Заплановані задачі | `…\claude-code-sessions\\\scheduled-tasks.json` | **так** | Тобто після перемикання акаунта розмови нікуди не діваються — зникає лише **перелік** і **розклад задач**. Саме ці дві речі й треба вирівнювати. --- ## 1. Механізм, на якому все тримається Офіційно задокументований Anthropic спосіб: змінна **`CLAUDE_CONFIG_DIR`** переносить «домашню» теку Claude Code, включно з `.credentials.json`. Отже кожен акаунт отримує власну теку-«комірку», і всі вони можуть бути залогінені одночасно. ``` ~/.claude ← десктопний застосунок + звичайний `claude` у терміналі ~/.claude-a ← комірка акаунта 1 ~/.claude-b ← комірка акаунта 2 ~/.claude-c ← комірка акаунта 3 ``` Запуск процесу на конкретному акаунті (env діє на ОДИН процес, застосунок не чіпає): ```bash CLAUDE_CONFIG_DIR="$HOME/.claude-b" claude -p "<завдання>" ``` ```powershell $env:CLAUDE_CONFIG_DIR = "$HOME\.claude-b"; claude -p "<завдання>" ``` Станом на 17.09.2026 нативного перемикача профілів (`claude --profile work`) **не існує** — перевірено в `claude auth login --help`. Community-обгортки (`claude-code-profiles` тощо) — це той самий `CLAUDE_CONFIG_DIR` з іменованими профілями. ### Реєстр акаунтів — одне джерело правди Не зашивай список акаунтів у скрипти. Заведи `~/.claude/tools/accounts.json`: ```json {"accounts":[ {"key":"a","cell":".claude-a","uuid":"","org":"","email":"<пошта1>","label":"акаунт 1"}, {"key":"b","cell":".claude-b","uuid":"","org":"","email":"<пошта2>","label":"акаунт 2"} ]} ``` `accountUuid` і `orgUuid` беруться з `<комірка>/.claude.json` → `oauthAccount` після логіну, або з імен тек у `%APPDATA%\Claude\claude-code-sessions\`. --- ## 2. Вхід у комірку — і пастка, на якій ми втратили півдня ```bash CLAUDE_CONFIG_DIR="$HOME/.claude-b" claude auth login --claudeai --email <пошта2> ``` 🧨 **Вхід робити ЛИШЕ в анонімному вікні браузера.** Звичайний Chrome підсовує вже залогінену сесію іншого акаунта, і вхід «успішно» завершується **не тим** акаунтом. У нас так комірка третього акаунта мовчки стала другою копією першого. Після кожного логіну перевіряй: ```bash CLAUDE_CONFIG_DIR="$HOME/.claude-b" claude auth status ``` Рядок `email` має бути саме той, який очікуєш. 🧨 **Ніколи не копіюй `.credentials.json` між теками.** Refresh-токен **перевипускається при кожному оновленні**, тож дві копії одного ключа гарантовано вибивають одна одну: хто оновився першим — той і живий, друга комірка падає з `OAuth session expired and could not be refreshed`, причому через кілька годин, коли звʼязок із копіюванням уже неочевидний. У нас був скрипт, який «турботливо» дзеркалив креденшели в комірку активного акаунта — він і зламав вхід. Прибрали. **Детектор дублів** (запускати разом із синхронізацією): порахуй `sha256` поля `claudeAiOauth.refreshToken` у кожній комірці. Два однакові — одна з комірок не той акаунт, за який себе видає. Самі токени ніде не друкувати. --- ## 3. Що НЕ працює (три способи, перевірені на собі) **1. Symlink на `~/.claude/projects`.** Claude Code відхиляє посилання на компонентах під коренем конфігурації і падає з явною помилкою. Чесно падає — і на тому дякую. **2. NTFS junction на теку індексу чатів.** Виглядає як елегантне рішення: обидва акаунти читають один фізичний набір карток. Насправді застосунок відхиляє і це, але **МОВЧКИ**: просто перестає зберігати нові картки. У `%APPDATA%\Claude\logs\main.log`: ``` PlantDetectedError: Refusing non-directory at private dir path (symlink/file plant) → ensureStorageDir → writeSnapshotToDisk ``` Виміряно: 5798 відмов за дві доби, 3862 незбережені картки за три доби, в інтерфейсі — нічого. Якщо junction уже стоїть — прибери його (`Remove-Item <шлях>` видаляє посилання, не ціль) і поверни справжню теку. **3. Проксі з пулом OAuth-сесій і автоматичною ротацією на 429.** Технічно існує (cc-swap, claude-swap). Але Consumer Terms Anthropic забороняють доступ до сервісу «through automated or non-human means… except when you are accessing our Services via an Anthropic API Key or where we otherwise explicitly permit it». Claude Code — і є той дозволений спосіб; сторонній проксі, що вдає клієнта і крутить чужі OAuth-сесії, під це не підпадає. Ставки — підписки по $200/міс. **Перемикання за рішенням людини — так. Автоматична ротація за лімітом — ні.** --- ## 4. Робоча схема: справжні теки + синхронізація Оскільки підміняти теки посиланнями не можна, вони лишаються справжніми, а вміст вирівнюється копіюванням **перед кожним перемиканням акаунта**. ### 4.1 Список чатів ```powershell $root = "$env:APPDATA\Claude\claude-code-sessions" # для кожної пари тек \: robocopy $a $b local_*.json /XO /NJH /NJS /NP robocopy $b $a local_*.json /XO /NJH /NJS /NP ``` `/XO` копіює лише новіші файли — нічого не затирається і не видаляється. Те саме повтори для `%APPDATA%\Claude\local-agent-mode-sessions\`. Після прогону кількість `local_*.json` в усіх теках має збігатися — це і є перевірка. ⚠️ Застосунок створює нові теки сам (при першому вході акаунта, а часом і крос-комбінації `<акаунт-1>\<орг-2>`). Синхронізація має обходити **всі** теки, а не дві зашиті. ### 4.2 Заплановані задачі — найтихіша пастка `scheduled-tasks.json` теж лежить у теці акаунта. Наслідки, якщо цього не вирівнювати: - задача, заведена під акаунтом 1, під акаунтом 2 **не існує** — після перемикання вона просто перестає запускатись, без жодного повідомлення; - задача, **вимкнена** під акаунтом 1, лишається **увімкненою** в теках інших — і оживає після перемикання. У нас так ледь не запустився дубль щогодинного воркера. Тому вирівнювати треба не лише наявність задач, а й **поля наміру**: `enabled`, `cronExpression`, `fireAt`. Джерело правди — найсвіжіший реєстр (тека акаунта, під яким зараз працюють). ⚠️ Пиши JSON **без BOM**: `Out-File -Encoding utf8` у PowerShell 5.1 додає BOM, і застосунок може такий файл відкинути. Використовуй `[IO.File]::WriteAllText($path, $json, (New-Object Text.UTF8Encoding($false)))`. ### 4.3 Сторож, який ловить симптом Причини відмови збереження бувають різні (посилання, права, антивірус, повний диск), а симптом один. Тому стеж не за причиною, а за наслідком — свіжими рядками `Failed to save session local_` у `main.log` за останні 15 хвилин. Це ловить збій за хвилини, а не за три дні. ### 4.4 Що ще долити в комірки Комірки не бачать твоїх скілів і памʼяті, якщо їх туди не покласти. Тією ж синхронізацією копіюй у кожну комірку: `settings.json`, `CLAUDE.md`, `mcp.json`, теки `skills/`, `agents/`, `commands/`, `hooks/` і памʼять. Інакше воркер на іншому акаунті працюватиме «голим» і здивує тебе результатом. --- ## 5. Навіщо це все: винесення важкої роботи Головна практична вигода — **чат у застосунку лишається оркестратором, а важку роботу виконує окремий процес на ІНШОМУ акаунті**, не зачіпаючи твою поточну квоту: ```bash CLAUDE_CONFIG_DIR="$HOME/.claude-b" claude -p --permission-mode acceptEdits \ --allowedTools "Bash(git:*)" "Bash(pnpm:*)" "Edit" "Write" "Read" < завдання.txt ``` ⚠️ **Без прапорців прав робітник мовчки нічого не зробить** — поверне текст і нуль створених файлів. Перевірено. **Вбудовані `Agent`/`Workflow` так НЕ вміють** — вони завжди палять акаунт поточної сесії. На інший акаунт ходить лише окремий процес `claude -p`. ### Вибір комірки: перевірка особи обовʼязкова Скрипт, що обирає комірку для роботи, має вимагати від неї **довести свою особу**: `<комірка>/.claude.json → oauthAccount.accountUuid` повинен збігатися з реєстром **і не збігатися** з акаунтом, під яким зараз десктоп (`%APPDATA%\Claude\config.json` → `lastKnownAccountUuid`). Інакше після невдалого логіну робота піде на той самий акаунт, який ти намагався розвантажити — і ти цього не побачиш. Придатні комірки бери **по колу**, а не «коли вперлись у ліміт» (див. межу в §3). ### Тимчасове виведення акаунта з ротації Зручний примітив: файл-стоп `~/.claude/.offload-block-<ключ>`. Обовʼязково з машинним строком дії всередині (`until=`) — інакше блок, поставлений «на пару днів», живе вічно, і через місяць ніхто не згадає, чому один акаунт не використовується. --- ## 6. Порядок перемикання акаунта (рутина на кожен раз) 1. Прогнати синхронізацію (картки + задачі + доливка комірок). 2. Переконатись, що тека цільового акаунта має ту саму кількість карток, що й поточна. 3. Перемкнути акаунт у застосунку. 4. Перевірити: `config.json → lastKnownAccountUuid` = очікуваний акаунт; список чатів на місці; кількість увімкнених задач така сама, як була. 5. Перевірити, що вибір комірки для воркерів тепер веде на НЕ активний акаунт. Автоматизувати прогін щохвилини не варто: перемикання — усвідомлена дія раз на кілька днів, а часті прогони блимають вікном і перебивають роботу. Достатньо ярлика або пункту в треї. --- ## 7. Чого очікувати від браузера й конекторів - Розширення Claude in Chrome чіпляється до акаунта **застосунку**. Якщо застосунок на акаунті 3, а Chrome залогінений в акаунт 1 — міст не підніметься (`list_connected_browsers` порожній). Обидва мають бути на одному акаунті. - Хмарні конектори (Gmail, Drive, Calendar) вимагають переавторизації під кожним акаунтом. - Локальні MCP (Telegram, Docker, локальні індекси) від акаунта Claude не залежать — вони тримають свої облікові дані власними файлами. - Артефакти належать акаунту, під яким їх опублікували. Після перемикання чат не побачить навіть власний артефакт (`artifact not found`). Це **не привід генерувати вміст заново** — читай його через комірку власника. --- ## 8. Межа, яку не варто переходити Усе вище — про **послідовну роботу власними оплаченими підписками з перемиканням за рішенням людини**. Це та сама модель, яку описує документація Anthropic (`CLAUDE_CONFIG_DIR`). Не робити: автоматичну ротацію акаунтів при досягненні ліміту, проксі з пулом OAuth-сесій, передачу доступу іншим людям, спільне використання одного акаунта командою. Технічна можливість тут є — і саме тому варто памʼятати, що питання не технічне. --- ## 9. Чек-лист розгортання (для Claude, який це читає) - [ ] Створити комірки `~/.claude-a`, `~/.claude-b` (+ скільки треба). - [ ] Увійти в кожну **в анонімному вікні**; після кожного входу перевірити `claude auth status`. - [ ] Записати `accountUuid`/`orgUuid` у `~/.claude/tools/accounts.json`. - [ ] Написати скрипт синхронізації: картки (`/XO`, в обидва боки, всі теки), `scheduled-tasks.json` (з полями наміру, без BOM), доливка `settings.json`/`CLAUDE.md`/`skills`/`hooks`/памʼяті. - [ ] Додати детектор дублів токенів (sha256 refreshToken) і сторож `Failed to save session local_`. - [ ] Написати вибір комірки з перевіркою особи + блок-файли зі строком дії. - [ ] Повісити синхронізацію на ярлик/трей, а не на частий таймер. - [ ] Перевірити наскрізь: прогін синхронізації → перемикання → список на місці → воркер пішов на неактивний акаунт. Якщо щось із цього «не спрацювало, але й помилки немає» — шукай у `%APPDATA%\Claude\logs\main.log`. Тут майже всі збої тихі.