返回项目目录
xichan96

xichan96

dinotty

Multi-device terminal server for AI coding agents. Server-side VTE, session persistence, file browser, web preview, plugin system. Self-hosted.

SkillAgentAI 编程ai-codingaxumclaude-codecodexcoding-agentmobile-coding
Stars
535
Forks
57
Watchers
535
Issues
17

README

项目介绍

13913 bytes

Dinotty Logo

Dinotty

License Rust Vue 3 Docs GitHub Stars GitHub Downloads GitHub Issues

中文 | English | Русский | Português | 한국어 | Español | Deutsch | Français


为 Coding Agent 场景打造的终端。

在任意设备上运行 Claude Code、opencode、Codex 或 OpenClaw -- 简洁、可拓展、多端同步,会话永不丢失。

手机 · iPad · 桌面,一个会话

电脑上写到一半,掏出手机继续,回到桌面一切原样。断网不丢,刷新即回。

一切皆 pane,像搭积木一样

终端、插件、文件、SSH、网页预览 —— 每个面板都是一块积木,拖拽拼装出你的专属工作台。

截图

手机上运行 Claude Code 完整键盘布局与 htop 主题设置

快捷键盘自定义 系统监控 通知系统

平板横屏桌面级布局

桌面端演示

桌面端同样专业好用,媲美 iTerm2 的终端体验:

分屏广播 — 可拖拽的多面板分屏,一个 pane 输入,多个 pane 同步执行:

分屏广播演示

命令收藏 — 右键终端文本直接收藏,分组管理,一键执行:

命令收藏演示

SSH 连接与文件浏览器 — 内建 SSH 客户端,远程会话与本地体验一致,SFTP 文件管理全覆盖:

SSH 连接与文件浏览器演示

工作区管理与 Mission Control — 多工作区隔离,Mission Control 概览,快速切换:

工作区管理演示

插件系统 — JS 插件热重载,内置 CC Switch、JSON Formatter 等:

插件系统演示

统一布局系统 - 终端、插件、文件浏览器、网页预览皆为 pane,可拖拽分屏、跨 Tab 移动、提取为新 Tab:

统一布局系统演示

理念

终端 Coding Agent —— Claude Code、opencode、Codex、OpenClaw —— 功能强大,却总被束缚在单一窗口里。Dinotty 把它解放出来。一个终端,所有设备,所有可能。

多端同步

电脑上写到一半,掏出手机继续。回到电脑,一切原样。

拓展无界

JS 插件热重载。CC Switch、JSON Formatter、Claude Code 对话管理开箱即用。自定义命令、终端交互、事件订阅、CLI 集成 —— API 皆已就位。

一切皆 pane

终端、文件、网页预览、Git 变更、SSH 远程。拖拽分屏,跨 Tab 移动,浑然一体。

永不掉线

服务端 VTE,PTY 断网存活。刷新页面,回到原处。

自由开源

自托管。无订阅。无中继。数据,始终在你手中。

轻量级——不是远程桌面

Dinotty 远程桌面 (VNC/RDP/Parsec)
传输数据 纯文本(JSON,字节流) 全屏像素流,30-60 fps
带宽消耗 通常 ~1–10 KB/s ~1–10 MB/s(多 100–1000 倍)
移动网络友好 ✅ 3G/4G 下流畅无延迟 ❌ 卡顿、高延迟、流量消耗大
弱信号容忍度 ✅ 自动重连,无画面丢失 ❌ 画面冻结、输入延迟
电量消耗 低(文本渲染) 高(视频解码)
分辨率适配 任意尺寸下原生文本渲染 位图缩放,手机上模糊
交互方式 原生触控 + 自定义键盘 模拟鼠标,桌面 UI 在手机上很小

核心特性

  • 服务端虚拟终端 — 完整 VTE 解析,服务端掌握精确屏幕状态,支持会话恢复与屏幕快照
  • 会话持久化 — PTY 进程在断网后存活,自动重连 + 指数退避,刷新页面即可恢复
  • 分屏与多 Tab — 可拖拽分屏、多 Tab 管理,服务端主导的 Pane 生命周期
  • 工作区管理 — 多工作区隔离,Mission Control 概览,工作区级插件 Tab
  • 广播模式 — 一个 pane 输入,多个 pane 同步执行,免费
  • 命令收藏 — 右键终端文本直接收藏,分组管理,一键执行
  • SSH 远程连接 — 内建 SSH 客户端,支持密码/密钥认证,远程会话与本地体验一致
  • 远程文件管理(SFTP) — SSH 连接下自动启用 SFTP,文件浏览、编辑、上传、下载全覆盖
  • 服务器列表 — 管理多台远程服务器,快速切换连接
  • 响应式布局 — 竖屏上下排列,横屏左右并排;触控优化的按钮与面板缩放
  • 可自定义快捷键盘 — 为手机补齐 Ctrl/Esc/功能键,支持任意转义序列
  • 内建文件浏览器 — 代码高亮、Markdown 渲染、Office 文档预览、音视频播放
  • Git 变更指示 — 编辑器 gutter 增/改/删标记,inline diff,Stage/Revert
  • 网页预览 — 内建反向代理,在 iframe 中预览本地开发服务器
  • 通知系统 — 终端 bell/OSC 检测,WebSocket 推送,可配置声音提醒
  • 系统监控 — 实时 CPU/内存/网络图表
  • 插件系统 — JS 插件 + CLI 桥接,热重载,内置 CC Switch、JSON Formatter、Claude Code 对话管理等
  • Open API — HTTP 端点,支持 Stream Deck、快捷指令等外部设备控制
  • 命令面板 — 快速访问命令启动器
  • 桌面应用 — 可选 Tauri 原生客户端

差异化亮点

  • 服务端虚拟终端 - 不是 WebSocket-to-PTY 透传,PTY 在断网后存活,刷新页面即恢复会话
  • 多端同步 - 浏览器即同步,桌面深度编码、移动随时接管
  • 轻量纯文本传输 - ~1-10 KB/s,3G/4G 流畅,远胜远程桌面 100-1000 倍带宽
  • 自包含工作环境 - 内建文件浏览、网页预览、Git 变更、SSH/SFTP、插件系统
  • 免费开源 - 自托管,无订阅无中继

完整方案对比见 方案对比

安装

前往 GitHub Releases 下载对应平台的安装包或二进制:

平台 格式 说明
macOS .dmg 双击打开,拖入 Applications 即可
Linux .deb sudo dpkg -i dinotty_*.deb
Windows .exe / 源码构建 在 PowerShell 中运行 dinotty-server.exe,也可从源码构建

也可以从源码构建,见下方「快速开始」。

macOS 注意事项:由于应用未签名,macOS 可能会提示 "Dinotty" is damaged and can't be opened。安装后请在终端执行以下命令解除限制:

xattr -cr /Applications/Dinotty.app

Linux 一键下载安装

VERSION=$(curl -s https://api.github.com/repos/xichan96/dinotty/releases/latest | sed -n 's/.*"tag_name": *"\([^"]*\)".*/\1/p' | sed 's/^v//') && curl -LO "https://github.com/xichan96/dinotty/releases/download/v${VERSION}/dinotty-server_${VERSION}-1_amd64.deb" && sudo dpkg -i "dinotty-server_${VERSION}-1_amd64.deb"

Linux 启动方式

# systemd
systemctl start dinotty
systemctl enable dinotty  # 开机自启

# Docker 容器
nohup dinotty-server &

Windows 启动方式

# PowerShell
.\dinotty-server.exe -p 8999

# 可选:指定默认 shell(优先级高于自动检测)
$env:DINOTTY_SHELL = "pwsh.exe"
.\dinotty-server.exe

Windows 默认 shell 检测顺序为 DINOTTY_SHELLpwsh.exepowershell.exe%ComSpec% / cmd.exe

默认监听端口 8999,启动后访问 http://<your-ip>:8999。可通过 -p 参数指定端口:

dinotty-server -p 3000

快速开始

# 克隆仓库(推荐 shallow clone,体积小速度快)
git clone --depth 1 --single-branch -b dev [email protected]:xichan96/dinotty.git
cd dinotty

# 构建前端
cd frontend && pnpm install && pnpm run build && cd ..

# 运行服务器
cargo run

Windows PowerShell 下可使用等价的分步命令:

git clone --depth 1 --single-branch -b dev [email protected]:xichan96/dinotty.git
cd dinotty
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
# Windows PowerShell 带调试日志运行
$env:RUST_LOG = "debug"
cargo run

验证码登录

除默认的「令牌登录」外,dinotty 支持「验证码登录」作为互斥替代选项:在「安全与访问」设置中选择后,远程用户登录时由后端生成 6 位验证码并通过消息通知插件(如 feishu-notify)推送到你本人,登录页输入验证码即可建会话。验证码 5 分钟有效、一次性消费、5 次错误后失效。这种方式不依赖静态 token,可降低 token 被 XSS / 截图 / 设备被盗 / 社工后的风险。

启用前需先安装一个消息通知类插件并保持对 auth.verification_code 事件的订阅,否则切换选项会置灰。login_method=verification_code 时卸载当前订阅了该事件的插件会被后端 409 拒绝,防止误操作导致远程无法登录。

紧急恢复

如果验证码登录被卡住(通知插件被卸载、订阅丢失、邮件/IM 收不到消息),可在服务端主机上编辑 ~/.dinotty/settings.json(Windows 下为 %APPDATA%\dinotty\settings.json),将 auth.login_method 改回 "token",然后重启 dinotty 服务即可恢复令牌登录。该路径只对服务端主机本机用户可写,远程登录用户无权修改。

技术栈

层级 技术
后端 Rust, Axum 0.7, Tokio, portable-pty, vte, russh, russh-sftp
前端 Vue 3, TypeScript, Vite, xterm.js 5
桌面端 Tauri

Rust 编写 · 单二进制 · 零依赖部署 — 服务端跑完整 VT 状态机,不是管道转发,断线会话不丢失。

更多文档

  • 方案对比 — 与 ttyd/gotty/Wetty 及其他 AI Coding 远程方案的差异
  • 部署指南 — systemd、Docker、Windows 原生运行、跨平台构建、配置说明
  • 发布指南 — 统一版本管理、版本 PR、devmain 晋升、Tag 与 GitHub Release
  • 文件编辑器 — 分屏、多光标编辑、Cursor Group 跨文件同步
  • 通知系统 — HTTP API、Claude Code 集成、Open API
  • 插件系统 — 安装、清单、API、内置插件
  • 插件开发 — 完整的插件开发文档
  • Agent API — HTTP/WebSocket 结构化交互,供 AI Agent 与自动化脚本调用
  • 主机剪贴板 API — 移动端主机粘贴使用的敏感认证接口
  • MCP Server — 内置 MCP JSON-RPC 服务器,AI 助手直接操作终端会话
  • Token 权限系统 — 基于 Capability 的多 Token 细粒度访问控制
  • Event Bus — 全局事件总线,模块间事件分发
  • 审计日志与 Webhook — API 使用追踪与外部通知
  • 贡献指南 — 分支策略、Commit 规范、代码风格

贡献者

感谢所有为 Dinotty 做出贡献的人!

加入 QQ 群

QQ 群

Star History

Star History

许可证

MIT