跳到正文
🛠️ 使用技巧避坑指南 · 第 08 章 实战

Hooks 与 Skills 生态:让 AI 在特定时机自动触发

掌握 Hooks 钩子机制和 Skills 生态的协同玩法,实现消息前处理、工具链扩展、本地模型接入。

⏱ 20 分钟 🔧 实战
🎖️ 任务奖励 — 学完你能做到

写出第一个自定义 Hook,并接入本地 Ollama 模型降低云端依赖

📖 本章目标:掌握 Hooks 扩展机制,了解 Skills 生态全景,建立知识沉淀体系


9.1 Hooks 系统

Hooks 是 OpenClaw 的 TypeScript 扩展点,可在 agent 处理流程的特定节点插入自定义逻辑。

触发时机与典型用途

触发时机典型用途
session-memory会话结束 / context 压缩时:提炼关键信息存档到 MEMORY.md
on-message消息到达前:过滤/改写消息,或添加额外上下文
on-tool-call工具调用前:拦截危险操作,做二次确认或权限检查
on-heartbeatHeartbeat 前后:记录 heartbeat 历史,分析 agent 行为模式

⚠️ 安全警告

Hooks 是代码。 第三方 hook 和 Skill 一样需要严格源码审查。


9.2 Skills 生态全景

资源说明地址
ClawHub官方 Skills 市场,约 13,700+ Skillsclawhub.dev
awesome-openclaw-skills社区精选,5,400+ 人工筛选的优质 SkillsGitHub 搜索
官方内置 Skills预装的核心 Skills,最安全openclaw skills list --builtin

💡 Skills 最小化原则

只装当前活跃使用的 Skills。

装 20 个 Skill 的 agent,70% 推理 token 都在评估不相关的工具选项。超过一周没用的立刻禁用。

# 禁用不常用的 Skill(不删除,随时可重新启用)
openclaw skills disable <skill-name>

# 查看已安装的全部 Skills
openclaw skills list

9.3 知识沉淀目录结构

建议在工作区建立 discoveries/ 目录,让 agent 自动积累知识:

workspace/
└── discoveries/
    ├── recipes.md            # 积累的实用方案(玩法 / Skills 组合 / 配置策略)
    ├── changelog-watch.md    # 官方版本更新追踪
    └── YYYY-MM-DD.md         # 每日新发现(agent 在 heartbeat 中自动写入)

recipes.md 示例格式

# Recipes(实用方案库)

## 成本优化
- [2026-03-10] 关闭 Thinking 后成本降低 70%,claude-sonnet 足够日常任务

## Skills 组合
- [2026-03-08] web-search + coding-agent 组合:先搜索方案再写代码,成功率 +40%

## 配置策略
- [2026-03-05] Heartbeat 改 1h 后,月成本从 $205 降至 $40

9.4 推荐的进阶工作流

工作流一:Cron + 本地模型(零成本自动化)

{
  "cron": [{
    "name": "daily-summary",
    "schedule": "0 9 * * *",
    "model": "ollama/qwen3.5",
    "sessionTarget": "isolated",
    "task": "生成今日工作摘要,存入 memory/today.md"
  }]
}

工作流二:on-tool-call Hook(危险操作二次确认)

// hooks/confirm-delete.ts
export default {
  trigger: 'on-tool-call',
  filter: (call) => call.name === 'bash' && call.args.includes('rm'),
  handler: async (call, ctx) => {
    const confirmed = await ctx.confirm(`确认执行删除操作?\n${call.args}`);
    if (!confirmed) throw new Error('用户取消操作');
  }
};

工作流三:session-memory Hook(自动提炼长期记忆)

// hooks/memory-distill.ts
export default {
  trigger: 'session-memory',
  handler: async (session, ctx) => {
    // 从本次会话提炼关键信息,写入 MEMORY.md
    await ctx.appendMemory(session.keyInsights);
  }
};

← 上一章:Heartbeat深度解析 | 返回目录 | 附录A:15条坑与桥 →