使用 BM25 算法在 markdown 正文中搜索会话/项目/全局记忆。使用此工具来回忆代理或编写子代理先前持久化的内容：项目记忆、会话检查点、任务叙述（在 sessions/<sid>/tasks/ 下）、项目笔记、全局偏好。

记忆布局：<data>/memory/<scope>/<scope_id>/<key>.md
作用域：global | projects | sessions | cc（可选加入，见下文）

查询指南：
- 查询词是 OR 关系并按 BM25 排序：文档如果包含任何查询词则匹配，按相关性排序（匹配词的数量/稀有度）。低相关性的仅含通用词的匹配会因分数过低被丢弃。
- 优先使用 1–3 个独特词（函数名、任务 ID、指令中的精确短语、你想要片段中的稀有词）。一长串通用词（"config params database connection"）只会增加噪音，掩盖真正的匹配——选择最稀有、最具体的词。
- "T5.3 closure" 有效。"permission deadlock" 也有效。避免用通用描述词填充。
- 标点符号（`.`、`-`、`/`、`:`）在分词时被剥离。查询和索引正文都只看到字母数字序列，因此 `T5.3` 匹配 `T5.3`、`T5_3` 或 `T5 3`。像 `postgres://host:5433` 这样的字面量被索引为词元 `postgres`、`host`、`5433`——搜索其中之一，而不是完整的 URL。

命中的结果是权威的。如果搜索返回了结果，请信任它——即使你运行的不同/相关查询返回了空结果。不要因为一种表述方式没找到就断定"我从未记录过这个"。

部分命中，需要精确字面量。命中可能提供要点但丢失了连接字符串、端口、令牌、完整命令行或路径的精确形式（整理时会意译）。如果你需要逐字逐句的精确值而结果仅近似，请使用 history 工具查询——原始消息保留了逐字内容。不要根据意译重构或猜测精确值。

当搜索返回 0 条结果时（升级处理，不要放弃）：
1. 用更少/更稀有的词重试（见上面的指南）。
2. 对于分词器会拆分的字面字符串（URL、端口、路径）——直接在记忆目录中使用 Grep 工具；全文搜索无法匹配标点形式。
3. 对于摘要可能忽略的逐字回忆——使用 history 工具（原始对话消息）。
逐步扩大范围：会话 → 项目 → 全局 → 历史。

操作：
- search：OR 连接的 BM25 查询，可选的 scope/scope_id/type 过滤器

搜索返回路径后，使用 Read 读取最相关的路径以加载完整内容（片段已被截断）。如果需要按名称模式而非正文查找文件，请使用 Glob 工具搜索 `<data>/memory/**/*.md` 来检查树结构。

CC 作用域：
当配置中启用了 memory.cc_index 时，~/.claude/projects/<slug>/memory/*.md 下的 Claude Code 记忆也会被索引，作用域为 "cc"。scope_id 是 CC 项目 slug（一个从路径派生的标识符，如 "-home-user-projects-app"）。前置元数据 metadata.type（feedback / project / reference / user）填充 type 列，因此例如 type="feedback" 会过滤 CC 反馈记忆。CC 记忆从此工具看是只读的。

隐私说明：CC 的 `type: user` 和 `type: feedback` 类别可能包含个人上下文（用户的角色、偏好、先前的指导），这些是 CC 最初为自身未来会话编写的。启用 cc_index 后，它们可以从任何 mimocode+ 代理中召回——包括可能暴露于提示注入内容的子代理。如果这不理想，请保持 cc_index 禁用或在搜索时过滤 `type` 以排除更敏感的类别。