面向 VibeCoding 的鼠标侧键语音输入工具。
English README: README.md
AI 适配指南:
- English:
docs/AI_ASSISTANT_DEPLOYMENT.md - 中文:
docs/AI_ASSISTANT_DEPLOYMENT.zh-CN.md - AI 调试 Runbook:
docs/AI_DEBUG_RUNBOOK.md
VibeMouse 把高频语音工作流绑定到鼠标侧键:
- 前侧键:开始 / 结束录音
- 空闲态按后侧键:发送 Enter
- 录音态按后侧键:停止录音并把转写发送到 OpenClaw
核心目标是低摩擦、可日常稳定使用,并且每个环节失败时都有回退路径。
整体是事件驱动,按职责拆分:
vibemouse/main.py- CLI 入口(
run/doctor)
- CLI 入口(
vibemouse/app.py- 编排按钮事件、录音状态、转写线程和输出路由
vibemouse/mouse_listener.py- 监听侧键与手势(优先
evdev,含回退)
- 监听侧键与手势(优先
vibemouse/audio.py- 录音并写入临时 WAV
vibemouse/transcriber.py- SenseVoice 后端选择与识别
vibemouse/output.py- 输入 / 剪贴板 / OpenClaw 路由与失败回退
vibemouse/system_integration.py- 平台适配边界(当前 Hyprland,可扩展 Windows/macOS)
vibemouse/doctor.py- 内置自检(环境、OpenClaw、输入权限、冲突绑定)
sudo apt update
sudo apt install -y python3-gi gir1.2-atspi-2.0 portaudio19-dev libsndfile1sudo pacman -Syu --needed python python-pip python-gobject portaudio libsndfilepython3 -m venv .venv
source .venv/bin/activate
pip install -U pip
pip install -e .export VIBEMOUSE_BACKEND=funasr_onnx
export VIBEMOUSE_DEVICE=cpu
vibemouse默认安装走 ONNX 优先,部署体积更小。
- 可选 PyTorch 后端(GPU/高级兜底):
pip install -e ".[pt]" - 可选 Intel NPU 依赖:
pip install -e ".[npu]"
bash scripts/auto-deploy.sh --preset stable这个命令会自动完成 .venv 初始化、安装 VibeMouse、生成 service/env 文件、
启用 systemd --user 服务并执行 vibemouse doctor。
可选预设:
stable:日常稳定均衡fast:更低去抖 + 更高 OpenClaw 重试low-resource:更低后台资源占用
示例:
# 稳定档
bash scripts/auto-deploy.sh --preset stable
# 低资源档
bash scripts/auto-deploy.sh --preset low-resource
# 指定你自己的 OpenClaw 助手
bash scripts/auto-deploy.sh --preset stable --openclaw-agent opsVIBEMOUSE_FRONT_BUTTON默认:x1VIBEMOUSE_REAR_BUTTON默认:x2
状态矩阵:
- 空闲 + 后侧键 -> Enter(由
VIBEMOUSE_ENTER_MODE控制) - 录音中 + 后侧键 -> 停止录音 + OpenClaw 路由
如果鼠标物理定义相反:
export VIBEMOUSE_FRONT_BUTTON=x2
export VIBEMOUSE_REAR_BUTTON=x1OpenClaw 路由可配置:
VIBEMOUSE_OPENCLAW_COMMAND(默认openclaw)VIBEMOUSE_OPENCLAW_AGENT(默认main)VIBEMOUSE_OPENCLAW_TIMEOUT_S(默认20.0)VIBEMOUSE_OPENCLAW_RETRIES(默认0)
调度行为:
- 快速非阻塞派发,避免阻塞交互
- 返回路由原因(如
dispatched、dispatched_after_retry_*、spawn_error:*) - 命令无效或拉起失败时自动回退到剪贴板
部署提示:如果你用自己的本地 AI 助手体系,把
VIBEMOUSE_OPENCLAW_AGENT 改成你自己的助手 ID。
运行:
vibemouse doctor先执行安全自动修复再复检:
vibemouse doctor --fix当前检查项:
- 配置加载是否有效
- OpenClaw 命令是否可执行 + agent 是否存在
- 麦克风输入设备可用性
- Linux 输入设备权限 / 侧键能力
- Hyprland 后侧键 Return 冲突绑定
systemctl --user服务状态
当前 --fix 自动修复项:
- 自动禁用冲突的 Hyprland 侧键 Return 绑定
- 尝试拉起处于 inactive 状态的
vibemouse.service
只要存在 FAIL,命令退出码就是非零,方便自动化检测。
也可以直接用 deploy 子命令:
vibemouse deploy --preset stable常用参数:
--preset stable|fast|low-resource--openclaw-command "openclaw --profile prod"--openclaw-agent main--openclaw-retries 2--log-file ~/.local/state/vibemouse/service.log--skip-systemctl--dry-run
建议开启持久化调试日志:
tail -f ~/.local/state/vibemouse/service.log| 变量 | 默认值 | 作用 |
|---|---|---|
VIBEMOUSE_ENTER_MODE |
enter |
后侧键提交模式(enter、ctrl_enter、shift_enter、none) |
VIBEMOUSE_AUTO_PASTE |
false |
回退到剪贴板后是否自动粘贴 |
VIBEMOUSE_GESTURES_ENABLED |
false |
是否启用手势识别 |
VIBEMOUSE_GESTURE_TRIGGER_BUTTON |
rear |
手势触发键(front、rear、right) |
VIBEMOUSE_GESTURE_THRESHOLD_PX |
120 |
手势识别阈值 |
VIBEMOUSE_GESTURE_FREEZE_POINTER |
true |
手势期间是否冻结指针 |
VIBEMOUSE_PREWARM_ON_START |
true |
启动预热,降低首次识别延迟 |
VIBEMOUSE_PREWARM_DELAY_S |
0.0 |
启动后延迟执行 ASR 预热,改善初始响应速度 |
VIBEMOUSE_STATUS_FILE |
$XDG_RUNTIME_DIR/vibemouse-status.json |
运行状态文件(状态栏读取) |
完整配置以 vibemouse/config.py 为准。
当你遇到“录音、右键手势、回车都失灵”时,最常见根因并不是服务挂掉, 而是鼠标侧键底层事件码不匹配。
典型现象:
vibemouse.service显示activehyprctl dispatch workspace e-1/e+1手动执行是ok- 但侧键触发不到任何动作,体感像“全炸了”
我们实战遇到的真实根因:
- 监听器只匹配了
BTN_SIDE/BTN_EXTRA - 部分鼠标实际会报
BTN_BACK/BTN_FORWARD - 配置本身正确,但监听层没识别到原始按键事件
当前代码修复:
x1同时匹配{BTN_SIDE, BTN_BACK}x2同时匹配{BTN_EXTRA, BTN_FORWARD}
建议排查顺序(最快):
systemctl --user is-active vibemouse.service- 手动执行
hyprctl dispatch workspace e-1与e+1 vibemouse doctor- 从
/proc/<MainPID>/environ确认运行时变量:VIBEMOUSE_GESTURE_TRIGGER_BUTTONVIBEMOUSE_GESTURE_LEFT_ACTIONVIBEMOUSE_GESTURE_RIGHT_ACTIONVIBEMOUSE_FRONT_BUTTON/VIBEMOUSE_REAR_BUTTON
如果前 1~3 项都通过但按钮仍无动作,请优先排查监听器事件兼容路径。
检查并移除 Hyprland 的硬绑定:
bind = , mouse:275, sendshortcut, , Return, activewindow
bind = , mouse:276, sendshortcut, , Return, activewindow然后重载:
hyprctl reload config-onlyopenclaw agent --agent main --message "ping" --json
vibemouse doctorsudo usermod -aG input $USER
# 需要重新登录请直接看这两份专用指南:
里面包含:架构契约、依赖下载地址、平台适配流程、以及可直接复用的 AI 提示模板。
项目源码采用 Apache-2.0,详见 LICENSE。
第三方依赖与模型资产声明见 THIRD_PARTY_NOTICES.md。