ZCode Claim — скрипт, который сам активирует бесплатный тариф GLM и подключает его к 9Router
📂 Исходный код на GitHubНабор скриптов на Python с веб-консолью и командной строкой. Выпускает JWT из аккаунта z.ai, активирует бесплатный тариф ZCode Start Plan, создаёт ключ API для coding-плана и подключает его к 9Router как пул провайдера glm.
Аккаунт на z.ai у вас уже есть. Бесплатный тариф ZCode на этом аккаунте тоже можно получить, но официальное приложение делает это вручную, по кнопкам. ZCode Claim делает то же самое автоматически: забирает ваш токен или cookies, выпускает по ним JWT, активирует план Start Plan, создаёт ключ API и заводит этот ключ в 9Router как пул провайдера glm. Дальше GLM доступен как обычная модель в любом клиенте, который говорит с 9Router.
Проект открытый, лицензия MIT, написан на Python. В репозитории около 20 звёзд и всего три коммита — это молодая штука, не проверенная временем. Механика простая, но с оговоркой: последний шаг всё равно приходится делать руками. Об этом ниже.
Как устроен путь от токена до модели
Скрипт повторяет то, что делает официальное приложение ZCode, но через HTTP-запросы напрямую и через браузер под управлением скрипта. Разработчик разобрал настольное приложение ZCode версии 3.14.4 (файл AppImage, внутри него распакованный код) и переписал его логику на Python. Это классический реверс-инжиниринг — вскрытие чужой программы, чтобы понять, как она устроена.
Цепочка состоит из пяти шагов:
z.ai token / cookies ──▶ OAuth ──▶ ZCode JWT ──▶ claim Start Plan ──▶ ключ API ──▶ 9Router (glm)
inject.py chat.z.ai zcode.z.ai billing/claim zauth.py connect_9router.py
Автор проверял каждый шаг отдельно. Вот что у него получилось:
| Шаг | Что проверено |
|---|---|
| Из токена или cookies выпустить ZCode JWT | ✅ работает |
| Активировать Start Plan (за капчей) | ⚠️ нужно ручное решение капчи |
| Создать ключ API для coding-плана z.ai | ✅ работает |
Зарегистрировать ключ в пуле glm в 9Router |
✅ работает на тестовом 9Router |
Что даёт бесплатный тариф Start Plan
Тариф называется Start Plan, во внутреннем виде он записывается как zcode-v3-start-plan. Дневная квота бесплатная и указана в README репозитория:
| Модель | Бесплатно в сутки |
|---|---|
| GLM-5.3 | 3 000 000 токенов |
| GLM-5.3-Flash | 5 000 000 токенов |
Здесь важно понимать разницу. Без Start Plan бесплатны только «лёгкие» модели: glm-4.5-flash, glm-4.7-flash и glm-4.6v-flash. Флагманская GLM-5.3 в этом случае не работает и отвечает ошибкой 1113 Insufficient balance. То есть Start Plan — это не «чуть больше бесплатного», а доступ к основной модели.
Консоль в браузере
У проекта есть два способа запуска. Основной — веб-консоль на четыре страницы. Скрипт поднимает локальный Chrome и вставляет консоль прямо в его окно. Никаких терминалов, портов и туннелей. Данные не теряются при перезагрузке: всё лежит в localStorage браузера, а мост дополнительно пишет состояние в папку console_data/ рядом с исходниками.
Dashboard — главная страница. Вставляете токен или cookies, нажимаете «выпустить JWT», дальше активация тарифа и подключение к 9Router. Либо одна кнопка «Run full pipeline», которая делает всю цепочку сразу и показывает прогресс и живой лог.
Accounts — список аккаунтов. Можно добавлять вручную, импортировать из JSON или CSV, перетаскивать файлы, выгружать обратно. Есть кнопка «прогнать пачкой» — весь конвейер сразу по всем аккаунтам в списке.
Capture — страница для капчи. Скрипт открывает вкладку z.ai с проверкой, вы логинитесь и двигаете ползунок мышью, а параметр captchaVerifyParam подхватывается автоматически. Сюда же загружаются файлы с cookies или токеном.
Results — результаты по каждому шагу в виде JSON, проверка статуса тарифа по готовому JWT, а также чтение и запись небольших файлов в рабочей папке.
Запуск
Всё делается одной командой. Браузер запускается сам, если вы не укажете свой:
./run.sh # запустить локальный Chrome и вставить консоль
./run.sh --headless # без окна — нужно для VPS
./run.sh --connect 127.0.0.1:9222 # подключиться к уже запущенному Chrome
./run.sh --cdp "wss://..." # взять удалённый браузер
./run.sh --port 9222 # другой порт отладки
./run.sh --profile work # именованный профиль, чтобы сохранить входы
То же самое вручную, если скрипт запускать не хочется:
python src/console_bridge.py # сам запустит локальный Chrome
python src/console_bridge.py --headless # без окна
python src/console_bridge.py --connect 127.0.0.1:9222
Если в системе нет ни Chrome, ни Chromium, run.sh поставит встроенный браузер Playwright командой python -m playwright install chromium. На сервере без графического окна Chromium не хватает системных библиотек — доставляются командой python -m playwright install-deps chromium.
Для тех, кто предпочитает командную строку, есть отдельный скрипт-оркестратор:
# локальный браузер без окна: выпустить JWT, отправить решённую капчу, подключить ключ
python src/zcode_claim.py --headless --email me@x.com --token eyJ... \
--captcha-param '<param>' --connect --base http://localhost:20128
# указать свой браузер через CDP
python src/zcode_claim.py --cdp "$BU_CDP_WS" --email me@x.com --token eyJ... \
--captcha-param '<param>' --connect --base http://localhost:20128
# пачка аккаунтов: завести каждый ключ в пул glm
python src/zcode_claim.py --headless --accounts accounts.json \
--connect --base http://localhost:20128 --out claimed.json
# проверить тариф по готовому JWT
python src/zcode_claim.py --jwt-file zjwt.txt --status
Требуется Python 3.9 или новее и два пакета:
pip install websockets playwright
Капчу придётся решать руками
Это главное ограничение проекта, и автор честно о нём пишет. Запрос активации тарифа закрыт проверкой Aliyun Captcha 2.0. Сервер требует параметр captchaVerifyParam, который подписан и получен прямо внутри страницы z.ai. Автор перебрал обходные пути и ни один не сработал:
- Сторонний сервис распознавания капч (Solverify) возвращает правильный результат, но в неподписанном виде и без привязки к сессии страницы. Запрос отклоняется с кодом
3007или3001. - Скрипт, который двигает ползунок мышью, отклоняется молча. Точность не помогает — срабатывает проверка поведения пользователя.
Отсюда вывод: этот шаг в принципе нельзя полностью автоматизировать, и консоль существует в том числе ради него. Вы один раз решаете капчу во вкладке z.ai, дальше параметр подхватывается сам и уходит по конвейеру дальше.
Ответственность за использование
Автор выносит это отдельным разделом, и по делу:
- Автоматическая активация пробной квоты нарушает условия использования z.ai. Запускайте только на своих аккаунтах и на свой страх.
- Start Plan даётся один раз на аккаунт. Использованный тариф повторно получить нельзя.
- На запрос активации стоит ограничение на частоту (HTTP 429). Попытки нужно разносить по времени.
Проект распространяется под лицензией MIT — файл LICENSE, правила участия в CONTRIBUTING.md.
Что внутри репозитория
Состав простой — десяток Python-файлов и веб-консоль:
zcode-claim-9router/
├── src/
│ ├── inject.py токен или cookies → OAuth → JWT
│ ├── claim.py капча Aliyun и запрос billing/claim
│ ├── zauth.py создание ключа API для coding-плана
│ ├── connect_9router.py регистрация ключа в пуле glm
│ ├── zcode_claim.py оркестратор для командной строки
│ ├── solverify.py клиент стороннего сервиса распознавания капч
│ ├── console.html веб-консоль на четыре страницы
│ ├── browser.py поиск и запуск Chrome, режим без окна
│ └── console_bridge.py мост CDP и серверная часть консоли
├── examples/ примеры файлов аккаунтов и настроек
├── run.sh запуск одной командой
└── docs/STRUCTURE.md схема всех компонентов
Демонстрация работы консоли — двадцатисекундное видео в docs/demo.mp4. Данные в нём вымышленные, реальных ключей там нет. Полная схема компонентов с описанием каждого модуля лежит в docs/STRUCTURE.md.