架构技术评论

再试用一个5K星开源cowork different-ai/openwork

Image

different-ai/openwork 又是一个开源cowork项目,旨在提供一个功能强大的、可扩展的 AI 工作流系统,定位为 Anthropic Claude Cowork 的开源替代品。该项目构建于 OpenCode——一个开源的 AI 编码代理——之上,通过提供一个精致的图形用户界面(GUI),将复杂的命令行操作转化为非技术用户也能轻松上手的引导式工作流。

OpenWork 的核心目标是将“代理式工作”产品化,摆脱传统开发者工具中常见的终端界面和复杂的配置。它通过一个原生的桌面应用程序,为用户提供选择工作区、启动任务、观察进度、批准权限以及复用模板和技能等一系列流畅体验。

根据其 GitHub 仓库信息,该项目广受欢迎,拥有超过 5,600 个 Star 和近 400 个 Fork,显示出其在开源社区中的高度关注度和活跃度。

关键信息
描述
项目定位
开源的 Claude Cowork 替代品,基于 OpenCode
核心目标
将代理式工作产品化,提供给非技术用户
技术形态
使用 Tauri 构建的原生桌面应用
许可证
MIT

2. 技术架构与实现

OpenWork 采用了一套现代化的、跨平台的技术栈,通过 pnpm workspace 管理的 monorepo 架构,将前端 UI 和桌面端外壳清晰地分离为两个独立的包。

2.1. 整体架构

项目的核心架构分为两部分:

  • packages/app: 负责用户界面的 Web 应用。它使用 Solid.js 作为前端框架,并借助 Vite 进行构建。这部分代码是纯粹的 UI,可以独立在浏览器中运行(dev:web 模式),也可以被嵌入到 Tauri 的 WebView 中。
  • packages/desktop: 负责构建原生桌面应用的 Tauri 外壳。它包含 src-tauri 目录,其中存放着所有 Rust 后端代码和 Tauri 的相关配置。这部分代码负责与操作系统交互、管理窗口、处理原生 API 调用以及启动和管理底层的 OpenCode 引擎。

2.2. 技术栈详情

层面
技术
作用
桌面框架
Tauri 2.x
提供跨平台(macOS, Windows, Linux)的 WebView 容器,使用 Rust 作为后端,保证了高性能和安全性。
前端框架
Solid.js 1.9.0
一个高性能的、响应式的 JavaScript 框架,以其精细化的响应式模型和接近原生 JS 的性能而著称。
后端语言
Rust (2021 Edition)
用于编写 Tauri 的后端逻辑,确保内存安全和高并发性能。
构建工具
Vite 6.0.1
为前端开发提供极速的热模块替换(HMR)和优化的构建流程。
样式方案
Tailwind CSS v4
一个实用工具优先的 CSS 框架,结合 Radix UI Colors 实现高度可定制和一致的视觉设计。
状态管理
Solid Primitives
使用 Solid.js 的原生 Store 和 @solid-primitives/storage、@solid-primitives/event-bus 等库进行状态管理。
包管理器
pnpm 10.27.0
高效的 Node.js 包管理器,通过其 workspace 功能支持 monorepo 架构。

2.3. 与 OpenCode 的集成

OpenWork 的核心功能依赖于其底层的 OpenCode 引擎。它通过 @opencode-ai/sdk 与 OpenCode 服务器进行通信。集成方式主要有两种:

  • Host 模式: OpenWork 在本地启动一个 OpenCode 服务器实例,该实例绑定在本地回环地址(如 127.0.0.1),UI 通过 SDK 与其通信。这种模式让用户可以在自己的机器上离线运行 AI 任务。
  • Client 模式: OpenWork 作为一个远程客户端,连接到一个已经存在的 OpenCode 服务器。这种模式使得移动端(未来规划)或轻量级客户端可以控制一个远程的、更强大的主机来执行任务。

通信主要通过 SSE (Server-Sent Events) 实现实时更新,确保 UI 能够流式显示 AI 的响应、任务计划的变更和权限请求。

3. 开发配置 (package.json) 分析

项目的 package.json 文件揭示了其现代化的开发工作流和对代码质量的重视。

3.1. Monorepo 与脚本

根目录的 package.json 主要定义了工作区(workspace)的脚本,通过 pnpm --filter 命令将指令分发到 app 或 desktop 包。这种结构使得开发者可以方便地对整个项目或特定部分进行操作。

脚本命令
描述
pnpm dev
启动完整的 Tauri 桌面应用进行开发。
pnpm dev:ui
仅启动前端 UI 部分,用于快速 UI 迭代。
pnpm build
构建生产版本的桌面应用。
pnpm test:e2e
运行端到端测试,覆盖了会话切换、文件系统引擎等多个核心功能。
pnpm typecheck
对 TypeScript 代码进行静态类型检查。
pnpm bump:*
提供 patch, minor, major 三种级别的版本号自动提升脚本,简化了发布流程。

3.2. 核心依赖

packages/app 的依赖项清晰地展示了其技术选型:

  • solid-js: 核心前端框架。
  • @tauri-apps/api: 提供从前端调用 Rust 后端原生功能的接口。
  • @tauri-apps/plugin-*: 使用了一系列 Tauri 官方插件,如 dialog(文件对话框)、opener(打开外部链接)、process(进程管理)和 updater(应用自动更新),增强了桌面应用的原生能力。
  • @opencode-ai/sdk: 用于与 OpenCode 引擎交互的核心 SDK。
  • lucide-solid: 提供了一套美观的图标库。

packages/desktop 的依赖则非常精简,仅包含 @tauri-apps/cli 作为开发依赖,用于驱动 Tauri 的开发和构建命令。

4. 特点与使用方法

OpenWork 不仅仅是一个 OpenCode 的图形界面,它还引入了自己独特的设计理念和功能,旨在提升用户体验。

4.1. 核心特点

  • 可扩展性: 用户可以通过安装 skills 和 plugins 来扩展 OpenCode 的能力,OpenWork 提供了图形化的技能管理器来简化这一过程。
  • 可审计性: 所有的任务执行步骤、工具调用和 AI 思考过程都被记录下来,形成一个清晰的时间线,方便用户审计和理解 AI 的行为。
  • 权限管理: 遵循最小权限原则,任何需要访问文件系统或执行敏感操作的行为都必须得到用户的明确授权。UI 会弹出清晰的权限请求对话框。
  • 模板化: 用户可以将常用的工作流保存为模板,方便一键启动,极大地提升了效率。
  • 工作区 (Workspace): 这是 OpenWork 引入的一个新概念,通过一个 .json 文件定义一个项目所需的所有 OpenCode 原语(如技能、插件等),简化了项目的配置和分享(此功能仍在开发中)。

4.2. 使用方法

对于最终用户,使用流程被设计得非常简单:

  1. 下载与安装: 从 GitHub Releases 页面下载对应操作系统的安装包(如 .dmg for macOS)并安装。
  2. 选择工作区: 打开应用后,选择一个本地文件夹作为项目的工作目录。
  3. 发起任务: 在输入框中输入自然语言描述的任务目标。
  4. 监控与交互: 应用界面会实时显示 AI 的执行计划(Todo List)、当前的执行步骤和思考过程。当需要权限时,会弹出对话框等待用户批准。
  5. 复用与分享: 用户可以将成功的任务流保存为模板,供未来使用。

对于开发者,项目提供了完整的本地开发指南,仅需安装 Node.js、pnpm 和 Rust 工具链即可开始贡献。

5. 总结与展望

OpenWork 是一个雄心勃勃的项目,它成功地将 OpenCode 这一强大的开发者工具,通过精心设计的 UI 和交互体验,带给了更广泛的非技术用户群体。它不仅是 Claude Cowork 的一个开源替代品,更在可用性、安全性和可扩展性方面展现了自己独特的设计哲学。

该项目在技术选型上非常现代,Tauri + Solid.js + Rust 的组合在保证高性能的同时,也提供了优秀的开发体验。其清晰的 monorepo 架构、完善的开发脚本和对测试的重视,都为项目的长期健康发展奠定了坚实的基础。

展望未来,随着“工作区”概念的完全实现和移动端 Client 的推出,OpenWork 有潜力成为连接 AI 代理能力与普通用户日常工作流的重要桥梁,真正实现“人人可用”的 AI 自动化。

6. 试用

构建在opencode之上,首次启动如下

Image

界面十分简洁

Image

授权弹出

Image

步骤太多就成这样了,UI需要优化下

Image

最后

Image

效果挺不错

Image

这个虽然UI简单,但操作流畅,首次试用感觉很稳定,效果也不错。