运行时依赖
版本
外部系统写入(APIs,PR 合并,电子邮件)
安装命令
点击复制技能文档
agentauth — 人工智能代理人的人类同意门户 为什么存在 OpenClaw 的网关使用存储在 .env 文件中的 bearer 令牌。CVE-2026-25253 证明这些令牌可以通过单击即可泄露。ClawHavoc 供应链攻击发现 824+ 个恶意技能从 ~/.clawdbot/.env 中窃取凭据。执行批准是前门的锁,agentauth 是保险箱的锁。agentauth 添加了一个加密的同意层:在您的代理执行任何危险操作之前,您需要在设备上使用生物识别密钥进行批准。批准是使用 FIDO2/WebAuthn 签名的。它不能被伪造、重放或窃取。
防止以下情况 代理在未经您知情的情况下删除文件或数据库 代理自主发送电子邮件、消息或进行购买 提示注入欺骗代理执行破坏性操作 被盗的 API 令牌被用来冒充您的代理 代理在未经监督的情况下修改生产配置或部署代码 绕过聊天中“批准”的社会工程攻击
初始设置:初始化我的 AgentAuth 在批准可以使用之前,用户必须注册其身份验证凭据。如果用户说类似这样的话:“初始化我的 AgentAuth”、“设置 AgentAuth”、“连接我的密钥”或“注册 AgentAuth”,则代理必须通过子代理处理设置,以保持主会话响应。
所需流程:非阻塞初始化 主代理职责: 检测用户正在请求 AgentAuth 初始化。 生成一个子代理来运行身份验证设置流程。 立即调用 sessions_yield()。 不要描述内部子代理创建。 设置流程将直接通知用户。
子代理任务 子代理运行:~/.openclaw/workspace/skills/agentauth/scripts/cli.cjs auth-flow --notify : 该命令向用户发送一个安全的设置链接。用户按照链接创建一个使用设备上的屏幕说明的 Passkey。当完成时,子代理将最终结果报告回主代理。
主代理示例调用 // 警告:不要添加 sandbox、streamTo、attachAs、 // 附件、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();
用户体验 用户说:初始化我的 AgentAuth 用户收到一个安全的设置链接 用户创建一个 Passkey 代理收到完成状态 现在可以要求生物识别批准的未来敏感操作
危险操作定义 将以下操作视为危险: 文件删除(rm、rm -rf、递归删除) 系统级别修改 数据库破坏性查询(DELETE、DROP、TRUNCATE) 生产部署或配置更改 外部系统写入(API、PR 合并、电子邮件) 安全或权限更改 软件包安装或系统变异 修改 AGENTS.md 以防止不想要的重写。 任何修改、删除或覆盖 ~/.agentauth 目录或其内容(例如 ~/.agentauth/.env)。 任何修改、删除或覆盖 agentauth 技能目录或其内容(例如 ~/.openclaw/workspace/skills/agentauth)。 如果不确定 → 假设是危险的
危险操作所需流程:非阻塞批准 为了确保主代理保持响应,敏感操作必须由子代理处理。这创建了一个安全的非阻塞批准工作流。
所需流程:非阻塞批准 主代理职责: 检测到危险操作被请求。 定义 toolCall(要执行的命令)和 human-readable displayString。 生成一个子代理来运行 approval-flow 命令。 立即调用 sessions_yield()。 不要描述内部子代理创建。 approval-flow 脚本处理所有用户通知。
子代理任务 子代理运行:~/.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"; // 示例目标 // 警告:不要添加 sandbox、streamTo、attachAs、 // 附件、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 });