@gensor/canvas-agent

中文文档
1.0.2发布于 2026/11/01MITTypeScriptES Module

本地用帆布代理来连接画布网页和用户电脑上的食品/克劳德代码。本地开发时优先连接 http://localhost:3000,不需要先使用线上站点。 CD ~/infinite-canvas/canvas-agent安装NPM包

中文使用文档
文档目录6 节
  1. 启动
  2. 发布
  3. Codex MCP
  4. Codex app 插件
  5. 侧边栏 Codex
  6. Claude Code

Infinite Canvas Agent

本地 Canvas Agent 用来连接画布网页和用户电脑上的 Codex / Claude Code。本地开发时优先连接 http://localhost:3000,不需要先使用线上站点。 cd ~/infinite-canvas/canvas-agent npm install npm pack

启动

npx -y @gensor/canvas-agent@latest

带上 @latest 是因为 npx 会缓存已下载的版本,不加就可能一直运行旧版本。

需要排查连接、线程、Codex app-server 或工具调用问题时,可开启 Debug 模式:

npx -y @gensor/canvas-agent@latest --debug

Debug 日志会以 [DEBUG][HH:mm:ss] 等传统格式输出到终端,并按启动日期保存到 ~/.infinite-canvas/logs/canvas-agent-YYYY-MM-DD.log。终端日志带级别颜色,文件日志为纯文本;日志包含 HTTP、SSE、线程、turn、Codex app-server 和工具调用事件,token 与图片 Data URL 会自动隐藏。

本仓库开发时也可以直接运行:

cd canvas-agent
npm install
npm run build
node dist/index.js

启动后会输出本机地址和 token:

Local URL: http://127.0.0.1:17371
Connect token: xxxxxx

在画布右上角点击 Agent,填入地址和 token 后连接。

Codex app 插件会读取启动输出里的 Local URL 和 Connect token,并直接打开画布网页地址;Canvas Agent 不负责生成画布打开 URL。

Canvas Agent 默认只监听 127.0.0.1。网页第一次带正确 token 连接后,Canvas Agent 会记录该网页 Origin;之后其他 Origin 不能复用这个本地 Agent,除非用户清理 ~/.infinite-canvas/canvas-agent.json 里的 origins。

发布

canvas-agent 使用自己的 package.json 版本号,不跟仓库根目录 VERSION 绑定。推送到 main 后,GitHub Actions 会检查 npm 上是否已经存在当前包版本;不存在时才发布 @gensor/canvas-agent。

发布前需要在 GitHub 仓库 Secrets 中配置 NPM_TOKEN。

Codex MCP

如果希望 Codex 终端能直接操作画布,需要先把 Canvas Agent 注册成 Codex MCP。

直接运行 npx -y @gensor/canvas-agent@latest 只启动本地 Agent 服务,不会安装 MCP,也不会增加 Codex 工具上下文。只有安装 Codex app 插件,或手动执行 codex mcp add 后,infinite-canvas 工具才会进入 Codex 上下文;由于工具较多,不使用时建议移除。

通过插件安装时移除插件:

codex plugin remove infinite-canvas

手动添加 MCP 时移除 MCP:

codex mcp remove infinite-canvas

Codex app 插件

仓库内提供了 Codex app 插件:plugins/infinite-canvas。在 Codex app 中添加本仓库的 marketplace 后,可以安装 Infinite Canvas 插件;插件会注册同一个 infinite-canvas MCP,并带上画布操作说明。

添加本地 marketplace 时建议使用仓库绝对路径,避免 Codex 从其他工作目录解析失败:

cd /path/to/infinite-canvas
codex plugin marketplace add "$(pwd)"
codex plugin add infinite-canvas@infinite-canvas-local

插件默认通过 npm 启动 MCP;这个命令只提供 MCP 工具,不会把 MCP 写入全局配置,也不会在退出时自动卸载:

npx -y @gensor/canvas-agent@latest mcp

使用时可以直接在 Codex 里说“打开 Infinite Canvas”,插件会启动本地 Agent,读取 Local URL 和 Connect token,然后在右侧打开 https://canvas.best/ 并自动新建、连接画布;只有明确要求使用本地项目时才会启动本地前端。

Canvas Agent 启动后,给 Codex 添加 MCP:

codex mcp add infinite-canvas -- npx -y @gensor/canvas-agent@latest mcp

本仓库开发时可以改成,实际使用建议替换为本机绝对路径:

codex mcp add infinite-canvas -- node /path/to/infinite-canvas/canvas-agent/dist/index.js mcp

Canvas Agent 源码使用 TypeScript 编写,MCP 协议层使用官方 @modelcontextprotocol/sdk,工具入参使用 zod 描述。

如果希望终端里的 Codex 不被 MCP 审批卡住,可以在 ~/.codex/config.toml 里给这个 MCP 设置自动放行:

[mcp_servers.infinite-canvas]
command = "npx"
args = ["-y", "@gensor/canvas-agent@latest", "mcp"]
default_tools_approval_mode = "approve"

可用工具:

  • canvas_get_state
  • canvas_get_selection
  • canvas_export_snapshot
  • canvas_apply_ops
  • canvas_create_text_node
  • canvas_create_image_prompt_flow

canvas_apply_ops 示例:

{
  "ops": [
    {
      "type": "add_node",
      "nodeType": "text",
      "title": "标题",
      "position": { "x": 0, "y": 0 },
      "metadata": { "content": "文本内容" }
    }
  ]
}

侧边栏 Codex

本地面板会把提示词发送给 Canvas Agent。Canvas Agent 使用官方 @openai/codex CLI 的 codex app-server --stdio 启动并复用同一个 Codex thread,启动时会注入 infinite-canvas MCP 配置并自动放行 MCP 审批,真正执行画布修改前仍由网页侧边栏二次确认。

侧边栏会展示 Codex 返回的 thread.started、turn.started、item.*、turn.completed 等结构化事件;Canvas Agent 会合并短时间内的回复、思考摘要和命令输出增量,网页使用同一条消息持续更新,并把任务进度、计划、搜索、文件修改与工具操作整理为中文过程时间线。

侧边栏上传或粘贴的图片会先发到本机 Canvas Agent,再由 Canvas Agent 临时写入本机文件并作为 app-server localImage 输入传给 Codex;前端会提示附件体积,单次请求体限制为 30MB。

Claude Code

Claude Code Adapter 代码暂时保留,但当前网页侧边栏只开放 Codex。后续开放 Claude 入口时,Canvas Agent 会调用本机 claude -p --output-format stream-json 并把流式 JSON 事件转发到侧边栏。

如果希望 Claude Code 也能操作画布,需要给 Claude Code 添加同一个 MCP。建议用 user scope,避免 Canvas Agent 从不同目录启动时找不到配置:

claude mcp add --scope user --transport stdio infinite-canvas -- npx -y @gensor/canvas-agent@latest mcp

本仓库开发时可以改成:

claude mcp add --scope user --transport stdio infinite-canvas -- node /path/to/infinite-canvas/canvas-agent/dist/index.js mcp

Canvas Agent 调用 Claude Code 时会默认带上 --allowedTools mcp__infinite-canvas__*,画布写操作仍由网页侧边栏确认。

版本与发布记录

@gensor/canvas-agent 共发布 2 个版本,首次发布于 2026/11/01;过去 12 个月发布了 2 个版本。

版本发布日期距今
1.0.2latest2026/11/012 天前
0.0.0-stage2026/11/012 天前

关于 @gensor/canvas-agent 的常见问题

@gensor/canvas-agent 是什么?

本地用帆布代理来连接画布网页和用户电脑上的食品/克劳德代码。本地开发时优先连接 http://localhost:3000,不需要先使用线上站点。 CD ~/infinite-canvas/canvas-agent安装NPM包

如何安装 @gensor/canvas-agent?

在项目目录运行 npm install @gensor/canvas-agent,或使用 pnpm add / yarn add / bun add。它还提供命令行工具 canvas-agent,可以用 npx canvas-agent 直接运行。

@gensor/canvas-agent 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@gensor/canvas-agent 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@gensor/canvas-agent 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=18。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@gensor/canvas-agent 可以商用吗?

@gensor/canvas-agent 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@gensor/canvas-agent 还在维护吗?

最新版本 1.0.2 发布于 2026/11/01(2 天前);至今共发布 2 个版本,其中过去 12 个月发布了 2 个;首次发布于 2026/11/01。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。