首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >OpenClaw.NET 外部 CLI 连接器 (External CLI Connectors) 详细技术总结

OpenClaw.NET 外部 CLI 连接器 (External CLI Connectors) 详细技术总结

作者头像
张善友
发布2026-05-11 07:56:38
发布2026-05-11 07:56:38
150
举报
文章被收录于专栏:张善友的专栏张善友的专栏

基于文档: https://github.com/clawdotnet/openclaw.net/blob/main/docs/EXTERNAL_CLI_CONNECTORS.md 基于代码 Commit: https://github.com/clawdotnet/openclaw.net/commit/bde72ea12f05457d0d36422d627ffbe383fce1d8 整理日期: 2026-05-10


一、架构概述

External CLI Connectors 是 OpenClaw.NET 的一个受控原生工具 (external_cli),用于将官方平台 CLI(如 GitHub CLI、Azure CLI、kubectl、Stripe CLI、Lark/Feishu CLI 等)包装为可被 AI Agent 安全调用的工具。

核心设计哲学:

  • 默认禁用 — 功能不会自动启用,需要显式配置
  • 不是通用 Shell — 不接受任意命令字符串,只允许预配置的具名命令
  • 深度防御 — 通过命名命令白名单、风险评分、预览、审批、脱敏、超时、审计记录和运行时事件实现多层安全控制

二、安全模型 (Security Model)

2.1 核心安全原则

外部 CLI 可以在强大的用户、机器人、云、集群或支付身份下运行,因此:

  • 所有变更性命令 (mutating commands) 被视为高风险
  • 使用最小权限原则 (least privilege)
  • 支持 dry-run 预览审批流程审计日志

2.2 命令调用方式

连接器不接受原始命令字符串。Agent 通过指定连接器名、命令名和命名参数来调用:

代码语言:javascript
复制
{
  "action": "execute",
  "connector": "gh",
  "command": "issue_list",
  "parameters": {
    "repo": "clawdotnet/openclaw.net"
  }
}

运行时通过配置化的参数模板直接展开为 ProcessStartInfo.ArgumentList不经过 Shell 解释器,且拒绝缺失或未知参数(除非命令显式允许)。

2.3 关键安全默认值

配置项

默认值

含义

Enabled

false

默认不注册工具

AllowFreeformCommands

false

拒绝自由形式命令

RequireApprovalForMutatingCommands

true

非只读命令需要审批

RiskLevel

high

默认高风险,总是需要审批

ReadOnly

false

默认可变操作


三、配置系统详解

3.1 顶层配置结构

代码语言:javascript
复制
{
  "OpenClaw": {
    "ExternalCli": {
      "Enabled": true,                          // 总开关
      "DefaultTimeoutSeconds": 60,              // 默认超时
      "MaxStdoutBytes": 262144,                 // stdout 最大字节数 (256KB)
      "MaxStderrBytes": 65536,                  // stderr 最大字节数 (64KB)
      "RedactSecrets": true,                    // 启用密钥脱敏
      "AllowFreeformCommands": false,           // 禁止自由命令
      "RequireApprovalForMutatingCommands": true, // 变更命令需审批
      "Connectors": {                           // 连接器配置
        // 各平台CLI连接器定义
      }
    }
  }
}

3.2 连接器配置结构

GitHub CLI (gh) 为例:

代码语言:javascript
复制
{
  "gh": {
    "Enabled": true,
    "DisplayName": "GitHub CLI",
    "Executable": "gh",
    "DefaultOutputFormat": "json",
    "StatusCommand": {
      "Args": ["auth", "status"],
      "TimeoutSeconds": 20
    },
    "VersionCommand": {
      "Args": ["--version"],
      "TimeoutSeconds": 10
    },
    "Commands": {
      "repo_view": {
        "Description": "View repository metadata",
        "ArgsTemplate": [
          "repo", "view", "{{repo}}",
          "--json", "name,owner,description,url,isPrivate"
        ],
        "RiskLevel": "low",
        "ReadOnly": true,
        "StructuredOutput": "json",
        "Parameters": {
          "repo": {
            "Required": true,
            "Pattern": "^[A-Za-z0-9_.-]+/[A-Za-z0-9_.-]+$"
          }
        }
      },
      "issue_create": {
        "Description": "Create a GitHub issue",
        "ArgsTemplate": [
          "issue", "create", "--repo", "{{repo}}",
          "--title", "{{title}}", "--body", "{{body}}"
        ],
        "RiskLevel": "medium",
        "ReadOnly": false,
        "RequiresApproval": true,
        "StructuredOutput": "text",
        "Parameters": {
          "repo": { "Required": true },
          "title": { "Required": true, "MaxLength": 200 },
          "body": { "Required": true, "MaxLength": 16000 }
        }
      }
    }
  }
}

3.3 命令配置选项说明

字段

类型

说明

Description

string

命令描述

ArgsTemplate

string[]

参数模板,{{param}} 占位符将被替换

RiskLevel

string

风险等级: low / medium / high

ReadOnly

bool

是否为只读操作

RequiresApproval

bool

是否需要审批(覆盖默认策略)

StructuredOutput

string

输出格式: json / ndjson / csv / table / text

DryRunArgsTemplate

string[]

(可选) Dry-run 模式的参数模板

Parameters

dict

参数定义,含 Required/MaxLength/Pattern/AllowedValues

RedactionRules

string[]

(可选) 平台特定的密钥脱敏规则

RequiredScopes

string[]

(可选) 所需身份/权限范围

RequiredIdentity

string

(可选) 所需身份标识

TimeoutSeconds

int

(可选) 命令级别超时覆盖

WorkingDirectory

string

(可选) 工作目录

Environment

dict

(可选) 环境变量

3.4 参数验证选项

每个参数可配置:

  • Required — 是否必填
  • Description — 参数描述
  • MaxLength — 最大长度限制
  • Pattern — 正则表达式验证
  • AllowedValues — 允许值列表

四、预览与审批流程 (Preview & Approval)

4.1 预览命令

代码语言:javascript
复制
openclaw external preview gh repo_view --param repo=clawdotnet/openclaw.net

4.2 预览返回信息

字段

说明

可执行文件路径

解析后的 CLI 路径

参数列表

展开的参数(已脱敏)

风险等级

low / medium / high

操作类型

只读 (ReadOnly) 或变更 (Mutating)

是否需要审批

true / false

输出格式

json / ndjson / csv / table / text

所需身份/权限范围

如配置了 RequiredScopes

审批指纹 (Approval Fingerprint)

稳定的指纹值,用于审批匹配

4.3 执行审批流程

代码语言:javascript
复制
# 1. 先预览
openclaw external preview gh issue_create \
  --param repo=clawdotnet/openclaw.net \
  --param title="Example" \
  --param body="Example body"

# 2. 确认后加 --yes 执行(自动携带指纹)
openclaw external execute gh issue_create \
  --param repo=clawdotnet/openclaw.net \
  --param title="Example" \
  --param body="Example body" \
  --yes

指纹安全机制: 如果命令模板、解析参数或策略在审批和执行之间发生变化,指纹不匹配将导致执行被阻止。

4.4 Dry-Run 支持

预览时加上 --dry-run 可执行 dry-run 模式(需命令配置了 DryRunArgsTemplate):

代码语言:javascript
复制
openclaw external preview gh issue_create \
  --param repo=clawdotnet/openclaw.net \
  --param title="Test" \
  --param body="Test body" \
  --dry-run

注意: 运行时不会猜测 dry-run 标志,必须在模板中显式配置。


五、审计、事件与脱敏 (Audit, Events & Redaction)

5.1 审计记录 (Append-Only Audit)

每次执行写入不可篡改的审计记录,包含:

  • 连接器名和命令名
  • 可执行文件路径
  • 已脱敏的命令行预览
  • 参数和参数哈希
  • 执行者、会话、频道、发送者
  • 审批指纹(如有)
  • 退出码、执行时长、超时标志
  • stdout/stderr 截断标志
  • 风险等级和工作目录

5.2 运行时事件

触发以下事件类型:

  • status_check — 状态检查
  • previewed / dry_run_previewed — 预览
  • dry_run_executed — Dry-run 执行
  • command_executed — 命令执行
  • command_failed — 命令失败
  • command_timed_out — 超时
  • truncation — 输出截断
  • redaction — 密钥脱敏
  • command_blocked_by_policy — 策略阻止

5.3 密钥脱敏 (Redaction)

脱敏应用于:参数预览、stdout、stderr、审计记录、运行时事件、错误消息。可为连接器或命令配置 RedactionRules,支持平台特定的密钥格式。


六、输出解析 (Output Parsing)

按命令配置 StructuredOutput

格式

处理方式

json

解析 stdout 为 JSON,返回解析后的 JSON + 脱敏 stdout

ndjson

解析换行分隔 JSON 为 JSON 数组

csv / table / text

作为脱敏文本返回

注意: 连接器不会注入全局 --json 标志,需要在每个命令模板中显式放置输出标志。


七、推荐配置预设 (Conservative Presets)

7.1 GitHub CLI (gh)

类别

命令示例

只读

auth status, repo view, issue list, pr list, pr view, release list

需审批

issue create, issue comment, pr review, pr merge, release create

7.2 Azure CLI (az)

类别

命令示例

只读

account show, group list, resource list, webapp list

需审批

resource create/update/delete, deployment create, role assignment changes

7.3 kubectl

类别

命令示例

只读

config current-context, get pods/services/deployments -o json, describe

高风险需审批

apply, delete, scale, rollout restart, exec, port-forward

日志可能暴露密钥,建议至少 medium 风险等级。

7.4 Stripe CLI

类别

命令示例

只读

listen status, fixtures/list, customers/list(最小权限凭证)

高风险需审批

payment mutations, refunds, customer/subscription mutations, webhook trigger, event replay

7.5 Lark / Feishu CLI

类别

命令示例

只读

auth status, schema inspection, calendar agenda, docs search/read, sheets read, mail search/read, meeting minutes query

需审批

send messages, write docs, write sheets, send email, approve/reject workflows, create/update OKRs, raw API calls


八、管理 API (Admin API)

网关暴露以下 RESTful 端点:

方法

端点

说明

GET

/admin/external-cli/connectors

列出所有连接器

GET

/admin/external-cli/connectors/{connector}

获取连接器状态

GET

/admin/external-cli/connectors/{connector}/commands

列出连接器命令

POST

/admin/external-cli/preview

预览命令(需 CSRF)

POST

/admin/external-cli/execute

执行命令(需 operator 角色 + 匹配审批元数据)


九、CLI 命令

代码语言:javascript
复制
# 列出所有连接器
openclaw external list

# 查看连接器状态
openclaw external status gh

# 列出连接器命令
openclaw external commands gh

# 预览命令
openclaw external preview gh repo_view --param repo=clawdotnet/openclaw.net

# 执行命令
openclaw external execute gh repo_view --param repo=clawdotnet/openclaw.net

# 使用 --json 获取机器可读输出
openclaw external list --json

十、代码实现架构 (Commit bde72ea)

10.1 项目结构

本次 Commit 共修改 29 个文件+2,966 行代码,涉及以下模块:

代码语言:javascript
复制
docs/
  EXTERNAL_CLI_CONNECTORS.md          # 新增完整文档 (278行)
  README.md                           # 添加文档链接
  SITE_MAP.md                         # 添加站点地图

src/OpenClaw.Agent/
  OpenClawToolExecutor.cs             # 工具执行器集成 (+29/-4)
  Tools/ExternalCliTool.cs            # 新增 External CLI 工具实现 (251行)

src/OpenClaw.Client/
  OpenClawHttpClient.cs               # HTTP 客户端新增 Admin API 方法 (+51行)

src/OpenClaw.Cli/
  CliArgs.cs                          # CLI 参数解析扩展
  ExternalCliCommands.cs              # 新增 CLI 命令实现 (250行)
  OpenClawHttpClient.cs               # CLI HTTP 客户端包装 (+15行)
  Program.cs                          # 注册 external 子命令 (+3行)

src/OpenClaw.Core/
  Abstractions/IToolActionDescriptorProvider.cs  # 抽象接口
  ExternalCli/
    ExternalCliServices.cs            # DI 服务注册
    ExternalCliConnectorRegistry.cs   # 连接器注册表
    ExternalCliRunner.cs              # 命令执行器
  Models/
    ExternalCliModels.cs              # 数据模型 (284行)
    GatewayConfig.cs                  # 配置集成 (+1行)
    Session.cs                        # JSON 序列化 (+26行)
    ToolingPolicyModels.cs            # 策略模型 (+4行)
  Pipeline/ToolActionPolicyResolver.cs # 策略解析 (+27/-1)
  Validation/ConfigValidator.cs       # 配置验证 (+78行)

src/OpenClaw.Gateway/
  Composition/                         # DI 组合注册
  Endpoints/AdminEndpoints.ExternalCli.cs  # Admin API 端点 (264行)
  Endpoints/ExternalCliStores.cs      # 存储抽象

OpenClaw.Tests/
  ExternalCliTests.cs                 # 单元测试

10.2 核心类型与接口

代码语言:javascript
复制
// 连接器注册表
public interface IExternalCliConnectorRegistry
{
    ExternalCliPreparedInvocation BuildPreview(ExternalCliPreviewRequest request, bool dryRun);
}

// 命令执行器
public interface IExternalCliRunner
{
    Task<ExternalCliExecutionResult> ExecuteAsync(ExternalCliPreparedInvocation prepared, CancellationToken ct);
}

// 审计 Sink
public interface IExternalCliAuditSink { void Record(ExternalCliAuditEntry entry); }

// 事件 Sink
public interface IExternalCliEventSink { void Record(ExternalCliRuntimeEvent evt); }

10.3 关键数据模型

代码语言:javascript
复制
// 连接器配置选项
public sealed class ExternalCliConnectorOptions
{
    public bool Enabled { get; set; } = false;
    public string DisplayName { get; set; } = "";
    public string Executable { get; set; } = "";
    public string DefaultOutputFormat { get; set; } = "json";
    public ExternalCliStatusCommandOptions? StatusCommand { get; set; }
    public ExternalCliStatusCommandOptions? VersionCommand { get; set; }
    public Dictionary<string, ExternalCliCommandOptions> Commands { get; set; } = new();
    // ...
}

// 命令配置选项
public sealed class ExternalCliCommandOptions
{
    public string Description { get; set; } = "";
    public string[] ArgsTemplate { get; set; } = [];
    public string[]? DryRunArgsTemplate { get; set; }
    public string RiskLevel { get; set; } = ExternalCliRiskLevel.High;
    public bool ReadOnly { get; set; } = false;
    public bool RequiresApproval { get; set; } = false;
    public string StructuredOutput { get; set; } = ExternalCliOutputFormat.Text;
    public Dictionary<string, ExternalCliParameterOptions> Parameters { get; set; } = new();
    // ...
}

// 执行结果
public sealed class ExternalCliExecutionResult
{
    public ExternalCliInvocationPreview Preview { get; init; } = new();
    public int ExitCode { get; init; }
    public double DurationMs { get; init; }
    public bool TimedOut { get; init; }
    public bool Failed { get; init; }
    public bool StdoutTruncated { get; init; }
    public bool StderrTruncated { get; init; }
    // ...
}

// 审计记录
public sealed class ExternalCliAuditEntry
{
    public string Id { get; init; } = "";
    public DateTimeOffset TimestampUtc { get; init; }
    public string SessionId { get; init; } = "";
    public string Connector { get; init; } = "";
    public string Command { get; init; } = "";
    public string RedactedArgsPreview { get; init; } = "";
    public string? ApprovalFingerprint { get; init; }
    public int ExitCode { get; init; }
    // ...
}

10.4 执行流程

  1. Agent 调用ExternalCliTool 接收工具请求
  2. 策略解析ToolActionPolicyResolver 解析操作描述符(含 IsMutation、RequiresApproval、ApprovalFingerprint、RiskLevel、ReadOnly)
  3. 预览构建ExternalCliConnectorRegistry.BuildPreview() 解析模板、验证参数、计算指纹
  4. 审批检查 → 如需审批,比较指纹是否匹配
  5. 执行命令ExternalCliRunner.ExecuteAsync() 通过 ProcessStartInfo.ArgumentList 启动进程
  6. 输出解析 → 按 StructuredOutput 设置解析输出
  7. 记录审计 → 写入 ExternalCliAuditEntry(不可篡改)
  8. 发送事件 → 通过 ExternalCliEventSink 发送运行时事件

10.5 策略解析增强

ToolActionDescriptor 新增字段:

  • RequiresApproval — 是否需要审批
  • ApprovalFingerprint — 审批指纹
  • RiskLevel — 风险等级
  • ReadOnly — 是否只读

OpenClawToolExecutor 中的审批逻辑增强:

  • 支持指纹匹配验证
  • 如模板、参数或策略在审批后变更,指纹不匹配将阻止执行

十一、飞书 (Feishu/Lark) CLI 配置详细教程

11.1 理解架构

OpenClaw 通过外部 CLI 连接器调用 lark-cli(官方 npm 包 @larksuite/cli)来操作飞书。这需要:

  1. 在飞书开放平台创建自建应用并获取凭证
  2. 安装并配置 lark-cli
  3. 完成用户授权(OAuth 2.0 设备授权流程)
  4. 在 OpenClaw 中配置 External CLI 连接器

11.2 步骤一:创建飞书自建应用

1. 访问飞书开放平台

2. 创建应用

  1. 登录后点击右上角 「开发者后台」
  2. 点击 「创建应用」 → 选择 「企业自建应用」
  3. 填写应用名称(如「我的AI助手」)和描述
  4. 点击 「确认创建」

3. 开启机器人能力

  1. 左侧菜单 → 「应用能力」→「机器人」
  2. 点击 「开启」

4. 获取凭证

  1. 左侧菜单 → 「凭证与基础信息」
  2. 复制以下信息备用:
    • App ID(格式如 cli_xxxxxxxxx
    • App Secret(点击「查看」显示完整内容,请妥善保管)

5. 开通权限 左侧菜单 → 「权限管理」,搜索并开通以下权限:

权限

用途

docx:document:readonly

查看、评论和导出云文档

docx:document:write

创建和编辑云文档

drive:drive:readonly

获取文件元信息

drive:folder:write

管理云空间中所有文件

im:message

发送/接收消息

im:message.group_at_msg

接收群聊 @ 消息

im:message:send_as_bot

以机器人身份发送消息

im:chat

群聊管理

im:resource

消息资源

search:docs:read

搜索文档

6. 发布应用

  1. 左侧菜单 → 「版本管理与发布」
  2. 「创建版本」 → 填写版本说明 → 「提交」
  3. 等待审批(企业内部应用通常自动通过)

11.3 步骤二:安装与配置 lark-cli

1. 安装 lark-cli

代码语言:javascript
复制
# 全局安装
npm install -g @larksuite/cli

# 验证安装
lark-cli --version

2. 配置凭证(交互式)

代码语言:javascript
复制
lark-cli config init --new

按提示输入 App ID 和 App Secret。

3. 配置凭证(非交互式/自动化)

代码语言:javascript
复制
echo "你的App Secret" | lark-cli config init \
  --app-id "你的AppID" \
  --app-secret-stdin \
  --brand feishu

--brand feishu 用于国内版飞书,国际版 Lark 使用 --brand lark

4. 验证配置

代码语言:javascript
复制
lark-cli doctor

应显示配置正确、凭证有效。

11.4 步骤三:用户授权 (OAuth 2.0 设备授权)

1. 发起授权请求

代码语言:javascript
复制
lark-cli auth login --no-wait --recommend --json

输出示例:

代码语言:javascript
复制
{
  "device_code": "ABC123XYZ",
  "user_code": "ABCD1234",
  "verification_url": "https://open.feishu.cn/open-apis/authen/v1/scan?qrcode=..."
}

2. 完成授权 复制 verification_url 到浏览器打开,使用飞书 App 扫码确认。

3. 完成登录 扫码确认后执行:

代码语言:javascript
复制
lark-cli auth login --device-code "ABC123XYZ"

4. 补充搜索权限(如需文档搜索能力)

代码语言:javascript
复制
lark-cli auth login --no-wait --scope "search:docs:read" --json

重复扫码授权流程。

11.5 步骤四:验证 lark-cli 功能

代码语言:javascript
复制
# 搜索文档
lark-cli docs +search --query "文档" --as user

# 创建文档
lark-cli docs +create --title "测试文档" --markdown "# 你好世界"

# 查询日历
lark-cli calendar +agenda --as user

# 发送消息
lark-cli message +send --to-user "user_open_id" --text "Hello from CLI"

11.6 步骤五:在 OpenClaw 中配置 Feishu External CLI 连接器

在 OpenClaw 配置文件中添加:

代码语言:javascript
复制
{
  "OpenClaw": {
    "ExternalCli": {
      "Enabled": true,
      "DefaultTimeoutSeconds": 60,
      "MaxStdoutBytes": 262144,
      "MaxStderrBytes": 65536,
      "RedactSecrets": true,
      "AllowFreeformCommands": false,
      "RequireApprovalForMutatingCommands": true,
      "Connectors": {
        "lark": {
          "Enabled": true,
          "DisplayName": "Lark/Feishu CLI",
          "Executable": "lark-cli",
          "DefaultOutputFormat": "json",
          "StatusCommand": {
            "Args": ["auth", "status"],
            "TimeoutSeconds": 20
          },
          "VersionCommand": {
            "Args": ["--version"],
            "TimeoutSeconds": 10
          },
          "Commands": {
            "auth_status": {
              "Description": "Check lark-cli auth status",
              "ArgsTemplate": ["auth", "status"],
              "RiskLevel": "low",
              "ReadOnly": true,
              "StructuredOutput": "text",
              "Parameters": {}
            },
            "docs_search": {
              "Description": "Search Feishu documents",
              "ArgsTemplate": ["docs", "+search", "--query", "{{query}}", "--as", "user", "--json"],
              "RiskLevel": "low",
              "ReadOnly": true,
              "StructuredOutput": "json",
              "Parameters": {
                "query": { "Required": true, "MaxLength": 200 }
              }
            },
            "docs_read": {
              "Description": "Read a Feishu document",
              "ArgsTemplate": ["docs", "+get", "{{doc_id}}", "--as", "user"],
              "RiskLevel": "low",
              "ReadOnly": true,
              "StructuredOutput": "json",
              "Parameters": {
                "doc_id": { "Required": true }
              }
            },
            "docs_create": {
              "Description": "Create a Feishu document",
              "ArgsTemplate": ["docs", "+create", "--title", "{{title}}", "--markdown", "{{content}}"],
              "RiskLevel": "medium",
              "ReadOnly": false,
              "RequiresApproval": true,
              "StructuredOutput": "json",
              "Parameters": {
                "title": { "Required": true, "MaxLength": 200 },
                "content": { "Required": true, "MaxLength": 50000 }
              }
            },
            "calendar_agenda": {
              "Description": "Query calendar agenda",
              "ArgsTemplate": ["calendar", "+agenda", "--as", "user"],
              "RiskLevel": "low",
              "ReadOnly": true,
              "StructuredOutput": "json",
              "Parameters": {}
            },
            "message_send": {
              "Description": "Send a Feishu message",
              "ArgsTemplate": ["message", "+send", "--to-user", "{{to}}", "--text", "{{text}}"],
              "RiskLevel": "medium",
              "ReadOnly": false,
              "RequiresApproval": true,
              "StructuredOutput": "text",
              "Parameters": {
                "to": { "Required": true },
                "text": { "Required": true, "MaxLength": 2000 }
              }
            }
          }
        }
      }
    }
  }
}

11.7 步骤六:验证 OpenClaw 集成

代码语言:javascript
复制
# 查看连接器状态
openclaw external status lark

# 列出可用命令
openclaw external commands lark

# 预览搜索文档命令
openclaw external preview lark docs_search --param query="项目计划"

# 执行搜索(如需要审批,先预览再加 --yes)
openclaw external execute lark docs_search --param query="项目计划" --yes

# 预览创建文档(变更命令,需要审批)
openclaw external preview lark docs_create \
  --param title="会议纪要 2026-05-10" \
  --param content="# 会议纪要\n\n## 参与人\n- ..."

# 审批后执行
openclaw external execute lark docs_create \
  --param title="会议纪要 2026-05-10" \
  --param content="# 会议纪要\n\n## 参与人\n- ..." \
  --yes

11.8 懒人方式(让 AI 助手自动配置)

你也可以让 AI 助手自动完成大部分配置工作:

代码语言:javascript
复制
帮我配置飞书云文档能力。请按以下步骤做:

1. 检查是否安装了 lark-cli,如果没有则执行:
   npm install -g @larksuite/cli

2. 运行 lark-cli doctor 检查当前状态

3. 如果显示缺少凭证配置,问我 App ID 和 App Secret

4. 拿到凭证后完成配置:
   echo "AppSecret" | lark-cli config init --app-id "AppID" --app-secret-stdin --brand feishu

5. 运行 lark-cli auth login --no-wait --recommend --json
   把返回的 verification_url 发给我,告诉我扫码授权

6. 我扫码确认后,用返回的 device_code 执行登录

7. 如果缺少搜索权限,按上面的方式再走一遍授权流程补充 search:docs:read

8. 全部完成后,用以下命令验证各项能力:
   - lark-cli docs +search --query "文档" --as user
   - lark-cli docs +create --title "测试文档" --markdown "# 你好"
   - lark-cli calendar +agenda --as user

十二、完整 lark-cli 能力一览

模块

能力

docs

搜索文档、创建文档、读取文档、更新文档、分享文档

sheets

读取表格、写入单元格、添加行/列

message

发送文本消息、卡片消息、图片消息

calendar

查询日程、创建日程

mail

搜索邮件、读取邮件、发送邮件

contact

搜索用户、查询部门

wiki

搜索知识库、读取知识库页面

meeting

查询会议纪要

drive

文件上传、下载、管理

bitable

多维表格操作

approval

审批流程查询/操作

okr

OKR 查询/创建


十三、最佳实践与注意事项

13.1 安全最佳实践

  1. 最小权限原则 — 只开通实际需要的权限
  2. 审批变更操作 — 所有写入/变更命令应设置 RequiresApproval: true
  3. 使用只读预设 — 初始配置只启用读操作,按需开启写操作
  4. 监控审计日志 — 定期检查 external_cli 的审计记录
  5. 配置密钥脱敏 — 为涉及敏感凭证的命令添加 RedactionRules
  6. 设置合理超时 — 根据命令特性设置 TimeoutSeconds

13.2 常见问题排查

问题

排查方法

命令执行失败

检查 lark-cli doctor 输出,确认凭证和授权状态

权限不足

在飞书开放平台检查应用权限是否已开通并发布

审批指纹不匹配

命令参数或模板可能在审批后发生变化,重新预览获取新指纹

输出为空

检查 StructuredOutput 设置是否与 CLI 实际输出格式匹配

超时

增加 TimeoutSeconds 设置


十四、总结

OpenClaw.NET 的 External CLI Connectors 提供了一个安全、受控、可审计的框架,将各种官方平台 CLI 集成到 AI Agent 的工具调用体系中。通过命名命令白名单、参数模板、风险评分、预览-审批流程、密钥脱敏和审计日志等多重安全机制,实现了在保持平台深度的同时确保操作安全。

对于飞书/Feishu 集成,通过 lark-cli 外部 CLI 连接器,AI Agent 可以安全地读写飞书云文档、查询日历、发送消息等,所有变更操作都需要显式审批,确保企业数据安全

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2026-05-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、架构概述
  • 二、安全模型 (Security Model)
    • 2.1 核心安全原则
    • 2.2 命令调用方式
    • 2.3 关键安全默认值
  • 三、配置系统详解
    • 3.1 顶层配置结构
    • 3.2 连接器配置结构
    • 3.3 命令配置选项说明
    • 3.4 参数验证选项
  • 四、预览与审批流程 (Preview & Approval)
    • 4.1 预览命令
    • 4.2 预览返回信息
    • 4.3 执行审批流程
    • 4.4 Dry-Run 支持
  • 五、审计、事件与脱敏 (Audit, Events & Redaction)
    • 5.1 审计记录 (Append-Only Audit)
    • 5.2 运行时事件
    • 5.3 密钥脱敏 (Redaction)
  • 六、输出解析 (Output Parsing)
  • 七、推荐配置预设 (Conservative Presets)
    • 7.1 GitHub CLI (gh)
    • 7.2 Azure CLI (az)
    • 7.3 kubectl
    • 7.4 Stripe CLI
    • 7.5 Lark / Feishu CLI
  • 八、管理 API (Admin API)
  • 九、CLI 命令
  • 十、代码实现架构 (Commit bde72ea)
    • 10.1 项目结构
    • 10.2 核心类型与接口
    • 10.3 关键数据模型
    • 10.4 执行流程
    • 10.5 策略解析增强
  • 十一、飞书 (Feishu/Lark) CLI 配置详细教程
    • 11.1 理解架构
    • 11.2 步骤一:创建飞书自建应用
    • 11.3 步骤二:安装与配置 lark-cli
    • 11.4 步骤三:用户授权 (OAuth 2.0 设备授权)
    • 11.5 步骤四:验证 lark-cli 功能
    • 11.6 步骤五:在 OpenClaw 中配置 Feishu External CLI 连接器
    • 11.7 步骤六:验证 OpenClaw 集成
    • 11.8 懒人方式(让 AI 助手自动配置)
  • 十二、完整 lark-cli 能力一览
  • 十三、最佳实践与注意事项
    • 13.1 安全最佳实践
    • 13.2 常见问题排查
  • 十四、总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档