Buddy

v1.2.15 · ac398ce

← haorui.dev

01 — macOS 桌面 · 两个 Actor 轮流

一方说完,
不算完。

Buddy 自己不写代码。它让两个已经装在你电脑上的 AI 命令行轮流上场:执行方实现,审查方检查。单方说出 type=break 不会停。两边都这么写,而且指令队列里没有待执行的内容,这一栏才算完成。

源码以 haorui-lab/buddy 的 main 为准,版本 1.2.15。2026-11-09 查看时,这个仓库的 Releases 没有附件,页面不放安装包直链。

双签示意宽图:三轮之后执行方和审查方都写下 type=break,队列为空,栏末盖完成。这不是 Buddy 的应用截图。
示意宽图,不是应用界面。画的是结束条件,不是窗口。

02 — 规则可以亲手推

只有两边都签字,章才落下。

下面这张表按仓库里的结束规则来:轮到谁,谁落笔。一方请求结束,要等另一方也写下 type=break。勾着「队列里还有指令」时,双签之后任务继续。没勾,并且两边都签了,状态变成 DONE,原因是 dual_break_confirmed。这是规则演示,不是 Buddy 的窗口。

轮次 01 · READY

执行方

审查方

  1. 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。

  1. 系统要求按仓库说明:macOS 12(Monterey)或更高。打包目标是 arm64 与 x64 的 DMG。Buddy 不自带模型。
  2. 先在本机装好并登录至少一个工具:Claude Code、Codex CLI、Cursor CLI、OpenCode 或 Kimi Code。只查版本号不够,没登录或权限不够,Buddy 也调不起来。
  3. 打开 haorui-lab/buddy 的 Releases。2026-11-09 这里没有发行版,也没有 DMG。不要把别的仓库的附件当成这一版的下载。
  4. 从源码构建:在仓库里执行 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。