OpenClaw拆解:40+工具箱 OpenClaw之所以能够轻松顺利地完成一些复杂任务除了有合理且优秀的提示词外还有另外一大功臣丰富的工具箱。一、工具总数OpenClaw 共有40 个工具分为以下几个类别类别数量说明核心工具5 个read, write, edit, exec, process会话管理7 个sessions_list, sessions_history, sessions_send, sessions_spawn, sessions_yield, session_status, subagents网络工具4 个web_search, web_fetch, browser, tavilyOpenClaw 核心14 个gateway, agents_list, cron, nodes, canvas, tts, message 等媒体工具3 个image, image_generate, pdf沙盒工具3 个sandboxed_read, sandboxed_write, sandboxed_edit其他5 个apply_patch, host_workspace_edit, host_workspace_write,memory_search,memory_get二、工具定义位置外部依赖import{codingTools,createReadTool,createWriteTool,createEditTool}frommariozechner/pi-coding-agent;说明基础工具read, write, edit来自外部库mariozechner/pi-coding-agent三、工具定义结构通用模式functioncreateXxxTool(options){return{name:xxx,// 工具名称description:...,// 工具描述parameters:{// 参数定义JSON Schematype:object,properties:{...},required:[...]},execute:async(toolCallId,params,signal,onUpdate){// 执行逻辑returnresult;}};}示例createExecToolfunctioncreateExecTool(defaults){return{name:exec,description:Run shell commands (pty available for TTY-required CLIs),parameters:{type:object,properties:{command:{type:string,description:Command to execute},background:{type:boolean,description:Run in background},yieldMs:{type:number,description:Milliseconds to wait before backgrounding},// ...},required:[command]},execute:async(toolCallId,params,signal,onUpdate){// 执行 shell 命令// 处理后台任务// 返回结果}};}四、完整工具列表核心工具5 个工具名函数说明readcreateReadTool读取文件内容writecreateWriteTool创建或覆盖文件editcreateEditTool精确编辑文件execcreateExecTool执行 shell 命令processcreateProcessTool管理后台进程会话管理工具7 个工具名函数说明sessions_listcreateSessionsListTool列出其他会话sessions_historycreateSessionsHistoryTool获取会话历史sessions_sendcreateSessionsSendTool发送消息到其他会话sessions_spawncreateSessionsSpawnTool创建子代理会话sessions_yieldcreateSessionsYieldTool结束当前回合session_statuscreateSessionStatusTool显示会话状态subagentscreateSubagentsTool管理子代理OpenClaw 核心工具14 个工具名函数说明browsercreateBrowserTool控制浏览器canvascreateCanvasToolCanvas 操作nodescreateNodesTool节点管理croncreateCronTool定时任务管理messagecreateMessageTool发送消息ttscreateTtsTool语音合成gatewaycreateGatewayToolGateway 管理agents_listcreateAgentsListTool列出可用代理imagecreateImageTool图像分析image_generatecreateImageGenerateTool图像生成pdfcreatePdfToolPDF 处理web_searchcreateWebSearchTool网络搜索web_fetchcreateWebFetchTool网页抓取apply_patchcreateApplyPatchTool应用代码补丁沙盒工具3 个工具名函数说明sandboxed_readcreateSandboxedReadTool沙盒中读取文件sandboxed_writecreateSandboxedWriteTool沙盒中写入文件sandboxed_editcreateSandboxedEditTool沙盒中编辑文件五、工具创建流程createOpenClawCodingTools 流程functioncreateOpenClawCodingTools(options){// 1. 解析配置constsandboxoptions?.sandbox;constpolicyresolveEffectiveToolPolicy(options);// 2. 创建基础工具read, write, editconstbasecodingTools.flatMap((tool){if(tool.nameread){return[createOpenClawReadTool(createReadTool(workspaceRoot))];}// ...});// 3. 创建 exec 和 process 工具constexecToolcreateExecTool({...defaults,cwd:workspaceRoot});constprocessToolcreateProcessTool({scopeKey});// 4. 创建 OpenClaw 核心工具constopenClawToolscreateOpenClawTools({agentSessionKey:options?.sessionKey,workspaceDir:workspaceRoot,// ...});// 5. 合并所有工具consttools[...base,execTool,processTool,...openClawTools];// 6. 应用策略管道constwithHooksapplyToolPolicyPipeline({tools:tools,policy:policy,// ...});returnwithHooks;}createOpenClawTools 流程functioncreateOpenClawTools(options){// 1. 创建媒体工具constimageToolcreateImageTool({...});constimageGenerateToolcreateImageGenerateTool({...});constpdfToolcreatePdfTool({...});// 2. 创建网络工具constwebSearchToolcreateWebSearchTool({...});constwebFetchToolcreateWebFetchTool({...});// 3. 创建消息工具constmessageToolcreateMessageTool({...});// 4. 创建核心工具数组consttools[createBrowserTool({...}),createCanvasTool({...}),createNodesTool({...}),createCronTool({...}),...messageTool?[messageTool]:[],createTtsTool({...}),...imageGenerateTool?[imageGenerateTool]:[],createGatewayTool({...}),createAgentsListTool({...}),createSessionsListTool({...}),createSessionsHistoryTool({...}),createSessionsSendTool({...}),createSessionsYieldTool({...}),createSessionsSpawnTool({...}),createSubagentsTool({...}),createSessionStatusTool({...}),...webSearchTool?[webSearchTool]:[],...webFetchTool?[webFetchTool]:[],...imageTool?[imageTool]:[],...pdfTool?[pdfTool]:[]];// 5. 添加插件工具constpluginToolsresolvePluginTools({...});return[...tools,...pluginTools];}六、工具策略管道applyToolPolicyPipeline工具在返回前会经过策略管道处理constwithHooksapplyToolPolicyPipeline({tools:tools,// 原始工具列表toolMeta:(tool)getPluginToolMeta(tool),warn:logWarn,steps:[{policy:profilePolicy,label:profile tools.allow},{policy:globalPolicy,label:global tools.allow},{policy:sandboxToolPolicy,label:sandbox tools.allow},// ...]});策略类型策略说明profilePolicy用户配置策略globalPolicy全局策略agentPolicy代理策略groupPolicy群组策略sandboxToolPolicy沙盒策略subagentPolicy子代理策略七、工具执行流程1. before_tool_call Hook工具执行前会经过before_tool_callHookasyncfunctionrunBeforeToolCallHook(args){// 1. 检测工具调用循环constloopResultdetectToolCallLoop(sessionState,toolName,params);if(loopResult.stuck){return{blocked:true,reason:Loop detected};}// 2. 运行全局 HookconsthookResultawaithookRunner.runBeforeToolCall({...});if(hookResult?.block){return{blocked:true,reason:hookResult.blockReason};}return{blocked:false,params};}2. 工具执行constexecuteasync(toolCallId,params,signal,onUpdate){// 1. 运行 before_tool_call HookconstoutcomeawaitrunBeforeToolCallHook({toolName,params,toolCallId,ctx});if(outcome.blocked)thrownewError(outcome.reason);// 2. 执行工具constresultawaitexecute(toolCallId,outcome.params,signal,onUpdate);// 3. 记录结果awaitrecordLoopOutcome({...});returnresult;};八、工具命名规范命名模式模式示例说明createXxxToolcreateExecTool工具创建函数xxxexec工具名称小写XxxToolExecTool工具类名大写工具名称规则小写exec,read,write下划线分隔web_search,apply_patch简洁明了反映工具功能九、工具参数定义JSON Schema 格式parameters:{type:object,properties:{command:{type:string,description:Command to execute},background:{type:boolean,description:Run in background,default:false},timeout:{type:number,description:Timeout in seconds}},required:[command]}十、总结工具架构特点模块化每个工具独立定义可组合通过createOpenClawCodingTools组合可扩展支持插件工具有策略通过策略管道控制工具访问有监控before_tool_call Hook 检测循环工具数量统计类别数量核心工具5会话管理7OpenClaw 核心14沙盒工具3媒体工具3网络工具4其他5总计40