Se você quer que o Claude Code seja realmente utilizável no macOS no dia a dia, a configuração que importa é: oh-my-zsh para contexto do terminal, /terminal-setup para tratamento de entrada e /statusline com um script customizado para ver custo, modelo e rate limits em tempo real. Todo o resto é opcional. Esta configuração funciona da mesma forma no Linux e dentro do WSL no Windows, com apenas pequenas diferenças nos caminhos de instalação.
Depois de configurar isso em múltiplos projetos de produção em WordPress e fluxo de trabalho de desenvolvimento, a diferença é imediata: você para de adivinhar quanto está gastando, qual 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.
A primeira vez que executei Claude Code, meu terminal estava igual a todo print que eu já tinha visto de gente reclamando disso: um prompt em branco, sem contexto, sem ideia de qual modelo estava rodando ou quanto de sessão sobrava. Só um cursor.
Isso durou cerca de dois dias antes de eu realmente começar a ler a documentação — e depois ir além dela.
O que se segue é a configuração real que executo — oh-my-zsh, os comandos Claude Code embutidos, e um script de statusline customizado que te mostra custo em tempo real, estado da janela de contexto, qual modelo está ativo e barras de rate limit. Sem nenhum pacote npm para isso.
Comece com oh-my-zsh
O macOS já vem com zsh, e a maioria das distribuições Linux modernas traz ele de fábrica ou permite instalar pelo gerenciador de pacotes. No macOS você também pode testar o iTerm2. Oh-my-zsh é o framework que torna isso utilizável. Instale com:
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
Abra ~/.zshrc e configure seus plugins. Os que realmente importam para um fluxo de trabalho Claude Code:
plugins=(git zsh-autosuggestions zsh-syntax-highlighting)
zsh-autosuggestions e zsh-syntax-highlighting não vêm agrupados, então você precisa instalá-los primeiro:
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 coloca seu branch atual no prompt do shell, para que você nunca troque de contexto para executar git branch enquanto estiver dentro de uma sessão Claude. zsh-autosuggestions completa comandos do histórico conforme você digita, o que ajuda quando suas chamadas de claude começam a acumular flags. zsh-syntax-highlighting colore comandos conforme você digita; caminhos ruins ficam vermelhos antes de você pressionar Enter.
Para um tema, Powerlevel10k é a escolha prática: rápido de renderizar, altamente configurável, e não compete com a saída de status do próprio Claude Code na parte inferior 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" em seu .zshrc e execute source ~/.zshrc para disparar o assistente de configuração.
Você também sempre pode executar a configuração com p10k configure.
Instale Claude Code no macOS
Anthropic oferece um instalador nativo que não requer Node.js:
curl -fsSL https://claude.ai/install.sh | sh
Ele se adiciona ao seu PATH deixando uma linha em ~/.zshrc. Faça source da sua configuração ou abra um novo terminal:
source ~/.zshrc
(No Linux, o mesmo script funciona. No Windows, execute isso dentro do WSL — Claude Code não tem suporte nativo para ambientes PowerShell)
Depois claude em qualquer diretório do projeto. A primeira execução pede autenticação da conta Anthropic. Depois disso, você está dentro.
O caminho npm (npm install -g @anthropic-ai/claude-code) ainda funciona se você já estiver em um ambiente Node, mas o instalador nativo é o que Anthropic testa e suporta primeiro. Menos dependências significa menos coisas que silenciosamente quebram entre atualizações do macOS.
/terminal-setup: faça isso antes de qualquer outra coisa
Uma vez que Claude Code está executando, digite:
/terminal-setup
Isso configura seu emulador de terminal para lidar corretamente com os atalhos de teclado do Claude Code. Os críticos: Shift+Enter para novas linhas dentro de um prompt sem enviar, e @ como disparador de referência de arquivo em vez de um caractere bruto.
Antes de executar isso, @ em muitas configurações de terminal ou não fazia nada ou passava como um token shell. Depois, abre o seletor de arquivo do Claude Code. Você referencia arquivos em sua base de código sem copiar caminhos manualmente.
Um comando, e você tornou Claude Code ainda mais poderoso.
/statusline: tornando Claude Code ainda mais inteligente
Agora, execute isso dentro de uma sessão Claude Code:
/statusline
Isso escreve a configuração statusline para ~/.claude/settings.json e configura um script em ~/.claude/statusline-command.sh. Esse script é o que realmente renderiza a barra de status: o Claude Code manda os dados da sessão para ele em JSON, via pipe, e ele formata a saída.
A saída padrão já é aceitável, mas dá para 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ê terá algo como isto:
[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 (Sonnet 4.6 é renderizado como 4.6, Opus 4.6 como 4.6 com uma cor diferente). Pasta é o diretório do projeto atual. Branch é o branch git ativo — ou no-branch fora de um repo. Custo é estimado a partir de contagens de tokens em tempo real. Depois temos a duração da sessão.
Linha 2 — Barras de rate limit. Blocos preenchidos (█) são quota consumida, blocos vazios (░) são o que resta. A cor muda com o uso: verde abaixo de 50%, laranja de 50–80%, vermelho brilhante acima de 80%. A barra de 5 horas é redefinida em uma janela rolante; a barra semanal é redefinida na segunda-feira.
Linha 3 — Um divisor fraco para separar visualmente o status do prompt.
O que está realmente em settings.json
O comando /statusline conecta isso a ~/.claude/settings.json:
{
"statusLine": {
"type": "command",
"command": "bash ~/.claude/statusline-command.sh"
}
}
O Claude Code executa esse comando toda vez que atualiza a barra de status, enviando o estado da sessão em JSON. O script lê isso com jq e devolve o texto formatado. Você pode editar o script diretamente para alterar o que é exibido, as cores, a largura da barra, qualquer coisa.
Por que cada elemento importa
A janela de contexto não é rastreada aqui: a statusline usa contagens de tokens para estimativa de custo, não um medidor de contexto. Para o estado da janela de contexto, o rodapé embutido do Claude Code lida com isso separadamente. Mas custo e rate limits são justamente onde a maioria das pessoas voa às cegas.
A exibição de custo constrói um senso de linha de base. Depois de uma semana de sessões, você sabe qual é o custo de uma refatoração típica. Quando uma sessão custa 3x isso, você nota imediatamente, antes do final da fatura mensal.
As barras de rate limit existem porque o Claude Code tem duas janelas de throttling separadas: um limite rolante de 5 horas e um limite semanal. Elas são independentes. Você pode consumir 80% da sua cota de 5 horas em uma sessão longa e ainda ter 90% da cota semanal. Saber qual das duas está apertando muda o que você faz em seguida: dá para esperar a janela de 5 horas virar antes de testar as alterações, ou é melhor seguir assim mesmo?
O indicador de modelo pega algo sutil: Claude Code pode mudar automaticamente de modelos durante uma sessão com base na carga ou no seu nível de plano. Ou você pode ter selecionado um modelo mais barato ou mais caro usando /models e esqueceu da mudança. Ver [4.6] versus o que você esperava lhe diz imediatamente se isso aconteceu.
Juntando tudo
Dois aliases que valem a pena adicionar a ~/.zshrc:
alias cc="claude"
alias ccc="claude --continue"
--continue retoma a última sessão em vez de iniciar uma nova. Para qualquer coisa além de uma correção rápida, é assim que o trabalho sustentado realmente funciona.
A forma completa de ~/.claude/settings.json, com 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), adicione esses a seu .zshrc ou .bashrc, dependendo do seu shell.
Tudo o mais em settings é opcional. O bloco statusline é o que ativa o script.
Depois de executar /terminal-setup e /statusline, seu ambiente de trabalho exibe: branch git no prompt do shell (via oh-my-zsh), modelo e branch na barra de status do Claude, custo e estado dos rate limits visíveis o tempo todo. Você sabe quando encerrar uma sessão antes do contexto se degradar. Você sabe o que está gastando. Você sabe com qual modelo você está realmente conversando.
O que isso não corrige
É importante deixar claro: nenhuma dessas mudanças tornará Claude mais inteligente. O modelo é o modelo. O que ela faz é te dar a informação necessária para trabalhar bem com ele: quando recomeçar do zero, quanto uma sessão está realmente custando e se algum rate limit está apertando.
Trabalhar sem essa informação é como programar sem saber se suas alterações foram salvas. Tecnicamente possível, 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 próprio script statusline é um arquivo bash simples que você possui e pode modificar. Entenda o que ele faz antes de editar: o schema JSON que o Claude Code envia muda de vez em quando entre releases, e o jq avisa rápido se você quebrou alguma coisa.
Acerte o ambiente primeiro. Tudo o mais funciona em cima dele.
Se você está integrando Claude em fluxos de trabalho de produção ou construindo recursos assistidos por IA para clientes, esse é o tipo de trabalho que faço.