风险门禁与内容安全

lark-cli 的安全设计不是一个开关,而是分散在命令 metadata、schema、输出、文件 IO、内容扫描和 root error handler 里的多层机制。

风险等级

root help 直接提醒:每个命令的 help 会显示 read | write | high-risk-write。在 internal/schema/assembler.go 里,高风险写入会被加上 yes schema 字段:

CLI confirmation gate. Must be true to execute.
Pass --yes only after the user has explicitly confirmed.

这意味着高风险动作不是靠提示语劝人小心,而是有执行门禁。缺少确认时会返回 confirmation_required,exit code 是 10。

Dry-run

--dry-run 的价值是让 Agent 先构建请求而不执行副作用。cmd/api 在 dry-run + file upload 时不会真的读取文件内容,而是返回文件上传元信息;typed commands 和 shortcuts 也会在各自实现里尽量保留这个预演语义。

写入类工作流建议固定顺序:

  1. lark-cli schema ... 看参数、scope、risk;
  2. lark-cli ... --dry-run 看将要发出的请求;
  3. 用户确认后再执行;
  4. 高风险写入才加 --yes

内容安全扫描

internal/output/emit.go 里有 ScanForSafety,输出前会按命令路径和 provider 配置扫描数据:

  • block 模式会返回 typed ContentSafetyError
  • warn 模式在 JSON envelope 中带 content_safety_alert
  • --jq 过滤场景,还会向 stderr 写 warning,避免 alert 被 jq 表达式过滤掉。

这说明安全检查不只在输入侧,也在输出侧。对于会读取文档、邮件、消息的 CLI,这一点很关键。

文件与路径

源码里还有 internal/vfsextension/fileiointernal/validateshortcuts/apps/sensitive_paths.go 等路径和文件相关保护。文件上传、下载、发布静态站点、导入导出表格时,路径校验比普通 API 参数更敏感。

下一篇:事件、插件与质量门禁