{"_id":"@basketikun/canvas-agent","_rev":"7-14d61bb9f18dc999064a3e46d044700b","name":"@basketikun/canvas-agent","dist-tags":{"latest":"0.6.0"},"versions":{"0.1.0":{"name":"@basketikun/canvas-agent","version":"0.1.0","_id":"@basketikun/canvas-agent@0.1.0","maintainers":[{"name":"basketikun","email":"hyf1844025705@gmail.com"}],"bin":{"canvas-agent":"dist/index.js"},"dist":{"shasum":"fbd39464029dd22916178c2100e52537c443d4e2","tarball":"https://registry.npmjs.org/@basketikun/canvas-agent/-/canvas-agent-0.1.0.tgz","fileCount":20,"integrity":"sha512-EK/mxVw7x4klquSESkQr3x61rSXKDQ+3Of8vj6Zb4g6LNmSH5GocppXHeH+v9JNc9UFN6XGy+5TvJT5QNaIeRg==","signatures":[{"sig":"MEYCIQD6JxC+rjSNOhThG4ywa/8v6AKFU2OHl6vnFHHmWAIwdwIhAMVTXyEGt00EHiUHcLqhrUSFmWNZYBFSXLBzFiK2qsfQ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":99543},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"gitHead":"b6d358d6f8b33e9e5ce3a402712d11fb9f442c4c","scripts":{"dev":"tsx src/index.ts","build":"tsc -p tsconfig.json","start":"node dist/index.js","prepack":"npm run build"},"_npmUser":{"name":"basketikun","email":"hyf1844025705@gmail.com"},"_npmVersion":"10.8.2","description":"本地 Canvas Agent 用来连接线上画布网页和用户电脑上的 Codex / Claude Code。","directories":{},"_nodeVersion":"20.19.3","dependencies":{"zod":"^3.25.0","express":"^5.1.0","@openai/codex":"^0.139.0","@modelcontextprotocol/sdk":"^1.12.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","typescript":"^5.8.0","@types/node":"^22.0.0","@types/express":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/canvas-agent_0.1.0_1781516210258_0.6415707620605213","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@basketikun/canvas-agent","version":"0.2.0","_id":"@basketikun/canvas-agent@0.2.0","maintainers":[{"name":"basketikun","email":"hyf1844025705@gmail.com"}],"bin":{"canvas-agent":"dist/index.js"},"dist":{"shasum":"a1eb234e3afa1f6f349a682afd30339c5644f4e3","tarball":"https://registry.npmjs.org/@basketikun/canvas-agent/-/canvas-agent-0.2.0.tgz","fileCount":20,"integrity":"sha512-Cb/qHfUTlwZaARmkyuy324FlnD82SGSX8MEiaSvesdKAq/hVVLeenc4rW29misqLG2g10T7DpO7rJR7V4PU2QQ==","signatures":[{"sig":"MEQCIB80D2DWMOz+shyVGz5u04PZKZlRNKc3NwcfiBxud3eRAiBFMT7ViK8QqQbTQRFBiHkWU3urwOrsFNmMrJDMEGEARA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":118364},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"gitHead":"a4dcc679c94063be7e868485e4e8429b680c5b71","scripts":{"dev":"tsx src/index.ts","build":"tsc -p tsconfig.json","start":"node dist/index.js","prepack":"npm run build"},"_npmUser":{"name":"basketikun","email":"hyf1844025705@gmail.com"},"_npmVersion":"10.8.2","description":"本地 Canvas Agent 用来连接画布网页和用户电脑上的 Codex / Claude Code。本地开发时优先连接 `http://localhost:3000`，不需要先使用线上站点。","directories":{},"_nodeVersion":"20.19.3","dependencies":{"zod":"^3.25.0","express":"^5.1.0","@openai/codex":"^0.139.0","@modelcontextprotocol/sdk":"^1.12.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","typescript":"^5.8.0","@types/node":"^22.0.0","@types/express":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/canvas-agent_0.2.0_1784022221068_0.9328191031049338","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@basketikun/canvas-agent","version":"0.3.0","_id":"@basketikun/canvas-agent@0.3.0","maintainers":[{"name":"basketikun","email":"hyf1844025705@gmail.com"}],"bin":{"canvas-agent":"dist/index.js"},"dist":{"shasum":"cac33a62d548dc7b01108f6914386abd3d039140","tarball":"https://registry.npmjs.org/@basketikun/canvas-agent/-/canvas-agent-0.3.0.tgz","fileCount":53,"integrity":"sha512-RAbOV7kV6y2GIRp21XUC0lcBnHd/aBCmMcmCWHkY5GBU1IYcZzzS7TRUYf7B53RxkEzTnIYzHP65CtSSNu5ThA==","signatures":[{"sig":"MEYCIQDXnWnYPmj3njP5cr2CjSpuJm4eWFz7YZ9b6g4I7CwpCAIhAKaCoZHwdBqglrhXESDLtQmEwFjra41ZFCuM28RJnSBr","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":293065},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"gitHead":"80756b6170e311562cc883d200607590979d55ec","scripts":{"dev":"tsx src/index.ts","test":"tsx --test src/canvas/session.test.ts","build":"tsc -p tsconfig.json","debug":"tsx src/index.ts --debug","start":"node dist/index.js","prepack":"npm run build"},"_npmUser":{"name":"basketikun","email":"hyf1844025705@gmail.com"},"_npmVersion":"10.8.2","description":"本地 Canvas Agent 用来连接画布网页和用户电脑上的 Codex / Claude Code。本地开发时优先连接 `http://localhost:3000`，不需要先使用线上站点。","directories":{},"_nodeVersion":"20.19.3","dependencies":{"zod":"^3.25.0","express":"^5.1.0","winston":"^3.19.0","@openai/codex":"0.145.0","@modelcontextprotocol/sdk":"^1.12.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","typescript":"^5.8.0","@types/node":"^22.0.0","@types/express":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/canvas-agent_0.3.0_1785389579619_0.9229971132419232","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"@basketikun/canvas-agent","version":"0.3.1","_id":"@basketikun/canvas-agent@0.3.1","maintainers":[{"name":"basketikun","email":"hyf1844025705@gmail.com"}],"bin":{"canvas-agent":"dist/index.js"},"dist":{"shasum":"c0146c1a5c55201dd960167524de413a975b3941","tarball":"https://registry.npmjs.org/@basketikun/canvas-agent/-/canvas-agent-0.3.1.tgz","fileCount":55,"integrity":"sha512-IyqvH+iw9NhavvWaWkrVLwE2b1kR/P2vh5FMVb+bsBN+8uuGjyoc7/EvMImboUVOezQdS+A9RLagLsretbASOw==","signatures":[{"sig":"MEYCIQDF03PAPbVJVddqRscJEvao6D6ASLa2TRqwqBFVlgSMOwIhANnbgQCS7MKXmn76lbtZghkv0Q+RMjWaGSik4WRQiObh","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":299049},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"gitHead":"6f1b6633b76e485312382f4d916d49af8a23afaa","scripts":{"dev":"tsx src/index.ts","test":"tsx --test src/canvas/session.test.ts","build":"tsc -p tsconfig.json","debug":"tsx src/index.ts --debug","start":"node dist/index.js","prepack":"npm run build"},"_npmUser":{"name":"basketikun","email":"hyf1844025705@gmail.com"},"_npmVersion":"10.8.2","description":"本地 Canvas Agent 用来连接画布网页和用户电脑上的 Codex / Claude Code。本地开发时优先连接 `http://localhost:3000`，不需要先使用线上站点。","directories":{},"_nodeVersion":"20.19.3","dependencies":{"zod":"^3.25.0","express":"^5.1.0","winston":"^3.19.0","strip-ansi":"7.2.0","@openai/codex":"0.146.0","@modelcontextprotocol/sdk":"^1.12.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","typescript":"^5.8.0","@types/node":"^22.0.0","@types/express":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/canvas-agent_0.3.1_1785468923507_0.216954487426249","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@basketikun/canvas-agent","version":"0.4.0","_id":"@basketikun/canvas-agent@0.4.0","maintainers":[{"name":"basketikun","email":"hyf1844025705@gmail.com"}],"bin":{"canvas-agent":"dist/index.js"},"dist":{"shasum":"ae2696ec22028992a29e758e9c94c1716d3eef09","tarball":"https://registry.npmjs.org/@basketikun/canvas-agent/-/canvas-agent-0.4.0.tgz","fileCount":57,"integrity":"sha512-yRpQzVFWDrTApZnGr9iqJGJxnhthtckY2jqtgyVD3K60oMMjR0cpYTqLBwSzdzT60PutzqXb+A1N4uaUtf0wHQ==","signatures":[{"sig":"MEUCIQChIt3YDQQJ/dSjThryEx8cKr+wmjlD+kq59sauBH+2WQIgAMZI3X/XlSY4wQs6dih9dKGeEJ3l9qsuvXtKio4MPJw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":357421},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"gitHead":"335467ec0d98aca69df49c285edd56eb00e736e6","scripts":{"dev":"tsx src/index.ts","test":"tsx --test src/canvas/session.test.ts src/agent/codex-client.test.ts src/agent/codex-history.test.ts","build":"tsc -p tsconfig.json","debug":"tsx src/index.ts --debug","start":"node dist/index.js","prepack":"npm run build"},"_npmUser":{"name":"basketikun","email":"hyf1844025705@gmail.com"},"_npmVersion":"10.8.2","description":"本地 Canvas Agent 用来连接画布网页和用户电脑上的 Codex / Claude Code。本地开发时优先连接 `http://localhost:3000`，不需要先使用线上站点。","directories":{},"_nodeVersion":"20.19.3","dependencies":{"zod":"^3.25.0","express":"^5.1.0","winston":"^3.19.0","strip-ansi":"7.2.0","@openai/codex":"0.146.0","@modelcontextprotocol/sdk":"^1.12.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","typescript":"^5.8.0","@types/node":"^22.0.0","@types/express":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/canvas-agent_0.4.0_1785728515748_0.23934794069679577","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@basketikun/canvas-agent","version":"0.5.0","_id":"@basketikun/canvas-agent@0.5.0","maintainers":[{"name":"basketikun","email":"hyf1844025705@gmail.com"}],"bin":{"canvas-agent":"dist/index.js"},"dist":{"shasum":"c884dbce57e2cd67806963cde88604a8e347b68b","tarball":"https://registry.npmjs.org/@basketikun/canvas-agent/-/canvas-agent-0.5.0.tgz","fileCount":59,"integrity":"sha512-K001Snsc4uybS5K4NZ4qZNuWIjcv4LFLcz7Ue908/JVRaefTwId8EyH11cbYcUVQEnVYTpM0JljhA2kt8bbT5g==","signatures":[{"sig":"MEQCIBXg8kx1oE1fjTbJwz37aaCbW/U6KcheZQqqKC8/VZJLAiAfEEFWGD5ObpCY2Pc3w5QB3TYAeBjnNhAjhDuhvbVM/w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":435520},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"gitHead":"e2ac2a27fbc27aac0ad6ac31ebb8f268b20aae46","scripts":{"dev":"tsx src/index.ts","test":"tsx --test src/canvas/session.test.ts src/agent/codex-client.test.ts src/agent/codex-history.test.ts src/skills/store.test.ts","build":"tsc -p tsconfig.json","debug":"tsx src/index.ts --debug","start":"node dist/index.js","prepack":"npm run build"},"_npmUser":{"name":"basketikun","email":"hyf1844025705@gmail.com"},"_npmVersion":"10.8.2","description":"本地 Canvas Agent 用来连接画布网页和用户电脑上的 Codex / Claude Code。本地开发时优先连接 `http://localhost:3000`，不需要先使用线上站点。","directories":{},"_nodeVersion":"20.19.3","dependencies":{"zod":"^3.25.0","yaml":"^2.9.0","express":"^5.1.0","winston":"^3.19.0","strip-ansi":"7.2.0","gray-matter":"^4.0.3","@openai/codex":"0.146.0","@modelcontextprotocol/sdk":"^1.12.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","typescript":"^5.8.0","@types/node":"^22.0.0","@types/express":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/canvas-agent_0.5.0_1785921240777_0.7965455846852949","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"@basketikun/canvas-agent","version":"0.6.0","type":"module","main":"./dist/index.js","types":"./dist/index.d.ts","bin":{"canvas-agent":"dist/index.js"},"scripts":{"dev":"tsx src/index.ts","debug":"tsx src/index.ts --debug","test":"tsx --test src/canvas/session.test.ts src/agent/codex-client.test.ts src/agent/codex-history.test.ts src/agent/message-metadata.test.ts src/skills/store.test.ts","build":"tsc -p tsconfig.json","start":"node dist/index.js","prepack":"npm run build"},"dependencies":{"@modelcontextprotocol/sdk":"^1.12.1","@openai/codex":"0.146.0","express":"^5.1.0","gray-matter":"^4.0.3","strip-ansi":"7.2.0","winston":"^3.19.0","yaml":"^2.9.0","zod":"^3.25.0"},"devDependencies":{"@types/express":"^5.0.0","@types/node":"^22.0.0","tsx":"^4.19.0","typescript":"^5.8.0"},"engines":{"node":">=18"},"publishConfig":{"access":"public"},"_id":"@basketikun/canvas-agent@0.6.0","gitHead":"4b5d99bdf2522e7786e528f51b8a67e1e5cd8d28","description":"本地 Canvas Agent 用来连接画布网页和用户电脑上的 Codex / Claude Code。本地开发时优先连接 `http://localhost:3000`，不需要先使用线上站点。","_nodeVersion":"20.19.3","_npmVersion":"10.8.2","dist":{"integrity":"sha512-NTxOu076soWILCsQvAulG+8n8XeadY4amGLfnBKOSCIke1SJdVDSGQIXLSZ/fcbgk7036KcqUsCnLtVJ2tYU9w==","shasum":"ada9973f0dd44f6925c4ee1ac3f47713012ea0c4","tarball":"https://registry.npmjs.org/@basketikun/canvas-agent/-/canvas-agent-0.6.0.tgz","fileCount":61,"unpackedSize":456263,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCtZm0gOhMd3XnIl3RGGKx3bXJYUy/naPIIabAk3bqTRgIgQb3WVnAE6K5LyPZn7bdNAFwoBshrLttI5/XIuqPJg64="}]},"_npmUser":{"name":"basketikun","email":"hyf1844025705@gmail.com"},"directories":{},"maintainers":[{"name":"basketikun","email":"hyf1844025705@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/canvas-agent_0.6.0_1786081102575_0.4349864379720294"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-15T09:36:50.082Z","modified":"2026-08-07T05:38:22.854Z","0.1.0":"2026-06-15T09:36:50.395Z","0.2.0":"2026-07-14T09:43:41.197Z","0.3.0":"2026-07-30T05:32:59.757Z","0.3.1":"2026-07-31T03:35:23.641Z","0.4.0":"2026-08-03T03:41:55.924Z","0.5.0":"2026-08-05T09:14:00.926Z","0.6.0":"2026-08-07T05:38:22.714Z"},"description":"本地 Canvas Agent 用来连接画布网页和用户电脑上的 Codex / Claude Code。本地开发时优先连接 `http://localhost:3000`，不需要先使用线上站点。","maintainers":[{"name":"basketikun","email":"hyf1844025705@gmail.com"}],"readme":"# Infinite Canvas Agent\n\n本地 Canvas Agent 用来连接画布网页和用户电脑上的 Codex / Claude Code。本地开发时优先连接 `http://localhost:3000`，不需要先使用线上站点。\n\n## 启动\n\n```bash\nnpx -y @basketikun/canvas-agent\n```\n\n需要排查连接、线程、Codex app-server 或工具调用问题时，可开启 Debug 模式：\n\n```bash\nnpx -y @basketikun/canvas-agent --debug\n```\n\nDebug 日志会以 `[DEBUG][HH:mm:ss]` 等传统格式输出到终端，并按启动日期保存到 `~/.infinite-canvas/logs/canvas-agent-YYYY-MM-DD.log`。终端日志带级别颜色，文件日志为纯文本；日志包含 HTTP、SSE、线程、turn、Codex app-server 和工具调用事件，token 与图片 Data URL 会自动隐藏。\n\n本仓库开发时也可以直接运行：\n\n```bash\ncd canvas-agent\nnpm install\nnpm run build\nnode dist/index.js\n```\n\n启动后会输出本机地址和 token：\n\n```txt\nLocal URL: http://127.0.0.1:17371\nConnect token: xxxxxx\n```\n\n在画布右上角点击 `Agent`，填入地址和 token 后连接。\n\nCodex app 插件会读取启动输出里的 Local URL 和 Connect token，并直接打开画布网页地址；Canvas Agent 不负责生成画布打开 URL。\n\nCanvas Agent 默认只监听 `127.0.0.1`。网页第一次带正确 token 连接后，Canvas Agent 会记录该网页 Origin；之后其他 Origin 不能复用这个本地 Agent，除非用户清理 `~/.infinite-canvas/canvas-agent.json` 里的 `origins`。\n\n## 发布\n\n`canvas-agent` 使用自己的 `package.json` 版本号，不跟仓库根目录 `VERSION` 绑定。推送到 `main` 后，GitHub Actions 会检查 npm 上是否已经存在当前包版本；不存在时才发布 `@basketikun/canvas-agent`。\n\n发布前需要在 GitHub 仓库 Secrets 中配置 `NPM_TOKEN`。\n\n## Codex MCP\n\n如果希望 Codex 终端能直接操作画布，需要先把 Canvas Agent 注册成 Codex MCP。\n\n直接运行 `npx -y @basketikun/canvas-agent` 只启动本地 Agent 服务，不会安装 MCP，也不会增加 Codex 工具上下文。只有安装 Codex app 插件，或手动执行 `codex mcp add` 后，`infinite-canvas` 工具才会进入 Codex 上下文；由于工具较多，不使用时建议移除。\n\n通过插件安装时移除插件：\n\n```bash\ncodex plugin remove infinite-canvas\n```\n\n手动添加 MCP 时移除 MCP：\n\n```bash\ncodex mcp remove infinite-canvas\n```\n\n### Codex app 插件\n\n仓库内提供了 Codex app 插件：`plugins/infinite-canvas`。在 Codex app 中添加本仓库的 marketplace 后，可以安装 `Infinite Canvas` 插件；插件会注册同一个 `infinite-canvas` MCP，并带上画布操作说明。\n\n添加本地 marketplace 时建议使用仓库绝对路径，避免 Codex 从其他工作目录解析失败：\n\n```bash\ncd /path/to/infinite-canvas\ncodex plugin marketplace add \"$(pwd)\"\ncodex plugin add infinite-canvas@infinite-canvas-local\n```\n\n插件默认通过 npm 启动 MCP；这个命令只提供 MCP 工具，不会把 MCP 写入全局配置，也不会在退出时自动卸载：\n\n```bash\nnpx -y @basketikun/canvas-agent mcp\n```\n\n使用时可以直接在 Codex 里说“打开 Infinite Canvas”，插件会启动本地 Agent，读取 Local URL 和 Connect token，然后在右侧打开 `https://canvas.best/` 并自动新建、连接画布；只有明确要求使用本地项目时才会启动本地前端。\n\nCanvas Agent 启动后，给 Codex 添加 MCP：\n\n```bash\ncodex mcp add infinite-canvas -- npx -y @basketikun/canvas-agent mcp\n```\n\n本仓库开发时可以改成，实际使用建议替换为本机绝对路径：\n\n```bash\ncodex mcp add infinite-canvas -- node /path/to/infinite-canvas/canvas-agent/dist/index.js mcp\n```\n\nCanvas Agent 源码使用 TypeScript 编写，MCP 协议层使用官方 `@modelcontextprotocol/sdk`，工具入参使用 `zod` 描述。\n\n如果希望终端里的 Codex 不被 MCP 审批卡住，可以在 `~/.codex/config.toml` 里给这个 MCP 设置自动放行：\n\n```toml\n[mcp_servers.infinite-canvas]\ncommand = \"npx\"\nargs = [\"-y\", \"@basketikun/canvas-agent\", \"mcp\"]\ndefault_tools_approval_mode = \"approve\"\n```\n\n可用工具：\n\n- `canvas_get_state`\n- `canvas_get_selection`\n- `canvas_export_snapshot`\n- `canvas_apply_ops`\n- `canvas_create_text_node`\n- `canvas_create_image_prompt_flow`\n\n`canvas_apply_ops` 示例：\n\n```json\n{\n  \"ops\": [\n    {\n      \"type\": \"add_node\",\n      \"nodeType\": \"text\",\n      \"title\": \"标题\",\n      \"position\": { \"x\": 0, \"y\": 0 },\n      \"metadata\": { \"content\": \"文本内容\" }\n    }\n  ]\n}\n```\n\n## 侧边栏 Codex\n\n本地面板会把提示词发送给 Canvas Agent。Canvas Agent 使用官方 `@openai/codex` CLI 的 `codex app-server --stdio` 启动并复用同一个 Codex thread，启动时会注入 `infinite-canvas` MCP 配置并自动放行 MCP 审批，真正执行画布修改前仍由网页侧边栏二次确认。\n\n侧边栏会展示 Codex 返回的 `thread.started`、`turn.started`、`item.*`、`turn.completed` 等结构化事件；Canvas Agent 会合并短时间内的回复、思考摘要和命令输出增量，网页使用同一条消息持续更新，并把任务进度、计划、搜索、文件修改与工具操作整理为中文过程时间线。\n\n侧边栏上传或粘贴的图片会先发到本机 Canvas Agent，再由 Canvas Agent 临时写入本机文件并作为 app-server `localImage` 输入传给 Codex；前端会提示附件体积，单次请求体限制为 30MB。\n\n## Claude Code\n\nClaude Code Adapter 代码暂时保留，但当前网页侧边栏只开放 Codex。后续开放 Claude 入口时，Canvas Agent 会调用本机 `claude -p --output-format stream-json` 并把流式 JSON 事件转发到侧边栏。\n\n如果希望 Claude Code 也能操作画布，需要给 Claude Code 添加同一个 MCP。建议用 user scope，避免 Canvas Agent 从不同目录启动时找不到配置：\n\n```bash\nclaude mcp add --scope user --transport stdio infinite-canvas -- npx -y @basketikun/canvas-agent mcp\n```\n\n本仓库开发时可以改成：\n\n```bash\nclaude mcp add --scope user --transport stdio infinite-canvas -- node /path/to/infinite-canvas/canvas-agent/dist/index.js mcp\n```\n\nCanvas Agent 调用 Claude Code 时会默认带上 `--allowedTools mcp__infinite-canvas__*`，画布写操作仍由网页侧边栏确认。\n","readmeFilename":"README.md"}