xiaojiou176-open/apple-notes-forensics
GitHub: xiaojiou176-open/apple-notes-forensics
macOS 平台上以复制优先为原则的 Apple Notes 取证恢复工具包,提供 AI 辅助分诊、证据支持的案例问答以及本地 MCP 代理接口。
Stars: 0 | Forks: 0
# NoteStore 实验
[](https://github.com/xiaojiou176-open/apple-notes-forensics/releases)
[](./LICENSE)
[](https://github.com/xiaojiou176-open/apple-notes-forensics/actions/workflows/ci.yml)
[快速开始](#quickstart) ·
[主页](https://xiaojiou176-open.github.io/apple-notes-forensics/) ·
[LLMs 指南](./llms.txt) ·
[Demo 证明](#demo-proof) ·
[使用案例](./USE_CASES.md) ·
[生态契合度](./ECOSYSTEM.md) ·
[构建者指南](./INTEGRATIONS.md) ·
[发布版本](https://github.com/xiaojiou176-open/apple-notes-forensics/releases) ·
[更新日志](./CHANGELOG.md) ·
[信任边界](#trust-surface) ·
[贡献指南](./CONTRIBUTING.md) ·
[支持](./SUPPORT.md) ·
[安全性](./SECURITY.md)

*公开安全的证明块:一个复制证据工作流,一个带有时间戳的案例根目录,以及可审查的备份、恢复、验证和报告输出。*
## Demo 证明
您可以将此仓库视为一个实验工作台,而不是一个救援按钮。
它帮助您处理复制的 Apple Notes 证据,将每个产物集中管理,并在之后审查结果,而不是直接操作实时的存储库。
您可以从公开安全的 demo 中获得:
- 一个带有时间戳的案例根目录,而不是临时散乱的文件
- 用于备份、恢复、验证和报告的可审查输出
- 零风险的初步尝试,不会触及私人证据或实时的 Notes 存储库
- 一个合成的 AI 分诊路径,停留在审查产物上而不是原始复制的证据
- 一个合成证据包,也可以驱动 `ask-case`,而无需假装该 demo 是一个真实的事件
## 它是什么
NoteStore Lab 是一个用于 **macOS** 的本地 Apple Notes 恢复工具包。
它围绕一个规则构建:在复制的证据上操作,而不是实时的 Notes 存储库。
CLI 优先的链路保持有意的简单:
`notes-recovery CLI -> 解析器/处理器 -> 服务 -> 核心管道 -> 带有时间戳的案例输出`
面向构建者的链路同样重要:
`案例根目录 + 清单 + 审查产物 + notes-recovery-mcp`
这是目前用于本地代理和构建者工具的外部基础。
它在今天已经是现实。托管的 API 或生成的 SDK 则还不是。
## 它不是什么
| 此仓库用于 | 此仓库不用于 |
| --- | --- |
| **macOS** 上的 Apple Notes 事件 | 云服务 |
| 复制优先的本地恢复和取证审查 | Notes 替代应用 |
| 需要清单、报告和可审查输出的操作者 | 跨平台恢复库 |
| 倾向于可检查步骤而非临时编辑的团队 | 保证所有已删除数据都能恢复 |
## 为什么 AI / 代理用户会关心
此仓库不是通用的 AI 助手。它更像是一个取证工作台,上面叠加了有边界的 AI 副驾驶。
已发布的最高价值的 AI / 代理功能包括:
| 接口 | 当前在工作流中的角色 | 为什么重要 |
| --- | --- | --- |
| `notes-recovery ai-review` | 证据总结器和分诊助手 | 将一个案例根目录转化为发现、后续问题和操作者优先级 |
| `notes-recovery ask-case` | 操作者下一步助手 | 从派生产物回答一个有边界的问题并引用证据 |
| `notes-recovery case-diff` | 重放/比较诊断基础 | 在清单和审查表层比较两个案例根目录 |
| `notes-recovery-mcp` | 本地代理访问接口 | 让 Codex / Claude Code 风格的本地代理工作流安全地使用案例根目录 |
这些接口存在于主工作流中。它们不是脱离的聊天面板。
## 你今天可以证明什么
| 证明 | 命令 | 它证明了什么 |
| --- | --- | --- |
| 公开安全的工作流形态 | `notes-recovery demo` | 仓库已经发布了零风险的合成案例接口 |
| AI 审查层 | `notes-recovery ai-review --demo` | AI 作为派生产物上的审查助手存在 |
| 有证据支持的案例问答 | `notes-recovery ask-case --demo --question "What should I inspect first?"` | 案例提问是真实的,并引用审查安全的来源 |
| 代理协议接口 | `notes-recovery-mcp --case-dir ` | MCP 访问作为本地 stdio 优先的案例根目录接口存在 |
| 比较/重放基础 | `notes-recovery case-diff --dir-a --dir-b ` | 仓库可以比较两个案例根目录,而无需对比原始复制的证据 |
| 可选插件契约 | `notes-recovery plugins-validate --config ` | 可选工具集成在您信任它们之前经过验证 |
## 为什么信任它
- **默认复制优先**:记录的工作流在复制的案例根目录上操作,而不是实时的 Notes 存储库。
- **可审查输出优先**:清单、验证输出、报告、时间线和文本包保持人类可检查。
- **AI 是有边界的**:`ai-review` 和 `ask-case` 首先停留在派生产物上,并且云端支持的 OpenAI 仍需明确选择启用。
- **MCP 是有边界的**:`notes-recovery-mcp` 首先是本地 `stdio`,只读/ mostly-read,并且以案例根目录为中心,而不是默认的主机控制。
## 快速开始
### 选择你的路径
| 如果你想... | 从这里开始 | 原因 |
| --- | --- | --- |
| 获得零风险的初步体验 | `notes-recovery demo` | 它展示了公开安全的 demo 接口,而不触及私人证据或实时的 Notes 存储库 |
| 在合成数据上预览 AI 辅助审查 | `notes-recovery ai-review --demo` | 它从公开安全的 demo 产物生成分诊、发现和后续问题 |
| 对合成审查接口提出一个有证据支持的问题 | `notes-recovery ask-case --demo --question "What should I inspect first?"` | 它从跟踪的派生 demo 产物中回答,并引用它使用的接口 |
| 检查此主机是否准备好进行真实的复制证据运行 | `notes-recovery doctor` | 它总结了主机边界、基线准备情况、可选接口和最安全的下一步 |
| 运行标准的复制证据工作流 | `notes-recovery auto --out ... --report --verify --recover --keyword ...` | 它构建一个带有恢复、审查和清单输出的带时间戳的案例根目录 |
| 稍后分享更安全的审查包 | `notes-recovery public-safe-export --dir --out ./output/public_safe_bundle` | 它创建了一个经过脱敏的共享层,而不是暴露本地取证案例根目录 |
### 最快的零风险尝试
在你将工具包指向你自己的任何复制证据之前,先从跟踪的公开 demo 开始:
```
python -m venv .venv
source .venv/bin/activate
python -m pip install -e .[dev]
notes-recovery demo
notes-recovery ai-review --demo
notes-recovery ask-case --demo --question "What should I inspect first?"
notes-recovery doctor
notes-recovery --help
```
预期的初步查看信号:
- 该命令打印 `NoteStore Lab public demo`
- `notes-recovery ai-review --demo` 生成合成分诊摘要、发现和后续问题
- `notes-recovery ask-case --demo ...` 返回带有引用的派生接口的、有证据支持的答案
- 你会看到一个案例树预览、一个验证预览和一个操作者简报
- 不会触及私人证据或实时的 Notes 存储库
- 该 demo 接口为你提供了一个连贯的故事:工作流形态、AI 证明和在同一合成材料上的有边界提问
### 针对你自己的复制证据运行
只能在 Apple Notes 数据的副本上执行此操作,切勿在实时的原始存储库上进行。
在第一次真实的复制证据运行之前,请从以下开始:
```
notes-recovery doctor
```
该预检步骤可帮助你决定此主机是否已准备好执行标准的复制证据工作流,是应该停留在 `demo`,还是仅需安装可选的附加组件。
如果你想在真实案例上进行 AI 辅助审查,请保持边界清晰:
```
python -m pip install -e .[ai]
notes-recovery ai-review \
--dir ./output/Notes_Forensics_ \
--provider ollama \
--model llama3.1:8b
```
AI 助手读取审查产物,例如清单、管道摘要、验证输出、时间线、报告和审查索引。它**不**默认将原始复制的证据或实时的 Notes 存储库上传到云提供商。
如果你想针对同一案例提出一个有边界的、有证据支持的问题,请使用:
```
notes-recovery ask-case \
--dir ./output/Notes_Forensics_ \
--question "Which artifact should I inspect first?"
```
该命令停留在派生案例产物上并返回:
- 一个答案
- 证据参考
- 置信度 / 不确定性
- 建议的下一步检查目标
```
notes-recovery auto \
--out ./output/Notes_Forensics \
--report \
--verify \
--recover \
--keyword "your distinctive keyword"
```
该工作流:
1. 将证据复制到一个带有时间戳的案例根目录中
2. 在副本上运行选定的恢复和分析阶段
3. 将输出、清单、日志和 `review_index.md` 指南写入该案例目录
你还可以使用诸如 `snapshot`、`query`、`recover`、`verify`、`report`、`plugins-validate`、`case-diff` 和 `fts-index` 等命令单独运行阶段。
## AI 辅助审查
`notes-recovery ai-review` 是此仓库中的第一个 AI 接口。
- 它是一个**审查助手**,而不是恢复引擎。
- 它首先读取**派生的审查产物**。
- 它可以生成:
- `triage_summary.md`
- `top_findings.md`
- `next_questions.md`
- `artifact_priority.json`
- 合成证明路径是:
- `notes-recovery ai-review --demo`
- 本地优先的真实案例路径是:
- `python -m pip install -e .[ai]`
- `notes-recovery ai-review --dir --provider ollama --model `
- 云端支持的提供商仅在明确选择启用时可用:
- 设置 `NOTES_AI_OPENAI_API_KEY`
- 运行 `notes-recovery ai-review --dir --provider openai --model --allow-cloud`
这些目录和清单的稳定案例根目录契约记录在 [CONTRIBUTING.md](./CONTRIBUTING.md#case-root-contract) 中。
## 协议接口
第 4 轮为代理和外部工具添加了首个面向协议的接口:
- `notes-recovery ask-case --dir --question "..."`
- `notes-recovery-mcp --case-dir `
这些协议接口保持了相同的产品边界:
- 它们停留在复制证据案例根目录上
- 它们优先使用派生的审查产物而不是原始证据
- 它们不将实时的 Notes 存储库暴露为默认输入
- MCP 服务器以本地 `stdio` 传输而不是托管服务启动
- 它们是协议接口,而不是托管的审查门户或代理平台
## 面向构建者和本地代理
当前的构建者故事有意保持狭窄和稳定:
- 使用**案例根目录契约**作为文件系统级别的基础
- 使用清单、摘要、验证预览和 AI 审查输出作为共享读取层
- 当你想要一个以案例根目录为中心的工具/资源接口而不是临时抓取文件时,请使用 `notes-recovery-mcp`
如果你的本地编码代理主机支持 stdio MCP 服务器,注册的稳定命令是:
```
.venv/bin/python -m notes_recovery.mcp.server --case-dir ./output/Notes_Forensics_
```
在 Codex / Claude Code 风格的本地 MCP 注册流程中使用该命令。
特定于主机的 JSON 包装器可能有所不同,但可执行契约是相同的:本地 stdio,mostly-read,以案例根目录为中心。
如果你想要可安全复制粘贴的包装器草图,构建者指南中包含一个用于 Codex 的最小项目 `.codex/config.toml` 示例和一个用于 Claude Code 的最小项目 `.mcp.json` 示例。
实用的主机注意事项:
- Codex 和 Claude Code 都是目前符合此处已发布的本地 stdio MCP 契约的主机的良好示例。
- 即使每个主机以不同的方式包装,也请将上述可执行命令视为事实来源。
- 在此处将 remote-connector-first 的主机视为比较路径,因为此仓库不发布托管或远程的 MCP 部署。
当前的集成契合度:
- **主要契合**:MCP, Codex, Claude Code
- **次要 / 比较契合**:OpenHands, OpenCode
- **非主要前端声明**:OpenClaw,托管门户,通用 AI 代理平台
当今面向构建者的状态:
| 接口 | 状态 | 今天使用什么 |
| --- | --- | --- |
| HTTP API | 未发布 | 使用 CLI + 案例根目录 + MCP |
| OpenAPI 契约 | 未发布 | 使用记录的案例根目录产物和 MCP 工具/资源名称 |
| 共享生成客户端 | 未发布 | 使用本地 MCP 接口或直接解析清单 |
| 轻量级 SDK | 未发布 | 仅作为未来路径,在共享案例/MCP 契约锁定之后 |
在将仓库描述为集成基础之前,请使用 [INTEGRATIONS.md](./INTEGRATIONS.md) 中专门的构建者说明和 [ECOSYSTEM.md](./ECOSYSTEM.md) 中的生态绑定矩阵。
## 插件契约和案例差异
两个先前搁置的操作者实用工具现在已成为仓库中的一等:
- `notes-recovery plugins-validate --config `
- 在你信任可选外部工具之前验证本地插件契约
- 报告契约失败、占位符命令和主机依赖差距
- `notes-recovery case-diff --dir-a --dir-b `
- 在清单和派生审查表层比较两个案例根目录
- 停留在案例级别的清单和审查产物上,而不是对比原始复制的证据
## 当前公开事实
GitHub 仓库页面和根级别的契约文件是此项目当前的公开事实。
现在:
- 此仓库中提供了公开安全的 demo
- GitHub Release 订阅源在 [Releases](https://github.com/xiaojiou176-open/apple-notes-forensics/releases) 页面上线,并附带了 `v0.1.0` 的合成公开 demo 包
- GitHub Pages 主页是目前的外部门户,地址为 [xiaojiou176-open.github.io/apple-notes-forensics](https://xiaojiou176-open.github.io/apple-notes-forensics/)
- `llms.txt`、`robots.txt` 和 `sitemap.xml` 现在将当前的公开契约暴露给 AI 爬虫和搜索引擎,而无需假装该仓库是一个 API 平台
- GitHub 描述、主题和自定义社交预览状态应被视为 GitHub 设置项,而非仓库事实
使用 [CHANGELOG.md](./CHANGELOG.md) 获取跟踪的里程碑历史,使用 [Releases](https://github.com/xiaojiou176-open/apple-notes-forensics/releases) 页面获取已发布的 GitHub 发布订阅源和合成公开 demo 包。
当前的实时/公开同步状态为:
- README 和根级别的契约文件是最新的
- GitHub Pages 主页指向与 README 主要部分相同的已发布故事
- `llms.txt`、`robots.txt` 和 `sitemap.xml` 在主页主机上已上线
- `llms.txt` 现在是当前已发布公开契约最快的 AI 爬虫/代理读取器入口点
- GitHub 描述和主题已刷新为当前的 AI/MCP 故事
- release `v0.1.0` 的标题/正文/资产已刷新
- 自定义社交预览仍需执行 GitHub Settings 的上传/验证步骤
## 信任边界
### 支持的边界
- **主机操作系统:** macOS
- **工作流风格:** 在副本上进行本地取证工作流,而不是实时的就地编辑
- **核心规则:** 不要在原始的实时 Notes 存储库上操作
### 公开契约文件
此仓库的根级别公开契约有意保持狭窄:
- [README.md](./README.md)
- [CONTRIBUTING.md](./CONTRIBUTING.md)
- [SECURITY.md](./SECURITY.md)
- [SUPPORT.md](./SUPPORT.md)
- [LICENSE](./LICENSE)
- [CODEOWNERS](./CODEOWNERS)
- [AGENTS.md](./AGENTS.md)
- [CLAUDE.md](./CLAUDE.md)
- [.env.example](./.env.example)
### 基线验证契约
仓库保持狭窄的基线冒烟契约,与默认的 CI 保证相匹配。规范的基线冒烟和全套命令位于 [CONTRIBUTING.md](./CONTRIBUTING.md) 中,以便公开前端保持简洁,而详细的验证契约保留在一个地方。
该基线冒烟证明:
- 已安装的 CLI 入口点正确解析
- 公开安全的 demo 接口打印非空的初步概览叙述
- 核心 `.[dev]` 管道接口在 CI 中的 macOS 上运行
跟踪的公开证明应仅来自以下两个地方之一:
- 在 `notes_recovery/resources/demo/` 下发布的合成 demo 资源
- 使用 `notes-recovery public-safe-export` 生成的脱敏包
### 托管审计边界
公开发布的准备状态不仅与当前工作树有关。仓库审计明确审查了 `xiaojiou176-open` 规范仓库的 git 历史、pull request 差异、分叉、镜像、下载的克隆、分支保护、所需的 pull request 审查、机密扫描和托管设置。
使用 `scripts/ci/check_release_readiness.py --strict`,而不是凭记忆假设那些开源边界检查仍然是最新的。
### 运行时卫生边界
此公开前端是**在仓库级别可安全重定位的**,但它是**在主机级别非环境不可知的**,因为支持的工作流仍假定使用 macOS 和复制的 Apple Notes 证据。
将根级别的文件视为有效的**仓库契约**,将仓库根目录视为用于命令、审查说明和公开安全 demo 产物的**稳定控制面**。
跟踪的**运行时产物**不属于公开树。`examples/ is intentionally excluded`,并且 `.runtime-cache/` 仍然是用于本地支持工作而非发布证明的**保留的非公开暂存区**。
本地 `.venv/` 目录是一个仓库本地的、可重新构建的开发者接口。
像对待可重用的工具带一样对待它,而不是像源代码或取证证据:
- 当你明确想要回收本地磁盘时,安全删除它是可以的
- 绝不能提交它
- 删除它意味着在再次运行仓库检查之前,你必须使用记录在案的开发设置重新创建它
仓库本地的可重构建工具遵循相同的边界:
- `.venv/` 是本地支持接口,而不是仓库事实
- 当你打算重新创建开发环境时,删除 `.venv/` 是一项安全的本地维护操作
- 使用 `python -m venv .venv` 加上 `python -m pip install -e .[dev]` 重新创建它
## 可选接口
可选接口仍为选择性启用:
- `.[ai]` 用于通过 Ollama 进行本地 AI 辅助审查,或通过 OpenAI 明确选择启用云端
- `.[mcp]` 用于本地 mostly-read 的 MCP 服务器
- `.[dashboard]` 用于 Streamlit 审查接口
- `.[carve]` 用于更深层的 payload 深度提取支持
不要假设一个混合环境是规范的 developer contract。
当你需要这些附加组件时明确安装它们:
```
python -m pip install -e .[ai]
python -m pip install -e .[mcp]
python -m pip install -e .[dashboard]
python -m pip install -e .[carve]
```
`dashboard` 和 `carve` 接口保持可见,但它们不属于默认的基线保证。
AI 审查也是边界感知的:
- `notes-recovery ai-review --demo` 适用于跟踪的合成审查产物
- `notes-recovery ask-case --demo ...` 停留在跟踪的合成审查产物上
- 真实案例 AI 审查从现有案例根目录读取派生输出
- 真实案例 `ask-case` 引用派生产物,而不是返回不受约束的自由形式答案
- 第一个真实的提供商是通过 Ollama 本地优先的
- 云端支持的 OpenAI 路径需要通过 `--allow-cloud` 明确选择启用
- 它不属于默认的基线保证
MCP 接口也是边界感知的:
- `notes-recovery-mcp` 以本地 `stdio` 传输启动
- 它暴露以案例为中心的资源和有边界的派生输出工具
- 它不默认进行广泛的文件系统浏览或实时存储库操作
- 它不属于默认的基线保证
某些工作流还依赖于选择性启用的集成,例如 `docker`、`sqlite_dissect`、`strings` 和 `binwalk`。这些仍然是可选的本地工具,不属于默认的基线保证。
对于更深层次的更改,请使用 [CONTRIBUTING.md](./CONTRIBUTING.md) 中记录的更广泛的全套工程扫描。该全套信号仍然是有用的工程覆盖范围,但它不是默认的基线 CI 保证。
## 公开安全导出
当你需要从现有案例根目录获取可共享的审查包时,请使用 `notes-recovery public-safe-export --dir --out ./output/public_safe_bundle`。该导出有意侧重于元数据:
- 它脱敏了特定于主机的运行时字段和绝对路径
- 它保持原始的本地取证案例根目录不变
- 它从公开安全包中省略了原始证据繁重的目录
## 仓库链接
- [主页](https://xiaojiou176-open.github.io/apple-notes-forensics/)
- [LLMs 指南](./llms.txt)
- [更新日志](./CHANGELOG.md)
- [使用案例](./USE_CASES.md)
- [生态契合度](./ECOSYSTEM.md)
- [构建者指南](./INTEGRATIONS.md)
- [Issue 跟踪器](https://github.com/xiaojiou176-open/apple-notes-forensics/issues)
- [支持指南](./SUPPORT.md)
- [安全政策](./SECURITY.md)
- [贡献指南](./CONTRIBUTING.md)
## 为什么加星标
如果你想要一个复制优先的 Apple Notes 恢复工作流,带有可审查的案例输出、公开安全的 demo 以及比临时的“打开 SQLite 文件并碰运气”方法更严格的信任边界,请为此仓库加星标。
标签:AI辅助分析, AI风险缓解, Apple Notes, Claude Code, Codex, DLL 劫持, HTTP工具, Kubernetes, MCP Server, Q&A系统, SQL数据库解析, 二进制发布, 分诊系统, 取证工具包, 只读审查, 备份恢复, 大语言模型, 安全合规, 开源工具, 数字取证, 数据审查, 数据恢复, 数据提取, 数据泄露, 本地Agent, 沙盒环境, 电子取证, 网络代理, 自动化脚本, 证据分析, 逆向工具