Skip to content

Repository files navigation

VibeKarma

VibeKarma 是一个用 Tauri 2、React 19 和 Rust 构建的 Codex 桌面伴侣。它覆盖在真实 Codex 桌面窗口上,把“惩罚一下”和“奖励一下”做成可操作的互动反馈,并让本机 Codex CLI 将这次反馈写成第一人称反省日记。

桌面窗口识别与互动覆盖层支持 Windows 和 macOS;两个系统使用各自的原生窗口 API,互不影响。

下载

前往 GitHub Releases 下载最新版本。

  • Windows 普通用户:下载 VibeKarma_*_x64-setup.exe
  • Windows 企业部署:下载 VibeKarma_*_x64_en-US.msi
  • Apple Silicon Mac:下载 VibeKarma_*_aarch64.dmg
  • Intel Mac:下载 VibeKarma_*_x64.dmg (滑到最底下的Assets展开)

当前版本为预发布版本,安装包尚未进行代码签名。Windows SmartScreen 或 macOS Gatekeeper 可能显示安全提醒。推荐在本机独立安装并登录 Codex CLI;未找到外部 CLI 时,VibeKarma 会尝试使用 Codex 桌面客户端内部 CLI 作为备用。

当前功能

惩罚一下

  • 自动识别当前可见的 Codex 桌面窗口,并在窗口范围内打开透明覆盖层。
  • 鞭子会跟随鼠标按物理链条摆动;高速甩动时产生抽击、声音、震动和鞭痕反馈。
  • 触发阈值经过降低,普通鼠标甩动也比较容易打出有效抽击。
  • 一次覆盖层内可以连续抽击,但最终只记录一次惩罚。
  • 单击放手并结束,Esc 或鼠标右键撤回本次惩罚。

奖励一下

  • 按钮文案为“奖励一下 / 画个大饼,现场兑现”。
  • 悬停时,笔会沿着饼的轮廓完成绘制动效。
  • 进入覆盖层后按住鼠标画饼,松手时校验轨迹;有效轨迹会现场变成一张真正的大饼。
  • 轨迹太短或范围太小时不会提交,可以直接重画;Esc 或鼠标右键退出。

反省日记

  • 每次有效奖励或惩罚都会静默记录一次反馈,并异步启动独立的 Codex CLI 日记进程。
  • CLI 按“手动指定 → 外部独立 CLI(推荐)→ 桌面客户端内部 CLI(备用)”的顺序自动查找。
  • 控制栏设置按钮可以切换自动检测,或手动选择 Codex CLI 文件。
  • 找不到或无法运行 CLI 时,错误窗口会提供一段可直接复制给 Codex 的安装求助提示。
  • 当前只有“奖励日记”和“挨打日记”,没有自动生成的“收工日记”。
  • 日记参考当前 Codex 窗口的近期内容,以及最近三篇日记,用来保持角色和旧梗的连续性。
  • 原因输入是可选的;留空时 Codex 根据窗口上下文判断,不再传递冗余的“用户补充”字段。
  • 标题最多 20 个字符;正文不限制固定字数或段数。
  • 日记正文按实际渲染尺寸自动分页,当前页放不下的内容会原样续到下一页,不会压缩、截断或覆盖页脚。
  • 日记本支持拖动翻页,并使用独立的前封面与后封面插画。

实际工作流程

点击奖惩按钮
  → 检查并定位真实 Codex 桌面窗口
  → 在目标窗口上显示透明互动层
  → 用户完成抽鞭子或画大饼
  → 静默记录一次反馈
  → 独立 Codex CLI 进程生成日记
  → 写入本地 SQLite
  → 日记本收到事件并显示新日记

奖惩反馈不会注入、打断或改写当前 Codex 任务。Rust 后端只读取可见窗口的近期文本作为日记素材,日记生成与正在工作的 Codex 会话彼此独立。

技术结构

  • src/:React 界面、透明覆盖层、奖惩动效和日记本分页。
  • src/components/WhipPhysics.tsx:鼠标驱动的鞭子物理与命中判断。
  • src/components/DrawPieIcon.tsx:奖励按钮的画饼动效。
  • src/components/DiaryBook.tsx:封面、翻页和基于 DOM 测量的正文分页。
  • src-tauri/src/codex_window.rs:跨平台窗口识别入口、覆盖层定位和窗口模式。
  • src-tauri/src/codex_window/macos.rs:使用 macOS Core Graphics 识别并跟随 Codex 窗口。
  • src-tauri/src/codex.rs:反馈队列、日记提示词和独立 Codex CLI 调用。
  • src-tauri/src/codex/resolver.rs:统一的 CLI 优先级、状态和错误提示。
  • src-tauri/src/codex/windows.rs:Windows 外部 CLI 与桌面客户端备用 CLI 发现。
  • src-tauri/src/codex/macos.rs:macOS 外部 CLI 与应用 Bundle 备用 CLI 发现。
  • src-tauri/src/storage.rs:设置、事件日志和 SQLite 日记存储。

主控制器默认为 580 × 400,打开日记本时切换为 1000 × 700。透明覆盖窗口只在奖惩互动期间显示。

运行要求

  • Windows 10/11,或运行在 Intel / Apple Silicon 上的 macOS。
  • Node.js 22 或更高版本。
  • pnpm 10。
  • Rust stable 工具链。
  • Windows 开发需要 Visual C++ Build Tools、Windows SDK 和 WebView2 Runtime;macOS 开发需要 Xcode Command Line Tools。
  • 推荐安装并登录可正常运行的外部 Codex CLI;桌面客户端内部 CLI 仅作为兼容性备用。
  • 已打开且可见的 Codex 桌面客户端窗口。

VibeKarma 不保存 OpenAI API Key。日记进程继承本机 Codex CLI 已有的登录、Provider 和 CODEX_HOME 配置;应用设置可以手动指定 Codex 可执行文件,本地 settings.json 仍可配置独立 CODEX_HOME 或额外环境变量。

Codex CLI 发现顺序

Windows 和 macOS 使用相同优先级:

用户手动指定的 CLI
  → 外部独立安装的 CLI(推荐)
  → Codex 桌面客户端内部 CLI(兼容性备用)
  → 显示包含安装求助提示的错误信息

外部 CLI 是公开、稳定的调用入口。桌面客户端内部文件可能随客户端更新改变,因此只用于兜底。VibeKarma 不会复制、打包或重新分发任何 Codex 二进制文件。

自动检测会用短超时的 codex --version 检查候选 CLI;损坏的外部 CLI 会被自动跳过,再尝试其他外部安装或桌面客户端内部 CLI。旧设置中的 codexcodex.cmd 等命令名仍会从系统 PATH 解析,无需用户重新选择文件。

Windows 商店版桌面客户端位于系统管理的 WindowsApps 目录,其内部 CLI 可能不允许其他应用直接启动。VibeKarma 会把这种情况识别为“检测到但不可用”,并引导安装外部 CLI;请勿通过取得目录所有权或修改系统 ACL 来绕过限制。

本地开发

pnpm install
pnpm run tauri dev

如果 1420 端口已被旧的 Vite 进程占用,需要先关闭旧开发进程,再重新运行上述命令。

构建和测试:

pnpm test
pnpm build
cargo test --manifest-path src-tauri/Cargo.toml

只运行已构建的前端与 Tauri 后端:

pnpm build
cargo run --manifest-path src-tauri/Cargo.toml --features tauri/custom-protocol

数据位置

有 D 盘时,应用默认使用 D:\VibeKarmaData;否则回退到系统应用数据目录。可以通过 VIBEKARMA_DATA_DIR 覆盖数据位置。

settings.json
events/YYYY-MM-DD.jsonl
vibekarma.sqlite3

旧版本的 diaries/index.json 会在首次启动时导入 SQLite,原文件不会被删除。

日记进程使用临时会话、read-only 沙箱和 never 审批策略。它的工作目录是 VibeKarma 数据目录,不会修改用户项目。

发布

推送 v* 标签会触发 GitHub Actions,创建草稿 Release,并构建四种安装包:Windows x64 NSIS、Windows x64 MSI、macOS Intel DMG 和 macOS Apple Silicon DMG。Windows 与 macOS 都会识别并跟随各自平台上的 Codex 桌面窗口。

git tag v0.1.1
git push origin v0.1.1

未配置代码签名时,Windows SmartScreen 和 macOS Gatekeeper 可能提示应用未签名。签名证书、SSH 私钥、API Key 和本地认证文件都不应提交到仓库。

安全边界

  • React 前端不能直接执行任意系统命令。
  • 奖惩交互只覆盖已经识别到的可见 Codex 窗口。
  • 当前反馈流程不会模拟键盘输入,也不会写入系统剪贴板或当前 Codex 任务。
  • Codex 登录信息由本机 Codex CLI 管理,VibeKarma 不复制凭据。
  • 日记生成失败时记录本地错误,不会伪造一篇成功生成的日记。
  • output/tmp/、日志、数据库、本地配置和 badclaude/ 参考项目均不进入版本库。

更完整的安全说明见 SECURITY.md

License

Apache License 2.0

Copyright 2026 LiRuiZhe. See NOTICE for attribution information.

Bundled font assets remain under the SIL Open Font License 1.1; their license texts are included in src/assets/fonts/.

About

基于 Tauri、React、Rust 和 SQLite 构建的开源 Codex 桌面”伴侣“,通过趣味奖励与惩罚交互,让本地 Codex CLI 自动记录第一人称反省日记

Resources

Security policy

Stars

5 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages