English | 中文
为 Coding Agent 打造的移动优先终端服务器。在手机上运行 Claude Code、opencode、Codex 或 OpenClaw,获得与电脑上完全一致的体验——利用碎片时间,随时随地编程。
终端 Coding Agent(Claude Code、opencode、Codex、OpenClaw 等)功能强大,但它们被束缚在桌面上。Dinotty 让你:
- 在手机上启动编程任务——排队、通勤时掏出手机就能让 agent 干活
- 随时查看长时间运行的 agent——不用打开笔记本电脑
- 直接在手机上验证 agent 产出——代码 diff、渲染的网页、生成的文件,浏览器里一目了然
- 永远不会丢失会话——手机息屏、切换 App、断网——回来后一切都在原处
| Dinotty | 远程桌面 (VNC/RDP/Parsec) | |
|---|---|---|
| 传输数据 | 纯文本(JSON,字节流) | 全屏像素流,30-60 fps |
| 带宽消耗 | 通常 ~1–10 KB/s | ~1–10 MB/s(多 100–1000 倍) |
| 移动网络友好 | ✅ 3G/4G 下流畅无延迟 | ❌ 卡顿、高延迟、流量消耗大 |
| 弱信号容忍度 | ✅ 自动重连,无画面丢失 | ❌ 画面冻结、输入延迟 |
| 电量消耗 | 低(文本渲染) | 高(视频解码) |
| 分辨率适配 | 任意尺寸下原生文本渲染 | 位图缩放,手机上模糊 |
| 交互方式 | 原生触控 + 自定义键盘 | 模拟鼠标,桌面 UI 在手机上很小 |
- 服务端虚拟终端 — 完整 VTE 解析,服务端掌握精确屏幕状态,支持会话恢复与屏幕快照
- 会话持久化 — PTY 进程在断网后存活,自动重连 + 指数退避,刷新页面即可恢复
- 响应式布局 — 竖屏上下排列,横屏左右并排;触控优化的按钮与面板缩放
- 可自定义快捷键盘 — 为手机补齐 Ctrl/Esc/功能键,支持任意转义序列
- 内建文件浏览器 — 代码高亮、Markdown 渲染、Office 文档预览、音视频播放
- Git 变更指示 — 编辑器 gutter 增/改/删标记,inline diff,Stage/Revert
- 网页预览 — 内建反向代理,在 iframe 中预览本地开发服务器
- 通知系统 — 终端 bell/OSC 检测,WebSocket 推送,可配置声音提醒
- 系统监控 — 实时 CPU/内存/网络图表
- 插件系统 — JS 插件 + CLI 桥接,热重载,内置 CC Switch、JSON Formatter 等
- Open API — HTTP 端点,支持 Stream Deck、快捷指令等外部设备控制
- 命令面板 — 快速访问命令启动器
- 桌面应用 — 可选 Tauri 原生客户端
| 能力 | Dinotty | ttyd | gotty | Wetty |
|---|---|---|---|---|
| 服务端虚拟终端(VT Screen) | ✅ | ❌ | ❌ | ❌ |
| 会话在断网后存活 | ✅ | ❌ | ❌ | ❌ |
| 刷新页面 = 恢复会话 | ✅ | ❌ | ❌ | ❌ |
| 内建文件浏览器和预览 | ✅ | ❌ | ❌ | ❌ |
| Git 变更指示 | ✅ | ❌ | ❌ | ❌ |
| 内建网页预览(反向代理) | ✅ | ❌ | ❌ | ❌ |
| 可自定义快捷键盘 | ✅ | ❌ | ❌ | ❌ |
| 插件系统 | ✅ | ❌ | ❌ | ❌ |
| Token 认证 | ✅ | ✅ | ❌ | ✅ |
其他 Web 终端只是 WebSocket 到 PTY 的透传管道。Dinotty 在服务端运行完整的虚拟终端仿真器,使得会话恢复、屏幕快照成为可能,结合内建文件/网页浏览器,提供自包含的 Coding Agent 工作环境。
# 构建前端
cd frontend && pnpm install && pnpm run build && cd ..
# 运行服务器
cargo run在浏览器中打开 http://127.0.0.1:8999 。
# 带调试日志运行
RUST_LOG=debug cargo run
# 前端类型检查
cd frontend && npx vue-tsc --noEmit| 层级 | 技术 |
|---|---|
| 后端 | Rust, Axum 0.7, Tokio, portable-pty, vte |
| 前端 | Vue 3, TypeScript, Vite, xterm.js 5 |
| 桌面端 | Tauri |
src/ # Rust 后端
main.rs # Axum 路由与服务入口
ws.rs # WebSocket ↔ PTY 桥接
vt_screen.rs # 虚拟终端仿真器(基于 VTE)
session.rs # 会话管理器(多面板)
workspace.rs # 文件工作区 API
proxy.rs # 反向代理(预览)
monitor.rs # 系统监控
notification.rs # 通知广播(bell/OSC 检测)
plugin.rs # 插件系统管理
settings.rs # 设置持久化
auth.rs # 身份认证
file_watcher.rs # 文件变更监听
frontend/ # Vue 3 SPA
src/
App.vue
components/ # TabBar, TerminalPane, MobileKeyboard 等
composables/ # useTerminal, useTransport, useSettings 等
src-tauri/ # Tauri 桌面客户端
docs/ # 设计文档
通过 /ws 传输的 JSON 消息:
| 方向 | type |
字段 |
|---|---|---|
| 客户端 → 服务端 | input |
data: String |
| 客户端 → 服务端 | resize |
cols: u16, rows: u16 |
| 服务端 → 客户端 | output |
data: String |
| 服务端 → 客户端 | shell_info |
shell_type: String |
- 部署指南 — systemd、Docker、跨平台构建、配置说明
- 通知系统 — HTTP API、Claude Code 集成、Open API
- 插件系统 — 安装、清单、API、内置插件
- 插件开发 — 完整的插件开发文档
- 贡献指南 — 分支策略、Commit 规范、代码风格
感谢所有为 Dinotty 做出贡献的人!
MIT







