MCPcopy Index your code
hub / github.com/QingJ01/Clyde

github.com/QingJ01/Clyde @v0.1.6

Chat with this repo
repository ↗ · DeepWiki ↗ · release v0.1.6 ↗ · + Follow
459 symbols 1,204 edges 38 files 55 documented · 12%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

Clyde

Clyde 桌宠

轻量级 AI 编程桌宠,实时映射助手工作状态

English

version Tauri v2 Svelte 5 Rust platforms

Clyde 是一只住在桌面上的宠物,能实时感知 AI 编程助手在做什么:提问时思考,跑工具时打字,子代理工作时杂耍,弹卡片审批权限,任务完成时庆祝,你离开时睡觉。

支持 Claude CodeCodex CLICopilot CLI,三者可同时运行。

快速开始

git clone https://github.com/QingJ01/Clyde.git
cd Clyde
npm install
npm start        # Tauri 开发模式,前端热更新

前置条件Node.js v18+、Rust stable、平台相关 Tauri 依赖

Agent 配置 — 全部零配置: - Claude Code — 启动时自动注册 command hook + HTTP 权限 hook - Codex CLI — 自动轮询 ~/.codex/sessions/ 日志 - Copilot CLI — 检测到 ~/.copilot 时自动配置

功能

动画

12 种动画状态,由实时 Agent 事件驱动:

Agent 事件 Clyde 的反应 预览
空闲 眼球跟随鼠标,身体微倾
提交提示词 思考
工具执行中 打字
3+ 个会话活跃 建造
1 个子代理 杂耍
2+ 个子代理 指挥
工具执行失败 报错闪烁
任务完成 开心弹跳
通知 惊跳
上下文压缩 扫地
创建 Worktree 搬箱子
60 秒无活动 打哈欠 → 打盹 → 倒下 → 睡觉

交互

  • 拖拽 — 任何状态下都能拖动,Pointer Capture 防止快甩丢失
  • 双击 戳一下,连点 4 下 东张西望
  • 右键菜单 — 会话列表、免打扰、极简模式、大小、语言
  • 系统托盘 — 调大小 (S/M/L)、免打扰、极简模式、语言、自动启动、退出

极简模式

拖到左/右屏幕边缘(或右键"极简模式"),Clyde 藏到边缘只露半身,悬停时探头,收起状态下仍能显示迷你通知和庆祝动画。

权限审批气泡

Claude Code 请求工具权限时,Clyde 在宠物旁弹出浮动卡片 — 允许、拒绝或选择建议规则(如"始终允许 Read")。多个请求从宠物位置向上堆叠。如果你先在终端回答了,气泡自动消失。

Clyde 还会实时跟踪 Claude 的权限模式。当模式切换时(如通过 /permissions 切换到"自动编辑"),宠物旁会弹出短暂通知:

模式 含义
正常审批 工具调用需要你的批准
自动编辑 编辑操作自动通过,其他工具仍可能需要审批
跳过审批 不会再弹出权限审批气泡
仅规划 不执行工具,只做规划

会话智能

  • 多会话优先级 — 所有会话中最高优先级的状态胜出
  • 子代理感知 — 1 个子代理杂耍,2 个以上指挥
  • 终端聚焦 — 右键某个会话可直接跳转到对应终端
  • 自动清理 — 10 分钟无更新删除会话,5 分钟无更新降级工作状态
  • 免打扰 — 静默所有事件,右键或托盘切换

项目结构

src-tauri/src/           Rust 后端
├── lib.rs               应用入口 + Tauri 命令
├── state_machine.rs     多会话状态追踪 + 优先级
├── http_server.rs       Axum HTTP (POST /state, /permission)
├── hooks.rs             Hook 部署 + settings.json 注册
├── permission.rs        权限气泡窗口
├── mini.rs              边缘吸附、探头、抛物线跳跃
├── tick.rs              50ms 光标轮询(眼球、睡眠、探头)
├── tray.rs              系统托盘菜单
├── windows.rs           窗口边界 + 命中测试
├── focus.rs             按 PID 聚焦终端 (Win/Mac/Linux)
├── codex_monitor.rs     Codex JSONL 日志轮询
├── prefs.rs             偏好持久化
└── i18n.rs              中英文字符串

src/windows/             Svelte 5 前端(3 个窗口)
├── pet/                 SVG 渲染器
├── hit/                 不可见点击层
└── bubble/              权限审批卡片

hooks/                   JS hook 脚本(编译时嵌入)
├── clyde-hook.js        Claude Code 命令 hook
├── server-config.js     端口发现
├── auto-start.js        SessionStart 自动拉起
├── copilot-hook.js      Copilot CLI hook
└── install.js           手动 hook 注册 CLI

assets/svg/              35 个动画帧

技术栈

技术 为什么选它
桌面框架 Tauri v2 打包体积 ~5 MB(Electron 动辄 150 MB+);原生系统 API(透明窗口、托盘、全局快捷键);Rust 后端直接调用,零 IPC 序列化开销
后端语言 Rust 无 GC、零成本抽象;50 ms 定时器 + 多会话状态机跑在单进程里,CPU 占用趋近于零;Mutex + Arc 天然线程安全
前端框架 Svelte 5 编译时生成极小运行时(无虚拟 DOM),三个窗口 JS 合计 < 30 KB;$state / $props 响应式模型让 SVG 渲染逻辑极简
HTTP 服务 Axum 构建在 Tokio 上的异步 Web 框架;类型安全路由 + 提取器;与 Tauri 共享同一 Tokio 运行时,无额外线程池
构建工具 Vite 开发时毫秒级热更新;生产构建 Tree-shaking 极致精简

组合优势: Rust 处理所有状态逻辑和系统交互,Svelte 只做最薄的渲染层,Tauri 把两者粘合成一个 < 10 MB 的跨平台桌面应用。整个架构没有任何运行时解释器(Node.js、Python 等),冷启动 < 1 秒,常驻内存 < 30 MB。

已知限制

限制 说明
Codex: 无终端聚焦 JSONL 轮询不携带终端 PID
Copilot: 无权限气泡 Copilot hook 协议仅支持拒绝
HTTP 服务无认证 仅绑定 127.0.0.1;计划添加 token 认证
无自动更新 请从 GitHub Releases 下载新版本

故障排除

macOS: 提示"应用已损坏,无法打开"

这是 macOS Gatekeeper 拦截未签名应用,并非真的损坏。修复方法:

xattr -cr "/Applications/Clyde on Desk.app"
codesign --force --deep --sign - "/Applications/Clyde on Desk.app"

第一条命令清除隔离标记,第二条添加本地临时签名(Apple Silicon 必需)。

权限气泡不弹出

如果 Claude Code 请求工具权限时 Clyde 没有弹出审批卡片:

  1. 在 Claude Code 中运行 /hooks,检查 PermissionRequest 是否有 [http] hook
  2. 如果缺失或格式错误,重启 Clyde — 启动时会自动重新注册 hooks
  3. 如果仍有问题,手动运行 node hooks/install.js
  4. 最后手段:删除 ~/.claude/settings.json 中的 PermissionRequest 条目,重启 Clyde

~/.claude/settings.json 中正确的格式应为:

"PermissionRequest": [
  {
    "matcher": "",
    "hooks": [
      { "type": "http", "url": "http://127.0.0.1:23333/permission", "timeout": 600 }
    ]
  }
]

权限气泡仅在 Claude Code 触发 PermissionRequest 事件的工具调用时出现。

贡献

欢迎 Issue、建议和 PR — 提交 Issue 或直接提 PR。

npm test             # cargo test(19 个单元测试)

贡献者

QingJ01 核心贡献者 rullerzhou-afk 原项目作者 PixelCookie-zyf 项目初始贡献者 yujiachen-y 项目初始贡献者 AooooooZzzz 项目初始贡献者 purefkh 项目初始贡献者
Tobeabellwether 项目初始贡献者 Jasonhonghh 项目初始贡献者 crashchen 项目初始贡献者 hongbigtou 项目初始贡献者 InTimmyDate 项目初始贡献者 NeizhiTouhu 项目初始贡献者

致谢

许可证

AGPL-3.0

Extension points exported contracts — how you extend this code

MutexExt (Interface)
Extension trait for Mutex that recovers from poisoning instead of panicking. If a thread panicked while holding the lock [1 …
src-tauri/src/util.rs

Core symbols most depended-on inside this repo

lock_or_recover
called by 121
src-tauri/src/util.rs
t
called by 34
src-tauri/src/i18n.rs
get_pet_bounds
called by 20
src-tauri/src/windows.rs
save
called by 19
src-tauri/src/prefs.rs
sync_hit
called by 18
src-tauri/src/lib.rs
rebuild_current_menu
called by 11
src-tauri/src/tray.rs
emit_state
called by 11
src-tauri/src/lib.rs
monitor_for_bounds
called by 11
src-tauri/src/windows.rs

Shape

Function 385
Class 39
Method 25
Enum 9
Interface 1

Languages

Rust90%
TypeScript10%

Modules by API surface

src-tauri/src/lib.rs83 symbols
src-tauri/src/http_server.rs47 symbols
src-tauri/src/windows.rs46 symbols
src-tauri/src/state_machine.rs28 symbols
src-tauri/src/session_meta.rs25 symbols
src-tauri/src/permission.rs25 symbols
src-tauri/src/mini.rs24 symbols
hooks/server-config.js20 symbols
src-tauri/src/prefs.rs18 symbols
src-tauri/src/hooks.rs18 symbols
src-tauri/src/update_check.rs16 symbols
src-tauri/src/permission_mode.rs16 symbols

For agents

$ claude mcp add Clyde \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page