出问题后的前 60 秒
快速状态
可直接粘贴的报告(可安全分享)
守护进程 + 端口状态
深度探测
运行诊断修复程序(修复)
网关快照(仅 WS)
快速开始与首次运行设置
首次运行问答——安装、入职、认证路由、订阅、初始失败——请参阅 首次运行常见问题。什么是 OpenClaw?
OpenClaw 是什么,用一段话概括?
OpenClaw 是什么,用一段话概括?
价值主张
价值主张
- 你的设备,你的数据:可在任何你想要的地方运行 Gateway(Mac、Linux、VPS),并将工作区和会话历史保留在本地。
- 真实渠道,而不是网页沙盒:Discord/iMessage/Signal/Slack/Telegram/WhatsApp 等,以及在受支持平台上的移动端语音和 Canvas。
- 模型无关:可使用 Anthropic、MiniMax、OpenAI、OpenRouter 等,并支持按代理路由和故障转移。
- 仅本地选项:运行本地模型,使所有数据都能留在你的设备上。
- 多代理路由:按频道、账号或任务分别设置代理,每个代理都有自己的工作区和默认配置。
- 开源且可改造:可检查、扩展并自托管,不受供应商锁定。
我刚刚完成设置 - 第一件该做什么?
我刚刚完成设置 - 第一件该做什么?
OpenClaw 最常见的五个日常使用场景是什么?
OpenClaw 最常见的五个日常使用场景是什么?
- 个人简报:汇总你关心的收件箱、日历和新闻。
- 研究与起草:快速研究、摘要,以及邮件或文档的初稿。
- 提醒与跟进:由 cron 或 heartbeat 驱动的提醒和检查清单。
- 浏览器自动化:填写表单、收集数据、重复执行网页任务。
- 跨设备协作:从手机发送任务,让 Gateway 在服务器上运行,再把结果通过聊天返回给你。
OpenClaw 能帮助 SaaS 做潜在客户开发、外联、广告和博客吗?
OpenClaw 能帮助 SaaS 做潜在客户开发、外联、广告和博客吗?
与 Claude Code 相比,它在网页开发方面有哪些优势?
与 Claude Code 相比,它在网页开发方面有哪些优势?
- 会话之间保留持久记忆和工作区。
- 多平台访问(Telegram、WhatsApp、TUI、WebChat)。
- 工具编排(浏览器、文件、调度、hooks)。
- 始终在线的 Gateway(可运行在 VPS 上,并从任何地方交互)。
- 用于本地浏览器/屏幕/摄像头/exec 的节点。
技能与自动化
如何自定义技能而不让仓库保持脏状态?
如何自定义技能而不让仓库保持脏状态?
~/.openclaw/skills/<name>/SKILL.md(或通过 ~/.openclaw/openclaw.json 中的 skills.load.extraDirs 添加文件夹)。优先级为:<workspace>/skills -> <workspace>/.agents/skills -> ~/.agents/skills -> ~/.openclaw/skills -> bundled -> skills.load.extraDirs,因此托管覆盖可以在不修改 git 的情况下覆盖捆绑技能。若要全局安装但限制对部分智能体的可见性,请将共享副本保存在 ~/.openclaw/skills 中,并通过 agents.defaults.skills / agents.entries.*.skills 控制可见性。只有值得上游合并的编辑才应针对仓库副本提交 PR。可以从自定义文件夹加载技能吗?
可以从自定义文件夹加载技能吗?
~/.openclaw/openclaw.json 中的 skills.load.extraDirs 添加目录(在上述顺序中优先级最低)。clawhub 默认安装到 ./skills,OpenClaw 会在下一次会话中将其视为 <workspace>/skills。若要限制对特定智能体的可见性,请结合使用 agents.defaults.skills 或 agents.entries.*.skills。如何为不同任务使用不同的模型或设置?
如何为不同任务使用不同的模型或设置?
- Cron 任务:隔离任务可以为每个任务设置
model覆盖。 - 智能体:将任务路由到不同的智能体,每个智能体可以拥有不同的默认模型、思考级别和流式传输参数。
- 已配置的默认值 + 当前会话:直接所有者/管理员使用
/model <model>会更改当前会话,并尽力更新已配置的默认值。如果智能体没有显式的主要模型,目标就是共享的agents.defaults.model回退值。 - 仅当前会话:
/model <model> -s(或--session)只更改当前会话,不修改已配置的默认值。
agents.defaults.models["provider/model"].params 中,然后将智能体特定的覆盖放在扁平的 agents.entries.*.params 中。不要在嵌套的 agents.entries.*.models["provider/model"].params 下重复相同的模型;该路径用于按智能体的模型目录和运行时覆盖。参见 Cron 任务、多智能体路由、配置、斜杠命令。机器人在执行重任务时卡住了。如何把这部分卸载出去?
机器人在执行重任务时卡住了。如何把这部分卸载出去?
Discord 上绑定线程的子智能体会话是如何工作的?
Discord 上绑定线程的子智能体会话是如何工作的?
- 使用
sessions_spawn并设置thread: true创建(也可选mode: "session"以便持续跟进)。 - 或者用
/focus <target>手动绑定。 /agents可检查绑定状态。/session idle <duration|off>和/session max-age <duration|off>控制自动取消聚焦。/unfocus会解除线程绑定。
session.threadBindings.enabled(全局开关)、session.threadBindings.idleHours(默认值为 24,0 表示禁用)、session.threadBindings.maxAgeHours(默认值为 0 = 无硬性上限),以及用于在生成时自动绑定的 session.threadBindings.spawnSessions(默认值为 true)。文档:子智能体、Discord、配置参考、斜杠命令。子智能体完成了,但完成更新发到了错误的位置,或者根本没有发送。该检查什么?
子智能体完成了,但完成更新发到了错误的位置,或者根本没有发送。该检查什么?
- 完成模式的子智能体投递会优先使用已绑定的线程或会话路由(如果存在)。
- 如果完成来源只带有一个频道,OpenClaw 会回退到请求方会话中保存的路由(
lastChannel/lastTo/lastAccountId),这样仍然可以直接投递成功。 - 如果没有绑定路由,也没有可用的已保存路由:直接投递可能失败,结果会回退为排队的会话投递,而不是立即发布。
- 无效或过期的目标也会强制回退到队列,或导致最终投递失败。
- 如果子任务最后一次可见的 assistant 回复恰好是
NO_REPLY/no_reply或ANNOUNCE_SKIP,OpenClaw 会故意抑制 announce,而不是发布过时的较早进度。
openclaw tasks show <lookup>,其中 <lookup> 可以是任务 id、运行 id 或会话 key。文档:子智能体、后台任务、会话工具。Cron 或提醒没有触发。我该检查什么?
Cron 或提醒没有触发。我该检查什么?
Cron 触发了,但没有任何内容发送到频道。为什么?
Cron 触发了,但没有任何内容发送到频道。为什么?
--no-deliver/delivery.mode: "none":不会期待 runner 进行兜底发送。- 缺少或无效的 announce 目标(
channel/to):runner 会跳过外发投递。 - 频道认证失败(
unauthorized、Forbidden):runner 尝试投递了,但凭据阻止了它。 - 无声的隔离结果(仅
NO_REPLY/no_reply)会被视为有意不可投递,因此也会抑制排队的兜底投递。
message 工具直接发送。--announce 只控制 runner 对智能体本身尚未发送的最终文本进行兜底投递。调试:为什么一个隔离的 cron 运行会切换模型或重试一次?
为什么一个隔离的 cron 运行会切换模型或重试一次?
如何在 Linux 上安装技能?
如何在 Linux 上安装技能?
openclaw skills 命令,或者把技能直接放入你的工作区;macOS 的 Skills UI 在 Linux 上不可用。可在 https://clawhub.ai 浏览技能。openclaw skills install 默认写入当前工作区的 skills/ 目录。添加 --global 可将技能安装到所有本地智能体共享的托管技能目录中。只有在发布或同步你自己的技能时,才需要单独安装 clawhub CLI。使用 agents.defaults.skills 或 agents.entries.*.skills 限制哪些智能体可以看到共享技能。OpenClaw 可以按计划或在后台持续运行任务吗?
OpenClaw 可以按计划或在后台持续运行任务吗?
我可以在 Linux 上运行仅适用于 Apple macOS 的技能吗?
我可以在 Linux 上运行仅适用于 Apple macOS 的技能吗?
metadata.openclaw.os 以及所需二进制文件限制,并且只会在 Gateway 主机 满足条件时加载。在 Linux 上,darwin 专用技能(apple-notes、apple-reminders、things-mac)不会加载,除非你覆盖该限制。有三种支持的模式:方案 A - 在 Mac 上运行 Gateway(最简单)。在具备 macOS 二进制文件的机器上运行 Gateway,然后通过 远程模式 或 Tailscale 从 Linux 连接。由于 Gateway 主机是 macOS,技能会正常加载。方案 B - 使用 macOS 节点(无需 SSH)。在 Linux 上运行 Gateway,配对一个 macOS 节点(菜单栏应用),并在 Mac 上将 Node Run Commands 设置为 “Always Ask” 或 “Always Allow”。当所需二进制文件存在于节点上时,OpenClaw 会将 macOS 专用技能视为可用;智能体会通过 nodes 工具运行它们。若选择 “Always Ask”,在提示中批准 “Always Allow” 会将该命令加入允许列表。方案 C - 通过 SSH 代理 macOS 二进制文件(高级)。保持 Gateway 在 Linux 上运行,但让所需的 CLI 二进制文件解析为在 Mac 上执行的 SSH 包装器,然后覆盖技能以允许 Linux,这样它仍会保持可用。- 为该二进制文件创建一个 SSH 包装器(示例:Apple Notes 的
memo): - 将包装器放到 Linux 主机的
PATH中(例如~/bin/memo)。 - 覆盖技能元数据(工作区或
~/.openclaw/skills),允许 Linux: - 启动一个新会话,以刷新技能快照。
你们有 Notion 或 HeyGen 集成吗?
你们有 Notion 或 HeyGen 集成吗?
- 自定义技能 / 插件:最适合稳定的 API 访问(两者都有 API)。
- 浏览器自动化:无需代码即可工作,但更慢也更脆弱。
skills/ 目录;使用 --global 可供所有本地智能体使用,或配置 agents.defaults.skills / agents.entries.*.skills 以限制可见性。某些技能需要通过 Homebrew 安装的二进制文件;在 Linux 上,这意味着 Linuxbrew。参见 技能、技能配置、ClawHub。如何让 OpenClaw 使用我已经登录的 Chrome?
如何让 OpenClaw 使用我已经登录的 Chrome?
user 浏览器配置文件,它通过 Chrome DevTools MCP 连接:existing-session / user 配置文件相对于托管的 openclaw 配置文件,目前的限制是:click、type、hover、scrollIntoView、drag和select需要 snapshot refs,而不是 CSS 选择器。- 上传钩子需要
ref或inputRef,一次只能传一个文件,不能使用 CSSelement。 responsebody、PDF 导出、下载拦截和批量操作仍然需要托管浏览器路径。
沙箱和内存
Docker 感觉受限——我该如何启用完整功能?
Docker 感觉受限——我该如何启用完整功能?
我能否在使用一个代理的情况下,让私聊保持私密,但把群组设为公开/沙箱化?
我能否在使用一个代理的情况下,让私聊保持私密,但把群组设为公开/沙箱化?
agents.defaults.sandbox.mode 设为 "non-main",这样群组/频道会话(非主会话键)会在配置的沙箱后端中运行,而主私聊会话仍保留在主机上。启用沙箱后,Docker 是默认后端。可通过 tools.sandbox.tools 限制沙箱会话中可用的工具。操作指南:群组:个人私聊 + 公开群组。关键参考:网关配置。如何把主机文件夹挂载到沙箱中?
如何把主机文件夹挂载到沙箱中?
agents.defaults.sandbox.docker.binds 设置为 ["host:container:mode"](例如 "/home/user/src:/src:ro")。全局和按代理的挂载会合并;当 scope: "shared" 时,会忽略按代理的挂载。对任何敏感内容都使用 :ro;挂载会绕过沙箱文件系统边界。OpenClaw 会同时根据规范化路径和通过最深的已存在祖先解析出的规范路径来验证挂载源,因此即使最终路径段尚不存在,符号链接父级逃逸也会被阻止。参见 沙箱 和 沙箱与工具策略及提升权限。内存是如何工作的?
内存是如何工作的?
memory/YYYY-MM-DD.md 中的每日笔记,以及 MEMORY.md 中整理过的长期笔记(仅主会话/私有会话)。OpenClaw 还会在压缩总结对话之前静默执行一次 压缩前内存刷新,提醒模型先写入持久化笔记。它只会在工作区可写时运行(只读沙箱会跳过);可通过 agents.defaults.compaction.memoryFlush.enabled: false 关闭。参见 内存。内存总是忘记事情。我该如何让它记住?
内存总是忘记事情。我该如何让它记住?
内存会永久保留吗?有哪些限制?
内存会永久保留吗?有哪些限制?
语义内存搜索需要 OpenAI API 密钥吗?
语义内存搜索需要 OpenAI API 密钥吗?
OPENAI_API_KEY 或 models.providers.openai.apiKey)。若想保持本地运行,可将 agents.defaults.memorySearch.provider: "local"(GGUF/llama.cpp)。其他受支持的提供方包括:Bedrock、DeepInfra、Gemini(GEMINI_API_KEY 或 memorySearch.remote.apiKey)、GitHub Copilot、LM Studio、Mistral、Ollama、OpenAI 兼容提供方和 Voyage。设置详情请参见 内存 和 内存搜索。磁盘上的内容位置
OpenClaw 使用的所有数据都会保存在本地吗?
OpenClaw 使用的所有数据都会保存在本地吗?
-
默认本地存储:会话、记忆文件、配置和工作区都位于 Gateway 主机上(
~/.openclaw以及你的工作区目录)。 - 因需求而远程:发送给模型提供方(Anthropic/OpenAI 等)的消息会传到它们的 API,而聊天平台(Slack/Telegram/WhatsApp 等)会将消息数据存储在它们自己的服务器上。
- 你可以控制足迹:本地模型会把提示词保留在你的机器上,但通道流量仍会经过该通道的服务器。
-
使用
OPENCLAW_HOME_VOLUME持久化/home/node,使缓存得以保留。 -
使用
OPENCLAW_IMAGE_APT_PACKAGES将系统依赖预先打包进镜像。 -
使用
OPENCLAW_INSTALL_BROWSER=1将 Playwright Chromium 及其系统依赖预先打包进镜像。
我可以让私信保持私密,同时让群组公开/沙箱化,并使用同一个代理吗?
我可以让私信保持私密,同时让群组公开/沙箱化,并使用同一个代理吗?
agents.defaults.sandbox.mode: "non-main",这样群组/频道会话(非主会话键)会在配置的沙箱后端中运行,而主私信会话仍在主机上运行。Docker 使用 backend: "docker",Podman 使用 backend: "podman"。通过 tools.sandbox.tools 限制沙箱会话中可用的工具。配置指南:群组:私密私信 + 公开群组。关键参考:Gateway 配置。如何将主机文件夹绑定到沙箱中?
如何将主机文件夹绑定到沙箱中?
agents.defaults.sandbox.docker.binds 设置为 ["host:container:mode"](例如 "/home/user/src:/src:ro")。全局绑定和代理级绑定会合并;当 scope: "shared" 时,代理级绑定会被忽略。对任何敏感内容使用 :ro;绑定会绕过沙箱的文件系统隔离边界。OpenClaw 会同时根据规范化路径,以及通过最深层现有祖先目录解析得到的规范路径验证绑定源,因此即使最终路径段尚不存在,符号链接父目录逃逸也会安全失败。请参阅沙箱和沙箱与工具策略及提权。记忆是如何工作的?
记忆是如何工作的?
memory/YYYY-MM-DD.md,整理后的长期笔记位于 MEMORY.md(仅限主会话/私密会话)。OpenClaw 还会在压缩总结对话之前,静默执行一次压缩前记忆刷新,提醒模型先写入持久笔记。该操作仅在工作区可写时运行(只读沙箱会跳过);使用 agents.defaults.compaction.memoryFlush.enabled: false 可将其禁用。请参阅记忆。记忆总是忘记事情。我该如何让它记住?
记忆总是忘记事情。我该如何让它记住?
记忆会永久保留吗?有哪些限制?
记忆会永久保留吗?有哪些限制?
语义记忆搜索需要 OpenAI API 密钥吗?
语义记忆搜索需要 OpenAI API 密钥吗?
OPENAI_API_KEY 或 models.providers.openai.apiKey)。若要完全在本地运行,请设置 memory.search.provider: "local"(GGUF/llama.cpp)。其他受支持的提供方包括:Bedrock、DeepInfra、Gemini(GEMINI_API_KEY 或 memory.search.remote.apiKey)、GitHub Copilot、LM Studio、Mistral、Ollama、OpenAI 兼容服务以及 Voyage。有关配置详情,请参阅记忆和记忆搜索。磁盘上的数据存放位置
所有与 OpenClaw 一起使用的数据都会保存在本地吗?
所有与 OpenClaw 一起使用的数据都会保存在本地吗?
- 默认在本地:会话、记忆文件、配置和工作区位于 Gateway 主机上(
~/.openclaw加上你的工作区目录)。 - 出于必要而远程:发送给模型提供方(Anthropic/OpenAI 等)的消息会传输到它们的 API,而聊天平台(Slack/Telegram/WhatsApp 等)会将消息数据存储在其服务器上。
- 由你控制数据留存范围:本地模型会将提示词保留在你的机器上,但频道流量仍会经过相应频道的服务器。
OpenClaw 将数据存储在哪里?
OpenClaw 将数据存储在哪里?
$OPENCLAW_STATE_DIR 下(默认:~/.openclaw):~/.openclaw/agent/* 会由 openclaw doctor 迁移。你的工作区(AGENTS.md、memory 文件、skills 等)是单独的,通过 agents.defaults.workspace 配置(默认:~/.openclaw/workspace)。AGENTS.md / SOUL.md / USER.md / MEMORY.md 应该放在哪里?
AGENTS.md / SOUL.md / USER.md / MEMORY.md 应该放在哪里?
~/.openclaw。- 工作区(每个 agent):
AGENTS.md、SOUL.md、IDENTITY.md、USER.md、MEMORY.md、memory/YYYY-MM-DD.md。根目录中的小写memory.md仅用于旧版修复输入;当两个文件同时存在时,openclaw doctor --fix可以将其合并到MEMORY.md中。 - 状态目录(
~/.openclaw):配置、频道/提供方状态、身份验证配置文件、会话、日志、共享 skills(~/.openclaw/skills)。
~/.openclaw/workspace,可配置:SOUL.md 可以变得更大吗?
SOUL.md 可以变得更大吗?
SOUL.md 是注入到 agent 上下文中的工作区启动文件之一。默认单文件注入上限为 20000 个字符;跨文件的总启动预算为 60000 个字符。更改共享默认值:agents.entries.*.bootstrapMaxChars / bootstrapTotalMaxChars 下为某个 agent 单独设置。使用 /context 查看原始大小与注入后大小,以及是否发生了截断。保持 SOUL.md 重点描述语气、立场和个性;把操作规则放在 AGENTS.md 中,把持久事实放在 memory 中。参见 Context 和 Agent config。推荐的备份策略
推荐的备份策略
~/.openclaw 下的任何内容(凭证、会话、令牌、加密的密钥载荷)。要进行完整恢复,请分别备份工作区和状态目录。文档:Agent workspace。如何彻底卸载 OpenClaw?
如何彻底卸载 OpenClaw?
agent 可以在工作区之外工作吗?
agent 可以在工作区之外工作吗?
agents.defaults.sandbox 或每个 agent 的沙箱设置。要把某个仓库设为默认工作目录,请把该 agent 的 workspace 指向仓库根目录——OpenClaw 仓库本身只是源代码,所以除非你有意让 agent 在其中工作,否则应保持工作区分离。远程模式:会话存储在哪里?
远程模式:会话存储在哪里?
配置基础
配置格式是什么?它在哪里?
配置格式是什么?它在哪里?
$OPENCLAW_CONFIG_PATH 读取一个可选的 JSON5 配置(默认:~/.openclaw/openclaw.json)。如果文件缺失,它会使用相对安全的默认值,包括默认工作区 ~/.openclaw/workspace。我设置了 gateway.bind: "lan"(或 "tailnet"),但现在没有任何东西在监听 / UI 显示未授权
我设置了 gateway.bind: "lan"(或 "tailnet"),但现在没有任何东西在监听 / UI 显示未授权
gateway.auth.mode: "trusted-proxy"。gateway.remote.token/.password不会单独启用本地 gateway 认证;只有在gateway.auth.*未设置时,本地调用路径才可以将gateway.remote.*作为后备。- 对于密码认证,请设置
gateway.auth.mode: "password"以及gateway.auth.password(或OPENCLAW_GATEWAY_PASSWORD)。 - 如果通过 SecretRef 显式配置了
gateway.auth.token/.password但未解析成功,则解析会失败并关闭(不会被远程后备路径掩盖)。 - 共享密钥的 Control UI 设置通过
connect.params.auth.token或connect.params.auth.password进行认证(存储在应用/UI 设置中)。像 Tailscale Serve 或trusted-proxy这样的身份携带模式则改为使用请求头——避免在 URL 中放置共享密钥。 - 使用
gateway.auth.mode: "trusted-proxy"时,同主机回环反向代理需要显式设置gateway.auth.trustedProxy.allowLoopback = true,并在gateway.trustedProxies中添加一个回环条目。
为什么我现在在 localhost 上也需要 token?
为什么我现在在 localhost 上也需要 token?
/readyz 之前准备好规范的同一用户 CLI 设备凭据,因此普通的 openclaw CLI 调用无需持久化生成的 token 即可进行认证。其他客户端仍需要显式的共享密钥或获批准的设备配对。当客户端需要在重启之间使用稳定的密钥时,请显式配置 gateway.auth.token、gateway.auth.password、OPENCLAW_GATEWAY_TOKEN 或 OPENCLAW_GATEWAY_PASSWORD。你也可以选择密码模式,或为支持身份感知的反向代理选择 trusted-proxy。对于开放的回环访问,请显式设置 gateway.auth.mode: "none"。openclaw doctor --generate-gateway-token 可随时生成 token。更改配置后必须重启吗?
更改配置后必须重启吗?
gateway.reload.mode: "hybrid"(默认)会立即应用安全变更,并针对关键变更执行重启。off 会禁用配置重载;早期的 hot 和 restart 模式已弃用。大多数 tools.*、agents.* 策略、session.* 和 messages.* 变更会立即生效,完全无需重载操作;gateway.* 绑定/端口变更则需要重启。如何启用网页搜索(以及网页抓取)?
如何启用网页搜索(以及网页抓取)?
web_fetch 无需 API key 即可运行。web_search 取决于你选择的提供商:openclaw onboard --auth-choice xai-oauth)。推荐:运行 openclaw configure --section web 并选择一个提供商。plugins.entries.<plugin>.config.webSearch.* 下。为兼容旧版,tools.web.search.* 的提供商路径仍会加载,但新配置中不应再使用。Firecrawl 的网页抓取后备配置位于 plugins.entries.firecrawl.config.webFetch.* 下。- 白名单:添加
web_search/web_fetch/x_search,或者使用group:web同时允许这三者。 web_fetch默认启用。- 如果省略
tools.web.fetch.provider,OpenClaw 会从可用凭据中自动检测第一个可用的抓取后备提供商;官方 Firecrawl 插件提供该后备。 - 守护进程会从
~/.openclaw/.env(或服务环境)读取环境变量。
config.apply 把我的配置清空了。我该如何恢复并避免这种情况?
config.apply 把我的配置清空了。我该如何恢复并避免这种情况?
config.apply 会替换整个配置;只提供部分对象会删除其他所有内容。目前 OpenClaw 已尽量防止大多数意外覆盖:- OpenClaw 自己写入的配置会在写入前验证完整的变更后配置。
- 无效或破坏性的 OpenClaw 写入会被拒绝,并保存为
openclaw.json.rejected.*。 - 直接编辑导致启动或热重载失败时,Gateway 会 fail closed 或跳过重载;它不会重写
openclaw.json。 openclaw doctor --fix负责修复,能够恢复最近已知良好版本,并将被拒绝的文件保存为openclaw.json.clobbered.*。
- 查看
openclaw logs --follow中的Invalid config at、Config write rejected:或config reload skipped (invalid config)。 - 检查活动配置旁边最新的
openclaw.json.clobbered.*或openclaw.json.rejected.*。 - 运行
openclaw config validate和openclaw doctor --fix。 - 仅使用
openclaw config set或config.patch把需要的键复制回去。 - 如果没有 last-known-good 或 rejected 负载:从备份恢复,或者重新运行
openclaw doctor并重新配置 channels/models。 - 如果出现意外丢失:带上你最后已知的配置或备份提交 bug。本地编码代理通常可以根据日志或历史重建可工作的配置。
openclaw config set,交互式编辑用 openclaw configure,用 config.schema.lookup 查看不熟悉的路径(会返回一个浅层 schema 节点及其直接子项摘要),用 config.patch 做部分 RPC 编辑——将 config.apply 保留给完整配置替换。面向代理的 gateway 运行时工具即使通过旧的 tools.bash.* 别名,也拒绝重写 tools.exec.ask / tools.exec.security。文档:Config、Configure、Gateway troubleshooting、Doctor。如何在多个设备上运行一个中心 Gateway,并配合专门的 worker?
如何在多个设备上运行一个中心 Gateway,并配合专门的 worker?
- Gateway(中心):负责 channels(Signal/WhatsApp)、路由、会话。
- Nodes(设备):Mac/iOS/Android 作为外设连接,并暴露本地工具(
system.run、canvas、camera)。 - Agents(worker):为特殊角色(例如运维 vs 个人数据)分离出的不同“大脑/工作区”。
- Sub-agents:从主 agent 派生后台工作以实现并行。
- TUI:连接到 Gateway 并切换 agents/sessions。
OpenClaw 浏览器可以无头运行吗?
OpenClaw 浏览器可以无头运行吗?
false(有头模式)。无头模式更容易在某些站点触发反机器人检测(X/Twitter 常常会阻止无头会话)。它使用相同的 Chromium 引擎,并适用于大多数自动化;主要区别是没有可见的浏览器窗口(需要视觉效果时请使用截图)。参见 Browser。如何使用 Brave 进行浏览器控制?
如何使用 Brave 进行浏览器控制?
browser.executablePath 设置为你的 Brave 二进制文件(或任何基于 Chromium 的浏览器),然后重启 Gateway。参见 Browser。远程 gateway 和节点
Telegram、gateway 和节点之间的命令是如何传递的?
Telegram、gateway 和节点之间的命令是如何传递的?
node.* -> Node -> Gateway -> Telegram节点看不到来自提供方的入站流量;它们只接收 node RPC 调用。如果 Gateway 托管在远程,agent 如何访问我的电脑?
如果 Gateway 托管在远程,agent 如何访问我的电脑?
node.* 工具(屏幕、摄像头、系统)。- 在始终在线的主机(VPS/家用服务器)上运行 Gateway。
- 将 Gateway 主机和你的电脑放在同一个 tailnet 中。
- 确保 Gateway WS 可达(tailnet 绑定或 SSH 隧道)。
- 在本地打开 macOS 应用,并以 通过 SSH 远程 模式连接(或直接 tailnet 连接),这样它就会注册为 node。
- 批准该 node:
system.run。只配对你信任的设备;请查看 安全。文档:Nodes、Gateway 协议、macOS 远程模式、安全。Tailscale 已连接但没有任何回复。现在怎么办?
Tailscale 已连接但没有任何回复。现在怎么办?
两个 OpenClaw 实例可以互相通信吗(本地 + VPS)?
两个 OpenClaw 实例可以互相通信吗(本地 + VPS)?
openclaw agent --message ... --deliver 调用另一个 Gateway,并把目标指向另一个 bot 监听的聊天。若其中一个 bot 在远程 VPS 上,通过 SSH/Tailscale 将你的 CLI 指向那个远程 Gateway(见 远程访问):多个 agent 需要分别使用不同的 VPS 吗?
多个 agent 需要分别使用不同的 VPS 吗?
在个人笔记本上使用 node,相比从 VPS 通过 SSH 连接有什么好处?
在个人笔记本上使用 node,相比从 VPS 通过 SSH 连接有什么好处?
- 不需要入站 SSH - nodes 通过设备配对主动连接到 Gateway WebSocket。
- 更安全的执行控制 -
system.run受该笔记本上的 node allowlist/审批控制。 - 更多设备工具 - 除了
system.run,nodes 还提供canvas、camera和screen。 - 本地浏览器自动化 - 保持 Gateway 在 VPS 上运行,但通过 node 主机在本地运行 Chrome,或者通过 Chrome MCP 连接本地 Chrome。
node 会运行 gateway 服务吗?
node 会运行 gateway 服务吗?
gateway、discovery 和托管插件表面的更改需要完整重启。有没有通过 API/RPC 应用配置的方式?
有没有通过 API/RPC 应用配置的方式?
config.schema.lookup:在写入前,查看一个配置子树及其浅层 schema 节点、匹配的 UI 提示和直接子项摘要。config.get:获取当前快照及其 hash。config.patch:安全的局部更新(对大多数 RPC 编辑推荐使用);在可能时热重载,必要时重启。config.apply:验证并替换完整配置;在可能时热重载,必要时重启。- 面向 agent 的
gateway运行时工具仍然拒绝重写tools.exec.ask/tools.exec.security;旧的tools.bash.*别名会归一化到同一受保护路径。
首次安装时最小且合理的配置
首次安装时最小且合理的配置
如何在 VPS 上设置 Tailscale,并从我的 Mac 连接?
如何在 VPS 上设置 Tailscale,并从我的 Mac 连接?
- 在 VPS 上安装并登录:
- 在你的 Mac 上安装并登录,使用 Tailscale 应用,并确保在同一个 tailnet 中。
- 在 Tailscale 管理控制台启用 MagicDNS,这样 VPS 就会有一个稳定名称。
- 使用 tailnet 主机名:SSH
ssh [email protected];Gateway WSws://your-vps.tailnet-xxxx.ts.net:18789。
如何将 Mac node 连接到远程 Gateway(Tailscale Serve)?
如何将 Mac node 连接到远程 Gateway(Tailscale Serve)?
- 确保 VPS 和 Mac 在同一个 tailnet 中。
- 在 macOS 应用中使用 Remote 模式(SSH 目标可以是 tailnet 主机名)——它会隧道转发 Gateway 端口并作为 node 连接。
- 批准该 node:
我应该安装在第二台笔记本上,还是只添加一个 node?
我应该安装在第二台笔记本上,还是只添加一个 node?
环境变量和 .env 加载
OpenClaw 如何加载环境变量?
OpenClaw 如何加载环境变量?
- 来自当前工作目录的
.env。 - 来自
~/.openclaw/.env($OPENCLAW_STATE_DIR/.env)的全局兜底.env。
.env 文件都不会覆盖现有的环境变量。对于 OpenClaw 安装的 systemd service,全局 .env 可能只会替换 OpenClaw 记录为受管理的 service 值;由操作员拥有的 service 值仍然具有优先权。对于 workspace .env,Provider 凭据和 endpoint 路由键是例外:GEMINI_API_KEY、XAI_API_KEY、MISTRAL_API_KEY 或任何以 _ENDPOINT 结尾的键(以及其他内置 provider 的认证或 endpoint 环境变量)会被忽略,这些键应放在进程环境、~/.openclaw/.env 或配置中的 env.vars 中。配置中的内联环境变量仅在进程环境中缺失时才会生效:我通过 service 启动了 Gateway,但我的环境变量不见了。现在怎么办?
我通过 service 启动了 Gateway,但我的环境变量不见了。现在怎么办?
- 将缺失的键放到
~/.openclaw/.env中,这样即使 service 没有继承你的 shell 环境也会加载。 - 启用 shell 导入(可选便利功能):
这会运行你的登录 shell,并且只导入缺失的预期键(绝不会覆盖)。对应的环境变量为:
OPENCLAW_LOAD_SHELL_ENV=1、OPENCLAW_SHELL_ENV_TIMEOUT_MS=15000。
我设置了 COPILOT_GITHUB_TOKEN,但 models status 显示 "Shell env: off." 为什么?
我设置了 COPILOT_GITHUB_TOKEN,但 models status 显示 "Shell env: off." 为什么?
openclaw models status 会报告是否启用了shell 环境导入。“Shell env: off” 并不意味着你的环境变量丢失了——它只是表示 OpenClaw 不会自动加载你的登录 shell。如果 Gateway 作为 service(launchd/systemd)运行,它不会继承你的 shell 环境。解决方法是把 token 放到 ~/.openclaw/.env,启用 env.shellEnv.enabled: true,或者将其添加到配置 env 中(仅在缺失时生效),然后重启 gateway 并重新检查:OPENCLAW_GITHUB_TOKEN,然后是 COPILOT_GITHUB_TOKEN,然后是 GH_TOKEN,最后是 GITHUB_TOKEN。参见 /concepts/model-providers 和 /environment。会话和多个聊天
如何开始一个全新的对话?
如何开始一个全新的对话?
/new 或 /reset 作为独立消息。参见 会话管理。如果我从不发送 /new,会话会自动重置吗?
如果我从不发送 /new,会话会自动重置吗?
sessionId,随着对话增长,压缩会限制活动模型上下文的大小。你仍然可以使用 /new 和 /reset,也可以选择通过 mode: "daily" 或 mode: "idle" 启用自动重置。每日模式会在网关主机的 session.reset.atHour(默认为 4,范围为 0-23)时滚动重置;空闲模式则根据上次真实交互后的 session.reset.idleMinutes 计算,不包含 heartbeat/cron/exec 系统事件。resetByType 支持 direct、group 和 thread。Doctor 会将旧版的 dm 条目迁移为 direct;模式会拒绝 dm。当未设置 session.reset/resetByType 块时,旧版顶层配置 session.idleMinutes 仍可作为空闲模式默认值的兼容别名使用。完整生命周期请参见 会话管理。有没有办法让多个 OpenClaw 实例组成一个团队(一个 CEO 和多个代理)?
有没有办法让多个 OpenClaw 实例组成一个团队(一个 CEO 和多个代理)?
为什么上下文在任务中途被截断?我该如何防止?
为什么上下文在任务中途被截断?我该如何防止?
- 让 bot 总结当前状态并写入文件。
- 长任务前使用
/compact,切换主题时使用/new。 - 将重要上下文保存在工作区中,并让 bot 重新读取。
- 对于长时间或并行工作使用子代理,让主聊天保持更小。
- 如果经常发生,选择上下文窗口更大的模型。
如何在保留已安装状态的同时彻底重置 OpenClaw?
如何在保留已安装状态的同时彻底重置 OpenClaw?
--profile / OPENCLAW_PROFILE),请重置每个状态目录(默认 ~/.openclaw-<profile>)。仅开发环境重置:openclaw gateway --dev --reset 会清除开发配置、凭证、会话和工作区。我遇到 "context too large" 错误 - 如何重置或压缩?
我遇到 "context too large" 错误 - 如何重置或压缩?
为什么我会看到 "LLM request rejected: messages.content.tool_use.input field required"?
为什么我会看到 "LLM request rejected: messages.content.tool_use.input field required"?
input 的 tool_use 块。通常意味着会话历史已过时或已损坏(常见于长线程或工具/模式变更之后)。修复:使用 /new(独立消息)开启一个新会话。为什么我每 30 分钟会看到一次 heartbeat 消息?
为什么我每 30 分钟会看到一次 heartbeat 消息?
heartbeat.every,则为 1h。可按需调整或禁用:agents.entries.*.heartbeat。文档:Heartbeat。我需要在 WhatsApp 群组里添加一个 "bot account" 吗?
我需要在 WhatsApp 群组里添加一个 "bot account" 吗?
groupPolicy: "allowlist")。若只允许你自己在群组中触发回复:如何获取 WhatsApp 群组的 JID?
如何获取 WhatsApp 群组的 JID?
@g.us 结尾的 chatId(或 from),例如 [email protected]。如果已经配置/加入允许列表,可从配置中列出群组:为什么 OpenClaw 在群里不回复?
为什么 OpenClaw 在群里不回复?
群组/线程会和私聊共享上下文吗?
群组/线程会和私聊共享上下文吗?
我可以创建多少个工作区和代理?
我可以创建多少个工作区和代理?
- 磁盘增长:活跃会话和转录内容保存在每个代理的 SQLite 数据库中;旧版/归档工件仍可能累积在
~/.openclaw/agents/<agentId>/sessions/下。 - Token 成本:代理越多,并发模型使用越多。
- 运维开销:每个代理的认证 profile、工作区和频道路由。
agents.defaults.workspace),如果磁盘增长,使用 openclaw sessions cleanup 清理旧会话(不要手动编辑活跃的 SQLite 状态),并使用 openclaw doctor 找出多余的工作区和 profile 不匹配。我可以同时运行多个 bot 或聊天吗(Slack),该如何设置?
我可以同时运行多个 bot 或聊天吗(Slack),该如何设置?
模型、故障转移和认证配置文件
模型问答——默认值、选择、别名、切换、故障转移、认证配置文件——详见 模型常见问题。网关:端口、“已在运行”和远程模式。
网关使用哪个端口?
网关使用哪个端口?
gateway.port 控制 WebSocket + HTTP(控制界面、hooks 等)的单一多路复用端口。优先级:为什么 openclaw gateway status 显示 "Runtime: running",但 "Connectivity probe: failed"?
为什么 openclaw gateway status 显示 "Runtime: running",但 "Connectivity probe: failed"?
openclaw gateway status 里的这些行:Probe target:(探测使用的 URL)、Listening:(端口上实际绑定的内容)、Last gateway error:(进程还活着但端口未监听时的常见根因)。为什么 openclaw gateway status 显示的 "Config (cli)" 和 "Config (service)" 不一样?
为什么 openclaw gateway status 显示的 "Config (cli)" 和 "Config (service)" 不一样?
--profile / OPENCLAW_STATE_DIR 不匹配)。修复方法:从服务应使用的同一个 --profile / 环境中运行:“another gateway instance is already listening” 是什么意思?
“another gateway instance is already listening” 是什么意思?
ws://127.0.0.1:18789)。如果绑定因 EADDRINUSE 失败,就会抛出 GatewayLockError(“另一个网关实例已经在监听”)。修复:停止另一个实例、释放端口,或使用 openclaw gateway --port <port> 运行。如何以远程模式运行 OpenClaw(客户端连接到其他地方的网关)?
如何以远程模式运行 OpenClaw(客户端连接到其他地方的网关)?
gateway.mode: "remote" 并指向一个远程 WebSocket URL,也可以附带共享密钥远程凭据:openclaw gateway仅在gateway.mode为local时启动(或你传入覆盖标志时)。- macOS 应用会监视配置文件,并在这些值变化时实时切换模式。
gateway.remote.token/.password只是客户端侧的远程凭据;它们本身不会启用本地网关认证。
我设置了 gateway.bind tailnet,但它只监听在 loopback
我设置了 gateway.bind tailnet,但它只监听在 loopback
tailnet 绑定会从你的网络接口中选择一个 Tailscale IP(100.64.0.0/10)。如果机器不在 Tailscale 上(或接口已关闭),网关会回退到 loopback,而不是暴露另一个网络接口。修复:在该主机上启动 Tailscale 并重启网关,或者明确切换为 gateway.bind: "loopback" / "lan"。tailnet 是显式的;auto 优先选择 loopback。使用 gateway.bind: "tailnet" 可将非 loopback 暴露限制在 Tailnet 内,同时保留所需的同主机 127.0.0.1 监听。我可以在同一台主机上运行多个网关吗?
我可以在同一台主机上运行多个网关吗?
OPENCLAW_CONFIG_PATH、OPENCLAW_STATE_DIR、agents.defaults.workspace 和唯一的 gateway.port。推荐:每个实例使用 openclaw --profile <name> ...(会自动创建 ~/.openclaw-<name>),每个 profile 配置使用唯一的 gateway.port(或手动运行时使用 --port),并通过 openclaw --profile <name> gateway install 为每个 profile 安装独立服务。Profiles 也会作为服务名后缀:launchd ai.openclaw.<profile>、systemd openclaw-gateway-<profile>.service、Windows OpenClaw Gateway (<profile>)。未限定的 openclaw-gateway systemd 单元只存在于默认 profile;旧的、重命名前的 systemd 单元名 clawdbot-gateway 会自动迁移。完整指南:多个网关。“invalid handshake” / code 1008 是什么意思?
“invalid handshake” / code 1008 是什么意思?
connect 帧。任何其他内容都会以 code 1008(违反策略)关闭连接。常见原因:你在浏览器中打开了 HTTP URL,而不是使用 WS 客户端;使用了错误的端口/路径;或者代理/隧道剥离了认证头,或发送了非网关请求。修复:使用 WS URL(ws://<host>:18789,或通过 HTTPS 使用 wss://...),不要在普通浏览器标签页中打开 WS 端口,并在启用认证时在 connect 帧中包含 token/password。CLI/TUI 示例:日志和调试
日志在哪里?
日志在哪里?
/tmp/openclaw/openclaw-YYYY-MM-DD.log,命名配置文件为 /tmp/openclaw/openclaw-<profile>-YYYY-MM-DD.log。通过 logging.file 设置固定路径;通过 logging.level 设置文件日志级别;通过 --verbose 和 logging.consoleLevel 设置控制台详细程度。最快的尾随查看:- macOS launchd 标准输出:
~/Library/Logs/openclaw/gateway.log(配置文件使用gateway-<profile>.log;标准错误会被抑制)。 - Linux:
journalctl --user -u openclaw-gateway[-<profile>].service -n 200 --no-pager。 - Windows:
schtasks /Query /TN "OpenClaw Gateway (<profile>)" /V /FO LIST。
我该如何启动/停止/重启 Gateway 服务?
我该如何启动/停止/重启 Gateway 服务?
openclaw gateway --force 可以重新占用端口。参见 Gateway。我在 Windows 上关闭了终端 - 如何重启 OpenClaw?
我在 Windows 上关闭了终端 - 如何重启 OpenClaw?
openclaw gateway run。3)原生 Windows CLI/Gateway:直接在 Windows 中运行。openclaw gateway run。文档:Windows、Gateway 服务运行手册。Gateway 已启动,但回复始终没有到达。我该检查什么?
Gateway 已启动,但回复始终没有到达。我该检查什么?
“已与 gateway 断开连接:无原因” - 现在怎么办?
“已与 gateway 断开连接:无原因” - 现在怎么办?
Telegram setMyCommands 失败。我该检查什么?
Telegram setMyCommands 失败。我该检查什么?
BOT_COMMANDS_TOO_MUCH:Telegram 菜单条目太多。OpenClaw 已经会裁剪到 Telegram 限制并以更少的命令重试,但某些菜单项仍可能被丢弃。请减少插件/技能/自定义命令,或者如果你不需要菜单,请禁用channels.telegram.commands.native。TypeError: fetch failed、Network request for 'setMyCommands' failed!,或类似的网络错误:在 VPS 上或代理之后,请确认允许外发 HTTPS,并且api.telegram.org的 DNS 正常工作。
我该如何彻底停止然后再启动 Gateway?
我该如何彻底停止然后再启动 Gateway?
openclaw gateway run。文档:Gateway 服务运行手册。用五岁孩子能理解的话解释:openclaw gateway restart 和 openclaw gateway 有什么区别
用五岁孩子能理解的话解释:openclaw gateway restart 和 openclaw gateway 有什么区别
openclaw gateway restart 会重启后台服务(launchd/systemd)。openclaw gateway 会在当前终端会话中以前台方式运行 gateway。若你已安装服务,请使用 gateway 子命令;若只是临时运行一次,请使用前台直接运行。出问题时,最快获取更多细节的方法
出问题时,最快获取更多细节的方法
--verbose 启动 Gateway 以获取更多控制台细节,然后检查日志文件中的频道认证、模型路由和 RPC 错误。媒体和附件
我的技能生成了图片/PDF,但没有发送出去
我的技能生成了图片/PDF,但没有发送出去
media、mediaUrl、path 或 filePath。请参见 OpenClaw 助手设置 和 Agent send。tools.fs.workspaceOnly=true 会将本地路径发送限制为 workspace、temp/media-store 和沙箱验证文件;tools.fs.workspaceOnly=false(默认)允许结构化本地媒体发送使用代理已可读取的主机本地文件,包括媒体以及安全文档类型(图片、音频、视频、PDF、Office 文档,以及经过验证的文本文档,如 Markdown/MD、TXT、JSON、YAML/YML)。这不是秘密扫描器——只要扩展名和内容校验匹配,代理可读取的 secret.txt 或 config.json 也可以附加。请将敏感文件保留在代理不可读的路径之外,或者保持 tools.fs.workspaceOnly=true 以获得更严格的本地路径发送限制。参见 图片。安全与访问控制
向传入的 DM 暴露 OpenClaw 安全吗?
向传入的 DM 暴露 OpenClaw 安全吗?
- 在支持 DM 的渠道上,默认行为是 配对:未知发送者会收到配对码,其消息不会被处理。使用
openclaw pairing approve --channel <channel> [--account <id>] <code>批准。待处理请求上限为每个频道 3 个;如果没有收到代码,请检查openclaw pairing list --channel <channel> [--account <id>]。 - 公开开放 DM 需要显式选择加入(
dmPolicy: "open"且允许名单为"*")。
openclaw doctor 可以发现有风险的 DM 策略。提示注入只会影响公开机器人吗?
提示注入只会影响公开机器人吗?
- 使用只读或禁用工具的“reader”代理来总结不可信内容
- 对启用工具的代理关闭
web_search/web_fetch/browser - 同样将解码后的文件/文档文本视为不可信:OpenResponses 的
input_file和媒体附件提取都会将提取出的文本包裹在显式的外部内容边界标记中,而不是直接传递原始文件文本 - 进行沙箱隔离并使用严格的工具允许名单
因为 OpenClaw 使用 TypeScript/Node 而不是 Rust/WASM,所以它不那么安全吗?
因为 OpenClaw 使用 TypeScript/Node 而不是 Rust/WASM,所以它不那么安全吗?
openclaw security audit --deep。详情:Security, Sandboxing。我看到关于暴露的 OpenClaw 实例的报告。我应该检查什么?
我看到关于暴露的 OpenClaw 实例的报告。我应该检查什么?
loopback,或仅通过经过身份验证的私有访问暴露(tailnet、SSH 隧道、token/password 认证,或正确配置的可信代理);DM 处于 pairing 或 allowlist 模式;群组已加入允许名单并进行提及门控,除非每个成员都可信;对于读取不可信内容的代理,高风险工具(exec、browser、gateway、cron)被拒绝或严格限定作用范围;在需要更小影响范围的工具执行场景中启用沙箱。没有认证的公开绑定、带工具的开放 DM/群组,以及暴露的浏览器控制,是首先要修复的发现项。详情:openclaw security audit。ClawHub 技能和第三方插件安装安全吗?
ClawHub 技能和第三方插件安装安全吗?
我应该给机器人单独的邮箱、GitHub 账号或电话号码吗?
我应该给机器人单独的邮箱、GitHub 账号或电话号码吗?
我可以让它自动处理我的短信吗?这样安全吗?
我可以让它自动处理我的短信吗?这样安全吗?
我可以使用更便宜的模型来处理个人助理任务吗?
我可以使用更便宜的模型来处理个人助理任务吗?
我在 Telegram 里运行了 /start,但没有收到配对码
我在 Telegram 里运行了 /start,但没有收到配对码
dmPolicy: "pairing" 时,才会发送配对码;单独运行 /start 不会生成代码。检查待处理请求:dmPolicy: "open"。WhatsApp:它会给我的联系人发消息吗?配对是如何工作的?
WhatsApp:它会给我的联系人发消息吗?配对是如何工作的?
channels.whatsapp.selfChatMode。聊天命令、中止任务和“它不会停止”
我如何阻止内部系统消息显示在聊天中?
我如何阻止内部系统消息显示在聊天中?
我如何停止/取消正在运行的任务?
我如何停止/取消正在运行的任务?
stop、stop action、stop current action、stop run、stop current run、stop agent、stop the agent、stop openclaw、openclaw stop、stop don't do anything、stop do not do anything、stop doing anything、do not do that、please stop、stop please、abort、esc、exit、interrupt、halt。常见的非英语触发词(法语、德语、西班牙语、中文、日语、印地语、阿拉伯语、俄语)也同样有效。对于由 exec 工具启动的后台进程,让 agent 运行:/ 开头的独立消息发送,但少数快捷方式(例如 /status)也可以由允许名单中的发送者以内联方式使用。请参阅 斜杠命令。我如何从 Telegram 向 Discord 发送消息?(“跨上下文消息传递被拒绝”)
我如何从 Telegram 向 Discord 发送消息?(“跨上下文消息传递被拒绝”)
其他
带有 API 密钥时 Anthropic 的默认模型是什么?
带有 API 密钥时 Anthropic 的默认模型是什么?
ANTHROPIC_API_KEY(或将 Anthropic API 密钥存储在 auth profiles 中)会启用身份验证,但实际的默认模型是你在 agents.defaults.model.primary 中配置的内容(例如 anthropic/claude-sonnet-4-6 或 anthropic/claude-opus-4-6)。No credentials found for profile "anthropic:default" 意味着 Gateway 无法在当前运行的 agent 预期的 auth-profiles.json 中找到 Anthropic 凭据。仍然无法解决?请在 Discord 中提问,或使用 GitHub issue 选择器。