V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
imchen
V2EX  ›  程序员

做了个 支持 AI 运维的 SSH 终端 TermCat,最近加了 Claude Code 插件面板,求各位 V 友拍砖

  •  1
     
  •   imchen · 9h 0m ago · 384 views

    各位 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 (下面会细讲)。

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

    一、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/O——fs.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-aiagent(本地 API Key AI )、ai-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 。。

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

    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3949 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 40ms · UTC 10:20 · PVG 18:20 · LAX 03:20 · JFK 06:20
    ♥ Do have faith in what you're doing.