大家好。
不知道你们平时写代码的时候有没有这种感觉:现在的 AI 编程助手确实好用,但用起来总觉得太费劲了。 要么是得在 IDE 侧边栏和代码区来回切换视线,要么是遇到不属于特定项目的问题时,还得专门切到浏览器去问 ChatGPT 或者 Claude。
作为一个极简主义(懒)开发者,我总在想:要是这个 AI 能像当年电脑桌面的"QQ 宠物"一样,直接实体化在我屏幕上溜达,随叫随到,那该多酷?
带着这个脑洞,趁着假期,我撸了一个开源的桌面宠物应用 ------ CodeWalkers。
🐶 这是个啥玩意?
简单来说,这是一个基于 Tauri V2 构建的跨平台透明桌面应用。

它会在你的屏幕上生成几个像素风的小人。这些小人不仅会漫无目的地在你的代码窗口、浏览器上方散步,更重要的是,它们自带"AI 大脑"。
当你遇到问题时,直接点击小人,它就会原地弹出一个终端面板。 目前我已经帮这些小人接入了真实的后端大脑:GitHub Copilot CLI 和 Gemini CLI。你可以直接在弹出的面板里问它怎么写正则、怎么配 Nginx,甚至让它解释某段代码的意思。
不仅如此,当它在思考(调用大模型 API)时,头上还会冒出和游戏里一样的"思考气泡",把原本终端里枯燥的 Loading spinner 变成了可视化的宠物互动。
🛠️ 怎么做到的?(稍微聊点技术)
为了实现这个看起来有点"沙雕"但又很酷的功能,我用了 Tauri v2 + React + TypeScript 的技术栈。
别看它就是个在屏幕上走来走去的小人,开发过程中其实踩了好几个巨坑,如果你也对 Tauri 开发桌面端感兴趣,可以避避坑:
1. 幽灵般的鼠标点击:透明窗口的穿透问题
想做桌面宠物,首先要把应用窗口设为全局透明(transparent: true),并且去掉系统的阴影和边框。 但这带来了一个问题:你怎么让鼠标能点到小人,但又不会挡住小人背后的代码编辑器? Tauri 虽然提供了 set_ignore_cursor_events API 来控制鼠标穿透,但在 macOS 上,如果你开了透明窗口,点击完全透明的像素区域(alpha=0)时,系统会自动把点击事件透传给下层的桌面应用。 我的解法 :我用 React 的 requestAnimationFrame 配合像素级 hit-test,同时给透明的包裹层加上了极其微弱的背景色(rgba(255,255,255,0.01)),骗过 macOS 系统的判定,实现了完美的"指哪打哪"。
2. 把真实的 CLI 装进小人脑子里:PTY 与环境变量
我想让小人真正"干活",而不是只做一个聊天框,所以我在 Rust 后端接管了 std::process::Command。 为了让 Copilot 这种要求强交互的 CLI 工具跑起来,需要处理复杂的标准输出(stdout)和标准错误(stderr)分离。我通过流式解析,把原本 CLI 吐出来的 ANSI 控制码、进度条字符(比如 ⠋ 这种)全部劫持下来,实时转换成了前端小人头顶的对话框气泡。 另外,为了防止环境变量污染,我还做了一套 .codewalkers.env 的动态注入机制,让你能在本地安全地喂给它各种 Token。
3. 高帧率动画不卡顿
很多用 Electron 或者 Tauri 做的悬浮窗,一旦涉及到动画就会吃 CPU。 在这个项目里,我没有把小人的坐标位置(x, y)放进 React 的 State 里(因为那会导致疯狂的重渲染),而是直接通过 ref 操作 DOM 的 transform 属性,配合 RAF(RequestAnimationFrame),硬生生把一个 Web 动画跑出了原生 60 帧的顺滑感。
🎨 换肤与自定义
考虑到大家对纸片人的喜好不同,CodeWalkers 完全支持自定义皮肤。 你只需要把喜欢的 GIF 动图拖进项目的对应目录,配置一下精灵图(Sprite)参数,就能把初音未来、马里奥或者你自己画的像素小人养在桌面上。
目前项目已经跑通了从拖拽移动、点击交互到终端对话的完整闭环。
🚀 开源与共建
目前 CodeWalkers 已经完全开源,代码干干净净,没有乱七八糟的冗余依赖,CI/CD 和测试覆盖率我也已经全配好了。
GitHub 仓库地址 :github.com/you-want/Co...
如果你:
- 觉得这个点子挺好玩
- 想要一个专属的 AI 桌面小助手
- 想学习 Tauri V2 的实战开发(特别是透明窗口、多进程通信和 PTY 交互)
欢迎去点个 Star 支持一下!🌟
也极其欢迎大家提 PR ------ 无论是增加新的小人皮肤,还是接入更多大模型的 CLI(比如 Claude、Ollama 甚至本地跑的 DeepSeek),我都举双手赞成。
告别枯燥的终端框,让我们的屏幕上多一点赛博生机吧!