Skip to content

审批 CLI

ringclaw approval 是解决所有 OOB challenge 的唯一入口—— /full-access grant、非 owner 跨聊天 ACTION 以及 authorize-mention OOB 流程 都通过它批准。审批要求主机访问权,把审批权与 RingCentral 账 号解耦。

命令

bash
ringclaw approval <id>          # 批准一个 pending challenge
ringclaw approval deny <id>     # 拒绝一个 pending challenge
ringclaw approval list          # 列出所有 pending challenge

每条命令都会读取 ~/.ringclaw/api_token,再调用本地 HTTP API (127.0.0.1:18011、loopback-only、token 鉴权)。需要能访问 运行 ringclaw 的主机。详见 API 与客户端 关于 API token / loopback 绑定的说明。

为什么仅终端

把审批做成只能从终端执行有三个理由:

  1. 审批权解耦。 被盗 RC 账号能在 owner 私聊中看到 challenge ID,但没有 SSH / 物理访问就无法执行 ringclaw approval <id>
  2. 单一审计轨迹。 每次批准 / 拒绝都同时落在主机的 shell history 与 ringclaw 日志里,没有"在聊天里批准"这种绕过 主机日志的旁路。
  3. 撤销简单。 重启 ringclaw 即清空所有 pending challenge 与活动授权——重启就是统一的"恐慌按钮"。

设计上禁用聊天侧 /approval

Bot 私聊中任何 /approval ... 消息都会被消费,发送者会被重 定向到终端 CLI。Bot 回复中给出要在主机上执行的精确命令 ringclaw approval <id>。聊天侧的批准被拦截并记录为 INFO oob: chat approval intercepted, redirected to terminal

三个 OOB 入口,一条 CLI

同一条 ringclaw approval <id> 命令同时解决三个 OOB 入口。 Challenge 的 intent 字段在审计日志中区分类型:

入口Intent 前缀触发方式详细页
/full-access 授权grant ACP full-access for <duration>Owner 在 bot 私聊中发送 /full-access grantACP Full-Access
非 owner 跨聊天 ACTIONcross-chat <TYPE>AI 为非授信发起者生成 ACTION: ... chatid=<other>跨聊天 Action
Authorize-mentionauthorize user <userID> in chat <chatID>非授信用户在允许群聊中 @bot(v0.4.2 起默认关闭;通过 allow_group_mention_authorize: true 显式开启)发送者白名单

生命周期

审计日志条目

事件日志行用途
Challenge 发起INFO oob: challenge issuedchallengeIDrequesterIDintentttl跟踪每个审批 prompt,包括无人响应而超时的。
Challenge 终端批准INFO oob: challenge approved via terminalchallengeID审计谁在何时批准了什么。
Challenge 终端拒绝INFO oob: challenge denied via terminalchallengeID与批准对偶。
聊天侧 /approval 被拦截(重定向到终端)INFO oob: chat approval intercepted, redirected to terminal纵深防御——禁用聊天侧批准;任何尝试都会被记录并重定向。