New Mac Setup
This skill generates and runs a complete, idempotent Mac setup for fullstack web development and AI engineering. It produces 8 shell scripts that can be run individually or via a master runner, plus dotfiles and macOS preference automation.
The scripts are designed to be re-runnable — they check whether each tool is already installed before attempting installation, so you can safely run them again if something fails partway through.
Philosophy
The setup is opinionated. The core opinions:
- Terminal: Ghostty (fast, GPU-accelerated, Zig) + cmux (vertical tabs, split panes, socket API for AI agents). cmux reads Ghostty's config, so one config file serves both.
- Shell: ZSH with Oh-My-ZSH, powerlevel10k theme, zsh-autosuggestions, zsh-syntax-highlighting
- Node: fnm (not nvm — fnm is faster), pnpm and bun for package management/runtime
- Python: uv from Astral (not pyenv, not pip, not conda — uv is dramatically faster and handles both venvs and package installs)
- Docker: Colima (not Docker Desktop — lighter weight, CLI-native, free)
- Editor: Cursor (AI-native editor)
- AI tools: Claude Code, Codex CLI, Antigravity CLI (
agy via the antigravity Homebrew cask), Railway CLI, Ollama for local models
- Transcription/diarization: ffmpeg + yt-dlp + MLX Whisper for fast local ASR, plus a Python 3.11 pyannote.audio environment for proper speaker diarization when
HF_TOKEN is configured. Diarization should default to GPU/cloud paths; do not burn local CPU on long diarization unless explicitly requested.
- Agent notifications: peon-ping shared across Claude Code, Codex, and Cursor, tuned to notify only when useful
- Browser: Dia (from The Browser Company, successor to Arc)
- Launcher: Raycast (replaces Alfred, Spotlight, Caffeine, window management)
- Voice: Wispr Flow for voice-to-text
- Screenshots: Shottr (includes OCR) by default; also recommend Screendrop for local-first screenshot/screen recording, annotation, capture history, and optional Cloudflare-backed sharing.
How to Use This Skill
Step 1: Interview the User
Before generating scripts, ask the user a few questions to customize the setup. Key things to learn:
- Git identity: name and email for
git config
- Hardware: Which Mac model / how much RAM? (affects which Ollama models to pull)
- What to skip: Do they want everything, or should certain categories be excluded? (e.g., "no Elixir", "no PostgreSQL", "I use Docker Desktop not Colima")
- Additions: Any apps or tools not in the default list?
- Terminal preference: Ghostty + cmux is the default, but they may want something else
For RAM-based Ollama model recommendations:
- 8GB: qwen3.5:4b, qwen2.5-coder:3b
- 16GB: qwen3.5:9b, qwen2.5-coder:7b
- 24GB: qwen3.5:27b, qwen2.5-coder:14b (best sweet spot)
- 32GB+: qwen3.5:35b, qwen2.5-coder:32b
Step 2: Generate the Scripts
Generate 8 scripts into the user's chosen directory. Each script is standalone and idempotent. Use the templates in scripts/ as the base, customizing per the user's answers.
The scripts should run in this order:
01-xcode-and-homebrew.sh # Xcode CLI tools + Homebrew (15-25 min)
02-shell-setup.sh # Oh-My-ZSH + plugins + fonts
03-brew-packages.sh # All brew formulae + cask apps
04-dev-environment.sh # Node (fnm), Python (uv), Git, Docker
05-ai-tools.sh # Claude Code, Codex CLI, Antigravity CLI, Ollama models, llama.cpp
06-dotfiles.sh # .zshrc + Ghostty config
07-macos-settings.sh # System preferences via defaults commands
00-run-all.sh # Master runner (runs 01-07 in order)
Step 3: Execute
If possible, execute the scripts directly. If running in a VM/sandbox that can't reach the user's Mac, write the scripts to the workspace folder and put a one-liner in the clipboard:
cd /path/to/scripts && chmod +x ./*.sh && bash ./00-run-all.sh
Lessons Learned (Bugs to Avoid)
These are real issues encountered during testing. The scripts in scripts/ already incorporate these fixes, but if you're generating fresh scripts, keep these in mind:
fnm needs sourcing before npm works. After installing Node via fnm, the current shell doesn't have npm in PATH until you run eval "$(fnm env --use-on-cd)". Every script that uses npm/node must source fnm first.
Don't use set -e in the master runner. If one script fails (e.g., a brew cask 404s), set -e kills the entire pipeline. Individual scripts can use set -e if they handle errors gracefully, but the master runner should not.
Source brew and fnm in the master runner. Add these lines near the top of 00-run-all.sh so all child scripts inherit them:
eval "$(/opt/homebrew/bin/brew shellenv)" 2>/dev/null || true
eval "$(fnm env --use-on-cd)" 2>/dev/null || true
Smart quotes break shell commands. If writing commands to the clipboard, avoid curly/smart quotes. Use simple ASCII quotes only, or avoid quotes entirely where possible. The safest clipboard commands are single simple statements like bash ./07-macos-settings.sh.
Zoom and some casks require sudo. The Zoom installer triggers a Password: prompt. The user needs to be warned that some cask installs will pause for their password.
brew install yarn --ignore-dependencies is needed if Node is managed by fnm (not brew). Otherwise brew tries to install its own Node as a yarn dependency.
Ghostty config location: ~/.config/ghostty/config. cmux reads this same file.
Default Package Lists
Homebrew Formulae (CLI tools)
# Core dev tools
gh, git, fnm, pnpm, bun, z, diff-so-fancy
# Languages & runtimes
elixir, erlang, python@3.13
# Docker (no Docker Desktop)
colima, docker, docker-completion
# Media & processing
ffmpeg, yt-dlp, tesseract, libsndfile
# Build dependencies
openssl@3, readline, sqlite, xz, zstd
# Databases
postgresql@14, rabbitmq
# Misc CLI
honcho, pipx, flyctl, entr, tig, mas, terminal-notifier, googleworkspace-cli
# Google Workspace
googleworkspace-cli installs the `gws` binary; auth still requires `gws auth setup` and `gws auth login`.
# Libraries
cairo, glib, harfbuzz, libvmaf, webp
Homebrew Casks (GUI apps)
# Terminal
ghostty
# Editors
cursor, visual-studio-code
# Browser
thebrowsercompany-dia
# Communication
slack, discord, zoom
# Productivity
raycast, rectangle, obsidian, notion, notion-calendar
# AI & ML
ollama, antigravity
# Media
vlc, audacity, tella, descript
# Utilities
shottr, notunes, caffeine, stretchly, quickshade, pure-paste, 1password
# Dev tools
beeper, superhuman, gcloud-cli
Plus cmux via: brew tap manaflow-ai/cmux && brew install --cask cmux
gcloud-cli installs Google Cloud CLI (gcloud). Keep /opt/homebrew/share/google-cloud-sdk/bin on PATH so additional SDK components are available after install.
Claude-Suggested Additions (March 2026)
These tools were suggested by Claude during the initial setup session and accepted by the user. They are now part of the default install in 03-brew-packages.sh:
- fzf — Fuzzy finder that transforms shell history (Ctrl+R), file search, and git branch selection. Pairs perfectly with zsh-autosuggestions.
brew install fzf
- ripgrep (
rg) — Blazingly fast grep replacement. Respects .gitignore, searches recursively by default. Essential for any developer. brew install ripgrep
- bat —
cat with syntax highlighting, line numbers, and git integration. Makes reading code files in terminal beautiful. brew install bat
- zoxide — Drop-in
z replacement with a smarter frecency algorithm and fuzzy matching. Same muscle memory, better results. brew install zoxide
- Orbstack — Even lighter than Colima for Docker containers and Linux VMs. Has a nice GUI and near-instant startup.
brew install --cask orbstack
Global npm Packages
undollar, npm-check-updates, trash-cli,
@anthropic-ai/claude-code, @openai/codex, @railway/cli
Antigravity CLI
Install Google Antigravity through Homebrew:
brew install --cask antigravity
The cask installs the desktop app and exposes agy as the Antigravity CLI. Prefer this over Gemini CLI for new setups: Google announced on May 19, 2026 that consumer Gemini CLI access for free, Google AI Pro, and Ultra users stops serving requests on June 18, 2026. Enterprise and paid API-key Gemini CLI access can remain available, but this new-Mac path should default to Antigravity CLI.
Transcription And Diarization Defaults
Install the local transcription stack on new AI/dev Macs because it is useful for meetings, podcasts, YouTube/video workflows, and searchable archives.
Add this to 03-brew-packages.sh / 04-dev-environment.sh generation:
brew install ffmpeg yt-dlp libsndfile
uv tool install mlx-whisper || true
mkdir -p "$HOME/.local/share/transcribe-anything"
uv venv --python 3.11 "$HOME/.local/share/transcribe-anything/.venv-pyannote"
uv pip install --python "$HOME/.local/share/transcribe-anything/.venv-pyannote/bin/python" \
"pyannote.audio" soundfile
Guidance for generated docs:
mlx_whisper is the preferred local ASR path on Apple Silicon when available.
pyannote.audio direct is the preferred diarization path when HF_TOKEN is configured and the user has accepted Hugging Face model terms, but run it on CUDA/cloud GPU for long files.
- Users must accept terms for
pyannote/speaker-diarization-community-1 and pyannote/segmentation-3.0, then set HF_TOKEN in their shell or secret manager. Never bake tokens into generated setup scripts.
- CPU pyannote on macOS is opt-in only for short tests. For real meeting/podcast diarization, use CUDA/cloud GPU or a managed diarization API such as Deepgram/AssemblyAI.
- Do not rely on simple Resemblyzer/librosa clustering of Whisper segments for production diarization; it commonly collapses multi-speaker meetings into one speaker.
peon-ping Defaults
When setting up AI tools on a new Mac, also install and configure peon-ping with these defaults:
Ollama Models (for 24GB RAM)
qwen3.5:27b # General purpose (256K context, multimodal)
qwen2.5-coder:14b # Code-focused
deepseek-r1:8b # Reasoning
macOS Defaults (automated)
# Finder: show extensions, show dotfiles, show path bar, list view
# Dock: auto-hide, no recents, no delay, minimize to app icon
# Keyboard: no autocorrect, no smart quotes, fast repeat, no press-and-hold
# Trackpad: no natural scrolling, tap to click
# Screenshots: PNG, Desktop, no shadow
# Menu bar: auto-hide
macOS Settings (manual — guide the user)
These can't be automated via defaults write:
- Spotlight: disable all except Apps + System Settings
- Siri: disable
- Screenshot shortcut: remap to Cmd+E
- Cmd+Q: remap to double-tap (prevent accidental quits)
- Trackpad: disable dictionary lookup
- Finder: set new windows to ~/Work
- Dock: remove all icons except Finder and Trash
- Cursor size: set to large in Accessibility (good for presentations)
Apps to Download Manually
These aren't in Homebrew or need manual install:
- Wispr Flow — voice-to-text (2025 pick)
- SuperWhisper — voice-to-text (2024 pick, still good)
- Screendrop — local-first screenshots, screen recordings, annotation, capture history, and optional Cloudflare-backed sharing; recommended alongside Shottr
- Screenflow 11 — screen recording
- Tella.tv — screen recording; preferred replacement for Loom
- App Quitter — close apps when windows close
- Clipbook or Alfred — clipboard manager
Post-Install: Open Apps That Need Login
After all scripts finish, open these apps to sign in and configure them. The skill should auto-open them for the user:
# Apps that need login/activation after install
open -a "Slack"
open -a "Discord"
open -a "Raycast"
open -a "Shottr"
open -a "1Password"
open -a "Spotify"
open -a "Zoom"
open -a "Dia"
open -a "GitHub Desktop" 2>/dev/null
open -a "Claude" 2>/dev/null
echo "🔑 Sign into each app above, then continue setup."
Browser Extensions (install in Dia/Chrome)
Essential:
- uBlock Origin, Privacy Badger, Video Speed Controller (highly recommended)
- Refined GitHub, React Developer Tools, Code Copy
- 1Password / LastPass
Nice to have:
- Morpheon Dark, bypass-paywalls-chrome, Twitter-Links-beta
- enhanced-history, Display Anchors, Octolinker, little-rat, RescueTime
Suggested Additions
Things worth considering that aren't in the original blog posts but complement this setup well:
- mise (mise.jdx.dev) — universal version manager for Node, Python, Ruby, Go, etc. Could replace fnm + uv for version management (swyx mentioned exploring this)
- zoxide — smarter
z alternative with fuzzy matching
- bat —
cat replacement with syntax highlighting
- eza — modern
ls replacement
- fd — faster
find alternative
- ripgrep — faster
grep (rg)
- fzf — fuzzy finder for shell history, files, everything
- starship — cross-shell prompt (alternative to powerlevel10k, works with fish too)
- Bartender or Ice — menu bar icon management (declutter)
- Hand Mirror — quick webcam check from menu bar (great before calls)
- Tailscale — mesh VPN for accessing home machines
- Orbstack — another Docker Desktop alternative (even lighter than Colima)
- Aerospace — tiling window manager (if Rectangle isn't enough)
Dotfiles Reference
The .zshrc should include:
- Oh-My-ZSH with powerlevel10k theme
- Plugins: git, zsh-autosuggestions, zsh-syntax-highlighting, z
- Homebrew, fnm, and uv PATH setup
- z directory jumping source
- Git aliases (gs, gd, gc, gp, gl, gco, gcb)
- npm/pnpm aliases (ni, nr, pi, pr, ncu)
- Python aliases (pip → uv pip, venv → uv venv)
- Docker aliases (dstart → colima start, dstop → colima stop)
- Editor set to Cursor
The Ghostty config should include:
- Font: "Meslo LG M for Powerline" at 14pt
- Theme: dark:GruvboxDark,light:GruvboxLight
- Shell integration: zsh
- Block cursor, no blink
- Global hotkey: Cmd+` for quick terminal
- Clipboard read/write enabled
- Mouse hide while typing
1---2name: new-mac-setup3description: Fully automated new Mac setup for fullstack web developers and AI engineers. Generates and executes idempotent shell scripts to install dev tools, CLI utilities, GUI apps, AI/ML tooling, shell config, and macOS preferences — all via Homebrew, fnm, uv, and defaults commands. Use this skill whenever someone says "set up my Mac", "new Mac setup", "configure my dev machine", "install my dev tools", "fresh Mac install", "developer environment setup", or anything about bootstrapping a macOS machine for development. Also trigger when someone mentions setting up Homebrew, Oh-My-ZSH, Node.js, Python, Docker, or terminal configuration on a new Mac — even if they don't call it a "setup". This skill is opinionated and based on real-world experience setting up M-series Macs for fullstack JS/TS + Python + AI development.4license: MIT5---67# New Mac Setup89This skill generates and runs a complete, idempotent Mac setup for fullstack web development and AI engineering. It produces 8 shell scripts that can be run individually or via a master runner, plus dotfiles and macOS preference automation.1011The scripts are designed to be re-runnable — they check whether each tool is already installed before attempting installation, so you can safely run them again if something fails partway through.1213## Philosophy1415The setup is opinionated. The core opinions:1617- **Terminal**: Ghostty (fast, GPU-accelerated, Zig) + cmux (vertical tabs, split panes, socket API for AI agents). cmux reads Ghostty's config, so one config file serves both.18- **Shell**: ZSH with Oh-My-ZSH, powerlevel10k theme, zsh-autosuggestions, zsh-syntax-highlighting19- **Node**: fnm (not nvm — fnm is faster), pnpm and bun for package management/runtime20- **Python**: uv from Astral (not pyenv, not pip, not conda — uv is dramatically faster and handles both venvs and package installs)21- **Docker**: Colima (not Docker Desktop — lighter weight, CLI-native, free)22- **Editor**: Cursor (AI-native editor)23- **AI tools**: Claude Code, Codex CLI, Antigravity CLI (`agy` via the `antigravity` Homebrew cask), Railway CLI, Ollama for local models24- **Transcription/diarization**: ffmpeg + yt-dlp + MLX Whisper for fast local ASR, plus a Python 3.11 pyannote.audio environment for proper speaker diarization when `HF_TOKEN` is configured. Diarization should default to GPU/cloud paths; do not burn local CPU on long diarization unless explicitly requested.25- **Agent notifications**: peon-ping shared across Claude Code, Codex, and Cursor, tuned to notify only when useful26- **Browser**: Dia (from The Browser Company, successor to Arc)27- **Launcher**: Raycast (replaces Alfred, Spotlight, Caffeine, window management)28- **Voice**: Wispr Flow for voice-to-text29- **Screenshots**: Shottr (includes OCR) by default; also recommend [Screendrop](https://github.com/fayazara/Screendrop) for local-first screenshot/screen recording, annotation, capture history, and optional Cloudflare-backed sharing.3031## How to Use This Skill3233### Step 1: Interview the User3435Before generating scripts, ask the user a few questions to customize the setup. Key things to learn:36371. **Git identity**: name and email for `git config`382. **Hardware**: Which Mac model / how much RAM? (affects which Ollama models to pull)393. **What to skip**: Do they want everything, or should certain categories be excluded? (e.g., "no Elixir", "no PostgreSQL", "I use Docker Desktop not Colima")404. **Additions**: Any apps or tools not in the default list?415. **Terminal preference**: Ghostty + cmux is the default, but they may want something else4243For RAM-based Ollama model recommendations:44- **8GB**: qwen3.5:4b, qwen2.5-coder:3b45- **16GB**: qwen3.5:9b, qwen2.5-coder:7b46- **24GB**: qwen3.5:27b, qwen2.5-coder:14b (best sweet spot)47- **32GB+**: qwen3.5:35b, qwen2.5-coder:32b4849### Step 2: Generate the Scripts5051Generate 8 scripts into the user's chosen directory. Each script is standalone and idempotent. Use the templates in `scripts/` as the base, customizing per the user's answers.5253The scripts should run in this order:5455```5601-xcode-and-homebrew.sh # Xcode CLI tools + Homebrew (15-25 min)5702-shell-setup.sh # Oh-My-ZSH + plugins + fonts5803-brew-packages.sh # All brew formulae + cask apps5904-dev-environment.sh # Node (fnm), Python (uv), Git, Docker6005-ai-tools.sh # Claude Code, Codex CLI, Antigravity CLI, Ollama models, llama.cpp6106-dotfiles.sh # .zshrc + Ghostty config6207-macos-settings.sh # System preferences via defaults commands6300-run-all.sh # Master runner (runs 01-07 in order)64```6566### Step 3: Execute6768If possible, execute the scripts directly. If running in a VM/sandbox that can't reach the user's Mac, write the scripts to the workspace folder and put a one-liner in the clipboard:6970```bash71cd /path/to/scripts && chmod +x ./*.sh && bash ./00-run-all.sh72```7374## Lessons Learned (Bugs to Avoid)7576These are real issues encountered during testing. The scripts in `scripts/` already incorporate these fixes, but if you're generating fresh scripts, keep these in mind:77781. **fnm needs sourcing before npm works.** After installing Node via fnm, the current shell doesn't have `npm` in PATH until you run `eval "$(fnm env --use-on-cd)"`. Every script that uses npm/node must source fnm first.79802. **Don't use `set -e` in the master runner.** If one script fails (e.g., a brew cask 404s), `set -e` kills the entire pipeline. Individual scripts can use `set -e` if they handle errors gracefully, but the master runner should not.81823. **Source brew and fnm in the master runner.** Add these lines near the top of `00-run-all.sh` so all child scripts inherit them:83 ```bash84 eval "$(/opt/homebrew/bin/brew shellenv)" 2>/dev/null || true85 eval "$(fnm env --use-on-cd)" 2>/dev/null || true86 ```87884. **Smart quotes break shell commands.** If writing commands to the clipboard, avoid curly/smart quotes. Use simple ASCII quotes only, or avoid quotes entirely where possible. The safest clipboard commands are single simple statements like `bash ./07-macos-settings.sh`.89905. **Zoom and some casks require sudo.** The Zoom installer triggers a `Password:` prompt. The user needs to be warned that some cask installs will pause for their password.91926. **brew install yarn --ignore-dependencies** is needed if Node is managed by fnm (not brew). Otherwise brew tries to install its own Node as a yarn dependency.93947. **Ghostty config location**: `~/.config/ghostty/config`. cmux reads this same file.9596## Default Package Lists9798### Homebrew Formulae (CLI tools)99100```101# Core dev tools102gh, git, fnm, pnpm, bun, z, diff-so-fancy103104# Languages & runtimes105elixir, erlang, python@3.13106107# Docker (no Docker Desktop)108colima, docker, docker-completion109110# Media & processing111ffmpeg, yt-dlp, tesseract, libsndfile112113# Build dependencies114openssl@3, readline, sqlite, xz, zstd115116# Databases117postgresql@14, rabbitmq118119# Misc CLI120honcho, pipx, flyctl, entr, tig, mas, terminal-notifier, googleworkspace-cli121122# Google Workspace123googleworkspace-cli installs the `gws` binary; auth still requires `gws auth setup` and `gws auth login`.124125# Libraries126cairo, glib, harfbuzz, libvmaf, webp127```128129### Homebrew Casks (GUI apps)130131```132# Terminal133ghostty134135# Editors136cursor, visual-studio-code137138# Browser139thebrowsercompany-dia140141# Communication142slack, discord, zoom143144# Productivity145raycast, rectangle, obsidian, notion, notion-calendar146147# AI & ML148ollama, antigravity149150# Media151vlc, audacity, tella, descript152153# Utilities154shottr, notunes, caffeine, stretchly, quickshade, pure-paste, 1password155156# Dev tools157beeper, superhuman, gcloud-cli158```159160Plus cmux via: `brew tap manaflow-ai/cmux && brew install --cask cmux`161162`gcloud-cli` installs Google Cloud CLI (`gcloud`). Keep `/opt/homebrew/share/google-cloud-sdk/bin` on PATH so additional SDK components are available after install.163164## Claude-Suggested Additions (March 2026)165166These tools were suggested by Claude during the initial setup session and accepted by the user. They are now part of the default install in `03-brew-packages.sh`:1671681. **fzf** — Fuzzy finder that transforms shell history (Ctrl+R), file search, and git branch selection. Pairs perfectly with zsh-autosuggestions. `brew install fzf`1692. **ripgrep** (`rg`) — Blazingly fast grep replacement. Respects .gitignore, searches recursively by default. Essential for any developer. `brew install ripgrep`1703. **bat** — `cat` with syntax highlighting, line numbers, and git integration. Makes reading code files in terminal beautiful. `brew install bat`1714. **zoxide** — Drop-in `z` replacement with a smarter frecency algorithm and fuzzy matching. Same muscle memory, better results. `brew install zoxide`1725. **Orbstack** — Even lighter than Colima for Docker containers and Linux VMs. Has a nice GUI and near-instant startup. `brew install --cask orbstack`173174### Global npm Packages175176```177undollar, npm-check-updates, trash-cli,178@anthropic-ai/claude-code, @openai/codex, @railway/cli179```180181### Antigravity CLI182183Install Google Antigravity through Homebrew:184185```bash186brew install --cask antigravity187```188189The cask installs the desktop app and exposes `agy` as the Antigravity CLI. Prefer this over Gemini CLI for new setups: Google announced on May 19, 2026 that consumer Gemini CLI access for free, Google AI Pro, and Ultra users stops serving requests on June 18, 2026. Enterprise and paid API-key Gemini CLI access can remain available, but this new-Mac path should default to Antigravity CLI.190191### Transcription And Diarization Defaults192193Install the local transcription stack on new AI/dev Macs because it is useful for meetings, podcasts, YouTube/video workflows, and searchable archives.194195Add this to `03-brew-packages.sh` / `04-dev-environment.sh` generation:196197```bash198brew install ffmpeg yt-dlp libsndfile199uv tool install mlx-whisper || true200201mkdir -p "$HOME/.local/share/transcribe-anything"202uv venv --python 3.11 "$HOME/.local/share/transcribe-anything/.venv-pyannote"203uv pip install --python "$HOME/.local/share/transcribe-anything/.venv-pyannote/bin/python" \204 "pyannote.audio" soundfile205```206207Guidance for generated docs:208209- `mlx_whisper` is the preferred local ASR path on Apple Silicon when available.210- `pyannote.audio` direct is the preferred diarization path when `HF_TOKEN` is configured and the user has accepted Hugging Face model terms, but run it on CUDA/cloud GPU for long files.211- Users must accept terms for `pyannote/speaker-diarization-community-1` and `pyannote/segmentation-3.0`, then set `HF_TOKEN` in their shell or secret manager. Never bake tokens into generated setup scripts.212- CPU pyannote on macOS is opt-in only for short tests. For real meeting/podcast diarization, use CUDA/cloud GPU or a managed diarization API such as Deepgram/AssemblyAI.213- Do not rely on simple Resemblyzer/librosa clustering of Whisper segments for production diarization; it commonly collapses multi-speaker meetings into one speaker.214215### peon-ping Defaults216217When setting up AI tools on a new Mac, also install and configure `peon-ping` with these defaults:218219- Install globally with the shared runtime under `~/.claude/hooks/peon-ping/` so Claude Code, Codex, and Cursor can all use the same install.220- Register Claude Code hooks normally via the installer.221- Register Codex manually in `~/.codex/config.toml`:222 ```toml223 notify = ["bash", "/Users/$USER/.claude/hooks/peon-ping/adapters/codex.sh"]224 ```225- Keep Cursor hooked up if `~/.cursor/` exists.226- Use `default_pack: "peon"` as the fallback pack.227- Install this rotation pool:228 `glados`, `jarvis`, `r2d2`, `peasant`, `sc_kerrigan`, `sc_scv`, `sc_marine`, `sc_raynor`, `sc_ghost`, `sc_terran`, `protoss`, `sc2_alarak`, `sc2_abathur`, `ra2_eva_commander`, `ra2_kirov`, `ra2_yuri`, `ra_soviet`, `ccg_gla_worker`, `ccg_us_dozer`, `ccg_china_dozer`229- Set `pack_rotation_mode` to `round-robin`.230- Set `volume` to `0.2`.231- Keep `desktop_notifications` enabled, but use `notification_style: "standard"` rather than large overlays.232- Install `terminal-notifier` via Homebrew so standard macOS notifications work reliably and support click-to-focus behavior.233- Set `suppress_sound_when_tab_focused: true`.234- Set `silent_window_seconds: 30` so `task.complete` only fires for longer-running work.235- Categories:236 - `session.start: false`237 - `task.acknowledge: false`238 - `task.complete: true`239 - `task.error: true`240 - `input.required: true`241 - `resource.limit: true`242 - `user.spam: false`243- Goal: alerts only for meaningful attention events, with completion sounds reserved for work that took long enough to matter.244245### Ollama Models (for 24GB RAM)246247```248qwen3.5:27b # General purpose (256K context, multimodal)249qwen2.5-coder:14b # Code-focused250deepseek-r1:8b # Reasoning251```252253### macOS Defaults (automated)254255```bash256# Finder: show extensions, show dotfiles, show path bar, list view257# Dock: auto-hide, no recents, no delay, minimize to app icon258# Keyboard: no autocorrect, no smart quotes, fast repeat, no press-and-hold259# Trackpad: no natural scrolling, tap to click260# Screenshots: PNG, Desktop, no shadow261# Menu bar: auto-hide262```263264### macOS Settings (manual — guide the user)265266These can't be automated via `defaults write`:2671. Spotlight: disable all except Apps + System Settings2682. Siri: disable2693. Screenshot shortcut: remap to Cmd+E2704. Cmd+Q: remap to double-tap (prevent accidental quits)2715. Trackpad: disable dictionary lookup2726. Finder: set new windows to ~/Work2737. Dock: remove all icons except Finder and Trash2748. Cursor size: set to large in Accessibility (good for presentations)275276## Apps to Download Manually277278These aren't in Homebrew or need manual install:279- [Wispr Flow](https://wispr.com) — voice-to-text (2025 pick)280- [SuperWhisper](https://superwhisper.com) — voice-to-text (2024 pick, still good)281- [Screendrop](https://github.com/fayazara/Screendrop) — local-first screenshots, screen recordings, annotation, capture history, and optional Cloudflare-backed sharing; recommended alongside Shottr282- [Screenflow 11](https://www.telestream.net/screenflow/) — screen recording283- [Tella.tv](https://www.tella.tv/) — screen recording; preferred replacement for Loom284- [App Quitter](https://appquitter.com) — close apps when windows close285- [Clipbook](https://clipbook.app) or Alfred — clipboard manager286287## Post-Install: Open Apps That Need Login288289After all scripts finish, open these apps to sign in and configure them. The skill should auto-open them for the user:290291```bash292# Apps that need login/activation after install293open -a "Slack"294open -a "Discord"295open -a "Raycast"296open -a "Shottr"297open -a "1Password"298open -a "Spotify"299open -a "Zoom"300open -a "Dia"301open -a "GitHub Desktop" 2>/dev/null302open -a "Claude" 2>/dev/null303echo "🔑 Sign into each app above, then continue setup."304```305306## Browser Extensions (install in Dia/Chrome)307308Essential:309- uBlock Origin, Privacy Badger, Video Speed Controller (highly recommended)310- Refined GitHub, React Developer Tools, Code Copy311- 1Password / LastPass312313Nice to have:314- Morpheon Dark, bypass-paywalls-chrome, Twitter-Links-beta315- enhanced-history, Display Anchors, Octolinker, little-rat, RescueTime316317## Suggested Additions318319Things worth considering that aren't in the original blog posts but complement this setup well:3203211. **mise** (mise.jdx.dev) — universal version manager for Node, Python, Ruby, Go, etc. Could replace fnm + uv for version management (swyx mentioned exploring this)3222. **zoxide** — smarter `z` alternative with fuzzy matching3233. **bat** — `cat` replacement with syntax highlighting3244. **eza** — modern `ls` replacement3255. **fd** — faster `find` alternative3266. **ripgrep** — faster `grep` (rg)3277. **fzf** — fuzzy finder for shell history, files, everything3288. **starship** — cross-shell prompt (alternative to powerlevel10k, works with fish too)3299. **Bartender** or **Ice** — menu bar icon management (declutter)33011. **Hand Mirror** — quick webcam check from menu bar (great before calls)33112. **Tailscale** — mesh VPN for accessing home machines33213. **Orbstack** — another Docker Desktop alternative (even lighter than Colima)33314. **Aerospace** — tiling window manager (if Rectangle isn't enough)334335## Dotfiles Reference336337The .zshrc should include:338- Oh-My-ZSH with powerlevel10k theme339- Plugins: git, zsh-autosuggestions, zsh-syntax-highlighting, z340- Homebrew, fnm, and uv PATH setup341- z directory jumping source342- Git aliases (gs, gd, gc, gp, gl, gco, gcb)343- npm/pnpm aliases (ni, nr, pi, pr, ncu)344- Python aliases (pip → uv pip, venv → uv venv)345- Docker aliases (dstart → colima start, dstop → colima stop)346- Editor set to Cursor347348The Ghostty config should include:349- Font: "Meslo LG M for Powerline" at 14pt350- Theme: dark:GruvboxDark,light:GruvboxLight351- Shell integration: zsh352- Block cursor, no blink353- Global hotkey: Cmd+` for quick terminal354- Clipboard read/write enabled355- Mouse hide while typing