🚀 开源了,一个人 + AI 肝出一个 AI 终端 | AShell 技术分享

🚀 开源了,一个人 + AI 肝出一个 AI 终端 | AShell 技术分享

事情是这样的:我日常工作是全栈开发,前端 Vue/TS、后端 Node,顺便管着几十台服务器。Rust 只算入门水平,没写过桌面应用,也没碰过 SSH 协议实现------但用 AI 辅助编程,从零肝出了一个开源 AI 终端工具。

项目叫 AShell,MIT 协议开源,跨平台终端 / SSH 客户端,内置 AI 助手。今天它已经是我日常管理服务器的首选工具了。这篇文章聊聊产品本身,也聊聊 AI 辅助编程的真实体验------哪些地方 AI 是神队友,哪些地方让人想砸键盘。

为什么造这个轮子?我在用终端工具时的真实痛点

管着几十台服务器,终端工具是我每天打交道最多的软件。说实话,市面上的主流工具我基本都用过一轮:

Xshell 是我最早的选择,功能确实扎实,但只支持 Windows。我开发机是 Mac,服务器是 Linux,三端切换时 Xshell 直接没法用。而且闭源软件,密码在它内部怎么存的我完全不知道。

Termius 跨平台做得不错,UI 也好看,但订阅制让我很不舒服。最让我受不了的是它的 AI 功能------所有操作记录和 SSH 凭证都要经过它的云端服务器。我的服务器密码凭什么要经过第三方?

Tabby 开源,这点好评。但 Electron 打包,启动慢、内存占用 200MB+,在我那台老 MacBook 上开几个 Tab 风扇就开始狂转。

Electerm、WindTerm、Next Terminal 也都试过,各有各的问题:有的是 UI 太简陋,有的是 SFTP 体验割裂,有的是更新太慢。

但说实话,这些都不是我最终决定自己造工具的根本原因。

真正让我下定决心的是------AI 时代来了,但终端工具还停留在手动敲命令的阶段。

我每天的工作流是这样的:SSH 到服务器 A → 看日志 → 改配置 → 传文件 → SSH 到服务器 B → 重复上述操作。几十台服务器,操作高度重复,但每步都得手动敲命令。我在想,能不能像聊天一样运维?跟 AI 说一句"帮我把三台 Web 服务器的 Nginx 错误日志打包发过来",它就自动连上去执行,把结果整理好给我?

我去找了市面上所谓的"AI 终端"------结果发现要么是 API 壳(你的操作记录全送云端),要么 AI 和终端是割裂的两个模块,AI 根本不知道你在哪个 SSH 会话里。

我想要的是:AI 直接长在终端里,能复用当前 SSH 会话执行命令,全程本地运行,密钥不出设备。

没找到,那就自己肝一个出来。

Vibe Coding 的真实体验

先说结论:没有 AI,这个项目我根本做不出来。 Rust 异步运行时、SSH 协议实现、跨平台桌面框架------这些我一个都没碰过,正常来说光学习就要几个月。但 AI 把门槛从"先学半年"降到了"边做边学",让我这个全栈开发在业余时间也能交付一个完整产品。

当然,门槛降低不等于一帆风顺。"能搞定"和"轻松搞定"之间,隔着一百个让人想撞墙的时刻。

哪些地方 AI 是真·神队友

Rust 代码生成。说实话,我 Rust 水平就是能看懂但写不利索的程度。asm 宏、生命周期标注、tokio 的 select! 宏、axum 的 extractor 模式------这些让我自己写,一个功能能卡一周。用 AI 辅助的话,描述清楚需求,它能给出 80% 正确的代码框架,我再修修补补。russh 的 SSH 实现、AES-256-GCM 的加密解密、sqlx 的 migration,基本都靠这个模式搞定的。

前端组件搭建。Vue 3 + Naive UI 的 Tree 组件做主机目录树、DataTable 做 SFTP 文件列表、表单做端口转发规则------这些 CRUD 类的前端工作,AI 生成得又快又好。我只需要描述清楚数据结构、交互逻辑和边界情况,基本就能拿到可用的代码。

协议适配和胶水代码。终端 WebSocket 的自定义协议适配、xterm.js 的 addon 集成、axios 拦截器的 Token 注入------这些"套路代码"AI 写起来非常顺手,而且很少出错。

哪些地方 AI 让人想砸键盘

Tauri 2 的坑。Tauri 2 的文档和社区资源远不如 Electron 丰富,AI 的训练数据里 Tauri 2 的内容也很少。经常出现的情况是:AI 自信满满地生成了 Tauri 1 的 API 调用方式,在 Tauri 2 里根本跑不通。比如文件对话框、字体枚举、sidecar 进程管理,这些 Tauri 2 的 API 和 v1 完全不同,AI 反复给出错的答案,最后还得自己翻源码和文档。

透明窗口的跨平台差异。AShell 做了无系统装饰栏 + 透明背景 + 毛玻璃效果,这个在 macOS、Windows 10、Windows 11 上的表现完全不同。macOS 上 WKWebView 的 WebGL 上下文和窗口透明度的交互有 bug,Windows 上 WebView2 的 Acrylic 效果需要特定注册表配置。这些平台相关的细节,AI 几乎给不出准确的解决方案,只能自己一点点试。

SSH 协议的细节。russh 的文档不算丰富,很多行为需要读源码才能理解。比如 PTY 窗口 resize 的时机、SFTP 子通道的复用、server host key 的 TOFU 策略------这些细节 AI 很难给出准确建议,因为它对 russh 这个相对小众的库了解有限。

Bun 编译的诡异行为 。Sidecar 是用 Bun 编译成独立二进制的 Node 脚本。Mac OS 下 Bun 编译的二进制对普通 pipe 不触发事件循环,这个 bug 在 Bun 的 issue 里有人提过但没修。最终解决方案是用 socketpair 替代 stdin pipe。

我的 Vibe Coding 工作流

过程中,我摸索出一套比较稳定的 AI 辅助开发流程:

  1. 需求拆解:把功能拆成足够小的原子任务,每个任务一句话能说清楚
  2. 先给上下文:把相关的文件路径、数据结构、现有代码片段喂给 AI,让它理解当前项目状态
  3. 生成 + Review:AI 出代码,我逐行 review,重点关注边界条件、错误处理、安全问题
  4. 编译即反馈:Rust 的编译器是很好的安全网,类型系统能拦住大部分 AI 的幻觉输出
  5. 遇到 AI 搞不定的:果断停下来自己翻文档、读源码、写最小复现,而不是让 AI 反复猜

核心原则是:AI 是加速器,不是自动驾驶。 它能把 80% 的体力活干了,但剩下 20% 的架构决策、安全设计、跨平台兼容、性能优化,必须自己把控。

产品亮点:聊聊几个有意思的设计

通信架构:三进程模型

AShell 运行时是三个进程在协作:

  1. Tauri Rust 进程 :桌面壳 + 本地 API 服务(axum,127.0.0.1:0 随机端口 + 随机 Bearer Token)
  2. Vue 前端进程:WebView 中运行,通过 REST/WebSocket 与 Rust 后端通信
  3. AI Sidecar 进程:每个终端会话一个独立 Bun 编译 Node 进程,stdin/stdout 通信

终端数据传输走 WebSocket 二进制帧,不经过 Tauri IPC 序列化,延迟更低。API 只监听 127.0.0.1,外部不可达,Token 每次启动随机生成。

AI 的安全边界

市面上的 AI 终端工具,基本是把你的操作记录和 SSH 凭证发到云端做推理。AShell 的 AI 跑在本地,而且做了几个关键设计:

  • 进程隔离:每个终端会话独立 AI 进程,上下文不交叉
  • 凭证不泄露:AI 只知道"有一个可用的 SSH 会话",永远看不到密码
  • 破坏性操作确认:rm -rf、dd、mkfs 等命令必须手动批准才执行
  • 双 Agent 支持:Claude Agent SDK + Pi coding agent,按需切换

数据安全

SSH 密码和私钥用 AES-256-GCM 加密落盘,密钥文件 ~/.ashell/secret.key(Unix 权限 0600)。模型层做了 #[serde(skip_serializing)],REST API 出参永不泄露密文。

其他一些细节

  • 终端进度条识别:自动解析 cargo build / brew install / wget 等命令的文本进度,同步到任务栏
  • 命令输入建议:Trie 树前缀匹配 + 历史关键字搜索,节点随历史淘汰
  • SFTP 在线编辑:内置 CodeMirror,支持查找替换、字号调节
  • 权限列三段着色:属主/属组/其他独立着色,一眼看出权限问题
  • 跨平台 6 目标:macOS x2、Windows x2、Linux x2,CI 矩阵自动构建

技术栈一览

  • 桌面框架:Tauri 2(Rust + 系统 WebView)
  • 前端:Vue 3 + TypeScript + Naive UI + xterm.js(WebGL 渲染)
  • 后端:Rust + axum 0.8 + tokio + russh + SQLite/sqlx
  • AI:sidecar-cc(Claude)+ sidecar-pi(Pi coding agent),Bun 编译独立进程
  • 安全:AES-256-GCM 凭证加密 + 本地随机 Token 鉴权
  • CI/CD:GitHub Actions,6 平台矩阵,tag 推送自动发布 Release

写在最后

这个项目是我的一次实验:一个人 + AI,能不能从零肝出一个完整的桌面应用?

答案是能,但过程比想象中曲折。AI 帮你省掉的是打字和查文档的时间,省不掉的是架构决策、安全审查、跨平台兼容测试。而且 AI 越是自信的时候,越要小心------它生成的代码往往能编译通过,但隐含的逻辑 bug 要你自己发现。

如果你对 AI 辅助编程感兴趣,或者你在用终端工具时也有类似的痛点,欢迎来 GitHub 看看:github.com/vcqr/ashell

项目 MIT 协议开源,issue、PR、star、闲聊都欢迎。毕竟,一个人 + AI 肝出来的 AI 终端工具,本身就挺有意思的。

相关推荐
可以飞的话1 小时前
一、机器学习概述
人工智能·机器学习
sunneo1 小时前
磐石2.0发布,科学建模新突破
人工智能
煎饼学大模型1 小时前
Agent 的“大脑-手“解耦架构:当推理层和工具执行层各自独立演进
数据库·人工智能·oracle·架构·agent
南京码讯光电技术有限公司2 小时前
2026年4G/5G工业CPE推荐:从极端场景看硬核选型
人工智能
肥胖小羊2 小时前
微信社群自动化管理与防骚扰系统的设计与实现
运维·自动化
企业智能研究3 小时前
企业如何落地企微私域智能客服来降本增效:从技术选型到实施落地的完整指南
大数据·人工智能·企业微信·智能客服
人间凡尔赛3 小时前
2026多智能体系统深度解析:从GPT-5.6 Ultra到开源框架,构建你的Agent军团
ai·agent·多智能体·langgraph·crewai·gpt-5.6
AI办公探索者3 小时前
仓储物流AI任务执行的技术拆解:从WMS自动化到多设备协同的落地路径
运维·人工智能·ai·自动化
delishcomcn3 小时前
边缘计算+AI模型:电化铝分切装备的智能化改造路径
大数据·人工智能·边缘计算