01 — macOS 桌面 · 两个 Actor 轮流
一方说完,
不算完。
Buddy 自己不写代码。它让两个已经装在你电脑上的 AI 命令行轮流上场:执行方实现,审查方检查。单方说出 type=break 不会停。两边都这么写,而且指令队列里没有待执行的内容,这一栏才算完成。
源码以 haorui-lab/buddy 的 main 为准,版本 1.2.15。2026-11-09 查看时,这个仓库的 Releases 没有附件,页面不放安装包直链。
02 — 规则可以亲手推
只有两边都签字,章才落下。
下面这张表按仓库里的结束规则来:轮到谁,谁落笔。一方请求结束,要等另一方也写下 type=break。勾着「队列里还有指令」时,双签之后任务继续。没勾,并且两边都签了,状态变成 DONE,原因是 dual_break_confirmed。这是规则演示,不是 Buddy 的窗口。
轮次 01 · READY
执行方
审查方
- 00没有脚本时,表停在这里。结束条件已经写在上面。
03 — 本机已有的命令
五个原生入口,外加一条契约。
没有单独指定时,执行方按 Claude、审查方按 Codex。五个都可以换,也可以对调。命令是源码里的默认值。能接着上次会话的参数,以启动器代码为准,不照抄 README 里已经过时的那一列。
- Claude Codeclaude--resume
- Codexcodexexec resume
- Cursor CLIcursor-agent--resume
- OpenCodeopencode--session
- Kimi Codekimi-S
命令对不上这五个原生种类时,走契约模式:参数里带 actor、mode、仓库和任务目录,环境变量里有 BUDDY_ACTOR、BUDDY_MODE、BUDDY_SESSION_ID。OpenCode 需要伪终端,否则它会在管道里挂住。
04 — 没有数据库
任务停在本机的文件夹里。
数据根目录是 ~/Library/Application Support/buddy/。工作区目录名不是随便一串哈希:先取仓库文件夹名,整理后截到 40 个字符,再接上这条路径 SHA-256 的前 12 位。
JSON 先写到带 .tmp 的临时文件,再改名换上。读的时候用 Zod 校验。写事件之前,看起来像密钥的字符串会换成 [REDACTED]。
应用重启时,状态是 RUNNING_* 或 PINGING 的任务会被改成 PAUSED。单次失败记为 FAILED。连续失败默认到 10 次,就暂停等你处理。若对方已经请求结束,而这一方出错无法继续,结束原因是 break_confirmed_on_failure。
界面文案有简体、繁体和英文。设成自动时,语言标签里带 Hant、TW、HK、MO 用繁体,其他中文用简体,英文用英文。
~/Library/Application Support/buddy/
├── global/settings.json
├── runtime/tasks/
└── workspaces/{文件夹名}-{12位摘要}/
├── workspace.json
└── tasks/{task_id}/
├── state.json
├── settings.json
├── task.md
├── context.md
├── events.jsonl
├── transcript.jsonl
└── artifacts/
05 — 23 个预设
主题是产品里的 23 块颜色,不是这一页的皮肤。
15 个暗色,8 个亮色。色块取自 src/renderer/themes/definitions.ts 的 surface,左侧细条是 accent。本页保持纸色,不跟着这些主题变。
- buddy-dark
- codex-dark
- dracula
- catppuccin-mocha
- catppuccin-macchiato
- nord
- one-dark-pro
- tokyo-night
- gruvbox-dark
- kanagawa
- rose-pine
- github-dark
- material-palenight
- ayu-dark
- vitesse-dark
- buddy-light
- codex-light
- catppuccin-latte
- github-light
- gruvbox-light
- kanagawa-lotus
- one-light
- rose-pine-dawn
06 — 怎么装
先有命令行,再谈 Buddy。
- 系统要求按仓库说明:macOS 12(Monterey)或更高。打包目标是 arm64 与 x64 的 DMG。Buddy 不自带模型。
- 先在本机装好并登录至少一个工具:Claude Code、Codex CLI、Cursor CLI、OpenCode 或 Kimi Code。只查版本号不够,没登录或权限不够,Buddy 也调不起来。
- 打开 haorui-lab/buddy 的 Releases。2026-11-09 这里没有发行版,也没有 DMG。不要把别的仓库的附件当成这一版的下载。
- 从源码构建:在仓库里执行
pnpm install,再执行pnpm dist。DMG 出现在release/。签名公证走pnpm release:signed,需要CSC_NAME。
仓库自带的文档站在 davidhoo.github.io/buddy。那个页面的下载按钮指向 davidhoo/buddy 的 Releases。electron-builder 的发布配置同样写着 davidhoo/buddy。本页的仓库链接只给 haorui-lab/buddy。
07 — 边界
它安排轮次,不代替你的工具。
- 任务状态、对话和产物写在本地。应用依赖 electron-updater,更新源按打包配置指向 GitHub。你选的命令行仍按它自己的账号联网。
- 自动协作轮次默认最多 9999,可以改成不限制。到顶会暂停,等你点继续。
- 运行中可以排队下一条指令,当前轮结束再执行。双签时队列不空,任务不会就此 DONE。
- Git 这边可以看变更、提交和推送,也能用当前 Actor 在本地生成 conventional commit 说明。默认会尝试自动生成。
- 完成、失败或暂停时可以发 macOS 通知,默认开着。
- 界面是 React 18。主进程里是状态机和子进程调度,preload 走 IPC。技术栈还有 TypeScript 5、Electron 33、electron-vite、Tailwind、Zod、pnpm。许可证是 MIT。