ccswap — Переключение Claude Code между своими аккаунтами без прокси
📂 Исходный код на GitHubДемон и CLI для переключения Claude Code между своими подписками Claude по лимитам, без прокси и перезапуска сессий
ccswap — утилита с открытым кодом на Go для тех, у кого несколько собственных подписок Claude. Она переключает Claude Code с одного аккаунта на другой: по команде или автоматически, когда активный аккаунт приближается к пятичасовому или недельному лимиту. Это не прокси. ccswap меняет только логин, который Claude Code хранит на вашей машине. Запущенные сессии подхватывают новый логин примерно за полминуты, перезапускать ничего не нужно. К Anthropic по-прежнему обращается только немодифицированный Claude Code. Фоновый демон следит за лимитами всех аккаунтов. Управлять можно из командной строки, через терминальный интерфейс или локальную веб-страницу. Работает на macOS и Linux, лицензия MIT.
Как это работает
Claude Code хранит логин в одном месте: в связке ключей на macOS или в файле ~/.claude/.credentials.json на Linux. Данные аккаунта дублируются в ~/.claude.json под ключом oauthAccount. ccswap держит логины остальных аккаунтов в собственном хранилище: на macOS это связка ключей, на Linux — файлы с правами 0600.
При переключении ccswap сохраняет текущий логин в хранилище и записывает на его место логин целевого аккаунта. Он берёт те же блокировки каталогов, которыми пользуется сам Claude Code, и обновляет oauthAccount. Всё остальное в записи остаётся нетронутым, например логины MCP-серверов.
Демон опрашивает лимиты каждого аккаунта и переключается, когда активный аккаунт достигает порога. Хук StopFailure в настройках Claude Code сообщает демону сразу, как только сессия останавливается из-за лимита.
Важная деталь: ccswap никогда не обновляет логин, которым пользуется сам Claude Code. Refresh-токен срабатывает один раз, и его обновление разлогинило бы Claude Code.
Подробности — файлы, блокировки, идентификация, опрос и API демона — собраны в docs/how-it-works.md.
Установка и первый запуск
Понадобятся macOS или Linux (amd64 или arm64) и установленный Claude Code с командой claude в PATH. Проще всего установить через Go 1.21+:
go install github.com/Dudude-bit/ccswap/cmd/ccswap@latest
Альтернативы: готовые архивы в релизах с проверкой контрольных сумм и сборка из исходников через make install.
Первый запуск выглядит так:
ccswap daemon install
ccswap auto off
ccswap adopt work --priority 30
ccswap login personal --priority 20
ccswap list
ccswap auto on
ccswap adopt добавляет аккаунт, в который Claude Code уже вошёл. ccswap login запускает официальный claude auth login во временной папке и сохраняет результат, не трогая активный логин. Пароль ccswap не видит: вход всегда проходит через родной механизм Claude Code.
Основные команды
| Команда | Что делает |
|---|---|
ccswap login <name> |
Добавить аккаунт через claude auth login |
ccswap adopt <name> |
Добавить аккаунт, в который уже вошёл Claude Code |
ccswap use <name> |
Переключиться на аккаунт прямо сейчас |
ccswap list |
Аккаунты, их лимиты и время сброса |
ccswap status |
Текущий аккаунт и состояние автопереключения |
ccswap priority <name> <N> |
Задать приоритет аккаунта |
ccswap enable / disable |
Включить или исключить аккаунт из автопереключения |
ccswap auto on \| off |
Включить или выключить автопереключение |
ccswap strategy |
Стратегия переключения: fill-first или cache-aware |
ccswap web |
Открыть веб-страницу |
ccswap tui |
Терминальный интерфейс |
ccswap migrate export / import |
Перенос аккаунтов на другую машину |
ccswap doctor |
Проверить окружение и найти проблему |
Автопереключение
По умолчанию ccswap покидает аккаунт, когда израсходовано 95% пятичасового окна или 98% недельного. Третье условие — сессия остановилась из-за лимита: хук сообщает об этом мгновенно.
Куда переключаться: берётся первый подходящий аккаунт. Он должен быть включён, иметь действующий логин, свежие данные о лимитах и запас до собственных порогов. Аккаунты с более высоким приоритетом идут первыми. Возврат к приоритетному аккаунту происходит, когда каждое его окно опустится на 10 пунктов ниже порога — это гистерезис. Между автопереключениями выдерживается минимум 10 минут.
Внутри одного приоритета работает стратегия:
fill-first(по умолчанию) — берётся аккаунт с наибольшим остатком лимита.cache-aware— берётся аккаунт, чей недельный лимит сбросится раньше. Логика такая: после каждого переключения prompt-кэш начинается заново и тратит лимит. Поэтому пока кэш тёплый, стратегия меняет аккаунт только ради окна, которое сбросится в течение суток и минимум на час раньше текущего.
Веб-панель, TUI и интеграции
ccswap web открывает локальную страницу. На ней видны лимиты и время сброса по каждому аккаунту, график того, кто держал Claude Code за последние сутки, и прогноз, когда активный аккаунт упрётся в порог. Со страницы можно менять приоритеты, пороги, интервалы опроса и стратегию. Обновления приходят в реальном времени через server-sent events.
Доступ охраняют два ключа. Ключ чтения разрешает только смотреть. Ключ администратора меняет настройки, он никогда не печатается и не попадает в ссылки: страница получает его в обмен на одноразовый код, живущий минуту.
ccswap tui показывает те же данные в терминале: стрелки — выбор аккаунта, Enter — переключение, пробел — включить или исключить аккаунт из автопереключения, r — обновить лимиты.
Ещё две возможности:
ccswap remote set <url>— второй компьютер с ccswap берёт цифры лимитов с первого, чтобы не спрашивать Anthropic дважды. Передаются только числа, не токены.ccswap t3— совместимость с T3 Code: аккаунты и лимиты видны в его панели usage-хабов.
Перенос аккаунта на другую машину
ccswap migrate переносит аккаунты с логинами между вашими машинами в зашифрованном пакете. Это перемещение, а не копирование: refresh-токен срабатывает один раз, поэтому два экземпляра логина разлогинили бы одну из машин. Экспорт показывает одноразовый код, без которого пакет бесполезен. Импорт спрашивает код, добавляет аккаунты и удаляет файл. Код можно передать только вручную — в пакете и в журналах его нет.
Почему не прокси
Прокси вроде CLIProxyAPI решают другую задачу и приносят три проблемы, которых ccswap избегает:
- Посредник в каждом запросе. Весь трафик Claude Code, включая код, идёт через прокси. Прокси упал — Claude Code не работает.
- Чужие программы на подписочном логине. Через прокси подпиской могут пользоваться любые клиенты, маскируясь под Claude Code. Условия Anthropic говорят, что подписочный OAuth предназначен для Claude Code и родных приложений Anthropic.
- Кэш, разорванный между аккаунтами. Prompt-кэш не общий между подписками. Round-robin-маршрутизация отправляет запросы одной сессии на разные аккаунты, и каждый аккаунт читает контекст заново без кэша.
ccswap не трогает запросы: к Anthropic обращается немодифицированный Claude Code, меняется только аккаунт входа. Переключение сбрасывает кэш один раз, поэтому ccswap переключается у лимита или по команде, а не на каждый запрос.
Риски и условия использования
Авторы честно описывают риски, и этот раздел стоит прочитать до установки:
- Неофициальный инструмент. Anthropic его не делает, не поддерживает и не одобряет.
- Только свои аккаунты. Инструмент для переключения между подписками, которые вы сами купили. Передавать аккаунт другим нельзя — это запрещают условия Anthropic.
- Лимиты рассчитаны на обычное индивидуальное использование. Переключение на другую подписку при исчерпании лимита можно прочитать как выход за эти рамки. Anthropic прямо не разрешает и не запрещает держать несколько подписок. Решение остаётся за вами.
- Недокументированные интерфейсы. Эндпоинты лимитов, OAuth-клиент Claude Code и способ хранения логина не являются публичными API. Anthropic может изменить их без предупреждения, и ccswap сломается.
- Аккаунты под угрозой. Anthropic оставляет за собой право ограничивать и закрывать аккаунты за нарушение условий. Инструмент вы используете на свой риск.
При этом ccswap ничего не проксирует: промпты и запросы к моделям через него не идут. Свои запросы он отправляет только к Anthropic — за лимитами, профилем аккаунта и обновлением токенов неактивных аккаунтов. Токены хранятся локально и не покидают машину, телеметрии нет.
Похожие проекты
- claude-swap — переключатель аккаунтов на Python с дашбордом и ротацией по лимитам, у нас о нём есть отдельный материал.
- caam — переключение профилей для Claude Code, Codex и Gemini.
- CLIProxyAPI — прокси-подход с другими компромиссами.
- ccusage — отчёты о расходе токенов Claude Code, без переключения аккаунтов.
Ставка ccswap: один бинарник на Go с демоном, CLI, TUI и веб-страницей, без прокси и без перезапуска Claude Code.
Источник: https://github.com/Dudude-bit/ccswap