技能与自动化
技能与自动化¶
如何在不弄脏仓库的情况下自定义技能?
使用受管覆盖,而不是编辑仓库副本。将更改放在 ~/.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 适用于该代理的所有模型,并优先于两个按模型层级。
机器人在执行繁重工作时冻结。如何将其卸载?
对长时间或并行任务使用 子代理:它们在独立会话中运行,返回摘要,并保持主聊天响应。让机器人“为此任务生成一个子代理”,或使用 /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)。
子代理已完成,但完成更新发送到了错误位置或从未发布。我应该检查什么?
检查解析出的请求者路由:
- 完成模式的子代理投递在存在绑定线程或会话路由时优先使用它。
- 如果完成来源仅携带频道,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与主机时区)。
调试:
文档:[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 尚未自行发送的最终文本的回退投递。
调试:
文档:Cron 任务。
为什么隔离的 Cron 运行会切换模型或重试一次?
这是实时模型切换路径,而不是重复调度。隔离的 Cron 会持久化运行时模型交接,并在当前运行抛出 LiveSessionModelSwitchError 时重试,在重试前保留已切换的 provider/model(以及任何已切换的 auth-profile 覆盖)。
模型选择优先级:首先是 Gmail 钩子模型覆盖(hooks.gmail.model),然后是每任务的 model,再是任何已存储的 cron-session 模型覆盖,最后是常规 agent/默认模型选择。
重试循环限制为初始尝试加 2 次切换重试;之后 Cron 会中止,而不是无限循环。
调试:
如何在 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,它们会发布摘要或投递到聊天。
我能否从 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,使其保持符合条件。
- 为该二进制文件创建一个 SSH 包装器(示例:Apple Notes 的
memo): - 在 Linux 主机上将包装器放到
PATH中(例如~/bin/memo)。 - 覆盖技能元数据(工作区或
~/.openclaw/skills)以允许 Linux: - 启动新会话,以便刷新技能快照。
你们有 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,一次一个文件,不支持 CSSelement。 responsebody、PDF 导出、下载拦截和批量操作仍需要托管浏览器路径。
参见 浏览器 以查看完整对比。
本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 cl/openclaw