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

简单说就是 SSH 终端 + AI 运维助手 + 一套插件系统。底层 Electron 28 + React 18 + xterm.js ,中间一层 Go 做 WebSocket 转发和认证,AI 推理在 Python 服务里跑。macOS / Windows / Linux 都有包。
终端管理本身永久免费——多 tab 、分屏、SFTP 文件浏览、系统监控、主机分组、跳板机这些都有。AI 部分需要点积分或者用自己的 API Key (下面会细讲)。
下面按四个我自己觉得相对有点意思的点说一下。
这部分不是命令补全。命令补全 Warp 已经做得很好,我没必要重做。
我的方向是:你描述一个目标(比如"排查 Nginx 502"、"清理 /var/log 下超过 30 天的日志"),AI 自己规划步骤、逐步执行命令、读输出、根据结果调整下一步。每一步执行前要你点确认。高风险命令(重启、删除、改配置)会做二次提醒。
举个真实场景:半夜服务器 502 ,告诉它"排查 Nginx 502",差不多 2 分钟后它告诉我是上游 Node 应用挂了,建议重启 myapp 并配 PM2 防止复发。整个过程我点了 6 次"确认"。当然——它也不是每次都对,复杂业务 bug 它经常抓不到,遇到不熟的服务也会瞎猜。但日常那 80% 的"看日志、查进程、查端口、查配置"的重复活,确实能省不少时间。
模式分三种:
模型不绑定。服务端模式是积分计费,本地插件模式可以填自己的 API Key ( DeepSeek / Claude / OpenAI 都行)。Agent 能力包是 ¥69 一次买断,没有月费。
我自己用 Claude Code 用得比较多,遇到两个不太顺的点:
~/.claude/projects/<hash>/*.jsonl 里。要看就得再开个终端 tail ,或者手动翻文件。所以做了这个插件。它会自动检测 TermCat 终端里跑的 claude 进程,在右侧边栏注入面板。功能其实不复杂,分两块:
实时面板(看 Claude Code 在干什么)
default / acceptEdits / plan / bypassPermissions( claude 在跑就走 /permission-mode slash ,没在跑就改 settings.json )/rewind 回滚到任意 promptPreset 管理(一键切环境)
ANTHROPIC_API_KEY / AUTH_TOKEN / BASE_URL / MODEL / MAX_TOKENS / 任意自定义 envactive.env( POSIX )或 active.ps1( Windows ),点 launch 一键起 claude/model <name>,不用重启设计上有几条自己比较在意的约束:
~/.claude/ 文件,不装 hook 、不改 settings 、不监听网络端口不复杂,但是自己用着比裸用顺一些。也许对同样 Claude Code 多 session 、多模型来回切的同学有点用。
终端工具卡顿就没法用。性能这块没什么巧思,就是把该做的事做了:
z-index + opacity 切换,切 tab 没有重建开销requestAnimationFrame 合并刷新Promise.allSettled 同时发,单个失败不阻塞@font-face 引本地 woff2 ,禁用外部 CDNfs.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 没法做——一个折中。
其他基础设施:
permissions目前实现的插件:claude-code-power(本文重点)、local-ops-aiagent(本地 API Key AI )、ai-ops、file-browser、monitoring-sidebar、command-library、transfer-manager。如果有同学想自己写插件,文档还在补,但代码已经稳定,可以来 issue 区交流。
适合谁:日常 SSH 比较多 + 用 Claude Code 写代码 + 不想被订阅锁死的同学。
注册送的 50 积分够直接试一下 AI Agent 。。
独立开发,反馈我都看。设计上肯定还有不少坑,欢迎拍砖。加用户群加微信(主页下方二维码)。
1
onedge 8h 18m ago
挺好的,现在平时是 ssh 上去,开个 opencode ,这样更一体化一些,还没细看体验,是否支持集成使用自己的 AI 订阅?
|
2
imchen OP 可以的,ssh 链接到服务器,就可以使用本地 Agent 或者 claude code 操作,比较方便,不需要提示语告诉 agent 如何操作远程服务器。(配置 key 和 baseurl 就可以)。 目前本地插件要购买,种子用户可以联系我,免费开通。
|
3
bigha 8h 7m ago
挺好的,我也写了一个差不多的,不过后端是纯 go ,wails 打包出来 exe 也就 9M
我是主打极简风格 就是 ssh + sftp (断点续传)+AI 助手 + 三端同步 |
4
onedge 8h 3m ago
@imchen 好的,我给你点个 star ,为什么是 electron ,而不是其他的 flutter tauri 之类,我理解打包体积会小很多,还有本地是否可以用 rust 更好?
|
6
imchen OP @onedge 谢谢啊。 主要考虑 electron 的组件生态比较成熟,另外插件开发也更简单,另外考虑这个 app 在移动端的交互是不一样的,所以没考虑和移动端服用。 感谢你的建议,我有另外一个项目做多端适配,目前是用 flutter 来做。
|
7
bigha 7h 48m ago
@imchen 没链接 目前我主要是自己和朋友使用 可以贴张图
比如一台服务器,连接上之后,输入这一句话,一会就自动给你装好了,这是全自动模式 另外也支持手动模式,出一条命令,确认后执行 https://img.imgdd.com/e5fb2780-0fef-45cb-aad2-4733084faf25.jpg |
8
bigha 7h 42m ago
|
10
loop00 6h 13m ago
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. |
13
imchen OP 种子用户可以加入群联系我,我给大家免费开通本地 Agent ,这样就可以配置自己的大模型使用了。
|