
【免费下载链接】xerjXERJ is the new way for AI to search data. Its autoindex capability activates agents to know your data without the token waste of grep and sed. One command indexes code, docs, logs and PDFs for search, RAG, security audits and agent memory, using 40x fewer tokens than grep. Elasticsearch compatible, so existing clients just work.项目地址https://gitcode.com/GitHub_Trending/xe/xerj点击查看免费下载XERJ 的 Agent 记忆Agent Memory没有独立的存储路径设置——每一份记忆本质上是一个名为.xerj-memory-{namespace}的保留索引存放在节点数据目录node data directory中因此设置节点数据目录就等于设置了记忆落盘位置。本文将从为何没有记忆路径这一设计根源讲起结合 XERJ 源码验证完整演示如何通过--data-dir或配置文件data_dir控制记忆存储位置、如何确认记忆持久化、如何排查重启后召回为空的问题并解释 MCP 记忆服务器为何无法也不需要拥有自己的路径设置。结论先行记忆路径 节点数据目录XERJ 没有 memory 专属的存储路径。Agent 记忆不是带独立配置的独立存储每条记忆只是名为.xerj-memory-{namespace}的保留索引中的一篇普通文档而这个索引落在节点数据目录里。因此命令行用--data-dir短形式-d指定数据目录配置文件在[server]段设置data_dir记忆自动跟随两个设置是同一个设置记忆没有自己的路径参数。官方捕获验证存入一条记忆 → 完全停止节点 → 用同一数据目录重新启动 → 召回recall仍然返回该记忆及其原始 ID证明记忆确实持久化在数据目录中而非内存或 MCP 客户端侧。为什么没有记忆路径这个设置从源码看这个设计是一以贯之的。记忆 API 的实现位于 engine/crates/xerj-api/src/memory_api.rs模块头部注释明确写着每个命名空间namespace由一个保留名称下的普通 XERJ 索引承载.xerj-memory-{namespace}store/recall 复用的正是 ES 兼容面已有的文档、dense_vector、BM25 与元数据过滤代码路径——它不重新实现搜索只是一个薄适配层。保留前缀的定义在 engine/crates/xerj-common/src/types.rs#L190pub const RESERVED_INDEX_PREFIX: str .xerj-memory-; pub fn is_reserved_index(index: str) - bool { index.starts_with(RESERVED_INDEX_PREFIX) }命名空间到索引名的换算逻辑memory_api.rs中的backing_index就是把前缀拼上命名空间fn backing_index(namespace: str) - String { format!({MEMORY_PREFIX}{namespace}) }也就是说调用POST /_memory/agentmem存储一条记忆等于向.xerj-memory-agentmem这个普通索引写入一篇文档。索引在哪里由节点数据目录决定——索引数据的读写都发生在数据目录下engine/crates/xerj-storage/src/index_store.rs 中data_dir贯穿整个 IndexStoresegment 落在data_dir/segmentsWAL 落在data_dir/wal。所以给记忆单独设路径在架构上就没有落点记忆不是独立存储它就是你数据目录里的一个索引。两个设置其实是同一个--data-dir 与 data_dir控制记忆落盘位置的设置有两个入口但语义完全一致。命令行形式xerj --insecure --data-dir ./xerj-data--data-dir短形式-d指定节点数据目录示例中的--insecure表示关闭认证便于本机快速验证见下文本捕获未展示的内容记忆会跟随该路径不存在任何独立的 memory 设置。配置文件形式在 TOML 配置文件中设置[server]段[server] rest_port 8430 grpc_port 8431 es_compat_port 9430 bind_address 127.0.0.1 data_dir run-local path注意官方捕获使用的是配置文件形式并将 ES 兼容端口设为9430默认是9200后续所有 HTTP 调用都打到这个端口。从 engine/crates/xerj-common/src/config.rs#L562-L638 可以看到ServerConfig各字段的默认值rest_port默认8080原生 REST APIgrpc_port默认8081es_compat_port默认9200Elasticsearch 兼容 APIdata_dir默认./databind_address默认127.0.0.1仅回环出厂默认不对外暴露——TLS 默认关闭绑定所有网卡等于明文广播管理员密钥。所以不设置data_dir时记忆默认落在相对路径./data下用--data-dir或配置文件data_dir显式指定后记忆跟随该目录。配置文件默认模板在 engine/xerj.default.toml其中data_dir ./data。磁盘上会出现什么完成一次 store 调用后记忆索引就以普通目录的形式出现在数据目录顶层。官方捕获的目录清单如下-rw------- 1 root root 516 audit.jsonl -rw-r--r-- 1 root root 8 node.lock -rw------- 1 root root 64 .xerj_master_key drwxr-xr-x 4 root root 160 .xerj-memory-agentmem逐项说明条目角色audit.jsonl审计日志追加写入的 JSONLnode.lock节点锁文件标记该目录正被某个运行中的节点独占.xerj_master_key节点主密钥权限 600仅属主可读写.xerj-memory-agentmemagentmem命名空间的记忆索引目录数据目录里还会有 API 令牌、会话、仪表盘、用户与集群状态等其它保留目录以及你索引的全部数据segments、wal等。其中没有任何 memory 专属配置——记忆索引与普通索引共用同一套落盘机制这也是它没有独立路径的直接体现。MCP 服务器为什么无法也不需要拥有路径这是Memory MCP 忽略自定义存储路径设置这一故障表象的根源XERJ 的 MCP 服务器不向磁盘写入任何东西。从 engine/crates/xerj-mcp/src/lib.rs 的 crate 文档可以看到完整设计MCP 服务器走stdio 传输stdin/stdout 上传输换行分隔的 JSON-RPC 2.0 消息每个工具都是薄代理thin proxy构造运行中引擎已接受的请求转发到可配置的 base URL默认http://localhost:9200记忆相关工具直接映射到节点 REST 面xerj_memory_store→POST /_memory/{ns}xerj_memory_recall→POST /_memory/{ns}/_recall见build_memory_store/build_memory_recallengine/crates/xerj-mcp/src/lib.rs#L1527-L1580这个代理不增加任何自身能力——引擎返回什么包括错误就原样回传给 Agent。因此在 MCP 侧配置存储路径没有可配置的对象数据由节点持有。正确做法是两步用XERJ_URL让 MCP 服务器指向正确的节点用该节点的--data-dir/data_dir选择路径。XERJ_URL默认http://localhost:9200MCP 客户端配置示例{ mcpServers: { xerj: { command: /home/you/.local/bin/xerj, args: [mcp], env: { XERJ_URL: http://localhost:9430 } } } }若目标节点未以--insecure运行还需在env中补充XERJ_AUTH: ApiKey key密钥位于data-dir/admin.key。对于回环地址localhost / 127.0.0.1 / [::1]未提供XERJ_AUTH时服务器会自己读取本地节点写入的admin.key与xerj autoindex相同的发现机制并在 stderr 上报告所使用的文件。重启持久化验证完整走一遍官方捕获的验证流程可以用三条命令完整复现假设使用配置文件形式、ES 兼容端口9430、数据目录指向非默认路径第 1 步启动节点非默认数据目录xerj --insecure --data-dir ./xerj-data记忆跟随该路径没有独立的记忆设置。第 2 步存储一条记忆让索引落盘curl -s -XPOST http://127.0.0.1:9430/_memory/agentmem \ -H content-type: application/json \ -d {text:The deploy runbook lives in notes/01-runbook.md.,metadata:{session:A}}首次 store 会惰性创建.xerj-memory-agentmem索引memory_api.rs的ensure_backing_index索引不存在时text字段按semantic_text显式映射、维度 384stored_at按long映射若首次存储携带vector还会按该向量维度建立dense_vector字段以支持 kNN 召回。第 3 步完全停止节点再用同一数据目录启动# 停止节点CtrlC / 结束进程然后 xerj --insecure --data-dir ./xerj-data第 4 步重启后召回curl -s -XPOST http://127.0.0.1:9430/_memory/agentmem/_recall \ -H content-type: application/json \ -d {query:where is the deploy runbook,k:5}官方捕获的重启后召回结果两条记忆均被召回ID 与停止前完全一致idscored6ed79bf-7174-4a6d-9f1d-987a53045a111.45814992b00ed19-8741-49ca-8318-54e9ba8c7a580.27662587ID 不变、内容可召回说明记忆确实随数据目录持久化——这是记忆路径 数据目录最直接的证据。重启后召回为空按顺序排查四件事如果重启后召回返回空结果按下述顺序逐项检查确认数据目录一致用与之前完全相同的--data-dir或data_dir值启动节点。路径写错比如多写一个斜杠、用了相对路径的不同工作目录等于面对一个空目录。确认命名空间一致召回 URL 中的 namespace 必须与存储时一致因为/_memory/other是另一个索引。.xerj-memory-agentmem与.xerj-memory-other物理上是两个不同索引命名空间按名隔离。确认索引已落盘在数据目录清单中查找.xerj-memory-{namespace}。若目录不存在说明该命名空间从未成功存储过或数据目录不对。确认没有第二个节点占用读取node.lock。XERJ 是单节点、无副本一个数据目录只属于一个正在运行的节点若目录被其它进程持有当前节点根本无法使用它写入可能落到了别的目录。此外要记住 namespace 的合法性约束由memory_api.rs的validate_namespace强制必须以小写字母或数字开头仅允许a-z 0-9 _ - .不允许出现..且不能以-edges结尾该后缀预留给 second brain 的边索引防止把记忆写进另一个脑的边索引。安全边界与注意事项命名空间按名隔离而非按凭据隔离/_memory/*端点仅受进程级 API 密钥中间件保护管理员密钥或POST /_security/api_key铸造的密钥没有逐命名空间授权。任何能访问节点的凭据都能读写、删除所有命名空间。不要把命名空间当作互不信任租户之间的安全边界。节点锁与单节点模型node.lock保证一个数据目录同一时间只属于一个运行节点XERJ 无副本不要试图让两个节点共享一个数据目录。admin.key的位置首次启动时管理员密钥写入data_dir/admin.key导出方式为export XERJ_API_KEY$(cat data_dir/admin.key)——这与记忆路径天然一致都是数据目录。本捕获未展示的内容最后说明官方捕获验证的边界避免读者产生误解该捕获通过配置文件设置数据目录而非--data-dir命令行标志节点以--insecure运行关闭认证便于本机验证本轮验证未连接任何 MCP 客户端页面上的所有记忆调用都是对节点的纯 HTTP 请求。因此记忆随数据目录持久化的结论由节点 REST 面验证MCP 侧只是同一组端点的 stdio 代理XERJ_URL指向正确节点、节点--data-dir指向正确目录两者组合即得到完整可用的 Agent 记忆存储方案。延伸阅读跨会话的 Agent 记忆工作流coding-agent-memory-across-sessions中断的自动索引如何恢复、数据目录如何被复用resume-interrupted-autoindex-run存储与数据目录的完整说明storage赞分享【免费下载链接】xerjXERJ is the new way for AI to search data. Its autoindex capability activates agents to know your data without the token waste of grep and sed. One command indexes code, docs, logs and PDFs for search, RAG, security audits and agent memory, using 40x fewer tokens than grep. Elasticsearch compatible, so existing clients just work.项目地址https://gitcode.com/GitHub_Trending/xe/xerj点击查看免费下载相关推荐Kun 记忆记录基座规范 JSON 与可重建 SQLite 投影的混合记忆存储设计Kun 记忆记录基座规范 JSON 与可重建 SQLite 投影的混合记忆存储设计 导读 本文围绕 Kun 项目中长期记忆Memory的 记录基座mem人工智能AI 应用AI Agent多智能体工具调用Agent 工作流AI 技能MCP Clients桌面应用agents-from-scratch 第07课AI Agent记忆系统实战短期记忆与长期记忆的完整构建指南agents from scratch 第07课AI Agent记忆系统实战短期记忆与长期记忆的完整构建指南 这是 agents from scratchCherry Studio 的 Agent 文件记忆、知识库与 MCP 记忆怎么选Cherry Studio 的 Agent 文件记忆、知识库与 MCP 记忆怎么选 在 Cherry Studio v2 里给 Agent 或助手做记忆时AI应用大模型本地部署桌面应用AI Agent上一篇Fabulously Optimized让你的Minecraft游戏体验焕然一新的性能优化模组包解决方案下一篇Hermes Agent启动脚本深度优化依赖检查与错误处理架构设计创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考