Configuración de un MacBook para AI engineering: herramientas y flujo de trabajo en macOS

Traducción automática

Este artículo se tradujo automáticamente a partir de la versión original en inglés.

Esta es la configuración que aplico a un MacBook recién estrenado antes de trabajar en AI engineering. Está pensada para ingenieros que preparan un Mac con Apple Silicon para trabajar con Python y AI. Cubre las herramientas de línea de comandos que macOS no incluye, Homebrew, Python con uv, el shell, la elección de terminal y editor, los agentes de programación, Docker y las herramientas para modelos locales.

Algunos pasos son necesarios y otros son preferencias mías. Xcode Command Line Tools, Homebrew, Git y un flujo de trabajo con Python son la base. Warp, iTerm2, Powerlevel10k, Cursor y los ejecutores de modelos locales son elecciones. Los comandos siguientes instalan la base; las secciones posteriores recogen las elecciones que hago sobre ella.

Los pasos se siguen en este orden:

  1. Herramientas de línea de comandos de Xcode.
  2. Homebrew.
  3. uv y Python.
  4. Oh My Zsh.
  5. Plugins y Powerlevel10k.

Terminal, editor, contenedores y modelos locales son elecciones independientes. Si te saltas alguno, los pasos anteriores siguen funcionando.

Herramientas de línea de comandos y Homebrew

Empieza por las herramientas de línea de comandos de Apple:

xcode-select --install

macOS abre un cuadro de diálogo que te guía por la instalación.

Homebrew es el gestor de paquetes que uso en el resto de esta configuración. Su instalador oficial es un solo comando:

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

El instalador explica qué va a cambiar y pide confirmación. La guía de instalación de Homebrew enumera los cambios y los prefijos predeterminados.

Para ejecutar una revisión del instalador que hayas comprobado, descarga el script, comprueba su SHA-256 y ejecuta la copia local. Este bloque usa el 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"
)

El commit y el SHA-256 fijan el script de instalación que ejecutas. Ese script sigue instalando la última versión de Homebrew, y los comandos posteriores instalan las versiones actuales de los paquetes. Fijar el commit no demuestra quién lo escribió.

En Apple Silicon, Homebrew se instala en /opt/homebrew, que no está en el PATH predeterminado. El instalador muestra los comandos que lo corrigen, pero no los ejecuta. Ejecútalos tú:

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

La primera línea hace que brew esté disponible en cada nuevo shell de login. La segunda lo hace disponible en el actual. .zprofile frente a .zshrc explica por qué la línea va en .zprofile.

Instala las herramientas de línea de comandos que uso a menudo:

brew install uv htop gitmoji pandoc ncdu tmux
  • uv gestiona versiones de Python, entornos, dependencias, comandos y lockfiles. La siguiente sección lo configura.
  • htop es un monitor visual del sistema y de los procesos.
  • tmux mantiene varias sesiones de terminal en ejecución en una sola ventana.
  • ncdu muestra el uso de disco por directorio.
  • gitmoji añade emojis a los mensajes de commit.
  • pandoc convierte documentos entre formatos.

Python con uv y pyenv

Antes de adoptar uv, usaba pyenv para gestionar los entornos de Python. Ahora uv cubre mi flujo de trabajo diario. Instala la última versión de Python gestionada por uv:

uv python install

Esto instala la última versión disponible para uv en el momento de la configuración. Ejecútala con uv run python o empieza un proyecto con uv init. Para una versión específica de un proyecto, usa el flujo de fijación de versiones de mi guía rápida para gestionar Python en macOS con uv.

Uso pyenv cuando necesito un intérprete compilado desde el código fuente u opciones de compilación de CPython personalizadas que las distribuciones precompiladas de uv no ofrecen. pyenv compila Python desde el código fuente, así que antes necesita estas bibliotecas. La lista sigue el entorno de compilación recomendado de pyenv:

brew install pyenv openssl@3 readline sqlite3 xz tcl-tk@8 libb2 zstd zlib pkgconfig
  • openssl aporta el soporte de SSL/TLS para el módulo ssl de Python.
  • readline añade edición de línea e historial al intérprete interactivo.
  • sqlite3 es la base de datos embebida que hay detrás del módulo sqlite3 de Python.
  • xz, zlib y zstd aportan compresión de datos.
  • tcl-tk@8 compila el módulo de interfaz gráfica tkinter, libb2 aporta el hash BLAKE2 y pkgconfig ayuda a la compilación a encontrar las demás bibliotecas.

uv no necesita ninguno de estos paquetes. Omite este bloque si no usas pyenv.

Terminal

El Terminal predeterminado de macOS es suficiente. Usé iTerm2 durante años y hace poco me pasé a Warp, un terminal escrito en Rust con funciones de AI integradas. El tema del prompt que aparece más adelante en este artículo, Powerlevel10k, necesita un cambio en cada terminal: poner la fuente MesloLGS NF. En Warp, abre también Settings → Appearance y, en Input, cambia Input type a Shell (PS1). Warp dibuja su propio prompt de forma predeterminada, así que sin este cambio no verás el prompt de Powerlevel10k (documentación del prompt de Warp).

Si te quedas con iTerm2, estos son los dos ajustes que cambio:

Activar la edición de texto natural

  1. Abre Preferences → Profiles → Keys → Key Mappings.
  2. Abre el desplegable Presets….
  3. Selecciona “Natural Text Editing”.

Elegir un tema de color

  1. Explora los temas en iTerm2-Color-Schemes.
  2. Abre Preferences → Profiles → Colors → Color Presets…
  3. Selecciona Import y elige el tema descargado.

Zsh y Oh My Zsh

macOS usa Zsh como shell de login predeterminado. Uso el /bin/zsh incluido; instala el Zsh de Homebrew solo cuando necesites una versión upstream concreta más reciente.

Comprueba el Zsh instalado y el shell de login actual:

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

Si Zsh está instalado pero no está seleccionado como shell de login, cambia a la copia incluida:

chsh -s /bin/zsh

Abre un terminal nuevo después de cambiar el shell de login.

Oh My Zsh añade los valores predeterminados y el sistema de plugins que uso. Su instalador oficial es:

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

El instalador renombra un ~/.zshrc existente a ~/.zshrc.pre-oh-my-zsh y escribe uno nuevo a partir de su plantilla. Copia los ajustes que quieras conservar del archivo antiguo al nuevo. Ejecuta omz update cuando quieras una versión más reciente de Oh My Zsh. De forma predeterminada, también te pregunta cada 13 días si quieres actualizar.

Las dos secciones siguientes añaden plugins y un tema, y ambas editan ~/.zshrc. La figura muestra qué archivo contiene cada línea, qué líneas cambias y a dónde apunta cada una en el disco.

Los dos archivos de arranque con sus líneas: ~/.zprofile contiene la línea brew shellenv, que añade /opt/homebrew/bin al PATH; ~/.zshrc contiene la línea ZSH_THEME, que apunta al tema clonado en ZSH_CUSTOM/themes, la lista plugins, que nombra los plugins incluidos y los dos clonados en ZSH_CUSTOM/plugins, con zsh-syntax-highlighting al final, la línea source que carga Oh My Zsh y la línea que lee ~/.p10k.zsh, escrito por p10k configureLos dos archivos de arranque con sus líneas: ~/.zprofile contiene la línea brew shellenv, que añade /opt/homebrew/bin al PATH; ~/.zshrc contiene la línea ZSH_THEME, que apunta al tema clonado en ZSH_CUSTOM/themes, la lista plugins, que nombra los plugins incluidos y los dos clonados en ZSH_CUSTOM/plugins, con zsh-syntax-highlighting al final, la línea source que carga Oh My Zsh y la línea que lee ~/.p10k.zsh, escrito por p10k configure

Añadir plugins

Instala zsh-autosuggestions y zsh-syntax-highlighting en el directorio de plugins personalizados de 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"

zsh-autosuggestions te sugiere comandos de tu historial mientras escribes. zsh-syntax-highlighting colorea cada comando mientras lo escribes, así que las erratas se ven antes de pulsar Intro.

En ~/.zshrc, sustituye la línea plugins=(git) de la plantilla por los plugins de las herramientas de este artículo:

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

Añade pyenv a la lista si lo instalaste. Mantén zsh-syntax-highlighting en último lugar del array. Mi propia lista incluye también aws, gcloud, kubectl y pre-commit. Añade plugins como estos solo si usas esa herramienta, porque cada plugin alarga el arranque del shell. La wiki de plugins de Oh My Zsh describe los plugins incluidos.

Powerlevel10k y su fuente

Powerlevel10k es el tema de Zsh que uso. Muestra en el prompt el directorio de trabajo, el estado de Git y el entorno de Python activo, e incluye un asistente de configuración interactivo. Instálalo para Oh My Zsh:

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

En ~/.zshrc, sustituye la línea ZSH_THEME="robbyrussell" por:

ZSH_THEME="powerlevel10k/powerlevel10k"

Abre un shell nuevo y ejecuta p10k configure. El asistente guarda tus elecciones en ~/.p10k.zsh.

Los iconos de Powerlevel10k necesitan la fuente MesloLGS NF. p10k configure puede instalar la fuente automáticamente en iTerm2. Para otros terminales y editores, descarga e instala los cuatro archivos TTF de la guía de fuentes de Powerlevel10k y luego selecciona la fuente. En Warp, abre Settings → Appearance → Text y cambia Terminal font a MesloLGS NF. En VS Code o Cursor, configura la fuente del terminal integrado:

  1. Abre los ajustes de tu editor.
  2. Busca terminal.integrated.fontFamily.
  3. Ponlo en MesloLGS NF.

Editores y agentes de programación

Tengo un editor abierto y ejecuto uno o dos agentes de programación a su lado. Últimamente uso Cursor con Codex y Claude Code en paralelo.

  • Cursor es un fork de VS Code con programación en pareja con AI integrada. Úsalo cuando quieras que el modelo edite el código dentro del editor.
  • VS Code tiene el catálogo de extensiones más amplio. Úsalo cuando necesites una extensión que Cursor no admite.
  • Claude Code y Codex CLI son agentes de programación que se ejecutan en el terminal. Leen el repositorio, editan archivos y ejecutan comandos. Úsalos para cambios que afectan a muchos archivos o para tareas que necesitan ejecutar tests.
  • GitHub Desktop es un cliente de Git para cuando no quiero pasar a la CLI.

Todos se instalan como casks de Homebrew:

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

Homebrew no actualiza Claude Code por sí solo; ejecuta brew upgrade claude-code. Si prefieres actualizaciones automáticas, usa en su lugar el instalador nativo de Anthropic: curl -fsSL https://claude.ai/install.sh | bash.

Contenedores y modelos locales

Las herramientas restantes dependen del trabajo que pienso hacer en la máquina. La configuración del shell y de Python no depende de los contenedores ni de los modelos locales.

  • Docker Desktop es el runtime de contenedores que uso. Su licencia es gratuita para uso personal y para pequeñas empresas con menos de 250 empleados y menos de $10 millones de facturación anual. Las empresas más grandes necesitan un plan de pago (licencia de Docker Desktop).
  • Podman Desktop es de código abierto y no tiene esa condición de licencia. Úsalo cuando tu empresa supere esos límites y no pague Docker.
  • Ollama se ejecuta como servicio en segundo plano con una API local. Úsalo cuando scripts o una aplicación llamen al modelo.
  • LM Studio es una aplicación de escritorio para buscar, cargar y comparar modelos. Úsala cuando quieras probar modelos a mano. También puede servir una API local.

También se instalan como casks:

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

LLMs locales en macOS compara en detalle Ollama, LM Studio, llama.cpp y MLX-LM.

Repetir la configuración en el próximo Mac

Homebrew puede guardar las fórmulas y los casks de esta configuración en un Brewfile e instalarlos en una máquina nueva:

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

Ejecuta el primer comando en el Mac antiguo; añade --force para sobrescribir un Brewfile existente. En el Mac nuevo, instala Xcode Command Line Tools y Homebrew, ejecuta el paso brew shellenv y después el segundo comando.

Guarda el Brewfile y copias de .zprofile, .zshrc y .p10k.zsh sin secretos en un repositorio de dotfiles. Repite la instalación de Python gestionado por uv y los pasos manuales de Oh My Zsh, los plugins, Powerlevel10k y las fuentes. Restaura los archivos de configuración del shell después de instalar Oh My Zsh, porque su instalador reescribe .zshrc. Vuelve a aplicar los ajustes del terminal y del editor.

Un Brewfile guarda los nombres de los paquetes sin fijar sus versiones. Los paquetes restaurados pueden ser más recientes; la documentación de Homebrew Bundle explica esta limitación.

Referencias