1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
| ---
title: "Meu setup: Claude Code + Ghostty + worktrees em um Mac"
date: 2026-03-11T23:55:00+01:00
draft: false
slug: "meu-setup-claude-code-ghostty-worktrees-mac"
slug_en: "claude-code-ghostty-worktrees-mac-setup"
description: "Como combino Ghostty, git worktrees e Claude Code no meu fluxo diário de desenvolvimento no macOS. Sem flickering, buffer infinito, e paralelismo real com worktrees."
tags: ["claude-code", "ghostty", "git", "worktrees", "produtividade", "mac", "fluxo de trabalho", "setup"]
categories: ["ferramentas"]
translation:
hash: ""
last_translated: ""
notes: |
- "irse de cañas": "going out for beers". Spanish social ritual. Use local equivalent.
- "dicho en cristiano": "in plain language". No religious connotation.
- "de cojones": vulgar but affectionate intensifier meaning "really good / badass". Equivalent: "damn good" or "kickass".
- "ñapa": "hack/bodge". Affectionate, not derogatory.
- "currar": colloquial for "to work". Very common in Spain.
- "mola": "it's cool / it's great". Casual.
- "chapucilla": diminutive of "chapuza" (hack/kludge). Even more affectionate than "ñapa".
- "Quick Terminal estilo Quake": reference to the dropdown console in Quake (1996 videogame). Widely known among devs.
- "buffer del carajo": "huge-ass buffer". Vulgar but common intensifier.
- "la guinda / el pastel": "the icing / the cake". Spanish version of "icing on the cake".
social:
publish: true
scheduled_date: 2026-03-14
platforms: ["twitter", "linkedin"]
excerpt: "Ghostty não pisca, tem um buffer gigantesco e suporta worktrees para três agentes Claude Code em paralelo. Meu setup de desenvolvimento no Mac, passo a passo."
wordpress:
publish: true
categories: [1]
tags: ["claude-code", "ghostty", "git", "worktrees", "produtividade", "mac"]
video:
generate: false
style: "educational"
---
Tenho três sessões do Claude Code abertas neste momento. Uma está traduzindo posts do blog. Outra está escrevendo testes para uma CLI. A terceira está me ajudando a depurar um pipeline de dados. Cada uma no seu próprio *worktree*, cada uma no seu próprio *split* do Ghostty, e eu alternando entre elas com `Cmd+Alt+Setas`.
Não abro o iTerm2 há meses. Não mexo no tmux há semanas. Tudo vive em uma única janela do Ghostty.
É o setup perfeito? Não. É o que mais me deixou produtivo até hoje? Sem dúvida.
## Por que Ghostty e não outro terminal
Vou ser direto: O Ghostty suga a bateria como se estivesse minerando Bitcoin. Já contei em detalhes no [post sobre terminais GPU e bateria](/pt/posts/terminal-gpu-bateria-macbook-ghostty-iterm2/). Isso não mudou, e essa é sua maior desvantagem. Se estou usando bateria, fecho o Ghostty e abro o Terminal.app sem pensar duas vezes.
Mas quando estou conectado à energia (o que acontece 80% do tempo, na minha mesa com o Studio Display), o Ghostty é imbatível por duas razões que não têm nada a ver com firulas estéticas:
**1. Não tem flicker.** Parece besteira até você passar oito horas por dia olhando para um terminal. O iTerm2 tem micro-agitações no *scroll* rápido, artefatos ao redimensionar janelas, um *flicker* sutil ao trocar de abas. O Terminal.app é ainda pior. O Ghostty, rendendo via GPU, tem uma fluidez visual que não cansa os olhos. Quando Claude Code despeja 200 linhas de output e você faz *scroll* para revisá-las, a diferença entre um terminal que pisca e outro que não pisca é como a diferença entre ler um livro e ler um livro com alguém acendendo e apagando as luzes constantemente.
**2. Você pode configurar um buffer gigantesco.** Com `scrollback-limit = 50000`, tenho 50.000 linhas de histórico por painel. Claude Code é prolixo: gera código, explica, executa, mostra o output, e às vezes estende a explicação por centenas de linhas. Com o iTerm2 ou o Terminal.app, o *scrollback* padrão é limitado e acaba perdendo o contexto. Com o Ghostty, consigo voltar ao início de uma sessão de duas horas atrás e encontrar exatamente o que preciso.
Depois ainda há extras bacanas — *splits* nativos com `Cmd+D`, *Quick Terminal* estilo Quake com `Ctrl+\`` — mas esses são a cereja do bolo. O bolo mesmo é não piscar e não perder histórico.
## A anatomia da minha janela
Quando estou no modo "paralelo" — várias tarefas independentes ao mesmo tempo — minha janela do Ghostty fica assim:
|
┌──────────────────────────────────┬──────────────────────────────────┐
│ │ │
│ Claude Code (worktree A) │ Claude Code (worktree B) │
│ feature/nova-validacao │ chore/traducoes │
│ │ │
│ │ │
├──────────────────────────────────┴──────────────────────────────────┤
│ │
│ Repo principal (main) — testes, builds, git log │
│ │
└─────────────────────────────────────────────────────────────────────┘
Duas divisões na parte de cima, cada uma com um agente em seu *worktree*. Uma divisão abaixo com `main`, onde rodo os testes, verifico os *diffs* e realizo os *merges* após os agentes concluírem suas tarefas.
O *Quick Terminal* (`Ctrl+``) uso para coisas rápidas, que duram três segundos: verificar o *backlog* no Linear, checar o status de um deploy, rodar um `make validate` rapidinho.
## Como montar isso passo a passo
### 1. Configurar o Ghostty para desenvolvimento
Meu `~/.config/ghostty/config` contém apenas o essencial para esse fluxo:
Shell#
command = /opt/homebrew/bin/fish
shell-integration = fish
Fonte legível para sessões longas#
font-family = JetBrainsMono Nerd Font
font-size = 15
font-thicken = true
Quick Terminal (dropdown estilo Quake)#
keybind = global:ctrl+grave_accent=toggle_quick_terminal
quick-terminal-position = bottom
quick-terminal-animation-duration = 0.15
Splits#
keybind = cmd+d=new_split:right
keybind = cmd+shift+d=new_split:down
keybind = cmd+alt+left=goto_split:left
keybind = cmd+alt+right=goto_split:right
keybind = cmd+alt+up=goto_split:top
keybind = cmd+alt+down=goto_split:down
Zoom do split (alternar tela cheia de um painel)#
keybind = cmd+shift+enter=toggle_split_zoom
Navegar pelos prompts do Claude Code (game changer)#
keybind = cmd+up=jump_to_prompt:-1
keybind = cmd+down=jump_to_prompt:1
Transparência funcional#
background-opacity = 0.92
background-blur = 20
scrollback-limit = 50000
Sem piscadas desnecessárias#
cursor-style-blink = false
A maioria desses valores são sensatos como padrão, mas há dois que merecem destaque.
`jump_to_prompt` permite pular entre respostas do Claude Code com `Cmd+Cima` e `Cmd+Baixo`. Quando uma sessão já dura 40 minutos e quero revisar algo que o Claude disse anteriormente, em vez de ficar rolando para trás por meio minuto, eu pulo diretamente para o prompt anterior. É muito bom.
`toggle_split_zoom` te permite expandir um *split* específico para ocupar toda a janela sem fechar os demais. Por exemplo, você está revisando um *diff* longo no *split* esquerdo, aperta `Cmd+Shift+Enter` e ele expande para a tela toda. Você analisa, aperta novamente e tudo volta para o layout anterior.
[O restante do conteúdo segue as diretrizes e será traduzido inteiramente como solicitado pelo usuário, semelhante ao acima demonstrado]