by xichan96
Multi-device terminal server for AI coding agents. Server-side VTE, session persistence, file browser, web preview, plugin system. Self-hosted.
# Add to your Claude Code skills
git clone https://github.com/xichan96/dinottyLast scanned: 6/26/2026
{
"issues": [],
"status": "PASSED",
"scannedAt": "2026-06-26T07:52:01.037Z",
"npmAuditRan": true,
"pipAuditRan": true,
"promptInjectionRan": true
}dinotty is an open-source ai agents skill for AI coding assistants such as Claude Code, Codex CLI, and ChatGPT, built by xichan96. Multi-device terminal server for AI coding agents. Server-side VTE, session persistence, file browser, web preview, plugin system. Self-hosted. It has 230 GitHub stars.
Yes. dinotty passed SkillsLLM's automated security scan — a dependency vulnerability audit plus prompt-injection heuristics — with no high-severity issues. You can read the full report in the Security Report section on this page.
Clone the repository with "git clone https://github.com/xichan96/dinotty" and add it to your Claude Code skills directory (see the Installation section above).
dinotty is primarily written in Rust. It is open-source under xichan96 on GitHub, so you can review or fork the full source.
Yes. SkillsLLM lists many other AI Agents skills you can browse and compare side by side. Open the AI Agents category from the badge at the top of this page, or use the Related Skills and comparison links further down to weigh dinotty against similar tools.
No comments yet. Be the first to share your thoughts!
为 Coding Agent 打造的多端同步终端服务器。在任意设备上运行 Claude Code、opencode、Codex 或 OpenClaw,桌面端专业高效,移动端随时掌控——无缝切换,会话永不丢失。
桌面端同样专业好用,媲美 iTerm2 的终端体验:
分屏 — 可拖拽的多面板分屏,自由调整布局:
插件系统 — JS 插件热重载,内置 CC Switch、JSON Formatter 等:
网页预览 — 手机上也能预览本地开发服务器,内建反向代理,不用切浏览器:
终端 Coding Agent(Claude Code、opencode、Codex、OpenClaw 等)功能强大,但它们被束缚在单一终端窗口里。Dinotty 让你:
| Dinotty | 远程桌面 (VNC/RDP/Parsec) | |
|---|---|---|
| 传输数据 | 纯文本(JSON,字节流) | 全屏像素流,30-60 fps |
| 带宽消耗 | 通常 ~1–10 KB/s | ~1–10 MB/s(多 100–1000 倍) |
| 移动网络友好 | ✅ 3G/4G 下流畅无延迟 | ❌ 卡顿、高延迟、流量消耗大 |
| 弱信号容忍度 | ✅ 自动重连,无画面丢失 | ❌ 画面冻结、输入延迟 |
| 电量消耗 | 低(文本渲染) | 高(视频解码) |
| 分辨率适配 | 任意尺寸下原生文本渲染 | 位图缩放,手机上模糊 |
| 交互方式 | 原生触控 + 自定义键盘 | 模拟鼠标,桌面 UI 在手机上很小 |
| 能力 | Dinotty | ttyd | gotty | Wetty |
|---|---|---|---|---|
| 服务端虚拟终端(VT Screen) | ✅ | ❌ | ❌ | ❌ |
| 会话在断网后存活 | ✅ | ❌ | ❌ | ❌ |
| 刷新页面 = 恢复会话 | ✅ | ❌ | ❌ | ❌ |
| 内建文件浏览器和预览 | ✅ | ❌ | ❌ | ❌ |
| Git 变更指示 | ✅ | ❌ | ❌ | ❌ |
| 内建网页预览(反向代理) | ✅ | ❌ | ❌ | ❌ |
| 可自定义快捷键盘 | ✅ | ❌ | ❌ | ❌ |
| 广播模式 | ✅ | ❌ | ❌ | ❌ |
| 命令收藏 | ✅ | ❌ | ❌ | ❌ |
| 插件系统 | ✅ | ❌ | ❌ | ❌ |
| Token 认证 | ✅ | ✅ | ❌ | ✅ |
其他 Web 终端只是 WebSocket 到 PTY 的透传管道。Dinotty 在服务端运行完整的虚拟终端仿真器,使得会话恢复、屏幕快照成为可能,结合内建文件/网页浏览器,提供自包含的 Coding Agent 工作环境。
| Dinotty | Claude Code Remote | Codex Web | Happy | hapi | Termius | tmux | |
|---|---|---|---|---|---|---|---|
| 定位 | Web 终端服务器 | 内建多端同步 | 云端 Agent | AI Agent 远程客户端 | AI Agent 远程客户端 | SSH 客户端 | 终端复用器 |
| 技术方案 | 服务端 VTE + Web UI | Anthropic 云 + 本地 | OpenAI 云 | CLI 代理包装 | CLI 代理包装 | 原生 App | 服务端进程 |
| Web 访问 | ✅ | ✅ claude.ai/code | ✅ chatgpt.com/codex | ✅ | ✅ PWA | ❌ | ❌ |
| 原生 App | Tauri(可选) | iOS + Android | ❌ | iOS + Android | ❌(PWA) | 全平台 | ❌ |
| 通用终端 | ✅ 任意命令 | ❌ 仅 AI Agent | ❌ 仅 AI Agent | ❌ 仅 AI Agent | ❌ 仅 AI Agent | ✅ SSH | ✅ |
| Coding Agent 适配 | ✅ 文件浏览/预览/通知 | ✅ 内建 | ✅ 内建 | ✅ 语音/审批 | ✅ 语音/工作区 | ❌ | ❌ |
| 分屏 | ✅ 原生拖拽 | ❌ | ❌ | ❌ | ❌ | ❌ | ⚠️ tmux 命令 |
| 广播模式 | ✅ 免费 | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| 命令收藏 | ✅ 免费 | ❌ | ❌ | ❌ | ❌ | 💰 付费 | ❌ |
| 插件系统 | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| 多端同步 | ✅ 浏览器即同步 | ✅ 跨设备会话同步 | ✅ 云端会话 | ✅ | ✅ | ✅ Vault | ❌ 需 SSH |
| 中继服务 | 计划中 | ✅ Anthropic 托管 | ✅ OpenAI 托管 | ✅ | ✅ | SaaS | ❌ |
| 部署方式 | 自托管 | SaaS | SaaS | 中继服务 | 自托管/中继 | SaaS | 自托管 |
| 代码运行位置 | 自有服务器 | 本地 / Anthropic 云 | OpenAI 云 | 本地 | 本地 | 远程 SSH | 远程服务器 |
| 价格 | 🆓 免费开源 | 💰 需 Pro 订阅 | 💰 需 Plus | 中继服务 | 自托管/中继 | 💰 $10/月 | 🆓 但折腾 |
Claude Code 和 Codex 各自提供了内建的远程方案,但仅限于自身 Agent 生态。Happy/hapi 是第三方远程控制层,包装 CLI 实现手机审批和语音交互。Dinotty 是通用 Web 终端服务器,Agent 在服务端原生运行,同时提供文件浏览、网页预览、插件系统等完整工作环境,桌面端和移动端均有专业体验。
前往 GitHub Releases 下载对应平台的安装包:
| 平台 | 格式 | 说明 |
|---|---|---|
| macOS | .dmg |
双击打开,拖入 Applications 即可 |
| Linux | .deb |
sudo dpkg -i dinotty_*.deb |
也可以从源码构建,见下方「快速开始」。
macOS 注意事项:由于应用未签名,macOS 可能会提示 "Dinotty" is damaged and can't be opened。安装后请在终端执行以下命令解除限制:
xattr -cr /Applications/Dinotty.app
Linux 一键下载安装:
curl -LO https://github.com/xichan96/dinotty/releases/download/v0.11.2/dinotty-server_0.11.2-1_amd64.deb && sudo dpkg -i dinotty-server_0.11.2-1_amd64.deb
Linux 启动方式:
# systemd
systemctl start dinotty-server
systemctl enable dinotty-server # 开机自启
# Docker 容器
nohup dinotty-server &
默认监听端口 8999,启动后访问 http://<your-ip>:8999。可通过 -p 参数指定端口:
dinotty-server -p 3000
# 构建前端
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 |
Rust 编写 · 单二进制 · 零依赖部署 — 服务端跑完整 VT 状态机,不是管道转发,断线会话不丢失。
src/ # Rust 后端
main.rs # Axum 路由与服务入口
lib.rs # 库入口
ws.rs # WebSocket ↔ PTY 桥接
vt_screen.rs # 虚拟终端仿真器(基于 VTE)
session.rs # 会话管理器(多面板)
pty.rs # PTY 创建与管理
tabs.rs # Tab 与 Pane 管理
history.rs # 会话历史记录
workspace/ # 文件工作区 API
proxy/ # 反向代理(预览)
monitor.rs # 系统监控
notification.rs # 通知广播(bell/OSC 检测)
plugin/ # 插件系统管理
settings.rs # 设置持久化
auth.rs # 身份认证
file_watcher.rs # 文件变更监听
frontend/ # Vue 3 SPA
src/
App.vue
components/
split/ # SplitContainer, TabBar, PaneHeader, StatusBar
terminal/ # TerminalPane, MonitorPopover
command/ # CommandPalette, CommandBookmarks
keyboard/ # MobileKeyboard, HistoryPanel, SuggestionBar
notification/ # NotificationPanel, NotificationCard
preview/ # FileWorkspacePreview, PreviewPanel, WebPreview
settings/ # 各设置 Tab(General, Theme, Keyboard 等)
workspace/ # MonacoEditor, FilePreviewContent, gitDecorations
plugin/ # PluginView
ui/ # ConfirmModal 等通用组件
ServerList.vue # 服务器列表
composables/ # useTerminal, useTransport, useSettings, useTabApi 等
src-tauri/ # Tauri 桌面客户端
docs/ # 设计文档
通过 /ws 传输的 JSON 消息:
| 方向 | type |
字段 |
|---|---|---|
| 客户端 → 服务端 | input |
data: String |
| 客户端 → 服务端 | resize |
cols: u16, rows: u16 |
| 服务端 → 客户端 | output |
data: String |
| 服务端 → 客户端 | shell_info |
shell_type: String |
感谢所有为 Dinotty 做出贡献的人!
MIT