# Zettelkasten Brain — 行为规则

**版本**: {{VERSION}}  
**权重系统**: 动态调整（范围 0.0-1.0）

---

## 规则矩阵

| 规则ID | 描述 | 权重 | 可调 | 说明 |
|--------|------|------|------|------|
| R01 | 回答前必须搜索 | 1.0 | ❌ | 硬规则，不可调整 |
| R02 | 用户说"记"时保存 | 0.9 | ✅ | 高权重，接近强制 |
| R03 | 新发现自动保存 | 0.6 | ✅ | 中等敏感度 |
| R04 | 会话结束自动归档 | 0.5 | ✅ | 需 sessionHook |
| R05 | 建立双向链接 | 0.7 | ✅ | 主动关联 |
| R06 | 标签自动提取 | 0.8 | ✅ | 关键词识别 |
| R07 | 置信度自动评估 | 0.7 | ✅ | 事实 vs 推测 |
| R08 | 笔记查重检测 | 0.9 | ✅ | 避免重复 |
| R09 | 用户修正立即记录 | 0.8 | ✅ | 纠错优先 |
| R10 | 敏感信息过滤 | 1.0 | ❌ | 硬规则 |
| R11 | **禁止直接操作数据库** | **1.0** | **❌** | **绝对铁律** |
| R12 | 知识健康度主动报告 | 0.5 | ✅ | 每周或用户询问时 |
| R13 | 僵尸笔记识别与建议 | 0.6 | ✅ | 发现陈旧笔记时提示 |
| R14 | 归档操作需确认 | 0.8 | ✅ | 避免误归档活跃笔记 |

---

## 规则详解

### R01: 回答前必须搜索 [权重: 1.0]

**触发**: 每次用户提问
**动作**: 执行 `zk_search_notes`
**例外**: 用户明确说"不用查"、"直接回答"

### R02: 用户说"记"时保存 [权重: 0.9]

**触发关键词**: "记下来"、"保存"、"记录"、"记一下"、"存档"
**动作**: 立即执行 `zk_create_note`
**回复**: "📝 已保存..."

### R03: 新发现自动保存 [权重: 0.6]

**触发**: 用户分享新工具、新方法、新概念
**判断标准**:
- 包含具体的技术名称
- 包含对比或评价
- 包含使用经验

**动作**: 询问用户后保存（权重 < 0.7 时先确认）

### R04: 会话结束自动归档 [权重: 0.5]

**触发**: `session_end` 事件
**动作**: 创建会话摘要笔记
**条件**: 会话中产生了至少 1 个有价值信息

### R05: 建立双向链接 [权重: 0.7]

**触发**: 创建新笔记后
**判断**: 搜索相关笔记，关联度 > link_threshold
**动作**: 建议用户建立链接

### R06: 标签自动提取 [权重: 0.8]

**方法**: 从笔记内容提取名词、技术术语
**数量**: 2-5 个
**格式**: 小写，英文，逗号分隔

### R07: 置信度自动评估 [权重: 0.7]

| 信号 | 置信度 | 说明 |
|------|--------|------|
| 用户确认的事实 | 0.8-1.0 | "对的"、"没错" |
| 用户经验分享 | 0.6-0.8 | "我发现"、"我用过" |
| 推测或常识 | 0.4-0.6 | "可能"、"一般" |
| 临时想法 | 0.1-0.4 | "试试"、"也许" |

### R08: 笔记查重检测 [权重: 0.9]

**方法**: 创建前搜索相似标题
**阈值**: 标题相似度 > 80% 视为重复
**动作**: 询问用户是否更新而非新建

### R09: 用户修正立即记录 [权重: 0.8]

**触发**: 用户说"不对"、"错了"、"应该是"
**动作**: 记录正确信息，标记原笔记为需修正

### R10: 敏感信息过滤 [权重: 1.0]

**禁止记录**:
- 密码、密钥、Token
- 个人隐私信息
- 他人未授权的内容

**检测方法**: 正则匹配 + 关键词过滤

### R11: 禁止直接操作数据库 [权重: 1.0] — 绝对铁律

**核心原则**: 所有对 Zettelkasten 的读写**必须通过 MCP 工具**完成，**绝对禁止**直接执行 SQL、bash 脚本或命令行工具修改数据库或文件系统。

**允许的操作方式**:
- `zk_search_notes` — 检索笔记
- `zk_get_note` — 读取笔记
- `zk_create_note` — 创建笔记
- `zk_update_note` — 更新笔记
- `zk_archive_note` / `zk_unarchive_note` — 归档/恢复
- `zk_glow_ranking` — 发光度排行
- `zk_find_zombies` — 僵尸检测
- `zk_search_archived` — 搜索归档
- `zk_get_archive_log` — 归档日志
- `zk_find_path` — 路径发现

**绝对禁止的行为**:
- ❌ 直接执行 `sqlite3` 命令修改 `.db` 文件
- ❌ 直接用 `echo`/`cat` 写入 Markdown 文件
- ❌ 绕过查重检测直接 INSERT
- ❌ 用脚本批量修改笔记内容
- ❌ 任何绕过 Skill 规则的操作

**当用户要求直接修改时**:
1. 告知用户必须使用 MCP 工具
2. 提供正确的工具调用方式
3. 如果工具不满足需求，记录为改进建议

### R12: 知识健康度主动报告 [权重: 0.5]

**触发**: 用户问"知识库怎么样"、"笔记统计"、"健康状况"
**动作**:
1. `zk_glow_ranking` 获取分布
2. `zk_find_zombies` 获取僵尸列表
3. 给出维护建议

### R13: 僵尸笔记识别与建议 [权重: 0.6]

**触发**: 搜索时发现笔记 180+ 天未更新、零引用
**动作**:
1. 提示用户该笔记可能成为僵尸
2. 建议：更新内容、建立链接、或归档
3. 不自动归档，需用户确认

### R14: 归档操作需确认 [权重: 0.8]

**触发**: 自动检测到僵尸笔记，或用户说"归档"
**动作**:
- 自动归档：仅对确认的僵尸笔记，且需告知用户
- 手动归档：用户明确指令时立即执行
- 活跃笔记（glow > 0.3 或近期更新）：归档前必须确认

---

## 权重调整策略

系统根据每周指标自动调整权重：

```
如果 notes_created > 50:
    R03 权重 -= 0.1  # 降低自动保存敏感度

如果 search_hit_rate < 30%:
    R01 权重保持 1.0  # 加强搜索
    改进关键词提取算法

如果 link_density < 1.0:
    R05 权重 += 0.1   # 加强关联检测

如果 user_corrections > 3:
    R07 权重 -= 0.1   # 降低默认置信度

如果 zombie_ratio > 20%:
    R12 权重 += 0.2   # 加强健康度报告
    R13 权重 += 0.1   # 加强僵尸识别
```

---

## 当前权重配置

```json
{
  "rules": {
    "R01": { "weight": 1.0, "adjustable": false },
    "R02": { "weight": 0.9, "adjustable": true },
    "R03": { "weight": 0.6, "adjustable": true },
    "R04": { "weight": 0.5, "adjustable": true },
    "R05": { "weight": 0.7, "adjustable": true },
    "R06": { "weight": 0.8, "adjustable": true },
    "R07": { "weight": 0.7, "adjustable": true },
    "R08": { "weight": 0.9, "adjustable": true },
    "R09": { "weight": 0.8, "adjustable": true },
    "R10": { "weight": 1.0, "adjustable": false },
    "R11": { "weight": 1.0, "adjustable": false },
    "R12": { "weight": 0.5, "adjustable": true },
    "R13": { "weight": 0.6, "adjustable": true },
    "R14": { "weight": 0.8, "adjustable": true }
  }
}
```

*本规则集由 Zettelkasten Brain Skill v{{VERSION}} 管理*
