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.
