Set up your Mac for vibe-coding with AI in minutes.
AI Dev Bootstrap for Mac is an interactive installer that prepares a brandโnew or existing Mac for building apps and automations with AI coding tools like OpenCode. Itโs designed for nonโtechnical users, with guided prompts and safe defaults. You can run it multiple times โ it only installs whatโs missing and skips what you already have.
- macOS 15 (Sequoia) or newer
- Apple Silicon or Intel Mac
- Internet connection for downloading installers
- Git for the manual clone option below. If Git is missing, macOS will offer to install the Xcode Command Line Tools when you run the installer.
You have two ways to install. Pick whichever you prefer โ they end up at the same place.
Oneโliner (recommended):
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/skwid138/ai-dev-bootstrap-mac/main/install.sh)"This downloads a small setup script that copies this project (the โrepo,โ short for repository) into ~/code/ai-dev-bootstrap-mac and then runs the installer. If Git is missing, macOS will offer to install the Xcode Command Line Tools first.
To pass flags through the oneโliner, add -s -- and your flags after the closing paren:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/skwid138/ai-dev-bootstrap-mac/main/install.sh)" -s -- --dry-runOr clone the repo yourself:
mkdir -p ~/code
git clone https://github.com/skwid138/ai-dev-bootstrap-mac.git ~/code/ai-dev-bootstrap-mac
~/code/ai-dev-bootstrap-mac/bootstrap.shEither way, the repo lives at ~/code/ai-dev-bootstrap-mac afterward and you can reโrun bootstrap.sh (or just ./bootstrap.sh --launcher-only) any time.
Install tiers are bundles of tools. Start with Recommended if you are unsure; choose Custom if you want to pick tools one by one.
| Tier | Packages | What you get | Key tools |
|---|---|---|---|
| Essential | 14 | Minimum setup for AIโassisted dev | Xcode CLT, Homebrew, Bash 5, Git, VS Code, Node, Python, OpenCode |
| Recommended | +10 | Qualityโofโlife upgrades | Ghostty, tmux, direnv, zplug, Spaceship prompt, zsh plugins |
| Complete | +7 | Powerโuser extras | Ollama or LM Studio, OrbStack, Playwright, ffmpeg |
Want more control? Choose Custom in the installer and pick exactly what you want.
Essential (14 packages)
- Xcode Command Line Tools โ Build tools and system git
- Homebrew โ Package manager
- Bash โ Modern bash 5.x (macOS ships 3.2)
- Gum โ Interactive terminal UI
- Git โ Version control
- GitHub CLI (gh) โ GitHub auth and repo tools
- VS Code โ Code editor
- mise โ Runtime version manager
- Node.js LTS โ JavaScript runtime (via mise)
- uv โ Python package manager
- Python โ Python runtime (via uv)
- ripgrep (rg) โ Fast file search
- jq โ JSON processor
- OpenCode โ AI coding tool
Recommended (Essential + 10)
- Ghostty โ Modern terminal emulator
- fd โ Friendly
findreplacement - direnv โ Perโfolder environment variables
- tmux โ Terminal multiplexer
- btop โ System resource monitor
- zplug โ Zsh plugin manager
- Spaceship prompt โ Clean, informative prompt
- zsh-syntax-highlighting โ Command highlighting
- zsh-autosuggestions โ Historyโbased suggestions
- (All Essential packages)
Complete (Recommended + 7)
- Ollama โ Local AI models
- LM Studio โ Local AI desktop app
- OrbStack โ Lightweight containers & Linux VMs
- Playwright โ Browser automation
- shfmt โ Shell formatter
- ffmpeg โ Media processing
- ImageMagick โ Image processing
- (All Recommended packages)
- Preflight checks for macOS version, Mac chip type, and disk space.
- Tier selection (Essential, Recommended, Complete, or Custom).
- Safe re-runs โ alreadyโinstalled tools are skipped, so you can run the installer again later.
- Terminal startup setup with small, organized shell files.
- OpenCode AI provider setup with guided prompts for the account or API key OpenCode should use.
- Summary of what was installed, skipped, or failed.
The bootstrap configures OpenCode to behave like a careful project manager โ not a code-spitting machine. The goal: you describe what you want in plain English, the AI figures out whether it's a small thing or a big thing, and you stay in the driver's seat for every change.
For small, obvious requests ("fix this typo", "rename this variable") the AI confirms it understood you, shows the change it wants to make, and waits for your "yes" before touching the file. No ceremony โ just a quick approval before any edit lands.
For bigger requests ("build me a Mac app that reminds me to drink water") the AI takes a slower path:
- Asks clarifying questions โ usually multiple-choice, with a recommended default โ so it understands what you actually want.
- Writes a plan in plain language to a file under
.project-plans/so you can read it, push back, and resume the work later if needed. - Has a second AI audit the plan for risks, missing pieces, and bad assumptions. The audit findings are shown to you (even if there were none).
- Asks if you want to build it before writing any code.
- Builds in small, reviewable steps instead of dropping a wall of code at once.
You can approve, push back, or change direction at any step. Destructive commands (rm -rf, force-pushing to git, system-level tools) are blocked at the OpenCode permission layer regardless โ so even an over-eager AI can't accidentally wreck your machine.
If you want the deep technical details of how this is wired up, see opencode/README.md inside this repo.
If you install the Recommended tier (or higher), the bootstrap drops a oneโclick app called JustVibes into your ~/Applications folder.
Open it from Spotlight, Launchpad, or Finder โ drag it to your Dock for oneโclick access. It opens Ghostty in your saved workspace folder and starts OpenCode automatically. No commands to remember.
Fresh every time. JustVibes always opens a single window with a single tab running OpenCode, regardless of what Ghostty had open last time. macOS would normally restore your previous Ghostty windows on launch; JustVibes suppresses that just for itself so the experience stays predictable. One side effect: if you open extra tabs inside a JustVibes window and then quit Ghostty (
Cmd+Q), those extra tabs won't come back the next time you click JustVibes. Manual Spotlight/Dock launches of Ghostty are unaffected โ they restore normally.
Branded identity, two things to quit. JustVibes shows up as JustVibes (with a piggy-bank icon) in your Dock, Cmd-Tab switcher, and Activity Monitor โ distinct from Ghostty. The launcher and the terminal are two separate processes by design: this is what lets the launcher have its own identity. The trade-off is that quitting JustVibes (
Cmd+Qfrom its Cmd-Tab card or right-click โ Quit on the Dock tile) does not quit the Ghostty window it spawned, and vice versa. Quit them separately.
Cmd-Tab focuses the terminal. When JustVibes is already running, Cmd-Tabbing to its card (or clicking its Dock tile) brings the most recently spawned Ghostty terminal window forward โ no need to Cmd-Tab past JustVibes to find Ghostty's card. The first time this happens after install, macOS may show a one-time Accessibility prompt asking to allow JustVibes to control "System Events"; click Allow. Saying no is fine โ Cmd-Tabbing to JustVibes will just launch a fresh terminal instead of focusing the existing one.
Want to disable PID tracking entirely (and always get a fresh terminal on Cmd-Tab)? Set this in your shell:
export JUSTVIBES_TRACK_GHOSTTY_PID=0
Want a plain shell instead? Open Terminal or Ghostty directly. JustVibes is purely a convenience launcher; it doesn't change anything else on your system.
This project uses small shell startup files stored in:
~/.config/ai-bootstrap/shell/
Your existing ~/.zshenv, ~/.zprofile, and ~/.zshrc are never replaced. Three small, guarded blocks are appended (one per file) so you can remove them at any time:
# ai-bootstrap
[[ -f ~/.config/ai-bootstrap/shell/init_env.zsh ]] && source ~/.config/ai-bootstrap/shell/init_env.zsh
# ai-bootstrap
[[ -f ~/.config/ai-bootstrap/shell/init_profile.zsh ]] && source ~/.config/ai-bootstrap/shell/init_profile.zsh
# ai-bootstrap
[[ -f ~/.config/ai-bootstrap/shell/init_rc.zsh ]] && source ~/.config/ai-bootstrap/shell/init_rc.zshZsh runs three different startup files depending on how a terminal or script is opened, and each one has a different job. The installer mirrors that split so the right things load at the right time:
init_env.zsh(loaded by~/.zshenv) โ runs in every zsh, including background scripts. Sets upPATH, the list of folders your Mac searches for commands. Stays silent and fast so scripts and editor integrations aren't slowed down.init_profile.zsh(loaded by~/.zprofile) โ runs in login shells, such as your first terminal after logging in. ReโappliesPATHafter macOS adjusts it, and activates tools likemisethat need login-shell context.init_rc.zsh(loaded by~/.zshrc) โ runs in interactive shells, meaning terminals you actually type into. Loads zsh plugins (zplug), the Spaceship prompt, command highlighting, suggestions, and qualityโofโlife aliases.
Each block is guarded so it does not load twice, and PATH updates are safe to repeat. Reโrunning the installer or having extra shell files around should not break anything.
If you chose OpenCode Go/Zen and need to add or rotate your API key:
- Visit https://opencode.ai and sign in
- Navigate to the Zen tab
- Click Copy Key
- Run in Terminal:
security delete-generic-password -s 'opencode-api-key' -a "$USER" 2>/dev/null
security add-generic-password -s 'opencode-api-key' -a "$USER" -w "$(pbpaste)"The key will be loaded automatically on your next terminal session or JustVibes launch. Using pbpaste keeps the key out of your shell history.
A CLI tool stopped working after brew upgrade (or after a long time without reโrunning bootstrap). Run:
~/code/ai-dev-bootstrap-mac/bootstrap.sh --refresh-pathsThis reโbakes Homebrew's prefix paths into your shell config without touching anything else.
Want to check whether your paths are stale without making changes?
~/code/ai-dev-bootstrap-mac/bootstrap.sh --check-pathsExits 0 if paths are healthy, nonโzero if they look stale.
Safe to run again anytime. The installer skips what you already have and can add new tools later (for example, upgrading from Essential to Recommended).
To get the latest AI skills, commands, helper scripts, OpenCode settings, and JustVibes launcher updates without repeating the full installer prompts, run:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/skwid138/ai-dev-bootstrap-mac/main/install.sh)" -s -- --updateThe update path uses your saved tier and workspace. It refreshes managed OpenCode assets, overwrites helper scripts, preserves your current OpenCode model setting, re-runs the shell configuration module, and rebuilds JustVibes only when the launcher files changed. Module 10 may install shell config dependencies like zplug if selected in your tier.
Inside OpenCode, you can also ask โam I up to date?โ or run:
/check-updates
After an update, quit and reopen JustVibes so OpenCode loads the latest skills, commands, and instructions.
brew install bats-core && bats tests/ai-dev-bootstrap-mac/
โโโ bootstrap.sh # Main entry point โ the installer
โโโ install.sh # One-liner bootstrapper (curl target)
โโโ lib/ # Shared shell helpers
โโโ modules/ # Install modules (one per tool/feature)
โโโ config/ # Package definitions and tier mappings
โโโ dotfiles/ # Modular zsh configuration files
โโโ ghostty/ # Ghostty terminal config and themes
โโโ launcher/ # JustVibes app bundle and build scripts
โโโ opencode/ # OpenCode AI config (agents, skills, commands)
โโโ scripts/ # Helper scripts for OpenCode self-maintenance
โโโ tests/ # Bats test suite
โโโ CONTRIBUTING.md # Development guide and quality gates
โโโ README.md
- JustVibes app icon: Lucide
piggy-bank(ISC License). SeeTHIRD_PARTY_LICENSES.md.
MIT