MacBook-Setup für AI Engineering: macOS-Tools und Workflow
Automatische Übersetzung Dieser Artikel wurde automatisch aus der englischen Originalversion übersetzt.
Das ist das Setup, das ich auf einem frischen MacBook anwende, bevor ich mit AI Engineering beginne. Es umfasst die Command-Line-Tools, die macOS nicht mitliefert, Homebrew, Python mit uv, Shell, Terminal- und Editor-Auswahl, Docker sowie lokale AI-Tools.
Die sinnvolle Abgrenzung liegt zwischen erforderlichen Grundlagen und persönlichen Präferenzen. Xcode Command Line Tools, Homebrew, Git und ein Python-Workflow sind Grundlagen. Warp, iTerm2, Powerlevel10k, Cursor und lokale Model Runner sind Auswahlentscheidungen. Die folgenden Befehle installieren die Grundlage; in den späteren Abschnitten dokumentiere ich die darauf aufbauenden Entscheidungen. Dies ist eine dokumentierte Setup-Sequenz und kein bitgenau reproduzierbares Maschinen-Image.
macOS-Grundlagen installieren
Beginne mit Apples Command-Line-Tools:
xcode-select --install
macOS öffnet einen Dialog, der durch die Installation führt.
Homebrew ist der Package Manager, den ich für den Rest dieses Setups verwende:
Lade das Installationsprogramm bei einer geprüften Revision herunter, verifiziere seinen Digest, inspiziere es und führe anschließend die lokale Kopie aus:
(
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"
)
Der Homebrew-Installationsleitfaden erklärt die Änderungen und Standard-Prefixes. Auf Apple Silicon verwendet Homebrew /opt/homebrew. Führe den am Ende ausgegebenen Befehl brew shellenv aus, damit brew in der aktuellen Shell verfügbar ist. Das Installationsprogramm kann das Homebrew-Prefix außerdem für künftige Login-Shells konfigurieren. Commit-Pin und SHA-256 decken die Bootstrap-Datei ab; aktualisiere sie nach der Prüfung gemeinsam. Homebrew selbst ist ein Rolling Package Manager, daher lösen spätere brew install-Befehle weiterhin die zu diesem Zeitpunkt aktuellen Formula-Versionen auf.
Installiere die Command-Line-Tools, die ich regelmäßig verwende:
brew install openssl readline sqlite3 xz zlib uv htop gitmoji pandoc ncdu tmux
Die Pakete fallen in drei Gruppen:
- openssl, readline, sqlite3, xz und zlib stellen Libraries für gängige Python- und Command-Line-Workloads bereit.
- uv verwaltet Python-Versionen, Environments, Dependencies, Commands und Lockfiles.
- htop, tmux, ncdu, gitmoji und pandoc decken Prozessüberwachung, Terminal-Sessions, Speicherplatzanalyse, Commit-Formatierung und Dokumentkonvertierung ab.
uv für die tägliche Python-Arbeit verwenden
Bevor ich uv übernommen habe, verwendete ich pyenv zur Verwaltung von Python-Environments. uv deckt inzwischen meinen täglichen Workflow ab. Installiere die aktuelle, von uv verwaltete Python-Version:
uv python install
Damit wird die zum Setup-Zeitpunkt für uv verfügbare neueste Version installiert. Für eine projektspezifische Version verwende den Pinning-Workflow in meiner Kurzanleitung zur Python-Verwaltung unter macOS mit uv.
Installiere pyenv separat nur, wenn du dessen Source-Build-Pfad benötigst:
brew install pyenv
Ich verwende pyenv, wenn ich einen aus dem Source-Code gebauten Interpreter oder benutzerdefinierte CPython-Build-Optionen benötige, die uv mit seinen vorkompilierten Distributionen nicht bereitstellt. Entferne pyenv aus der folgenden Shell-Plugin-Liste, wenn du diese optionale Installation überspringst.
Ein Terminal auswählen
Das standardmäßige macOS-Terminal ist ausreichend. Ich habe jahrelang iTerm2 verwendet und bin kürzlich zu Warp gewechselt, einem Rust-basierten Terminal mit integrierten AI-Features. Die Auswahl hat keinen Einfluss auf das weitere Setup.
Wenn du bei iTerm2 bleibst, ändere ich diese beiden Einstellungen:
Natürliches Text Editing aktivieren
- Öffne Preferences → Profiles → Keys → Key Mappings.
- Öffne das Dropdown-Menü Presets…
- Wähle „Natural Text Editing“.
Ein Farb-Theme auswählen
- Durchsuche die Themes bei iTerm2-Color-Schemes.
- Öffne Preferences → Profiles → Colors → Color Presets…
- Wähle Import und anschließend das heruntergeladene Theme.
Zsh konfigurieren
macOS verwendet Zsh als standardmäßige Login-Shell. Ich verwende das mitgelieferte /bin/zsh; installiere Homebrews Zsh nur, wenn du eine bestimmte neuere Upstream-Version benötigst.
Prüfe die installierte Zsh-Version und die aktuelle Login-Shell:
echo "$SHELL"
command -v zsh
zsh --version
Wenn Zsh installiert, aber nicht als Login-Shell ausgewählt ist, wechsle zur mitgelieferten Kopie:
chsh -s /bin/zsh
Öffne nach der Änderung der Login-Shell ein neues Terminal.
Oh My Zsh ergänzt die Defaults und das Plugin-System, die ich verwende. Der Standard-Installer folgt einem sich fortlaufend ändernden Branch. Für ein gepinntes Setup klone das Repository, ohne diesen Branch auszuchecken, wähle den geprüften Commit aus und kopiere erst danach das Template:
(
set -e
omz_dir="$HOME/.oh-my-zsh"
if [ -L "$HOME/.zshrc" ]; then
printf 'Refusing to replace symlink: %s\n' "$HOME/.zshrc" >&2
exit 1
fi
if [ -e "$HOME/.zshrc" ] && [ ! -f "$HOME/.zshrc" ]; then
printf 'Refusing to replace non-regular file: %s\n' "$HOME/.zshrc" >&2
exit 1
fi
if [ -e "$HOME/.zshrc" ]; then
omz_backup="$(mktemp "$HOME/.zshrc.pre-oh-my-zsh.XXXXXX")"
cp "$HOME/.zshrc" "$omz_backup"
printf 'Existing .zshrc backed up to %s\n' "$omz_backup"
fi
git clone --filter=blob:none --no-checkout https://github.com/ohmyzsh/ohmyzsh "$omz_dir"
git -C "$omz_dir" checkout --detach 4b657407c98bbc8830ae66c2ac7ff3d737c55a83
test "$(git -C "$omz_dir" rev-parse HEAD)" = 4b657407c98bbc8830ae66c2ac7ff3d737c55a83
new_zshrc="$(mktemp "$HOME/.zshrc.new.XXXXXX")"
trap 'rm -f "$new_zshrc"' EXIT
cp "$omz_dir/templates/zshrc.zsh-template" "$new_zshrc"
test -s "$new_zshrc"
test ! -d "$HOME/.zshrc"
mv -f "$new_zshrc" "$HOME/.zshrc"
)
Der Block bricht ab, bevor .zshrc ersetzt wird, wenn das Klonen oder die Commit-Verifizierung fehlschlägt. Er lehnt Symlinks und nicht reguläre Dateien ab, sichert eine vorhandene Datei unter einem eindeutigen .zshrc.pre-oh-my-zsh.*-Namen und ersetzt sie in einem Rename durch eine verifizierte temporäre Kopie. Vergleiche das ausgegebene Backup mit dem Template und stelle deine lokalen Einstellungen wieder her, bevor du eine neue Shell öffnest. Der Checkout ist auf Commit 4b65740 gepinnt; aktualisiere den Hash erst nach der Prüfung einer neueren Revision.
Führe die Shell-Konfigurations-Snippets aus einer einzigen Setup-Shell aus, während kein anderer Prozess .zshrc oder die Plugin- und Theme-Ziele bearbeitet. Sie lehnen vorhandene oder symbolische Zielpfade ab, sind aber kein Multi-Process Package Manager.
Plugins hinzufügen
Installiere zsh-autosuggestions und zsh-syntax-highlighting im Custom-Plugin-Verzeichnis von Oh My Zsh:
install_pinned_zsh_repo() (
set -e
repo_url="$1"
commit="$2"
destination="$3"
if [ -L "$destination" ]; then
printf 'Refusing symlink destination: %s\n' "$destination" >&2
return 1
fi
if [ -d "$destination/.git" ] && [ "$(git -C "$destination" rev-parse HEAD)" = "$commit" ]; then
return 0
fi
destination_parent="$(dirname "$destination")"
mkdir -p "$destination_parent"
stage="$(mktemp -d "$destination_parent/.pinned-zsh.XXXXXX")"
cleanup_stage() { rm -rf "$stage"; }
trap cleanup_stage EXIT
git clone --filter=blob:none --no-checkout "$repo_url" "$stage/repo"
git -C "$stage/repo" checkout --detach "$commit"
test "$(git -C "$stage/repo" rev-parse HEAD)" = "$commit"
test ! -e "$destination"
test ! -L "$destination"
mv -h -n "$stage/repo" "$destination"
test ! -e "$stage/repo"
test "$(git -C "$destination" rev-parse HEAD)" = "$commit"
)
install_pinned_zsh_repo https://github.com/zsh-users/zsh-autosuggestions e52ee8ca55bcc56a17c828767a3f98f22a68d4eb "${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/plugins/zsh-autosuggestions"
install_pinned_zsh_repo https://github.com/zsh-users/zsh-syntax-highlighting.git db085e4661f6aafd24e5acb5b2e17e4dd5dddf3e "${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting"
Der gepinnte zsh-autosuggestions-Commit und der zsh-syntax-highlighting-Commit entsprechen den veröffentlichten Releases v0.7.1 und 0.8.0. Aktualisiere die Hashes erst nach der Prüfung eines neueren Releases.
Bearbeite ~/.zshrc, um sie zusammen mit den von mir verwendeten Plugins zu laden:
plugins=(
aws bgnotify brew docker docker-compose
emoji forklift gcloud git history iterm2
keychain kubectl macos pre-commit
pyenv pylint python screen themes
tmux virtualenv vscode
zsh-autosuggestions zsh-syntax-highlighting
)
Lass zsh-syntax-highlighting als letztes Element im Array stehen. Das Oh-My-Zsh-Plugins-Wiki beschreibt die mitgelieferten Plugins. Die beiden externen Plugins schlagen Commands aus der History vor und heben Commands während der Eingabe hervor; befolge die Installationsanweisungen in den jeweiligen Repositories.
Powerlevel10k und die zugehörige Schriftart hinzufügen
Powerlevel10k ist das Zsh-Theme, das ich verwende. Es zeigt das Arbeitsverzeichnis, den Git-Status und das aktive Python-Environment im Prompt an und bietet einen interaktiven Konfigurationsassistenten. Installiere es für Oh My Zsh und wähle anschließend das Theme in ~/.zshrc aus:
(
set -e
p10k_dir="${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k"
if [ -L "$p10k_dir" ]; then
printf 'Refusing symlink destination: %s\n' "$p10k_dir" >&2
exit 1
fi
if [ -d "$p10k_dir/.git" ] && [ "$(git -C "$p10k_dir" rev-parse HEAD)" = 35833ea15f14b71dbcebc7e54c104d8d56ca5268 ]; then
exit 0
fi
test ! -e "$p10k_dir"
p10k_parent="$(dirname "$p10k_dir")"
mkdir -p "$p10k_parent"
stage="$(mktemp -d "$p10k_parent/.pinned-p10k.XXXXXX")"
cleanup_stage() { rm -rf "$stage"; }
trap cleanup_stage EXIT
git clone --filter=blob:none --no-checkout https://github.com/romkatv/powerlevel10k.git "$stage/repo"
git -C "$stage/repo" checkout --detach 35833ea15f14b71dbcebc7e54c104d8d56ca5268
test "$(git -C "$stage/repo" rev-parse HEAD)" = 35833ea15f14b71dbcebc7e54c104d8d56ca5268
test ! -L "$p10k_dir"
mv -h -n "$stage/repo" "$p10k_dir"
test ! -e "$stage/repo"
test "$(git -C "$p10k_dir" rev-parse HEAD)" = 35833ea15f14b71dbcebc7e54c104d8d56ca5268
)
Der gepinnte Powerlevel10k-Commit wird durch das v1.20.0-Release referenziert.
Die oben aufgeführten Git Object IDs verhindern nach dem Abruf ein unbemerktes Abweichen der Version; sie authentifizieren den Maintainer jedoch nicht eigenständig. Diese Commands vertrauen GitHub als HTTPS-Endpunkt sowie den dahinterstehenden Repository-Accounts. Für ein stärkeres Trust Model verifiziere einen signierten Tag oder Commit gegen einen separat beschafften Maintainer-Key, bevor du den vorbereiteten Checkout an seine endgültige Position verschiebst.
ZSH_THEME="powerlevel10k/powerlevel10k"
Öffne eine neue Shell und führe p10k configure aus.
Wenn du das integrierte Terminal von VS Code verwendest, installiere die empfohlene Schriftart, bevor du die Terminal-Schriftart festlegst, damit die Powerlevel10k-Icons korrekt dargestellt werden. p10k configure kann die Schriftart automatisch in iTerm2 installieren. Für andere Terminals lädst du die vier TTF-Dateien aus dem Powerlevel10k-Font-Guide herunter und installierst sie.
Setze in VS Code die Terminal-Schriftart auf MesloLGS NF:
- Öffne die Einstellungen deines Editors.
- Suche nach
terminal.integrated.fontFamily. - Setze den Wert auf
MesloLGS NF.
Editoren und AI-Assistenten auswählen
Ich halte eine IDE geöffnet und daneben ein oder zwei AI-Tools.
IDEs
- Cursor ist ein VS-Code-Fork mit integriertem AI Pair Programming.
- VS Code bietet den größeren Extension-Katalog.
AI-Assistenten
- OpenAI Codex ist OpenAIs Coding Agent.
- Claude ist der Assistant von Anthropic, den ich für anspruchsvollere Aufgaben verwende.
Inzwischen nutze ich Cursor mit parallel laufendem Codex und Claude Code.
Container und lokale Model-Tools auswählen
Die übrigen Tools hängen von den Aufgaben ab, die ich auf dem Rechner erledigen möchte:
- GitHub Desktop, wenn ich nicht auf die CLI wechseln möchte.
- Docker Desktop, den von mir verwendeten Container-Runtime.
- Podman Desktop, eine Alternative zu Docker Desktop.
- Ollama oder LM Studio, um LLMs lokal auf dem Mac auszuführen.
Docker Desktop und lokale Model Runner sind unabhängige Entscheidungen. Installiere sie, wenn deine Projekte Container oder lokale Inference benötigen; Shell- und Python-Setup hängen von keinem der beiden ab.
Grenzen des Setups dokumentieren
Dies ist ein persönliches Setup und keine minimale oder universelle macOS-Baseline. Entferne, was du nicht verwendest. Es dokumentiert geprüfte Bootstrap-Revisionen und Plugin-Releases, aber Homebrew-Formulas und GUI-Anwendungen ändern sich weiterhin. Die Grenzen, die ich konsistent halte, sind:
- Verwende das mitgelieferte
/bin/zsh, sofern ein Projekt nicht eine bestimmte neuere Zsh benötigt. - Verwende uv für die alltägliche Python-Installation und Project Environments; behalte pyenv für aus dem Source-Code gebaute oder benutzerdefinierte CPython-Interpreter.
- Dokumentiere Installations-Commands, Secret-freie Dotfiles, Editor-Extensions und Model-Standorte, damit das nächste Setup mechanisch ablaufen kann.