一个项目一个 Agora

和你的 coding agent在架构图上谈设计

每个项目自带一个 Agora:在项目的架构图上和你自己的 coding agent 讨论设计,再一键回到终端接着写代码。

uv tool install git+https://github.com/arvakme/agora

然后在任何项目目录里: cd my-service && agora

宣传片 · 40 秒

四十秒看懂 Agora

agent 一站一站画出架构图,它的小人从一个节点走到下一个节点;放大节点,就进到它的子图里。

怎么工作

跟着 CLI 自己写的会话走

你在面板或终端里跟 agent 说话,它照常写自己的原生会话日志;本项目的 agora 服务跟随日志,把每一轮推到浏览器里的画布上。

01你的 coding agentclaude · codex · pi · grok · cursor · devin
02本项目的 agora 服务127.0.0.1 · <project>/.agora/
03浏览器里的画布excalidraw · 小人 · 子图
  1. 01

    你说话,agent 干活

    在面板或终端里都行。它照常写自己的原生会话日志,和没有 Agora 时一模一样。

  2. 02

    服务跟着日志走

    本项目的 agora 服务每 0.4 秒跟随一次,面板和终端两边的轮次都收得到。

  3. 03

    画布跟着动

    改动经 HTTP + SSE 推到页面。agent 用 agora canvas apply 改图时,页面先校验 schema、引用和新鲜度再执行,结果写回 .agora/,每批修改都能撤销。

  • 全部在你自己的机器上。 服务只监听 127.0.0.1,一个项目一个端口。只有分享时才经 Cloudflare Tunnel 开一个只读的访客入口。
  • 不另存一份对话。 会话就是 CLI 自己的原生会话,Agora 只跟随日志;模型和费用都走你已经登录的那个 CLI。

六个会话 agent

  • Pi
  • Claude Code
  • Codex
  • Grok
  • Cursor
  • Devin

都能在画布上看到小人、进度指针和逐站画图,都能在面板发消息、在终端接着同一个会话。两处差别来自 CLI 本身:Grok、Cursor、Devin 的 -p 模式一轮开始后不接收输入;Pi 和 Devin 没有原生子代理。

三个 agent 各自一轮一轮地跑。轮次和 turn id 是示意,状态 pending → in_flight → accepted → completed 是 Agora 记录每一轮的真实状态。

核心能力

一张知道谁在改哪里的架构图

01 · 一个项目一个

一个项目一个 Agora,图跟着代码走

在项目里敲 agora,就在当前目录建好 .agora/,起本项目专属的本地服务。画布是标准 .excalidraw 文件,评论是键排序的 JSON:跟代码一起提交、克隆、切分支,git diff 可读。

会话记录、运行状态和分享记录默认不提交。删掉的画布和会话进回收站,30 天内可恢复。

画布与会话并排:左边是架构图和评论钉,Claude Code 的小人站在「API 服务」上写文件;右边是正在干活的会话

02 · 逐站画图

一站一站画出来

agent 改图时,它的小人走到每一站,新加的元素等它走到才淡入,不是整张图一下冒出来;你看得清它在搭什么。

03 · 子图

放大节点,走进子图

任何节点都能装一张子图:总架构 › 后端 › 订单服务。⌘ / Ctrl + 滚轮放大节点就进到子图,缩小就回到上一层;面包屑和 ⌘↑ 也行。

04 · 进度指针

看得见 AI 正在改架构图的哪一块

给节点关联代码路径(glob),可以手动设,也可以让 agent 按目录结构批量关联。agent 改哪个文件,它的小人就走到这个文件所属的节点:两个节点有箭头相连就沿箭头滑过去,否则跳过去。不属于任何节点的文件列在「图外 · 改了 N 个文件」里;终端里的改动同样驱动它。

回放一轮,图上标出小人走过的路线、按先后编号的站点和每个节点上改了几个文件(+N)。

几个会话各有一个指针;两个 agent 改到同一个文件时,Agora 会提示可能冲突。

05 · 轨迹与回放

每一轮、每一次工具调用,逐步可查

会话有「对话 / 轨迹」两种视图:每轮的模型、强度、输入 / 输出 / 缓存 tokens、耗时、花费排在时间轴上;每次工具调用都能展开看完整输入、输出、改到的文件和起止时间。

架构图本身也能回放:从第一笔到现在,小人走到它画的地方,可以播放、暂停、倍速、拖进度条。

轨迹视图:时间轴、每轮用量,展开的 Edit 调用显示完整输入
新会话先选 agent、模型和强度,选定后不能更改

你自己的 agent,会话锁定

每个会话开始时选 agent、模型和强度,选定后不变。画布上的评论可以直接交给 agent,答复贴回评论线程。绑定会话时自动为它安装 agora skill。

在终端里打开会话:面板提示终端窗口开着、你的话在排队,这一轮带「终端」标签

一键回到终端,双向同步

「在终端打开」用同一个原生会话起交互式 CLI(claude --resume、codex resume、pi --session-id),跑在本项目专属的 tmux 里,用 Ghostty、Kitty 或 Terminal.app 打开。终端里发生的事都出现在面板上;面板发的消息排队,等终端空下来再送进去。

分享弹层:选画布和有效期
作者:选画布和有效期
访客页:只读画布,可评论
访客:只读画布,可评论

开始用

装一次,任何项目里都能打开

不需要留着仓库。安装时会构建前端,所以需要 Node 和 npm。

uv tool install git+https://github.com/arvakme/agora
cd ~/code/my-serviceagora# 初始化 .agora/,起本项目服务并打开浏览器agora status# 在跑就打印地址、端口、pidagora down# 停掉服务和本项目的 tmuxagora share create --for 1d# 开一个一天有效的只读地址

需要

  • uv(Python 3.12+,没有时 uv 自己装)
  • Node 22+ 与 npm,用来构建前端
  • tmux,用于「在终端打开」
  • 至少一个已登录的 agent CLI:pi、claude、codex、grok、cursor-agent 或 devin
  • 可选,分享用:cf 和你自己的 Cloudflare 域名

先说清楚

  • 单人编辑,没有实时多人协同;冲突靠版本校验发现。
  • 改图需要打开着的页面;没开页面时 agora canvas apply 返回退出码 3。
  • 只在 macOS 上实测过。没有 Ghostty、Kitty 或 Terminal.app 时,面板给出 tmux attach 命令。
  • 还没有发布到 PyPI。包名是 agora-canvas,命令名是 agora。