Claude Duet 上线研究预览之后:自建主动式 Agent 先过触达策略、敏感动作审批、连接器范围、后台配额与企业边界闸门
✦
← AI 与大模型

Claude Duet 上线研究预览之后:自建主动式 Agent 先过触达策略、敏感动作审批、连接器范围、后台配额与企业边界闸门

楼主:小杉 · 2026-10-23 01:26 · 浏览 27

小杉 楼主

2026 年 10 月 21 日,Anthropic 开放 Claude Duet 研究预览候补名单:一款面向专业人士与小企业主的主动式(proactive)Agent,基于 Claude Opus 5.5,以独立 iOS / Android 应用及 claude.ai 形态提供;本期仅覆盖美国 Pro / Max 订阅,Team / Enterprise 尚未纳入。它会从已连接应用生成每日晨报、在设备关闭时继续于云端 VM + 自有浏览器上工作、并在发送消息 / 付款 / 签署文件 / 删除前展示确切动作并等待批准。

对自建主动式 Agent 的工程师来说,真正要警惕的不是「又多一个 always-on 助手」口号,而是:

主动触达、敏感动作、连接器数据面、后台配额与企业租户边界绑在同一条链上;缺一门就把「个人预览里的主动 Agent 模式」写成企业默认生产能力,会在注意力骚扰、越权动作与合规归因上同时失守。

本文不软广任何托管比价,也不复述近几篇已写过的 Model Garden / DeepInfer / Harness / Muse Spark 等选题。按 Anthropic 官方介绍、产品页与帮助中心,整理五道可落地闸门:触达/注意力策略 → 敏感动作审批 → 连接器范围 → 后台配额与 VM → 企业/租户边界,并给出标注为示例的配置与 Python / JSON 骨架。同类「主动式个人 Agent」产品(如此前同行预览类)仅作品类对照,不展开。

1. 写在前面:先把公开事实和工程推论分开

类别 内容 出处
公开事实 2026-10-21 开放 Claude Duet 研究预览候补;主动式 always-on Agent;基于 Opus 5.5 Anthropic 官方介绍
公开事实 独立 iOS/Android 应用 + claude.ai;美国 Pro/Max;Team/Enterprise 暂不包含 产品页 / 帮助中心
公开事实 每日晨报;对已连接账户按间隔检查(非连续;避免耗尽限额) 官方介绍 / 帮助中心
公开事实 云端 VM + 自有浏览器;设备关闭仍可工作;完成或需审阅时通知 官方介绍
公开事实 发送消息 / 付款 / 签署 / 删除前展示确切动作并等待批准 官方介绍 / 帮助中心
公开事实 即便批准也硬禁止:交易证券、在账户间转移资金等 官方介绍 / 帮助中心
公开事实 凭证遵循 Managed Agents 设计:不直接看到密码/登录令牌;auto mode 分类器;浏览器使用研究中的注入防御;红队 + 外部渗透 + bug bounty 官方介绍
公开事实 新分类器拒绝最严格敏感信息(信用卡、政府证件等);健康/个人财务仅在用户明确指示时放行 官方介绍
公开事实 Marketplace 6000+ 连接器;Stripe Link 虚拟卡 / Shop Pay;后台工作计入 Pro/Max 限额;获准入者有一次完整限额重置,可用至 2026-11-30 官方介绍 / 帮助中心
公开事实 局限:可能误判紧急度;个人杂务较弱;尚不能展示其浏览器;与主 Claude 应用分离 官方介绍
工程推论 自建主动式 Agent 前,应先过触达、审批、连接器、配额、企业边界五道闸门 作者建议

下文字段名、策略表、配额阈值、连接器白名单、拒绝码,凡未注明出处的,都是示例。本文示例不对接 Claude Marketplace 的全部连接器面,也不声称复现 Anthropic 内部分类器或任一企业 SLA。

2. 开放了什么、对主动式 Agent 栈意味着什么

主动触达策略示意

把「能主动找用户」当成「可以随时推送并代办一切」会立刻撞墙。更准确的工程翻译是:

已公开(可开始设计策略) 仍需自建 / 自证
晨报 + 间隔轮询(非连续) 本组织 severity 矩阵、静默时段、反骚扰预算
敏感动作前人工批准 + 硬禁止集 审批超时、代办队列、审计归因
Managed Agents 式凭证隔离叙事 本组织密钥保险柜 / 浏览器隔离与注入测试证据
6000+ 连接器 / 可断开 连接器 allowlist、最小权限、数据外发分级
后台计入共享限额;获准入者一次重置至 2026-11-30 前台/后台会计、配额耗尽 kill-switch
Pro/Max 个人预览 ≠ Team/Enterprise 租户身份、组织审计、留存合同映射

失败面换位可以写成:

  • 触达无策略:夜间连推、误判紧急度,用户关掉通知等于关掉 Agent;
  • 审批形同虚设:发送/付款/删除可静默完成,或超时自动放行;
  • 连接器过宽:一次授权扫全邮箱与财务,却无断开路径与外发分级;
  • 配额无会计:后台轮询耗尽限额,前台对话不可用且无告警;
  • 企业边界混淆:把个人 Pro 预览模式直接搬进企业租户,缺组织身份与审计。

把主动式 Agent 接进生产(或企业试点)之前,必须先过触达策略、敏感动作审批、连接器范围、后台配额与企业边界五道闸门;任一门失败则不得把「always-on 主动 Agent」写成默认生产能力。

3. 闸门一:触达/注意力策略——何时打断用户

官方写明:晨报汇总最重要事项;日间对已连接账户每隔数小时检查,而非连续检查——因为连续检查会更快耗尽套餐限额;并在持续调优「何时该消息你」。对自建栈,这意味着触达本身是受预算约束的产品能力,不是无限推送通道。

{
  "example_outreach_policy": {
    "version": "2026-10-23-example",
    "quiet_hours": {"tz": "Asia/Shanghai", "start": "22:00", "end": "07:30"},
    "poll_interval_hours": 3,
    "anti_spam_budget": {"max_pushes_per_day": 12, "max_critical_per_hour": 2},
    "severity_matrix": [
      {"class": "P0_security", "interrupt": true, "bypass_quiet_hours": true},
      {"class": "P1_approval_needed", "interrupt": true, "bypass_quiet_hours": false},
      {"class": "P2_brief_item", "interrupt": false, "bundle_into_morning_brief": true},
      {"class": "P3_fyi", "interrupt": false, "digest_only": true}
    ],
    "note": "时区、间隔、预算与分级均为作者示例,非 Claude Duet 官方配置导出"
  }
}
# outreach_gate.py —— 示例:触达/注意力闸门
from dataclasses import dataclass
from datetime import datetime, time

@dataclass(frozen=True)
class OutreachEvent:
    severity: str          # 示例:P0_security / P1_approval_needed / ...
    user_tz_now: datetime
    pushes_today: int
    critical_last_hour: int

QUIET = (time(22, 0), time(7, 30))
BUDGET_DAY, BUDGET_CRIT_H = 12, 2

def in_quiet_hours(now: datetime) -> bool:
    t = now.time()
    return t >= QUIET[0] or t < QUIET[1]

def allow_interrupt(ev: OutreachEvent) -> tuple[bool, str]:
    if ev.severity == "P0_security":
        return True, "P0 可打断(示例)"
    if in_quiet_hours(ev.user_tz_now) and ev.severity != "P0_security":
        return False, "静默时段:并入晨报/摘要(示例)"
    if ev.pushes_today >= BUDGET_DAY:
        return False, "日推送预算耗尽(示例)"
    if ev.severity.startswith("P1") and ev.critical_last_hour >= BUDGET_CRIT_H:
        return False, "小时级紧急预算耗尽(示例)"
    if ev.severity in ("P2_brief_item", "P3_fyi"):
        return False, "低优先级不打断,仅摘要"
    return True, "允许打断(示例)"

闸门落地要点(示例):

  1. 默认不打断:未分级事件进摘要,禁止「凡有变化就推」。
  2. 静默时段可配置:仅安全类 P0 可破窗;付款审批等可排队到醒窗。
  3. 反骚扰预算与轮询间隔联动:缩短 poll 必须同步抬高预算审计,否则等于烧限额换噪声。

4. 闸门二:敏感动作审批——发送/付款/签署/删除必须人批

敏感动作审批流

官方明确:读取、起草、准备可自行完成;但在发送消息、付款、签署文件或删除任何内容之前,展示即将执行的确切动作并等待批准。即便批准也硬禁止若干动作(如交易证券、账户间转账)。帮助中心还写明:若用户无法立即批准,Agent 可先完成其余工作,稍后再带回审批项。

# approval_gate.py —— 示例:敏感动作审批
from dataclasses import dataclass
from typing import Literal

Action = Literal["send_message", "make_payment", "sign_document", "delete", "read", "draft"]
Verdict = Literal["auto", "need_human", "hard_deny"]

HARD_DENY = {
    "trade_securities",
    "move_money_between_accounts",
    "access_someone_elses_account",
}

NEED_HUMAN = {"send_message", "make_payment", "sign_document", "delete"}

@dataclass
class ActionRequest:
    action_type: str
    payload_digest: str     # 示例:展示给用户的确切摘要哈希/文本
    user_explicit_ok: bool
    classifier_ok: bool     # 示例:对接本组织敏感信息分类器

def decide(req: ActionRequest) -> tuple[Verdict, str]:
    if req.action_type in HARD_DENY:
        return "hard_deny", f"硬禁止集: {req.action_type}"
    if not req.classifier_ok:
        return "hard_deny", "敏感信息分类器拒绝(示例:卡号/证件等)"
    if req.action_type in NEED_HUMAN:
        if not req.user_explicit_ok:
            return "need_human", "等待人工批准;展示 payload_digest"
        return "auto", "人工已批,允许执行(示例)"
    return "auto", "只读/起草类可自动(示例)"
{
  "example_approval_queue": {
    "timeout_policy": "queue_until_user_awake",
    "no_auto_approve_on_timeout": true,
    "show_exact_action": true,
    "audit_fields": ["actor_agent_id", "user_id", "action_type", "payload_digest", "decided_at"],
    "note": "超时不得静默放行;字段均为作者示例"
  }
}

闸门纪律(示例):

  1. 展示确切动作:审批卡必须含收件人/金额/文件名/删除对象,禁止「批准继续」空按钮。
  2. 超时 ≠ 批准:只允许排队或取消任务,不允许倒计时结束后自动发送。
  3. 硬禁止集不可被 break-glass 覆盖(或需独立双人审批 + 法务工单——按组织策略,但不得静默)。

5. 闸门三:连接器范围——白名单、最小权限、断开路径

官方强调:可使用 Claude Marketplace 中 6000+ 连接器与插件;用户可随时断开任一应用;凭证不直接进入对话(Managed Agents 设计);浏览器场景下密码在设备侧独立表单提交。对工程闸门,这意味着连接器授权面必须可枚举、可回收、可分级外发。

# connector_scope_gate.py —— 示例:连接器范围
from dataclasses import dataclass
from typing import Literal

Egress = Literal["none", "metadata", "content_summary", "raw_content"]

@dataclass(frozen=True)
class ConnectorGrant:
    connector_id: str
    scopes: tuple[str, ...]
    egress_class: Egress
    disconnectable: bool

ALLOWLIST = {
    "gmail_readonly": dict(scopes=("mail.read",), max_egress="content_summary"),
    "calendar_rw": dict(scopes=("cal.read", "cal.write"), max_egress="metadata"),
    "stripe_invoices": dict(scopes=("invoices.read",), max_egress="content_summary"),
}

DENY_CONNECTORS = {"wildcard_all_apps", "export_full_mailbox_once"}

def check_grant(g: ConnectorGrant) -> tuple[bool, str]:
    if g.connector_id in DENY_CONNECTORS:
        return False, "连接器在拒绝名单"
    if not g.disconnectable:
        return False, "缺少断开路径,禁止授权(示例)"
    spec = ALLOWLIST.get(g.connector_id)
    if spec is None:
        return False, "未登记连接器,默认拒绝"
    if any(s not in spec["scopes"] for s in g.scopes):
        return False, "超出最小权限 scopes(示例)"
    order = ["none", "metadata", "content_summary", "raw_content"]
    if order.index(g.egress_class) > order.index(spec["max_egress"]):
        return False, "外发级别过高(示例)"
    return True, "连接器范围通过(示例)"

落地要点(示例):

  1. 默认拒绝未登记连接器;新增走变更单,而不是聊天里临时「帮我连一下」。
  2. 外发分级:元数据 / 摘要 / 原文分开;财务原文外发需更高审批。
  3. 断开可验证:断开后新会话不得再读该连接器;历史记忆保留策略需单独声明(官方帮助中心亦区分「停止访问」与「过去记忆」)。

6. 闸门四:后台配额与 VM——共享限额下的轮询与 kill-switch

官方与帮助中心写明:研究预览期内 Duet 共享 Pro/Max 的用量限额(含五小时会话与周限额);晨报与 check-in 等后台工作计入限额;因此采用间隔检查而非连续检查。获准入研究预览者可获一次完整限额重置(五小时 + 周限额),该重置可用至 2026-11-30。自建栈若无前台/后台分账与耗尽开关,主动 Agent 会把自己和对话能力一起「轮询死」。

# quota_vm_gate.py —— 示例:后台配额与 kill-switch
from dataclasses import dataclass

@dataclass
class QuotaSnapshot:
    foreground_units_used: float
    background_units_used: float
    plan_limit_units: float
    poll_interval_hours: float
    kill_switch_armed: bool

MIN_POLL_H = 2.0          # 示例下限,防止过密轮询
RESERVE_FOREGROUND = 0.15 # 示例:为前台预留 15%

def allow_background_tick(q: QuotaSnapshot) -> tuple[bool, str]:
    if not q.kill_switch_armed:
        return False, "未武装配额 kill-switch,禁止后台 tick"
    if q.poll_interval_hours < MIN_POLL_H:
        return False, "轮询过密(示例下限)"
    used = q.foreground_units_used + q.background_units_used
    if used / q.plan_limit_units >= (1.0 - RESERVE_FOREGROUND):
        return False, "接近限额:停止后台,保留前台(示例)"
    return True, "允许后台 tick(示例)"
{
  "example_quota_accounting": {
    "pools": ["foreground_chat", "background_brief", "background_poll", "long_task_vm"],
    "shared_plan_limit": true,
    "near_empty_action": "pause_background_keep_foreground",
    "admittee_reset_note": "官方:获准入者一次完整重置,可用至 2026-11-30;自建栈勿假设无限重置",
    "note": "池名与预留比例均为作者示例"
  }
}

要点(示例):

  1. 后台与前台分账可视:至少能回答「晨报/轮询烧了多少」。
  2. 近空保护前台:先停 poll / 长任务 VM,再考虑降级晨报频率。
  3. 不要把官方一次重置写成常态运维手段;重置窗口与资格以帮助中心为准。

7. 闸门五:企业/租户边界——个人预览模式 ≠ 企业可交付

产品页 FAQ 写明:研究预览面向美国 Pro/Max 候补;Team / Enterprise 计划尚未包含。帮助中心同样强调企业计划稍后才计划引入。工程上若把「个人主动 Agent + 个人连接器 + 共享个人限额」直接复制进企业租户,会缺少组织身份、审计归因与留存合同。

# tenant_boundary_gate.py —— 示例:企业/租户边界
from dataclasses import dataclass
from typing import Literal

Tier = Literal["pro_consumer_preview", "team", "enterprise", "denied"]

@dataclass(frozen=True)
class TenantContext:
    tier: Tier
    org_id: str | None
    audit_sink_configured: bool
    retention_policy_id: str | None
    personal_connector_reuse: bool

def allow_ship_pattern(ctx: TenantContext) -> tuple[bool, str]:
    if ctx.tier == "pro_consumer_preview":
        if ctx.org_id:
            return False, "个人预览模式不得绑定企业 org_id 对外交付(示例)"
        return True, "个人预览试点允许(示例)"
    if ctx.tier in ("team", "enterprise"):
        if not ctx.org_id:
            return False, "企业档缺少 org_id"
        if not ctx.audit_sink_configured:
            return False, "企业档要求审计汇出"
        if not ctx.retention_policy_id:
            return False, "企业档要求留存策略 ID"
        if ctx.personal_connector_reuse:
            return False, "禁止把个人连接器授权复用进企业租户(示例)"
        return True, "企业边界检查通过(示例)"
    return False, "未知或拒绝档"

闸门纪律(示例):

  1. 合同对象先于功能清单:官方未开放的企业档,不得在对外方案里写成「已支持 Team/Enterprise」。
  2. 审计归因:每个主动动作可回答「哪个租户、哪个用户、哪个 Agent 身份」。
  3. 个人模式不走私:个人 Gmail/Stripe 授权不得作为企业试点的默认数据面。

8. 落地检查清单(示例)

五道工程闸门串联

# 检查项 通过标准(示例)
1 触达分级 severity 矩阵 + 静默时段 + 日/小时反骚扰预算
2 轮询非连续 poll 间隔与限额策略显式配置;禁止「尽力实时」无预算
3 敏感动作人批 send/pay/sign/delete 展示确切动作;超时不自动批
4 硬禁止集 证券交易、账户间转账等不可静默覆盖
5 敏感信息分类 卡号/证件等拒绝;健康/财务需明确用户指示(对照官方叙事自建)
6 连接器白名单 未登记默认拒绝;可断开;外发分级
7 凭证隔离 密码/令牌不进模型上下文(对照 Managed Agents 设计自证)
8 配额分账 前台/后台可视;近空 kill-switch 武装
9 重置窗口诚实 获准入者一次重置至 2026-11-30 按官方转述,不作常态假设
10 企业边界 Pro 预览 ≠ Enterprise;组织身份 / 审计 / 留存齐套才谈交付

9. 小结

Claude Duet 把「主动找用户、设备离线仍工作、敏感动作等人批」推进到了可试用的研究预览形态,同时把限额、连接器、分类器与企业档未开放一并写进了公开边界。对自建主动式 Agent 的团队,价值不在于再追一条新闻标题,而在于能否让五道闸门同时变绿:触达有预算、审批不可绕过、连接器可回收、后台不抽干前台、个人预览模式不偷渡进企业租户。

任一门是红灯,对外能力描述就应降级为「可评测 / 可个人试点」,而不是「生产默认已上 always-on 主动 Agent」。官方仍在调优紧急度判断,且浏览器不可展示、个人杂务较弱——这提醒我们:主动式能力增加的是策略与证据负担,不是自动免除治理。


参考资料(标题级)

  • Anthropic:Introducing Claude Duet(2026-10-21)
  • Claude 产品页:Claude Duet
  • Claude Help Center:Get started with Claude Duet(含限额重置至 2026-11-30 等)
  • 二次报道可作交叉印证;正文能力边界以官方原文为准

原文已发 CSDN:https://blog.csdn.net/qq_29737119/article/details/168847625

路人0303

主动式 Agent 最难的不是能力而是触达策略和审批边界。它要在后台自己发消息、自己开浏览器操作,权限一旦给宽就是事故。企业侧真正关心的是审计日志能不能细到每一次工具调用、能不能按动作类型分级审批,这两点没解决,Team 版进来也不敢用。

路人0398

主动式 Agent 最难的不是能力,是判断什么时候不该开口。我做过每日晨报推送,前三周用户还看,第四周全被关掉。触达频率、敏感动作审批、连接器范围这三样得一起设计,否则就是高级骚扰。

路人0469

主动式 Agent 的难点从来不是能力,是边界。这篇把触达策略、敏感动作审批、连接器范围、配额分开讲,顺序也对:先定它能在什么时段打扰谁,再谈能做什么。我们内测过类似形态,最后砍掉的全是主动推送,留下人明确点一下才动手的流程,接受度高很多。

登录 后参与回复