工具参考¶
LoopForge 对 agent runtime 暴露了一组小而清晰的核心工具集,并提供一层“兼容工具面”(别名 + 预留名称),便于复用遵循常见工具约定的 prompts / manifests。
工具索引(60+)¶
你截图里看到的“目录(Table of contents)”只列出章节标题,并不会把每一个工具名都展开。很多工具会按模式归类,比如 browser_*、process_*、agent_* 等。
写 prompt / manifest 需要精确工具名时,用下面这个索引:
核心¶
fs_read, fs_write, shell, web_fetch, pdf, pdf_extract
浏览器¶
browser_navigate, browser_back, browser_scroll, browser_click, browser_type, browser_press_key, browser_wait, browser_wait_for, browser_read_page, browser_run_js, browser_screenshot, browser_close
兼容别名¶
file_read, file_write, file_list, apply_patch, shell_exec, web_search, memory_store, memory_recall
多媒体¶
image_analyze, image_generate, location_get, media_describe, media_transcribe, speech_to_text, text_to_speech
A2A¶
a2a_discover, a2a_send
沙盒与进程¶
docker_exec, process_start, process_poll, process_write, process_kill, process_list, canvas_present
Runtime 协作与调度¶
agent_spawn, agent_list, agent_find, agent_send, agent_kill, hand_list, hand_activate, hand_status, hand_deactivate, task_post, task_claim, task_complete, task_list, event_publish, schedule_create, schedule_list, schedule_delete, cron_create, cron_list, cron_cancel, channel_send, workflow_run, knowledge_add_entity, knowledge_add_relation, knowledge_query
如何理解这页工具参考¶
LoopForge 的工具大体分成两条执行边界:
| 边界 | 常见用途 | 状态特征 | 实现位置 |
|---|---|---|---|
| 独立工具 | 文件、shell、浏览器、网页、PDF、媒体、进程操作 | 通常只作用于当前 workspace 或当前请求 | rexos-tools |
| runtime-managed tools | agents、hands、tasks、schedules、workflows、outbox、knowledge | 会把共享运行时状态持久化,跨 session 保留 | rexos-runtime |
如果你想“对 workspace 做事”,优先用独立工具。 如果你想“在 LoopForge 内部创建/查询持久状态”,优先用 runtime-managed tools。
如果你想看整体结构,再读一遍 运行时架构。
运行这些示例¶
下面的示例多数按这种格式写:
- 一段 tool call JSON(即工具参数对象)
- 一段可直接复制的 prompt
快速运行方式:
fs_read¶
读取 相对于 workspace root 的 UTF-8 文本文件。
- 拒绝绝对路径
- 拒绝
..目录穿越 - 拒绝 symlink 逃逸
示例¶
工具调用:
Prompt:
fs_write¶
写入 相对于 workspace root 的 UTF-8 文本文件(必要时创建父目录)。
沙盒规则与 fs_read 相同。
示例¶
工具调用:
Prompt:
shell¶
在 workspace 内执行 shell 命令:
- Unix:通过
bash -c - Windows:通过 PowerShell
LoopForge 会强制超时,并使用尽量最小的环境。
示例¶
工具调用:
Prompt:
web_fetch¶
抓取一个 HTTP(S) URL,并返回一小段响应体。
默认拒绝 loopback/private IP 段(基础 SSRF 防护)。本地测试可用 allow_private=true 显式放开。
当 truncated=true 时,LoopForge 会返回 head+tail 片段,并在中间插入 [...] middle omitted [...] 标记,同时返回 bytes(实际返回)与 total_bytes(原始大小)。
示例¶
工具调用:
Prompt:
pdf¶
从 workspace 内的 PDF 文件提取文本(best-effort)。
参数:
path(必填):workspace 相对路径的.pdfpages(可选):页码选择器(从 1 开始),例如"1"、"1-3"、"2,4-6"max_pages(可选):默认 10,最大 50max_chars(可选):默认 12000,最大 50000
返回 JSON:
pathtext(可能被截断)truncated(bool)bytes(文件大小)pages_totalpages(选择器字符串,或 null)pages_extracted
示例¶
工具调用:
Prompt:
browser_*(CDP)¶
浏览器工具默认通过 Chrome DevTools Protocol(CDP) 提供无头浏览器自动化能力(无需 Python):
browser_navigate/browser_back/browser_scroll/browser_click/browser_type/browser_press_key/browser_wait/browser_wait_for/browser_read_page/browser_run_js/browser_screenshot/browser_close
说明:
browser_navigate默认带 SSRF 防护(拒绝 loopback/private 目标,除非allow_private=true)。- 默认是 headless。如需显示浏览器窗口,可在
browser_navigate传headless=false(或设置LOOPFORGE_BROWSER_HEADLESS=0作为默认值)。 browser_screenshot只允许写入 workspace 相对路径(不允许绝对路径、不允许..、不允许通过 symlink 逃逸)。- 默认后端是 CDP,需要本机存在 Chromium 系浏览器(Chrome/Chromium/Edge)。如果 LoopForge 找不到可执行文件,设置
LOOPFORGE_BROWSER_CHROME_PATH。 - 可选远程 CDP:设置
LOOPFORGE_BROWSER_CDP_HTTP(例如http://127.0.0.1:9222)。 - 可选远程 tab 选择:设置
LOOPFORGE_BROWSER_CDP_TAB_MODE=reuse以跳过/json/new并复用已有 page target(默认:new)。 - 对 loopback CDP HTTP(
127.0.0.1/localhost),LoopForge 会绕过代理设置,避免企业代理误配置导致本地自动化失效。 - 可选 legacy 后端(Playwright bridge):设置
LOOPFORGE_BROWSER_BACKEND=playwright并安装 Python + Playwright:
browser_wait 是一个“只等 selector”的兼容工具。需要等待 selector 或文本时,优先用 browser_wait_for。
browser_run_js 适用于 selector 不好写时抽取结构化字段(例如某个 heading)。在不可信页面上使用要谨慎。
browser_navigate¶
启动(或复用)一个浏览器会话并跳转到 URL。
工具调用:
Prompt:
另见:百度今天天气(Ollama)。
browser_back¶
回到上一页(需要已启动浏览器会话)。
工具调用:
Prompt:
browser_scroll¶
滚动页面(需要已启动浏览器会话)。
工具调用:
Prompt:
browser_click¶
按 CSS selector 点击元素(best-effort:也会尝试按文本匹配链接/按钮)。
工具调用:
Prompt:
browser_type¶
向输入框输入文本(需要已启动浏览器会话)。
工具调用:
Prompt:
另见:百度今天天气(Ollama)。
browser_press_key¶
发送按键(可选先 focus 某个 selector)。
工具调用:
Prompt:
browser_wait¶
等待 selector(兼容工具;只支持 selector)。
工具调用:
Prompt:
browser_wait_for¶
等待 selector 或 文本子串。
工具调用:
Prompt:
browser_read_page¶
提取可见文本与基础元数据(title/url)。
工具调用:
Prompt:
browser_run_js¶
运行一段 JS expression 并返回结果(谨慎使用)。
工具调用:
Prompt:
browser_screenshot¶
保存 PNG 截图到 workspace(默认路径:.loopforge/browser/screenshot.png)。
工具调用:
Prompt:
browser_close¶
关闭浏览器会话(可重复调用;建议每个浏览器流程末尾都调用一次)。
工具调用:
Prompt:
兼容别名¶
以下工具名用于兼容常见工具约定,实际会映射到 LoopForge 内置工具:
file_read→fs_readfile_write→fs_writefile_list→ 目录列表(workspace 相对路径;允许.)shell_exec→shellapply_patch→ 应用*** Begin Patch/*** End Patch格式的补丁(add/update/delete)web_search→ DuckDuckGo HTML 搜索(best-effort;返回简短文本列表)memory_store/memory_recall→ 共享 KV(持久化在~/.loopforge/loopforge.db)
file_read¶
工具调用:
Prompt:
file_write¶
工具调用:
Prompt:
file_list¶
工具调用:
Prompt:
shell_exec¶
工具调用:
Prompt:
apply_patch¶
工具调用:
Prompt:
web_search¶
工具调用:
Prompt:
memory_store¶
工具调用:
Prompt:
memory_recall¶
工具调用:
Prompt:
image_analyze¶
分析 workspace 内的图片文件,并返回基础元数据 JSON(format、width、height、bytes)。
当前支持:PNG、JPEG、GIF。
示例¶
工具调用:
Prompt:
location_get¶
返回环境元数据 JSON(os、arch、tz、lang)。
LoopForge 不会做基于 IP 的地理定位推断。
示例¶
工具调用:
Prompt:
media_describe¶
描述 workspace 内的媒体文件,并返回 best-effort 元数据 JSON(kind、bytes、ext)。
示例¶
工具调用:
Prompt:
media_transcribe¶
将媒体转成文本。
当前仅支持读取 workspace 内的 文本转写/字幕文件(.txt、.md、.srt、.vtt),并返回 JSON(text)。
示例¶
工具调用:
Prompt:
image_generate¶
根据 prompt 生成图片资产。
当前仅支持输出 SVG,写入 workspace 相对路径 path(建议使用 .svg 文件名)。
示例¶
工具调用:
Prompt:
Runtime 协作与调度工具¶
以下工具由 agent runtime 实现(不是独立的 Toolset),状态会持久化到 ~/.loopforge/loopforge.db:
agent_spawn/agent_list/agent_find/agent_send/agent_killhand_list/hand_activate/hand_status/hand_deactivatetask_post/task_claim/task_complete/task_listevent_publishschedule_create/schedule_list/schedule_deletecron_create/cron_list/cron_cancelchannel_send(写入 outbox;用loopforge channel drain投递)knowledge_add_entity/knowledge_add_relation/knowledge_query
它们和独立工具的实际区别通常是:
- 返回值更常见的是 JSON 记录、id、workflow 状态,而不是直接的 workspace 文本输出
- 状态会跨后续 session 保留,而不是只对当前 prompt 生效
- 更适合协作/编排类流程,而不只是一次性的文件改动
agent_spawn¶
创建一个 agent 会话记录(会持久化),并返回其信息。
工具调用:
Prompt:
agent_list¶
工具调用:
Prompt:
agent_find¶
工具调用:
Prompt:
agent_send¶
工具调用:
Prompt:
agent_kill¶
工具调用:
Prompt:
task_post¶
发布一个任务到共享任务板。
工具调用:
Prompt:
task_list¶
工具调用:
Prompt:
task_claim¶
领取一个 pending 任务(默认领取第一个符合条件的任务)。
工具调用:
Prompt:
task_complete¶
工具调用:
Prompt:
event_publish¶
向事件日志追加一条事件记录。
工具调用:
Prompt:
schedule_create¶
存储一个 schedule 定义(当前是“存储定义”;是否会自动执行取决于你的 runner/daemon 集成)。
工具调用:
Prompt:
schedule_list¶
工具调用:
Prompt:
schedule_delete¶
工具调用:
Prompt:
cron_create¶
存储一个 cron job 定义(持久化)。
如果你运行 loopforge cron worker,LoopForge 会执行一个小的“内置支持子集”:
- Schedule:
{ "kind": "every", "every_secs": <seconds> }、{ "kind": "at", "at_epoch_seconds": <epoch_seconds> } - Action:
{ "kind": "system_event", ... }、{ "kind": "channel_send", ... }(channel_send使用delivery作为消息投递参数)
工具调用:
Prompt:
cron_list¶
工具调用:
Prompt:
cron_cancel¶
工具调用:
Prompt:
knowledge_add_entity¶
向 knowledge store 写入一个实体。
工具调用:
Prompt:
knowledge_add_relation¶
在两个实体之间添加一条关系(边)。
工具调用:
Prompt:
knowledge_query¶
检索 entities/relations(best-effort 子串查询)。
工具调用:
Prompt:
channel_send¶
将一条外发消息写入 outbox。实际投递由 dispatcher 在带副作用的进程中完成:
- 单次执行:
loopforge channel drain - 常驻 worker:
loopforge channel worker
当前支持的 channel:
console:drain 时打印到 stdoutwebhook:POST JSON 到LOOPFORGE_WEBHOOK_URL
参数(工具调用 JSON):
channel(必填):console|webhookrecipient(必填):console可用"stdout";webhook可用一个逻辑名称(实际 URL 由配置/环境决定)subject(可选)message(必填)
示例¶
工具调用:
Prompt:
workflow_run¶
运行一个多步骤工作流,并把执行状态持久化到 .loopforge/workflows/<workflow_id>.json。
当前适用范围:
workflow_run更适合编排fs_write、shell、web_fetch、浏览器工具这类独立工具- 目前不支持在 workflow step 里继续嵌套
task_*、agent_*、knowledge_*、schedule_*、cron_*、channel_send这类 runtime-managed tools
参数(工具调用 JSON):
workflow_id(可选):稳定 workflow id,便于重复执行。name(可选):工作流名称。steps(必填):步骤数组。tool(必填)arguments(可选对象,默认{})name(可选)approval_required(可选布尔):当启用审批策略时,强制该步骤走审批门。continue_on_error(可选):步骤失败后是否继续执行。
示例¶
工具调用:
Prompt:
hand_*¶
Hands 是一组小而精的“agent 模板”,用于快速启动一个专用 agent 实例。
hand_list:列出内置 Hands 以及是否处于 active 状态hand_activate:激活某个 Hand,返回{instance_id, agent_id, ...}hand_status:查询某个hand_id当前是否有 active 实例hand_deactivate:按instance_id停用实例(会 kill 对应的底层 agent)
hand_activate 后可用 agent_send 与返回的 agent_id 交互。
hand_list¶
工具调用:
Prompt:
hand_activate¶
工具调用:
Prompt:
hand_status¶
工具调用:
Prompt:
hand_deactivate¶
工具调用:
Prompt:
a2a_*¶
A2A 工具用于与外部 A2A 兼容 agent 交互:
a2a_discover:抓取/.well-known/agent.json的 agent carda2a_send:向 A2A endpoint 发送 JSON-RPCtasks/send
默认带 SSRF 防护;本地测试可用 allow_private=true 显式放开。
a2a_discover¶
获取 A2A agent card(LoopForge 会在给定 host 上请求 /.well-known/agent.json)。
工具调用:
Prompt:
a2a_send¶
向 A2A endpoint URL 发送消息(JSON-RPC tasks/send)。
工具调用:
Prompt:
speech_to_text¶
将媒体转成文本。
MVP 行为:支持 文本转写/字幕文件(.txt、.md、.srt、.vtt),返回 JSON(transcript 与 text)。
示例¶
工具调用:
Prompt:
text_to_speech¶
将文本转换为音频文件。
MVP 行为:在 workspace 内写出一个短 .wav 文件(作为真实 TTS 的占位实现)。
示例¶
工具调用:
Prompt:
docker_exec¶
在一次性 Docker 容器内执行命令(会挂载 workspace)。
- 默认禁用:设置
LOOPFORGE_DOCKER_EXEC_ENABLED=1 - 可选镜像:
LOOPFORGE_DOCKER_EXEC_IMAGE(默认alpine:3.20)
示例¶
工具调用:
Prompt:
process_*¶
启动并与长运行进程交互:
process_start/process_poll/process_write/process_kill/process_list
进程以 workspace 为工作目录,并使用尽量最小的环境。
process_poll 返回 JSON:
stdout/stderr(增量输出)stdout_truncated/stderr_truncated(bool;为 true 时输出为 head+tail 片段,中间带[...] middle omitted [...])exit_code(存活时为 null)alive(bool)
process_start¶
启动一个长运行进程并返回 process_id。
工具调用(macOS/Linux 示例):
Prompt:
process_poll¶
工具调用:
Prompt:
process_write¶
工具调用:
Prompt:
process_list¶
工具调用:
Prompt:
process_kill¶
工具调用:
Prompt:
canvas_present¶
将一段经过清洗的 HTML 保存到 workspace(output/ 目录下),并返回元数据(saved_to、canvas_id 等)。
会拒绝脚本、事件处理器属性(如 onclick=)、以及 javascript: URL。
示例¶
工具调用:
Prompt: