核心概念
工具系统
OpenCowork 工具系统的架构与内置工具详解。
工具系统 / Tool System
工具系统让 Agent 能够与外部世界交互,位于 src/renderer/src/lib/tools/。
ToolHandler 接口 / Interface
每个工具实现 ToolHandler 接口:
interface ToolHandler {
// JSON Schema 工具定义(传给 LLM)
definition: Tool
// 执行工具,返回结果
execute(input: unknown, ctx: ToolContext): Promise<ToolResultContent>
// 可选:是否需要用户审批
requiresApproval?(input: unknown, ctx: ToolContext): boolean
}工具注册 / Registration
工具通过全局 toolRegistry 注册:
import { toolRegistry } from '@renderer/lib/agent/tool-registry'
toolRegistry.register(myTool)
toolRegistry.unregister('tool-name')插件工具在插件启用/禁用时动态注册/注销。
内置工具 / Built-in Tools
文件系统
| 工具 | 描述 |
|---|---|
Read | 读取文件内容,支持行范围 |
Write | 写入文件(覆盖) |
Edit | 精确字符串替换编辑 |
搜索
| 工具 | 描述 |
|---|---|
Glob | 文件名模式匹配 |
Grep | 内容正则搜索(基于 ripgrep) |
Shell
| 工具 | 描述 |
|---|---|
Bash | 执行 Shell 命令,支持超时 |
任务管理
| 工具 | 描述 |
|---|---|
TaskCreate | 创建任务 |
TaskUpdate | 更新任务状态 |
TaskGet | 获取任务详情 |
TaskList | 列出所有任务 |
应用插件工具
| 工具 | 描述 |
|---|---|
ImageGenerate | 根据提示词生成图片(1–4 张),需启用图像插件 |
DesktopScreenshot | 截取当前屏幕,属于隐藏的桌面控制插件能力 |
DesktopClick / DesktopType / DesktopScroll / DesktopWait | 桌面交互工具,和图像工具一起由应用插件层动态注册 |
其他
| 工具 | 描述 |
|---|---|
AskUserQuestion | 向用户提问(支持选项) |
Preview | 在侧边栏预览文件 |
Notify | 发送系统通知 |
Skill | 执行预定义技能/工作流 |
Plan 系列 | 计划模式工具 |
Cron 系列 | 定时任务工具 |
工具审批 / Approval
危险操作(如 Shell 命令、文件写入)会触发用户审批:
requiresApproval(input, ctx) {
// forceApproval 模式下跳过审批(插件自动回复)
if (ctx.forceApproval) return false;
return true;
}审批结果会缓存,相同操作不会重复询问。