跳转至

技能与自动化

技能与自动化

如何在不弄脏仓库的情况下自定义技能?

使用受管覆盖,而不是编辑仓库副本。将更改放在 ~/.openclaw/skills/<name>/SKILL.md(或通过 ~/.openclaw/openclaw.json 中的 skills.load.extraDirs 添加文件夹)。优先级:<workspace>/skills -> <workspace>/.agents/skills -> ~/.agents/skills -> ~/.openclaw/skills -> 内置 -> 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> -s(或 --session)保持已配置的默认值不变。
  • 代理默认值 + 当前会话:所有者/管理员使用 /model <model> -a(或 --agent)更新所选代理。
  • 全局默认值 + 当前会话:所有者/管理员使用 /model <model> -g(或 --global)更新 agents.defaults.model。

单独使用 /model <model> 会保留所有者/管理员已配置的默认值持久化,除非你设置了可选的 模型选择范围。

示例 - 相同模型,不同代理设置:

{
  agents: {
    ownership: "explicit",
    entries: {
      coder: {
        model: "xiaomi/mimo-v2.6-pro",
        thinkingDefault: "high",
        params: { temperature: 0.1 },
      },
      chat: {
        model: "xiaomi/mimo-v2.6-pro",
        thinkingDefault: "off",
        params: { temperature: 0.8 },
      },
    },
  },
}

将共享的按模型默认值放在 agents.defaults.models["provider/model"].params。当某个代理需要为该模型使用不同设置时,使用 agents.entries.*.models["provider/model"].params。扁平的 agents.entries.*.params 适用于该代理的所有模型,并优先于两个按模型层级。

参见 Cron 任务、多代理路由、配置、斜杠命令。

机器人在执行繁重工作时冻结。如何将其卸载?

对长时间或并行任务使用 子代理:它们在独立会话中运行,返回摘要,并保持主聊天响应。让机器人“为此任务生成一个子代理”,或使用 /subagents。使用 /status 查看 Gateway 当前是否繁忙。

长时间任务和子代理都会消耗 token;如果成本重要,可通过 agents.defaults.subagents.model 为子代理设置更便宜的模型。

文档:子代理。

在 Discord 上,线程绑定的子代理会话如何工作?

将 Discord 线程绑定到子代理或会话目标,以便该线程中的后续消息保持在绑定的会话中。

  • 使用 sessions_spawn 生成,并设置 thread: true(可选 mode: "session" 用于持久后续消息)。
  • /agents 检查绑定状态。
  • /session idle <duration|off> 和 /session max-age <duration|off> 控制自动过期。
  • /session unbind 解除线程绑定,而不会关闭代理会话。

配置:session.threadBindings.enabled(全局开关)、session.threadBindings.idleHours(默认 24,0 表示禁用)、session.threadBindings.maxAgeHours(默认 0 = 无硬性上限),以及 session.threadBindings.spawnSessions 用于生成时自动绑定(默认 true)。

文档:子代理、Discord、配置参考、斜杠命令。

子代理已完成,但完成更新发送到了错误位置或从未发布。我应该检查什么?

检查解析出的请求者路由:

  • 完成模式的子代理投递在存在绑定线程或会话路由时优先使用它。
  • 如果完成来源仅携带频道,OpenClaw 会回退到请求者会话中存储的路由(lastChannel / lastTo / lastAccountId),以便直接投递仍可能成功。
  • 没有绑定路由且没有可用存储路由:直接投递可能失败,结果会回退到排队会话投递,而不是立即发布。
  • 无效或过期的目标也可能强制队列回退或最终投递失败。
  • 如果子代理最后可见的助手回复恰好是 NO_REPLY / no_reply 或 ANNOUNCE_SKIP,OpenClaw 会故意抑制公告,而不是发布过期的早期进度。

从请求者会话中使用 /subagents list 调试,然后使用 /subagents info <id|#> 和 /subagents log <id|#>。检查 Gateway 日志中的投递失败;执行完成本身并不能确认其完成状态已投递。

文档:子代理、会话工具。

Cron 或提醒未触发。我应该检查什么?

Cron 在 Gateway 进程内运行;如果 Gateway 未持续运行,它不会触发。

  • 确认已启用 cron(cron.enabled),且未设置 OPENCLAW_SKIP_CRON。
  • 确认 Gateway 全天候运行(无休眠/重启)。
  • 验证任务时区(--tz 与主机时区)。

调试:

openclaw automations run <jobId>
openclaw automations runs <jobId> --limit 50

文档:[Cron 任务](../../automation/cron-jobs.md)、[自动化](../../automation/index.md)。
Cron 已触发,但没有内容发送到频道。为什么?

检查投递模式:

  • --no-deliver / delivery.mode: "none":不预期 runner 回退发送。
  • 缺少或无效的 announce 目标(channel / to):runner 跳过了出站投递。
  • 频道认证失败(unauthorized、Forbidden):runner 尝试投递,但凭据阻止了它。
  • 静默的隔离结果(仅 NO_REPLY / no_reply)被视为有意不可投递,因此队列中的回退投递也会被抑制。

对于隔离的 Cron 任务,当聊天路由可用时,agent 仍可使用 message 工具直接发送。--announce 仅控制 runner 对 agent 尚未自行发送的最终文本的回退投递。

调试:

openclaw automations runs <jobId> --limit 50

文档:Cron 任务。

为什么隔离的 Cron 运行会切换模型或重试一次?

这是实时模型切换路径,而不是重复调度。隔离的 Cron 会持久化运行时模型交接,并在当前运行抛出 LiveSessionModelSwitchError 时重试,在重试前保留已切换的 provider/model(以及任何已切换的 auth-profile 覆盖)。

模型选择优先级:首先是 Gmail 钩子模型覆盖(hooks.gmail.model),然后是每任务的 model,再是任何已存储的 cron-session 模型覆盖,最后是常规 agent/默认模型选择。

重试循环限制为初始尝试加 2 次切换重试;之后 Cron 会中止,而不是无限循环。

调试:

openclaw automations runs <jobId> --limit 50

文档:Cron 任务、cron CLI。

如何在 Linux 上安装技能?

使用原生 openclaw skills 命令,或将技能放入你的工作区;macOS Skills UI 在 Linux 上不可用。在 https://clawhub.ai 浏览技能。

openclaw skills search "calendar"
openclaw skills search --limit 20
openclaw skills install @owner/<skill-slug>
openclaw skills install @owner/<skill-slug> --version <version>
openclaw skills install @owner/<skill-slug> --force
openclaw skills install @owner/<skill-slug> --global
openclaw skills update --all
openclaw skills update --all --global
openclaw skills list --eligible
openclaw skills check

原生 openclaw skills install 默认写入当前工作区的 skills/ 目录。添加 --global 可安装到所有本地 agent 共享的受管技能目录。仅当要发布或同步自己的技能时,才安装独立的 clawhub CLI。使用 agents.defaults.skills 或 agents.entries.*.skills 来限定哪些 agent 能看到共享技能。

OpenClaw 能否按计划或持续在后台运行任务?

可以,通过 Gateway 调度器:

  • Cron 任务用于计划或重复任务(跨重启持久化)。
  • Heartbeat 用于主会话的周期性检查。
  • 隔离任务用于自主 agent,它们会发布摘要或投递到聊天。

文档:Cron 任务、自动化、Heartbeat。

我能否从 Linux 运行仅限 Apple macOS 的技能?

不能直接运行。macOS 技能由 metadata.openclaw.os 加上所需二进制文件进行门控,并且仅在 Gateway 主机上符合条件时才会加载。在 Linux 上,仅限 darwin 的技能(apple-notes、apple-reminders、things-mac)不会加载,除非你覆盖门控。

三种受支持的模式:

选项 A - 在 Mac 上运行 Gateway(最简单)。在存在 macOS 二进制文件的位置运行 Gateway,然后从 Linux 通过 远程模式 或 Tailscale 连接。由于 Gateway 主机是 macOS,技能会正常加载。

选项 B - 使用 macOS 节点(无需 SSH)。在 Linux 上运行 Gateway,配对一个 macOS 节点(菜单栏应用),并在 Mac 上将 Node Run Commands 设置为“Always Ask”或“Always Allow”。当所需二进制文件存在于节点上时,OpenClaw 会将仅限 macOS 的技能视为符合条件;agent 通过 nodes 工具运行它们。在“Always Ask”下,在提示中批准“Always Allow”会将该命令添加到允许列表。

选项 C - 通过 SSH 代理 macOS 二进制文件(高级)。保持 Gateway 在 Linux 上,但让所需的 CLI 二进制文件解析为在 Mac 上运行的 SSH 包装器,然后覆盖技能以允许 Linux,使其保持符合条件。

  1. 为该二进制文件创建一个 SSH 包装器(示例:Apple Notes 的 memo):
    #!/usr/bin/env bash
    set -euo pipefail
    exec ssh -T user@mac-host /opt/homebrew/bin/memo "$@"
    
  2. 在 Linux 主机上将包装器放到 PATH 中(例如 ~/bin/memo)。
  3. 覆盖技能元数据(工作区或 ~/.openclaw/skills)以允许 Linux:
    ---
    name: apple-notes
    description: Manage Apple Notes via the memo CLI on macOS.
    metadata: { "openclaw": { "os": ["darwin", "linux"], "requires": { "bins": ["memo"] } } }
    ---
    
  4. 启动新会话,以便刷新技能快照。
你们有 Notion 或 HeyGen 集成吗?

目前未内置。选项:

  • 自定义技能 / 插件:最适合可靠的 API 访问(两者都有 API)。
  • 浏览器自动化:无需代码即可工作,但更慢且更脆弱。

对于机构式的按客户上下文:为每个客户保留一个 Notion 页面(上下文 + 偏好设置 + 当前工作),并要求 agent 在会话开始时获取该页面。

对于原生集成,请提交功能请求或针对这些 API 构建一个技能。

bash openclaw skills install @owner/<skill-slug> openclaw skills update --all

原生安装会放置在活动工作区的 `skills/` 目录中;使用 `--global` 可应用于所有本地代理,或配置 `agents.defaults.skills` / `agents.entries.*.skills` 以限制可见性。某些技能需要 Homebrew 安装的二进制文件;在 Linux 上即指 Linuxbrew。

参见 [技能](../../tools/skills.md)、[技能配置](../../tools/skills-config.md)、[ClawHub](/clawhub)。
我如何使用已登录的现有 Chrome 与 OpenClaw?

使用内置的 user 浏览器配置文件,它通过 Chrome DevTools MCP 附加:

bash openclaw browser --browser-profile user tabs openclaw browser --browser-profile user snapshot

如需自定义名称,请创建显式 MCP 配置文件:

bash openclaw browser create-profile --name chrome-live --driver existing-session openclaw browser --browser-profile chrome-live tabs

这可以使用本地主机浏览器或已连接的浏览器节点。如果 Gateway 在其他位置运行,请在浏览器所在机器上运行节点主机,或改用远程 CDP。

与托管的 openclaw 配置文件相比,existing-session / user 配置文件的当前限制:

  • click、type、hover、scrollIntoView、drag 和 select 需要快照引用,而不是 CSS 选择器。
  • 上传钩子需要 ref 或 inputRef,一次一个文件,不支持 CSS element。
  • responsebody、PDF 导出、下载拦截和批量操作仍需要托管浏览器路径。

参见 浏览器 以查看完整对比。

本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 cl/openclaw