Files
agent-radar/articles/openwork.md
T
gitea-publish de6cf8f3c0 feat: 补齐 5 篇深度文(maka/openclaw/openwork/qwenpaw/tutti)+ 重算矩阵 + 总纲回填
- articles/: 新增 5 篇深度文(八段结构,每篇含 claim_vs_reality)
  - maka.md → emlog_id=105
  - openclaw.md → emlog_id=106
  - openwork.md → emlog_id=107
  - qwenpaw.md → emlog_id=108
  - tutti.md → emlog_id=109
- data/projects/*.yaml: 回写 emlog_id 到 6 个档案(orca 前序已回写)
- articles/00-overview.md: build_matrix.py 重算矩阵 + 回填总纲
2026-09-03 23:39:58 +08:00

240 lines
22 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# openwork 深度拆解:把「能力」而不是「桌面」做成产品
> **速览**
>
> | 项 | 值 |
> | --- | --- |
> | 仓库 | [different-ai/openwork](https://github.com/different-ai/openwork) |
> | 一句话 | "The open-source alternative to Claude Cowork (powered by opencode)"——但它替代的不是 Cowork 本身,而是 Cowork 唤起的「能力复用」诉求 |
> | Star / Fork / Issues | 23253 / 2307 / 414 open(2026-09-01) |
> | 主语言 / 体积 | TypeScript 89.9% / ~291 MB |
> | 最新版本 / 节奏 | v0.18.40 / 约 1 天/版本 |
> | 许可证 | **目录切分许可(GitLab 式)**:ee/ 之外 MIT,ee/ 为 OpenWork EE License(SPDX=NOASSERTION,**L3**) |
> | 成熟度 | **0.x 活跃**(工程治理七家最规范,产品仍在 0.x) |
>
> **一句话结论**:七个样本里唯一不抢「桌面入口」、专做「能力分发」的项目——它把自己做成一个 MCP server 让别人来连,工程治理最好,但它和自称要替代的东西不是一个物种。
---
## 0. 先给结论
openwork 的 tagline 是 *"The open-source alternative to Claude Cowork (powered by opencode)"*,但真正定义它的是 README 里一句容易被忽略的话:**"The desktop app is there when you want a dedicated workspace, but it is not required"**——桌面端只是可选项,主体是 OpenWork MCP 与 Den 控制面。
它真正有意思的地方有三个:
1. **它是七个样本里唯一站在「能力分发层」的。** 别人卷的是桌面入口、引擎兼容、执行记录、个人助理,openwork 卷的是"一套 skills / MCP / 连接,怎么让组织里的人在不同工具里复用"。它的核心资产不是桌面 app,是 **OpenWork MCP** 和 **Den 控制面**——把 skills / MCP / 连接服务做成可跨工具、跨人、跨机器复用的组织级能力包。
2. **它用「反向注入」解决多引擎问题。** 七个样本里大多数项目的多引擎策略是「我去适配你的引擎」,openwork 反过来:**把自己做成 MCP server,让各引擎来连**。对外只暴露两个工具——`search_capabilities` 与 `execute_capability`。所有引擎都以同一个 MCP 客户端身份接入,拿到的是能力调用,不是执行控制。OpenWork 不接管 agent 的执行循环、不负责上下文管理、不做权限回调。
3. **它是七个项目里工程治理最规范的。** 强制 DCO sign-off(每个 commit 都要 Signed-off-by),ee/ 目录的改动还需额外 CLA;`evals/` 目录放可执行测试规格并要求 PR 附测试证据;`worlds/` 放声明式的开发与测试环境定义。SPDX 为 NOASSERTION 恰恰是「不够开源」的误读——它只是根目录 LICENSE 是混合声明文件,开放度分目录看(ee/ 之外纯 MIT)。
而它最大的问题也有三个:**形态与宣称错位**(Cowork 是桌面操控型 agent,openwork 是能力分发型 MCP 层,二者不是一个物种)、**「跨引擎」是能力面而非执行面**(对 OpenCode 是原生,对其余引擎只通过 2 个 MCP 工具对接)、**ee/ 目录生产使用需付费订阅**(5 人以下/30 天评估/开发测试豁免,但组织规模上来就要钱)。
---
## 1. 赛道定位:它站在哪一层
沿用本系列的分层法:
```text
┌──────────────────────────────────────────────────────────────┐
│ 编排 / 工作台层 │
│ 跨引擎、跨 worktree、跨交付物的调度与观测外壳 │
│ ── orca(执行编排)/ iPolloWork(桌面工作台)在这里 ── │
├──────────────────────────────────────────────────────────────┤
│ 能力分发层(openwork 占的一层) │
│ 把 skills / MCP / 连接做成可跨工具复用的组织级能力包 │
│ ── openwork 的 OpenWork MCP + Den 控制面在这里 ── │
├──────────────────────────────────────────────────────────────┤
│ 编辑器内 Agent 层 │
│ 嵌在 IDE / 编辑器里的交互层 │
├──────────────────────────────────────────────────────────────┤
│ 执行引擎层 │
│ 真正跑 agent loop 的地方 │
│ ── Codex / Claude Code / OpenCode / 各引擎在这里 ── │
└──────────────────────────────────────────────────────────────┘
```
**openwork 的站位在七个样本里是独一份**:它对**桌面入口**的争夺是零(桌面 app 明确标为可选),对**执行层**的争夺也是零(不接管任何引擎的 agent loop)。它抢的是中间那层——**「能力从哪来、谁能用、怎么分发」**。
这与 orca 和 iPolloWork 形成鲜明对照:orca 用 PTY 外壳把 30+ 引擎拉平到最薄的一层(执行编排),iPolloWork 用原生 adapter 给个别引擎做深(桌面工作台),openwork 直接不碰执行层和桌面入口——它想回答的问题不是"怎么接最多 agent"或"怎么做出最好用的工作台",而是**"组织的能力怎么一次创建、处处复用"**。
风险也在这里:**「跨工具能力分发」是引擎厂商最容易原生化的一层**——一旦 Anthropic / OpenAI 官方的 skills 市场与组织管理后台做好跨工具分发,openwork 的价值窗口就关闭了。它的护城河(组织侧能力分发 + 工作流网络效应)建立在一个时间窗口上:**官方还没做好这件事**。这是它最该被盯住的地方。
---
## 2. 业务维度:它靠什么活着
**目标用户**三类,都很垂直:
- 已在使用 Codex / Claude Code / Cursor 且**不想换工具**的开发者
- 需要**统一管控 agent 能力**(谁能用什么模型、谁能拿到什么 skill)的中大型组织
- 想把自己搭好的工作流**分发给同事或朋友**的团队
**变现路径:Den 订阅(组织控制面)。** 免费额度写得很明确:5 人以下组织的非 Enterprise 功能全免、任意规模 30 天评估、开发测试永久免费。个人和小团队几乎不会触发付费条件,但组织规模上来就要订阅——这是典型的 open-core 模型。
**许可证**是目录切分许可(GitLab 式):ee/ 之外为 MIT(L1 级),ee/ 为 OpenWork EE License(source-available,生产使用需订阅)。整体 SPDX=NOASSERTION,openness=L3。有一个值得单独说的机制:**ee/ 版本公开发布满两年后自动追加 MIT 授权**(Grant of Future License)——早期版本最终也会进入开源域,更早版本仍受原 FSL-1.1-MIT 约束,不自动升级。客户端侧资源(image / font / CSS / 编译产出的 JS)始终为 MIT。
**护城河**由两件事构成:**组织侧的能力分发与治理**(谁能用什么模型、谁能拿到什么 skill),以及**「一次创建、处处复用」带来的工作流网络效应**。一旦组织把内部 skills 都发布到 Den,迁移成本取决于是否有导出路径——README 未说明,这是一个未明的锁定风险。
**竞争风险**非常直接:最容易被 Anthropic / OpenAI 官方的 skills 市场与组织管理后台正面取代。openwork 的价值恰恰建立在「官方还没做好跨工具能力分发」这个时间窗口上——窗口一关,护城河就变成一张过期的门票。
---
## 3. 场景维度:它在什么场合被用
**人机协作是审批式**,但审批不在执行层而在**组织层**:能力调用需人工在浏览器登录并选择组织;企业侧由管理员通过策略管控。它不做工具越界审批(那是执行引擎的事),它管的是「谁有资格调用什么能力」。
**三端形态,MCP 是主体:**
| 形态 | 定位 | 成熟度 |
| --- | --- | --- |
| OpenWork MCP(远程服务) | **主体**——能力面,不是执行面 | 核心产品 |
| Den 控制面(Web) | 组织级管控:策略下发、配额、审计 | 付费层 |
| 桌面应用(Electron) | **可选**——专注工作区,非必需 | 0.x 活跃 |
**典型用例三类:**
- 团队写好一套内部 skill,通过 Den 发布到组织,成员在各自惯用的 agent(Codex / Claude Code / Cursor)里调 `search_capabilities` 直接用
- 管理员限制部分成员只能使用指定 model provider,并统一配置共享连接(Google Workspace / Microsoft 365)
- 个人把工作流分享给朋友,对方装一个 MCP 就能用
**交付物**是 **workflow、skill-package、capability**——三个都不是代码。这与 orca 的「code + diff」、maka 的「code + eval-report + execution-record」、iPolloWork 的「生成后可编辑的多形态交付物」完全不同:openwork 交付的是**能力本身**,而不是能力的执行结果。
---
## 4. 技术维度:它怎么做到的
### 架构:MCP 远程服务 + 可选桌面 + Web 控制面
openwork 的技术骨架一句话:**把自己做成 MCP server,让各引擎来连**。技术栈是 Electron + React + TypeScript + Node.js 24 + pnpm + MCP。
```text
┌─ Codex / Claude Code / Cursor / OpenCode / 任意 MCP client ─┐
│ │
│ 各引擎 ──MCP 客户端──> OpenWork MCP Server │
│ │ │
│ ├──> search_capabilities │
│ │ (发现可用能力) │
│ └──> execute_capability │
│ (调用能力,不接管执行循环) │
│ │
│ Den 控制面(Web):策略下发 / 配额管控 / 访问审计 │
│ 桌面 app(可选):OpenCode 生态,专属工作区 │
└─────────────────────────────────────────────────────────────┘
```
与 orca 的「我去适配你的引擎」完全相反:orca 是引擎抽象层(PTY 外壳把 30+ 引擎拉平),openwork 是**能力注入层**(把能力推给各引擎)。
### 引擎抽象:对等且都浅
| 维度 | openwork 的做法 |
| --- | --- |
| 兼容判据 | **MCP 客户端身份**(任何能连 MCP 的引擎都能接) |
| 抽象层 | OpenWork MCP(能力面,不是执行面) |
| 对外暴露 | **只两个工具**:search_capabilities + execute_capability |
| 执行控制 | **不接管**——不接管 agent loop、不管上下文、不做权限回调 |
| 真正深度绑定 | OpenCode(仓库描述 powered by opencode,桌面端属其生态) |
这是 `engine_neutral = 6` 的含义:**它接得住 4+ 引擎,但都只在能力面**。对外宣称的「跨引擎通用」与内部实际的主从关系存在落差——OpenCode 是原生,其余是 MCP 外挂。这与 iPolloWork 的「Codex 仅 MCP 控制面」是同一个问题的两种解法:iPolloWork 把 MCP 当补丁(主体是桌面),openwork 把 MCP 当主体(桌面是可选)。
### 多 agent:未强调,重心在能力共享与治理
openwork 不强调多 agent 编排——它不关心「agent 怎么协作完成一件事」,它关心的是「能力怎么在组织里流转」。这与 tutti(唯一把「多人」写进定位)也完全不同:tutti 的多人是**同一空间内的人与 agent 协作**,openwork 的多人是**跨工具的能力分发**。
### 本地优先:可本地跑,但核心服务在云端
`local_first_score = 6`。桌面 app 本身 BYO(自带模型,不绑定共享账号),skills 可以本地跑;但核心服务——Den 控制面、OpenWork MCP 远程端点(https://api.openworklabs.com/mcp/agent)——是**云端**的。组织管控、能力分发、审计追踪都依赖云服务。这决定了它不是 local-first 项目,而是 **cloud-anchored + local-optional** 项目。
### 扩展体系:skills 是一等公民
- **skills**:一等公民——可发布、可分配到组织/团队/个人;支持导入 Agent Plugins 与 Anthropic 兼容插件并转为 OpenWork MCP 能力
- **plugins**:通过 marketplace 发布与分配
- **MCP**:自身即以 MCP server 形态对外提供服务,同时也消费下游 MCP 连接
扩展体系的中心不是「插件市场」,是 **Den 的能力分发管道**——skill 不是装在本地的,是发布在 Den 上、由组织分配到具体成员/团队的。
### 观测性:观测「谁用了什么能力」,不是「agent 怎么把事做完的」
Den 提供推理配额管控与访问审计;桌面 app 侧未见 agent 执行轨迹的记录设计。openwork 的观测维度是**能力调用层**(谁、什么时候、调了什么能力、配额用了多少),不是**执行层**(agent 的 tool call 序列、上下文演化、终止事件)。这与 maka 的 append-only 执行记录、orca 的 diff/review 完全不同——它观测的是「能力的流转」,不是「执行的轨迹」。
---
## 5. 横向对比
> 说明:下表项目均已收录进本系列追踪库,数据来自各自档案(`data/projects/*.yaml`,2026-09-01 快照)。"引擎中立度 / 本地优先"取自档案 `chart.*`(1–10)。
| 维度 | openwork | orca | iPolloWork | maka | QwenPaw | Tutti | OpenClaw |
| --- | --- | --- | --- | --- | --- | --- | --- |
| 站位层次 | **能力分发层(MCP 主体)** | 执行编排层(并行 fan-out) | 桌面工作台层 | 执行记录层 + 自带引擎 | 个人助理执行层 | 多人×多 agent 协作层 | 个人助理执行层(多渠道 Gateway) |
| 引擎中立度(1–10) | 6(能力面接 4+ 引擎) | **9(全场最高)** | 7 | 1(不参与该赛道) | 2(自身即引擎) | 8(ACP 双层) | 1(自身即引擎) |
| 本地优先(1–10) | 6(核心服务在云端) | 6 | 7 | **10(全场最高)** | 9 | 7 | 8 |
| 交付物 | **能力(MCP)+ workflow + skill-package** | code + diff + review-comment | 生成后可编辑的多形态交付物 | code + eval-report + execution-record | 个人助理任务 | 多人协作会话 | 个人助理任务 |
| 许可证 | L3(目录切分:ee/ 外 MIT / ee/ EE) | MIT(L1) | L3 source-available | Apache-2.0(L1) | Apache-2.0(L1) | Apache-2.0(L1) | MIT(L1,机器读不出) |
| 成熟度 | 0.x 活跃(工程治理最规范) | 原型期(一天一版) | beta(v0.50.x) | 孵化期(无正式 release) | beta 活跃 | 快速成长期 | 高速迭代(约 4 天/版本) |
| 观测维度 | **谁用了什么能力** | 执行轨迹 + diff | 生成结果 | 执行记录全落盘 | 五层安全审计 | 协作会话 | 多渠道日志 |
| 变现 | **Den 订阅(open-core)** | 无 | 无 | 无 | 无 | open-core | 无 |
openwork 在谱系里的位置,用一句话概括:**唯一站在「能力分发层」、不抢桌面入口、不碰执行层、把 MCP 当主体当产品的那个角落。** orca 卷的是「怎么接最多引擎」,iPolloWork 卷的是「怎么做出最好用的工作台」,maka 卷的是「agent 干了什么能不能证明」,openwork 卷的是「组织的能力怎么一次创建、处处复用」。七个样本里,只有它交付的是「能力」而不是「能力的执行结果」。
---
## 6. 宣称 vs 实测
这一节是本系列最看重的部分。openwork 项目方没有说谎——它的 README 在许可证和桌面定位上都做了明确披露——但「披露得充分」和「没有错位」是两回事。
**① 宣称:「Claude Cowork 的开源替代品」。**
**实际**:形态完全不同。Cowork 是桌面操控型 agent(直接操作你的电脑完成工作);openwork 是能力分发型 MCP 层,桌面 app 被明确定位为可选——README 原文 *"The desktop app is there when you want a dedicated workspace, but it is not required"*。它替代的是 Cowork 唤起的「能力复用」诉求,**不是 Cowork 本身**。用 tagline 里的「alternative」来理解产品形态,会得出错误预期。
**来源**:README 开篇与「Use OpenWork from any agent」段。
**② 宣称:跨 Codex / Claude Code / Cursor / OpenCode 多引擎通用。**
**实际**:对 OpenCode 是原生的(仓库描述 powered by opencode,桌面端属其生态);对其余引擎只通过自己暴露的两个 MCP 工具对接。这是**能力调用面**,不是**引擎执行面**——openwork 不接管这些引擎的执行循环、上下文与权限。对外宣称的「跨引擎」与内部实际的主从关系存在落差:OpenCode 是亲儿子,其余是 MCP 外挂。
**来源**:README「It exposes two tools」段;仓库 description「powered by opencode」。
**③ 宣称:free, open-source(免费开源)。**
**实际**:需要分目录看:ee/ 之外确实 MIT 且免费;但 ee/(Den 组织控制面、MCP 网关、推理)属 source-available,生产使用需付费订阅,只有 **5 人以下组织、30 天评估、开发测试**三种情形豁免。个人免费,团队与企业要付费。这不是「开源变味」,而是标准的 open-core 模型——但「free, open-source」这个 tagline 没有把 open-core 的边界说清楚。
**来源**:README Licensing 段 + ee/LICENSE 原文 72 行。
**④ 宣称:(无明确宣称,但 SPDX 为 NOASSERTION,易被误读为「不够开源」)。**
**实际**:恰恰相反——它是七个项目里**工程治理最规范**的:强制 DCO sign-off(每个 commit 都要 Signed-off-by)、ee/ 目录改动需额外 CLA、`evals/` 目录放可执行测试规格并要求 PR 附测试证据、`worlds/` 放声明式的开发与测试环境定义。NOASSERTION 只因根目录 LICENSE 是混合声明文件,不代表开放度低——ee/ 之外是纯 MIT,且 ee/ 版本满两年自动追加 MIT(Grant of Future License)。
**来源**:README「Getting started (contributors)」与「Sending a pull request」段。
四条里有三条是 README **自己写出来的**——但披露方式和产品定位的错位是结构性的:tagline 说「Cowork 的替代品」,实际是「能力分发层」;tagline 说「free, open-source」,实际是 open-core;tagline 说「跨引擎通用」,实际是能力面通用。这不是欺骗,是**营销叙事与产品形态的错位**——用 Cowork 的品牌势能来给一个不同物种的产品引流。
---
## 7. 结论:什么人该用它
**该用:**
- 已固定在某款 agent 上(Codex / Claude Code / Cursor)、**不想换工具**、只想让团队能力跨工具复用的开发者
- 需要**统一管控 agent 能力与模型配额**的组织 IT——Den 的策略下发、配额管控、访问审计是七个样本里唯一把「组织能力治理」做成产品的
- 想把自己搭好的工作流**分发给同事或朋友**、对方装一个 MCP 就能用的团队
- 5 人以下小团队——免费额度覆盖所有非 Enterprise 功能,30 天评估期足够验证
**不该用:**
- 想要一个**开箱即用的桌面 agent 工作台**的人——桌面 app 是可选壳,不是主体;六个内置能力不如 orca / iPolloWork 的丰富
- 以为拿到的是**完整 Cowork 平替**的人——形态完全不同,它不操作你的电脑,它分发能力
- 需要**本地优先 / 数据不出机器**的团队——核心服务在云端(Den + OpenWork MCP 远程端点),local_first_score 只有 6
- 以为 **SPDX=NOASSERTION 代表开放度低**的许可证审查者——ee/ 之外是纯 MIT,ee/ 满两年自动转 MIT;开放度分目录看,不是整体看
**再看看:** 等四件事落地再评估——① Den 的**能力导出路径**是否出现(当前无导出说明,锁定风险未明)② 官方 skills 市场 / 组织管理后台是否开始做跨工具分发(这是它护城河的头号威胁,**每季度盯一次 Anthropic / OpenAI 的动作**)③ ee/ 第一批版本满两年后是否如期追加 MIT(Grant of Future License 的兑现记录)④ 桌面 app 是否会从「可选」变成「主体」——如果它开始卷桌面体验,定位会从能力分发层漂移回桌面工作台层,届时需要重新评估其在谱系中的位置。
---
## 8. 追踪备注
- **数据日期**:2026-09-01(GitHub API 快照)
- **指标**:★ 23253 / fork 2307 / open issues 414 / subscribers 89 / ~291 MB / TypeScript 89.9% + JavaScript 6.7%
- **最新版本**:v0.18.40,约 1 天/版本
- **源码镜像**:`gitinbox/openwork`(**public**,source-only 快照——排除 `ee/` 与 `LICENSES/LicenseRef-OpenWork-EE.txt` 后为纯 MIT,判 public;上游 291 MB,本机到 GitHub 实测 50 KB/s,拉取耗时较长)
- **结构化档案**:`data/projects/openwork.yaml`
**下次跟进点:**
1. Den 控制面:能力导出路径是否出现(当前无导出说明,锁定风险未明)
2. 官方威胁:Anthropic / OpenAI 的 skills 市场与组织管理后台是否开始做跨工具分发
3. 许可证兑现:ee/ 第一批版本满两年后是否如期追加 MIT(Grant of Future License 的兑现记录)
4. 定位漂移:桌面 app 是否从「可选」变成「主体」——如果开始卷桌面体验,需要重新评估其在谱系中的位置
---
<sub>本文为「全球智能体开源应用追踪」系列之一 · 总纲见系列索引 · 数据与脚本开源于 `gitinbox/agent-radar`</sub>