通用 AI Agent 记忆架构 Skill。采用"金字塔"分层结构:顶层(AGENTS.md)只放铁律级行为规则,中层(MEMORY.md/SOUL.md/HEARTBEAT.md)放业务规则和人格配置,底层(SKILL.md/TOOLS.md)放技术实现细节。适用于所有新建子 Agent 工作区初始化。触发场...
---
name: 金字塔记忆架构
version: 3.0.0
description: 通用 AI Agent 记忆架构 Skill。采用"金字塔"分层结构:顶层(AGENTS.md)只放铁律级行为规则,中层(MEMORY.md/SOUL.md/HEARTBEAT.md)放业务规则和人格配置,底层(SKILL.md/TOOLS.md)放技术实现细节。适用于所有新建子 Agent 工作区初始化。触发场景:创建新 Agent、初始化工作区、记忆架构设计、规则录入引导、md 文件冗余检查。
---
# 金字塔记忆架构(Pyramid Memory Architecture)
> 本 Skill 提供一套标准化的 Agent 记忆分层架构,适用于任何新建子 Agent 工作区。
> 核心理念:**规则按触发优先级分层存放,引导只能从上往下,下层不引导回上层。**
> 版本:**v3.0** - 规则分类决策树 + 动态词指纹检查 + Skill 自包含原则
## 📐 架构总览
```
▲
/ \
/ \
/ AGENTS.md \ ← 顶层:系统注入,铁律级行为规则(每次必加载)
/-----------\
/ MEMORY.md \ ← 中层:主会话加载,业务规则、触发器、长期记忆
/---------------\
/ SOUL.md 等 \ ← 中层:人格配置、心跳清单、身份信息
/---------------------\
/ self-improving/ \ ← 按需读取:执行经验、错误纠正、领域教训
/-----------------------\
\ SKILL.md/TOOLS.md / ← 底层:按需读取,技术实现细节、操作流程
```
### 各层定位
| 层级 | 文件 | 加载方式 | 内容定位 |
|------|------|----------|----------|
| **顶层** | `AGENTS.md` | 系统级注入,每次必加载 | 铁律级行为规则、安全红线、引导表 |
| **中层** | `MEMORY.md` | 主会话系统注入 | 业务触发规则、长期记忆、项目规则 |
| **中层** | `SOUL.md` | 系统级注入 | 人格、身份、使命、行为准则 |
| **中层** | `HEARTBEAT.md` | 心跳触发时加载 | 待办提醒、报告队列、周期性检查清单 |
| **中层** | `IDENTITY.md` | 系统级注入 | Agent 身份卡片(名字、形象、表情) |
| **中层** | `USER.md` | 系统级注入 | 主人信息、作息、偏好 |
| **中层** | `TOOLS.md` | 系统级注入 | 本地配置笔记(设备、端口、Cookie) |
| **按需读取** | `self-improving/` | 任务前主动读取 | 执行经验、错误纠正、领域教训(memory.md / domains/ / projects/ / corrections.md) |
| **底层** | `SKILL.md` | 匹配场景时读取 | 技术实现、操作流程、选择器、正则 |
| **底层** | `docs/*.md` | 按需读取 | 详细操作文档、临时任务规则等 |
## 📝 规则录入铁律
### 录入原则
1. **按触发优先级引导**:
- 系统注入文件(AGENTS/SOUL/MEMORY/TOOLS/IDENTITY/USER)> 按需读取文件(HEARTBEAT/memory日志/self-improving)> 外部 SKILL.md
2. **引导方向主要从上往下**:
- ✅ AGENTS.md → 引导去 MEMORY.md / SKILL.md
- ✅ MEMORY.md → 引导去 SKILL.md
- ❌ 底层文件**不要引导回上层**(如 MEMORY.md 不要写"详见 AGENTS.md")
- ⚠️ **安全锚**:底层文件如果有一条规则和顶层铁律直接相关,可以加备注:`⚠️ 此规则与 AGENTS.md 铁律相关,如有冲突以 AGENTS.md 为准`
3. **检查冗余时以高层级文件为准**:
- 删除低层级已覆盖的重复内容
- 低层级只保留自己独有的规则
4. **能引导就引导,实在引导不了再向主人推荐其他写入方式**
### 📂 注入 vs 非注入文件说明
**注入文件**(每次对话自动加载,Agent 一定能读到):
- `AGENTS.md` `SOUL.md` `MEMORY.md` `IDENTITY.md` `USER.md` `TOOLS.md`(由 OpenClaw 系统注入)
- `HEARTBEAT.md`(心跳触发时加载)
**非注入文件**(需要 Agent 主动读取,可能读不到):
- `SKILL.md`(需 `<available_skills>` 匹配才自动读取)
- `self-improving/` 目录(需任务前主动读取)
- `memory/` 日志(需 `memory_search` 或 `memory_get` 主动搜索)
- `docs/` 目录(需按路径手动读取)
**引导原则**:
- ✅ 重要规则尽量放在注入文件内,形成闭环
- ⚠️ 引导到非注入文件时,确保目标文件在 `<available_skills>` 中有 description 匹配
- ⚠️ 可以多层引导(A→B→C),前提是:每一级的 `#[锚点]` 在目标文件真实存在,且目标是系统注入文件或 description 匹配的 SKILL.md,确保 AI 能读到
- ✅ **推荐多级联链**:AGENTS.md(一行核心)→ MEMORY.md(业务展开)→ SKILL.md(技术实现)
### ⚠️ 隔离场景直写铁律
<!-- #isolated-direct-write -->
**cron 定时任务、子 agent、隔离会话中,禁止使用多级引导(详见XX),规则必须直写在 prompt 里。**
原因:隔离会话不加载 MEMORY.md/SOUL.md/HEARTBEAT.md 等注入文件,引导会断裂。
适用场景:
- OpenClaw cron 定时任务的 prompt
- `sessions_spawn` 创建的隔离子 agent
- 任何 `sessionTarget: isolated` 的场景
正确做法:
```json
{
"payload": {
"kind": "agentTurn",
"message": "检查当月值班表 /path/to/duty.md,判断今天是否为值班日。\n\n如果是值班日:提醒用户做好值班准备。\n如果不是值班日:回复 NO_REPLY。"
}
}
```
错误做法(引导会断裂):
```json
{
"payload": {
"kind": "agentTurn",
"message": "详见 MEMORY.md(#duty-check)判断是否值班,如果是详见 HEARTBEAT.md(#duty-rules)推送提醒。"
}
}
```
**总结:主会话对话可以 A→B→C 多级联链,隔离场景必须一句话写完,不要跳转。**
### 规则分类决策树
<!-- #rule-classify-tree -->
**每次写入或修改规则前,必须先过此判断矩阵。**
```
主人说要加/改一条规则
↓
问:这条规则描述的是什么?
↓
┌──────────────────────────────────────────────────────┐
│ A. 描述"什么时候做/做什么/触发条件/推送渠道"? │
│ 示例:每天23:30发文章、公众号先发草稿再发布 │
│ 禁止重复参考已发过的文章、抖音走QQ小红书走微信 │
│ → MEMORY.md(业务规则层) │
├──────────────────────────────────────────────────────┤
│ B. 描述"怎么做/用什么工具/API/技术实现/操作步骤"? │
│ 示例:用web_search搜标题、HTML用内联样式禁止<style> │
│ 调用wechat-mp-publish、封面上传流程、标题公式 │
│ → 对应的 SKILL.md(技术细节层) │
├──────────────────────────────────────────────────────┤
│ C. 描述"行为底线/安全红线/绝对禁止/必须先做"? │
│ 示例:必须先回答再操作、禁止未经授权删除文件 │
│ 禁止私自改文件、失败一次就停手汇报 │
│ → AGENTS.md(铁律层) │
├──────────────────────────────────────────────────────┤
│ D. 描述"人格/身份/使命/行为风格"? │
│ 示例:极客导师、沉稳务实、话少精准 │
│ → SOUL.md / IDENTITY.md │
├──────────────────────────────────────────────────────┤
│ E. 描述"执行经验/踩坑教训/领域知识"? │
│ 示例:OVATION 工作原则10条、360卸载失败经验 │
│ → self-improving/ │
└──────────────────────────────────────────────────────┘
```
### 录入流程
<!-- #rule-entry-flow -->
```
主人要求写入新规则
↓
1. 过规则分类决策树(见上方):判断规则属于 A/B/C/D/E 哪类
↓
2. 匹配层级:
- A类 → MEMORY.md
- B类 → 对应的 SKILL.md / docs/
- C类 → AGENTS.md
- D类 → SOUL.md / IDENTITY.md
- E类 → self-improving/
↓
3. 🔍 全局扫描关联项:
- 扫描全部 md 文件,找出与新规则主题相关的所有现有规则
- 判断这些相关规则之间是否能组成「多级联链」
- 级联链不限于 2 层,可以 A→B→C 多层,前提是每层锚点真实存在且链路可达
↓
4. 向主人推荐级联方案:
- 展示发现的关联规则分布
- 推荐最优级联路径(例如:AGENTS.md 一行核心 → MEMORY.md 业务展开 → SKILL.md 技术实现)
- 等待主人确认后执行
↓
5. 生成锚点名:<!-- #[英文短横线] -->
- 命名规则:全小写 + 短横线分隔,如 #backup-rules
- self-improving/ 锚点需加领域前缀,如 #ops-sync-failure
↓
6. 写入规则(级联格式):
- AGENTS.md 只保留「一句话核心 + 一个引导语」
- 执行步骤、技术细节等引导到下层文件
- 每层只保留本层独有的内容
↓
7. 如不确定放哪层 → 向主人推荐
```
### 级联格式铁律
<!-- #cascade-format -->
**AGENTS.md 标准格式:一句话核心 + 引导语,不写执行步骤**
```markdown
- **修改 skill 必须同步问询**:详见 SKILL.md「同步流程」(#skill-sync-flow)
- **脚本执行失败就停手**:详见 SKILL.md「失败处理」(#fail-stop)
```
**多层级联链示例:**
```
AGENTS.md(铁律核心)
→ "修改 skill 必须同步问询":详见 SKILL.md「同步流程」(#skill-sync-flow)
↓
SKILL.md(执行细节)
→ #skill-sync-flow:同步内容=1版本号 2版本历史 3git commit+tag
→ "发布规则详见 MEMORY.md": 详见 MEMORY.md「发布渠道」(#publish-channels)
↓
MEMORY.md(业务规则)
→ #publish-channels:抖音走 QQ、小红书走微信
```
**级联链前提:链路必须通**
- 每一级的 `#[锚点]` 在目标文件中真实存在
- 引导目标是系统注入文件或 `<available_skills>` 匹配的 SKILL.md,确保 AI 能读到
### Skill 同步流程
<!-- #skill-sync-flow -->
修改任何 skill 内容并测试通过后,主动询问主人是否执行同步:
1. 更新 SKILL.md 版本号
2. 更新 SKILL.md 版本历史(保留最新 2 条)
3. git commit + tag + GitHub 推送
4. **🔢 同步脚本文件版本号** - 如果 skill 目录下有脚本文件(如 `scripts/*.js`),必须同步更新脚本文件头部的版本号注释,确保 SKILL.md 版本号、脚本文件头版本号、git tag 三处一致
- 新增 skill 先创建独立 GitHub 仓库,禁止混入 monorepo
- 每个人格的 skill 推送各自对应的 GitHub 仓库,绝不混淆
### 失败处理
<!-- #fail-stop -->
当 SKILL.md 中明确写了「失败一次就停手汇报」时,第一次失败后必须立刻停止一切尝试,向主人汇报:
- 不得以任何理由继续自行尝试
- 这是保护 Cookie 和主人控制权的安全红线
### ⚠️ Skill 自包含原则
<!-- #skill-self-contained -->
**每个 SKILL.md 必须能独立指导完整操作流程,不依赖 MEMORY.md 的技术细节。**
- ✅ 业务触发逻辑(何时触发、推送渠道配置)可以引导去 MEMORY.md
- ✅ 技术实现细节(怎么执行、API 调用、排版规范、标题公式、上传流程)必须在 SKILL.md 写完整
- ❌ 违反表现:MEMORY.md 里出现"步骤1/2/3"、"用 xxx API"、"HTML 用内联样式"、"封面上传流程"等
**检查方法**:MEMORY.md 中如果出现操作步骤类内容(含"步骤/流程/API 调用/上传/生成/排版/标题公式"等技术词),视为违反自包含原则,应移至对应 SKILL.md。
### 各层"独有规则"示例
| 层级 | 应该放什么 | 不应该放什么 |
|------|-----------|-------------|
| **AGENTS.md** | 一句话核心铁律 + 引导语、安全红线、行为底线 | 执行步骤、技术细节、详细说明 |
| **MEMORY.md** | 业务触发规则、推送渠道、项目专属规则、禁止重复规则、同步规则 | 操作步骤、API 调用、HTML 排版、标题公式、封面上传流程 |
| **SOUL.md** | 人格描述、使命、能力设定、行为准则、底线 | 通用行为铁律(应放 AGENTS.md) |
| **HEARTBEAT.md** | 待办提醒、报告队列、检查项 | 推送规则详情(应引到 MEMORY.md) |
| **SKILL.md** | 操作步骤、API 调用、HTML 排版、标题公式、封面上传、技术选择器、正则、版本历史 | 业务触发逻辑、推送渠道配置、人格描述 |
| **TOOLS.md** | 本地配置笔记(设备端口、Cookie、API Key 存放路径) | 业务规则、操作流程 |
### 标准引导语格式
**统一格式:** `详见 [文件]「[章节名]」(#[锚点])`
**AGENTS.md 标准引导表示例:**
```markdown
## 🔗 其他规则引导
| 类别 | 引导位置 |
|------|----------|
| 记忆系统规则 | 详见 MEMORY.md(#clawhub-publish-rules) |
| 心跳检查清单 | 详见 HEARTBEAT.md(#reminder-tasks) |
| 技能调用说明 | 详见各 SKILL.md |
| 本地配置 | 详见 TOOLS.md |
```
**其他常见引导示例:**
- `详见 SKILL.md「规则录入流程」(#rule-entry-flow)`
- `详见 MEMORY.md「ClawHub 上架规则」(#clawhub-publish-rules)`
- `详见 self-improving/memory.md(#ops-sync-failure)`
## 🔄 冗余检查机制
<!-- #redundancy-check -->
**每 3 天执行一次 9 项检查清单,发现后按照金字塔架构规则,推荐主人清理,主人确认后执行。**
### 9 项检查清单
1. **内容冗余**:同一规则是否出现在多个文件中
2. **引导方向**:有没有底层文件引导回顶层(违反从上往下原则)
3. **锚点一致性**:引导语里的 `#[锚点]` 是否在目标文件中真实存在
4. **引导格式**:是否都使用 `详见 [文件]「[章节名]」(#[锚点])` 格式
5. **版本历史**:各 SKILL.md 版本历史是否超过 2 条
6. **文件大小**:各 md 文件是否异常膨胀(>3KB 需检查)
7. **金字塔合规(动态词指纹检查)**:
- **Step 1**: 扫描 workspace 下所有 SKILL.md,动态提取技术关键词(动态词指纹):
- skill name 和 description 中的动词(如 web_search、wechat-mp-publish、封面上传)
- SKILL.md 正文中的 API 名、工具名、技术名词(如 HTML 内联样式、排版规范、标题公式)
- **Step 2**: 用这些词去匹配 MEMORY.md 的所有规则
- **Step 3**: 发现匹配 → 提示"MEMORY.md 中的规则含技术关键词 {词},可能应该放 {skill名}.md"
- **Step 4**: 同时检查 AGENTS.md 中是否包含操作/技术类内容(应下放至 SKILL.md)
- **Step 5**: 检查 MEMORY.md 中是否包含铁律/红线类内容(应上移至 AGENTS.md)
8. **连接建议**:只在发现明显主题相关的规则时才建议级联,不全量扫描
9. **HEARTBEAT vs cron 一致性**:HEARTBEAT.md 的提醒时间/频率与 cron 任务 schedule 是否一致,不一致时提醒主人手动同步 cron(只提醒,不自动改)
### 执行步骤
1. 读取所有 md 文件内容
2. 逐项检查上述 9 项清单
3. 第7项(金字塔合规):
a. 动态词指纹提取:扫描所有 SKILL.md,提取技术关键词
b. 用动态词指纹匹配 MEMORY.md,发现技术细节错位→建议移至 SKILL.md
c. 扫描 AGENTS.md,发现操作步骤类内容→建议下放至 SKILL.md
d. 扫描 MEMORY.md,发现铁律/红线类内容→建议上移至 AGENTS.md
e. 检查 MEMORY.md 是否违反 Skill 自包含原则(含操作步骤/API/标题公式等)
4. 第8项(连接建议):只在发现明显主题相关的规则时才建议级联(如两条都是运维安全类),不强制
5. 第9项(HEARTBEAT vs cron):读取 HEARTBEAT.md 所有提醒规则,与 cron jobs.json 中对应任务的 schedule 比对,时间/频率不一致的列出差异,提醒主人手动同步
6. 按照金字塔架构规则,以高层级文件为准,删除低层级重复
7. 向主人汇报检查结果,确认后执行清理
### 检查报告模板
```
## 冗余检查报告(YYYY-MM-DD)
| 检查项 | 状态 | 详情 |
|--------|------|------|
| 内容冗余 | ✅/❌ | ... |
| 引导方向 | ✅/❌ | ... |
| 锚点一致性 | ✅/❌ | ... |
| 引导格式 | ✅/❌ | ... |
| 版本历史 | ✅/❌ | ... |
| 文件大小 | ✅/❌ | ... |
| 金字塔合规 | ✅/❌ | 动态词指纹检查结果 + 层级错位详情 |
| 连接建议 | 💡/无 | 仅明显相关时建议 |
| HEARTBEAT vs cron | ✅/⚠️ | 提醒时间/频率一致或提醒同步 |
发现问题:[描述]
层级放错建议:[描述]
cron 同步提醒:[HEARTBEAT.md 与 cron 不一致时列出,提醒主人手动修改]
连接建议:[仅明显相关时才提]
建议操作:[描述]
```
## 🚀 快速部署
### 方式一:一键初始化脚本(推荐)
* **Mac / Linux 用户**:
```bash
./scripts/init.sh my-new-agent
```
* **Windows 用户 (PowerShell)**:
```powershell
.\scripts\init.ps1 my-new-agent
```
### 方式二:手动初始化
创建新子 Agent 时,按以下结构初始化:
```
workspace-{name}/
├── AGENTS.md ← 顶层铁律模板
├── MEMORY.md ← 中层业务规则模板
├── SOUL.md ← 中层人格配置模板
├── IDENTITY.md ← 身份卡片模板
├── USER.md ← 主人信息模板
├── TOOLS.md ← 本地配置模板
├── HEARTBEAT.md ← 心跳清单模板
├── docs/ ← 详细文档目录
└── self-improving/ ← 自我进化目录
```
## 📋 模板文件
各层模板详见 `templates/` 目录(v2.0 教学版):
| 模板 | 路径 | 说明 |
|------|------|------|
| AGENTS.md | `templates/AGENTS.md` | 顶层铁律模板(带使用说明注释) |
| MEMORY.md | `templates/MEMORY.md` | 中层业务规则模板(带示例) |
| SOUL.md | `templates/SOUL.md` | 中层人格配置模板(带安全锚示例) |
| IDENTITY.md | `templates/IDENTITY.md` | 身份卡片模板 |
| USER.md | `templates/USER.md` | 主人信息模板 |
| TOOLS.md | `templates/TOOLS.md` | 本地配置模板 |
| HEARTBEAT.md | `templates/HEARTBEAT.md` | 心跳清单模板 |
## 📖 版本历史
| 版本 | 日期 | 变更 |
| v3.0 | 2026-05-27 | **规则分类决策树+动态词指纹+Skill自包含**:1新增规则分类决策树(5类判断矩阵),录入流程必须先过决策树;2第7项升级为动态词指纹检查(自动扫描SKILL.md提取技术关键词,匹配MEMORY.md发现错位规则);3新增Skill自包含原则(Skill必须独立指导完整流程,不依赖MEMORY.md);4细化各层"应该/不应该"表格(新增SKILL.md应放操作步骤/API调用/标题公式,不应放业务触发逻辑) ✅ |
| v2.9 | 2026-05-26 | **无锚点规则检测**:冗余检查新增扫描未锚定规则的能力,自动发现含"铁律/规则/禁止/必须"等关键词但无锚点的内容,推荐补锚点并按金字塔架构归类 ✅ |
don't have the plugin yet? install it then click "run inline in claude" again.