macOS 上的健康检查

如何从菜单栏应用查看关联渠道是否健康。 菜单栏 状态圆点现在反映 Baileys 健康状态: 绿色:已关联 + socket 最近已打开。 橙色:正在连接/重试。 红色:已登出或探测失败。 第二行显示"linked · auth 12m"或显示失败原因。 “Run Health Check"菜单项触发按需探测。 设置 通用选项卡新增健康卡片,显示:关联认证时间、会话存储路径/数量、上次检查时间、上次错误/状态码,以及运行健康检查/显示日志按钮。 使用缓存快照,因此 UI 立即加载,离线时优雅降级。 渠道选项卡显示渠道状态 + WhatsApp/Telegram 的控制(登录二维码、登出、探测、上次断开/错误)。 探测工作原理 应用每约 60 秒和按需时通过 ShellExecutor 运行 openclaw health --json。探测加载凭证并报告状态,不发送消息。 分别缓存上次成功的快照和上次错误以避免闪烁;显示每个的时间戳。 有疑问时 你仍然可以使用 Gateway 网关健康 中的 CLI 流程(openclaw status、openclaw status --deep、openclaw health --json),并在 /tmp/openclaw/openclaw-*.log 中跟踪 web-heartbeat / web-reconnect。

macOS 上的 Gateway 网关生命周期

macOS 应用默认通过 launchd 管理 Gateway 网关,不会将 Gateway 网关作为子进程生成。它首先尝试连接到配置端口上已运行的 Gateway 网关;如果无法访问,它会通过外部 openclaw CLI(无嵌入式运行时)启用 launchd 服务。这为你提供了可靠的登录时自动启动和崩溃后重启。 子进程模式(由应用直接生成 Gateway 网关)目前未使用。 如果你需要与 UI 更紧密的耦合,请在终端中手动运行 Gateway 网关。 默认行为(launchd) 应用安装标记为 bot.molt.gateway 的按用户 LaunchAgent (使用 --profile/OPENCLAW_PROFILE 时为 bot.molt.<profile>;支持旧版 com.openclaw.*)。 当启用本地模式时,应用确保 LaunchAgent 已加载,并 在需要时启动 Gateway 网关。 日志写入 launchd Gateway 网关日志路径(在调试设置中可见)。 常用命令: launchctl kickstart -k gui/$UID/bot.molt.gateway launchctl bootout gui/$UID/bot.molt.gateway 运行命名配置文件时,将标签替换为 bot.molt.<profile>。 未签名的开发构建 scripts/restart-mac.sh --no-sign 用于在没有签名密钥时的快速本地构建。为了防止 launchd 指向未签名的中继二进制文件,它: 写入 ~/.openclaw/disable-launchagent。 已签名运行的 scripts/restart-mac.sh 会在标记存在时清除此覆盖。要手动重置: rm ~/.openclaw/disable-launchagent 仅连接模式 要强制 macOS 应用永不安装或管理 launchd,请使用 --attach-only(或 --no-launchd)启动它。这会设置 ~/.openclaw/disable-launchagent, 因此应用只会连接到已运行的 Gateway 网关。你可以在调试设置中切换相同的 行为。 ...

macOS 上的 Gateway 网关(外部 launchd)

OpenClaw.app 不再捆绑 Node/Bun 或 Gateway 网关运行时。macOS 应用期望有一个外部的 openclaw CLI 安装,不会将 Gateway 网关作为子进程启动,而是管理一个每用户的 launchd 服务来保持 Gateway 网关运行(或者如果已有本地 Gateway 网关正在运行,则连接到现有的)。 安装 CLI(本地模式必需) 你需要在 Mac 上安装 Node 22+,然后全局安装 openclaw: npm install -g openclaw@<version> macOS 应用的安装 CLI按钮通过 npm/pnpm 运行相同的流程(不推荐使用 bun 作为 Gateway 网关运行时)。 Launchd(Gateway 网关作为 LaunchAgent) 标签: bot.molt.gateway(或 bot.molt.<profile>;旧版 com.openclaw.* 可能仍然存在) Plist 位置(每用户): ~/Library/LaunchAgents/bot.molt.gateway.plist (或 ~/Library/LaunchAgents/bot.molt.<profile>.plist) 管理者: macOS 应用在本地模式下拥有 LaunchAgent 的安装/更新权限。 CLI 也可以安装它:openclaw gateway install。 行为: “OpenClaw Active"启用/禁用 LaunchAgent。 应用退出不会停止 Gateway 网关(launchd 保持其存活)。 如果 Gateway 网关已经在配置的端口上运行,应用会连接到它而不是启动新的。 日志: ...

Mac 签名(调试构建)

此应用通常从 scripts/package-mac-app.sh 构建,该脚本目前会: 设置稳定的调试 Bundle 标识符:ai.openclaw.mac.debug 使用该 Bundle ID 写入 Info.plist(可通过 BUNDLE_ID=... 覆盖) 调用 scripts/codesign-mac-app.sh 对主二进制文件和应用包进行签名,使 macOS 将每次重新构建视为相同的已签名包,并保留 TCC 权限(通知、辅助功能、屏幕录制、麦克风、语音)。要获得稳定的权限,请使用真实签名身份;临时签名是可选的且不稳定(参阅 macOS 权限)。 默认使用 CODESIGN_TIMESTAMP=auto;为 Developer ID 签名启用受信任的时间戳。设置 CODESIGN_TIMESTAMP=off 可跳过时间戳(离线调试构建)。 将构建元数据注入 Info.plist:OpenClawBuildTimestamp(UTC)和 OpenClawGitCommit(短哈希),以便"关于"面板可以显示构建信息、git 信息和调试/发布渠道。 打包需要 Node 22+:脚本会运行 TS 构建和 Control UI 构建。 从环境变量中读取 SIGN_IDENTITY。将 export SIGN_IDENTITY="Apple Development: Your Name (TEAMID)"(或你的 Developer ID Application 证书)添加到 shell 配置文件中,以始终使用你的证书签名。临时签名需要通过 ALLOW_ADHOC_SIGNING=1 或 SIGN_IDENTITY="-" 显式启用(不建议用于权限测试)。 签名后运行 Team ID 审计,如果应用包内的任何 Mach-O 文件由不同的 Team ID 签名则会失败。设置 SKIP_TEAM_ID_CHECK=1 可跳过此检查。 用法 # 从仓库根目录 scripts/package-mac-app.sh # 自动选择身份;未找到时报错 SIGN_IDENTITY="Developer ID Application: Your Name" scripts/package-mac-app.sh # 真实证书 ALLOW_ADHOC_SIGNING=1 scripts/package-mac-app.sh # 临时签名(权限不会持久化) SIGN_IDENTITY="-" scripts/package-mac-app.sh # 显式临时签名(同样的限制) DISABLE_LIBRARY_VALIDATION=1 scripts/package-mac-app.sh # 仅限开发的 Sparkle Team ID 不匹配解决方案 临时签名注意事项 使用 SIGN_IDENTITY="-"(临时签名)签名时,脚本会自动禁用强化运行时(--options runtime)。这是为了防止应用在尝试加载不共享相同 Team ID 的嵌入式框架(如 Sparkle)时崩溃。临时签名还会破坏 TCC 权限持久化;参阅 macOS 权限 了解恢复步骤。 ...

Lobster

Lobster 是一个工作流外壳,让 OpenClaw 能够将多步骤工具序列作为单个确定性操作运行,并带有显式审批检查点。 亮点 你的助手可以构建管理自身的工具。请求一个工作流,30 分钟后你就有了一个 CLI 和作为单次调用运行的管道。Lobster 是缺失的那一块:确定性管道、显式审批和可恢复状态。 为什么 如今,复杂的工作流需要多次来回的工具调用。每次调用都消耗 token,LLM 必须编排每一步。Lobster 将这种编排移入类型化运行时: 一次调用代替多次:OpenClaw 运行一次 Lobster 工具调用并获得结构化结果。 内置审批:副作用(发送邮件、发布评论)会暂停工作流,直到明确批准。 可恢复:暂停的工作流返回一个令牌;批准并恢复而无需重新运行所有内容。 为什么用 DSL 而不是普通程序? Lobster 故意很小。目标不是"一种新语言",而是一个可预测的、AI 友好的管道规范,具有一流的审批和恢复令牌。 内置批准/恢复:普通程序可以提示人类,但它无法暂停和恢复并带有持久令牌,除非你自己发明那个运行时。 确定性 + 可审计性:管道是数据,所以它们易于记录、比较、重放和审查。 AI 的受限表面:微小的语法 + JSON 管道减少了"创造性"代码路径,使验证变得现实可行。 内置安全策略:超时、输出上限、沙箱检查和白名单由运行时强制执行,而不是每个脚本。 仍然可编程:每个步骤都可以调用任何 CLI 或脚本。如果你想要 JS/TS,可以从代码生成 .lobster 文件。 工作原理 OpenClaw 以工具模式启动本地 lobster CLI,并从 stdout 解析 JSON 信封。 如果管道暂停等待审批,工具会返回一个 resumeToken,以便你稍后继续。 模式:小型 CLI + JSON 管道 + 审批 构建输出 JSON 的小命令,然后将它们链接成单个 Lobster 调用。(下面是示例命令名称——替换成你自己的。) inbox list --json inbox categorize --json inbox apply --json { "action": "run", "pipeline": "exec --json --shell 'inbox list --json' | exec --stdin json --shell 'inbox categorize --json' | exec --stdin json --shell 'inbox apply --json' | approve --preview-from-stdin --limit 5 --prompt 'Apply changes?'", "timeoutMs": 30000 } 如果管道请求审批,使用令牌恢复: ...

LLM 任务

llm-task 是一个可选插件工具,用于运行纯 JSON 的 LLM 任务并返回结构化输出(可选择根据 JSON Schema 进行验证)。 这非常适合像 Lobster 这样的工作流引擎:你可以添加单个 LLM 步骤,而无需为每个工作流编写自定义 OpenClaw 代码。 启用插件 启用插件: { "plugins": { "entries": { "llm-task": { "enabled": true } } } } 将工具加入允许列表(它以 optional: true 注册): { "agents": { "list": [ { "id": "main", "tools": { "allow": ["llm-task"] } } ] } } 配置(可选) { "plugins": { "entries": { "llm-task": { "enabled": true, "config": { "defaultProvider": "openai-codex", "defaultModel": "gpt-5.2", "defaultAuthProfileId": "main", "allowedModels": ["openai-codex/gpt-5.2"], "maxTokens": 800, "timeoutMs": 30000 } } } } } allowedModels 是 provider/model 字符串的允许列表。如果设置了该项,任何不在列表中的请求都会被拒绝。 工具参数 prompt(字符串,必填) input(任意类型,可选) schema(对象,可选 JSON Schema) provider(字符串,可选) model(字符串,可选) authProfileId(字符串,可选) temperature(数字,可选) maxTokens(数字,可选) timeoutMs(数字,可选) 输出 返回 details.json,包含解析后的 JSON(如果提供了 schema,则会进行验证)。 ...

Linux 应用

Gateway 网关在 Linux 上完全支持。Node 是推荐的运行时。 不推荐 Bun 用于 Gateway 网关(WhatsApp/Telegram 存在 bug)。 原生 Linux 配套应用已在计划中。如果你想帮助构建,欢迎贡献。 新手快速路径(VPS) 安装 Node 22+ npm i -g openclaw@latest openclaw onboard --install-daemon 从你的笔记本电脑:ssh -N -L 18789:127.0.0.1:18789 <user>@<host> 打开 http://127.0.0.1:18789/ 并粘贴你的令牌 分步 VPS 指南:exe.dev 安装 入门指南 安装与更新 可选流程:Bun(实验性)、Nix、Docker Gateway 网关 Gateway 网关运行手册 配置 Gateway 网关服务安装(CLI) 使用以下任一方式: openclaw onboard --install-daemon 或: openclaw gateway install 或: openclaw configure 出现提示时选择 Gateway service。 修复/迁移: openclaw doctor 系统控制(systemd 用户单元) OpenClaw 默认安装 systemd 用户服务。对于共享或常驻服务器使用系统 服务。完整的单元示例和指南 在 Gateway 网关运行手册 中。 ...

LINE(插件)

LINE 通过 LINE Messaging API 连接到 OpenClaw。该插件作为 webhook 接收器在 Gateway 网关上运行,使用你的 channel access token + channel secret 进行身份验证。 状态:通过插件支持。支持私信、群聊、媒体、位置、Flex 消息、模板消息和快捷回复。不支持表情回应和话题回复。 需要安装插件 安装 LINE 插件: openclaw plugins install @openclaw/line 本地检出(从 git 仓库运行时): openclaw plugins install ./extensions/line 配置步骤 创建 LINE Developers 账户并打开控制台: https://developers.line.biz/console/ 创建(或选择)一个 Provider 并添加 Messaging API 渠道。 从渠道设置中复制 Channel access token 和 Channel secret。 在 Messaging API 设置中启用 Use webhook。 将 webhook URL 设置为你的 Gateway 网关端点(必须使用 HTTPS): https://gateway-host/line/webhook Gateway 网关会响应 LINE 的 webhook 验证(GET)和入站事件(POST)。如果你需要自定义路径,请设置 channels.line.webhookPath 或 channels.line.accounts.<id>.webhookPath 并相应更新 URL。 ...

iOS 应用(节点)

可用性:内部预览。iOS 应用尚未公开分发。 功能 通过 WebSocket(LAN 或 tailnet)连接到 Gateway 网关。 暴露节点能力:Canvas、屏幕快照、相机捕获、位置、对话模式、语音唤醒。 接收 node.invoke 命令并报告节点状态事件。 要求 Gateway 网关运行在另一台设备上(macOS、Linux 或通过 WSL2 的 Windows)。 网络路径: 通过 Bonjour 的同一 LAN,或 通过单播 DNS-SD 的 Tailnet(示例域:openclaw.internal.),或 手动主机/端口(备选)。 快速开始(配对 + 连接) 启动 Gateway 网关: openclaw gateway --port 18789 在 iOS 应用中,打开设置并选择一个已发现的 Gateway 网关(或启用手动主机并输入主机/端口)。 在 Gateway 网关主机上批准配对请求: openclaw nodes pending openclaw nodes approve <requestId> 验证连接: openclaw nodes status openclaw gateway call node.list --params "{}" 发现路径 Bonjour(LAN) Gateway 网关在 local. 上广播 _openclaw-gw._tcp。iOS 应用会自动列出这些。 ...

iMessage (imsg)

状态:外部 CLI 集成。Gateway 网关生成 imsg rpc(基于 stdio 的 JSON-RPC)。 快速设置(新手) 确保在此 Mac 上已登录"信息"。 安装 imsg: brew install steipete/tap/imsg 配置 OpenClaw 的 channels.imessage.cliPath 和 channels.imessage.dbPath。 启动 Gateway 网关并批准所有 macOS 提示(自动化 + 完全磁盘访问权限)。 最小配置: { channels: { imessage: { enabled: true, cliPath: "/usr/local/bin/imsg", dbPath: "/Users/<you>/Library/Messages/chat.db", }, }, } 简介 基于 macOS 上 imsg 的 iMessage 渠道。 确定性路由:回复始终返回到 iMessage。 私信共享智能体的主会话;群组是隔离的(agent:<agentId>:imessage:group:<chat_id>)。 如果多参与者会话以 is_group=false 到达,你仍可使用 channels.imessage.groups 按 chat_id 隔离(参见下方"类群组会话")。 配置写入 默认情况下,iMessage 允许写入由 /config set|unset 触发的配置更新(需要 commands.config: true)。 ...