Dimillian/CodexMonitor
GitHub: Dimillian/CodexMonitor
一个 Tauri 桌面应用,用于在本地或远程环境中编排和管理多个 Codex AI 代理会话,集成工作区管理、Git 工作流和文件浏览功能。
Stars: 4047 | Forks: 392
# CodexMonitor
[](https://gitcgr.com/Dimillian/CodexMonitor)

CodexMonitor 是一个 Tauri 应用程序,用于在本地工作区中编排多个 Codex agents。它提供了一个用于管理项目的侧边栏、一个用于快速操作的主屏幕,以及一个基于 Codex app-server 协议的对话视图。
## 功能
### 工作区与会话
- 添加并持久化工作区,对它们进行分组/排序,并从主仪表板跳转到最近的 agent 活动。
- 为每个工作区生成一个 `codex app-server`,恢复会话,并跟踪未读/运行状态。
- Worktree 和 clone agents 可用于隔离工作;worktree 位于应用程序数据目录下(支持旧版的 `.codex-worktrees`)。
- 会话管理:置顶/重命名/归档/复制,每个会话的草稿,以及停止/中断进行中的对话轮次。
- 可选的远程后端 (daemon) 模式,用于在另一台机器上运行 Codex。
- 提供用于自托管连接的远程设置助手(TCP 模式下的 Tailscale 检测/主机引导)。
### 编辑器与 Agent 控件
- 支持通过图片附件(选择器、拖放、粘贴)进行编辑,并支持可配置的后续操作行为(在运行处于活动状态时选择 `Queue` 或 `Steer`)。
- 使用 `Shift+Cmd+Enter` (macOS) 或 `Shift+Ctrl+Enter` (Windows/Linux) 可为单条消息发送相反的后续操作。
- 支持 skills (`$`)、prompts (`/prompts:`)、reviews (`/review`) 和文件路径 (`@`) 的自动补全。
- 模型选择器、协作模式(启用时)、推理力度、访问模式以及上下文使用环。
- 支持按住说话快捷键的听写功能和实时波形 (Whisper)。
- 渲染推理/工具/diff 项目并处理批准提示。
### Git 与 GitHub
- Diff 统计、暂存/未暂存的文件 diffs、撤销/暂存控件以及提交日志。
- 分支列表,支持检出/创建并显示上游领先/落后计数。
- 通过 `gh` 实现 GitHub Issues 和 Pull Requests(列表、diffs、评论),并在浏览器中打开提交/PRs。
- PR 编辑器:“Ask PR”可将 PR 上下文发送到新的 agent 会话中。
### 文件与 Prompts
- 带有搜索、文件类型图标以及在 Finder/Explorer 中显示功能的文件树。
- 用于全局/工作区 prompts 的 prompt 库:创建/编辑/删除/移动,并在当前或新会话中运行。
### UI 与体验
- 可调整大小的侧边栏/右侧/计划/终端/调试面板,且大小设置会被持久化保存。
- 响应式布局(桌面/平板/手机),带有选项卡式导航。
- 侧边栏使用量和账户速率限制的额度计量器,以及主页使用量快照。
- 带有多个选项卡的终端面板,用于执行后台命令(实验性功能)。
- 应用内更新(带有 toast 下载/安装提示)、调试面板的复制/清除、声音通知,以及平台特定的窗口效果(macOS 覆盖标题栏 + 毛玻璃效果)和降低透明度开关。
## 环境要求
- Node.js + npm
- Rust 工具链 (stable)
- CMake(原生依赖项必需;听写/Whisper 会用到)
- LLVM/Clang(在 Windows 上通过 bindgen 构建听写依赖项时需要)
- 已安装 Codex CLI 并在 `PATH` 中可用作 `codex`(或者在应用/工作区设置中配置自定义 Codex 二进制文件)
- Git CLI(用于 worktree 操作)
- GitHub CLI (`gh`),用于 GitHub Issues/PR 集成(可选)
如果遇到原生构建错误,请运行:
```
npm run doctor
```
## 快速开始
安装依赖项:
```
npm install
```
在开发模式下运行:
```
npm run tauri:dev
```
## iOS 支持 (WIP)
iOS 支持目前正在开发中。
- 当前状态:移动端布局可运行,远程后端流程已接通,且 iOS 默认使用远程后端模式。
- 当前限制:终端和听写功能在移动端构建版本中仍不可用。
- 桌面端行为保持不变:除非明确选择了远程模式,macOS/Linux/Windows 仍保持本地优先。
### iOS + Tailscale 设置 (TCP)
当需要通过您的 Tailscale tailnet 将 iOS 应用连接到桌面托管的 daemon 时,请使用此方法。
规范运行手册:`docs/mobile-ios-tailscale-blueprint.md`。
1. 在桌面电脑和 iPhone 上安装并登录 Tailscale(同一个 tailnet)。
2. 在桌面版 CodexMonitor 中,打开 `Settings > Server`。
3. 设置一个 `Remote backend token`。
4. 通过 `Start daemon`(位于 `Mobile access daemon` 中)启动桌面 daemon。
5. 在 `Tailscale helper` 中,使用 `Detect Tailscale` 并记下建议的主机地址(例如 `your-mac.your-tailnet.ts.net:4732`)。
6. 在 iOS 版 CodexMonitor 中,打开 `Settings > Server`。
7. 输入桌面端 Tailscale 主机地址和相同的 token。
8. 点击 `Connect & test` 并确认连接成功。
注意事项:
- 在 iOS 连接期间,桌面 daemon 必须保持运行。
- 如果测试失败,请确认两台设备是否都在 Tailscale 中在线,并且主机/token 与桌面设置相匹配。
### 无头 Daemon 管理(无桌面 UI)
当您需要使用 iOS 远程模式但不想保持桌面应用程序打开时,请使用独立的 daemon 控制 CLI。
构建二进制文件:
```
cd src-tauri
cargo build --bin codex_monitor_daemon --bin codex_monitor_daemonctl
```
示例:
```
# 显示当前 daemon 状态
./target/debug/codex_monitor_daemonctl status
# 使用 settings.json 中的 host/token 启动 daemon
./target/debug/codex_monitor_daemonctl start
# 停止 daemon
./target/debug/codex_monitor_daemonctl stop
# 打印等效的 daemon 启动命令
./target/debug/codex_monitor_daemonctl command-preview
```
有用的覆盖参数:
- `--data-dir `:包含 `settings.json` / `workspaces.json` 的应用程序数据目录
- `--listen `:绑定地址覆盖
- `--token `:token 覆盖
- `--daemon-path `:显式指定 `codex-monitor-daemon` 二进制文件路径
- `--json`:机器可读输出
### iOS 前置条件
- 已安装 Xcode + Command Line Tools。
- 已安装 Rust iOS 目标平台:
```
rustup target add aarch64-apple-ios aarch64-apple-ios-sim
# 可选(Intel Mac simulator 构建):
rustup target add x86_64-apple-ios
```
- 已配置 Apple 签名(开发团队)。
- 在 `src-tauri/tauri.ios.local.conf.json` 中设置 `bundle.iOS.developmentTeam` 和 `identifier`(推荐用于本地计算机设置),或者
- 在 `src-tauri/tauri.ios.conf.json` 中设置这些值,或者
- 向设备脚本传递 `--team ` 参数。
- 当存在 `src-tauri/tauri.ios.local.conf.json` 时,`build_run_ios*.sh` 和 `release_testflight_ios.sh` 会自动合并它。
### 在 iOS 模拟器上运行
```
./scripts/build_run_ios.sh
```
选项:
- `--simulator ""` 指定特定的模拟器。
- `--target aarch64-sim|x86_64-sim` 覆盖架构。
- `--skip-build` 复用当前的应用 bundle。
- `--no-clean` 在构建之间保留 `src-tauri/gen/apple/build`。
### 在 USB 设备上运行
列出可发现的设备:
```
./scripts/build_run_ios_device.sh --list-devices
```
在特定设备上构建、安装并启动:
```
./scripts/build_run_ios_device.sh --device "" --team
```
附加选项:
- `--target aarch64` 覆盖架构。
- `--skip-build` 复用当前的应用 bundle。
- `--bundle-id ` 启动非默认的 bundle identifier。
首次设备设置通常需要:
1. iPhone 已解锁并信任此 Mac。
2. 在 iPhone 上启用开发者模式。
3. 至少在 Xcode 中批准过一次配对/签名。
如果签名尚未准备好,请在脚本流程中打开 Xcode:
```
./scripts/build_run_ios_device.sh --open-xcode
```
### iOS TestFlight 发布(脚本化)
使用端到端脚本进行归档、上传、配置合规性、分配 Beta 测试组并提交以进行 Beta 审核。
```
./scripts/release_testflight_ios.sh
```
该脚本会自动从 `.testflight.local.env`(已被 gitignored)加载发布元数据。
对于新的设置,请将 `.testflight.local.env.example` 复制到 `.testflight.local.env` 并填写相关值。
## 发布构建
构建生产环境 Tauri bundle:
```
npm run tauri:build
```
构建产物将位于 `src-tauri/target/release/bundle/`(特定平台的子文件夹中)。
### Windows(可选)
Windows 构建是可选的,并使用单独的 Tauri 配置文件,以避免使用仅限 macOS 的窗口效果。
```
npm run tauri:build:win
```
构建产物将位于:
- `src-tauri/target/release/bundle/nsis/`(安装程序 exe)
- `src-tauri/target/release/bundle/msi/`(msi)
注意:在 Windows 上从源码构建时,除了 CMake 之外,还需要 LLVM/Clang(用于 `bindgen` / `libclang`)。
## 类型检查
运行 TypeScript 检查器(不输出文件):
```
npm run typecheck
```
注意:`npm run build` 在打包前端之前也会运行 `tsc`。
## 验证
推荐的验证命令:
```
npm run lint
npm run test
npm run typecheck
cd src-tauri && cargo check
```
## 代码库导航
对于面向任务的文件查找(“如果你需要 X,请编辑 Y”),请使用:
- `docs/codebase-map.md`
## 项目结构
```
src/
features/ feature-sliced UI + hooks
features/app/bootstrap/ app bootstrap orchestration
features/app/orchestration/ app layout/thread/workspace orchestration
features/threads/hooks/threadReducer/ thread reducer slices
services/ Tauri IPC wrapper
styles/ split CSS by area
types.ts shared types
src-tauri/
src/lib.rs Tauri app backend command registry
src/bin/codex_monitor_daemon.rs remote daemon JSON-RPC process
src/bin/codex_monitor_daemon/rpc/ daemon RPC domain handlers
src/shared/ shared backend core used by app + daemon
src/shared/git_ui_core/ git/github shared core modules
src/shared/workspaces_core/ workspace/worktree shared core modules
src/workspaces/ workspace/worktree adapters
src/codex/ codex app-server adapters
src/files/ file adapters
tauri.conf.json window configuration
```
## 注意事项
- 工作区会持久化保存在应用程序数据目录下的 `workspaces.json` 中。
- 应用程序设置会持久化保存在应用程序数据目录下的 `settings.json` 中(主题、后端模式/提供商、远程端点/token、Codex 路径、默认访问模式、UI 缩放、后续消息行为)。
- 功能设置在 UI 中受支持,并在加载/保存时同步到 `$CODEX_HOME/config.toml`(或 `~/.codex/config.toml`)。稳定版:协作模式 (`features.collaboration_modes`)、个性化 (`personality`) 和后台终端 (`features.unified_exec`)。实验性:应用 (`features.apps`)。Steering 能力仍然遵循 Codex 的 `features.steer`,但默认的后续行为是在 Settings → Composer 中控制的。
- 在启动和窗口获取焦点时,应用程序会重新连接并刷新每个工作区的会话列表。
- 通过使用工作区 `cwd` 过滤 `thread/list` 结果来恢复会话。
- 选择会话时总是会调用 `thread/resume` 以从磁盘刷新消息。
- 如果 CLI 会话的 `cwd` 与工作区路径匹配,它们就会显示出来;除非被恢复,否则它们不会被实时流式传输。
- 该应用程序通过 stdio 使用 `codex app-server`;请参阅 `src-tauri/src/lib.rs` 和 `src-tauri/src/codex/`。
- 远程 daemon 入口点为 `src-tauri/src/bin/codex_monitor_daemon.rs`;RPC 路由位于 `src-tauri/src/bin/codex_monitor_daemon/rpc.rs`,域处理程序位于 `src-tauri/src/bin/codex_monitor_daemon/rpc/`。
- 共享域逻辑位于 `src-tauri/src/shared/`(特别是 `src-tauri/src/shared/git_ui_core/` 和 `src-tauri/src/shared/workspaces_core/`)。
- Codex 主目录的解析顺序依次为:工作区设置(如果已设置)、旧版 `.codexmonitor/`,然后是 `$CODEX_HOME`/`~/.codex`。
- Worktree agents 位于应用程序数据目录下(`worktrees/`);仍然支持旧版的 `.codex-worktrees/` 路径,并且应用程序不再编辑仓库的 `.gitignore` 文件。
- UI 状态(面板大小、降低透明度开关、最近的会话活动)存储在 `localStorage` 中。
- 自定义 prompts 从 `$CODEX_HOME/prompts`(或 `~/.codex/prompts`)加载,带有可选的 frontmatter description/argument hints。
## Tauri IPC 接口
前端调用位于 `src/services/tauri.ts` 中,并映射到 `src-tauri/src/lib.rs` 中的命令。当前的接口包括:
- 设置/配置/文件:`get_app_settings`, `update_app_settings`, `get_codex_config_path`, `get_config_model`, `file_read`, `file_write`, `codex_doctor`, `menu_set_accelerators`。
- 工作区/worktrees:`list_workspaces`, `is_workspace_path_dir`, `add_workspace`, `add_clone`, `add_worktree`, `worktree_setup_status`, `worktree_setup_mark_ran`, `rename_worktree`, `rename_worktree_upstream`, `apply_worktree_changes`, `update_workspace_settings`, `remove_workspace`, `remove_worktree`, `connect_workspace`, `list_workspace_files`, `read_workspace_file`, `open_workspace_in`, `get_open_app_icon`。
- 会话/对话轮次/审查`start_thread`, `fork_thread`, `compact_thread`, `list_threads`, `resume_thread`, `archive_thread`, `set_thread_name`, `send_user_message`, `turn_interrupt`, `respond_to_server_request`, `start_review`, `remember_approval_rule`, `get_commit_message_prompt`, `generate_commit_message`, `generate_run_metadata`。
- 账户/模型/协作:`model_list`, `account_rate_limits`, `account_read`, `skills_list`, `apps_list`, `collaboration_mode_list`, `codex_login`, `codex_login_cancel`, `list_mcp_server_status`。
- Git/GitHub:`get_git_status`, `list_git_roots`, `get_git_diffs`, `get_git_log`, `get_git_commit_diff`, `get_git_remote`, `stage_git_file`, `stage_git_all`, `unstage_git_file`, `revert_git_file`, `revert_git_all`, `commit_git`, `push_git`, `pull_git`, `fetch_git`, `sync_git`, `list_git_branches`, `checkout_git_branch`, `create_git_branch`, `get_github_issues`, `get_github_pull_requests`, `get_github_pull_request_diff`, `get_github_pull_request_comments`。
- Prompts:`prompts_list`, `prompts_create`, `prompts_update`, `prompts_delete`, `prompts_move`, `prompts_workspace_dir`, `prompts_global_dir`。
- 终端/听写/通知/使用量:`terminal_open`, `terminal_write`, `terminal_resize`, `terminal_close`, `dictation_model_status`, `dictation_download_model`, `dictation_cancel_download`, `dictation_remove_model`, `dictation_request_permission`, `dictation_start`, `dictation_stop`, `dictation_cancel`, `send_notification_fallback`, `is_macos_debug_build`, `local_usage_snapshot`。
- 远程后端助手:`tailscale_status`, `tailscale_daemon_command_preview`, `tailscale_daemon_start`, `tailscale_daemon_stop`, `tailscale_daemon_status`。
标签:AI助手, Bash脚本, Codex, Git, MITM代理, SOC Prime, Tauri, 可视化界面, 开发工具, 桌面应用, 自动化攻击