ccx AGENTS.md

ccx AGENTS.md is an instructions file for Codex, OpenCode from thalesholleben/ccx. It costs 1,558 tokens per session, scanned A, original, MIT.

Instructions for two small Python scripts that monitor Claude Code and Codex command-line account quotas and switch credentials before an account reaches its limit. They use only Python's standard library, with no server or external framework.

In plain words
What is it for?
Use it to maintain, validate, or extend account-quota monitoring, credential switching, token refresh, file locking, and the accompanying test scripts.
Why use it?
It helps users avoid interruptions when one provider account runs out of quota. The guidance also protects the credential files by requiring narrowly targeted changes and tests.

Instructions file for CodexOpenCode

Install

Getting it into your agent

One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.

agentmods
npx agentmods add instructions/thalesholleben/ccx/agents-md
Clone the repo
git clone --depth 1 https://github.com/thalesholleben/ccx

Made for: Codex, OpenCode.

Wrote this? Show the measurements

A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.

agentmods badge for ccx AGENTS.md

README.md
[![agentmods](https://agentmods.dev/badge/instructions/thalesholleben/ccx/agents-md.svg)](https://agentmods.dev/instructions/thalesholleben/ccx/agents-md)
Your own site
<a href="https://agentmods.dev/instructions/thalesholleben/ccx/agents-md"><img src="https://agentmods.dev/badge/instructions/thalesholleben/ccx/agents-md.svg" alt="Measured on agentmods" height="20"></a>
Per session 1,558 This file is loaded in full into every session.
When invoked 1,558 The same file — it is already loaded in full.
Security scan A 0 findings. Scan, not verified.
Origin original No closer match found in the catalogue.
Token cost

What it costs to keep this loaded

Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.

ModelPer sessionOnce invoked
Fable 5 $0.01558 $0.01558
Opus 5 $0.00779 $0.00779
Sonnet 5 $0.00312 $0.00312
Haiku 4.5 $0.00156 $0.00156

Measured 4d ago against content hash 0885909629c9, method: parsed. Prices are Anthropic first-party input rates as of 2026-08-30, from the pricing page.

Security

Grade A, and why

ccx AGENTS.md scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 4d ago.

A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.

Nothing flagged

None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.

AGENTS.md · 102 lines

How it starts

The opening of the file, as written. The whole thing — 102 lines — stays where its author put it; the contents beside it link to each section on GitHub.

AGENTS.md

Mapa rapido para quem (humano ou agente) for mexer neste repositorio.

O que e

Dois scripts Python stdlib independentes, cada um monitorando a cota de um provedor e trocando de conta antes de bater o limite:

  • ccx.py - contas Claude Code (le ~/.claude/.credentials.json e ~/.claude.json)
  • ccx_codex.py - contas Codex CLI / ChatGPT (le ~/.codex/auth.json), importa ccx.py e reusa de la a engine de decisao e os primitivos de IO/lock

Sem framework, sem dependencia externa, sem servidor. So leitura de cota e troca cirurgica de credencial nos arquivos que o proprio Claude Code / Codex CLI ja usam.

Comandos de validacao

python test_ccx.py         # 42 testes, engine de decisao + IO do modulo Claude
python test_ccx_codex.py   # 30 testes, especifico do modulo Codex
python test_ccx_profile.py # launcher opt-in de perfis isolados

Sem framework de teste, so assert e um runner minimo no final de cada arquivo. Rodar os três antes de qualquer PR.

Regras ao editar

  • Qualquer troca de credencial tem que continuar cirurgica: reescrever so os campos que identificam a conta, nunca o arquivo inteiro. O .credentials.json do Claude Code guarda mcpOAuth (tokens de servidores MCP) que uma escrita completa derrubaria.
  • Identidade de conta ativa casa por email/organizacao, nunca por token. Os dois provedores rotacionam o refresh token da conta em uso; comparar por token faz a identidade se perder na primeira rotacao.
  • Toda escrita em disco e via arquivo temporario + os.replace (atomica). JSON corrompido levanta CorruptFile, nunca vira {} silenciosamente (um {} faria o passo seguinte reescrever o arquivo e apagar o que nao foi lido).
  • ccx_codex.py importa ccx.py para reusar a engine de decisao (pick_target, band_delay, next_wake) e os primitivos de lock/IO. Nao duplicar essas funcoes; se algo generico precisar mudar, muda em ccx.py e o modulo Codex herda.
  • status, hook e auto compartilham usage_cache. Qualquer coleta deve adquirir o lock e reler o store antes de decidir o que consultar: processos concorrentes podem ter preenchido o cache enquanto este processo esperava.
  • HTTP 429 na leitura de uso e falha de medicao, nao prova de cota esgotada. Sem leitura conhecida, manter a ativa. Se uma leitura recente ja a confirmou esgotada, ela pode orientar a troca mesmo que a releitura tenha dado 429.
  • do_switch deve reler o store depois de adquirir o lock. A coleta solta o lock antes da decisao, e gravar o snapshot antigo pode ressuscitar refresh token ou apagar cache que outro hook acabou de salvar.
  • Limiar e cooldown sao calibrados juntos. A folga que o limiar compra, (100 - threshold) / burn_rate, tem que ser folgadamente maior que cooldown + maior POLL_TIGHT, senao o cooldown sobrevive a folga e o monitor fica preso numa conta que morreu dentro da trava. Mexer em um sem olhar o outro recria o travamento de 19/08/2026.
  • O escape de cooldown (cooldown_blocks) dispara em util >= 100, nao no limiar. Escapar no limiar equivale a remover o cooldown, porque um alvo diferente da ativa ja implica que a ativa esta pior. Cota ilegivel nunca escapa.
  • O predicado de cooldown mora em ccx.py e os dois check_once o chamam. Nao duplicar: era copia colada nos dois modulos e so um dos lados seria corrigido.
  • Faixas de poll sao por provedor (ccx.PollBands). O modulo Codex passa as suas em BANDS porque la o rotulo "5h" e posicional e costuma carregar a janela semanal, que nao se move dentro de uma sessao; herdar a faixa apertada do Claude prenderia o poll no ritmo rapido por dias.
  • Toda troca registra o snapshot da decisao no auto.log via o reason do do_switch. Percentual e numero de slot podem entrar; token, e-mail e payload nao.
  • pinned_slot e uma trava de operador, nao uma preferencia. Quando existe, check_once sai antes de qualquer coleta: fixar uma conta nao pode gerar trafego de usage. E o do_switch(..., only_if_pinned=True) revalida a fixacao ja sob o lock, senao um --pin off concorrente seria desfeito por uma troca decidida antes dele.
  • pinned_slot invalido (slot inexistente ou tipo errado) levanta erro em vez de virar None. Cair em rotacao silenciosa e pior do que parar: o operador fixou justamente para a conta nao mudar.
  • Locks internos do CCX guardam PID, id e marca de criação do processo. PID vivo com marca divergente é reciclado e pode ser retomado; marca temporariamente ilegível ou lock legado sem marca conserva o lock enquanto o PID estiver vivo. discard_lock(..., None) só pode remover um diretório ainda vazio: nunca apague owner.json sem conferir a identidade do dono.
  • Falha antes do loop de ccx.py auto só vai para auto.log como classe da exceção ou como configuração insuficiente; nunca registre str(exc), token ou payload.
  • A troca do arquivo global de autenticacao serve para uso sequencial. Um processo persistente do Codex pode manter a identidade em memoria e nao migrar de conta. Nao documentar esse hot-swap como isolamento seguro entre agentes paralelos; isso exige perfis por processo (CODEX_HOME / CLAUDE_CONFIG_DIR) ou um proxy com afinidade de sessao.
  • ccx_profile.py e o caminho opt-in para paralelismo: não copie tokens nem mude o ambiente do processo pai. Ele só cria o diretório do perfil e inicia um processo filho com CLAUDE_CONFIG_DIR ou CODEX_HOME próprio. Para Codex, preserve a flag cli_auth_credentials_store="file" antes dos args.
  • Nunca commitar ~/.ccx/accounts.json ou ~/.ccx/codex_accounts.json (tokens OAuth reais). Ja estao no .gitignore.

Read the full file on GitHub · 102 lines

Changes

What this file has done since we first saw it

Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.

  1. 4d ago First seen · 102 lines · 1,558 tokens per session scan A 0885909629c9

Subscribe to this mod's changes

ccx AGENTS.md is an instructions file published in the GitHub repository thalesholleben/ccx (9 stars, last pushed 14d ago), licensed MIT. It adds 1,558 tokens to every session, about $0.0078 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.