Skip to main content
Glama

subpool

Várias assinaturas de IA, um pool só. O Codex e o Claude Code delegam tarefas para a conta que ainda tem cota.

nasmac.app · English · npm


Grátis, sem conta, sem servidor. Um MCP server e uma CLI que guardam um pool de assinaturas — Claude Code (via claude) e ChatGPT (via codex) — e mandam cada tarefa de código para a conta menos usada. Bateu no limite, a conta entra em cooldown e a tarefa segue na próxima.

codex ──▶ subpool (MCP) ──▶ claude -p    perfil claude-work
                        ├─▶ claude -p    perfil claude-personal
                        ├─▶ codex exec   perfil codex-team
                        └─▶ codex exec   perfil codex-alt

Cada conta vive num diretório de perfil isolado e roda pelo CLI oficial do fornecedor. O subpool não fala com a API da Anthropic nem da OpenAI, não lê o cofre de credenciais de ninguém e não copia nada de ~/.claude ou ~/.codex.

Por que existe

Uma assinatura acaba no meio da tarefa. Duas assinaturas viram troca manual de conta, CLAUDE_CONFIG_DIR na mão e a pergunta "qual ainda tem cota?". Eu queria abrir o Codex, pedir a tarefa e deixar a escolha da conta com quem sabe o número: um roteador que conta tokens por janela de 5 horas e 7 dias, igual aos limites dos dois serviços.

Related MCP server: Claudexor

Instalar

npm i -g subpool

Node 20+ e o claude e/ou o codex no PATH. macOS, Linux e WSL.

Vincular contas

subpool link claude work            # abre o login do Claude no navegador
subpool link claude personal
subpool link codex team             # abre o login do ChatGPT para o Codex
subpool link codex alt --device-auth
subpool ls

Cada link cria ~/.subpool/profiles/<provider>-<id> e roda o login oficial ali dentro (claude auth login ou codex login). O login que você já tem em ~/.claude e ~/.codex continua intacto.

Máquina sem navegador, ou Keychain do macOS atrapalhando: gere um token de longa duração com claude setup-token em qualquer lugar e cole com

subpool link claude ci --token      # pede o token, grava em profiles/claude-ci/token com modo 0600

subpool check mostra quem está logado. subpool unlink <id> remove a conta e o perfil.

Registrar no Codex e no Claude Code

subpool install codex               # grava [mcp_servers.subpool] em ~/.codex/config.toml
subpool install claude              # roda `claude mcp add subpool --scope user -- …`

Dentro do Codex ou do Claude Code, é uma tool:

Use delegate para implementar o formulário de login em /Users/eu/app e aguarde o resultado.

O delegate escolhe a conta, roda a tarefa naquele CLI dentro do diretório informado, registra os tokens e devolve a mensagem final do worker. O worker começa sem memória: a tarefa precisa ser autocontida.

Tools MCP

Tool

O que faz

delegate

Roda uma tarefa de código na melhor conta. task, cwd, e opcionais provider, account, permission, model, max_turns, system_prompt, wait (padrão true), wait_sec (quanto esperar pelo resultado, padrão 300), timeout_sec (limite duro do worker, padrão 1800).

job_wait, job_result, job_cancel, jobs_list

Acompanham tarefas longas. Se o delegate devolver status: "running", chame job_wait.

accounts_list, accounts_usage

Tokens por conta nas janelas de 5h e 7d, utilização, cooldown, totais por fornecedor.

account_set, set_strategy

Liga/desliga conta, peso, orçamento, modelo; estratégia de roteamento.

link_help

Os comandos exatos para vincular outra conta.

Resources: subpool://accounts e subpool://usage.

Distribuição de tokens

subpool strategy least-used     # padrão: menor utilização primeiro
subpool strategy weighted       # tokens das últimas 5h / peso
subpool strategy round-robin
subpool strategy priority       # ordem do config, próxima conta ao bater limite

subpool set work --tokens-5h 400000 --tokens-7d 2500000
subpool set alt --weight 2
subpool set personal --disable
subpool set personal --clear-cooldown

Utilização é usado / orçamento nas janelas que têm orçamento, ou tokens das últimas 5h / peso quando não tem. Empate vai para a conta usada há mais tempo.

Quando o CLI reporta limite de uso, a conta entra em cooldown até o horário de reset que ele imprimiu (ou 30 minutos, sem horário) e a tarefa é refeita na próxima conta elegível, até maxAttempts (3). Erro de login vale 6 horas de cooldown; sobrecarga do serviço, 2 minutos. Falha comum da tarefa não faz failover: o erro volta para quem pediu.

Permissões

permission

claude

codex

read-only

--permission-mode plan, sem Edit/Write/Bash

--sandbox read-only

edit (padrão)

--permission-mode acceptEdits

--sandbox workspace-write

full

--dangerously-skip-permissions

--dangerously-bypass-approvals-and-sandbox

CLI

subpool serve                     servidor MCP em stdio
subpool link <claude|codex> <id>  [--token] [--device-auth] [--weight N] [--tokens-5h N] [--tokens-7d N] [--model M]
subpool unlink <id>               [--keep-profile]
subpool ls                        [--json]
subpool usage                     [--json]
subpool check [id]
subpool set <id>                  [--enable|--disable] [--weight N] [--tokens-5h N] [--tokens-7d N] [--model M] [--clear-cooldown]
subpool strategy [name]
subpool run <task...>             [-C dir] [--provider p] [--account id] [--permission p] [--model m] [--timeout s] [--json]
subpool jobs                      [--json]
subpool install <codex|claude>    [--scope user|local|project] [--tool-timeout s]
subpool uninstall <codex|claude>
subpool doctor

subpool run "escreva testes para src/router.ts" -C ~/app roteia direto do terminal, sem cliente MCP. subpool doctor confere binários, pasta, config e o login de cada conta.

Privacidade

  • Não existe servidor. Nada seu sai da máquina além do que os próprios CLIs já mandam para a Anthropic e a OpenAI.

  • Credencial é dos CLIs. O login acontece no claude e no codex, dentro do perfil da conta. O subpool só guarda o token de longa duração se você escolher --token, e aí em arquivo com modo 0600.

  • O que ele grava: usage.jsonl com tokens, custo e resultado de cada execução; state.json com cooldowns; jobs/*.json com o texto da tarefa e a resposta do worker, para o jobs e o job_result. Nenhum deles tem token de acesso.

  • Ambiente limpo. Antes de rodar um worker, ANTHROPIC_API_KEY, OPENAI_API_KEY, CLAUDE_CODE_OAUTH_TOKEN e afins são removidos do ambiente, para que a conta do perfil seja a usada e nenhuma conta veja a credencial da outra.

Vincule apenas contas suas ou autorizadas e siga os termos de cada fornecedor.

Arquivos

~/.subpool/config.json        contas, estratégia, padrões
~/.subpool/usage.jsonl        uma linha por execução, compactado para 8 dias a cada serve
~/.subpool/state.json         cooldowns, cursor do round-robin, último uso
~/.subpool/jobs/<id>.json     snapshot de cada job
~/.subpool/profiles/<p>-<id>  CLAUDE_CONFIG_DIR ou CODEX_HOME daquela conta

SUBPOOL_HOME muda a pasta. SUBPOOL_CLAUDE_BIN e SUBPOOL_CODEX_BIN apontam para outros binários.

Detalhes que evitam susto

  • Chamada de tool no Codex expira em tool_timeout_sec; o subpool install codex grava 3600. No Claude Code o limite é MCP_TOOL_TIMEOUT (ms) no ambiente do próprio claude.

  • Tarefa longa: delegate com wait: false e depois job_wait. O worker não é morto quando a espera acaba, só quando timeout_sec acaba.

  • Vários servidores ao mesmo tempo (um por sessão do Codex) compartilham o mesmo ledger e os mesmos cooldowns, com lock de arquivo.

  • Os dois fornecedores mudam mensagem de limite sem avisar. Se uma conta ficou em cooldown sem motivo, subpool set <id> --clear-cooldown e uma issue com a mensagem ajudam.

Compilar do código

git clone https://github.com/vprotti/subpool.git
cd subpool
npm install
npm run build
npm test

Os testes não chamam o claude nem o codex reais: usam fixtures dos formatos de saída e binários falsos. docs/ARCHITECTURE.md descreve cada módulo e os fatos verificados sobre os dois CLIs.

Estrutura

src/server.ts             MCP server: tools e resources
src/cli.ts                comandos
src/core/router.ts        escolha da conta e failover
src/core/ledger.ts        ledger de uso, janelas 5h/7d, cooldowns
src/core/limits.ts        detecção de limite e horário de reset
src/providers/claude.ts   adapter do claude -p (stream-json)
src/providers/codex.ts    adapter do codex exec --json
src/install/              registro no config.toml do Codex e no Claude Code

Dependências: @modelcontextprotocol/sdk, zod, commander.

Contribuir

Bug, ideia ou dúvida: abra uma issue. Pull requests são bem-vindos — leia o CONTRIBUTING antes.

Se o subpool te poupou uma troca de conta, uma ⭐ no repositório ajuda outras pessoas a encontrarem o projeto.

Licença

MIT. Use, modifique e redistribua à vontade, inclusive comercialmente.

Não tem relação com a Anthropic nem com a OpenAI. Os nomes e marcas são de cada empresa.


Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    A
    maintenance
    MCP control plane for Claude Code, Codex, Cursor, and OpenCode. Supports opt-in quota-aware rotation across multiple native Claude Code or Codex subscription accounts of the same harness, with isolated credentials, separate quotas, and bounded task handoffs.
    516
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Enables Claude Code to offload small coding tasks to local Ollama machines and free or paid AI providers, choosing the cheapest available option while enforcing quotas, budgets, and Claude's final review.
    11
    MIT