ccswap — Переключение Claude Code между своими аккаунтами без прокси

· 6 мин чтения
claude-code account-switcher rate-limiting cli tui
📂 Исходный код на GitHub

Демон и CLI для переключения Claude Code между своими подписками Claude по лимитам, без прокси и перезапуска сессий

ccswap — Переключение Claude Code между своими аккаунтами без прокси

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 избегает:

  1. Посредник в каждом запросе. Весь трафик Claude Code, включая код, идёт через прокси. Прокси упал — Claude Code не работает.
  2. Чужие программы на подписочном логине. Через прокси подпиской могут пользоваться любые клиенты, маскируясь под Claude Code. Условия Anthropic говорят, что подписочный OAuth предназначен для Claude Code и родных приложений Anthropic.
  3. Кэш, разорванный между аккаунтами. 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