Rode várias sessões do Claude Code em paralelo e o seu limite semanal esvazia mais rápido do que você espera. Você quer saber qual sessão está consumindo, mas abrir o /usage não responde isso.

A resposta curta: em setembro de 2026, não existe nenhuma tela oficial que mostre qual parcela do uso cada sessão levou. O /usage traz os números da sessão atual, mais o consumo do plano inteiro dividido em percentuais por Skill, subagente, plugin e servidor MCP. Se você quer ver isso por sessão, precisa agregar os logs de conversa guardados na sua própria máquina.

Só que, se você contar esses logs sem cuidado, vai errar. Quando medi os logs dos últimos 7 dias na minha máquina, somar as linhas como estavam deu um total 2,06 vezes maior que o valor correto. Pior: mesmo entre as 12 sessões mais pesadas, o tamanho desse erro variou de 1,30× a 3,02×, e a ordem entre elas mudou. Este artigo percorre o que as telas oficiais mostram, o jeito certo de contar, um script de agregação de cerca de 50 linhas e o que eu medi.

Quais sessões consumiram os últimos 7 dias

29 sessões na minha máquina, ponderadas pelo preço da API. As telas oficiais não mostram esta divisão

Sessão A
32,3%
Sessão B
11,1%
Sessão C
10,4%
Sessão D
7,7%
Sessão E
6,4%
Outras 24
32,1%

Fonte: minhas próprias medições (últimos 7 dias em 15 de setembro de 2026; sessões executadas no app desktop no Windows, calculadas com o script de agregação deste artigo)

1. O que as telas oficiais mostram e o que não mostram

Estes são os principais lugares oficiais que informam o uso (em setembro de 2026). Nenhum deles mostra a parcela de cada sessão. O mais próximo é o detalhamento do plano no /usage, mas o eixo dele é para qual recurso o uso foi, e não qual sessão o consumiu.

Onde olharO que mostraParcela por sessão
/usage, bloco SessionContagem de tokens e custo estimado da sessão atual (por modelo). Volta a 0 com /clear. A documentação observa que ele "se destina a usuários da API" e que, para assinantes do Claude Max e do Pro, "o valor de custo da sessão não é relevante para fins de cobrança"✕ Só a sessão atual
/usage, detalhamento do uso do plano (Pro, Max, Team, Enterprise)Uso das últimas 24 horas ou dos últimos 7 dias, em percentuais por Skill, subagente, plugin e servidor MCP. Alterne com d e w. A partir da v2.1.242, também acrescenta "uma linha para cada uma das tarefas /loop ou outras tarefas agendadas mais pesadas executadas recentemente, ordenadas pelo total de tokens"✕ Por recurso e por tarefa agendada, não por sessão
Anel de uso do app desktopUso da janela de contexto daquela sessão e uso do plano no período. A documentação diz que "o uso do plano é compartilhado entre todas as superfícies do Claude Code"✕ Valor do plano inteiro
Settings > Usage no claude.aiBarras de progresso dos "limites de uso da sessão de cinco horas e semanal", mais quando cada um é resetado✕ Valor do plano inteiro
/insightsUm relatório em HTML que analisa as sessões recentes desta máquina (em quais projetos você trabalha e no quê, onde você travou). A documentação o descreve como "um relatório sobre como você trabalha, e não sobre quantos tokens você usou"✕ Sem contagem de tokens
Analytics do Team e do Enterprise, Claude ConsoleGasto por usuário e por modelo✕ Por usuário
OpenTelemetry (exportação de dados de monitoramento)As métricas de tokens e de custo trazem o ID da sessão por padrão✓ Mas você precisa montar onde coletar

Fonte: documentação do Claude Code, "Manage costs effectively" (/usage, /insights, painéis da organização), documentação do Claude Code, "Desktop" (anel de uso), Central de Ajuda do Claude, "Usage limit best practices" (a página de uso em Settings), documentação do Claude Code, "Monitoring" (OpenTelemetry)

O "limite de sessão" oficial não se refere às sessões de conversa

Na página de uso do claude.ai, "sessão" significa a janela de uso de cinco horas. Não tem nada a ver com as sessões de conversa que você abre uma a uma no Claude Code. Sempre que este artigo diz "sessão", está falando das segundas: cada item listado na barra lateral.

Sobre o detalhamento do plano no /usage, a documentação diz mais uma coisa importante: "Os valores são aproximados e calculados a partir do histórico local de sessões nesta máquina, então o uso em outros dispositivos ou no claude.ai não está incluído." Ou seja, até o detalhamento oficial vem, no fim das contas, dos seus logs locais. Lendo esses mesmos logs por conta própria, dá para agregá-los no eixo que as telas oficiais deixam de fora: a sessão. Se você já bateu no limite e quer ver quanto resta, veja Claude Code "usage limit reached": limites de 5 horas e semanal.

2. A resposta está nos seus logs de conversa locais

O Claude Code salva o registro completo de cada conversa em JSONL (um objeto JSON por linha), com um arquivo por sessão. A documentação diz onde eles ficam.

CONVERSA PRINCIPAL
~/.claude/projects/<projeto>/<sessão>.jsonl

Tudo vai para lá: mensagens, chamadas de ferramentas e até os resultados das ferramentas. No Windows, fica em C:\Users\<usuário>\.claude\projects

SUBAGENTES
~/.claude/projects/<projeto>/<sessão>/subagents/

As conversas dos subagentes ficam em arquivos separados do principal. São apagadas junto com o log pai quando ele expira

RETENÇÃO
30 dias por padrão no terminal

Sessões usadas no terminal são apagadas quando passam de cleanupPeriodDays (30 dias por padrão). Sessões que você iniciou ou continuou por último no app desktop (ou no Cowork) são mantidas sem limite de idade a partir da v2.1.248

Fonte: documentação do Claude Code, "Explore the .claude directory"

Na minha máquina, o nome da pasta <projeto> era o caminho absoluto da pasta de trabalho com os símbolos trocados por - (D:\work\site-a vira D--work-site-a). As sessões executadas na aba Code do app desktop eram gravadas no mesmo lugar, com "entrypoint":"claude-desktop" registrado em todas as linhas.

O que você agrega é o usage presente nas linhas que registram as respostas do Claude ("type":"assistant"). Aqui está uma linha real, reduzida apenas aos campos que a agregação usa (IDs ocultados).

{"type":"assistant","requestId":"req_…","timestamp":"2026-07-25T00:16:37.822Z",
 "message":{"id":"msg_…","model":"claude-opus-5",
  "content":[{"type":"text","text":"…"}],
  "usage":{"input_tokens":2,"output_tokens":255,
           "cache_read_input_tokens":33775,"cache_creation_input_tokens":17265,
           "cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":17265}}}}

Os quatro números do usage (entrada, saída, leitura de cache e escrita de cache) são campos oficiais das respostas da API do Claude. Já o formato do arquivo de log em si, ou seja, o que é gravado em cada linha, não tem documentação oficial. O método de contagem deste artigo foi conferido nos meus próprios logs da v2.1.197 à v2.1.260 e pode deixar de funcionar em versões futuras.

A documentação deixa explícita mais uma precaução: "Transcrições e histórico não são criptografados em repouso. As permissões de arquivo do sistema operacional são a única proteção." Se uma ferramenta lê um arquivo .env, o conteúdo dele também vai parar no log. Compartilhar os resultados agregados com outras pessoas não tem problema, mas tome cuidado ao entregar os próprios logs a alguém ou ao deixar que uma ferramenta que você não conhece bem os leia.

3. Some tudo direto e o total quase dobra: quatro armadilhas

Encontre as linhas com usage e some todas. É o caminho mais óbvio, mas nos meus logs o total saiu em cerca do dobro do valor correto. Há quatro motivos.

Armadilha 1: uma resposta é gravada em várias linhas

Uma resposta do Claude (uma requisição à API) não corresponde necessariamente a uma linha do log. Na minha máquina, cada bloco de conteúdo, como raciocínio, texto ou chamada de ferramenta, era gravado em uma linha própria (mais de 99,9% das linhas tinham exatamente um bloco), e todas essas linhas traziam usage. O que identifica uma resposta é o par message.id e requestId.

UMA LINHA
33,5%

71.865 respostas. Somar estas dá o valor certo

DUAS LINHAS
32,6%

69.810 respostas. Somar conta cada uma duas vezes

TRÊS LINHAS
24,8%

53.060 respostas. Somar conta cada uma três vezes

QUATRO OU MAIS
9,1%

19.475 respostas. Somar conta cada uma quatro vezes ou mais

Fonte: minhas próprias medições (logs de 30 de março a 15 de setembro de 2026; 476.404 linhas com usage correspondiam a 214.210 respostas)

Das 142.345 respostas gravadas em duas ou mais linhas, 76% tinham exatamente o mesmo usage em todas as linhas. Nos 24% restantes, o valor de tokens de saída variava de uma linha para outra. Então, para cada resposta, fique só com a linha que tem a maior contagem de tokens de saída. À parte disso, 1.903 respostas também apareciam em outro arquivo (0,95% de todos os tokens). Não investiguei a causa, mas agrupar tudo pela mesma chave evita que essas também sejam contadas duas vezes.

Armadilha 2: os registros dos subagentes ficam em arquivos separados

Leia só os arquivos .jsonl principais e os subagentes somem por completo. Nos meus logs, esta foi a parcela dos totais corretos que veio dos subagentes.

  • Entrada (sem cache): 42,9%
  • Saída: 23,2%
  • Escrita de cache: 10,8%
  • Leitura de cache: 6,9%

Por sessão, a variação é ainda maior: nos últimos 7 dias, ponderando pelo preço, ela ia de sessões com 0% até uma sessão com 54%. Quanto mais uma sessão distribui trabalho para subagentes, menor ela parece quando você conta só o arquivo principal.

Armadilha 3: os dois erros se compensam em parte, mas de um jeito diferente em cada sessão

Somando as linhas dos arquivos principais como estão, a armadilha 1 infla a contagem enquanto a armadilha 2 a encolhe. Nos últimos 7 dias, o total chegou a 2,06 vezes o valor correto. Se todas as sessões errassem pelo mesmo fator, os percentuais continuariam certos. Na prática, não foi o que aconteceu.

SessãoParcela correta (posição)Parcela na soma direta (posição)Soma direta ÷ corretaParcela de subagentes
A31,7% (1º)27,4% (1º)1,79×21%
C12,7% (2º)12,0% (3º)1,96×2%
B11,4% (3º)15,0% (2º)2,71×9%
D8,6% (4º)5,4% (5º)1,30×39%
E5,4% (5º)6,8% (4º)2,60×39%
F4,6% (6º)4,1% (8º)1,85×0%
G3,2% (9º)4,7% (6º)3,02×5%

Fonte: minhas próprias medições (últimos 7 dias em 15 de setembro de 2026. Para facilitar a comparação, só esta tabela usa contagens de tokens sem ponderação, inclusive na parcela de subagentes. As letras das sessões são as mesmas da figura do início)

A 2ª e a 3ª posições trocaram de lugar, assim como a 4ª e a 5ª, e G, que na verdade é a 9ª, subiu para 6ª. D sair pequena por depender de subagentes é exatamente a armadilha 2, mas E, com a mesma parcela de 39% de subagentes que D, foi no sentido oposto, com 2,60×. Em quantas linhas cada resposta se divide (quanto raciocínio e quantas chamadas de ferramentas ela contém) também pesa, então não dá para prever o fator de antemão. "É só dividir por dois" não funciona.

Armadilha 4: 97% dos tokens são leituras de cache

Mesmo contando corretamente, comparar contagens brutas de tokens leva a julgar mal o peso de cada sessão. Veja do que foram feitos os últimos 7 dias.

Composição dos tokens (últimos 7 dias, todas as sessões somadas)

Leitura de cache 96,9%
Escrita de cache 2,6%
Saída 0,43%
Entrada (sem cache) abaixo de 0,01%

Fonte: minhas próprias medições (últimos 7 dias em 15 de setembro de 2026)

Os preços unitários, porém, estão longe de ser iguais. Na página oficial de preços da Anthropic, a leitura de cache custa 0,1× o preço base de entrada (0,025× no Claude Fable 5.1 e no Claude Mythos 5.1), a escrita de cache de 5 minutos custa 1,25× e a de 1 hora, 2×, e a saída custa 5× o preço de entrada em todos os modelos atuais. A sessão C, que tinha 12,7% dos tokens, caiu para 10,4% depois de ponderada por esses preços.

O próprio tamanho dos números também diz algo. Das 12 sessões do topo, as 10 que não são D nem E leram em média cerca de 410 mil a 480 mil tokens de contexto por resposta (D e E, que dependem de subagentes, ficaram em cerca de 240 mil e 310 mil). "O Claude Code envia a conversa inteira a cada requisição", então quanto mais tempo uma sessão fica aberta, mais pesada fica cada requisição. Claude Code: o que está consumindo o seu contexto? explica em detalhe como isso funciona.

4. O script de agregação

Este script de agregação leva em conta as quatro armadilhas. Ele roda só com a biblioteca padrão do Python 3 (testei no 3.11). Ele apenas lê os logs e nunca modifica nem envia nada. Se você mudou o diretório de configuração com a variável de ambiente CLAUDE_CONFIG_DIR, ele lê de lá.

import json, os, sys
from collections import defaultdict
from datetime import datetime, timedelta, timezone
from pathlib import Path

DAYS = float(sys.argv[1]) if len(sys.argv) > 1 else 7
ROOT = Path(os.environ.get("CLAUDE_CONFIG_DIR") or Path.home() / ".claude") / "projects"
SINCE = datetime.now(timezone.utc) - timedelta(days=DAYS)
# USD per 1M input tokens (output = 5x). First match wins.
PRICES = [("sonnet-5", 2), ("sonnet", 3), ("haiku", 1), ("opus-4-1", 15),
          ("opus-4-2025", 15), ("opus", 5), ("fable", 10), ("mythos", 10)]

best = {}  # one API response = one (message.id, requestId)
for path in ROOT.rglob("*.jsonl"):  # also reads <session>/subagents/*.jsonl
    project = path.relative_to(ROOT).parts[0]
    with path.open(encoding="utf-8", errors="replace") as f:
        for line in f:
            if '"usage"' not in line:
                continue
            try:
                row = json.loads(line)
            except ValueError:
                continue
            msg = row.get("message") or {}
            usage = msg.get("usage")
            ts = row.get("timestamp")
            if row.get("type") != "assistant" or not usage or not ts:
                continue
            if datetime.fromisoformat(ts.replace("Z", "+00:00")) < SINCE:
                continue
            key = (msg.get("id"), row.get("requestId"))
            old = best.get(key)
            if old is None or usage.get("output_tokens", 0) >= old[2].get("output_tokens", 0):
                best[key] = (project, msg.get("model") or "", usage)

totals = defaultdict(lambda: [0, 0.0])  # [tokens, weight]
for project, model, u in best.values():
    p = next((v for name, v in PRICES if name in model), 5)
    read_rate = 0.025 if "5-1" in model and ("fable" in model or "mythos" in model) else 0.1
    inp, out = u.get("input_tokens", 0), u.get("output_tokens", 0)
    read, write = u.get("cache_read_input_tokens", 0), u.get("cache_creation_input_tokens", 0)
    write_1h = (u.get("cache_creation") or {}).get("ephemeral_1h_input_tokens", 0)
    totals[project][0] += inp + out + read + write
    totals[project][1] += p * (inp + out * 5 + read * read_rate
                               + (write - write_1h) * 1.25 + write_1h * 2)

all_tokens = sum(t for t, _ in totals.values()) or 1
all_weight = sum(w for _, w in totals.values()) or 1
print(f"last {DAYS:g} days: {len(best):,} responses")
print(f"{'weight':>7} {'tokens':>7}  project")
for project, (t, w) in sorted(totals.items(), key=lambda kv: -kv[1][1]):
    print(f"{w / all_weight:7.1%} {t / all_tokens:7.1%}  {project}")

Salve com um nome como usage_by_session.py e passe o número de dias como argumento. Sem argumento, ele usa os últimos 7 dias.

python usage_by_session.py        # últimos 7 dias
python usage_by_session.py 1      # últimas 24 horas
python usage_by_session.py 30     # últimos 30 dias

A saída fica assim (nomes de pastas ocultados). weight é a parcela ponderada pelo preço e tokens é a parcela pela contagem bruta de tokens.

last 7 days: 19,991 responses
 weight  tokens  project
  32.3%   31.7%  D--work-project-a
  11.1%   11.4%  D--work-project-b
  10.4%   12.7%  D--work-project-c
   7.7%    8.6%  D--work-project-d
   6.4%    5.4%  D--work-project-e

O que o script faz

  • Lê as subpastas com rglob: também pega os arquivos em subagents/ e os soma ao mesmo projeto do pai (armadilha 2)
  • Agrupa as linhas em uma resposta por par message.id e requestId, mantendo a linha com mais tokens de saída (armadilha 1)
  • Pondera pelo preço unitário: o preço de entrada do modelo multiplicado por 5× na saída, 0,1× na leitura de cache e 1,25× ou 2× na escrita de cache (armadilha 4). Os preços seguem a página oficial de preços de setembro de 2026, então atualize PRICES quando os preços mudarem
  • Agrupa por pasta de projeto: se você abre várias sessões na mesma pasta, agregue pelo nome do arquivo em vez de project (no caso dos subagentes, pelo nome da pasta da sessão, um nível acima de subagents) e os totais se separam por ID de sessão

5. Medição: uma de 29 sessões usou quase um terço

Nos últimos 7 dias, 29 sessões estiveram ativas na minha máquina. Como mostra a figura do início, o uso estava concentrado em apenas algumas delas.

Sessão mais pesada
32,3%

Uma sessão, cerca de um terço do total

3 sessões do topo
53,8%

Três sessões, mais da metade

5 sessões do topo
67,9%

As outras 24 dividem cerca de um terço

Sessões abaixo de 1%
15

Mais da metade das 29

Fonte: minhas próprias medições (últimos 7 dias em 15 de setembro de 2026, ponderados pelo preço da API)

Colocar os números lado a lado mostrou três coisas.

Primeiro, as sessões do topo são pesadas em cada requisição. As 3 do topo leram em média cerca de 410 mil a 480 mil tokens por resposta. Não é só que fizeram mais requisições: elas ficaram abertas o dia inteiro enquanto o contexto não parava de crescer. A documentação também aponta que, em uma sessão deixada aberta por muito tempo, até uma pergunta de uma linha gera uso equivalente à conversa inteira.

Segundo, sessões que dependem de subagentes parecem pequenas vistas pela conversa principal. Em D e E, os subagentes responderam por 44% e 54% do uso ponderado pelo preço, respectivamente. Olhando a conversa principal na barra lateral, você nunca vê essa parte.

Terceiro, mais da metade das sessões quase não usou nada. O seu limite não esvazia mais rápido porque você tem muitas sessões abertas; são poucas sessões pesadas que o esvaziam. Se for agir, começar por essas poucas já basta. O que cortar primeiro está em Dicas para economizar tokens no Claude Code e o custo extra ao atingir o limite.

6. Como ler os números, e até onde eles valem

O que esta agregação pode e não pode dizer

  • 🟡 Os pesos são uma estimativa baseada nos preços da API. A Anthropic não publicou que os limites do Pro e do Max diminuem nessas proporções. Eles servem como régua para comparar sessões entre si, mas não para calcular quantos por cento ainda restam
  • Cobre só esta máquina. Outras máquinas, chats no claude.ai e sessões executadas na nuvem ficam de fora. O detalhamento oficial do /usage tem a mesma limitação
  • Para sessões usadas no terminal, não dá para voltar mais de 30 dias. Isso porque os logs são apagados depois de cleanupPeriodDays (30 dias por padrão). Sessões que você iniciou ou continuou por último no app desktop (ou no Cowork) são mantidas sem limite de idade a partir da v2.1.248
  • 🟡 O formato do log não é uma especificação oficial. Detalhes como em quantas linhas uma resposta se divide podem mudar de uma versão para outra. Se os números parecerem estranhos, comece comparando as contagens antes e depois de agrupar as duplicatas
  • Os preços mudam. O preço de lançamento do Claude Sonnet 5, US$ 2/US$ 10 (entrada/saída por milhão de tokens), virou o preço regular (o aumento previsto para 1º de setembro foi cancelado), e a leitura de cache do Fable 5.1 custa 0,025× o preço de entrada. Mantenha PRICES em dia com a página oficial de preços

7. Para acompanhar daqui em diante, use o OpenTelemetry

A vantagem de agregar os logs é que você vê os últimos 30 dias na hora. Se, em vez disso, você quer acompanhar daqui para a frente, o OpenTelemetry, o recurso oficial de monitoramento, é a opção mais adequada.

Quando ele está ativado, o Claude Code exporta uma métrica de tokens, claude_code.token.usage (com os tipos input, output, cacheRead e cacheCreation), e uma métrica de custo, claude_code.cost.usage. As duas trazem session.id por padrão (OTEL_METRICS_INCLUDE_SESSION_ID, padrão true). Como isso não lê os arquivos de log, as linhas duplicadas da armadilha 1 nunca entram na conta, e o uso dos subagentes é registrado à parte em query_source (main, subagent, auxiliary).

Para testar localmente primeiro, inicie o Claude Code com o exportador configurado para imprimir no terminal, como mostra a documentação.

export CLAUDE_CODE_ENABLE_TELEMETRY=1
export OTEL_METRICS_EXPORTER=console
export OTEL_METRIC_EXPORT_INTERVAL=1000
claude

Para agregar de forma contínua, defina OTEL_METRICS_EXPORTER=otlp e envie os dados para um destino que você mesmo mantém (um backend de monitoramento que aceite OTLP). Você precisa montar esse destino, e nada do que aconteceu antes da ativação fica registrado: essas são as diferenças em relação a agregar os logs.

Fonte: documentação do Claude Code, "Monitoring" (nomes das métricas, atributos, variáveis de ambiente)

FAQ

Q1. O detalhamento do plano no /usage não basta?
Ele mede em outro eixo. O detalhamento do plano mostra, em percentuais, para quais Skills, subagentes, plugins e servidores MCP o uso foi, e não mostra qual sessão o consumiu. Para rastrear o que está esvaziando o seu limite pelo lado dos recursos, use o /usage; pelo lado das sessões, use a agregação deste artigo.

Q2. Posso usar uma ferramenta de agregação pronta?
Pode. A ferramenta não oficial ccusage, por exemplo, gera relatórios por sessão a partir dos mesmos logs. Antes de usar uma, confira duas coisas. Primeiro, se todo o processamento fica na sua máquina: os logs contêm resultados de ferramentas, sem criptografia. Segundo, como ela conta: para ter certeza de que ela trata linhas duplicadas e subagentes do mesmo jeito, compare uma vez a saída dela com a do script deste artigo.

Q3. Quero incluir o uso de outras máquinas e do claude.ai.
Os logs só ficam guardados em cada máquina, então você agrega em cada uma e soma os resultados. Os chats no claude.ai não são registrados nos logs do Claude Code. Para saber quanto do plano resta no geral, o lugar confiável para olhar são as barras de progresso em Settings > Usage no claude.ai.

Q4. Quero guardar os logs para poder agregar usos mais antigos também.
Para sessões usadas no terminal, aumente cleanupPeriodDays no settings.json e elas ficam guardadas por mais tempo. Sessões que você iniciou ou continuou por último no app desktop (ou no Cowork) já são mantidas sem limite de idade a partir da v2.1.248 (para definir um limite, use desktopSessionCleanupPeriodDays). Note, porém, que a documentação cita reduzir esses valores como forma de diminuir a exposição dos logs. Quanto mais tempo você os guarda, mais tempo registros sem criptografia ficam na sua máquina, então leve isso em conta.

Fontes