Pular para o conteúdo
Promoção de fundador: OpenLimiter Pro com 50% de desconto para os primeiros apoiadores

Configuração

O OpenLimiter mantém tudo num único diretório de estado sob sua própria conta de usuário: um arquivo de configuração, um cache, um lock, e o documento manual opcional. Esta página diz onde isso fica e o que cada arquivo faz.

O diretório de estado

Onde o diretório de estado fica em cada plataforma
plataformacaminho
Windows%LOCALAPPDATA%\openlimiter
macOS~/Library/Application Support/openlimiter
Linux${XDG_STATE_HOME:-~/.local/state}/openlimiter

O diretório é criado com permissões restritivas onde a plataforma suporta isso. Um caminho que se revela um link simbólico é rejeitado, em vez de seguido.

O que existe dentro dele

Arquivos dentro do diretório de estado
arquivopapel
openlimiter-config.jsonEscrito por openlimiter init. Registra a lista de connectors, se cada um foi detectado, e o layout do statusline.
openlimiter-cache.jsonO único cache que todo comando lê e todo escritor funde.
openlimiter.lockMantido só por escritores. Leitores nunca o tomam.
manual.jsonOpcional. Quota que você mantém à mão. Veja ingestão para o formato.

Como o cache se comporta

  • Um schema, um arquivo, um lock. Não há arquivos de estado concorrentes para reconciliar.
  • Leitores nunca tomam o lock. Um leitor abre o arquivo, valida esse descritor aberto, e lê por meio dele, então um caminho trocado depois da checagem não consegue redirecionar os bytes.
  • Escritores tomam o lock, e a leitura, a fusão, e a escrita acontecem todas dentro dele. Um lock com mais de cinco segundos é tratado como abandonado e retomado.
  • Toda substituição é gravada em armazenamento estável antes da renomeação, então um leitor observa o conteúdo anterior ou o conteúdo novo, e nunca um arquivo parcial.

A saúde do cache fica visível a qualquer momento por openlimiter doctor, que imprime o status do cache e quantas linhas foram descartadas por falhar na validação.

O layout do statusline

O statusline desenha uma célula compacta por provedor: um nome, uma barra de cinco blocos, e a porcentagem, com o código de motivo geral e a recomendação de roteamento à frente da linha. Seis chaves no arquivo de configuração decidem como essa linha é montada, e openlimiter config é como elas são lidas e alteradas.

capturado em 10 August 2026, fixtures sintéticos
NO_COLOR=1 node packages/cli/dist/bin.js statusline
OpenLimiter NEAR_CAP PREFER ANTIGRAVITY  CLAUDE ###.. 64.0%  CODEX ####. 84.0%  ANTIGRAVITY #.... 28.0%  OPENCODE ####. 92.0%
MANUAL #.... 35.0%  OPENROUTER ###.. 62.3%

Cada chave

As chaves de statusline e o que cada uma aceita
chaveaceitasignificado
orderids de provedor, separados por vírgula, ou NONEA ordem em que as células aparecem. O que você lista vem primeiro; todo provedor que você deixa de fora segue a ordem embutida atrás dele, que é os planos de assinatura, e depois os meters de crédito e API. NONE é o caminho de volta para essa ordem embutida. Padrão NONE.
metersworst ou allUm provedor com vários meters mostra o mais próximo do limite dele, ou todos como células separadas nomeadas PROVIDER:METER. Meters seguem a ordem sessão, diário, semanal, mensal, créditos. Padrão worst.
widthum número inteiro de 40 a 400As colunas que uma linha pode gastar antes de a linha empilhar. Nada mede seu terminal: um host de statusline roda o comando sem nenhum terminal anexado, então o número aqui é o número respeitado. Padrão 140.
rows1 ou 2Quantas linhas o layout pode usar. Padrão 2.
barstrue ou falseFalse restaura a linha única e simples da 0.1.0, byte por byte. Padrão true.
colorauto, always, ou neverauto segue o terminal, o que para um host de statusline geralmente significa sem cor, porque o host captura a saída em vez de entregar um terminal de verdade ao comando. always é como você diz que o host entende códigos de escape. Padrão auto.

Lendo e escrevendo elas

capturado em 10 August 2026
openlimiter config get statusline
statusline.order=NONE
statusline.meters=worst
statusline.width=140
statusline.rows=2
statusline.bars=true
statusline.color=auto

Uma chave por vez, validada antes de ser escrita. Um valor que a chave não pode usar sai com 2 e nomeia o que ela esperava, e nada parcial é escrito, porque o documento inteiro é substituído atomicamente. Chaves de statusline são a única coisa que este comando altera: a lista de connectors pertence a openlimiter init, e qualquer outra chave sai com 2.

openlimiter config set statusline.order codex,claude
statusline.order=codex,claude

openlimiter config set statusline.meters all
statusline.meters=all

openlimiter config set statusline.width 12
openlimiter config: statusline.width must be a whole number from 40 to 400.

openlimiter config set statusline.theme dark
openlimiter config: unknown statusline key. Known keys: order, meters, width, rows, bars, color.

Rodar openlimiter init de novo mantém o que já está configurado aqui e só redetecta os connectors. Uma chave de statusline que esta versão não consegue ler recorre ao próprio padrão em vez de parar o desenho, então um erro de digitação num campo nunca custa os outros cinco.

Quando a linha fica sem espaço

A linha empilha em vez de truncar. Uma quebra acontece entre duas células e nunca dentro de uma, e duas linhas é o teto. Além disso, os provedores mais perto do limite deles são os mantidos, e a última linha termina dizendo quantos ela não conseguiu mostrar.

capturado em 10 August 2026, fixtures sintéticos
openlimiter config set statusline.rows 1 && NO_COLOR=1 node packages/cli/dist/bin.js statusline
OpenLimiter NEAR_CAP PREFER ANTIGRAVITY  CODEX ####. 84.0%  OPENCODE ####. 92.0%  +4 more

A linha da 0.1.0, sob pedido

O formato antes deste layout era uma linha única e simples, sem barras. Se você escreveu um script contra ele, bars false a devolve exatamente, e um teste fixa essa string exata para ela não conseguir desviar.

capturado em 10 August 2026, fixtures sintéticos
openlimiter config set statusline.bars false && node packages/cli/dist/bin.js statusline
OpenLimiter NEAR_CAP CLAUDE 64.0% OPENROUTER 62.3% CODEX 84.0% ANTIGRAVITY 28.0% OPENCODE 92.0% MANUAL 35.0% PREFER ANTIGRAVITY

Configurações do Claude Code

Use o caminho absoluto do seu clone. Barras normais funcionam em qualquer plataforma, incluindo Windows.

settings.json
{
  "statusLine": {
    "type": "command",
    "command": "node /absolute/path/to/openlimiter/packages/cli/dist/bin.js statusline"
  },
  "hooks": {
    "UserPromptSubmit": [
      {
        "hooks": [
          {
            "type": "command",
            "command": "node /absolute/path/to/openlimiter/packages/cli/dist/bin.js hook"
          }
        ]
      }
    ]
  }
}

Qual dos dois escreve

Só o statusline. É o caminho que recebe o payload da sessão, então é o caminho que atualiza o cache. O hook lê e nunca escreve.

Credenciais

A chamada da biblioteca de credenciais fica atrás de uma interface, e o adaptador é stubado nesta versão, então openlimiter init não consegue guardar uma chave até um driver ser fornecido. Mais nada na sua máquina é tocado.

Detecção de connector

A detecção é uma função pura do ambiente que a CLI entrega a um connector. Fatos que só a CLI consegue observar, como um documento manual sentado no diretório de estado, chegam como marcadores explícitos, por isso openlimiter doctor nunca afirma que um connector está pronto quando ele não conseguiria receber dados.

terminal
openlimiter doctor
CONNECTOR DETECTED FRESHNESS DRIFT
claude no unknown UNVERIFIED
openrouter no unknown UNVERIFIED
codex no unknown UNVERIFIED
antigravity no unknown UNVERIFIED
opencode no unknown UNVERIFIED
manual yes fresh UNVERIFIED
CACHE ok DROPPED 0

Um cache que não consegue ser interpretado, ou um que foi interpretado com linhas descartadas, adiciona mais uma linha em vermelho dizendo isso. Ele reporta contra o cache, não contra um provedor, porque um arquivo corrompido não pode ser confiável para dizer de quem era a leitura que guardava.