终端 · Octodo

终端 · Octodo

产品特性

GPU · Alacritty 渲染

基于 Alacritty 内核的即时 GPU 渲染,文字锐利、零卡顿。

Flutter 原生多窗格与标签

流畅的多窗格分屏与灵活的标签布局,为 Windows、macOS 与 Linux 原生构建。

键盘优先,鼠标也顺手

快捷键驱动导航,划选即复制、右键即粘贴,支持拖拽重排标签。

智能通知

长时任务完成或智能体需要关注时推送桌面通知,未读徽标随处可见。

零配置 Shell 发现

开箱即用,自动检测所有本地 shell,WSL 发行版自动集成。

IME 输入法支持

完整、原生兼容多语言 IME 输入。

应用内自动升级

Windows、macOS 与 Linux 均支持无摩擦的应用内自动升级。

Octodo Screenshot

平台支持

平台状态
Windows✅
macOS(Apple Silicon)✅
Linux(x64 / arm64)✅

下载安装

Octodo 可从 Microsoft Store 获取,也有 Msix 安装包、便携版 zip、macOS dmg 与 Linux AppImage。更新全自动:商店版通过商店更新,其余版本自动应用最新的 GitHub 发布。

Windows

  • 从 Microsoft Store 安装。推荐
  • Msix 安装包
    1. 从 Releases 下载 Octodo-v<version>-windows-x64.Msix。
    2. 双击 Msix 文件即可安装。
  • 便携版
    1. 从 Releases 下载 octodo-v<version>-windows-x64.zip。
    2. 解压前,右键 zip 文件 → 属性 → 勾选 解除锁定 → 确定。这一步可避免 Windows 拦截网络与 shell 启动相关的 API。
    3. 解压到任意目录,运行 octodo.exe。

macOS(Apple Silicon)

  1. 从 Releases 下载 Octodo-v<version>-macos-arm64.dmg。
  2. 双击 dmg 文件,将 Octodo.app 拖入应用程序(Applications)。

若首次启动被 Gatekeeper 拦截,可在终端执行以下命令清除隔离属性:

xattr -dr com.apple.quarantine /Applications/Octodo.app

Linux(x64 / arm64)

  1. 从 Releases 下载 octodo-v<version>-linux-x64.AppImage(x86_64)或 octodo-v<version>-linux-arm64.AppImage(aarch64)。
  2. 添加可执行权限后运行:
chmod +x octodo-v<version>-linux-x64.AppImage
./octodo-v<version>-linux-x64.AppImage
  • 若 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 校验文件验证下载。
从 Microsoft Store 安装

从源码构建

需要 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 / LinuxmacOS动作
Ctrl+Shift+BCmd+Shift+B切换工作区抽屉
Ctrl+Shift+NCmd+Shift+N新建工作区(自动聚焦)
Ctrl+Shift+WCmd+Shift+W关闭当前工作区(需确认)
Ctrl+Shift+]Cmd+Shift+]下一个工作区(循环)
Ctrl+Shift+[Cmd+Shift+[上一个工作区(循环)
Ctrl+Shift+1 … 9Cmd+Shift+1 … 9直接跳转到第 N 个工作区
F11Ctrl+Cmd+F切换全屏
Ctrl+Shift+QCmd+Shift+Q退出应用

窗格(分屏 + 焦点切换)

Windows / LinuxmacOS动作
Ctrl+Shift+DCmd+Shift+D垂直分屏(右侧)
Ctrl+Shift+ECmd+Shift+E水平分屏(下方)
Ctrl+Shift+↑Cmd+Shift+↑焦点切到上方的窗格
Ctrl+Shift+↓Cmd+Shift+↓焦点切到下方的窗格
Ctrl+Shift+←Cmd+Shift+←焦点切到左侧的窗格
Ctrl+Shift+→Cmd+Shift+→焦点切到右侧的窗格
Ctrl+Shift+MCmd+Shift+M切换聚焦窗格的最大化

标签(窗格内)

Windows / LinuxmacOS动作
Ctrl+Shift+TCmd+Shift+T在聚焦窗格新建标签
Ctrl+Shift+KCmd+Shift+K关闭当前标签
Ctrl+TabCmd+Option+→切到下一个标签
Ctrl+Shift+TabCmd+Option+←切到上一个标签
Ctrl+1 … 9Cmd+1 … 9直接跳转到第 N 个标签

终端引擎(剪贴板 / 缩放)

Windows / LinuxmacOS动作
Ctrl+Shift+C / Ctrl+InsertCmd+Shift+C / Cmd+Insert复制选中内容
Ctrl+V / Ctrl+Shift+VCmd+V / Cmd+Shift+V从剪贴板粘贴
Shift+InsertShift+Insert备选粘贴方式
PageUp / PageDownPageUp / PageDown上下翻一页
Ctrl+=Cmd+=放大字体
Ctrl+-Cmd+-缩小字体
Ctrl+0Cmd+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。

蜀兜商店联系我们