DeepSeek Harness Hub
← 返回列表

桌面智能体调度台drewnekota/cetus

DeepSeek Harnessspec-screened在 GitHub 查看 ↗
需源码安装

官方网站 · cetus.run

暂不能直接安装(需源码编译或环境不满足):缺少 main/exports/bin 入口声明;仓库 package.json 标记 private,未发布到 npm,需从源码安装。 · 最近上游提交 2026/9/18 · 已提供中文文档

一个 macOS 应用,适用于 Claude Code、Codex 以及你使用的所有智能体运行时——定时运行、全局快捷键启动器、每次运行的 git worktree、统一审查面板。

综合分
61.1
GitHub 分
61.1
用户评分
★ Stars
145
周下载量
安装插件(需先安装 dsh CLI 引擎:npm install -g @deepseek-ai/dsh)
dsh plugin --profile web add drewnekota/cetus
缺少 main/exports/bin 入口声明;仓库 package.json 标记 private,未发布到 npm,需从源码安装,改用 GitHub 源安装
数据截至 2026/9/18(元数据每日更新 · 实装验证按队列轮转,单条结论的验证时间见上方)
安装兼容性检查需源码安装

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

npm 包cetus @ 8.0.33
Node 引擎未声明 engines.node
dsh CLI 依赖未声明 dsh 版本约束
入口文件缺少入口声明

缺少 main/exports/bin 入口声明;仓库 package.json 标记 private,未发布到 npm,需从源码安装

验证方式:npm registry 存在性 + package.json 静态校验 · 最后验证 2026/9/17 04:55:58

用户评分
还没有人投票,来当第一个
订阅周报,不错过优质插件更新
每周一封 · 高评分插件 + 新用户活动

README

Cetus

官方网站 · cetus.run

把你惯用的 agent runtime,变成一个常驻桌面的智能助手。

Codex、Claude Code、DeepSeek Harness 或内置 runtime 仍是核心;Cetus 在它们之外补上桌面助手这一层:从任何 app 随时唤起、定时安排工作,并理解你在屏幕上看过的内容。

Quick Launcher · Automations · Global Quick Reply · Screen Context

English · 简体中文

加入 Cetus 社区群聊

微信扫码加入群聊,交流使用体验和建议。

Cetus runtime 选择器 —— Claude Code、Codex、DeepSeek Harness、OpenCode、Grok Build、Kimi CLI 都在同一个 macOS app 里

Cetus 操作演示 —— 唤起 agent、创建自动化任务并切换 runtime

保持关注

⭐️ 给 Cetus 点个 Star,第一时间收到新版本发布通知,也能让更多人发现它。

Cetus 为你的 agent 补上的四件事

Quick Launcher:一个快捷键,随时叫出 agent

同时按住左右 ⌘,即可在任意 app 之上唤出 agent。Cetus 会把当前截图、前台 app、浏览器 URL 和选中文字作为可移除的 context 一起带进来,让你直接就地提问,不必先花时间解释自己正在看什么。

Cetus 快捷启动器演示

Automations:你不在时,也让它继续工作

把任意 prompt 变成单次或周期任务(at / every / cron / daily)。每次运行都保留所选 runtime 和模型设置,在新的后台对话中完成工作,并把结果留在审阅队列里。

Cetus 自动化任务演示

Global Quick Reply:不用离开对话,就把回复写好

在任意对话上双击右 ⌥ —— 团队频道、邮件、工单后台都行 —— Cetus 会读懂屏幕上正在发生什么,然后把草稿流式写进一个可编辑的面板。它跟随对话本身的语言和语气,并且是真的在回答对方问的问题:对面抛了三个待决问题,回来的就不会是一句"好的"。按 ⏎ 直接填进你原本所在的输入框,按 ⇥ 则用另一个 runtime 重写同一屏。

Cetus 全局快速回复演示

Screen Context:让它记得你之前在做什么

开启后,Cetus 会定期截帧、去重,并在设备端使用 Apple Vision 完成 OCR。Agent 之后可以回忆屏幕上出现过什么,也可以按文字或 app 检索历史。图片和文字都留在你的 Mac 上;这项能力默认关闭,并提供保留时长和敏感 app 排除列表。

Cetus 屏幕 context 设置

立即使用

预编译版本支持 Apple Silicon 和 macOS 13 或更高版本。

1. 下载最新版本。
2. 打开 DMG,将 Cetus 移入 Applications。
3. 使用 Cetus 内置 runtime,或选择本机已经安装并登录的 claude / codex / dsh(DeepSeek Harness)CLI。
4. 选择一个 workspace,交给 agent 第一个任务。

Claude Code、Codex 和 DeepSeek Harness 会复用现有 CLI 登录,不需要再配置一个账号。从源码构建请参阅参与开发。

早期版本: Cetus 仍在快速开发。如果遇到问题或缺少需要的工作流,欢迎提交 Issue。

其它能力

继续用你已经信任的 runtime

内置 pi runtime、Claude Code、Codex 或 DeepSeek Harness 都可以直接使用,并沿用你现有的模型、工具和登录状态。Cetus 把不同 runtime 的事件转换成一致的桌面工作流,同时让对话 context 和后台终端跨回复继续存在。

选择 workspace 和 runtime,可选附上文件或截图,然后发送。并行处理代码任务时,还可以为每个对话启用独立 git worktree。

Cetus 对话

在一个地方审阅所有后台工作

每个对话都是一张卡片,按进行中 · 待审阅 · 已完成跟踪。自动化任务、长时间运行的工作和并行解法都会集中到这里,不会埋在终端 session 中。

Cetus 看板

继续扩展你的 runtime

- 持久记忆:用户和 agent 都能编辑,并注入未来的对话
- 并行解法:把一个 prompt 铺开成 N 个候选运行,然后留一个、归档其余
- 独立 git worktree:隔离每个 coding session 的改动
- 视觉快速回复:根据当前屏幕起草回复,不必启动完整 agent run
- Cetus Remote:可选的 Tailscale 手机伴侣,用于跟踪运行和处理确认
- 语音听写与会议记忆:在设备端完成处理
- 电脑与浏览器控制:执行有后果的操作前请求确认
- 30+ 模型供应商:包括 Anthropic、OpenAI、Google、Bedrock、Ollama、LM Studio 和 OpenRouter

在任意 app 中听写

在任意 app 里按住热键开口说话 —— Cetus 弹出一个随声音起伏的悬浮均衡器 HUD,在设备端用 Seed-ASR 转写,并把整理好的文字落到你光标所在的位置。和 app 内麦克风用同一套管线,只不过它跟着你跑遍整个桌面。

Cetus 语音听写 HUD

这张图是用手机拍的,因为这个悬浮层截不到。

把会议变成可搜索的上下文

打开会议记忆,Cetus 会安静地把通话转写成可搜索的纪要 —— 全程设备端、只存文字、不保存音频。

- 自动识别 —— 当别的 app 占用麦克风(Zoom、Teams、FaceTime、飞书……),Cetus 自己开始会话,通话结束时停止。什么都不用按。
- 手动 —— 全局热键(默认 ⌘⇧M)手动开关,用于无法被自动识别的线下面对面会议。
- 对话双方都收录 —— 你的麦克风是你;系统音频是其他所有人,分轨采集,纪要知道每句话是谁说的(需 macOS 14.2+;更低版本回退为仅麦克风)。

转写 100% 在设备端完成,走 Apple 的 Speech 框架,流式、带标点、在自然停顿处分段。会话进行中,屏幕顶部浮出一个小药丸(红点 + 计时 + 停止按钮),不抢焦点。

这些纪要会成为 agent 能触达的 context:直接问"我们关于上线日期定了什么?",Cetus 就会检索会议历史(search_meeting_history)—— 全部来自本地日志,没有东西离开这台机器。默认关闭;总开关意味着在你显式开启前,Cetus 绝不监听。目前仅支持 macOS。

Cetus 会议记忆

始终保有控制权

每项能力都是显式开启的。Computer & Browser control 让 agent 通过编号的元素列表(而非原始像素)驱动你的浏览器和 Mac app,在任何有后果的操作(发送、删除、购买、提交、认证)前需要确认,Stop 按钮始终触手可及。

Cetus 设置

为什么做 Cetus

Codex、Claude Code、DeepSeek Harness 这样的通用 agent 已经足够强大,Cetus 并不打算取代它们。它补上那些不适合待在终端里的桌面助手能力:随时可用的入口、来自 Mac 的环境 context、跨 session 的连续性、后台调度,以及统一审阅完成结果的地方。

Runtime 继续负责智能与执行,Cetus 则成为包在它周围的 assistant layer。你可以为每项任务选择合适的 runtime,只加入自己愿意提供的 context,并让那些跨越数小时甚至数天的工作始终可见、可检查。

这样,一些不适合塞在终端标签页里的工作流就变得可行:

- 你离开时继续运行 agent,回来后审阅结果。
- 比较彼此独立的方案,而不让 git 改动相互冲突。
- 把项目决策与个人偏好带入下一次对话。
- 把编码工作与周围的会议、屏幕和 app 连接起来。

Memory 与 Dreaming

上面三样东西描述的是某一个时刻。让 agent 跨时间真正有用的,是它能不能积累什么。

Cetus — the agent loop

- Memory(记忆) 是 agent 写回给自己的 context —— 下一个 session 从上次停下的地方继续,而不是从零开始。
- Dreaming(做梦) 在你闲着的时候跑:Cetus 回顾最近的对话,把它们整合成持久的笔记,让原始聊天记录沉淀为可以复用的偏好。默认开启。

参与开发

环境要求

- Node ≥ 20、pnpm、bun(用于构建 pi sidecar 二进制)
- Rust stable(rustc、cargo)
- Tauri 前置依赖:
- 一个 DEEPSEEK_API_KEY(或你选用的供应商;pi 会自动读取 ANTHROPIC_API_KEY、OPENAI_API_KEY 等)
- 可选:本机安装并登录过 Claude Code(claude)、Codex(codex)和/或 DeepSeek Harness(dsh)CLI,即可把它们用作对话 runtime —— Cetus 复用其现有登录,无需额外配置

首次配置

pnpm install
把 pi 构建为单文件二进制,输出到 src-tauri/binaries/pi-。
约 30 秒。每台开发机跑一次即可;二进制已被 gitignore。
./scripts/build-pi-sidecar.sh

开发运行

export DEEPSEEK_API_KEY=sk-...
pnpm tauri dev

Tauri 会启动 Next.js 开发服务器(端口 3000)并打开一个指向它的窗口。pi sidecar 会从打包好的二进制自动派生。

开发后门:PI_BIN

如果你在迭代 pi 本身,可以指向任意 pi 构建来绕过 sidecar:

export PI_BIN=/absolute/path/to/your/pi
pnpm tauri dev

这会完全跳过 tauri-plugin-shell,改用原始的 tokio::process::Command。

构建

./scripts/build-pi-sidecar.sh   # 如果还没跑过
pnpm tauri build

在 macOS 上输出 .app / .dmg。tauri build 需要一套完整的多尺寸图标(存于 src-tauri/icons/,用 pnpm tauri icon  重新生成)。

架构

┌──────────────────────────────── Tauri window ──────────────────────────────────┐
│                                                                                │
│  Next.js (static export)              Rust (Tokio + tauri-plugin-shell)        │
│  ┌─────────────────────────┐          ┌──────────────────────────────────────┐ │
│  │ React UI                │  invoke  │  Tauri commands                      │ │
│  │ - ConversationList      │ ───────► │  (list, new, switch, send,           │ │
│  │ - Chat (text/thinking/  │          │   archive, set_model,                │ │
│  │   tool cards), Composer │ ◄─────── │   extension_ui_respond, …)           │ │
│  │ - ModelPicker (DeepSeek)│  event   │                                      │ │
│  │ - DialogHost (ext UI)   │          │  PiRpc: sidecar(plugin-shell) OR     │ │
│  │ - chatReducer (deltas → │          │    PI_BIN(tokio::process)            │ │
│  │   RenderedMessage[])    │          │  Store: SQLite metadata              │ │
│  └─────────────────────────┘          └─────────────────┬────────────────────┘ │
│                                                         │ stdin/stdout         │
│                                                         ▼ (LF-framed JSON)     │
│                                       ┌──────────────────────────────────────┐ │
│                                       │  pi --mode rpc subprocess            │ │
│                                       │  (bundled binary, any-model engine)  │ │
│                                       └──────────────────────────────────────┘ │
└────────────────────────────────────────────────────────────────────────────────┘

- 对话 是 /sessions/ 下的 pi .jsonl session 文件。我们在 /cetus.db 的 SQLite 里为它们建索引(id、title、session_file、model、时间戳、archived_at)。
- 切换:switch_session + get_messages 重放历史。整个 app 生命周期里只有一个 pi 进程。
- 流式:pi 发出 agent_start、带 assistantMessageEvent 增量的 message_update,以及 tool_execution_* 事件。前端的 chatReducer 把这些折叠成按 contentIndex 索引的稳定 RenderedMessage[],并用一张 toolCallId → block 旁表来路由执行更新。
- 分帧:严格 LF 的 JSONL。tauri-plugin-shell 以任意字节块投递 stdout,所以读取端维护自己的累加缓冲,按每个 \n 吐出一行,并剥掉可选的 \r。按 Unicode 分隔符切分的通用行读取器(Node readline)不符合规范。
- Sidecar 打包:src-tauri/binaries/pi- 打进 .app/Contents/Resources/。PI_BIN 环境变量是迭代 pi 的开发后门。
- CLI runtime:跑在 Claude Code / Codex / DeepSeek Harness 上的对话完全绕过 pi RPC —— cetus-bridge::cli_agent 为每个对话保持 Claude(或 DeepSeek Harness)streaming session 或 Codex app-server thread,由带单测的 EventTranslator 把事件翻译成 chatReducer 已经在消费的 PiEvent 流。上下文与后台终端通过 vendor session/thread 跨轮延续;可选的 per-conversation git worktree 用于隔离改动。
- Extension UI:当某个 pi extension 调用 ctx.ui.select() 等,pi 会通过事件流发出 extension_ui_request。前端 DialogHost 渲染一个对话框,并通过 extension_ui_respond Tauri 命令回复。

可复用的 bridge 包

host/extension bridge 被拆成了两个独立、与具体 provider 无关的包,可以单独依赖,无需引入整个 app:

- cetus-bridge(Rust crate)—— 产品无关的 host 运行时:围绕 pi --mode rpc 的 JSONL 子进程 RPC、确定性的 extension 加载、host tunnel 分类,以及可注入的 EventSink / TaskSpawner trait。Tauri、app 存储、模型 provider 选择都留在 crate 之外,由 app 侧适配器承接(tauri_bridge.rs、app_event.rs、model_bridge.rs)。examples/minimal_host.rs 给出了最小集成示例。
- @cetus/bridge-protocol(TypeScript)—— extension 侧协议:共享的 HOST_TUNNELS 哨兵列表、callHost()、toolResult(),以及 host tunnel 的类型定义。

两个包都是 MIT 协议,且不含任何 Cetus / DeepSeek 专属代码,其他 agent host 也可以复用同一套 bridge。协议与安全边界详见 docs/bridge.md。

友情链接

- LINUX DO —— 有理想的新社区。

许可证

MIT(与 pi 一致)。

上游仓库有新提交时邮件通知你(每天最多一封,无更新不打扰),随时一键退订。

💬 加入 DPharness 群聊

插件用法、部署报错、新插件第一时间同步——群里问,比一个人翻文档快。

点击加入 QQ 群
DPharness 群聊二维码,手机 QQ 扫码进群
扫码进群