Este projeto contém um script customizado para a statusLine do Claude CLI, fornecendo informações em tempo real sobre a sessão, uso de modelos e limites de taxa de forma visual e organizada.
O script statusline-command.sh é executado pelo Claude CLI a cada interação. Ele funciona da seguinte forma:
- Captura de Dados: Recebe um JSON contendo o estado atual da sessão via
stdin. - Snapshot de Depuração: Salva o JSON recebido em
last_input.jsonpara permitir inspeção manual dos dados brutos (tokens, limites, etc). - Processamento: Extrai os campos necessários usando
jq(oupythoncomo fallback). - Estatísticas Persistentes: Lê o arquivo
stats-cache.jsonpara recuperar o histórico de mensagens do dia. - Saída Visual: Imprime uma linha única formatada com cores ANSI para o terminal.
statusline-command.sh: O "motor" que processa os dados e gera a barra de status.last_input.json: Snapshot da última interação. Útil para verificar como o Claude CLI reporta tokens de cache e limites de taxa.stats-cache.json: Banco de dados local (JSON) que armazena:dailyActivity: Contagem de mensagens, sessões e chamadas de ferramentas (toolCallCount) por dia.dailyModelTokens: Distribuição de uso de tokens por modelo específico.modelUsage: Métricas acumulativas de tokens de entrada, saída e cache (read/creation).
- Identificação do Modelo: Exibe o nome do modelo de forma compacta (remove o prefixo "Claude" e sufixos de data).
- Integração com Git: Mostra a branch atual se você estiver dentro de um repositório Git.
- Monitoramento de Contexto: Exibe o uso da janela de contexto de forma compacta, com percentual e volume usado/total.
- Contagem de Tokens: Exibe os tokens acumulados da sessão (entrada
↑e saída↓, formatados emk) para evitar resets visuais entre atualizações. - Estatísticas Diárias: Mostra quantas mensagens foram enviadas hoje com base no
stats-cache.json. - Limites de Taxa (Rate Limits): Alertas visuais para o uso das cotas de 5 horas e 7 dias.
A forma mais simples de distribuir e manter todo mundo atualizado é instalar via Git em ~/.claude/statusline e atualizar com git pull.
- Claude CLI
- Git
- Bash
- Windows: Git for Windows (Git Bash) já resolve.
- macOS: bash/zsh nativo.
- jq (opcional) ou python/python3 (fallback já usado pelo script)
No macOS/Linux: rode no Terminal.
No Windows: rode no Git Bash (Git for Windows) ou via WSL (o .sh não executa nativamente no PowerShell).
1 comando (recomendado):
curl -fsSL https://raw.githubusercontent.com/alepspizzetti/statusline-ai/HEAD/install.sh | bashIsso vai:
- clonar/atualizar em
~/.claude/statusline - configurar
~/.claude/settings.jsoncom ostatusLine
Copie/cole no PowerShell:
$repo = "https://github.com/alepspizzetti/statusline-ai.git"
$dest = Join-Path $HOME ".claude\statusline"
if (Test-Path (Join-Path $dest ".git")) {
git -C $dest pull --ff-only
} else {
New-Item -ItemType Directory -Path (Split-Path $dest) -Force | Out-Null
git clone $repo $dest
}
$settingsPath = Join-Path $HOME ".claude\settings.json"
New-Item -ItemType Directory -Path (Split-Path $settingsPath) -Force | Out-Null
$settings = @{}
if (Test-Path $settingsPath) {
try { $settings = (Get-Content $settingsPath -Raw | ConvertFrom-Json -AsHashtable) } catch { $settings = @{} }
}
$settings["statusLine"] = @{ type = "command"; command = 'bash -lc "~/.claude/statusline/statusline-command.sh"' }
$settings | ConvertTo-Json -Depth 10 | Set-Content -Encoding UTF8 $settingsPathSe o
bashnão estiver no PATH, abra o Git Bash uma vez (ele geralmente ajusta o PATH), ou use o caminho completo dobash.exe.
Copie/cole no terminal:
REPO="https://github.com/alepspizzetti/statusline-ai.git"
DEST="$HOME/.claude/statusline"
mkdir -p "$HOME/.claude"
if [ -d "$DEST/.git" ]; then
git -C "$DEST" pull --ff-only
else
git clone "$REPO" "$DEST"
fi
chmod +x "$DEST/statusline-command.sh"
python3 - <<'PY'
import json, os
settings_path = os.path.expanduser('~/.claude/settings.json')
os.makedirs(os.path.dirname(settings_path), exist_ok=True)
data = {}
if os.path.exists(settings_path):
try:
with open(settings_path, 'r', encoding='utf-8') as f:
data = json.load(f)
except Exception:
data = {}
data['statusLine'] = {
'type': 'command',
'command': 'bash -lc "~/.claude/statusline/statusline-command.sh"'
}
with open(settings_path, 'w', encoding='utf-8') as f:
json.dump(data, f, indent=2)
f.write('\n')
PYA qualquer momento:
git -C ~/.claude/statusline pull --ff-onlySe quiser automatizar, a ideia é agendar um git pull --ff-only:
- Windows (Task Scheduler): rodar no logon ou daily:
powershell.exe -NoProfile -Command "git -C $HOME\.claude\statusline pull --ff-only" - macOS (LaunchAgent): rodar periodicamente:
bash -lc 'git -C ~/.claude/statusline pull --ff-only'
(Se preferir, a gente pode adicionar scripts update.ps1/update.sh e os arquivos de agendamento no repo.)
A saída segue este padrão visual:
Modelo [branch] | ctx: 25% [50k/200k] | tokens: ↑1.2k ↓567 | Limits(5h:10%@13:15(2h:28m) | 7d:5%@sex 23:00(4d11h))
| Campo | Descrição | Cores |
|---|---|---|
| Modelo | Nome abreviado do modelo em uso. | Ciano |
| [branch] | Branch Git atual (se disponível). | Azul |
| ctx: X% | Percentual de uso da janela de contexto. | Verde/Amarelo/Vermelho |
| [50k/200k] | Uso atual e total da janela de contexto. | Colorida conforme o % |
| tokens | Fluxo da interação atual: entrada (↑) e saída (↓). | Ciano (↑) / Verde (↓) |
| 5h / 7d | Uso das cotas de rate limit. | Ciano (baixo) / Amarelo (médio) / Vermelho (alto) |
- Bash: Ambiente de execução.
- jq (Recomendado): Para processamento rápido de JSON.
- Python (Fallback): Caso o
jqnão esteja instalado, o script utiliza Python para processar os dados. - Git: Necessário para exibir informações de branch.