Skip to content

密钥管理问题(SecretRef)

编号格式 #NNNNN 对应 GitHub issue,可直接搜索去重。


SecretRef 渠道 token 启动正常但回复时失效

来源:GitHub #45838(2026-03)

现象:使用 exec 类型 SecretRef 配置 Slack/Telegram 渠道 token(如从 macOS Keychain 读取),Gateway 启动成功、渠道连接正常,但收到消息回复时报错:

channels.slack.accounts.default.botToken: unresolved SecretRef "exec:keychain_slack_bot:value".
Resolve this command against an active gateway runtime snapshot before reading it.

原因:SecretRef 在 Gateway 启动时解析并缓存,但回复发送路径读取的是原始配置对象(含未解析的 SecretRef 占位符)而非运行时快照。若配置被热重载(文件变动触发),新的配置对象未重走解析步骤,导致 token 变为未解析状态。

解决方法

方案 1(推荐):改用环境变量,避免热重载问题:

json5
{
  channels: {
    slack: {
      botToken: "${SLACK_BOT_TOKEN}",
      appToken: "${SLACK_APP_TOKEN}"
    }
  }
}

方案 2:禁用配置文件热重载:

json5
{
  gateway: {
    watchConfig: false
  }
}

方案 3:将 token 直接明文写入 openclaw.json,权限设为 600:

bash
chmod 600 ~/.openclaw/openclaw.json

注意:此问题影响所有使用 exec/keychain SecretRef 的渠道,包括 Slack、Telegram、Discord。


另见