Claude Duet 中途停下来等你点确认 / 是哪一层权限没放开?

文章导读
任务跑到一半停住、弹出确认框,通常不是“权限没给够”或“这类动作本来就要人点一下”二选一。更常见的情况是动作链在某一层被拦:站点范围没覆盖当前页面、动作类型里只开了读没开写、或者写入类动作被策略设成逐次确认。按“站点范围 → 动作类型 → 执行记录”的顺序排查,比在设置页里到处开权限更省事,也能避免顺手把不该放的写权限放开。
📋 目录
  1. A 先确认已授权的站点范围覆盖了当前页面
  2. B 区分动作类型权限与站点权限
  3. C 写一份通用授权配置骨架做对照
  4. D 用最小任务验证授权是否生效
  5. E 从执行记录确认拦截来源
A A

任务跑到一半停住、弹出确认框,通常不是“权限没给够”或“这类动作本来就要人点一下”二选一。更常见的情况是动作链在某一层被拦:站点范围没覆盖当前页面、动作类型里只开了读没开写、或者写入类动作被策略设成逐次确认。按“站点范围 → 动作类型 → 执行记录”的顺序排查,比在设置页里到处开权限更省事,也能避免顺手把不该放的写权限放开。

中途停顿多数不是单点故障。先核对授权设置里的站点列表是否覆盖当前页面 URL,再确认读取与写入是分开授权的,最后用一条只读最小任务复现一次。只读任务仍弹确认,问题在站点范围或配置未生效;只读通过、写入停顿,则多半是写入未开或该类动作被设为逐次确认。补写权限前,建议先在非关键页面验证,并保持站点范围收窄。

先确认已授权的站点范围覆盖了当前页面

有些“反复请求确认”其实不是动作权限问题,而是当前页面根本不在授权列表里,助手每次动作前都要重新征求站点访问许可。判断依据很直接:同一个任务换个页面能跑通,在这个页面必然停住。

核对步骤:

  1. 打开授权/站点设置页,找到站点(域名)列表,不要只看“已启用”这类总开关。
  2. 把当前页面的完整地址与列表条目逐段比对:协议(http/https)、主机(含子域)、路径前缀。多数工具按精确主机匹配,example.com 通常不等于 app.example.com。
  3. 检查条目是否带路径通配。带 /* 的一般覆盖该路径下所有页面,不带路径的往往只覆盖根路径。
  4. 修改后保存,刷新当前页面或重新加载助手会话,再复测一次,不要在旧会话上判断新配置。

范围不匹配时的典型提示,偏向站点级询问,例如“此页面需要访问权限”“允许访问 example.com?”;它问的是整个站点,而不是某个按钮或字段,而且同一会话切到别的站点就不弹。遇到这种提示,先补站点范围,不要急着开写入权限。

排查顺序查什么典型现象处理方向
第一层:站点范围当前页面 URL 是否落在站点列表的协议、主机、路径前缀之内弹出站点级访问询问,换个页面就正常补站点条目或放宽路径前缀,再刷新会话
第二层:动作类型读取与写入是否分开授权,写入是 allow 还是 confirm读页面通过,点击、填写、提交必停按需放开写入,或接受逐次确认
第三层:确认策略该类动作是否被策略要求人工点头动作处于待确认,点允许后继续执行不是权限缺失,按站点可信度决定是否放宽

区分动作类型权限与站点权限

站点权限回答“能在哪个网站操作”,动作类型权限回答“能做什么”。读取和写入通常分开授权:读取包括读取页面内容、DOM、当前地址、截图之类;写入包括点击、填写、提交表单、发起请求。只开读不开写,最典型的表现是读页面一次通过,一沾点击或提交就停下来等确认。

两类权限的行为差异可以这样记:授权缺失导致的停顿,动作不会被执行,记录里也不会有执行结果;动作需确认导致的停顿,动作处于待执行状态,点允许后立即继续。前者要补配置,后者是策略决定的行为,不补也会停。

不要用写入动作去验证读取权限。第一次验证建议用只读任务,指令里明确写清边界,例如“读出当前页面标题和第一个一级标题的文字,不要点击、不要输入、不要提交”。只读都停,说明问题在站点范围或配置未加载;只读通过,再单独去测写入这一层。

写一份通用授权配置骨架做对照

各家字段名不同,下面这份骨架只用来做对照:把字段名换成你所用工具的实际写法,逐项核对当前设置落在 allow 还是 confirm 上。不要直接照抄生效,先确认字段含义。

Claude Duet 中途停下来等你点确认 / 是哪一层权限没放开?
{
  "scope": {
    "sites": ["https://example.com/app/*"],   // 允许操作的站点与路径前缀
    "include_subdomains": false               // 是否连带子域
  },
  "actions": {
    "read": "allow",       // allow / confirm / deny
    "write": "confirm",    // 点击、填写、提交属于这一层
    "navigate": "allow"    // 打开新页面、跳转
  },
  "confirmation": {
    "mode": "per_action",  // per_action / per_session / never
    "remember": "session"  // 确认的记住时长
  },
  "logging": {
    "record_interceptions": true   // 记录每次被拦截的原因
  }
}

字段作用:scope.sites 决定站点范围,路径写窄比写宽安全;include_subdomains 是常见坑,列表里只写了主域却要操作子域页面时必然停;actions.write 设为 confirm 就是“每次写入都停”,这属于策略生效,不是权限没开;confirmation.remember 设为 session 时,重新加载会话后确认会重新出现,容易被误认为权限丢失;logging.record_interceptions 建议打开,后面要靠它区分拦截来源。

用最小任务验证授权是否生效

把排查结论固定成一个可重复的三步验证:

  1. 打开一个已在站点列表内、路径被覆盖的页面,等页面完全加载。
  2. 发一条只读指令:“读出当前页面标题和第一个一级标题,不要点击、不要输入、不要提交。”
  3. 在同一页面上补一条边界明确的写入指令,例如“在搜索框里填入 test,但不要提交”,只用来区分读与写两层。

页面表现对照:第二步直接返回内容、无任何确认框,说明站点范围与读取权限正常;第二步就弹确认,或弹出站点级授权询问,回到第一节处理;第二步正常、第三步停下并出现针对具体动作的确认(要点哪个元素、填什么值),说明写入层是 confirm 或未放开,这是取舍问题不是故障。每次改完配置都从第一步重跑,不要在改动前的状态上叠加判断。

从执行记录确认拦截来源

执行记录(日志、动作列表、会话详情)一般会把两类事件分开记,判别要点如下:

  • 权限类:出现在动作开始前,结果标记为被阻止或未执行,文案偏向“未授权该站点”“缺少写入权限”“not permitted”,动作没有产生实际效果。处理方向是补站点范围或补动作类型。
  • 确认类:动作状态是“等待确认/待批准”,附有操作摘要,点允许后立即继续执行。处理方向不是加权限,而是看策略是否把这类动作设成逐次确认,放不放开取决于站点可信度和动作是否可逆。

如果两类记录都没有、动作就是静默失败,先怀疑配置没被加载:保存后是否刷新了页面、会话是否仍在用旧配置。这一步确认完,再看记录里有没有权限条目。

收窄范围的原则建议保持:写入权限按站点放开,不按通配全站放开;一次只改一层,改完用上一节的最小任务复测,避免多层同时变动后定位不到是哪一层起了作用。