做了个 SSH 终端 TermCat,支持 AI 命令和 AI 运维操作,最近加了 Claude Code 插件面板,求各位 V 友拍砖(补截图) - V2EX
请不要在回答技术问题时复制粘贴 AI 生成的内容
imchen

做了个 SSH 终端 TermCat,支持 AI 命令和 AI 运维操作,最近加了 Claude Code 插件面板,求各位 V 友拍砖(补截图)

  •  
  •   imchen Apr 29 1184 views

    各位 V 友好,潜水多年,发个帖求点反馈。

    因为自己对操纵系统命令不熟悉,很多工具不知道怎么配置,于是想开发一个工具帮我实现系统的命令操作。 于是实现了一个终端管理工具叫 TermCat ,主要是 SSH + AI 运维。最近用 Claude Code 用得多了,顺手写了一个监控插件叫 Claude Code Power ,把 Claude Code 的运行状态和多套环境配置塞进了 TermCat 的右侧边栏。今天把整个工具一起聊聊,看看大家有没有用得上的场景,或者哪里设计得不对的。

    app 截图 1 app 截图 2

    大概是个什么东西

    简单说就是 SSH 终端 + AI 运维助手 + 一套插件系统。底层 Electron 28 + React 18 + xterm.js ,中间一层 Go 做 WebSocket 转发和认证,AI 推理在 Python 服务里跑。macOS / Windows / Linux 都有包。

    终端管理本身永久免费多 tab 、分屏、SFTP 文件浏览、系统监控、主机分组、跳板机这些都有。AI 部分需要点积分或者用自己的 API Key (下面会细讲)。

    下面按四个我自己觉得相对有点意思的点说一下。

    一、AI Agent 帮你做运维

    这部分不是命令补全。命令补全 Warp 已经做得很好,我没必要重做。

    我的方向是:你描述一个目标(比如"排查 Nginx 502"、"清理 /var/log 下超过 30 天的日志"),AI 自己规划步骤、逐步执行命令、读输出、根据结果调整下一步。每一步执行前要你点确认。高风险命令(重启、删除、改配置)会做二次提醒。

    举个真实场景:半夜服务器 502 ,告诉它"排查 Nginx 502",差不多 2 分钟后它告诉我是上游 Node 应用挂了,建议重启 myapp 并配 PM2 防止复发。整个过程我点了 6 次"确认"。当然它也不是每次都对,复杂业务 bug 它经常抓不到,遇到不熟的服务也会瞎猜。但日常那 80% 的"看日志、查进程、查端口、查配置"的重复活,确实能省不少时间。

    模式分三种:

    • Ask:上下文感知的问答,知道你连的是什么服务器
    • Agent:自主多步运维,上面这个例子的模式
    • Claude Code:集成 Claude Code SDK ,复杂远程开发调试

    模型不绑定。服务端模式是积分计费,本地插件模式可以填自己的 API Key ( DeepSeek / Claude / OpenAI 都行)。Agent 能力包是 69 一次买断,没有月费。

    二、Claude Code Power 插件(这次新做的)

    我自己用 Claude Code 用得比较多,遇到两个不太顺的点:

    1. 看不到它在干什么。当前 session 处于什么 Drive Mode 、刚才那条 prompt 调了哪些 tool / Skill / MCP / Sub-agent 、加载了哪些规则文件,全都藏在 ~/.claude/projects/<hash>/*.jsonl 里。要看就得再开个终端 tail ,或者手动翻文件。
    2. 多套配置切换比较烦。一会儿用官方 API ,一会儿换第三方代理,一会儿换个 model 比较输出,每次都要 export 一堆环境变量再重启 claude 。

    所以做了这个插件。它会自动检测 TermCat 终端里跑的 claude 进程,在右侧边栏注入面板。功能其实不复杂,分两块:

    实时面板(看 Claude Code 在干什么)

    • 当前 Drive Mode 显示在最上面,可以一键循环切换 default / acceptEdits / plan / bypassPermissions( claude 在跑就走 /permission-mode slash ,没在跑就改 settings.json )
    • 按时间倒序列出当前 session 的每条 prompt
    • 展开任意一条看详细调用:用了哪些 builtin tool 、Skill 、MCP 、Sub-agent ,加载了哪些规则文件
    • 一键 /rewind 回滚到任意 prompt
    • 多 tab 各跑一个 claude 互不干扰,切 tab 面板内容跟着切

    Preset 管理(一键切环境)

    • 维护多套配置:ANTHROPIC_API_KEY / AUTH_TOKEN / BASE_URL / MODEL / MAX_TOKENS / 任意自定义 env
    • 切 preset 自动写 active.env( POSIX )或 active.ps1( Windows ),点 launch 一键起 claude
    • 如果只是改 model ,直接给运行中的 claude 发 /model <name>,不用重启
    • 涉及 token / endpoint 变化会提示先 exit 再用新配置重起

    设计上有几条自己比较在意的约束:

    • 零侵入:只读 ~/.claude/ 文件,不装 hook 、不改 settings 、不监听网络端口
    • 填入不回车:除了 launch 按钮(明确"立刻启动"的手势),其他注入只把命令填到输入行,要你按 Enter 才执行
    • 跨平台:Mac / Linux 走 lsof + ps ,Windows 走 PowerShell + CIM 探测进程(因为 wmic 在 Win11 22H2+ 被移除了)

    不复杂,但是自己用着比裸用顺一些。也许对同样 Claude Code 多 session 、多模型来回切的同学有点用。

    三、性能上做了一些事

    终端工具卡顿就没法用。性能这块没什么巧思,就是把该做的事做了:

    • 多 tab 不重新挂载所有 tab 同时挂载,靠 z-index + opacity 切换,切 tab 没有重建开销
    • Vite 分包 + React.lazy主包目前 ~413KB ( gzip ~132KB ),首屏只加载核心组件; Settings / Extensions / Payment / HostConfig / 5 个内置插件全懒加载
    • xterm.js 高频输出requestAnimationFrame 合并刷新
    • localStorage 写入 300ms 防抖,避免每次 state 变更都同步落盘
    • 启动 API 并行Promise.allSettled 同时发,单个失败不阻塞
    • 本地字体@font-face 引本地 woff2 ,禁用外部 CDN
    • Main 进程禁用同步 I/Ofs.readFileSync 一律走 fs.promises

    其实没什么神奇的,就是 Electron 的常规优化都做了一遍。bundle-report 跟着 npm run build 一起出,每次加依赖都看一眼有没有进错 chunk 。

    交互细节方面:分屏拖拽、终端拖到分屏自动迁移会话、跨 tab 终端会话保留、中/英/西三语 i18n 、5 种 UI 主题 + 5 种终端配色。

    四、插件系统

    这个其实是整个项目里我自己最满意的部分,但也最容易讲错因为说"全插件架构"听起来像 buzzword 。具体一点说:

    TermCat 自己用的几个面板( AI 运维、文件浏览器、系统监控、快捷命令库、传输管理)不是 hardcode 进客户端的,是用插件 API 写的,和外部插件走完全相同的接口。这意味着如果某天我想干掉某个面板,删一行注册就行;想加一个,新建目录写一个 index.ts 就行。

    机制上有个稍微有意思的设计:插件不直接渲染 React 组件,而是输出声明式的 SectionDescriptor[],宿主按模板(header / select / list / msg-viewer / table / chart / form 等 20+ 种)渲染。也就是说插件作者基本不用懂 React ,照着模板填数据结构就行。代价是模板没覆盖到的 UI 没法做一个折中。

    其他基础设施:

    • 内置插件商店,可以一键装服务端发布的插件
    • 本地 .tgz 包直接拖到设置页装上
    • Main 进程加载 + 权限沙箱,插件 manifest 声明 permissions
    • 跨平台一致,TypeScript 写一次三个平台都跑

    目前实现的插件:claude-code-power(本文重点)、local-ops-aiagentai-opsfile-browsermonitoring-sidebarcommand-librarytransfer-manager。如果有同学想自己写插件,文档还在补,但代码已经稳定,可以来 issue 区交流。

    关于和其他终端的区别

    • iTerm2 / Windows Terminal / Tabby:纯终端管理,没有 AI 模块,各自有自己的强项。如果你的诉求只是"管理 SSH 连接 + 漂亮",这些已经很够用了。
    • Warp:AI 命令补全做得很流畅,订阅制 $15/月/seat ,目前 Mac/Linux 。如果你喜欢"输入更快"的方向,Warp 是更成熟的选择。
    • TermCat:方向不一样,我做的是"让 AI 替你执行"和"看见/管理 Claude Code"。

    适合谁:日常 SSH 比较多 + 用 Claude Code 写代码 + 不想被订阅锁死的同学。

    下载

    注册送的 50 积分够直接试一下 AI Agent 。。

    独立开发,反馈我都看。设计上肯定还有不少坑,欢迎拍砖。加用户群加微信(主页下方二维码)。

    15 replies    2026-04-29 17:13:43 +08:00
    onedge
        1
    onedge  
       Apr 29
    挺好的,现在平时是 ssh 上去,开个 opencode ,这样更一体化一些,还没细看体验,是否支持集成使用自己的 AI 订阅?
    imchen
        2
    imchen  
    OP
       Apr 29
    可以的,ssh 链接到服务器,就可以使用本地 Agent 或者 claude code 操作,比较方便,不需要提示语告诉 agent 如何操作远程服务器。(配置 key 和 baseurl 就可以)。 目前本地插件要购买,种子用户可以联系我,免费开通。
    bigha
        3
    bigha  
       Apr 29
    挺好的,我也写了一个差不多的,不过后端是纯 go ,wails 打包出来 exe 也就 9M

    我是主打极简风格 就是 ssh + sftp (断点续传)+AI 助手 + 三端同步
    onedge
        4
    onedge  
       Apr 29
    @imchen 好的,我给你点个 star ,为什么是 electron ,而不是其他的 flutter tauri 之类,我理解打包体积会小很多,还有本地是否可以用 rust 更好?
    imchen
        5
    imchen  
    OP
       Apr 29
    @bigha 谢谢啊,你的项目链接多少? 我下载使用,多交流交流。
    imchen
        6
    imchen  
    OP
       Apr 29
    @onedge 谢谢啊。 主要考虑 electron 的组件生态比较成熟,另外插件开发也更简单,另外考虑这个 app 在移动端的交互是不一样的,所以没考虑和移动端服用。 感谢你的建议,我有另外一个项目做多端适配,目前是用 flutter 来做。
    bigha
        7
    bigha  
       Apr 29
    @imchen 没链接 目前我主要是自己和朋友使用 可以贴张图

    比如一台服务器,连接上之后,输入这一句话,一会就自动给你装好了,这是全自动模式

    另外也支持手动模式,出一条命令,确认后执行


    https://img.imgdd.com/e5fb2780-0fef-45cb-aad2-4733084faf25.jpg
    bigha
        8
    bigha  
       Apr 29
    补一张图 我觉得 AI+终端 真的是很好用 不只是排查问题和安装软件 带来的效率提升也是几何级

    大概 AI 和任何一个细分行业结合 都会产生这种效果

    imchen
        9
    imchen  
    OP
       Apr 29
    @bigha 很不错,和我做的也比较类似。
    loop00
        10
    loop00  
       Apr 29
    GitHub 无法登录,提示:
    Be careful!

    The redirect_uri is not associated with this application.

    The application might be misconfigured or could be trying to redirect you to a website you weren't expecting.
    imchen
        11
    imchen  
    OP
       Apr 29 via iPhone
    @loop00 我平时用 google 登陆,github 登陆测试没做好,谢谢提醒。我尽快修改。
    imchen
        12
    imchen  
    OP
       Apr 29 via iPhone
    @loop00 已经修复好了,再次感谢帮忙发现问题。
    imchen
        13
    imchen  
    OP
       Apr 29
    种子用户可以加入群联系我,我给大家免费开通本地 Agent ,这样就可以配置自己的大模型使用了。
    AsuraTG
        14
    AsuraTG  
       Apr 29
    @imchen 如何成为种子用户
    imchen
        15
    imchen  
    OP
       Apr 29 via iPhone
    @AsuraTG 主页下方有二维码,加入群即可成为种子用户了。
    About     Help     Advertise     Blog     API     FAQ     Solana     1207 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 69ms UTC 23:29 PVG 07:29 LAX 16:29 JFK 19:29
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86