工具(Tool)¶
作用¶
harness 层默认为 agent 提供一套“足够走完一个闭环”的内置工具:读写文件、检索记忆与会话、委派子 agent、可选走 shell。不需手动注册,HarnessAgent.build() 与 SubagentsHook 会一起装好。
注册路径¶
graph LR
Build[HarnessAgent.build] --> R1[FilesystemTool]
Build --> R2[MemorySearchTool]
Build --> R3[MemoryGetTool]
Build --> R4[SessionSearchTool]
Build -. backend 是 sandbox .-> R5[ShellExecuteTool]
Hook[SubagentsHook.tools<br/>非 leaf 且有 model] --> H1[AgentSpawnTool]
Hook --> H2[TaskTool]
直接 register:
FilesystemTool/MemorySearchTool/MemoryGetTool/SessionSearchTool必装;ShellExecuteTool仅在backend instanceof AbstractSandboxFilesystem时装。间接 register:
AgentSpawnTool与TaskTool是SubagentsHook.tools()返回的,仅在非 leaf 且配了model时出现;在 session mode 下agent_*会被sessions_*替换。
文件系统·FilesystemTool¶
包装 AbstractFilesystem;路径是后端本地路径。
工具 |
作用 |
参数 |
|---|---|---|
|
读文件内容 |
|
|
创建新文件 |
|
|
精确字符串替换 |
|
|
指定路径中搜字符串(非正则) |
|
|
按 glob 查文件 |
|
|
列目录 |
|
记忆·MemorySearchTool / MemoryGetTool¶
工具 |
作用 |
参数 |
|---|---|---|
|
FTS5 全文检索,最多返 30 条;MemoryIndex 不可用时 fallback 到关键字扫 |
|
|
读记忆文件中指定行范围,输出带行号 |
|
参数名是驼峰(
startLine/endLine),与 filesystem 的 snake_case 不一致。
会话·SessionSearchTool¶
工具 |
作用 |
参数 |
|---|---|---|
|
在会话 JSONL 中扫关键词 |
|
|
列某个 agent 的会话,优先读 |
|
|
返某个会话最近 N 条消息 |
|
参数名都是驼峰,且
session_search返回结果是扫全部agents/<agentId>/sessions/*.jsonl后的“首次命中 10 条”,不是按相关性排序。
子 Agent·AgentSpawnTool¶
工具 |
作用 |
参数 |
|---|---|---|
|
创建临时子 agent、可选走任务 |
|
|
向已存在子 agent 补一条 |
|
|
列当前子 agent |
无 |
agent_spawn agent_id="research-analyst"
task="调研主题 X"
timeout_seconds=60
# 异步
agent_spawn agent_id="research-analyst" task="全库安全审计" timeout_seconds=0
# → agent_key + task_id
Session mode 下,这三个名会变为 sessions_spawn / sessions_send / sessions_list。
后台任务·TaskTool¶
工具 |
作用 |
参数 |
|---|---|---|
|
拿后台任务结果 |
|
|
取消任务;终态不生效 |
|
|
列任务 |
|
Shell·ShellExecuteTool(条件性装)¶
仅在后端是 AbstractSandboxFilesystem(包含 LocalFilesystemWithShell)时才被注册。如果你用的是纯 LocalFilesystem 或 RemoteFilesystem,子工具不出现。
工具 |
作用 |
参数 |
|---|---|---|
|
走后端 |
|
注意:@Tool 未显式设
name,默认取方法名,所以 LLM 看到的工具名是execute。如果后续统一为shell_execute是个小重构,参见 roadmap。
execute command="find . -name '*.java' | wc -l"
execute command="mvn test" timeout=300
execute command="git status" working_directory="app" # 拼为 cd app && git status