返回 文章 apply CMS 文章

drawgent:在实时 Excalidraw 画布上运行你自己的编码代理

把你自己安装的编码代理接到一块实时 Excalidraw 画布上,用聊天或画布注释让它直接画图、改图。

drawgentExcalidraw编码代理Claude Code
成长分 / 100 70 综合收获、行动、留存与影响

drawgent:在实时 Excalidraw 画布上运行你自己的编码代理
为什么值得读展示了一种把编码代理从终端搬到可视化画布上的新交互方式,用 AGENT: 注释和激光区域触发代理编辑。

详细说明了如何复用你已有的 Claude Code、Codex 或 opencode 安装、登录与配置,而不是另起一套代理。

关键洞察
  1. drawgent 连接的是你自己的代理 CLI(claude、codex、opencode),setup 会检查 CLI、登录状态、ACP 桥接、画布工具和无头 Chrome。
  2. 在画布上写以 AGENT: 开头的文本或从便签画箭头指向形状,停止输入约 2.5 秒后触发,代理完成后把注释标记为 DONE。
  3. 激光区域:用 Excalidraw 激光(K)圈选图表的一部分,轨迹作为红色轮廓保留,下一条消息会连同区域边界和覆盖元素一起发给代理。
转成行动

深入阅读

正文与原文对照

原文保真覆盖:全文原文字符:10923

drawgent:你在实时 Excalidraw 画布上的编码代理#

drawgent 将你自己的 Claude Code、Codex 或 opencode(你自己的安装、登录、配置和

仓库)连接到一个 Excalidraw 白板。在聊天面板中请求生成图表,或者在你想修改的绘图部分旁边

写下 AGENT: …。代理会查看画布(截图 +

场景),实时编辑它,检查结果,并将该注释标记为 DONE

。

工作原理#

快速开始#

前提条件:已安装并登录 claude

、codex

或 opencode

中的任意一个。Claude 和

Codex 桥接还需要 Node.js ≥ 18(npm)。

drawgent setup claude # 每个 agent 执行一次:claude | codex | opencode
cd ~/my-repo
drawgent up # 在该仓库中新建 agent 会话,并在浏览器中打开画布
drawgent up --attach # 或者:从正在运行的会话中选一个,并将画布连接到它

演示#

drawgent setup <agent>

#

检查所有内容一次,当缺少某些东西时,会以确切的修复方法失败,并写入

~/.config/drawgent/config.toml

:

-代理 CLI。你的claude

/codex

/opencode

在 PATH 上。 -登录。claude auth status

、codex login status

或opencode auth list

。 -ACP 桥接。- opencode 本身支持 ACP(

opencode acp

)。 - Claude Code 和 Codex 使用官方 ACP 适配器。它们被一次性安装到

~/.cache/drawgent/adapters

(约 60 MB),不包含它们捆绑的代理二进制文件,并指向你的CLI(CLAUDE_CODE_EXECUTABLE

、CODEX_PATH

)。 - 然后设置会验证 ACP 握手。

  • opencode 本身支持 ACP( -附加会话的画布工具。只有 Codex 需要更改:codex mcp add drawgent -- drawgent mcp

。Claude 和 opencode 在附加时获得这些工具。 -用于渲染器的无头 Chrome。如果你有 Chrome/Chromium,设置会使用它。否则它会建议:- 下载

Chrome Headless Shell(Chrome for Testing,约 120 MB,无需 sudo)到~/.cache/drawgent/chrome

,并准确告诉你缺少哪些系统库(如果有的话); - 使用你的包管理器安装 Chromium(

apt

、snap

、dnf

、pacman

、zypper

、apk

、brew

或nix

,无需 sudo)。

非交互式:

--chrome download | system | /path/to/chrome

。 - 下载

drawgent up

在该代理的设置成功之前拒绝启动,或者如果设置记录的内容消失了。

drawgent up

#

在当前目录(工作区)中运行:

  • 在 127.0.0.1:7300

上启动编辑器 + API(如果被占用则使用下一个空闲端口); - 通过 ACP 启动你的代理的新会话,在工作区中工作;

  • 打开你的浏览器。在无头机器上,它会打印 ssh -L

命令。

实时场景及其同步状态保存在 .drawgent/scene.json

中,该文件会自动被 git 忽略。

将图表保留在仓库中:--diagram

#

drawgent up --diagram docs/architecture.excalidraw # remembered for this workspace

写入的内容:一个标准的 .excalidraw 文件(可在 excalidraw.com 上打开),与画布保持同步。它只保存当前绘图(不含已删除元素、不含激光轨迹),经过美化打印且不包含每次编辑的同步字段,因此差异清晰,且仅在绘图变化时重写。像提交其他源文件一样提交它。来自 git 的更改:如果文件在 drawgent 之外发生变化(git pull、检出、手动编辑),以文件为准。画布实时更新,包括删除,启动时磁盘上已有的文件也会被应用。无法解析的文件(例如合并冲突标记)会在聊天面板中报告,并在修复前被忽略。选择文件:工作区根目录下的 drawgent.excalidraw 会被自动使用,因此全新克隆无需任何标志。房间:--diagram 不能与 --room 组合使用,此时绘图由 excalidraw.com 持有。

drawgent up --attach [id]

#

将画布连接到您已运行的会话。不带 id 时,它会列出找到的会话(当前目录优先)并让您选择一个:

agent discovery how the canvas reaches it
Claude Code claude agents --json(交互式和后台会话)
fork:一个携带完整对话的新会话,由 drawgent 通过 ACP 驱动。您的终端会话不受影响
opencode 本地监听的 opencode 服务器:使用 opencode --port 4096(或 opencode serve)启动 TUI
live:消息进入您正在运行的会话(您在 TUI 中看到它们);drawgent 在运行时将其 MCP 工具添加到该服务器;您在 TUI 中输入的回复、工具调用和提示会镜像到聊天面板
Codex ~/.codex/sessions 中的会话
live:codex queue --thread <id>;回复从会话的 rollout 文件镜像。该会话需要 drawgent MCP(由 setup 注册,在 Codex 启动时加载)

使用画布#

聊天面板(右侧):发送请求,观看回复和工具调用流式传入,批准权限提示,按 Stop 取消一轮。在画布上:在形状旁边或内部写一个以 AGENT: 开头的文本,或从便签画一个箭头指向形状。停止输入约 2.5 秒后触发,附带其位置、指向的对象以及附近的内容。agent 将其解析为一个绿色的 DONE: … 便签。将其编辑回 AGENT: 可再次发送。激光区域:选择 Excalidraw 的激光(K)并在图表的一部分上画圈或涂鸦。轨迹作为红色轮廓保留在画布上,聊天面板打开并准备好接收您的指令,带有一个列出区域下内容的标签(🔴 Laser zone · API, Redis ×)。您的下一条消息将与区域(边界和覆盖的元素)一起发送给 agent,agent 完成后轨迹消失。彼此间隔 4 秒内的笔画形成一个区域;× 丢弃它。- 提示会排队并一次运行一个。已处理过的排队便签会被跳过。

excalidraw.com 房间#

drawgent up --room 'https://excalidraw.com/#room=<id>,<key>'
  • drawgent 作为协作者加入房间( 🤖 Agent

,其光标会跟随它的编辑)。人类可以继续使用 excalidraw.com:他们的AGENT:

笔记会传达到你的 agent,而它的编辑也会实时显示在那里。 - 流量使用房间密钥进行端到端加密。空房间从 excalidraw 的 Firestore 存储加载并保存到其中。

  • 本地编辑器镜像该房间,并且仍然保留聊天面板。

其他命令#

drawgent mcp

:带有画布工具的 stdio MCP 服务器。Agent 启动它;它会自行找到正在运行的drawgent up

。drawgent serve

:带有显式 agent 的低层服务器(按设置使用--agent claude,codex,opencode

,或对任意 ACP agent 使用name=command

);用于脚本和容器。-up

/serve

的选项:--port

、--room

、--token

(API bearer + URL 中的?token=

)、--permissions canvas|ask|all

(默认canvas

:绘图工具自动批准,其他任何操作都在聊天面板中询问)、--data

、--settle-ms

。

可选:Docker#

docker compose up --build

运行一个画布服务器(drawgent + Chromium,无 agent),例如用于

在服务器上托管共享画布或房间桥接。Agent 从不捆绑:它们始终

使用你自己的设置运行。

从源码构建#

npm ci && npm run build # editor + renderer pages -> dist/ (embedded into the binary)
cargo install --path . # or: cargo build --release

发布构建(nix develop -c make …

提供工具链,或 rustup + cargo-zigbuild):

命令 输出
make musl / make dist
静态 Linux x86_64 二进制文件 / tarball(ARM 使用 MUSL_TARGET=aarch64-unknown-linux-musl)
make darwin / make dist-darwin
macOS 通用二进制文件(Intel + Apple Silicon,macOS ≥ 13)/ tarball

macOS 构建是如何完成的:它是在 Linux 上使用 zig 交叉构建的,不依赖 Apple SDK(drawgent 仅链接libSystem

、libiconv

和libcharset

)。签名:arm64 切片由链接器进行 ad-hoc 签名。它未经公证,因此下载后请运行一次xattr -d com.apple.quarantine drawgent

。状态:尚未在真实 Mac 上测试。小型机器:使用JOBS=1

。有一个依赖项(chromiumoxide_cdp

)编译时需要大量内存。

Agent 工具(MCP)#

get_scene

、get_screenshot

(视觉;使用 element_ids

缩放)、add_elements

(Excalidraw

骨架;箭头按 id 绑定并沿边缘到边缘路由)、add_mermaid

(自动布局)、update_elements

(标签跟随形状,绑定的箭头重新路由)、delete_elements

、clear_canvas

、list_instructions

、resolve_instruction

、set_status

。

API#

GET /api/health

· GET /api/scene

· GET /api/screenshot?ids=&padding=&max=

·

POST|PATCH|DELETE /api/elements

· POST /api/mermaid

· POST /api/clear

·

GET /api/instructions

· POST /api/instructions/{id}/resolve

· POST /api/status

·

POST /api/chat {agent?, text}

· WS /ws

(浏览器同步 + 聊天事件)

测试#

cargo test # 分数索引、房间加密/分帧
node scripts/smoke.mjs [url] # 聊天轮次 + 针对运行中的 drawgent 的 AGENT: 备注
node scripts/e2e-browser.mjs [url] # 真实浏览器:聊天面板 + 在画布上输入的备注
node scripts/room-e2e.mjs # 全新的 excalidraw.com 房间 ↔ drawgent,双向
node scripts/laser-e2e.mjs # 激光区域 → 聊天 → 代理仅编辑该区域(需要设置 claude)
node scripts/diagram-e2e.mjs # --diagram 文件:干净输出,git pull / 手动编辑回流

布局#

src/

(Rust):

main.rs

:CLI。setup.rs

、config.rs

、chrome.rs

:安装设置、配置、渲染器。attach.rs

:会话发现与选择。agents.rs

+acp.rs

:ACP 驱动(新建 / 分叉会话)。live.rs

:实时 opencode / Codex 驱动。hub.rs

:路由、笔记、聊天日志。scene.rs

:存储与编辑操作。renderer.rs

:基于 CDP 的 Chrome。mcp.rs

:MCP 服务器。room.rs

:excalidraw.com 客户端。fractional.rs

、geometry.rs

、el.rs

:辅助工具。

web/

:编辑器(main.jsx

、chat.jsx

、laser.js

)与渲染器页面(render.jsx

)。

限制#

  • 渲染器需要 Chrome(原生渲染器已在计划中)。
  • Claude 的“attach”是一种分叉,因为 Claude Code 没有公开的方式向正在运行的终端会话注入内容。
  • Codex 实时 attach 已实现,但尚未针对已登录的 Codex 进行测试。
  • 每个工作区一个场景(以及一个图表文件)。图像/文件不会同步。