GraphCode
把多个真实终端里的编码 Agent 会话连成一张可随时接管、纠偏的图。
- Star 数
- ★ 139
- 最近更新
- 1 天前
- License
- NOASSERTION
- 主语言
- Swift
- FA 评分
- 48/100 · 缺口较多
30 秒速览
- 运行形态
- 可在哪里用
- 兼容但需适配ChatGPT · Codex · Claude Code
- 费用
- 软件免费,模型调用费用自付
- 上手难度
- 中 · 需要几步配置
- 开始前需要
- 典型场景
- 你想在一个仓库上并行推进多条独立工作线(重构、修构建、修 issue),需要在一张图上看到它们之间何时该交接,而不是开十个终端窗口自己盯。
- 不适合
- 使用 Windows 或 Intel Mac 的团队(目前仅支持 Apple Silicon 上的 macOS 15+)
- 希望工具自带模型或 Agent CLI 的用户——GraphCode 不捆绑任何 Agent
- 不接受 FSL-1.1-MIT 许可、要基于它做竞品商业分发的团队
- 源码审查
- 48/100 · 缺口较多
这个 Agent 能做什么,适合哪些场景?
GraphCode 是一款 macOS 应用,把多个真实的 CLI 编码 Agent 会话组织成有向图:每个节点是一个循环(loop),也就是某个 CLI 会话中的一个工作单元,可由 Claude Code、GitHub Copilot CLI、Codex、OpenCode 或 pi 执行,逐循环选择;每条边是节点之间的交接、消息或派生,两端可以是不同的 Agent。循环分为回合制、目标制、时间制和复合型四类,区别在于你不再需要手工处理什么:检查、停止条件、触发时机,或整段提示词。应用本身不做调度,时间制循环的周期写在会话内部的 `/loop` 提示词里,守护进程 `graphcoded` 只负责保持会话存活、触发交接边并轮询目标判定条件。每个循环的终端是 `zmx` 会话,退出应用甚至重启机器后仍可 `--resume` 恢复,所以它始终是一个你能 attach 进去并当场纠正的活动终端,而不是已经跑完的后台任务。状态存放在 `~/.graphcode/`,不会写入你打开的项目目录;工作区(`~/.graphcode-<name>`)之间完全隔离。
GraphCode 由四部分组成:UI graphcode.app 提供项目侧边栏、图形画布和每个循环的终端工作区(标签页、分屏、⌘K 跳转、⌘⇧R 遍历向你求助的循环);后台守护进程 graphcoded(launchd agent)持有每个项目的图、触发交接边、轮询目标谓词,并在应用未打开时维持无人值守会话;CLI graphcode 复用同一守护进程,提供 projects、status、node create --backend claudeCode|copilotCLI|codex|openCode|pi、node send --follow-up、reap --dry-run 等命令;zmx 第三方会话守护进程保持每个循环的 PTY 存活,GhosttyKit 负责终端渲染。典型流程是:添加项目(本地目录、URL 克隆,或通过 SSH 连接远程仓库,在服务器上跑循环、由这台 Mac 操控),在画布上新建循环并写提示词、选 Agent(默认 Claude Code,可在 Settings ▸ New loops use 修改),点击节点进入该循环的终端,再在节点之间拖拽连线,把边设置成交接(源循环结束时触发)、消息或派生,并可加条件与循环保护。目标制循环的完成判定可以是 shell 谓词,创建时有 Test 按钮按守护进程的方式先跑一遍。Copilot 循环可通过 Settings ▸ Preferred versions 固定 CLI 版本,该设置会传给新建与恢复的 Copilot 会话以及标题/摘要请求,也支持在 ~/.graphcode/settings.json 中写 "copilotPreferredVersion"。
- 你想在一个仓库上并行推进多条独立工作线(重构、修构建、修 issue),需要在一张图上看到它们之间何时该交接,而不是开十个终端窗口自己盯。
- 你把「修到测试通过为止」这类任务交给目标制循环:完成条件写成
make test退出码为 0,然后去干别的事,需要时再 attach 进去干预。 - 你需要按小时做 issue 分诊或例行巡检,用时间制循环把
/loop 1h …写进提示词,让周期留在会话内部而不是外部调度器里。 - 你要把多步流水线串起来,用复合型循环让一个子图从头跑到尾,并让其中一个循环再派生出子循环。
- 你在多台机器上工作,希望循环跑在远程主机(SSH、密钥认证、服务端需有 zmx),而由本机统一观察和纠正。
- 你同时打理互不相关的几条业务线,用 Workspace(⌥⌘1…⌥⌘9 切换)把各自的图、循环和终端完全隔离开。
如何安装或部署这个 Agent?
环境要求:macOS 15+ 且为 Apple Silicon(arm64),PATH 中至少有一个编码 Agent CLI(claude、copilot、codex、opencode 或 pi)——GraphCode 不捆绑任何一个。
用 Homebrew 安装:
brew install --cask scgopi/graphcode/graphcode或从最新 .dmg 拖入 Applications(发布版已做 Developer ID 签名与公证):
open https://github.com/scgopi/GraphCode/releases/latest/download/graphcode-macos-arm64.dmg从源码构建需要 mise(Xcode、tuist、swiftlint、zig 都通过它管理)以及各子模块:
git submodule update --init --recursive
make doctor
make third-party # builds zmx and GhosttyKit (zig)
make install-zmx install-cli daemon-install
make run-app
make test # unit tests
make check # swiftlint + swift-format, both strict若想在已安装正式版旁边跑本地构建,可复制 .env.example 为 .env.local 并选择自己的 bundle-ID 前缀:
make dev-run-app如何使用这个 Agent?
首次使用先添加项目,再建循环,然后 attach 查看、连线编排。
在图形界面里:侧边栏 ⊕ 添加项目;画布上的 ⊕ 新建循环,写提示词、选执行它的 Agent(默认 Claude Code,可在 Settings ▸ New loops use 修改);点击节点打开该循环的终端工作区,用 ⌘K 跳到任意循环、⌘⇧R 依次走到正在向你求助的循环;在节点之间拖拽建立边。
同一个守护进程也能用命令行驱动:
graphcode projects
graphcode --help
graphcode status <project>
graphcode node create --backend claudeCode
graphcode node send --follow-up
graphcode reap --dry-run固定 Copilot CLI 版本时,先在每台会运行 Copilot 的机器(含远程主机)安装该版本:
npm install -g @github/[email protected]
copilot --prefer-version 1.0.84-5 --version然后在 Settings ▸ Preferred versions ▸ Copilot CLI 中选择该版本;不打开应用时,直接写配置文件(每次启动都会读取,无需重启守护进程):
{
"copilotPreferredVersion": "1.0.84-5"
}多工作区用 ⌥⌘1…⌥⌘9 切换、⌘ / ⌘⇧ 前后跳转、⌥⌘N 新建,CLI 侧通过同一个变量对齐:
GRAPHCODE_SUPPORT_DIR=~/.graphcode-work graphcode status <project>这个 Agent 有哪些优点和局限?
- 同一张图里可以混用不同 Agent:一个 Codex 循环交接给 Claude Code 循环,后者再给 Copilot 循环发消息,边本身不关心两端是谁。
- 循环的终端是 zmx 会话,退出应用甚至重启后仍可用
--resume恢复原会话,而不是重开一个重复任务,因此运行中的循环始终可 attach、可中途纠正。 - 守护进程
graphcoded独立于 UI 运行,应用关掉后仍会触发交接边、轮询目标谓词并维持无人值守会话。 - 状态全部放在
~/.graphcode/,明确不向你所打开的项目目录写入任何内容。 - 工作区之间完全隔离(各自的图、各自的
graphcoded、各自的 Dock 图标),适合把不相关的几条工作线分开监控。
- 仅支持 macOS 15+ 的 Apple Silicon(arm64),Windows 移植仍是 preview,不构成发布平台承诺。
- 应用不捆绑任何 Agent CLI,必须自行安装并在 PATH 中可用,模型与用量成本也由用户自己承担。
- Codex、OpenCode 和 pi 没有
/loop技能,时间制循环必须开启实验性的 Daemon heartbeat 才能实现。 - 许可证为 FSL-1.1-MIT:不允许基于它做竞品商业分发,每个版本发布两年后才转为纯 MIT(GraphcodeKit/ 与 graphcode-cli/ 为 MIT)。
- 部分操作有前置步骤:例如固定 Copilot CLI 版本需要先在每台主机(含远程)安装该版本,否则循环启动时并不存在。
这个 Agent 与同类方案有什么区别?
README 明确提到灵感来自 Supacode,两者都采用守护进程维持终端会话的主干,但 Supacode 的单位是 worktree,GraphCode 的单位是循环组成的图。此外 GraphCode 建立在 Ghostty(终端引擎)与 zmx(会话守护进程)之上,并可与 Claude Code、GitHub Copilot CLI、Codex、OpenCode、pi 这些 CLI Agent 配合使用。
与相关度最高的同类 agent 并排比较关键指标。
| Agent | 源码审查 | 形态 / 费用 | Star | 最近更新 | 主语言 | 完整支持的平台 |
|---|---|---|---|---|---|---|
| GraphCode 当前 | 48 · 缺口较多 | 桌面应用免费 + 模型费 | ★ 139 | 1 天前 | Swift | ChatGPT · Codex · Claude Code |
| hcom | 69 · 存在缺口 | 命令行工具免费 + 模型费 | ★ 566 | 1 天前 | Rust | Codex · Claude Code |
| Vigil 多智能体终端编排器 | 69 · 存在缺口 | 桌面应用免费 + 模型费 | ★ 29 | 3 天前 | Swift | Codex · Claude Code |
| Agent Skills 技能库 | 67 · 存在缺口 | Agent 插件 / 技能免费 + 模型费 | ★ 240 | 1 个月前 | Python | Codex · Claude Code |
FollowAgents 如何评估这个 Agent?
查看各维度的扣分理由
信任维度:README 明确说明状态写入 ~/.graphcode/,且“Nothing is ever written inside a project folder you open”,这是可核查的最小权限声明,但未给出沙箱或权限清单,故 least_privilege 仅 1。user_confirmation 方面,README 提到 goal 的 done check 有 Test 按钮、reap --dry-run,但缺少对破坏性操作的统一确认流程,故 1。data_flow_transparency 仅说明本地状态目录与远程 SSH 运行,未描述数据流向第三方 agent CLI 的细节,故 1。sensitive_data_handling 有测试证据:agentRuntimes.test.ts 显示只读取 Nod 自己的 Keychain 项(app.graphcode.nod/anthropic-api-key、github-token),并清除继承的 ANTHROPIC_AUTH_TOKEN、CLAUDE_CODE_OAUTH_TOKEN 等,属于具体实现证据,故 2。dependency_security 方面,CI 固定了 actions/checkout 的 commit hash,但 README 要求用户自行安装 claude/copilot/codex 等 CLI,未提供依赖版本锁定或漏洞扫描,故 1。external_effects 方面,README 承认会启动 daemon、创建 zmx 会话、可远程 SSH 执行,但未提供影响范围清单或回滚说明,故 1。rollback 方面,仅提到 sessions outlive everything 与 --resume,未描述失败恢复或状态回滚机制,故 1。source_attribution 方面,README 明确致谢 Supacode、Ghostty、zmx,LICENSE 区分 GraphcodeKit/graphcode-cli 的 MIT 与其余 FSL-1.1-MIT,并说明 ThirdParty 保留各自许可,故 2。
可靠性维度:self_consistency 方面,README 对 loop 类型、daemon、CLI 的描述与测试文件中的协议(NodProtocol.swift、parseCommand)基本一致,contract.test.ts 用同一事件列表验证 Swift 解码与 TS 解析,故 2。dependency_availability 方面,README 要求 macOS 15+ Apple Silicon、mise、submodules、zig 构建 zmx 与 GhosttyKit,依赖较重且未提供版本锁定或离线方案,故 1。failure_messages 方面,controlSocket.test.ts 明确验证 malformed line 返回 {ok:false,error:"not JSON"}、handler 异常返回具体错误且保持连接,属于可核查的失败信息设计,故 2。
适应性维度:audience_and_scenarios 方面,README 面向 macOS 开发者,给出 turn-based/goal-based/time-based/composite 四类场景与示例,故 2。capability_boundaries 方面,README 明确 GraphCode schedules nothing、Codex/OpenCode/pi 无 /loop skill 需开启 Daemon heartbeat、Windows 端口为 preview,边界清晰,故 2。trigger_precision 方面,goal 的 shell predicate 与 edge 条件、cycle guard 有描述,但缺少精确的触发语义定义或测试证据,故 1。environment_fit 方面,仅支持 macOS 15+ Apple Silicon,Windows 为 preview,Linux 仅 CI 构建,环境适配窄,故 1。
约定维度:information_architecture 方面,README 有 How it works、Install、Using it、Parts、Workspaces、Building from source、Credits & license 等清晰分节,故 2。install_notes 方面,给出 brew cask、dmg、源码构建 make doctor 等步骤,故 2。naming_stability 方面,CLI 动词(node create、node send --follow-up、reap --dry-run)与设置项有描述,但无版本化命名策略或弃用说明,故 1。examples_and_faq 方面,有 loop 类型示例与 Copilot 版本固定示例,但无 FAQ,故 1。known_limitations 方面,提到 Windows preview、Codex/OpenCode/pi 需 heartbeat、GraphCode installs nothing itself,但未集中列出限制,故 1。license 方面,LICENSE 文件完整给出 FSL-1.1-MIT 全文并区分目录许可,故 2。versioning_changelog 方面,README 有 release badge 与 releases 链接,但仓库内无 CHANGELOG 文件,故 1。maintenance_responsibility 方面,LICENSE 署名 Copyright 2026 scgopi,README 有 DCO 与贡献说明,但发布者身份未经验证,维护责任不明确,故 1。
有效性维度:output_usability 方面,README 描述 per-loop terminal workspace、tabs/splits、⌘K 跳转、⌘⇧R 遍历,输出面向可操作终端,故 2。marginal_value 方面,相对单终端 agent,GraphCode 提供多 loop 编排、跨 agent hand-off、会话持久化,边际价值明确,故 2。cost_benefit 方面,需要 macOS 15+ Apple Silicon、mise、zig 构建第三方组件、自行安装多个 agent CLI,成本较高且未量化收益,故 1。
可验证性维度:claim_traceability 方面,README 的多数声明(如 sessions outlive everything、nothing written in project folder)未附代码或测试引用,仅少数有测试佐证,故 1。cross_source_corroboration 方面,README 的协议描述与 NodRuntime/test/contract.test.ts、controlSocket.test.ts、agentRuntimes.test.ts 相互印证,故 2。fact_inference_separation 方面,README 混合了事实描述与营销性表述(如“run ten”),未明确区分已验证与未验证内容,故 1。
- 发布者身份未经验证,维护责任与更新路径不明确,采用前应确认发布渠道与签名。
- 依赖多个第三方 agent CLI(claude、copilot、codex、opencode、pi),GraphCode 不捆绑也不锁定版本,存在供应链与版本漂移风险。
- 仅支持 macOS 15+ Apple Silicon,Windows 为 preview,Linux 仅 CI 构建,环境适配窄。
- README 中多数能力声明缺少代码或测试引用,静态审查无法验证运行时行为。
- daemon 与 zmx 会话会持续运行并可能通过 SSH 在远程主机执行,需自行评估影响范围与回滚方案。
常见问题
它会不会替我调用模型、包含模型费用?
claude、copilot、codex、opencode 或 pi,相关订阅或 API 费用由你承担。关掉应用或重启电脑,正在跑的循环会中断吗?
zmx 会话,退出应用甚至重启后依然存在;重启应用会用持久化的后端会话 ID 通过 --resume 恢复对话,而不是新建一个重复会话。它会往我的项目目录里写文件吗?
~/.graphcode/,永远不会写入你打开的项目文件夹。可以让它按固定时间间隔重复跑吗?
/loop 技能,不是外部调度器;Codex、OpenCode 和 pi 没有该技能,需要在 Settings 中开启实验性的 Daemon heartbeat。能同时管理多套互不干扰的编排吗?
~/.graphcode,其余为 ~/.graphcode-<name>),拥有自己的图和自己的 graphcoded,彼此不可见;CLI 通过 GRAPHCODE_SUPPORT_DIR 对齐到同一工作区。