macOS Dev Setup(编排器)用于把一台全新安装或配置到一半的 Mac,通过按顺序调用同一技能集合中的聚焦技能,变成可用的开发环境。其核心原则是“先规划、后安装”:在用户看到并裁剪计划之前,不安装任何东西。
用途与定位
该技能是一个编排器,负责协调多个单一领域的技能,而不是自己完成所有安装。当请求只涉及某一个领域时,应路由到对应的聚焦技能,例如 macos-system-prep(CLT/更新/Rosetta)、macos-security-baseline、macos-defaults、homebrew-setup、zsh-setup、dev-cli-tools、git-ssh-identity、language-runtimes、dotfiles-setup、editor-setup、mac-dev-apps、docker-on-mac、web-dev-setup、mobile-dev-setup、cloud-dev-setup、ai-dev-tools、mac-maintenance(更新)。
执行模型
一个代理、一个会话,本技能作为指挥:对每个选中的区域,遵循该技能的工作流(若尚未加载则读取其 SKILL.md),遵守其安全护栏,运行其验证,失败即停止——先报告并修复,再继续。每个区域技能会重新检查自身前置条件,因此恢复或部分运行是安全的。若平台无法加载同级技能,则按相同顺序应用各区域的规范步骤,并说明这一点。
工作流
- 盘点(只读,在任何提议之前)
运行以下命令收集信息:
sw_vers && uname -m xcode-select -p 2>/dev/null; command -v brew && brew --version git config --global user.email 2>/dev/null; ls ~/.ssh/id_* 2>/dev/null command -v node python3 docker 2>/dev/null; ls ~/.oh-my-zsh 2>/dev/null df -h / | tail -1 # free disk
已有组件会被保留——计划只覆盖缺口(绝不重装 brew,绝不触碰现有 SSH 密钥)。两个盘点答案会影响计划:
- 是否已有 dotfiles 仓库?恢复已有仓库要尽早进行(在 Homebrew 之后、shell/git 区域写入其拥有的文件之前)——若放到最后恢复,会覆盖刚写入的配置。创建新的 dotfiles 仓库则放在最后(用于捕获所有内容)。
- 磁盘门槛:重型轨道有阈值——iOS 轨道在可用空间低于约 60 GB 时不要开始(Xcode + 运行时 + 扩展余量),Android 低于约 20 GB 时不要开始;应展示数字并让用户决定。
- 提出计划,询问两次,然后执行
核心顺序(顺序至关重要):
- OS 更新、CLT、Rosetta — macos-system-prep — 一切都依赖 CLT;安装前先更新
- FileVault、防火墙、Touch ID sudo — macos-security-baseline — 在机密落盘之前
- Homebrew + Brewfile — homebrew-setup — 以下所有内容的包层
- zsh + 提示符 — zsh-setup — 拥有 .zshrc 结构,其他技能向其追加
- CLI 工具带 — dev-cli-tools — 需要 brew + .zshrc
- git + SSH 身份 — git-ssh-identity — 在首次 clone 之前
- 运行时管理器 — language-runtimes — 在任何项目工作之前
- macOS 默认值 — macos-defaults — 外观类;在 1 之后任意时间
- 编辑器 — editor-setup
- Dotfiles 仓库 — dotfiles-setup — 最后:捕获以上所有内容
可选轨道——仅显式选择,绝不传递性安装:mac-dev-apps、docker-on-mac、web-dev-setup、mobile-dev-setup(询问 iOS/Android)、cloud-dev-setup(询问提供商)、ai-dev-tools(询问哪些 CLI)。
请用户确认/裁剪核心 + 轨道(对重型轨道提及磁盘/时间:完整 Xcode 约 40–50 GB,Android 约 15 GB)。整个技术栈采用现代默认:Shell 用 Starship,运行时用 mise + uv + rustup,同时按各技能的“先检测”规则保留现有设置(Oh My Zsh、nvm/pyenv/jenv);仅在用户要求时才偏离。
- 带验证包围地执行
每个区域:运行该技能的工作流 → 运行其检查(每个都附带只读的 scripts/check.sh 或验证命令)→ 只有通过后才推进。检查失败会停止运行;与用户一起修复或明确推迟。
- 最终验证 + 手动步骤报告
只对选中的区域运行检查,每条命令单独运行(不用 && 链——一个失败不能掩盖其余),读取真实输出:
brew doctor # 若 homebrew 区域运行过 git config --global user.email # 若 git 区域运行过 ssh -T git@github.com # 成功 = 带 EXIT CODE 1 的 "Hi <user>!..." 文本(正常) node -v; python3 --version # 若运行时区域运行过 docker info --format '{{.ServerVersion}}' # 若 docker 轨道运行过(不拉取镜像)
最后给出两个列表:已完成(按区域,附验证输出)和剩余手动步骤——通常包括:App Store 登录(Xcode/mas 应用)、FileVault 恢复密钥存储、许可证密钥(Parallels/VPN)、设置同步登录、Raycast 热键、AI CLI 的订阅登录。在用户确切知道还剩什么之前,机器不算“完成”。
安全护栏(继承 + 编排层)
每个区域技能的安全护栏原样适用(sudo/重启需同意、聊天中不含机密、修改前备份、可幂等重跑)。
未经显式选择,不安装任何可选轨道;不做“顺便”添加。
长时间运行被中断?重新调用:已完成的区域验证干净并跳过。(恢复对安装是安全的;偏好类更改如 macos-defaults 只是重新应用所选值——只有该技能执行了快照步骤时,先前的值才可恢复。)
输出规范
完成意味着:每个选中区域自身的验证通过,最终整机检查运行过,摘要列出已完成/已推迟/手动项。建议将 mac-maintenance 作为周期性后续节奏。
注意事项
经典顺序错误:CLT 尚未完成就装 Homebrew(静默卡住)——区域 1 完成后区域 3 才能开始,这两者不能并行。
半配置的机器会隐藏故障:即使区域被当作“已完成”而跳过,也要运行验证。
OS 更新(区域 1)可能重启机器——相应安排会话;之后一切可干净恢复。
多小时轨道(Xcode 下载)放在所选集合的最后,这样卡住不会阻塞其余部分。