Configuração de um MacBook para AI engineering: ferramentas e fluxo de trabalho no macOS

Tradução automática

Este artigo foi traduzido automaticamente a partir da versão original em inglês.

Esta é a configuração que aplico a um MacBook novo antes de começar trabalho de AI engineering. Destina-se a engenheiros que preparam um Mac com Apple Silicon para trabalho com Python e AI. Abrange as ferramentas de linha de comandos que o macOS não inclui, o Homebrew, Python com uv, a shell, as escolhas de terminal e editor, os agentes de programação, o Docker e as ferramentas de modelos locais.

Alguns passos são obrigatórios e outros são preferências minhas. Xcode Command Line Tools, Homebrew, Git e um fluxo de trabalho de Python são a base. Warp, iTerm2, Powerlevel10k, Cursor e as ferramentas para correr modelos locais são escolhas. Os comandos abaixo instalam a base; as secções seguintes registam as escolhas adicionais que faço.

Os passos seguem esta ordem:

  1. Ferramentas de linha de comandos do Xcode.
  2. Homebrew.
  3. uv e Python.
  4. Oh My Zsh.
  5. Plugins e Powerlevel10k.

O terminal, o editor, os contentores e os modelos locais são escolhas independentes. Se saltar algum deles, os passos acima continuam a funcionar.

Ferramentas de linha de comandos e Homebrew

Comece pelas ferramentas de linha de comandos da Apple:

xcode-select --install

O macOS abre uma caixa de diálogo que guia a instalação.

O Homebrew é o gestor de pacotes que uso no resto desta configuração. O instalador oficial é um único comando:

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

O instalador explica o que vai alterar e pede confirmação. O guia de instalação do Homebrew enumera as alterações e os prefixos predefinidos.

Para executar uma revisão verificada do instalador, descarregue o script, verifique o SHA-256 e execute a cópia local. Este bloco usa o commit 150c69d:

(
    set -e
    homebrew_installer="$(mktemp)"
    trap 'rm -f "$homebrew_installer"' EXIT
    curl --proto '=https' --tlsv1.2 --fail --location --show-error https://raw.githubusercontent.com/Homebrew/install/150c69df1e54b0b74c9fcca5a201410a2300816a/install.sh -o "$homebrew_installer"
    printf '%s  %s\n' 12479a24be3f5307eecac7cde670fad7118640f031229e964f544b1367b52a41 "$homebrew_installer" | shasum -a 256 --check
    less "$homebrew_installer"
    /bin/bash "$homebrew_installer"
)

O commit e o SHA-256 fixam o script de instalação que executa. Esse script continua a instalar a versão mais recente do Homebrew, e os comandos de pacotes seguintes instalam as versões atuais. Fixar o commit não prova quem o escreveu.

No Apple Silicon, o Homebrew instala em /opt/homebrew, que não está no PATH predefinido. O instalador imprime os comandos que resolvem isto, mas não os executa. Execute-os por si:

echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> ~/.zprofile
eval "$(/opt/homebrew/bin/brew shellenv)"

A primeira linha torna o brew disponível em cada nova login shell. A segunda torna-o disponível na shell atual. .zprofile vs .zshrc explica porque é que a linha vai para o .zprofile.

Instale as ferramentas de linha de comandos que uso com regularidade:

brew install uv htop gitmoji pandoc ncdu tmux
  • O uv gere versões de Python, ambientes, dependências, comandos e lockfiles. A secção seguinte configura-o.
  • O htop é um monitor visual do sistema e dos processos.
  • O tmux mantém várias sessões de terminal a correr numa só janela.
  • O ncdu mostra a utilização do disco por diretório.
  • O gitmoji acrescenta emojis às mensagens de commit.
  • O pandoc converte documentos entre formatos.

Python com uv e pyenv

Antes de adotar o uv, usava o pyenv para gerir ambientes de Python. Hoje, o uv cobre o meu fluxo de trabalho do dia a dia. Instale a versão mais recente de Python gerida pelo uv:

uv python install

Isto instala a versão mais recente disponível para o uv no momento da configuração. Execute-a com uv run python ou comece um projeto com uv init. Para uma versão específica de um projeto, use o processo de fixação descrito no meu guia rápido para gerir Python no macOS com uv.

Uso o pyenv quando preciso de um interpretador compilado a partir do código-fonte ou de opções de compilação do CPython que as distribuições pré-compiladas do uv não oferecem. O pyenv compila o Python a partir do código-fonte, por isso precisa primeiro destas bibliotecas. A lista segue o ambiente de compilação sugerido do pyenv:

brew install pyenv openssl@3 readline sqlite3 xz tcl-tk@8 libb2 zstd zlib pkgconfig
  • O openssl fornece suporte SSL/TLS ao módulo ssl do Python.
  • O readline acrescenta edição de linha e histórico ao interpretador interativo.
  • O sqlite3 é a base de dados embebida por trás do módulo sqlite3 do Python.
  • O xz, o zlib e o zstd fornecem compressão de dados.
  • O tcl-tk@8 compila o módulo de interface gráfica tkinter, o libb2 fornece hashing BLAKE2 e o pkgconfig ajuda a compilação a encontrar as outras bibliotecas.

O uv não precisa de nenhum destes pacotes. Salte este bloco se não usa o pyenv.

Terminal

O Terminal predefinido do macOS serve perfeitamente. Usei o iTerm2 durante anos e mudei recentemente para o Warp, um terminal escrito em Rust com funcionalidades de AI integradas. O tema de prompt que surge mais à frente neste artigo, o Powerlevel10k, exige uma alteração em cada terminal: definir a fonte como MesloLGS NF. No Warp, abra também Settings → Appearance e, em Input, defina Input type como Shell (PS1). O Warp desenha o seu próprio prompt por predefinição, por isso, sem esta alteração, não verá o prompt do Powerlevel10k (documentação de prompt do Warp).

Se ficar com o iTerm2, estas são as duas definições que altero:

Ativar a edição de texto natural

  1. Abra Preferences → Profiles → Keys → Key Mappings.
  2. Abra o menu pendente Presets….
  3. Selecione “Natural Text Editing”.

Escolher um tema de cores

  1. Explore os temas em iTerm2-Color-Schemes.
  2. Abra Preferences → Profiles → Colors → Color Presets…
  3. Selecione Import e escolha o tema descarregado.

Zsh e Oh My Zsh

O macOS usa o Zsh como login shell predefinida. Uso o /bin/zsh incluído no sistema; instale o Zsh do Homebrew apenas quando precisar de uma versão upstream específica mais recente.

Verifique o Zsh instalado e a login shell atual:

echo "$SHELL"
command -v zsh
zsh --version

Se o Zsh estiver instalado mas não estiver selecionado como login shell, mude para a cópia incluída no sistema:

chsh -s /bin/zsh

Abra um novo terminal depois de mudar a login shell.

O Oh My Zsh acrescenta as predefinições e o sistema de plugins que uso. O instalador oficial é:

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

O instalador muda o nome de um ~/.zshrc existente para ~/.zshrc.pre-oh-my-zsh e escreve um novo a partir do seu modelo. Copie do ficheiro antigo para o novo as definições que quer manter. Execute omz update quando quiser uma versão mais recente do Oh My Zsh. Por predefinição, ele também pergunta a cada 13 dias se quer atualizar.

As duas secções seguintes acrescentam plugins e um tema, e ambas editam o ~/.zshrc. A figura mostra que ficheiro contém que linha, que linhas altera e para onde cada linha aponta no disco.

Os dois ficheiros de arranque com as suas linhas: o ~/.zprofile contém a linha brew shellenv, que coloca /opt/homebrew/bin no PATH; o ~/.zshrc contém a linha ZSH_THEME, que aponta para o tema clonado em ZSH_CUSTOM/themes, a lista plugins, que indica os plugins incluídos e os dois clonados em ZSH_CUSTOM/plugins, com o zsh-syntax-highlighting em último, a linha source que carrega o Oh My Zsh e a linha que lê o ~/.p10k.zsh escrito pelo p10k configureOs dois ficheiros de arranque com as suas linhas: o ~/.zprofile contém a linha brew shellenv, que coloca /opt/homebrew/bin no PATH; o ~/.zshrc contém a linha ZSH_THEME, que aponta para o tema clonado em ZSH_CUSTOM/themes, a lista plugins, que indica os plugins incluídos e os dois clonados em ZSH_CUSTOM/plugins, com o zsh-syntax-highlighting em último, a linha source que carrega o Oh My Zsh e a linha que lê o ~/.p10k.zsh escrito pelo p10k configure

Acrescentar plugins

Instale o zsh-autosuggestions e o zsh-syntax-highlighting no diretório de plugins personalizados do Oh My Zsh:

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

O zsh-autosuggestions sugere comandos do seu histórico enquanto escreve. O zsh-syntax-highlighting colore cada comando enquanto escreve, por isso os erros de escrita aparecem antes de carregar em Enter.

No ~/.zshrc, substitua a linha plugins=(git) do modelo pelos plugins das ferramentas deste artigo:

plugins=(
    git brew docker docker-compose macos python tmux vscode
    zsh-autosuggestions zsh-syntax-highlighting
)

Acrescente pyenv à lista se o instalou. Mantenha zsh-syntax-highlighting em último lugar no array. A minha lista inclui também aws, gcloud, kubectl e pre-commit. Acrescente plugins como estes apenas quando usar a ferramenta correspondente, porque cada plugin aumenta o tempo de arranque da shell. A wiki de plugins do Oh My Zsh descreve os plugins incluídos.

O Powerlevel10k e a sua fonte

O Powerlevel10k é o tema de Zsh que uso. Mostra no prompt o diretório de trabalho, o estado do Git e o ambiente de Python ativo, e inclui um assistente de configuração interativo. Instale-o para o Oh My Zsh:

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

No ~/.zshrc, substitua a linha ZSH_THEME="robbyrussell" por:

ZSH_THEME="powerlevel10k/powerlevel10k"

Abra uma nova shell e execute p10k configure. O assistente grava as suas escolhas em ~/.p10k.zsh.

Os ícones do Powerlevel10k precisam da fonte MesloLGS NF. O p10k configure pode instalar a fonte automaticamente no iTerm2. Para outros terminais e editores, descarregue e instale os quatro ficheiros TTF do guia de fontes do Powerlevel10k e depois selecione a fonte. No Warp, abra Settings → Appearance → Text e defina Terminal font como MesloLGS NF. No VS Code ou no Cursor, defina a fonte do terminal integrado:

  1. Abra as definições do seu editor.
  2. Procure terminal.integrated.fontFamily.
  3. Defina-a como MesloLGS NF.

Editores e agentes de programação

Mantenho um editor aberto e corro um ou dois agentes de programação ao lado. Hoje em dia uso o Cursor com o Codex e o Claude Code a correr em paralelo.

  • O Cursor é um fork do VS Code com programação em par com AI integrada. Use-o quando quiser que o modelo edite código dentro do editor.
  • O VS Code tem o catálogo de extensões maior. Use-o quando precisar de uma extensão que o Cursor não suporta.
  • O Claude Code e o Codex CLI são agentes de programação que correm no terminal. Leem o repositório, editam ficheiros e executam comandos. Use-os para alterações que abrangem muitos ficheiros ou para tarefas que precisam de correr testes.
  • O GitHub Desktop é um cliente Git para quando não me apetece passar para a CLI.

Todos se instalam como casks do Homebrew:

brew install --cask cursor visual-studio-code claude-code codex github

O Homebrew não atualiza o Claude Code sozinho; execute brew upgrade claude-code. Se preferir atualizações automáticas, use antes o instalador nativo da Anthropic: curl -fsSL https://claude.ai/install.sh | bash.

Contentores e modelos locais

As restantes ferramentas dependem do trabalho que planeio fazer na máquina. A configuração da shell e do Python não depende de contentores nem de modelos locais.

  • O Docker Desktop é o runtime de contentores que uso. A licença é gratuita para uso pessoal e para pequenas empresas com menos de 250 trabalhadores e menos de $10 milhões de receita anual. As empresas maiores precisam de um plano pago (licença do Docker Desktop).
  • O Podman Desktop é open source e não tem essa condição de licença. Use-o quando a sua empresa ultrapassa esses limites e não paga o Docker.
  • O Ollama corre como serviço em segundo plano com uma API local. Use-o quando scripts ou uma aplicação chamam o modelo.
  • O LM Studio é uma aplicação de desktop para encontrar, carregar e comparar modelos. Use-o quando quiser experimentar modelos à mão. Também pode servir uma API local.

Também se instalam como casks:

brew install --cask docker-desktop   # or podman-desktop
brew install --cask ollama-app       # or lm-studio

LLMs locais no macOS compara em detalhe o Ollama, o LM Studio, o llama.cpp e o MLX-LM.

Repetir a configuração no próximo Mac

O Homebrew consegue registar as fórmulas e os casks desta configuração num Brewfile e instalá-los numa máquina nova:

brew bundle dump --file ~/Brewfile
brew bundle --file ~/Brewfile

Execute o primeiro comando no Mac antigo; acrescente --force para substituir um Brewfile existente. No Mac novo, instale Xcode Command Line Tools e Homebrew, execute o passo brew shellenv e depois o segundo comando.

Guarde o Brewfile e cópias de .zprofile, .zshrc e .p10k.zsh sem segredos num repositório de dotfiles. Repita a instalação do Python gerido pelo uv e os passos manuais do Oh My Zsh, dos plugins, do Powerlevel10k e da fonte. Restaure os ficheiros de configuração da shell depois de instalar o Oh My Zsh, porque o instalador reescreve o .zshrc. Volte a aplicar as definições do terminal e do editor.

Um Brewfile regista os nomes dos pacotes sem fixar as versões. Os pacotes restaurados podem ser mais recentes; a documentação do Homebrew Bundle explica esta limitação.

Referências