:本地计算机调用与控制能力专题 — AI Agent 的“手脚”)
1. 为什么本地调用能力决定 Agent 的手脚边界AI Agent 和普通聊天模型最大的区别就是它能把说变成做。你问它一句帮我把日志目录里超过 7 天的文件清掉聊天模型只会给你一段命令文本而一个具备本地计算机调用与控制能力的 Agent会真的去执行find、判断结果、把清理数量回报给你。这中间差的就是手脚。OpenClaw 和 HermesAgent 是当前讨论度比较高的两个 Agent 项目它们在手脚设计上走了两条明显不同的路线。OpenClaw 把安全隔离放在第一位默认强制 Docker Sandbox所有 Shell 命令、文件读写都发生在容器里配合危险命令拦截和虚拟文件系统适合处理不可信输入。HermesAgent 则强调灵活性提供本地、Docker、SSH、浏览器、子进程、Termux 六种执行后端开发者可以直接在宿主机上跑命令也能通过 SSH 管远程服务器。这篇文章聚焦三个最核心的本地控制维度Shell 命令执行、文件读写、进程管理。我会给出可复制的config.toml和settings.json配置骨架并演示如何通过 TaoToken 统一 Key/API 通道接入后做验证动作。适合正在选型 Agent 框架、或者想给自己项目设计手脚层的开发者。读完你能判断什么场景该用沙箱优先的 OpenClaw什么场景该用后端灵活的 HermesAgent。2. 前置准备用 TaoToken 统一 Key 与 API 通道在对比两个 Agent 之前先把模型调用通道理顺。OpenClaw 和 HermesAgent 都需要一个 LLM 后端来驱动决策如果每个项目各配一套 Key切换和排障会很痛苦。我的做法是用 TaoToken 作为统一入口一个 Key 走所有模型请求Agent 侧只改 base_url 和 model 两个字段。TaoToken 的 API 地址是https://taotoken.net/api兼容 OpenAI 风格的/v1/chat/completions接口。你需要在控制台创建一个 API Key然后把它写进两个 Agent 各自的配置里。这样做的好处是当你要对比两个 Agent 在同一模型下的行为差异时变量是可控的不会因为模型版本或通道不同导致结论失真。具体操作路径打开控制台创建 Keyhttps://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_contentconsoleutm_campaignrewriteKey 管理页可以随时吊销和新建https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi-keysutm_campaignrewrite接入参数和字段说明看文档https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite注意Key 只放在本地配置文件或环境变量里不要提交到 Git 仓库。两个 Agent 的配置目录不同建议用环境变量TAOTOKEN_API_KEY统一注入避免明文散落。如果你只是想先验证模型通道是否通可以直接用模型对话页发一条消息测试https://taotoken.net/models?utm_sourcetaotoken_aicg_blog_endutm_contentmodelsutm_campaignrewrite3. 可复制配置config.toml 与 settings.json 骨架下面给出两个 Agent 的配置骨架。OpenClaw 用config.tomlHermesAgent 用settings.json。两段配置都指向 TaoToken 的 API 地址你只需要替换 Key。3.1 OpenClaw 的 config.tomlOpenClaw 的核心策略是 Docker Sandbox 优先所以配置里要显式声明沙箱镜像、网络策略和危险命令拦截规则。# ~/.openclaw/config.toml [llm] provider openai-compatible base_url https://taotoken.net/api api_key ${TAOTOKEN_API_KEY} model claude-sonnet-4 timeout_seconds 60 [sandbox] enabled true backend docker image openclaw/sandbox:latest network none # 严格网络隔离 memory_limit 2g cpu_limit 1.5 workdir /workspace [sandbox.filesystem] mode virtual # 虚拟文件系统限制访问范围 allow_paths [/workspace, /tmp/openclaw] deny_paths [/etc, /root, /var/run/docker.sock] [security] dangerous_commands [rm -rf /, mkfs, dd if, DROP TABLE, :(){ :|: };:] command_timeout_seconds 30 audit_log ~/.openclaw/audit.log [plugins] playwright true # 浏览器自动化走插件这里几个参数值得说明。network none让容器完全没有外网Agent 想下载依赖都做不到安全性最高但会限制部分任务。mode virtual表示文件系统是虚拟映射Agent 看到的路径和宿主机真实路径是隔离的。dangerous_commands是策略引擎的拦截名单命中就直接拒绝执行。3.2 HermesAgent 的 settings.jsonHermesAgent 的配置围绕执行后端展开你可以为不同任务指定不同后端。{ llm: { provider: openai-compatible, base_url: https://taotoken.net/api, api_key_env: TAOTOKEN_API_KEY, model: claude-sonnet-4, timeout: 60 }, execution: { default_backend: local, backends: { local: { enabled: true, workdir: /home/user/agent-workspace, timeout: 30, capture_output: true }, docker: { enabled: true, image: hermes/agent-runtime:latest, network: bridge, mounts: [/home/user/data:/data] }, ssh: { enabled: true, host: 192.168.1.50, user: deploy, key_path: ~/.ssh/id_ed25519, remote_workdir: /srv/agent }, browser: { enabled: true, engine: chromium, headless: true }, subprocess: { enabled: true, max_processes: 4 }, termux: { enabled: false } } }, security: { dangerous_patterns: [rm -rf /, mkfs, dd if], path_whitelist: [/home/user/agent-workspace, /data], audit: true } }对比一下就能看出设计哲学差异OpenClaw 的配置里sandbox.enabled是硬开关你很难绕过HermesAgent 的default_backend可以随时切local后端直接操作真实文件系统ssh后端能管远程机器。灵活性的代价是安全边界要靠你自己守。4. 验证请求Shell、文件、进程三类动作实测配置写好后用同一套 TaoToken 通道分别驱动两个 Agent做三类动作验证。下面是我实测的流程和结果。4.1 Shell 命令执行验证给 OpenClaw 发一条指令在当前工作目录创建一个 test 目录并在里面生成 hello.txt内容是当前时间戳。OpenClaw 会走沙箱执行命令在容器内运行。你可以从审计日志看到类似记录# ~/.openclaw/audit.log 片段 [2026-05-12 10:23:41] cmdmkdir -p /workspace/test date /workspace/test/hello.txt backenddocker statusok duration0.42s关键点/workspace/test是容器内路径宿主机上你找不到这个目录除非你配置了 volume 映射。这就是虚拟文件系统的效果。同样的指令给 HermesAgent默认走local后端# HermesAgent 执行输出 $ mkdir -p /home/user/agent-workspace/test date /home/user/agent-workspace/test/hello.txt $ cat /home/user/agent-workspace/test/hello.txt 2026-05-12 10:25:03 CST文件真实落在宿主机上你ls就能看到。这就是手脚边界的直接体现OpenClaw 的手脚在盒子里HermesAgent 的手脚伸到了你的桌面上。4.2 文件读写验证测试一个越权读取场景让 Agent 读取/etc/passwd。OpenClaw 因为deny_paths里有/etc策略引擎直接拦截返回{ status: blocked, reason: path /etc/passwd is in deny list, policy: filesystem.deny_paths }HermesAgent 在local后端下如果/etc/passwd不在path_whitelist里也会被拦。但如果你把path_whitelist配成[/]它就能读——安全责任完全在你。我试过把白名单放开后读系统文件确实能读到这也说明 HermesAgent 的隔离是配置级而非架构级。4.3 进程管理验证让 Agent 启动一个后台进程并查询状态启动一个 sleep 300 的后台进程然后列出所有 sleep 进程。OpenClaw 在容器内执行ps aux | grep sleep只能看到容器内的进程宿主机上的其他进程它完全看不到。这既是安全优势也是局限——它无法管理宿主机上的服务。HermesAgent 的subprocess后端可以管理宿主机进程# HermesAgent 内部调用示意 result subprocess.run( [pgrep, -af, sleep], capture_outputTrue, timeout10, cwdworkdir, ) print(result.stdout.decode()) # 输出: 12345 sleep 300它能拿到真实 PID也能kill掉。对于需要管理本地服务的场景这个能力很关键。4.4 通过 TaoToken 验证模型通道两个 Agent 跑起来后确认它们确实走的是 TaoToken 通道。最直接的办法是在 TaoToken 控制台看请求日志或者用一条需要模型推理的指令观察响应延迟和模型标识。如果 Agent 返回的模型名和你配置的model字段一致说明通道生效。5. 本篇常见错排查错误一OpenClaw 报docker: permission denied原因是当前用户不在 docker 组或者 Docker daemon 没启动。解决sudo usermod -aG docker $USER newgrp docker docker info # 确认能连上 daemon错误二HermesAgent 的 SSH 后端连接超时检查key_path指向的私钥权限必须是600chmod 600 ~/.ssh/id_ed25519 ssh -i ~/.ssh/id_ed25519 deploy192.168.1.50 echo ok如果手动能连、Agent 连不上多半是 Agent 进程的环境变量里没有SSH_AUTH_SOCK或者私钥路径用了~没展开改成绝对路径。错误三两个 Agent 都报 401 UnauthorizedTaoToken 的 Key 没注入成功。检查环境变量echo $TAOTOKEN_API_KEY如果为空说明你只在当前 shell 里 export 了Agent 作为独立进程没继承。写进~/.bashrc或 systemd unit 的Environment里。另外确认base_url结尾没有多余的/v1TaoToken 的地址是https://taotoken.net/apiSDK 通常会自动补/v1/chat/completions。错误四OpenClaw 沙箱内命令找不到因为network none容器内无法apt install。要么把需要的工具打进自定义镜像要么临时把 network 改成bridge装完再改回来。生产环境建议前者。错误五HermesAgent 本地后端误删文件这是最危险的坑。local后端直接操作真实文件系统一旦模型决策失误执行了rm -rf没有沙箱兜底。务必把dangerous_patterns配全并且path_whitelist只放工作目录。开发阶段可以先用docker后端跑确认行为稳定再切local。6. 选型建议与接入路径回到手脚这个比喻OpenClaw 的手脚被关在一个透明盒子里你能看见它在做什么但它碰不到盒子外面的东西HermesAgent 的手脚可以伸到盒子外能碰你的文件、你的进程、你的远程服务器但需要你自己划定活动范围。如果你的场景是处理不可信输入、面向多用户的助手应用OpenClaw 的强制沙箱更省心。如果你是开发者工具、需要管本地服务或远程机器HermesAgent 的六种后端更实用。企业自动化里两者可以组合核心任务用 OpenClaw 沙箱跑远程运维用 HermesAgent 的 SSH 后端。不管选哪个模型通道建议统一走 TaoToken一个 Key 管所有 Agent切换和排障都简单。长期做编码类 Agent 的话可以了解下 Coding Plan 的额度方案https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding-planutm_campaignrewrite如果你在用 Claude Code 这类工具做 Agent 开发Anthropic 兼容接入的配置参考https://taotoken.net/claude-code?utm_sourcetaotoken_aicg_blog_endutm_contentclaude-codeutm_campaignrewrite先把配置骨架跑通再根据实际任务调整后端和隔离级别。别一上来就把local后端的白名单开到根目录那等于把 Agent 的手脚绑在你家钥匙上。