Claude Code no macOS: oh-my-zsh, Statusline, Custos

Uma configuração Claude Code para macOS que funciona: configuração oh-my-zsh, statusline mostrando custo ao vivo, modelo e rate limits, e as configurações que valem a pena alterar.

10 de abril de 2026
9 min de leitura
Tags
Claude CodeTutorial

Se você quer que o Claude Code seja usável de verdade no macOS no dia a dia, a configuração que importa é esta: oh-my-zsh pra dar contexto ao terminal, /terminal-setup pro tratamento de teclas e /statusline com um script próprio pra ver custo, modelo e rate limits em tempo real. O resto é opcional. A mesma configuração funciona igual no Linux e dentro do WSL no Windows, só com diferenças pequenas nos caminhos de instalação.

Depois de montar isso em vários projetos de produção, no meu fluxo de trabalho com WordPress, a diferença aparece na hora: você para de adivinhar quanto está gastando, que modelo está usando e quando vai bater no limite. Ganho de produtividade real, economia real. E a configuração inteira leva menos de 10 minutos.

Na primeira vez que rodei o Claude Code, o meu terminal estava igualzinho a todo print que eu já tinha visto de gente reclamando dele: um prompt vazio, sem contexto, sem ideia de qual modelo estava rodando ou de quanto sobrava da sessão. Só um cursor.

Isso durou uns dois dias, até eu começar a ler a documentação de verdade, e depois ir além dela.

O que vem a seguir é a configuração que eu uso: oh-my-zsh, os comandos embutidos do Claude Code e um script de statusline próprio que mostra custo em tempo real, estado da janela de contexto, modelo ativo e barras de rate limit. Sem pacote npm nenhum pra isso.

Comece pelo oh-my-zsh

O macOS já vem com zsh, e a maioria das distribuições Linux modernas também traz ou deixa instalar pelo gerenciador de pacotes. No macOS dá pra testar também o iTerm2. O oh-my-zsh é o framework que deixa o zsh usável. Instale com:

sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

Abra o ~/.zshrc e configure os plugins. Os que fazem diferença num fluxo de trabalho com Claude Code:

plugins=(git zsh-autosuggestions zsh-syntax-highlighting)

O zsh-autosuggestions e o zsh-syntax-highlighting não vêm junto, então você precisa instalar antes:

git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
git clone https://github.com/zsh-users/zsh-syntax-highlighting ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting

O que cada um faz: o plugin git põe o branch atual no prompt do shell, então você nunca precisa sair do contexto pra rodar git branch no meio de uma sessão do Claude. O zsh-autosuggestions completa comandos a partir do histórico enquanto você digita, o que ajuda quando as suas chamadas de claude começam a acumular flags. O zsh-syntax-highlighting colore os comandos enquanto você digita; caminho errado fica vermelho antes de você apertar Enter.

Pra tema, o Powerlevel10k é a escolha prática: renderiza rápido, é bem configurável e não briga com a saída de status do próprio Claude Code na parte de baixo do terminal.

git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k

Depois defina ZSH_THEME="powerlevel10k/powerlevel10k" no .zshrc e rode source ~/.zshrc pra abrir o assistente de configuração.

Dá pra rodar a configuração de novo quando quiser, com p10k configure.

Instale o Claude Code no macOS

A Anthropic tem um instalador nativo que não precisa de Node.js:

curl -fsSL https://claude.ai/install.sh | sh

Ele se coloca no PATH acrescentando uma linha no ~/.zshrc. Recarregue a configuração ou abra um terminal novo:

source ~/.zshrc

(No Linux, o mesmo script funciona. No Windows, o Claude Code agora também roda nativamente; o guia de Windows mostra quando ainda vale rodar dentro do WSL.)

Depois é só rodar claude em qualquer pasta de projeto. Na primeira vez ele pede pra autenticar a conta da Anthropic. Feito isso, você está dentro.

O caminho pelo npm (npm install -g @anthropic-ai/claude-code) continua funcionando se você já vive num ambiente Node, mas o instalador nativo é o que a Anthropic testa e suporta primeiro. Menos dependência quer dizer menos coisa quebrando em silêncio entre uma atualização do macOS e outra.

/terminal-setup: faça isso antes de qualquer outra coisa

Com o Claude Code rodando, digite:

/terminal-setup

Isso configura o seu emulador de terminal pra lidar direito com os atalhos de teclado do Claude Code. Os principais: Shift+Enter pra pular linha dentro do prompt sem enviar, e @ como gatilho de referência a arquivo, em vez de um caractere solto.

Antes disso, em muita configuração de terminal o @ não fazia nada ou passava como token do shell. Depois, ele abre o seletor de arquivos do Claude Code. Você referencia arquivos do seu código sem copiar caminho na mão.

Um comando, e o Claude Code fica bem mais útil.

/statusline: deixando o Claude Code mais esperto

Agora rode isto dentro de uma sessão do Claude Code:

/statusline

Isso grava a configuração da statusline em ~/.claude/settings.json e cria um script em ~/.claude/statusline-command.sh. É esse script que desenha a barra de status: o Claude Code manda os dados da sessão pra ele em JSON, via pipe, e ele formata a saída.

A saída padrão já serve, mas dá pra melhorar bastante passando algumas instruções junto com o comando:

/statusline Add two line, one with the model being used, the branch you are working on, costs, and session time. In the second line, add the rate limits for the 5-hour period and the week period.

Você vai ter algo assim:

[4.6] 📁 project | 🌿 no-branch | $0.00 | 🕐 46h 57m 56s
5-hour: [░░░░░░░░] 100% avail   Week: [█░░░░░░░] 87% avail
──────────────────────────────────────────────

Linha por linha:

Linha 1. [Model] mostra a versão do modelo ativo (o Sonnet 4.6 aparece como 4.6, o Opus 4.6 também como 4.6, em outra cor). Pasta é o diretório do projeto atual. Branch é o branch ativo do git, ou no-branch fora de um repositório. O custo é estimado a partir da contagem de tokens em tempo real. Depois vem a duração da sessão.

Linha 2. Barras de rate limit. Bloco cheio (█) é cota consumida, bloco vazio (░) é o que sobra. A cor muda com o uso: verde abaixo de 50%, laranja entre 50% e 80%, vermelho forte acima de 80%. A barra de 5 horas zera numa janela móvel; a semanal zera na segunda-feira.

Linha 3. Um divisor discreto pra separar visualmente o status do prompt.

O que vai no settings.json

O comando /statusline liga isso no ~/.claude/settings.json:

{
  "statusLine": {
    "type": "command",
    "command": "bash ~/.claude/statusline-command.sh"
  }
}

O Claude Code roda esse comando toda vez que atualiza a barra de status, mandando o estado da sessão em JSON. O script lê com jq e devolve o texto formatado. Você pode editar o script direto pra mudar o que aparece, as cores, a largura da barra, o que quiser.

Por que cada elemento importa

A janela de contexto não aparece aqui: a statusline usa a contagem de tokens pra estimar custo, e não como medidor de contexto. O estado da janela de contexto fica por conta do rodapé embutido do Claude Code. Mas custo e rate limit são justamente onde quase todo mundo anda no escuro.

Ver o custo te dá uma referência. Depois de uma semana de sessões, você sabe quanto custa uma refatoração típica. Quando uma sessão custa 3x isso, você percebe na hora, e não quando chega a fatura do mês.

As barras de rate limit existem porque o Claude Code tem duas janelas de limite separadas: uma móvel de 5 horas e uma semanal. Uma não depende da outra. Dá pra consumir 80% da cota de 5 horas numa sessão longa e ainda ter 90% da semanal. Saber qual das duas está apertando muda o que você faz depois: vale esperar a janela de 5 horas virar antes de testar as alterações, ou é melhor seguir assim mesmo?

O indicador de modelo pega uma coisa sutil: o Claude Code pode trocar de modelo sozinho no meio da sessão, conforme a carga ou o seu plano. Ou você mesmo pode ter escolhido um modelo mais barato ou mais caro com /models e esquecido. Ver [4.6] quando você esperava outra coisa te mostra na hora que isso aconteceu.

Juntando tudo

Dois aliases que valem a pena no ~/.zshrc:

alias cc="claude"
alias ccc="claude --continue"

O --continue retoma a última sessão em vez de abrir uma nova. Pra qualquer coisa além de uma correção rápida, é assim que o trabalho contínuo funciona de verdade.

O ~/.claude/settings.json completo, com a statusline e a configuração mínima de permissões:

{
  "statusLine": {
    "type": "command",
    "command": "bash ~/.claude/statusline-command.sh"
  },
  "permissions": {
    "defaultMode": "default"
  }
}

No Windows (WSL), coloque os aliases no .zshrc ou no .bashrc, conforme o seu shell.

O resto do settings é opcional. É o bloco da statusline que ativa o script.

Depois de rodar /terminal-setup e /statusline, o seu ambiente mostra: branch do git no prompt do shell (pelo oh-my-zsh), modelo e branch na barra de status do Claude, custo e situação dos rate limits visíveis o tempo todo. Você sabe quando encerrar uma sessão antes de o contexto degradar. Sabe quanto está gastando. Sabe com qual modelo está conversando de fato.

O que isso não resolve

Vale deixar claro: nenhuma dessas mudanças deixa o Claude mais inteligente. O modelo é o modelo. O que elas fazem é te dar a informação necessária pra trabalhar bem com ele: quando recomeçar do zero, quanto uma sessão está custando de verdade e se algum rate limit está apertando.

Trabalhar sem essa informação é como programar sem saber se as alterações foram salvas. Dá, tecnicamente, mas uma hora você descobre do jeito difícil.

Os comandos /terminal-setup e /statusline estão na documentação oficial do Claude Code. O script da statusline é um arquivo bash simples, que é seu e que você pode mudar. Entenda o que ele faz antes de editar: o formato do JSON que o Claude Code manda muda de vez em quando entre versões, e o jq avisa rápido se você quebrou alguma coisa.

Acerte o ambiente primeiro. O resto roda em cima dele.


Numa máquina, isso leva dez minutos. Num time, o problema é outro. Cada pessoa fica com permissões padrão diferentes, um CLAUDE.md que ninguém mais leu e resultados inconsistentes que acabam na conta do modelo. Levar o Claude Code pra um time é decidir uma vez o que o .claude/settings.json compartilhado libera, quais checagens toda sessão roda e quem revisa o que o agente entrega, e depois versionar isso no repositório como qualquer outra configuração. Definir esse padrão faz parte do meu trabalho como CTO fracionado. Se o seu time chegou nesse ponto, me conta como ele usa o Claude Code hoje.

Leia Mais Artigos

Mais artigos pra ler

Voltar para o Blog