惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Security Latest
Security Latest
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Stack Overflow Blog
Stack Overflow Blog
WordPress大学
WordPress大学
N
Netflix TechBlog - Medium
GbyAI
GbyAI
云风的 BLOG
云风的 BLOG
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
宝玉的分享
宝玉的分享
博客园 - 【当耐特】
C
Cyber Attacks, Cyber Crime and Cyber Security
雷峰网
雷峰网
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
T
Threat Research - Cisco Blogs
NISL@THU
NISL@THU
Spread Privacy
Spread Privacy
P
Proofpoint News Feed
J
Java Code Geeks
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
MyScale Blog
MyScale Blog
T
Tor Project blog
P
Proofpoint News Feed
C
CERT Recently Published Vulnerability Notes
P
Privacy & Cybersecurity Law Blog
MongoDB | Blog
MongoDB | Blog
Simon Willison's Weblog
Simon Willison's Weblog
C
Cybersecurity and Infrastructure Security Agency CISA
L
LINUX DO - 热门话题
小众软件
小众软件
G
GRAHAM CLULEY
P
Privacy International News Feed
AWS News Blog
AWS News Blog
Know Your Adversary
Know Your Adversary
P
Palo Alto Networks Blog
人人都是产品经理
人人都是产品经理
S
Schneier on Security
Scott Helme
Scott Helme
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
B
Blog RSS Feed
T
The Exploit Database - CXSecurity.com
Recent Announcements
Recent Announcements
E
Exploit-DB.com RSS Feed
C
CXSECURITY Database RSS Feed - CXSecurity.com
U
Unit 42
The Register - Security
The Register - Security
S
Securelist
Martin Fowler
Martin Fowler
Project Zero
Project Zero
大猫的无限游戏
大猫的无限游戏
Cisco Talos Blog
Cisco Talos Blog

博客园_首页

马斯克都在用的"第一性原理":为什么90%的程序员在"卷框架",而高手只看一件事? Jenkins-批量自动化构建指定目录或者视图下所有Job或者指定Job RAG夺命10连问,你能抗住第几问? 硬件连接器简介和图文大全 GPT-5.5 开启更强的智能体工作方式 零代码 AI 自动化测试神器!Browser‑Use Web UI 保姆级教程,测试人直接上手 Netty保姆级全解析|技术背景+核心知识点+生产实战教程 【译】Bookmark Studio:在 Visual Studio 中实现书签功能升级 Tomcat的事件监听机制:观察者模式 .NET 11 Preview 3 发布:C# 15 union 类型终补齐,Kestrel 暴增 40% 生成器与迭代器 【Java安全】URLDNS利用链分析 高数学习笔记 一分钟学会用Markdown绘制Mermaid思维导图 - 天恩软件 利用surging 网络组件重构插件开发 踩坑记录:UTF-8、UTF-8-BOM 与 GB2312 读取的乱码真相 我把市面上 UI 自动化 Skill 全踩坑一遍后,自己写了个真正能用的 存储器类型汇总 PortSwigger SQL注入LAB3 《软件测试策略》——测试相关技术(编写 bug 报告)(二) ElasticSearch中的索引模板详解 一份CLAUDE.md,为何能让GitHub榜首项目狂揽6万星? 设计圈真的要变天了:ChatGPT Image 2 不只是会生图了 多租户系统框架的界面分析设计 SpringAI入门指南 我为何选择私有化客服系统作为独立开发的方向 RAG 是什么?16 种 RAG 方案一次讲清!AI 应用开发必学 | 万字干货 HackTheBox Cap 靶机:从 IDOR 到 PCAP 凭据提取再到 Capabilities 提权 Python批量图片拼接脚本:支持行列布局、最后一行居中、自然排序 使用 Java 提取 HTML 文件中的纯文本内容 AI开发-python-LangGraph框架(3-31-LangGraph 「合并式状态管理」的原理与实践) keycloak~实现OAuth 2.0 Token Exchange SeaTunnel + AI:一句“我要做什么”,能不能直接变成一份能跑的配置? 本体论的启示:从零开始,如何让AI“学会”使用计算器 【译】Visual Studio 三月更新 —— 打造专属自定义 Agent Tomcat组件管理源码详解 推荐一个开箱即用的.NET权限管理平台:Magic.NET .NET 调试器 netcoredbg 跨平台及其 LoongArch 架构支持进展 DualToken如何让模型理解自己画出来的东西? surging 的Agent插件研发全流程:从定义到落地 无硬件学LVGL—定时器篇:基于Web模拟器+MicroPython速通GUI开发 Kimi 新模型发布!教你如何在 Claude Code 上配置并使用最新的 k2.6 模型! UEFI Driver 程序框架 PREEMPT_RT补丁技术实现:RCU 零代码经验,我用Claude Code搓出的生产力工具 FastAPI订单防超卖实战:从数据库锁到Saga分布式事务,这一篇给你理清了 Kimi Code CLI 系统指令的摸索 以及 开发实战经验分享 智能运维2.0:从范式跃迁到落地实操——理论框架与实施指南 当 AIR 只支持 Mac,我开始重新思考操作系统这件事 深度学习开发笔记(一):跨平台纯C++训练和推理框架LibTorch介绍、开发环境搭建和Demo 必知必会:大模型训练通信开销计算详解与面试指南 AI开发-python-LangGraph框架(3-30-LangGraph 「追加式消息状态」的原理与实践) 新版本Dash完美支持原生FastAPI后端 如何写一个好的 skill 让你的效率加倍 如何灵活设置公式中各个部分的颜色? Claude Code命令速查大全 Netty入门|从BIO到Netty:一步步看懂Java网络编程的迭代逻辑 最小二乘问题详解21:稀疏GCP约束下的自由网平差与弱约束融合 SQL Server 性能优化实战(第一期):索引——查询加速的基石 API未授权访问,敏感信息正在裸奔 Agent 上下文窗口的有限与突破 Linux进阶--系统备份、恢复与可视化管理工具webmin、bt宝塔 AI 赋能微服务工程化:Surging Engine-CLI 的插件化 Agent 架构革新 [项目管理] 浅谈大数据项目的项目管理 一个零基础计算机学生决定开始写博客的原因 基于 OpenSpec 实现规范驱动开发 方差在扩散模型保护中的作用 别再写 if/else 了:让 LLM 自己决定调用哪个函数 Microsoft Agent Framework 创建智能体 Responses WebSocket 协议详解:为什么它会让 Agent 工作流更快 分享一个Oracle 性能诊断工具,代码已开源 深度学习进阶(十) RoI Align 华为云亮相 KubeCon EU 2026,共建“智能原生”基础设施,加速 Agentic AI 未来 FastAPI 生产环境避坑指南:用 Alembic 管理数据库迁移,别再手动改表结构了! AI开发-python-LangGraph框架(3-29-LangGraph 「覆盖式状态」的原理与实践) 开源项目PocoEmit.Mapper重构之扑风捉影 robotframework-aitester---向robotframework中引入大模型能力 Codex学习路线图 ElasticSearch中的分词器详解 Linux--Shell编程入门 FastAPI服务半夜又挂了?先别急着重启,查查你的数据库连接池“池子”是不是漏了 ElasticSearch集群数据备份恢复详解 MAF快速入门(24)整合多个Skill来源 电子小白:光耦到底是什么? 不用写脚本!Browser-Use 实操:AI 直接驱动浏览器自动化测试 【从0到1构建一个ClaudeAgent】协作-Worktree+任务隔离 SolonCode vs OpenCode 内存实测,差距高达 8 倍!(此战能封神吗?) 上周热点回顾(4.13-4.19) LLM核心参数配置指南:原理篇 关于数据库服务器资源降配的效能分析 这篇千万阅读的 AI 方法论,我三个月前已经在用了,效果有点离谱! [云原生] K8s 核心组件使用指南 基于深度学习的障碍物检测系统(YOLOv12完整代码+论文示例+多算法对比) Plist 二进制格式 高等数学-导数与微分(微分中值定理) Milvus 和 PGVector,哪个更好? OpenClaw 已过时?在 VS Code 中运行 Hermes Agent! 分享一下笔者的 Mac 装机必备软件 成人礼——2026.4.19 鲜花 深度学习进阶(九)池化技术的初步改进:RoI Pooling
为了随时随地控制 AI Agent,我做了一个 Web Terminal
boydfd · 2026-05-31 · via 博客园_首页

背景:‍我只是想随时随地工作

前段时间,为了更好地使用小龙虾,我开发了一个监控龙虾的工具。当时我的想法很简单:‍能不能把所有工作都迁移到 OpenClaw 上?最好连开发也在上面完成。

那段时间 Copilot 还是按调用次数计费,又可以用 Claude Opus 4.6,体验确实不错。后来 Copilot 改成限流模式,闲鱼上也找不到便宜资源了,我只能转战 GPT。

结果用了 GPT 之后,我发现事情并不简单:‍GPT 还是得配合 Codex 才好用。

这下问题来了。我怎么才能随时随地使用 Codex?最好能在手机上也能操作。

虽然小龙虾也能间接操作 Codex,但很多交互并不自然。比如 skill、resume 这类命令,本质上还是需要一个真正的 terminal 环境。绕一层之后,就会有一种很别扭的感觉:‍明明我想操作的是 terminal,结果却要龙虾代理一手,既不直接也不经济(耗费token)。

所以,这篇文章要讲的不是“我做了一个很酷的系统”,而是一个很具体的痛点:‍我想在任何地方继续控制我的 AI 编程 Agent,但传统 terminal 和 tmux 已经开始扛不住这个工作流了。

问题一:‍多 Session 真的很难维护

最开始我还是老老实实用 tmux。

先看一下tmux里的概念:

tmux 概念示意图

我的习惯是,一个 project 放在一个 tmux window 里,多个 Codex session 或 Claude Code session 就放在不同的 pane。刚开始这套方案还挺舒服,因为 tmux 至少解决了会话持久化的问题。电脑合上再打开,任务还在那里。

但并发任务一多,问题就来了。

1. 一个 window 里塞了太多 pane,很快就看不出来哪个是哪个。

2. pane 太小之后,只能看到一点点输出,不知道 session 是卡住了还是已经完成了。

3. 有些任务跑完了,人不在电脑旁边,回来还得一个个 pane 检查。

4. 手机上看 tmux pane,基本就是在考验视力和耐心。

一堆 tmux pane 挤在一起的混乱场景

这时候我意识到,terminal 本身没错,tmux 也没错,错的是 Agent 时代的任务数量和持续时间已经变了。

以前 terminal 更像是一个“实时操作窗口”,我敲命令,它给我输出。现在 terminal 里跑的是 Agent,它可能自己工作十几分钟,甚至更久,等待一大段时间后,还需要继续交互。人和 terminal 的关系,从实时操作变成了任务托管。

所以,如果还用一堆 pane 来管理 Agent,就很容易变成“我不知道它们在干什么,但我又不敢关”。

问题二:‍现成工具总是跟不上 Agent CLI

遇到这个问题后,我第一反应当然不是自己造轮子,而是去找有没有现成工具。

我尝试过一些类似的工具。有的功能比较齐全,但是已经停止维护;有的支持手机端应用,也能在网页上开发,还能做 session 管理,看起来已经很接近我的需求。

一开始我还挺高兴,觉得这不就解决了吗?

没想到,真正用起来后,最大的问题不是功能少,而是跟不上 Codex、Claude Code 这类工具的更新节奏。

这类 Agent CLI 自己变化非常快。今天加一个新的 slash command,明天调整一下 resume 方式,后天又多一个 skill 工作流。如果外层工具没有及时适配,体验就会断掉。

我本来也想过二开。毕竟现在有 Codex,改个开源项目听起来应该不难。但看了一圈代码之后发现,它们往往做了比较复杂的 client 设计,测试链路也比较重。我自己只是想解决日常开发痛点,没时间把别人的整套抽象重新理解一遍。

所以,二开这条路也失败了。

柳暗花明:‍我真正需要的是更好管理 terminal

卡住一段时间后,我突然意识到:‍我想要的其实不是一个新的 IDE,也不是一个新的 Agent 平台。

我想要的就是一个更方便的 terminal。

只要 terminal 能被管理好,Codex、Claude Code、Cursor CLI 这些工具完全可以继续用原来的方式跑。这样反而更稳:

1. 不需要追着每个 Agent 工具的内部协议跑。

2. 不替换 shell、tmux、git 这些已经稳定的工具。

3. 浏览器只做控制面,真正执行命令的还是原来的机器。

4. 手机端也能优化交互,因为浏览器比 SSH 客户端更容易做界面。

顺着这个思路,最终形态就很清楚了:‍做一个 Web Terminal。

但这里有一个关键点:‍它不能只是“在网页里打开一个 terminal”。如果只是把 terminal 搬到浏览器里,那只能解决输入输出问题,解决不了多 Session 管理问题。

我真正需要的是一个面向 Agent 工作流的 terminal 控制面。

Web Terminal ACP 整体界面

方案演进:‍从 pane 到 window

一开始我在 tmux 里是用 pane 对应一个 Agent session 的。但做 Web Terminal 后,我很快发现 pane 不适合作为长期管理单元。

原因很简单:‍我需要让网页里的 terminal 和 tmux 里的 terminal 稳定对应起来。pane 更像是一个布局里的位置,它有序号,但不是一个适合长期追踪的实体。窗口布局一变,pane 的语义就容易乱。

所以最后我选择了用 tmux window 对应一个 Web Terminal。

这个选择看起来只是实现细节,但对体验影响很大。因为 window 更像一个独立任务,可以有自己的标题、目录、历史、状态和元信息。用户看到的也不再是一堆挤在一起的小 pane,而是一棵可以整理的 terminal 树。

这样一来,Web Terminal ACP 里的 terminal 就不再只是字符流,而是一个可管理的工作单元。

Terminal 管理:‍先让它有语义

在以前的 tmux 里,最痛苦的一点是没有语义。

我只能看到 Agent 的输出,然后靠观察输出反向推导:‍这个 session 到底是在修 bug,还是在跑测试,还是已经卡死了。

最直接的解决方案当然是给每个 terminal 起标题。比如“修登录问题”“跑构建”“调试移动端样式”。但手动命名有两个问题。

第一,人会偷懒。

这就像维护浏览器标签页和文件夹一样。刚开始大家都很认真,后面一赶进度,就开始随手打开、随手堆着。等反应过来的时候,已经全乱了。

第二,语义会变化。

一个 session 一开始可能是在修 A,聊着聊着变成了 B,再后来又开始排查 C。人往往不会记得及时改标题。

所以这件事最适合交给 LLM。它可以不知疲倦地根据交互内容生成标题、摘要和标签,还可以把 terminal 自动整理到树状结构里。

terminal 树状结构

这一步解决的不是“好不好看”,而是“我能不能一眼知道现在有哪些任务”。

当 terminal 数量从 3 个变成 30 个时,这个差别会非常明显。

Terminal 管理:‍解决舍不得重启的问题

另一个很真实的问题是:‍我舍不得重启。

一旦开了 tmux,里面就会有很多 window,跑着各种任务:‍开发服务、LLM 服务、Agent session、临时调试命令。只要这些东西还在,我就不太想重启机器。

原因也很朴素:‍完整重建一次太麻烦了。

我要先找到对应目录,再启动服务,再恢复各个 Agent session,还要通过 resume 一个个确认哪个 session 是哪个。有时候光是恢复现场,就已经把耐心耗光了。

所以 Web Terminal ACP 里做了一件很重要的事:‍把 terminal 的元信息持久化下来。

既然一个 Web Terminal 已经能对应一个 tmux window,那就可以记录它的目录、标题、分组、命令历史和 Agent session 信息。

这样就算机器重启、tmux 消失,我也不至于从零开始。打开 Web Terminal ACP,看着 terminal 树,就能知道之前有哪些任务、在哪些目录、执行过哪些命令、应该恢复哪个 Agent session。

这不是完全自动化恢复一切,但它把“灾后重建”的成本降了很多。

以前重启像搬家,现在至少像照着清单复原桌面。

这个功能甚至让我在实际工作中感受到了惊艳,上周我的电脑忘记充电,重启了,然后我重新打开我的web terminal,很快就恢复了之前的工作状态,不需要一个个打开terminal重新构建,按照分组以及web terminal里的历史命令,三两下就把需要的服务启动了,Agent的session也可以自动恢复,体验真的提升了一大截。

重启后恢复工作状态

Terminal 管理:‍别让 Agent session 把内存吃爆

还有一个问题,很多人可能都遇到过:‍舍不得关 Claude Code 或 Codex session。

因为你总觉得后面可能还会用到这个上下文,可能还要补充一句话,可能还要让它继续改一点东西。于是一个 session 不关,两个 session 不关,最后几十个 session 都挂在机器上。

我自己之前在使用 OpenClaw 的时候,因为 harness 做得不够好,Claude Code 调用完成后,session 经常还停留在机器上。隔一段时间就要清理一遍,不然内存会爆炸。

所以 Web Terminal ACP 后来加的不是“永远保活”,而是“可回收、可恢复”:‍针对 Agent CLI,如果长时间没有输出,也没有用户重新进入这个 terminal,Web Terminal 可以把当前 agent 进程自动挂起/终止,同时记录它的 provider、session id、cwd、项目路径这些恢复入口。

下次你重新打开这个 terminal,或者窗口需要重新创建时,Web Terminal 会自动按对应工具的恢复方式把 session 接回来。比如 Codex 走 ​resume,Claude Code 走自己的 resume 机制。你看到的是同一个任务上下文继续往下走,但机器上不需要一直留着一个吃内存的进程。

也就是说,进程不用永远活着。真正需要长期保存的是任务的语义、历史和可恢复入口,而不是一个一直占内存的进程。

恢复 Agent session

Terminal 管理:‍最近使用真的很重要

在写代码的时候,我们经常用“打开最近编辑的文件”。这个功能非常自然,也非常重要。

但到了 terminal 这边,传统工具很少把“最近使用的 terminal”当成一等能力。

可是在 Agent 工作流里,这件事其实很关键。因为我经常会同时开多个项目、多个任务、多个 session。过一会儿回来,我最想知道的不是全部列表,而是:‍刚才我到底在哪几个 terminal 上工作?

所以 Web Terminal ACP 也加了最近使用的 terminal 入口。

这不是一个复杂功能,但非常实用。它解决的是“回到现场”的问题。

很多时候,体验提升并不来自特别高级的技术,而是来自这种小地方终于顺手了。

最近使用 terminal 列表

手机使用:‍Agent 时代的新需求

以前我很少认真考虑在手机上写代码。

手机屏幕小、键盘难用、terminal 操作别扭,怎么看都不像一个适合开发的设备。

但 Agent 时代之后,这件事变了。

因为很多时候,我不是要在手机上亲自写代码,而是要控制 Agent 去写代码。我只需要发出任务、查看进度、补充信息、偶尔执行几个命令。

所以手机端开发变成了一个实实在在的诉求。

这里有两个难题:

1. 手机需要能随时控制 Agent 做各种操作。

2. 手机需要能进行功能测试和结果验收。

第二点目前还比较难。尤其是桌面端应用、复杂交互、需要多窗口验证的功能,手机上还是不方便。现在比较适合在手机上验收的,主要还是移动端 Web 应用,或者一些简单的命令行结果。

但第一步总得先迈出去:‍先让手机能舒服地控制 Agent。

手机使用:‍补上 terminal 缺失的快捷键

手机上用 terminal,一个很大的痛点是快捷键缺失。

在电脑上,我想找之前敲过的命令,按一下方向键就行。想中断任务,按快捷键就行。想移动光标,也有成熟的键盘操作。

但在手机上,这些操作都不自然。

所以 Web Terminal ACP 给手机端加了常用快捷键和虚拟按键。方向键、控制键、常用操作都可以直接点。

这类功能看起来很小,但没有它们,手机 terminal 基本只能应急。有了它们,才开始像一个可以长期使用的工具。

手机端快捷键界面

手机使用:‍不能只看原生命令行输出

手机屏幕能装下的内容很有限。

Claude Code、Codex 这类工具又会输出大量信息。如果直接看原生命令行输出,很快就会 lost。你不知道哪一段是模型思考,哪一段是工具执行,哪一段是最终结果。

所以手机端不能只做一个缩小版 terminal,还需要把 session 的输入和输出用更适合阅读的方式展示出来。

简单说,就是 terminal 仍然在那里,但旁边要有更清晰的任务记录。

这样我在手机上就不需要盯着密密麻麻的字符流猜进度,而是可以快速判断:‍Agent 现在在做什么,刚刚完成了什么,是否需要我介入。

手机使用:‍输入要先编辑,再一次性发送

还有一个特别影响体验的问题:‍远程输入延迟。

既然是手机使用,大概率是在外面连家里的电脑,或者连某台远程机器。这种情况下,敲一个字可能隔几十甚至上百毫秒才显示。

连接过高延迟远程服务器的人都知道,这种体验非常折磨。

所以 Web Terminal ACP 做了 quick input:‍先在本地输入框里把内容写完,再一次性发送给 terminal。

手机端 quick input

这对于 Agent 场景尤其重要。因为我经常不是输入一个短命令,而是输入一大段 prompt。如果每个字都走远程 terminal 回显,那体验会非常糟糕。

有了 quick input 后,手机端控制 Agent 才真正顺畅起来。

还有哪些不足

当然,现在它还不完美。

首先,手机端验收能力还比较弱。控制 Agent 已经比较顺畅了,但真正要看 UI 效果、做复杂交互测试,很多时候还是需要电脑。

其次,多 Agent 状态展示还可以继续加强。现在能看到标题、历史、session 和一些状态,但如果未来同时跑更多 Agent,可能还需要更清晰的任务看板。

第三,恢复能力还可以更自动化。现在已经能保留目录、历史和 session 信息,但重启后哪些服务该自动拉起、哪些应该只提示用户,仍然需要更细的判断。

最后,安装和多 client 管理还可以继续简化。这个工具本来就是为了解决“随时随地工作”,如果安装过程太折腾,就有点违背初衷。

总结

这次做 Web Terminal ACP,最大的感受是:‍Agent 时代不一定需要一个全新的开发入口,但一定需要一个更适合长期任务管理的控制面。

传统 terminal 适合人实时操作,tmux 适合让进程长期存在,而 Agent 工作流需要在这两者之上再加几层东西:‍任务语义、运行状态、历史记录、最近访问、session 恢复和手机端交互。

单独看每一项都不复杂,但组合在一起后,使用体验会发生很明显的变化。

对我自己来说,它解决的是一个很具体的问题:‍我终于可以在浏览器和手机之间切换,继续管理同一批 Agent 任务了。再也不用盯着一堆 tmux pane 猜哪个任务还活着,也不用担心某个 session 跑完后找不到上下文。

如果你觉得这个工具有用的话,赶紧让你的agent去安装吧:

Agent Installation Guide

Github: https:‍//github.com/boydfd/web_terminal_acp