Installation

Install via CLI

npx @vector-labs/skills add setup-statusline-cost

Or target a specific tool

npx @vector-labs/skills add setup-statusline-cost --tool cursor
View on GitHub

Skill Files (2)

SKILL.md 2.9 KB
---
name: setup-statusline-cost
description: Configura statusline no Claude Code que exibe custo da sessao, modelo, duracao, tokens e uso de contexto em tempo real. Use quando o usuario quiser monitorar custo ou configurar a statusline.
license: Apache-2.0
compatibility: claude-code
disable-model-invocation: true
allowed-tools: Bash Read Edit Write AskUserQuestion
metadata:
  author: vector-labs-payments
  version: "1.0"
---

# Setup Statusline de Custo

Configura uma statusline no rodape do Claude Code que exibe metricas de custo e uso em tempo real.

Formato exibido:

```
Opus 4.6 | $0.42 | 3m 12s | in 45.2k / out 8.7k | 32% ctx
```

---

## FASE 0: PRE-REQUISITOS

### 0.1 Verificar jq

```bash
command -v jq >/dev/null 2>&1 && echo "OK" || echo "MISSING"
```

**Se MISSING:**
- Informe: "O comando `jq` e necessario. Instale com: `brew install jq` (macOS) ou `apt install jq` (Linux)."
- **PARE a execucao.**

### 0.2 Verificar se ja existe statusline configurada

```bash
jq -r '.statusLine // empty' "$HOME/.claude/settings.json" 2>/dev/null
```

**Se ja existe**, pergunte ao usuario:
- **Pergunta:** "Ja existe uma statusline configurada. Deseja substituir?"
- **Opcoes:**
  - `Sim` - Substituir pela statusline de custo
  - `Nao` - Cancelar
- **Se `Nao`:** **PARE a execucao.**

---

## FASE 1: INSTALAR SCRIPT

### 1.1 Copiar script para ~/.claude/

Leia o conteudo do arquivo `scripts/statusline.sh` que esta nesta skill e escreva em `$HOME/.claude/statusline.sh`.

### 1.2 Tornar executavel

```bash
chmod +x "$HOME/.claude/statusline.sh"
```

---

## FASE 2: CONFIGURAR SETTINGS

### 2.1 Criar settings.json se nao existir

```bash
mkdir -p "$HOME/.claude"
[ -f "$HOME/.claude/settings.json" ] || echo '{}' > "$HOME/.claude/settings.json"
```

### 2.2 Adicionar statusLine (merge nao-destrutivo)

Use jq para fazer merge preservando TODAS as chaves existentes:

```bash
TEMP_FILE=$(mktemp)
jq '.statusLine = {"type": "command", "command": "~/.claude/statusline.sh"}' "$HOME/.claude/settings.json" > "$TEMP_FILE" && mv "$TEMP_FILE" "$HOME/.claude/settings.json"
```

---

## FASE 3: CONFIRMAR

Exiba esta mensagem EXATA:

```
Statusline de custo configurada!

Arquivo instalado:
  ~/.claude/statusline.sh

Configuracao adicionada em:
  ~/.claude/settings.json โ†’ statusLine

Reinicie o Claude Code para ativar.
Saia com /exit ou Ctrl+C e inicie novamente com `claude`.

Formato exibido:
  Opus 4.6 | $0.42 | 3m 12s | in 45.2k / out 8.7k | 32% ctx

Cores do contexto:
  Verde  โ†’ < 50%
  Amarelo โ†’ 50-74%
  Vermelho โ†’ >= 75%

Para personalizar, edite ~/.claude/statusline.sh
```

**PARE a execucao apos exibir esta mensagem.**

---

## NOTAS PARA O AGENTE

1. **Nao sobrescreva** configuracoes existentes no settings.json - use jq merge
2. **Se o usuario cancelar** em qualquer fase, pare e nao altere nada
3. **Use SEMPRE `$HOME`** ao inves de `~` em variaveis bash para evitar problemas de expansao
4. **SEMPRE informe sobre o restart** ao final
scripts/
statusline.sh 1.7 KB
#!/bin/bash
# Claude Code statusline โ€” uses pre-calculated fields for accuracy
# Docs: https://code.claude.com/docs/en/statusline
export LC_ALL=C

input=$(cat)

# Extract pre-calculated fields (accurate, no manual math needed)
MODEL=$(echo "$input" | jq -r '.model.display_name // "Unknown"')
COST=$(echo "$input" | jq -r '.cost.total_cost_usd // 0')
DURATION_MS=$(echo "$input" | jq -r '.cost.total_duration_ms // 0')
PCT=$(echo "$input" | jq -r '.context_window.used_percentage // 0' | cut -d. -f1)
IN_TOK=$(echo "$input" | jq -r '.context_window.total_input_tokens // 0')
OUT_TOK=$(echo "$input" | jq -r '.context_window.total_output_tokens // 0')

# Format token counts with k suffix for readability
format_tokens() {
  local n=$1
  if [ "$n" -ge 1000 ]; then
    printf "%.1fk" "$(awk -v n="$n" 'BEGIN { printf "%.1f", n / 1000 }')"
  else
    printf "%d" "$n"
  fi
}
IN_TOK_FMT=$(format_tokens "$IN_TOK")
OUT_TOK_FMT=$(format_tokens "$OUT_TOK")

# Format cost
COST_FMT=$(printf '$%.2f' "$COST")

# Format duration
DURATION_SEC=$((DURATION_MS / 1000))
MINS=$((DURATION_SEC / 60))
SECS=$((DURATION_SEC % 60))
if [ "$MINS" -gt 59 ]; then
  HOURS=$((MINS / 60))
  MINS=$((MINS % 60))
  TIME_FMT="${HOURS}h ${MINS}m"
else
  TIME_FMT="${MINS}m ${SECS}s"
fi

# Color context by usage threshold
GREEN='\033[32m'; YELLOW='\033[33m'; RED='\033[31m'
DIM='\033[2m'; RESET='\033[0m'

if [ "$PCT" -ge 75 ]; then CTX_COLOR="$RED"
elif [ "$PCT" -ge 50 ]; then CTX_COLOR="$YELLOW"
else CTX_COLOR="$GREEN"; fi

printf "${DIM}%s${RESET} | ${DIM}%s${RESET} | ${DIM}%s${RESET} | ${DIM}in %s / out %s${RESET} | ${CTX_COLOR}%s%% ctx${RESET}\n" \
  "$MODEL" "$COST_FMT" "$TIME_FMT" "$IN_TOK_FMT" "$OUT_TOK_FMT" "$PCT"

License (Apache-2.0)

View full license text
Licensed under Apache-2.0