开源、可自托管、企业级品质的 AI 工作平台。
当前阶段只服务个人用户:单用户、多节点的 OpenCode 控制面。
目录 · 当前阶段 · 企业级愿景 · 一分钟理解 · 核心能力 · 系统架构 · 快速开始 · 开发指南 · 相关文档 · 贡献指南 · 社区与支持 · 许可证
用现代 GUI 管理多台机器上的 lework agent,由 agent 管理本机 OpenCode:
- 统一查看节点、项目目录、Session、工具调用与权限审批;
- 查看 Diff、浏览文件、打开 Session 级终端;
- 节点主动出站连接控制面,不暴露任何入站端口,也不需要 SSH;
- 执行与会话状态以 OpenCode 为准,Lework 不实现自己的 Agent Runtime。
目标用户:拥有 2 台以上机器(笔记本、工作站、服务器、DGX Spark)的独立开发者 / 个人研究者。
「企业级」描述的是工程质量、私有化与可自托管能力,它属于品牌与宣传层,不代表当前已提供服务。
组织、部门、RBAC、多租户、计费、内置知识库不在当前阶段范围,也不作为现成能力宣传。旧企业版阶段的文档已归档到 docs/archive/。
控制面(本机浏览器)
├── 节点 A:lework agent → opencode serve
├── 节点 B:lework agent → opencode serve
└── 节点 C(DGX Spark):lework agent → opencode serve
选节点 → 选项目目录 → 打开或新建 Session → 发任务
→ 实时看消息 / 工具 / 审批 → 看 Diff / 文件 / 终端
一个窗口管理多台机器,不需要为每台机器开一个 TUI。
| 能力 | 说明 | 阶段 |
|---|---|---|
| 多节点注册与心跳 | agent 主动出站 WSS;断线重连;节点无入站端口 | 已实现 |
| OpenCode 进程管理 | agent 启动并监控本机 opencode serve,只绑定回环 |
已实现 |
| 统一 Session | 按目录创建 / 继续 / 中断 Session,查看消息、工具、审批 | 已实现 |
| Diff / 文件 / 终端 | 按本轮消息读 diff;目录内文件浏览与下载;Session 级 PTY | 已实现 |
| 多节点调度 | 跨节点选择执行位置 | I2 |
| Git 任务上下文 | A 项目、B 执行、结果回 A | I3 |
| 配置与 Action 控制面 | 插件、MCP、模型、Action 的读取、写入、回滚 | I4 |
Browser (Next.js: frontend/apps/control-plane)
│ HTTP + SSE + WebSocket
▼
Lework Control Plane (Go + SQLite, `lework serve`)
│ WSS outbound
▼
lework agent (`lework agent`) ──► opencode serve (127.0.0.1)
- 控制面:节点注册表、事件中心、浏览器 API、agent 网关、SQLite 存储;
- 节点侧:
lework agent负责注册、心跳、OpenCode 监管、PTY 与本地代理(Git/配置能力见 I3/I4); - 数据真相:Session、消息、diff、权限、文件均以 OpenCode 为准。
- Go 1.25+
- Node.js / pnpm(构建控制面界面)
- 目标节点已安装
opencode
git clone https://github.com/insmtx/lework.git
cd Lework
make build # 构建 frontend/apps/control-plane 并生成 bundles/lework只构建后端:
go build -o ./bundles/lework ./backend/cmd/lework/未生成前端静态资源时,浏览器访问 / 会看到构建提示页,API 仍可用。
./bundles/lework serve \
--listen 127.0.0.1:8787 \
--db ~/.config/Lework/controlplane.db \
--enrollment-token "$LEWORK_ENROLLMENT_TOKEN"默认只绑定回环地址。浏览器打开 http://127.0.0.1:8787/。
# /etc/lework/agent.yaml
control_plane_url: ws://127.0.0.1:8787/api/agent/connect
enrollment_token: "<与控制面一致的令牌>"
node_name: dev-box
workspace_roots:
- /home/me/projects
opencode:
binary: opencode
port: 4096
service_mode: shared./bundles/lework agent --config /etc/lework/agent.yamlworkspace_roots 限制可创建 Session 和读取文件的目录。完整协议与排障见 控制面运维。
Lework/
├── backend/
│ ├── cmd/lework/ # serve / agent 等进程入口
│ ├── internal/controlplane/ # 控制面:节点、事件、浏览器 API、agent 网关、SQLite
│ ├── internal/agentd/ # 节点 agent:注册、OpenCode 监管、PTY、WSS 传输
│ ├── agent/ tools/ types/ # 旧企业版执行内核(控制面不依赖)
│ └── config/
├── frontend/
│ ├── apps/control-plane/ # 当前主线浏览器界面
│ └── apps/web, apps/desktop/ # 旧产品,暂不维护
├── deployments/
├── docs/ # product / architecture / design / frontend / operations / archive
├── Makefile / go.mod / AGENTS.md / CONTRIBUTING.md / LICENSE
make build # 构建控制面前端 + lework 二进制
make frontend-control-plane # 只构建控制面静态界面
go test ./... # 默认测试
go test ./backend/cmd/lework ./backend/internal/agentd/...
go vet ./...- 模块路径:内部 import 使用
github.com/insmtx/lework/...; - 控制面不实现 Agent Runtime:不要为控制面新增自建 runtime、任务状态机或组织权限模型;
- OpenCode 是唯一真相源:不要复制 session / message / event 状态;
- 节点无入站端口:所有连接由 agent 主动出站;
- 更完整的工程约束见根目录 AGENTS.md。
| 文档 | 内容 |
|---|---|
| docs/product/overview.md | 产品定位与核心概念 |
| docs/product/roadmap.md | I0–I5 路线与退出标准 |
| docs/product/current-limitations.md | 当前能力边界(I1-B) |
| docs/architecture/overview.md | 目标架构 |
| docs/architecture/as-built.md | 当前实现基线 |
| docs/architecture/agent-runtime.md | lework agent 与 OpenCode 边界 |
| docs/operations/control-plane.md | 安装、启动、浏览器协议 |
| docs/operations/troubleshooting.md | 排障 |
| docs/operations/project-structure.md | 仓库结构索引 |
| docs/README.md | 文档规范与索引 |
| docs/frontend/overview.md | 控制面前端架构 |
| lework.ai | Lework 官网 |
我们欢迎各种形式的贡献——Issue、文档、代码、使用反馈。
- 提 Issue:前往 GitHub Issues 报告缺陷或提出功能建议;
- 提 PR:Fork 本仓库 → 创建功能分支 → 提交变更 → 发起 Pull Request。建议先开 Issue 讨论设计;
- 开发约定:动手前请阅读根目录 AGENTS.md(仓库结构、工程与代码规范)与上方开发指南。
- 使用问题 / 缺陷报告:GitHub Issues
- 功能需求与讨论:同上,请带
feature/discussion标签发起 - 产品官网:lework.ai
Lework 依据 Lework Open Source License 授权:以 Apache License 2.0 为基础,附加若干商业使用条件(英文文本具有法律效力)。涉及多租户 SaaS、LOGO 与版权信息等特定情形时,需联系维护者取得商业许可,详见 LICENSE 文件。