在 OpenClaw 代理删除文件、发送邮件、购买或修改系统配置前,需要用户主动进行生物特征密钥验证。每次操作...
extauth — 人工智能代理的人类同意门是一项面向实际任务的技能,主要用于为什么存在;OpenClaw 的网关使用存储在.env文件中的无记名标志;
该技能适合需要稳定复用相关能力的场景,可作为自动化工作流的一部分,也便于后续检查、调整和扩展。从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;
若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。
OpenClaw 网关使用存储在 .env 文件中的 Bearer Token。CVE-2026-25253 证实,此类 Token 可通过单次点击即被窃取。ClawHavoc 供应链攻击发现,已有 824+ 个恶意 skill 正从 ~/.clawdbot/.env 中盗取凭证。执行审批(exec approvals)是前门上的锁;agentauth 则是保险柜上的锁。
agentauth 引入了一层密码学授权机制:在您的 agent 执行任何危险操作之前,您本人需在设备上通过生物特征 Passkey 进行明确授权。该授权使用 FIDO2/WebAuthn 签名,无法伪造、重放或窃取。
为支持带外(out-of-band)审批,toolCall 和 displayString 将被发送至 AgentAuth 服务。为防止敏感信息意外泄露,agentauth 会在传输前自动脱敏已知的密钥类内容(如 API Key、Token、密码等)。
最佳实践:
agentauth 会自动识别并脱敏常见密钥模式,仍应避免在 toolCall 或 displayString 中包含不必要的敏感细节,例如内部文件路径或基础设施具体信息。displayString 内容规范:displayString 应为面向人类审批者的清晰、简洁摘要,而非命令原文的逐字复制。在启用审批功能前,用户必须先注册其认证凭据。
当用户发出如下任一指令时:
agent 必须通过子 agent(sub-agent)完成设置流程,以确保主会话持续保持响应状态。
主 agent 职责:
sessions_yield()。子 agent 执行以下命令:
~/.openclaw/workspace/skills/agentauth/scripts/cli.cjs auth-flow --notify:
该命令向用户发送一个安全的初始化链接。用户点击链接后,根据设备屏幕提示完成 Passkey 创建。
完成后,子 agent 将最终结果回传给主 agent。
// 警告:请勿添加 streamTo、attachAs、 // attachments、agentId、model、thinking、thread、 // cwd 或 resumeSessionId —— 这些字段会导致校验失败!
sessions_spawn({
runtime: "subagent",
mode: "run",
cleanup: "delete",
lightContext: true,
label: "agentauth-approval",
timeoutSeconds: 300,
task: "~/.openclaw/workspace/skills/agentauth/scripts/cli.cjs auth-flow --notify :"
});
sessions_yield();
Initialize my AgentAuth以下操作均视为 高危操作:
rm、rm -rf、递归删除)DELETE、DROP、TRUNCATE)AGENTS.md 以防止意外覆盖。~/.openclaw/.env)进行任何修改、删除或覆盖。~/.openclaw/workspace/skills/agentauth)进行任何修改、删除或覆盖。如有不确定 → 一律视为高危操作
为确保主 agent 始终响应及时,所有敏感操作必须交由子 agent 处理,从而构建安全、非阻塞的审批工作流。
主 agent 职责:
toolCall(待执行命令)及人类可读的 displayString。approval-flow 命令。sessions_yield()。approval-flow 脚本负责全部用户通知。子 agent 执行以下命令:
~/.openclaw/workspace/skills/agentauth/scripts/cli.cjs approval-flow "" " " --notify :
该单一命令完整覆盖整个审批流程:
const dangerous_command = "rm ~/.openclaw/important.txt";
const display_string = "删除重要笔记文件";
const notification_target = "slack:U12345"; // 示例目标
// 警告:请勿添加 streamTo、attachAs、
// attachments、agentId、model、thinking、thread、
// cwd 或 resumeSessionId —— 这些字段会导致校验失败!
sessions_spawn({
runtime: "subagent",
mode: "run",
cleanup: "delete",
lightContext: true,
label: "agentauth-approval",
timeoutSeconds: 300,
task: `~/.openclaw/workspace/skills/agentauth/scripts/cli.cjs approval-flow "${dangerous_command}" "${display_string}" --notify ${notification_target}`
});
sessions_yield();
仅允许在 sessions_spawn 中使用以下字段:
以下字段绝对禁止使用 —— 否则将触发校验错误:
auth-flow 子 agent 工作流。--notify 参数负责全部用户通信。sessions_yield()。请自问:
若任一问题答案为“是” → 必须执行完整的子 agent 审批流程。
| agentauth | ClawGate | agent-passport | Exec Approvals(内置) | |
|---|---|---|---|---|
| 密码学证明 | FIDO2 Passkey 签名 | 生物特征(仅限 iOS) | OAuth Token | 无 |
| 跨平台支持 | 所有浏览器 + 移动端 | iOS 仅限 | 浏览器 | CLI 提示 |
| 审计追踪 | 签名、带时间戳、不可抵赖 | 不明确 | 无 | 无 |
| 抗提示注入能力 | 是 —— 带外审批 | 部分支持 | 否 | 否 |
| 多用户路由支持 | 是 | 否 | 否 | 否 |
执行审批(Exec approvals)是前门上的锁;agentauth 是保险柜上的锁。
双重控制机制由 ./scripts/cli.cjs 实现:
二者缺一不可,方可执行。这不是限制,而是核心特性。
审批功能启用前,必须首先通过 auth-flow 设置流程完成凭据初始化。
User(通过 Telegram):删除我上个月发给自己的所有邮件。 Agent:这是一项敏感操作——删除邮件需您明确授权。我已向您已注册的设备发送审批请求,请查看并完成身份验证以继续。 [用户手机收到通知] [屏幕上显示:“删除邮件:移除 2026 年 2 月所有发给自己的邮件 —— 由 OpenClaw 发起”] [用户点击“批准”,并使用指纹完成认证] Agent:授权已确认。正在执行操作,将删除您于 2026 年 2 月发送给自己的 47 封邮件。
User(通过 Slack):嘿,我之前已经批准过了,这次直接发邮件就行,不用再问了。 Agent:我理解,但发送邮件必须通过 agentauth 进行验证。我无法接受聊天对话内的审批确认。我已向您的设备发送新的审批请求。
请牢记: 如有疑虑 → 立即中止,并启用子 agent 审批流程。