开源了,一个人 + AI 肝出一个 AI 终端 | AShell 技术分享 背景事情是这样的我日常工作是全栈开发前端 Vue/TS、后端 Node顺便管着几十台服务器。Rust 只算入门水平没写过桌面应用也没碰过 SSH 协议实现——但用 AI 辅助编程从零肝出了一个开源 AI 终端工具。项目叫 AShellMIT 协议开源跨平台终端 / 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 上下文和窗口透明度的交互有 bugWindows 上 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 辅助开发流程需求拆解把功能拆成足够小的原子任务每个任务一句话能说清楚先给上下文把相关的文件路径、数据结构、现有代码片段喂给 AI让它理解当前项目状态生成 ReviewAI 出代码我逐行 review重点关注边界条件、错误处理、安全问题编译即反馈Rust 的编译器是很好的安全网类型系统能拦住大部分 AI 的幻觉输出遇到 AI 搞不定的果断停下来自己翻文档、读源码、写最小复现而不是让 AI 反复猜核心原则是AI 是加速器不是自动驾驶。它能把 80% 的体力活干了但剩下 20% 的架构决策、安全设计、跨平台兼容、性能优化必须自己把控。产品亮点聊聊几个有意思的设计通信架构三进程模型AShell 运行时是三个进程在协作Tauri Rust 进程桌面壳 本地 API 服务axum127.0.0.1:0随机端口 随机 Bearer TokenVue 前端进程WebView 中运行通过 REST/WebSocket 与 Rust 后端通信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.keyUnix 权限 0600。模型层做了#[serde(skip_serializing)]REST API 出参永不泄露密文。其他一些细节终端进度条识别自动解析 cargo build / brew install / wget 等命令的文本进度同步到任务栏命令输入建议Trie 树前缀匹配 历史关键字搜索节点随历史淘汰SFTP 在线编辑内置 CodeMirror支持查找替换、字号调节权限列三段着色属主/属组/其他独立着色一眼看出权限问题跨平台 6 目标macOS x2、Windows x2、Linux x2CI 矩阵自动构建技术栈一览桌面框架Tauri 2Rust 系统 WebView前端Vue 3 TypeScript Naive UI xterm.jsWebGL 渲染后端Rust axum 0.8 tokio russh SQLite/sqlxAIsidecar-ccClaude sidecar-piPi coding agentBun 编译独立进程安全AES-256-GCM 凭证加密 本地随机 Token 鉴权CI/CDGitHub Actions6 平台矩阵tag 推送自动发布 Release写在最后这个项目是我的一次实验一个人 AI能不能从零肝出一个完整的桌面应用答案是能但过程比想象中曲折。AI 帮你省掉的是打字和查文档的时间省不掉的是架构决策、安全审查、跨平台兼容测试。而且 AI 越是自信的时候越要小心——它生成的代码往往能编译通过但隐含的逻辑 bug 要你自己发现。如果你对 AI 辅助编程感兴趣或者你在用终端工具时也有类似的痛点欢迎来 GitHub 看看github.com/vcqr/ashell项目 MIT 协议开源issue、PR、star、闲聊都欢迎。毕竟一个人 AI 肝出来的 AI 终端工具本身就挺有意思的。