# `CMDC.Plugin.Builtin.MemoryLoader`
[🔗](https://github.com/tupleyun/cmdc/blob/v0.5.3/lib/cmdc/plugin/builtin/memory_loader.ex#L1)

P1 持久记忆插件 — 加载 AGENTS.md 并注入系统提示词。

## 工作原理

1. **`session_start`** — 从 `memory_files` 配置的路径（默认 `working_dir/AGENTS.md`）读取记忆文件。
   通过 `emit {:memory_contents, %{file_name => content}}` 将内容传递给 Agent，
   由 Agent 更新 `state.memory_contents`，再由 `SystemPrompt` 以 `<agent_memory>` 标签注入
   每次 LLM 请求的 system prompt。
2. **`after_tool`** — 监控 `write_file`/`edit_file` 工具对记忆文件的写入，
   自动更新 plugin state 中的缓存内容，并再次 emit 触发重新加载。

## `<agent_memory>` 注入格式

SystemPrompt 模块将 `memory_contents` 渲染为：

```xml
<agent_memory name="AGENTS.md">
...文件内容...
</agent_memory>
```

## 配置

    {CMDC.Plugin.Builtin.MemoryLoader,
      memory_files: ["AGENTS.md"],   # 相对于 working_dir 的记忆文件路径列表
      auto_reload: true              # 工具写入记忆文件后自动重新加载
    }

## emit 事件协议

- `{:memory_contents, %{String.t() => String.t()}}` — 记忆内容 map，key 为文件名

Agent 收到此 emit 后将更新 `state.memory_contents`，确保下一次 LLM 请求包含最新记忆。

---

*Consult [api-reference.md](api-reference.md) for complete listing*
