
产品特性
GPU · Alacritty 渲染
基于 Alacritty 内核的即时 GPU 渲染,文字锐利、零卡顿。
Flutter 原生多窗格与标签
流畅的多窗格分屏与灵活的标签布局,为 Windows、macOS 与 Linux 原生构建。
键盘优先,鼠标也顺手
快捷键驱动导航,划选即复制、右键即粘贴,支持拖拽重排标签。
智能通知
长时任务完成或智能体需要关注时推送桌面通知,未读徽标随处可见。
零配置 Shell 发现
开箱即用,自动检测所有本地 shell,WSL 发行版自动集成。
IME 输入法支持
完整、原生兼容多语言 IME 输入。
应用内自动升级
Windows、macOS 与 Linux 均支持无摩擦的应用内自动升级。

平台支持
| 平台 | 状态 |
|---|---|
| Windows | ✅ |
| macOS(Apple Silicon) | ✅ |
| Linux(x64 / arm64) | ✅ |
下载安装
Octodo 可从 Microsoft Store 获取,也有 Msix 安装包、便携版 zip、macOS dmg 与 Linux AppImage。更新全自动:商店版通过商店更新,其余版本自动应用最新的 GitHub 发布。
Windows
- 从 Microsoft Store 安装。推荐
- Msix 安装包
- 从 Releases 下载
Octodo-v<version>-windows-x64.Msix。 - 双击 Msix 文件即可安装。
- 从 Releases 下载
- 便携版
- 从 Releases 下载
octodo-v<version>-windows-x64.zip。 - 解压前,右键 zip 文件 → 属性 → 勾选 解除锁定 → 确定。这一步可避免 Windows 拦截网络与 shell 启动相关的 API。
- 解压到任意目录,运行
octodo.exe。
- 从 Releases 下载
macOS(Apple Silicon)
- 从 Releases 下载
Octodo-v<version>-macos-arm64.dmg。 - 双击 dmg 文件,将
Octodo.app拖入应用程序(Applications)。
若首次启动被 Gatekeeper 拦截,可在终端执行以下命令清除隔离属性:
xattr -dr com.apple.quarantine /Applications/Octodo.app
Linux(x64 / arm64)
- 从 Releases 下载
octodo-v<version>-linux-x64.AppImage(x86_64)或octodo-v<version>-linux-arm64.AppImage(aarch64)。 - 添加可执行权限后运行:
chmod +x octodo-v<version>-linux-x64.AppImage
./octodo-v<version>-linux-x64.AppImage
从 Microsoft Store 安装
- 若 AppImage 无法启动,请通过包管理器安装 FUSE 2(
libfuse2),或改用--appimage-extract-and-run运行。- 若启动时崩溃并出现
Failed to create EGL context/Check failed: gl_version_string(无可用 OpenGL —— 常见于未开启 3D 加速的虚拟机或 NVIDIA EGL 驱动异常),请使用软件渲染安全模式:./octodo-v<version>-linux-x64.AppImage --software-gl(或OCTODO_GL=software ./octodo-...AppImage)。渲染改用 CPU(llvmpipe)—— 稍慢,但一定能启动。- 可选:对照发布侧附带的
.sha256校验文件验证下载。
从源码构建
需要 Flutter SDK(>= 3.44.0)、Rust 工具链(通过 rustup 安装)以及平台构建工具——Windows 10/11 上的 使用 C++ 的桌面开发 Visual Studio 工作负载,或 Linux 上的 Clang、CMake、Ninja 与 GTK3 开发头文件(sudo apt install clang cmake ninja-build pkg-config libgtk-3-dev),或 macOS 上的 Xcode Command Line Tools:
git clone https://github.com/invented-pro/octodo.git
cd octodo
flutter pub get
flutter run -d windows # Windows 主机
# 或
flutter run -d linux # Linux 主机
# 或
flutter run -d macos # macOS 主机
单元测试、lint 规范与 fork 补丁工作流请见 CONTRIBUTING.md。
键盘快捷键
工作区(侧边栏)
| Windows / Linux | macOS | 动作 |
|---|---|---|
Ctrl+Shift+B | Cmd+Shift+B | 切换工作区抽屉 |
Ctrl+Shift+N | Cmd+Shift+N | 新建工作区(自动聚焦) |
Ctrl+Shift+W | Cmd+Shift+W | 关闭当前工作区(需确认) |
Ctrl+Shift+] | Cmd+Shift+] | 下一个工作区(循环) |
Ctrl+Shift+[ | Cmd+Shift+[ | 上一个工作区(循环) |
Ctrl+Shift+1 … 9 | Cmd+Shift+1 … 9 | 直接跳转到第 N 个工作区 |
F11 | Ctrl+Cmd+F | 切换全屏 |
Ctrl+Shift+Q | Cmd+Shift+Q | 退出应用 |
窗格(分屏 + 焦点切换)
| Windows / Linux | macOS | 动作 |
|---|---|---|
Ctrl+Shift+D | Cmd+Shift+D | 垂直分屏(右侧) |
Ctrl+Shift+E | Cmd+Shift+E | 水平分屏(下方) |
Ctrl+Shift+↑ | Cmd+Shift+↑ | 焦点切到上方的窗格 |
Ctrl+Shift+↓ | Cmd+Shift+↓ | 焦点切到下方的窗格 |
Ctrl+Shift+← | Cmd+Shift+← | 焦点切到左侧的窗格 |
Ctrl+Shift+→ | Cmd+Shift+→ | 焦点切到右侧的窗格 |
Ctrl+Shift+M | Cmd+Shift+M | 切换聚焦窗格的最大化 |
标签(窗格内)
| Windows / Linux | macOS | 动作 |
|---|---|---|
Ctrl+Shift+T | Cmd+Shift+T | 在聚焦窗格新建标签 |
Ctrl+Shift+K | Cmd+Shift+K | 关闭当前标签 |
Ctrl+Tab | Cmd+Option+→ | 切到下一个标签 |
Ctrl+Shift+Tab | Cmd+Option+← | 切到上一个标签 |
Ctrl+1 … 9 | Cmd+1 … 9 | 直接跳转到第 N 个标签 |
终端引擎(剪贴板 / 缩放)
| Windows / Linux | macOS | 动作 |
|---|---|---|
Ctrl+Shift+C / Ctrl+Insert | Cmd+Shift+C / Cmd+Insert | 复制选中内容 |
Ctrl+V / Ctrl+Shift+V | Cmd+V / Cmd+Shift+V | 从剪贴板粘贴 |
Shift+Insert | Shift+Insert | 备选粘贴方式 |
PageUp / PageDown | PageUp / PageDown | 上下翻一页 |
Ctrl+= | Cmd+= | 放大字体 |
Ctrl+- | Cmd+- | 缩小字体 |
Ctrl+0 | Cmd+0 | 重置字体缩放 |
桌面通知
Octodo 会监听每个终端发出的「需要关注」信号,并在你未注视该终端时推送一条带 Octodo 图标的原生桌面通知。点击通知可直接跳回发出通知的工作区 → 窗格 → 标签。该功能由 设置 → 通用 → 桌面通知 控制(默认开启),并包含一个用于设置最小任务时长的子项。
触发通知的来源
| 来源 | 触发条件 | 备注 |
|---|---|---|
| OSC 9 / OSC 777 / OSC 99 (kitty) | 工具或脚本发出通知转义序列 | 代理(opencode、Claude Code、Codex CLI)与构建脚本——参见下方示例 |
| BEL | 终端发出响铃字符 | 受 Terminal → Bell ≠ none 控制 |
| OSC 133(shell 集成) | 你运行的命令执行完成 | Octodo 会向 bash / zsh / fish / PowerShell 提示符注入标记;只有超过阈值(默认 10 秒)的命令才会通知。CMD 与 Nushell 不在此列 |
从你自己的工具中发送通知
# OSC 777(标题 + 正文)
printf '\e]777;notify;Build Complete;All tests passed\e\\'
# OSC 9(仅正文)
printf '\e]9;deploy done\e\\'
# OSC 99(kitty 协议;标题片段 + 正文片段)
printf '\e]99;i=mytask:d=0;Build\e\\'
printf '\e]99;i=mytask:p=body:d=1;All tests passed\e\\'
opencode
opencode 的 TUI 内置了一套关注系统——会针对问题需要输入、权限需要授权、会话出错与会话结束发出声音与终端通知,但默认处于关闭状态。可在 ~/.config/opencode/tui.json 中启用:
{
"$schema": "https://opencode.ai/tui.json",
"attention": { "enabled": true }
}
Octodo 实现了 opencode 所需的终端契约的两端:一方面响应 kitty OSC 99 能力探测(opencode 借此投递通知),另一方面上报终端焦点状态(CSI I / CSI O,DECSET 1004),让 opencode 知道会话已失焦。
Claude Code hook
在 ~/.claude/settings.json 中——会话结束时发送通知:
{
"hooks": {
"Stop": [
{
"matcher": "",
"hooks": [
{
"type": "command",
"command": "printf '\\e]777;notify;Claude Code;session complete\\a'"
}
]
}
]
}
}
当你的视线停留在发出通知的终端上时,通知会被抑制;未读计数会在标签上显示一个小圆点,在工作区磁贴上显示徽标,并在 macOS Dock 与 Windows 任务栏上显示徽章。
不会消失的横幅
Windows、macOS 与 Linux 都会在数秒后自动关闭原生横幅。Octodo 叠加了四层机制,确保即便无人值守,通知也不可能被错过:
- 应用内持久横幅——每条通知同时会在 Octodo 窗口右上角以卡片形式展示,直到你点击(跳转到对应终端)或主动关闭。来自同一终端的重复事件会合并为一张带 ×N 计数的卡片。
- 未读前持续提醒——只要通知仍处于未读状态且 Octodo 处于后台,横幅就会每 30 秒重新推送一次(使用同一 id,因此通知中心会替换而非堆叠),直到你点击、打开终端或手动滑掉。可在 设置 → 通用 → 未读前持续提醒 中配置。
- Dock 弹跳(macOS)——在 Octodo 处于后台时发出的横幅会同时弹跳 Dock 图标,直到你切回应用。
- 「提醒」样式(macOS)——如果希望横幅永不自动关闭,可在系统设置 → 通知中将 Octodo 切换为提醒样式。设置 → 通用 → 打开系统通知设置 可一键直达。
致谢
终端渲染由 Alacritty 提供(MPL-2.0)。
许可证
基于 MIT 许可证 发布,源码见 invented-pro/octodo。