不引数据库
会话就是引擎自己写的 JSONL / thread。网页只读它、改名字、必要时删它,从不复制一份到自己的库里。
引擎照旧跑在你自己的电脑上。你在网页里看它干活、管它的工具与模型、随时插话纠正;需要时直接翻文件、开终端、在网页上圈出那句要改的地方。 单用户、只听回环、不引数据库 —— 会话的事实源永远是引擎自己的落盘文件。
npm -g install oh-my-agent-web
一次真实会话:思考、工具、改动、用量,都在同一屏里。
它不重写 prompt、不接管工具实现 —— 你装的是 pi、Codex、Claude Code、opencode,工作台只给它们配一套能看的界面、能点的按钮和能落盘的会话列表。三条硬纪律决定了它长什么样。
会话就是引擎自己写的 JSONL / thread。网页只读它、改名字、必要时删它,从不复制一份到自己的库里。
引擎没有的能力就在界面上藏起来(能力矩阵);面板拿不到数据就直说,不拿别的引擎的配置冒充。
默认只听 127.0.0.1。要远程就显式 -H 0.0.0.0,并且先在本机把密码设好。
思考块、工具调用、改动文件、token 与花费都在对话流里;回合没跑完也能插话、排队、停下。
工具卡给参数、完整命令、输出、耗时与成败;跑完自动收成一行「N 段思考 · N 次工具 · 耗时」,点开就是完整时间线。
src/App.tsx 直接开预览。
回合跑着的时候输入框不会锁死:插队立刻生效,排队等本回合结束,停止保留已经产出的内容。
选中一段回复,浮出小工具条:加进会话、写一条标注、或丢到临时会话里单独问。正文上会留 ①②③ 编号,输入框里多出一颗「N 条注释」。

输入框里打 @ 就在工作区里找文件,↑↓ 选中、回车插入 @src/store.ts;打 / 是本地指令(新建、改名、切模型、统计)与直接交给 agent 的指令(压缩上下文、计划模式)。

右栏是一个多标签工作区:文件预览、改动对比、真终端、内置网页、临时会话。前三个用来复核,网页那个用来开发。
目录树、按文件名搜、全文检索(支持 web/src/** 这样的路径掩码);预览支持 markdown、mermaid、图片、PDF、音视频。顶到「改动」就是与 HEAD 的对比:+10 −1 概览、行级红绿、可只看改动。
@src/store.ts:120-138
右栏的终端是真 PTY(node-pty + xterm.js):vim、top、Ctrl-C、颜色、行编辑都正常,cwd 跟会话所在项目一致。刷新页面不会恢复终端会话,切标签则不会断。
在右栏打开本地页面(请求走本机代理,不带 cookie),点刷新旁边的 📍 进入拾取模式:点页面上要改的那一处,就地写一句意见,页面上留下 ①②③ 标记;一次能连着标好几处,整批进输入框的「N 条注释」。

切到 Codex,面板读的就是 Codex 自己的东西;没接的面板会直说,不拿 pi 的配置冒充。
订阅 OAuth 登录、内置填 key、自定义端点与 API 形态;逐个勾选白名单。key 不出服务端,只回尾 4 位。
读 ~/.agents/skills;启停就是改文件名,没有第二份状态文件。Skill Hub 支持分类搜索与一键安装。
全局与项目两份配置、项目同名覆盖;exposure 四档;「测试连接」真握手后即断,报工具数。
内置 explore / general-purpose / plan,可改可停;并发 1–12,超出的排队。每个子代理都是一个真实会话。
插件就是 pi package:npm / git / 本地目录,四态 loaded · installed · missing · disabled,按包停用不删文件。
回合结束推一条(失败 ❌ / 中断 ⏹ 带前缀),点通知直达会话;四类事件提示音 + 本地 TTS,不联网。
左栏是项目与会话,中间是对话,右栏是工作区,底栏是「这一句怎么跑」。所有入口都能在设置里逐项隐藏。
左栏项目与会话 · 中间对话 · 右栏源码 · 底栏状态
引擎不是「同一个 prompt 换个皮」:每个都接自己的官方循环,能力差异在界面上按矩阵隐藏按钮。
| 能力 | pi | codex | dsh | opencode | claude |
|---|---|---|---|---|---|
| 审批 | ✓ | ✓ | ✓ | 看配置 | ✓ |
| 模型 / 思考档 | ✓ | ✓ | ✓ | ✓ | 模型可切 / 无档位 |
| 恢复历史会话 | ✓ | ✓ | ✓ | ✓ | ✓ |
| 插队(steer) | ✓ | — | — | — | — |
| 子代理面板 | ✓ | — | — | — | — |
| 工作台管 provider | ✓ | — | — | — | — |
| 临时会话(内存) | ✓ | — | — | — | — |
要求 Node ≥ 22.19。装完就有 oh-my-agent-web / aw / agent-web 三个等价命令。Linux 上内嵌终端需要就地编译 node-pty(make / g++ / python3)。
npm -g install oh-my-agent-web,或一行脚本装到 ~/.oh-my-agent-web,不碰系统全局目录。
进到你的项目目录敲 aw:前台运行并打开浏览器,默认只监听 127.0.0.1:25257。
点「新会话」发第一句。想从手机或别的电脑进,就 -H 0.0.0.0,并且先在本机「设置 → 远程」设好密码。
# 安装 npm -g install oh-my-agent-web # 在你的项目里启动(前台 + 打开浏览器) cd ~/code/my-proj aw # 后台跑、看状态、停掉 aw -d aw status aw stop # 换端口 / 指定工作区 aw -p 25258 AGENT_WEB_CWD=~/code/my-proj aw
| aw | 前台启动 + 打开页面(Ctrl-C 退出) |
| aw -d | 后台运行,日志进 daemon.log |
| aw status | pid / 端口 / 引擎 / 会话数 / 工作区 |
| aw -H 0.0.0.0 | 允许远程访问(需先设密码) |
单用户工具的安全边界应该小到能讲清楚:谁能进、怎么进、失败会怎样。
对端是回环且 Host 是回环才放行;其它来源未设密码时全拒。
远程不能设第一个密码 —— 否则端口一暴露,谁先扫到谁接管。密码落在数据目录,改完立即生效。
次数与时长可改(1–20 次 / 1–1440 分钟),锁会落盘,重启不解锁;设置里还能看到登录活动。
只读工具自动放行,其余按「工具 + 目标」询问;「总是允许」写进 approval-rules.json。回合结束会清掉悬置审批。
iframe 沙箱不含 allow-same-origin,远端 JS 摸不到工作台的存储与接口。
-H 0.0.0.0 让外面连得上,密码负责拦住人。域名、局域网 IP、外网 IP 一视同仁,不需要额外白名单。
会话在引擎自己的目录(pi: ~/.pi/agent/sessions);工作台只存 settings.json、锁、日志、推送订阅与本机界面偏好。换台设备打开,看到的是同一批会话文件。
不会。工作台读的是引擎自己的会话文件或 thread,只做展示、改名和删除;不建第二份库,也不改引擎的 prompt 与工具实现。
不会额外上传。只有你自己配置的模型 provider 会收到请求;工作台本身不经过任何中转服务。
因为它能直接跑命令、读写文件。默认只听 127.0.0.1,等于「能打开页面的人本来就已经能操作这台机器」。要远程必须显式开 -H 并设密码。
能。窄屏自动切成单栏、侧栏变抽屉、输入框 18px 防缩放。远程访问用 -H 0.0.0.0 + 密码;想收推送需要 https(添加到主屏的 PWA 也行)。
macOS、Linux、Windows 都支持。Linux 的内嵌终端需要就地编译 node-pty:装好 make / g++ / python3,或让一行脚本带 --with-build-tools。
临时会话是人开的另一条通道:不落盘、关掉就销毁,可以保存成正式对话。子代理是 agent 派出去的子任务:有自己的上下文与会话文件,跑完把结论带回来。
那是能力矩阵在起作用:当前引擎不支持的语义(比如非 pi 引擎的插队、子代理面板)就不显示按钮,而不是发一条注定失败的命令。