Skip to content

安全与合规设计 ​

zclaw 以你本人的身份发消息,所以默认收得很紧:能不能发由你逐项确认,任何一项检查不通过就停下。本页说明这些设计,以及两处需要你特别留意的放权能力。

同事单聊召唤默认开启

配置项 peer_summon_enabled 默认为 true。当你打开召唤通道(self_command_enabled)、配置了你的名字并启用了高权限档 Agent 后,任何不在黑名单里、能和你单聊的人,在单聊里发「@你的名字 任务」,都能以高权限档启动一次任务,结果发回给这个人。

  • 任务内容由对方书写;转述一句 @ 了你的话,同样会触发。
  • 高权限档的回复不做链接、凭据类内容过滤,见下文「权限分档」。

不需要时,在配置中设置 "peer_summon_enabled": false。zclaw 每一轮都会重新读取配置,无需重启。

高权限档不经逐次审批

高权限档的 Agent 可以不经审批执行命令、读写文件,并使用它配置目录中的 MCP 和技能。「不修改线上数据」这类要求只写在提示词里,没有系统层面的强制。

  • 只在你信任其工具与权限的机器上启用高权限档。
  • 为分身设置独立的 Agent 配置目录(agent_config_home);留空时,分身直接使用你本人的 Agent 配置、技能和 MCP。

默认不发送 ​

  • init 生成的配置中发送开关关闭,也不会加载后台服务。
  • 发送前必须依次完成:验证钉钉接口(verify-contracts)、验证 Agent 模板(verify-template),最后由你执行 enable-sending --yes。
  • 验证结果只能通过带 --attest --yes 的命令写入,任何一项探测未通过都不会写入。
  • enable-sending 只在其余检查全部通过时才会打开发送。

检查不通过就停下 ​

出现以下任一情况时,这一轮不拉取消息、不调用模型、不发送:

  • 发送开关未打开,或所开功能用到的钉钉接口没有验证;
  • AI 标识文字为空,或没有配置本人的钉钉 ID;
  • dws 未安装、未登录或令牌失效,或者登录的组织、账号与配置不一致;
  • 配置没有限定到单一组织;
  • dws 或 Agent 的可执行文件不归你所有,或可以被其他用户修改;
  • 已启用的 Agent 命令与内置模板不完全一致,或没有验证;
  • 关闭了未读闸门,却没有打开防止「对方改口后被答复两次」的配套开关。

此外:

  • 配置文件权限不是 0600 或是符号链接时,拒绝加载。
  • 状态数据库绑定组织和发送身份,换账号或换组织会拒绝启动。
  • 每次发送前重新读取配置、确认身份没有变化,并在锁内复查黑名单:黑名单添加成功后,不会再有发给这个人的新消息。
  • 发送结果不确定时标记为待核对,不自动重发。

回复哪些消息 ​

  • 单聊处理全部消息;群聊只处理 @你 的消息。
  • 忽略你自己、机器人和黑名单里的人发来的消息。黑名单按不可变钉钉 ID 匹配,由你自己维护,产品不内置任何人选。
  • 默认只处理你还没读过的消息(未读闸门),并跳过 15 分钟以前的消息。
  • 分身模式设为 summon 时,只处理你召唤过的会话。
  • Agent 可以判断某条消息不需要回复。

每条消息都带 AI 标识 ​

  • 正文前固定加上「[AI 分身代发]」。标识文字可以修改,但不能为空,发送前的检查会拒绝空标识。
  • 纯文本消息同时带有钉钉原生的 AI 标记,标题为「AI 辅助回复」。

权限分档 ​

档位谁会触发能力每日调用额度
普通档 restricted默认情况下的所有发送者不能使用工具:各 Agent 以关闭工具、关闭 MCP 或只读沙箱方式运行,只加载边界类技能100
白名单档 standardtier_standard_user_ids 中的人与普通档相同的工具限制,加载全部技能30
高权限档 privileged你本人的召唤,以及开启后的同事召唤不经审批执行命令、读写文件、使用 MCP 和技能20
  • 普通档和白名单档的回复中,如果出现链接、@、疑似凭据、「已发布」「已修复」这类未经核实的完成声明,或者模型自评风险高、置信度低于 0.5,会被替换为「需要进一步核实或人工处理」的说明。
  • 高权限档的回复只防止再次触发召唤,不做上述过滤。
  • init 只配置普通档,默认没有高权限档。启用高权限档需要在配置的 agents 中添加 privileged 条目,并运行 dingclawd verify-template --agent <Agent> --tier privileged --attest --yes。
  • 当天额度用完后,分身回复一句固定说明,不再调用 Agent。

召唤 ​

召唤通道的总开关 self_command_enabled 默认关闭。打开后:

你发送的效果
@me,或 @ 你自己处理这个会话里等着的消息
@me <任务>把任务交给高权限档执行,结果发回这个会话
  • 召唤只认你本人的不可变钉钉 ID,名字本身不构成授权。
  • 回复发回你召唤的会话:在和同事的单聊里召唤,同事能看到回复;在群里召唤,回复发进群。

其他人可以触发的召唤:

方式默认生效条件结果
单聊中「@你的名字 任务」开启召唤通道已打开、配置了你的名字、启用了高权限档以高权限档执行,回复发给对方
群里真实 @你,后跟「分身」和任务关闭同上,并打开 group_avatar_summon_enabled以高权限档执行,回复公开发进群
  • 同事发 @me 指的是同事自己,不会触发;只有 @ 而没有任务时,按普通消息处理。
  • 黑名单、机器人过滤、会话静音和消息时效,对这些召唤同样生效。

紧急停止 ​

  • 立即停止后台服务:

    bash
    launchctl bootout gui/$(id -u)/com.dingclaw.<标识>
  • 或在配置中把 send_enabled 改为 false,下一次发送前生效。

  • 不再回复某个人:

    bash
    dingclawd blacklist add --user-id <userId>

数据与凭据 ​

  • zclaw 只连接两类外部服务:通过 dws 访问钉钉,通过你选择的 Agent 访问模型服务。它本身不直接发起网络请求,也没有遥测。
  • 不附带、不转存 dws 凭据。dws 的登录状态由 dws 管理,各 Agent 的凭据由 Agent 自己保存。
  • 调用 Agent 时,只向子进程传递白名单内的环境变量。
  • 状态数据库 ~/.local/state/dingclaw/state.db 保存消息正文、任务、跳过原因和发送记录,用于去重、恢复投递和追溯;所在目录权限为 0700,文件权限为 0600。
  • 运行日志为 JSONL 格式,位于同一目录,每一行都带时间戳。

文中提及的第三方产品名称和商标归各自权利人所有,本站产品与其无隶属关系。