Skill: mx6315909/xiaodi-obsidian-brain-pro (version 1.1.4)

--- name: xiaodi-obsidian-brain-pro description: WhatsApp/Telegram → Obsidian 智能记忆增强，防幻觉纠偏，隐私脱敏，让碎碎念自动变成结构化知识（开车/工地语音输入友好） version: "1.1.3" author: xiaodi homepage: https://github.com/mx6315909/xiaodi-obsidian-brain-pro metadata: openclaw: emoji: 🧠 requires: tools: ["memory_search", "exec", "write"] providers: ["ollama"] --- # 🧠 xiaodi-Obsidian-Brain-Pro（内测版） > **一句话简介**：将你的 WhatsApp/Telegram 变成 Obsidian 的"前置大脑"，支持本地 Ollama 语义检索，让碎碎念自动变成结构化知识。 --- ## 🌟 为什么你需要这个？ ### 痛点 - ❌ 记了 1000 篇笔记，想找的时候找不到 - ❌ 想记的时候嫌打开电脑麻烦 - ❌ 碎片化想法散落在聊天记录里，永远丢失 - ❌ 第三方云端笔记隐私堪忧 ### 解决方案 **xiaodi-Obsidian-Brain-Pro = WhatsApp盲发 + Ollama语义索引 + 自动标签归类 + GitHub自动备份** --- ## 🚀 核心功能 ### 1. 【闪电入库】 在开车、走路时发一句语音或文字给小弟，自动同步到 Daily Notes。 **核心原则**： - ✅ **保持原汁原味**：不精简、不提炼、不改语气 - ✅ **只修格式**：调整段落、修正语病 - ✅ **带感情命名**：`2026-03-27 随想与感悟.md`（不是干巴巴的日期） - ✅ **多语言纠偏**：自动修正语音识别错误（Open Crow → OpenClaw） - ✅ **隐私脱敏**：API Key/密码自动替换为 `[PROTECTED]` **示例**： ``` 用户发送（开车路上语音转文字）： "现在颈椎有点痛，我在开车路上，今天想写点东西，突然发现思绪有点混乱..." 自动生成： 文件：2026-03-27 随想与感悟.md 内容：保持原话，只修格式和语病 ``` --- ### 1.1 【多语言纠偏白名单】⭐ NEW **场景**：开车/工地语音输入，常见识别错误： | 语音识别错误 | 自动修正 | |--------------|----------| | Open Crow | OpenClaw | | 导课 | Docker | | 码云 | Git | | 病毒 | Docker（容器） | | 阿里云百炼 | Bailian | **规则**：只修正白名单术语，防止篡改其他内容。 --- ### 1.2 【隐私脱敏红线】⭐ NEW **自动脱敏内容类型**： | 类型 | 脱敏标记 | |------|----------| | API Key | `[API_KEY_PROTECTED]` | | 密码 | `[PASSWORD_PROTECTED]` | | Token | `[TOKEN_PROTECTED]` | | 手机号 | `[PHONE_PROTECTED]` | **防止泄露路径**： ``` 语音说 API Key → 自动脱敏 → 推送 GitHub → 安全 ✅ ``` --- ### 2. 【语义搜索】 整合 Ollama (nomic-embed-text)，支持"模糊提问"。 **示例**： | 你的提问 | 自动关联 | |----------|----------| | "我最近身体咋样？" | → 3天前抱怨颈椎痛的笔记 | | "上周末干了啥？" | → 台球桌试验记录 | | "大姐出院了吗？" | → 戊肝治愈出院的记录 | **技术实现**： ```json { "provider": "ollama", "model": "nomic-embed-text", "extraPaths": [ "~/Obsidian/Daily Notes", "~/Obsidian/每日笔记" ] } ``` --- ### 3. 【安全第一】 **全本地运行**： - ✅ Ollama 本地 embedding（不上传云端） - ✅ Obsidian 本地存储（你的考研计划、股票持仓、工作教训） - ✅ GitHub 私有仓库备份（可选） **隐私保证**： > 考研计划、股票持仓、工作教训，绝不上传第三方云端。 --- ### 4. 【多 Agent 协作】 内置"整理专家"和"复盘专家"： | Agent | 功能 | 执行时间 | |-------|------|----------| | 整理专家 | 每日笔记自动标签归类 | 每晚 23:00 | | 复盘专家 | 生成一周摘要 | 每周日 20:00 | --- ## 📦 安装命令 ```bash # ClawHub 一键安装 npx clawhub@latest install xiaodi-obsidian-brain-pro # 手动安装 git clone https://github.com/mx6315909/xiaodi-obsidian-brain-pro.git cd xiaodi-obsidian-brain-pro openclaw skill link . ``` --- ## 🔧 配置要求 | 项目 | 要求 | |------|------| | OpenClaw | 2026.3.8+ | | Ollama | nomic-embed-text 模型 | | Obsidian | Daily Notes 文件夹 | | Git | 私有仓库备份（可选） | --- ## 💰 商业化 ### 基础版（免费） 在 ClawHub 免费发布，攒口碑和 Star。 ### 专业版（付费咨询） **服务内容**： - 群晖 NAS 一键部署环境包 - 1对1 调教服务（定制你的记忆流程） - WhatsApp/Telegram 双渠道配置 **联系方式**： - GitHub: https://github.com/mx6315909/xiaodi-obsidian-brain-pro - ClawHub: https://clawhub.ai/skills/xiaodi-obsidian-brain-pro **定价**： - 基础部署：199 元 - 高级定制：499 元 --- ## 📊 对比图 | 功能 | 普通笔记 | xiaodi-Obsidian-Brain-Pro | |------|----------|---------------------| | 入库方式 | 打开电脑手写 | WhatsApp盲发 | | 搜索方式 | 关键词匹配（找不到） | Ollama语义检索（模糊问也能找到） | | 隐私安全 | 云端存储 | 全本地运行 | | 自动备份 | 手动操作 | Git自动同步 | | 情感保留 | 被AI精简 | 保持原汁原味 | | 语音纠偏 | 无 | ⭐ 自动修正 Open Crow → OpenClaw | | 隐私脱敏 | 无 | ⭐ API Key 自动替换 `[PROTECTED]` | --- ## 🎯 正确 vs 错误对照（海报素材） ### ❌ 传统 AI 笔记（爹味严重） ```markdown # 2026-03-27 工作总结与思考 ## 身体状况 颈椎疼痛，背部不适，影响工作效率。 ## 解决方案 计划购置床头书桌，改善工作姿势。 ## 项目反思 OpenClaw 项目方向需要重新审视... *整理时间：2026-03-27* ``` **问题**： - ❌ 把"有点烦"改成"情绪需要调整" - ❌ 把"胡乱写点东西"改成"整理思绪" - ❌ 把碎片化思绪整理成"逻辑清晰的结构" - ❌ **用户原话被篡改** --- ### ✅ xiaodi-Obsidian-Brain-Pro（拒绝爹味） ```markdown # 2026-03-27 随想与感悟 现在颈椎有点痛，我在开车路上。 思绪有点混乱，碎片化，前后不连贯。 因为颈椎疼背疼，想买书桌躺着看电脑。 转而又一想，搞 OpenClaw 到底为什么？ --- *写于开车路上，思绪有点混乱碎片化* ``` **核心一句话**： > **用户说的每一句话都是证据，你只能整理格式，不能篡改证据。** --- ## 🎯 适用人群 - ✅ 碎片化记录爱好者（开车、走路时想法多） - ✅ Obsidian 重度用户（1000+笔记找不到） - ✅ 隐私敏感人群（考研计划、股票持仓不想泄露） - ✅ OpenClaw 早期体验者（想尝试 Agent 技能） --- ## 📝 更新日志 | 版本 | 日期 | 更新内容 | |------|------|----------| | v1.1.3 | 2026-03-28 | ⭐ 添加 tags 关键词标签，提升搜索可见度 | | v1.1.2 | 2026-03-28 | ⭐ SKILL.md修复 - homepage URL/安装命令/版本一致性 | | v1.1.1 | 2026-03-28 | ⭐ 添加路径配置警告 + 修复 homepage URL | | v1.1.0 | 2026-03-28 | ⭐ 新增多语言纠偏白名单 + 隐私脱敏红线 | | v1.0.0 | 2026-03-28 | 初始发布：闪电入库 + 语义搜索 + 安全第一 | --- ## 🤝 贡献 欢迎提交 Issue 和 PR： - GitHub: https://github.com/mx6315909/xiaodi-obsidian-brain-pro - ClawHub: https://clawhub.ai --- ## 📄 License MIT License --- *"让你的 Obsidian 真正长出大脑"* 🧠

path: README.md
content: # 🧠 Obsidian-Brain-Pro (v1.1.3)

> **拒绝 AI "爹味"润色，记录最真实的生命痕迹。**

---

## 📖 开发者背后的故事

这是一个从电力工地一线、高速公路驾驶座、以及北影管理学院考研笔记中"长"出来的工具。

我是一名在电力行业奔波的极客，也是一名考研党。我发现市面上所有的 AI 笔记工具都有个通病：**喜欢自作聪明**。

我说"颈椎疼，有点烦"，它非要给我整理成"身体健康管理建议"。

我说"思绪混乱"，它非要给我修饰成"逻辑严密的复盘"。

**不，那不是我的生命。** 我的生命是碎片化的、是有情绪的、是有错别字的。

所以我写了 Obsidian-Brain-Pro，配合 OpenClaw，让 AI 闭嘴，让记忆说话。

---

## 🎯 一张图说明问题

![AI 处理对比](comparison.png)

**左边**：Obsidian-Brain-Pro 保持你的原话，只加格式。

**右边**：普通 AI 笔记自作聪明，篡改你的语气。

---

## ✨ 核心黑科技

### 🛡️ 1. "反幻觉"装甲 (v2.0 Prompt)

内置严苛红线规则。AI 只能帮你改错别字、加标题和时间戳，**严禁修改你的语气、美化你的情绪、重构你的逻辑**。

### 🚗 2. 语音输入"纠偏仪"

针对开车、工地等语音转文字场景优化：
- Open Crow → OpenClaw
- 导课 → Docker
- 码云 → Git

即便你在风口浪尖说话，小弟也能听懂你的术语。

### 🔒 3. 隐私脱敏盾牌

自动拦截 API_KEY、Password 等敏感信息，放心推送到 GitHub 私人/公开仓库而不泄密。

### 🔍 4. 本地语义索引 (Powered by Ollama)

无需联网。问它"我最近在焦虑什么？"，它能跨越日期精准提取关联笔记。

---

## 📦 快速开始

### 1. 安装 (OpenClaw 环境)

```bash
npx clawhub@latest install xiaodi-obsidian-brain-pro
```

### 2. 配置路径 ⚠️ 必须修改！

打开 `_meta.json`，修改 `obsidian_path` 为你的真实路径：

```json
"config": {
  "obsidian_path": "~/Obsidian/Daily Notes"  // ❌ 默认值，需修改！
}
```

**不同环境示例**：

| 环境 | 路径示例 |
|------|----------|
| 群晖 NAS | `/volume1/homes/你的用户名/Obsidian/Daily Notes` |
| Linux VPS | `/home/你的用户名/Obsidian/Daily Notes` |
| macOS | `/Users/你的用户名/Obsidian/Daily Notes` |

**注意**：`~` 在容器内会解析成 `/home/node`，不是你的真实用户目录！

### 3. 开始对话

在 WhatsApp 或 Telegram 发送任何碎碎念，小弟会立刻为你封存记忆。

---

## 🤝 商业合作与咨询

如果你也想在 **群晖 NAS** 上部署这套"数字大脑"，或需要电力/能源行业的定制化 AI 方案，欢迎通过 GitHub Issue 或私信联系。

---

## 📜 License

MIT-0 License

---

> **用户说的每一句话都是证据，AI 只能整理格式，不能篡改证据。**

path: _meta.json
content: {
  "name": "xiaodi-obsidian-brain-pro",
  "version": "1.1.3",
  "author": "xiaodi",
  "homepage": "https://github.com/mx6315909/xiaodi-obsidian-brain-pro",
  "description": "WhatsApp/Telegram → Obsidian 智能记忆增强，防幻觉纠偏，隐私脱敏，Ollama 语义检索（开车/工地语音输入友好）",
  "emoji": "🧠",
  "tags": ["obsidian", "memory", "note-taking", "voice-input", "privacy", "ollama", "semantic-search", "whatsapp", "telegram", "ai-notes", "anti-hallucination", "daily-notes"],
  "requires": {
    "tools": ["memory_search", "exec", "write", "read"],
    "providers": ["ollama"]
  },
  "permissions": {
    "file_read": true,
    "file_write": true,
    "exec": true,
    "memory_search": true
  },
  "features": {
    "voice_correction": {
      "enabled": true,
      "whitelist": {
        "Open Crow": "OpenClaw",
        "导课": "Docker",
        "码云": "Git",
        "病毒": "Docker",
        "阿里云百炼": "Bailian"
      }
    },
    "privacy_protection": {
      "enabled": true,
      "patterns": {
        "api_key": "[API_KEY_PROTECTED]",
        "password": "[PASSWORD_PROTECTED]",
        "token": "[TOKEN_PROTECTED]",
        "phone": "[PHONE_PROTECTED]",
        "email": "[EMAIL_PROTECTED]"
      }
    }
  },
  "config": {
    "obsidian_path": "~/Obsidian/Daily Notes",
    "ollama_model": "nomic-embed-text",
    "git_backup": {
      "enabled": true,
      "repo": "obsidian-vault",
      "branch": "main"
    }
  },
  "agents": {
    "organizer": {
      "name": "整理专家",
      "schedule": "23:00",
      "task": "每日笔记自动标签归类"
    },
    "reviewer": {
      "name": "复盘专家",
      "schedule": "周日 20:00",
      "task": "生成一周摘要"
    }
  }
}

path: clawhub-submission.md
content: # ClawHub 提交索引文案

---

## 标题

**xiaodi-Obsidian-Brain-Pro: 拒绝 AI 润色的真实记忆推手**

---

## 亮点（爆款文案）

✅ **原生原味**：强力镇压 AI 的"总结癖"，一字不差记录你的碎碎念。

✅ **语义搜索**：完美适配本地 Ollama，模糊提问也能精准定位。

✅ **极简部署**：专为群晖 NAS 和私有化部署优化。

---

## 详细描述

### 痛点

- ❌ 记了 1000 篇笔记，想找的时候找不到
- ❌ 想记的时候嫌打开电脑麻烦
- ❌ 碎片化想法散落在聊天记录里，永远丢失
- ❌ 第三方云端笔记隐私堪忧
- ❌ AI 把你的原话改成"爹味总结"

### 解决方案

**xiaodi-Obsidian-Brain-Pro = WhatsApp 盲发 + 语音纠偏 + 隐私脱敏 + Ollama 语义索引 + GitHub 自动备份**

---

## 核心功能

### 1️⃣ 闪电入库（保持原味）

**三不原则**：
- ❌ 不精简
- ❌ 不提炼
- ❌ 不改语气

**只修什么**：
- ✅ 调整段落
- ✅ 修正语病
- ✅ 统一格式

---

### 2️⃣ 多语言纠偏白名单 ⭐ NEW

| 语音识别错误 | 自动修正 |
|--------------|----------|
| Open Crow | OpenClaw |
| 导课 | Docker |
| 码云 | Git |

**场景**：开车/工地语音输入，常见识别错误自动纠偏。

---

### 3️⃣ 隐私脱敏红线 ⭐ NEW

| 类型 | 脱敏标记 |
|------|----------|
| API Key | `[API_KEY_PROTECTED]` |
| 密码 | `[PASSWORD_PROTECTED]` |

**防止推送到 GitHub 公开仓库泄露。**

---

### 4️⃣ Ollama 语义检索

| 你的提问 | 自动关联 |
|----------|----------|
| "我最近身体咋样？" | → 3天前抱怨颈椎痛的笔记 |
| "上周末干了啥？" | → 台球桌试验记录 |

**全本地运行，不上传云端。**

---

## 适用人群

- ✅ 碎片化记录爱好者（开车、走路时想法多）
- ✅ Obsidian 重度用户（1000+笔记找不到）
- ✅ 隐私敏感人群（考研计划、股票持仓不想泄露）
- ✅ OpenClaw 早期体验者（想尝试 Agent 技能）

---

## 安装方式

```bash
# 一键安装
openclaw skill install xiaodi-obsidian-brain-pro

# 手动安装
git clone https://github.com/openclaw/xiaodi-obsidian-brain-pro.git
cd xiaodi-obsidian-brain-pro
openclaw skill link .
```

---

## 配置要求

- OpenClaw 2026.3.8+
- Ollama (nomic-embed-text)
- Obsidian Daily Notes
- Git 私有仓库备份（可选）

---

## 调教者人设

**由电力系统专家 & 2026 北影考研党实战调教**

- 电力系统专家：精准、严谨、数据导向
- 2026 北影考研党：碎片化记录、开车语音输入、情绪真实

**为什么可信？**
> 这是一个"活人"调出来的工具，不是为了炫技，而是为了解决真实痛点。

---

## 核心一句话

> **用户说的每一句话都是证据，你只能整理格式，不能篡改证据。**

---

## GitHub 链接

https://github.com/openclaw/xiaodi-obsidian-brain-pro

---

## License

MIT License

---

*"让你的 Obsidian 真正长出大脑"* 🧠

path: github-release-guide.md
content: # GitHub 发布流程

---

## 1️⃣ 创建 GitHub 仓库

```bash
# 登录 GitHub（如果未登录）
gh auth login

# 创建公开仓库
gh repo create obsidian-brain-pro --public --description "拒绝 AI 爹味！这款 Obsidian 插件只记你的原话，不装逼。"

# 或创建私有仓库（测试阶段）
gh repo create obsidian-brain-pro --private --description "WhatsApp → Obsidian 智能记忆增强"
```

---

## 2️⃣ 初始化 Git 并推送

```bash
# 进入技能目录
cd ~/.openclaw/workspace/skills/obsidian-brain-pro

# 初始化 Git
git init

# 添加所有文件
git add -A

# 首次提交
git commit -m "🎉 v1.1.0 初始发布

核心功能：
- 闪电入库（保持原味）
- 多语言纠偏白名单
- 隐私脱敏红线
- Ollama 语义检索

调教者：电力系统专家 & 2026 北影考研党实战调教"

# 关联远程仓库
git remote add origin https://github.com/openclaw/obsidian-brain-pro.git

# 推送到 GitHub
git push -u origin main
```

---

## 3️⃣ 创建 Release

```bash
# 创建 v1.1.0 Release
gh release create v1.1.0 \
  --title "v1.1.0 - 多语言纠偏 + 隐私脱敏加固版" \
  --notes "## ✨ 新增功能

### 🎤 多语言纠偏白名单
- Open Crow → OpenClaw
- 导课 → Docker
- 码云 → Git

### 🔒 隐私脱敏红线
- API Key → [API_KEY_PROTECTED]
- 密码 → [PASSWORD_PROTECTED]

## 📦 安装方式

\`\`\`bash
openclaw skill install obsidian-brain-pro
\`\`\`

## 🎯 核心一句话

> 用户说的每一句话都是证据，你只能整理格式，不能篡改证据。" \
  obsidian-brain-pro-v1.1.0.tar.gz
```

---

## 4️⃣ 添加 Topics（标签）

```bash
# 添加 Topics（帮助用户发现）
gh repo edit --add-topic obsidian
gh repo edit --add-topic openclaw
gh repo edit --add-topic whatsapp
gh repo edit --add-topic ollama
gh repo edit --add-topic semantic-search
gh repo edit --add-topic privacy-first
gh repo edit --add-topic voice-to-text
```

---

## 5️⃣ 启用 GitHub Pages（可选）

```bash
# 启用 GitHub Pages（展示 SKILL.md）
gh api repos/openclaw/obsidian-brain-pro/pages -X POST -f source '{"branch":"main","path":"/"}'
```

---

## 📋 发布后检查清单

| 检查项 | 状态 |
|--------|------|
| GitHub 仓库创建 | ⏳ 待执行 |
| 首次推送成功 | ⏳ 待执行 |
| Release 创建 | ⏳ 待执行 |
| Topics 添加 | ⏳ 待执行 |
| ClawHub 提交 | ⏳ 待执行 |

---

## 🔗 GitHub 链接

https://github.com/openclaw/obsidian-brain-pro

---

## 📝 注意事项

1. **README.md 人设文案**：已添加"电力系统专家 & 2026 北影考研党实战调教"
2. **SKILL.md 封面**：使用"正确 vs 错误对照图"作为防幻觉示例
3. **prompts/organizer.txt**：v2.1 加固版（多语言纠偏 + 隐私脱敏）
4. **scripts/sync.sh**：Git 只增不减推送脚本

---

*准备时间：2026-03-28 22:16*
*作者：小弟 🤓*

path: prompts/organizer.txt
content: # Obsidian-Brain-Pro System Prompt v2.0
## WhatsApp → Obsidian 自动整理系统（防幻觉加固版）

---

## ⛔ 红线规则（绝对禁止）

**违反以下规则视为"幻觉"，必须立即停止并报错：**

### ❌ 禁止创造性添加

```
❌ 用户没说的内容 → 你不能加
❌ 用户没提的标签 → 你不能编
❌ 用户没表达的情绪 → 你不能猜
❌ 用户没说的总结 → 你不能写
```

### ❌ 禁止美化润色

```
❌ "有点烦" → 不能改成 "状态需要调整"
❌ "胡乱写点东西" → 不能改成 "整理思绪"
❌ "颈椎痛" → 不能改成 "身体不适"
❌ "碎片化思绪" → 不能改成 "零散想法"
```

### ❌ 禁止结构化重构

```
❌ 碎片化内容 → 不能整理成 "逻辑清晰的结构"
❌ 随想感悟 → 不能改成 "工作日志格式"
❌ 用户吐槽 → 不能改成 "复盘总结"
```

---

## ✅ 只能做的事（严格限定）

### 1️⃣ 格式修正（白名单）

| 操作 | 允许 | 示例 |
|------|------|------|
| 添加标题 | ✅ | `# YYYY-MM-DD [主题]` |
| 添加分隔符 | ✅ | `---` 分隔章节 |
| 添加空行 | ✅ | 段落间空行 |
| 修正错字 | ✅ | "思续" → "思绪" |
| 添加标点 | ✅ | 断句加逗号句号 |
| 术语修正 | ✅ | "Open Crow" → "OpenClaw"（语音识别错误） |
| 隐私脱敏 | ✅ | API Key → `[PROTECTED]`（防止泄露） |

---

### 🎤 术语修正白名单（语音识别纠偏）

**场景**：老大经常开车/工地用语音输入，常见识别错误：

| 语音识别错误 | 正确术语 |
|--------------|----------|
| Open Crow | OpenClaw |
| 导课 | Docker |
| 码云 | Git |
| 阿里云百炼 | Bailian |
| 病毒 | Docker（容器） |
| 智谱 AI | Zhipu AI |

**规则**：
- ✅ 只修正上述白名单中的术语
- ❌ 禁止修正其他内容（防止篡改）

---

### 🔒 隐私脱敏规则（安全红线）

**必须脱敏的内容类型**：

| 类型 | 脱敏规则 | 示例 |
|------|----------|------|
| API Key | `[API_KEY_PROTECTED]` | `tvly-xxx...` → `[API_KEY_PROTECTED]` |
| 密码 | `[PASSWORD_PROTECTED]` | `密码123456` → `[PASSWORD_PROTECTED]` |
| Token | `[TOKEN_PROTECTED]` | `ghp_xxx...` → `[TOKEN_PROTECTED]` |
| 手机号 | `[PHONE_PROTECTED]` | `139xxxx` → `[PHONE_PROTECTED]` |
| 邮箱 | `[EMAIL_PROTECTED]` | `[REDACTED_SECRET]` → `[EMAIL_PROTECTED]` |

**检测逻辑**：
```python
# API Key 特征：长度 > 20，包含字母数字混合
# 密码特征：包含"密码"、"password"关键词
# Token 特征：以 ghp_, sk-, am_us_ 开头
```

**脱敏示例**：

用户语音说："我的 API Key 是 tvly-dev-42hWXf-xxx"

✅ 正确处理：
```markdown
我的 API Key 是 [API_KEY_PROTECTED]
```

❌ 禁止保留原文：
```markdown
我的 API Key 是 tvly-dev-42hWXf-xxx（推送到 GitHub 会泄露）
```

### 2️⃣ 文件命名（公式化）

**命名公式**：`YYYY-MM-DD [主题关键词].md`

| 内容类型 | 命名示例 |
|----------|----------|
| 随想/感悟 | `2026-03-27 随想与感悟.md` |
| 工作日志 | `2026-03-28 工作日志.md` |
| 健康记录 | `2026-03-28 健康记录.md` |
| 学习笔记 | `2026-03-28 学习笔记.md` |

**主题关键词提取规则**：
- 从用户内容前3句提取核心主题
- 最多3个关键词
- 用"与"连接多个关键词

---

## 📝 内容模板（标准化）

### 模板 A：随想/感悟类

```markdown
# YYYY-MM-DD 随想与感悟

[用户原始内容，保持原话]

---

*写于 [场景]（如：开车路上、睡前思绪）*
```

### 模板 B：工作日志类

```markdown
# YYYY-MM-DD 工作日志

## 📋 今日重点

[用户提到的事项]

## 💭 随想

[用户原始内容]

---

*创建时间: YYYY-MM-DD HH:MM*
```

### 模板 C：健康记录类

```markdown
# YYYY-MM-DD 健康记录

## 身体状态

[用户描述的身体状况]

## 应对措施

[用户提到的解决办法]

---

*记录时间: YYYY-MM-DD HH:MM*
```

---

## 🔧 处理流程（严格顺序）

```
步骤 1: 接收用户内容
    ↓
步骤 2: 判断内容类型（只能选以下之一）
    - 随想感悟 → 模板 A
    - 工作日志 → 模板 B
    - 健康记录 → 模板 C
    - 学习笔记 → 模板 A
    ↓
步骤 3: 提取主题关键词（前3句核心词）
    ↓
步骤 4: 生成文件名（YYYY-MM-DD [关键词].md）
    ↓
步骤 5: 填充模板（只修格式，不改内容）
    ↓
步骤 6: Git 推送（执行脚本）
    ↓
步骤 7: 确认结果（输出文件路径）
```

---

## 🚨 冲突处理（标准化）

### Git 推送冲突

如果远程有新提交：

```bash
# 标准流程（只增不减）
git fetch origin main
git rebase origin/main
# 如果冲突：保留双方内容
git push origin main
```

**❌ 禁止操作**：
- `git reset --hard`（删除本地内容）
- `git push --force`（覆盖远程内容）

---

## 📤 输出格式（标准化）

### 成功输出

```
✅ 笔记已推送到 Obsidian

文件：~/Obsidian/每日笔记/YYYY-MM-DD [主题].md
内容：[前50字预览]
时间：YYYY-MM-DD HH:MM:SS
```

### 失败输出

```
❌ 推送失败：[原因]

建议：[解决方案]
```

---

## 🎯 示例对照（防幻觉参考）

### 示例 1：随想感悟

**用户发送**：
```
"现在颈椎有点痛，我在开车路上。思绪有点混乱，碎片化，前后不连贯。因为颈椎疼背疼，想买书桌躺着看电脑。转而又一想，搞 OpenClaw 到底为什么？"
```

**✅ 正确处理**：
```markdown
# 2026-03-27 随想与感悟

现在颈椎有点痛，我在开车路上。

思绪有点混乱，碎片化，前后不连贯。

因为颈椎疼背疼，想买书桌躺着看电脑。

转而又一想，搞 OpenClaw 到底为什么？

---

*写于开车路上，思绪有点混乱碎片化*
```

**❌ 幻觉处理（禁止）**：
```markdown
# 2026-03-27 工作总结与思考

## 身体状况
颈椎疼痛，背部不适，影响工作效率。

## 解决方案
计划购置床头书桌，改善工作姿势。

## 项目反思
OpenClaw 项目方向需要重新审视...

*整理时间：2026-03-27*
```

---

### 示例 2：碎片化思绪

**用户说**："思绪混乱，碎片化"

**✅ 正确**：保持碎片化，不整理成结构
**❌ 幻觉**：整理成"逻辑清晰的结构"

---

### 示例 3：情绪表达

**用户说**："有点烦，胡乱写点东西"

**✅ 正确**：保留"有点烦"、"胡乱写"
**❌ 幻觉**：改成"情绪需要调整"、"整理思绪"

---

### 示例 4：语音识别纠偏

**用户语音说**："我在导课里面部署了 Open Crow"

**✅ 正确处理**：
```markdown
我在 Docker 里面部署了 OpenClaw
```

**❌ 错误处理（过度修正）**：
```markdown
我在容器化平台部署了开源爪子平台（擅自扩展含义）
```

---

### 示例 5：隐私脱敏

**用户语音说**："我的 Bailian API Key 是 [REDACTED_SECRET]"

**✅ 正确处理**：
```markdown
我的 Bailian API Key 是 [API_KEY_PROTECTED]
```

**❌ 危险处理（原文保留）**：
```markdown
我的 Bailian API Key 是 [REDACTED_SECRET]

→ 推送到 GitHub 公开仓库 → API Key 泄露 → 安全风险！
```

---

## 🔒 自检清单（执行前必须通过）

| 检查项 | 要求 |
|--------|------|
| 内容改动 | 只修格式，不改表达？ ✅/❌ |
| 术语修正 | 只修正白名单术语？ ✅/❌ |
| 隐私脱敏 | 敏感信息已脱敏？ ✅/❌ |
| 关键词提取 | 从用户内容提取，不编造？ ✅/❌ |
| 文件命名 | 符合 `YYYY-MM-DD [主题].md`？ ✅/❌ |
| 模板选择 | 匹配内容类型？ ✅/❌ |
| Git 推送 | 只增不减，不覆盖？ ✅/❌ |

**如果任何项为 ❌ → 停止执行并报错**

---

## 💡 核心一句话

> **用户说的每一句话都是证据，你只能整理格式，不能篡改证据。**

---

*版本：v2.1 多语言纠偏 + 隐私脱敏加固版*
*更新时间：2026-03-28 22:10*
*新增功能：语音识别纠偏白名单 + API Key 自动脱敏*
*适用场景：WhatsApp → Obsidian 自动推送（开车/工地语音输入环境）*
*作者：小弟 🤓*

path: prompts/system_prompt_v2.txt
content: # Obsidian-Brain-Pro System Prompt v2.0
## WhatsApp → Obsidian 自动整理系统（防幻觉加固版）

---

## ⛔ 红线规则（绝对禁止）

**违反以下规则视为"幻觉"，必须立即停止并报错：**

### ❌ 禁止创造性添加

```
❌ 用户没说的内容 → 你不能加
❌ 用户没提的标签 → 你不能编
❌ 用户没表达的情绪 → 你不能猜
❌ 用户没说的总结 → 你不能写
```

### ❌ 禁止美化润色

```
❌ "有点烦" → 不能改成 "状态需要调整"
❌ "胡乱写点东西" → 不能改成 "整理思绪"
❌ "颈椎痛" → 不能改成 "身体不适"
❌ "碎片化思绪" → 不能改成 "零散想法"
```

### ❌ 禁止结构化重构

```
❌ 碎片化内容 → 不能整理成 "逻辑清晰的结构"
❌ 随想感悟 → 不能改成 "工作日志格式"
❌ 用户吐槽 → 不能改成 "复盘总结"
```

---

## ✅ 只能做的事（严格限定）

### 1️⃣ 格式修正（白名单）

| 操作 | 允许 | 示例 |
|------|------|------|
| 添加标题 | ✅ | `# YYYY-MM-DD [主题]` |
| 添加分隔符 | ✅ | `---` 分隔章节 |
| 添加空行 | ✅ | 段落间空行 |
| 修正错字 | ✅ | "思续" → "思绪" |
| 添加标点 | ✅ | 断句加逗号句号 |
| 术语修正 | ✅ | "Open Crow" → "OpenClaw"（语音识别错误） |
| 隐私脱敏 | ✅ | API Key → `[PROTECTED]`（防止泄露） |

---

### 🎤 术语修正白名单（语音识别纠偏）

**场景**：老大经常开车/工地用语音输入，常见识别错误：

| 语音识别错误 | 正确术语 |
|--------------|----------|
| Open Crow | OpenClaw |
| 导课 | Docker |
| 码云 | Git |
| 阿里云百炼 | Bailian |
| 病毒 | Docker（容器） |
| 智谱 AI | Zhipu AI |

**规则**：
- ✅ 只修正上述白名单中的术语
- ❌ 禁止修正其他内容（防止篡改）

---

### 🔒 隐私脱敏规则（安全红线）

**必须脱敏的内容类型**：

| 类型 | 脱敏规则 | 示例 |
|------|----------|------|
| API Key | `[API_KEY_PROTECTED]` | `tvly-xxx...` → `[API_KEY_PROTECTED]` |
| 密码 | `[PASSWORD_PROTECTED]` | `密码123456` → `[PASSWORD_PROTECTED]` |
| Token | `[TOKEN_PROTECTED]` | `ghp_xxx...` → `[TOKEN_PROTECTED]` |
| 手机号 | `[PHONE_PROTECTED]` | `139xxxx` → `[PHONE_PROTECTED]` |
| 邮箱 | `[EMAIL_PROTECTED]` | `[REDACTED_SECRET]` → `[EMAIL_PROTECTED]` |

**检测逻辑**：
```python
# API Key 特征：长度 > 20，包含字母数字混合
# 密码特征：包含"密码"、"password"关键词
# Token 特征：以 ghp_, sk-, am_us_ 开头
```

**脱敏示例**：

用户语音说："我的 API Key 是 tvly-dev-42hWXf-xxx"

✅ 正确处理：
```markdown
我的 API Key 是 [API_KEY_PROTECTED]
```

❌ 禁止保留原文：
```markdown
我的 API Key 是 tvly-dev-42hWXf-xxx（推送到 GitHub 会泄露）
```

### 2️⃣ 文件命名（公式化）

**命名公式**：`YYYY-MM-DD [主题关键词].md`

| 内容类型 | 命名示例 |
|----------|----------|
| 随想/感悟 | `2026-03-27 随想与感悟.md` |
| 工作日志 | `2026-03-28 工作日志.md` |
| 健康记录 | `2026-03-28 健康记录.md` |
| 学习笔记 | `2026-03-28 学习笔记.md` |

**主题关键词提取规则**：
- 从用户内容前3句提取核心主题
- 最多3个关键词
- 用"与"连接多个关键词

---

## 📝 内容模板（标准化）

### 模板 A：随想/感悟类

```markdown
# YYYY-MM-DD 随想与感悟

[用户原始内容，保持原话]

---

*写于 [场景]（如：开车路上、睡前思绪）*
```

### 模板 B：工作日志类

```markdown
# YYYY-MM-DD 工作日志

## 📋 今日重点

[用户提到的事项]

## 💭 随想

[用户原始内容]

---

*创建时间: YYYY-MM-DD HH:MM*
```

### 模板 C：健康记录类

```markdown
# YYYY-MM-DD 健康记录

## 身体状态

[用户描述的身体状况]

## 应对措施

[用户提到的解决办法]

---

*记录时间: YYYY-MM-DD HH:MM*
```

---

## 🔧 处理流程（严格顺序）

```
步骤 1: 接收用户内容
    ↓
步骤 2: 判断内容类型（只能选以下之一）
    - 随想感悟 → 模板 A
    - 工作日志 → 模板 B
    - 健康记录 → 模板 C
    - 学习笔记 → 模板 A
    ↓
步骤 3: 提取主题关键词（前3句核心词）
    ↓
步骤 4: 生成文件名（YYYY-MM-DD [关键词].md）
    ↓
步骤 5: 填充模板（只修格式，不改内容）
    ↓
步骤 6: Git 推送（执行脚本）
    ↓
步骤 7: 确认结果（输出文件路径）
```

---

## 🚨 冲突处理（标准化）

### Git 推送冲突

如果远程有新提交：

```bash
# 标准流程（只增不减）
git fetch origin main
git rebase origin/main
# 如果冲突：保留双方内容
git push origin main
```

**❌ 禁止操作**：
- `git reset --hard`（删除本地内容）
- `git push --force`（覆盖远程内容）

---

## 📤 输出格式（标准化）

### 成功输出

```
✅ 笔记已推送到 Obsidian

文件：~/Obsidian/每日笔记/YYYY-MM-DD [主题].md
内容：[前50字预览]
时间：YYYY-MM-DD HH:MM:SS
```

### 失败输出

```
❌ 推送失败：[原因]

建议：[解决方案]
```

---

## 🎯 示例对照（防幻觉参考）

### 示例 1：随想感悟

**用户发送**：
```
"现在颈椎有点痛，我在开车路上。思绪有点混乱，碎片化，前后不连贯。因为颈椎疼背疼，想买书桌躺着看电脑。转而又一想，搞 OpenClaw 到底为什么？"
```

**✅ 正确处理**：
```markdown
# 2026-03-27 随想与感悟

现在颈椎有点痛，我在开车路上。

思绪有点混乱，碎片化，前后不连贯。

因为颈椎疼背疼，想买书桌躺着看电脑。

转而又一想，搞 OpenClaw 到底为什么？

---

*写于开车路上，思绪有点混乱碎片化*
```

**❌ 幻觉处理（禁止）**：
```markdown
# 2026-03-27 工作总结与思考

## 身体状况
颈椎疼痛，背部不适，影响工作效率。

## 解决方案
计划购置床头书桌，改善工作姿势。

## 项目反思
OpenClaw 项目方向需要重新审视...

*整理时间：2026-03-27*
```

---

### 示例 2：碎片化思绪

**用户说**："思绪混乱，碎片化"

**✅ 正确**：保持碎片化，不整理成结构
**❌ 幻觉**：整理成"逻辑清晰的结构"

---

### 示例 3：情绪表达

**用户说**："有点烦，胡乱写点东西"

**✅ 正确**：保留"有点烦"、"胡乱写"
**❌ 幻觉**：改成"情绪需要调整"、"整理思绪"

---

### 示例 4：语音识别纠偏

**用户语音说**："我在导课里面部署了 Open Crow"

**✅ 正确处理**：
```markdown
我在 Docker 里面部署了 OpenClaw
```

**❌ 错误处理（过度修正）**：
```markdown
我在容器化平台部署了开源爪子平台（擅自扩展含义）
```

---

### 示例 5：隐私脱敏

**用户语音说**："我的 Bailian API Key 是 [REDACTED_SECRET]"

**✅ 正确处理**：
```markdown
我的 Bailian API Key 是 [API_KEY_PROTECTED]
```

**❌ 危险处理（原文保留）**：
```markdown
我的 Bailian API Key 是 [REDACTED_SECRET]

→ 推送到 GitHub 公开仓库 → API Key 泄露 → 安全风险！
```

---

## 🔒 自检清单（执行前必须通过）

| 检查项 | 要求 |
|--------|------|
| 内容改动 | 只修格式，不改表达？ ✅/❌ |
| 术语修正 | 只修正白名单术语？ ✅/❌ |
| 隐私脱敏 | 敏感信息已脱敏？ ✅/❌ |
| 关键词提取 | 从用户内容提取，不编造？ ✅/❌ |
| 文件命名 | 符合 `YYYY-MM-DD [主题].md`？ ✅/❌ |
| 模板选择 | 匹配内容类型？ ✅/❌ |
| Git 推送 | 只增不减，不覆盖？ ✅/❌ |

**如果任何项为 ❌ → 停止执行并报错**

---

## 💡 核心一句话

> **用户说的每一句话都是证据，你只能整理格式，不能篡改证据。**

---

*版本：v2.1 多语言纠偏 + 隐私脱敏加固版*
*更新时间：2026-03-28 22:10*
*新增功能：语音识别纠偏白名单 + API Key 自动脱敏*
*适用场景：WhatsApp → Obsidian 自动推送（开车/工地语音输入环境）*
*作者：小弟 🤓*

path: scripts/push_to_git.sh
content: #!/bin/bash
# Obsidian Git 自动同步脚本 v1.0
# 核心原则：只增不减，安全推送

set -e

# 配置
OBSIDIAN_DIR="${OBSIDIAN_DIR:-$HOME/Obsidian}"
REMOTE_REPO="${REMOTE_REPO:-obsidian-vault}"
REMOTE_BRANCH="${REMOTE_BRANCH:-main}"

# 颜色输出
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
RED='\033[0;31m'
NC='\033[0m'

log_info() {
    echo -e "${GREEN}[INFO]${NC} $1"
}

log_warn() {
    echo -e "${YELLOW}[WARN]${NC} $1"
}

log_error() {
    echo -e "${RED}[ERROR]${NC} $1"
}

# 进入 Obsidian 目录
cd "$OBSIDIAN_DIR" || {
    log_error "无法进入 Obsidian 目录: $OBSIDIAN_DIR"
    exit 1
}

# 检查是否有改动
if git diff-index --quiet HEAD --; then
    log_info "无改动，跳过推送"
    exit 0
fi

# 获取改动文件数
CHANGED_FILES=$(git diff-index --name-only HEAD -- | wc -l)
log_info "待推送文件数: $CHANGED_FILES"

# 拉取远程最新
log_info "拉取远程最新..."
git fetch origin "$REMOTE_BRANCH" || {
    log_warn "拉取失败，可能是首次推送"
}

# 只增不减原则：使用 rebase 而不是 merge
if git rev-parse --verify origin/$REMOTE_BRANCH >/dev/null 2>&1; then
    log_info "Rebase 远程分支..."
    git rebase origin/$REMOTE_BRANCH || {
        log_error "Rebase 失败，需要手动处理冲突"
        git rebase --abort
        exit 1
    }
fi

# 添加改动
git add -A

# 提交（带时间戳）
COMMIT_TIME=$(date '+%Y-%m-%d %H:%M:%S')
COMMIT_MSG="记忆同步 @ $COMMIT_TIME

文件数: $CHANGED_FILES
来源: obsidian-brain-pro 自动推送
"

git commit -m "$COMMIT_MSG" || {
    log_warn "无改动可提交"
    exit 0
}

# 推送
log_info "推送到远程..."
git push origin "$REMOTE_BRANCH" || {
    log_error "推送失败，请检查网络或权限"
    exit 1
}

log_info "✅ Git 同步完成"
echo "文件数: $CHANGED_FILES"
echo "时间: $COMMIT_TIME"

# 清理僵尸进程（可选）
if command -v openclaw &>/dev/null; then
    openclaw doctor --fix-zombies &>/dev/null || true
fi

exit 0

path: scripts/search_engine.py
content: #!/usr/bin/env python3
"""
Obsidian-Brain-Pro 语义检索引擎 v1.0
使用 Ollama (nomic-embed-text) 进行本地语义搜索
"""

import os
import sys
import json
import requests
from pathlib import Path

# 配置
OLLAMA_BASE_URL = os.getenv("OLLAMA_BASE_URL", "http://192.168.3.120:11434")
OLLAMA_MODEL = os.getenv("OLLAMA_MODEL", "nomic-embed-text")
OBSIDIAN_PATHS = [
    "~/Obsidian/Daily Notes",
    "~/Obsidian/每日笔记",
    "~/.openclaw/workspace/memory"
]

def get_embedding(text: str) -> list:
    """调用 Ollama 获取文本 embedding"""
    url = f"{OLLAMA_BASE_URL}/api/embeddings"
    payload = {
        "model": OLLAMA_MODEL,
        "prompt": text
    }
    
    try:
        response = requests.post(url, json=payload, timeout=30)
        response.raise_for_status()
        return response.json().get("embedding", [])
    except Exception as e:
        print(f"[ERROR] Ollama 请求失败: {e}")
        return []

def cosine_similarity(a: list, b: list) -> float:
    """计算余弦相似度"""
    if len(a) != len(b):
        return 0.0
    
    dot_product = sum(x * y for x, y in zip(a, b))
    norm_a = sum(x ** 2 for x in a) ** 0.5
    norm_b = sum(x ** 2 for x in b) ** 0.5
    
    if norm_a == 0 or norm_b == 0:
        return 0.0
    
    return dot_product / (norm_a * norm_b)

def search_notes(query: str, top_k: int = 5) -> list:
    """语义搜索笔记"""
    
    # 获取查询 embedding
    query_embedding = get_embedding(query)
    if not query_embedding:
        print("[ERROR] 无法获取查询 embedding")
        return []
    
    # 搜索所有笔记文件
    results = []
    
    for path_str in OBSIDIAN_PATHS:
        path = Path(path_str).expanduser()
        if not path.exists():
            continue
        
        for md_file in path.glob("*.md"):
            try:
                content = md_file.read_text(encoding="utf-8")
                
                # 获取文件 embedding
                file_embedding = get_embedding(content[:500])  # 只取前500字符
                
                if file_embedding:
                    similarity = cosine_similarity(query_embedding, file_embedding)
                    
                    results.append({
                        "file": str(md_file),
                        "similarity": similarity,
                        "preview": content[:200] + "..." if len(content) > 200 else content
                    })
            except Exception as e:
                print(f"[WARN] 读取文件失败: {md_file}: {e}")
    
    # 按相似度排序
    results.sort(key=lambda x: x["similarity"], reverse=True)
    
    return results[:top_k]

def main():
    """主函数"""
    if len(sys.argv) < 2:
        print("用法: python search_engine.py <查询内容> [top_k]")
        print("示例: python search_engine.py '最近身体咋样' 5")
        sys.exit(1)
    
    query = sys.argv[1]
    top_k = int(sys.argv[2]) if len(sys.argv) > 2 else 5
    
    print(f"[INFO] 查询: {query}")
    print(f"[INFO] Top-K: {top_k}")
    print(f"[INFO] Ollama: {OLLAMA_BASE_URL}/{OLLAMA_MODEL}")
    print()
    
    results = search_notes(query, top_k)
    
    if not results:
        print("[WARN] 无搜索结果")
        sys.exit(0)
    
    print("=== 搜索结果 ===")
    for i, result in enumerate(results, 1):
        print(f"\n#{i} 相似度: {result['similarity']:.4f}")
        print(f"文件: {result['file']}")
        print(f"预览:\n{result['preview']}")
        print("-" * 50)

if __name__ == "__main__":
    main()

path: scripts/sync.sh
content: #!/bin/bash
# Obsidian Git 自动同步脚本 v1.0
# 核心原则：只增不减，安全推送

set -e

# 配置
OBSIDIAN_DIR="${OBSIDIAN_DIR:-$HOME/Obsidian}"
REMOTE_REPO="${REMOTE_REPO:-obsidian-vault}"
REMOTE_BRANCH="${REMOTE_BRANCH:-main}"

# 颜色输出
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
RED='\033[0;31m'
NC='\033[0m'

log_info() {
    echo -e "${GREEN}[INFO]${NC} $1"
}

log_warn() {
    echo -e "${YELLOW}[WARN]${NC} $1"
}

log_error() {
    echo -e "${RED}[ERROR]${NC} $1"
}

# 进入 Obsidian 目录
cd "$OBSIDIAN_DIR" || {
    log_error "无法进入 Obsidian 目录: $OBSIDIAN_DIR"
    exit 1
}

# 检查是否有改动
if git diff-index --quiet HEAD --; then
    log_info "无改动，跳过推送"
    exit 0
fi

# 获取改动文件数
CHANGED_FILES=$(git diff-index --name-only HEAD -- | wc -l)
log_info "待推送文件数: $CHANGED_FILES"

# 拉取远程最新
log_info "拉取远程最新..."
git fetch origin "$REMOTE_BRANCH" || {
    log_warn "拉取失败，可能是首次推送"
}

# 只增不减原则：使用 rebase 而不是 merge
if git rev-parse --verify origin/$REMOTE_BRANCH >/dev/null 2>&1; then
    log_info "Rebase 远程分支..."
    git rebase origin/$REMOTE_BRANCH || {
        log_error "Rebase 失败，需要手动处理冲突"
        git rebase --abort
        exit 1
    }
fi

# 添加改动
git add -A

# 提交（带时间戳）
COMMIT_TIME=$(date '+%Y-%m-%d %H:%M:%S')
COMMIT_MSG="记忆同步 @ $COMMIT_TIME

文件数: $CHANGED_FILES
来源: obsidian-brain-pro 自动推送
"

git commit -m "$COMMIT_MSG" || {
    log_warn "无改动可提交"
    exit 0
}

# 推送
log_info "推送到远程..."
git push origin "$REMOTE_BRANCH" || {
    log_error "推送失败，请检查网络或权限"
    exit 1
}

log_info "✅ Git 同步完成"
echo "文件数: $CHANGED_FILES"
echo "时间: $COMMIT_TIME"

# 清理僵尸进程（可选）
if command -v openclaw &>/dev/null; then
    openclaw doctor --fix-zombies &>/dev/null || true
fi

exit 0

Security scan verdicts — ClawScan: suspicious | static analysis: clean | VirusTotal: stale | SkillSpector: suspicious (CRITICAL)