故障排除 🔧
当 OpenClaw 出现异常时,以下是修复方法。 如果你只想快速分诊,请先查看常见问题的前 60 秒。本页将深入介绍运行时故障和诊断方法。 提供商相关快捷入口:/channels/troubleshooting状态与诊断
快速分诊命令(按顺序执行):| 命令 | 告诉你什么 | 何时使用 |
|---|---|---|
openclaw status | 本地摘要:操作系统 + 更新、Gateway网关可达性/模式、服务、智能体/会话、提供商配置状态 | 首次检查,快速概览 |
openclaw status --all | 完整本地诊断(只读、可粘贴、基本安全)包含日志尾部 | 需要分享调试报告时 |
openclaw status --deep | 运行 Gateway网关健康检查(包括提供商探测;需要 Gateway网关可达) | 当”已配置”不等于”正常工作”时 |
openclaw gateway probe | Gateway网关发现 + 可达性(本地 + 远程目标) | 怀疑探测了错误的 Gateway网关时 |
openclaw channels status --probe | 向运行中的 Gateway网关查询渠道状态(可选探测) | Gateway网关可达但渠道异常时 |
openclaw gateway status | 管理器状态(launchd/systemd/schtasks)、运行时 PID/退出码、最后一次 Gateway网关错误 | 服务”看起来已加载”但实际未运行时 |
openclaw logs --follow | 实时日志(运行时问题的最佳信号源) | 需要查看实际失败原因时 |
openclaw status --all(它会脱敏令牌)。如果粘贴 openclaw status 的输出,建议先设置 OPENCLAW_SHOW_SECRETS=0(令牌预览)。
另见:健康检查 和 日志。
常见问题
No API key found for provider “anthropic”
这意味着智能体的认证存储为空或缺少 Anthropic 凭据。 认证是按智能体隔离的,因此新智能体不会继承主智能体的密钥。 修复选项:- 重新运行新手引导,为该智能体选择 Anthropic。
- 或者在 Gateway网关主机上粘贴 setup-token:
- 或将主智能体目录中的
auth-profiles.json复制到新智能体目录。
OAuth token refresh failed (Anthropic Claude subscription)
这意味着存储的 Anthropic OAuth 令牌已过期且刷新失败。 如果你使用的是 Claude 订阅(无 API 密钥),最可靠的修复方法是 切换到 Claude Code setup-token 并在 Gateway网关主机上粘贴。 推荐方式(setup-token):控制面板在 HTTP 下失败(“device identity required” / “connect failed”)
如果你通过纯 HTTP 打开仪表盘(例如http://<lan-ip>:18789/ 或
http://<tailscale-ip>:18789/),浏览器运行在非安全上下文中,
会阻止 WebCrypto,导致无法生成设备身份。
修复:
- 优先通过 Tailscale Serve 使用 HTTPS。
- 或在 Gateway网关主机上本地打开:
http://127.0.0.1:18789/。 - 如果必须使用 HTTP,启用
gateway.controlUi.allowInsecureAuth: true并 使用 Gateway网关令牌(仅令牌;无设备身份/配对)。参见 控制面板。
CI 密钥扫描失败
这意味着detect-secrets 发现了尚未纳入基线的新候选项。
请参考密钥扫描。
服务已安装但未运行
如果 Gateway网关服务已安装但进程立即退出,服务 可能显示”已加载”但实际上没有任何进程在运行。 检查:- 推荐:
openclaw logs --follow - 文件日志(始终可用):
/tmp/openclaw/openclaw-YYYY-MM-DD.log(或你配置的logging.file) - macOS LaunchAgent(如已安装):
$OPENCLAW_STATE_DIR/logs/gateway.log和gateway.err.log - Linux systemd(如已安装):
journalctl --user -u openclaw-gateway[-<profile>].service -n 200 --no-pager - Windows:
schtasks /Query /TN "OpenClaw Gateway网关 (<profile>)" /V /FO LIST
- 提高文件日志详细级别(持久化 JSONL):
- 提高控制台日志详细级别(仅 TTY 输出):
- 小提示:
--verbose仅影响控制台输出。文件日志仍由logging.level控制。
“Gateway网关 start blocked: set gateway.mode=local”
这意味着配置文件存在但gateway.mode 未设置(或不是 local),因此
Gateway网关拒绝启动。
修复(推荐):
- 运行向导并将 Gateway网关运行模式设置为 Local:
- 或直接设置:
- 设置远程 URL 并保持
gateway.mode=remote:
--allow-unconfigured 以在未设置
gateway.mode=local 的情况下启动 Gateway网关。
还没有配置文件? 运行 openclaw setup 创建初始配置,然后重新运行
Gateway网关。
服务环境(PATH + 运行时)
Gateway网关服务运行时使用最小化 PATH,以避免 shell/管理器的干扰:- macOS:
/opt/homebrew/bin、/usr/local/bin、/usr/bin、/bin - Linux:
/usr/local/bin、/usr/bin、/bin
DISPLAY 应放在 ~/.openclaw/.env 中(由 Gateway网关在启动早期加载)。
在 host=gateway 上的 Exec 运行会将你的登录 shell PATH 合并到执行环境中,
因此缺少工具通常意味着你的 shell 初始化脚本没有导出它们(或设置
tools.exec.pathPrepend)。参见 /tools/exec。
WhatsApp + Telegram 渠道需要 Node;不支持 Bun。如果你的
服务安装时使用了 Bun 或版本管理器管理的 Node 路径,请运行 openclaw doctor
以迁移到系统级 Node 安装。
Skills 在沙箱中缺少 API 密钥
症状: Skills 在主机上正常运行,但在沙箱中因缺少 API 密钥而失败。 原因: 沙箱隔离的 exec 在 Docker 中运行,不会继承主机的process.env。
修复:
- 设置
agents.defaults.sandbox.docker.env(或按智能体设置agents.list[].sandbox.docker.env) - 或将密钥内置到自定义沙箱镜像中
- 然后运行
openclaw sandbox recreate --agent <id>(或--all)
服务在运行但端口未监听
如果服务报告正在运行但 Gateway网关端口上没有监听, Gateway网关很可能拒绝了绑定。 此处”正在运行”的含义Runtime: running表示你的管理器(launchd/systemd/schtasks)认为进程是活跃的。RPC probe表示 CLI 实际上能够连接到 Gateway网关 WebSocket 并调用status。- 始终以
Probe target:+Config (service):作为”我们实际尝试了什么?“的依据。
gateway.mode对于openclaw gateway和服务必须为local。- 如果你设置了
gateway.mode=remote,CLI 默认使用远程 URL。服务可能仍在本地运行,但你的 CLI 可能在探测错误的位置。使用openclaw gateway status查看服务解析的端口 + 探测目标(或传递--url)。 openclaw gateway status和openclaw doctor会在服务看起来正在运行但端口未打开时显示最后一次 Gateway网关错误日志。- 非 local loopback 绑定(
lan/tailnet/custom,或 local loopback 不可用时的auto)需要认证:gateway.auth.token(或OPENCLAW_GATEWAY_TOKEN)。 gateway.remote.token仅用于远程 CLI 调用;它不会启用本地认证。gateway.token会被忽略;请使用gateway.auth.token。
openclaw gateway status 显示配置不匹配
Config (cli): ...和Config (service): ...通常应该一致。- 如果不一致,几乎可以确定你在编辑一个配置而服务在运行另一个配置。
- 修复:从你希望服务使用的相同
--profile/OPENCLAW_STATE_DIR重新运行openclaw gateway install --force。
openclaw gateway status 报告服务配置问题
- 管理器配置(launchd/systemd/schtasks)缺少当前默认值。
- 修复:运行
openclaw doctor更新配置(或openclaw gateway install --force完整重写)。
Last gateway error: 提到 “refusing to bind … without auth”
- 你将
gateway.bind设置为非 local loopback 模式(lan/tailnet/custom,或 local loopback 不可用时的auto)但未配置认证。 - 修复:设置
gateway.auth.mode+gateway.auth.token(或导出OPENCLAW_GATEWAY_TOKEN)并重启服务。
openclaw gateway status 显示 bind=tailnet 但未找到 tailnet 接口
- Gateway网关尝试绑定到 Tailscale IP(100.64.0.0/10)但主机上未检测到。
- 修复:在该机器上启动 Tailscale(或将
gateway.bind改为loopback/lan)。
Probe note: 显示探测使用 local loopback
- 对于
bind=lan这是预期行为:Gateway网关监听0.0.0.0(所有接口),local loopback 在本地仍可连接。 - 对于远程客户端,请使用真实的 LAN IP(不是
0.0.0.0)加端口,并确保已配置认证。
地址已被占用(端口 18789)
这意味着某个进程已经在 Gateway网关端口上监听。 检查:检测到多余的工作区文件夹
如果你从旧版本升级,磁盘上可能仍有~/openclaw。
多个工作区目录可能导致认证或状态漂移的混乱,因为
只有一个工作区是活跃的。
修复: 保留一个活跃工作区,归档/删除其余的。参见
智能体工作区。
主聊天在沙箱工作区中运行
症状:pwd 或文件工具显示 ~/.openclaw/sandboxes/...,但你
期望的是主机工作区。
原因: agents.defaults.sandbox.mode: "non-main" 基于 session.mainKey(默认 "main")判断。
群组/渠道会话使用自己的键,因此被视为非主会话并
获得沙箱工作区。
修复选项:
- 如果你想让某个智能体使用主机工作区:设置
agents.list[].sandbox.mode: "off"。 - 如果你想在沙箱内访问主机工作区:为该智能体设置
workspaceAccess: "rw"。
“Agent was aborted”
智能体在响应过程中被中断。 原因:- 用户发送了
stop、abort、esc、wait或exit - 超时
- 进程崩溃
“Agent failed before reply: Unknown model: anthropic/claude-haiku-3-5”
OpenClaw 有意拒绝旧版/不安全的模型(特别是那些更 容易受到提示注入攻击的模型)。如果你看到此错误,说明该模型名称 已不再支持。 修复:- 为该提供商选择一个最新模型,并更新你的配置或模型别名。
- 如果不确定有哪些可用模型,运行
openclaw models list或openclaw models scan并选择一个受支持的模型。 - 检查 Gateway网关日志了解详细的失败原因。
消息未触发
检查 1: 发送者是否在白名单中?AllowFrom: ...。
检查 2: 对于群聊,是否需要提及?
配对码未送达
如果dmPolicy 为 pairing,未知发送者应收到一个验证码,其消息在批准前会被忽略。
检查 1: 是否已有待处理的请求?
dmPolicy 不是 open/allowlist。
图片 + 提及无法正常工作
已知问题:当你发送图片且仅附带提及(无其他文本)时,WhatsApp 有时不会包含提及元数据。 解决方法: 在提及时添加一些文本:- ❌
@openclaw+ 图片 - ✅
@openclaw check this+ 图片
会话未恢复
检查 1: 会话文件是否存在?/new、/reset 或重置触发器?
智能体超时
默认超时为 30 分钟。对于长时间任务:process 工具将长命令放到后台运行。
WhatsApp 断开连接
媒体发送失败
检查 1: 文件路径是否有效?- 图片:最大 6MB
- 音频/视频:最大 16MB
- 文档:最大 100MB
内存使用过高
OpenClaw 将对话历史保存在内存中。 修复: 定期重启或设置会话限制:常见故障排除
”Gateway网关 won’t start — configuration invalid”
OpenClaw 现在会在配置包含未知键、格式错误的值或无效类型时拒绝启动。 这是出于安全考虑的有意设计。 使用 Doctor 修复:openclaw doctor会报告每个无效条目。openclaw doctor --fix会应用迁移/修复并重写配置。- 诊断命令如
openclaw logs、openclaw health、openclaw status、openclaw gateway status和openclaw gateway probe即使配置无效也能运行。
“All models failed” — 我应该先检查什么?
- 正在使用的提供商是否存在凭据(认证配置文件 + 环境变量)。
- 模型路由:确认
agents.defaults.model.primary和回退模型是你能访问的模型。 /tmp/openclaw/…中的 Gateway网关日志查看具体的提供商错误。- 模型状态:使用
/model status(聊天中)或openclaw models status(CLI)。
我用个人 WhatsApp 号码运行 — 为什么自聊行为异常?
启用自聊模式并将你自己的号码加入白名单:WhatsApp 将我登出了。如何重新认证?
重新运行登录命令并扫描二维码:main 分支构建错误 — 标准修复路径是什么?
git pull origin main && pnpm installopenclaw doctor- 查看 GitHub issues 或 Discord
- 临时解决方案:回退到较旧的提交
npm install 失败(allow-build-scripts / 缺少 tar 或 yargs)。怎么办?
如果你从源码运行,请使用仓库指定的包管理器:pnpm(推荐)。 仓库声明了packageManager: "pnpm@…"。
典型恢复步骤:
如何在 git 安装和 npm 安装之间切换?
使用官网安装脚本并通过标志选择安装方式。它会 就地升级并重写 Gateway网关服务以指向新的安装。 切换到 git 安装:- git 流程仅在仓库干净时才会 rebase。请先提交或暂存更改。
- 切换后运行:
Telegram 块式流不在工具调用之间拆分文本。为什么?
块式流仅发送已完成的文本块。你看到单条消息的常见原因:agents.defaults.blockStreamingDefault仍为"off"。channels.telegram.blockStreaming设置为false。channels.telegram.streamMode为partial或block且草稿流处于活跃状态 (私聊 + 话题)。草稿流在此情况下会禁用块式流。- 你的
minChars/ coalesce 设置过高,导致块被合并。 - 模型输出了一个大型文本块(没有中途刷新点)。
- 将块式流设置放在
agents.defaults下,而不是根级别。 - 如果你想要真正的多消息块式回复,设置
channels.telegram.streamMode: "off"。 - 调试时使用较小的 chunk/coalesce 阈值。
Discord 在我的服务器中不回复,即使设置了 requireMention: false。为什么?
requireMention 仅在渠道通过白名单之后控制提及门控。
默认情况下 channels.discord.groupPolicy 为 allowlist,因此必须显式启用服务器。
如果你设置了 channels.discord.guilds.<guildId>.channels,则只允许列出的频道;省略它则允许服务器中的所有频道。
修复清单:
- 设置
channels.discord.groupPolicy: "open"或添加服务器白名单条目(可选添加频道白名单)。 - 在
channels.discord.guilds.<guildId>.channels中使用数字频道 ID。 - 将
requireMention: false放在channels.discord.guilds下方(全局或按频道)。 顶层channels.discord.requireMention不是受支持的键。 - 确保机器人拥有 Message Content Intent 和频道权限。
- 运行
openclaw channels status --probe获取审计提示。
Cloud Code Assist API 错误:invalid tool schema (400)。怎么办?
这几乎总是工具 schema 兼容性问题。Cloud Code Assist 端点接受 JSON Schema 的严格子集。OpenClaw 在当前main 中会清洗/规范化工具
schema,但此修复尚未包含在最新发布版中(截至
2026 年 1 月 13 日)。
修复清单:
- 更新 OpenClaw:
- 如果你能从源码运行,拉取
main并重启 Gateway网关。 - 否则,等待包含 schema 清洗器的下一个版本。
- 如果你能从源码运行,拉取
- 避免不受支持的关键字,如
anyOf/oneOf/allOf、patternProperties、additionalProperties、minLength、maxLength、format等。 - 如果你定义自定义工具,保持顶层 schema 为
type: "object",带properties和简单枚举。
macOS 特定问题
授予权限时应用崩溃(语音/麦克风)
如果应用在你点击隐私提示的”允许”时消失或显示”Abort trap 6”: 修复 1:重置 TCC 缓存scripts/package-mac-app.sh 中的 BUNDLE_ID(例如添加 .test 后缀)并重新构建。这会强制 macOS 将其视为新应用。
Gateway网关卡在”Starting…”
应用连接到端口18789 上的本地 Gateway网关。如果一直卡住:
修复 1:停止管理器(推荐)
如果 Gateway网关由 launchd 管理,杀死 PID 只会让它重新启动。先停止管理器:
openclaw CLI 已安装且版本与应用匹配:
调试模式
获取详细日志:日志位置
| 日志 | 位置 |
|---|---|
| Gateway网关文件日志(结构化) | /tmp/openclaw/openclaw-YYYY-MM-DD.log(或 logging.file) |
| Gateway网关服务日志(管理器) | macOS:$OPENCLAW_STATE_DIR/logs/gateway.log + gateway.err.log(默认:~/.openclaw/logs/...;profile 使用 ~/.openclaw-<profile>/logs/...)Linux: journalctl --user -u openclaw-gateway[-<profile>].service -n 200 --no-pagerWindows: schtasks /Query /TN "OpenClaw Gateway网关 (<profile>)" /V /FO LIST |
| 会话文件 | $OPENCLAW_STATE_DIR/agents/<agentId>/sessions/ |
| 媒体缓存 | $OPENCLAW_STATE_DIR/media/ |
| 凭据 | $OPENCLAW_STATE_DIR/credentials/ |
健康检查
重置一切
核弹选项:获取帮助
- 先查看日志:
/tmp/openclaw/(默认:openclaw-YYYY-MM-DD.log,或你配置的logging.file) - 在 GitHub 上搜索现有 issues
- 提交新 issue 并附上:
- OpenClaw 版本
- 相关日志片段
- 复现步骤
- 你的配置(脱敏!)
“你试过关掉再打开吗?” — 每个 IT 人员都说过 🦞🔧
浏览器无法启动(Linux)
如果你看到"Failed to start Chrome CDP on port 18800":
最可能的原因: Ubuntu 上的 Snap 打包的 Chromium。
快速修复: 改为安装 Google Chrome: