)
MemPalace Status 技能深入解析一条命令生成记忆宫殿状态快照Codex CLI 插件【免费下载链接】mempalaceThe best-benchmarked open-source AI memory system. And its free.项目地址: https://gitcode.com/GitHub_Trending/me/mempalace本文以 Codex CLI 插件中的status技能为核心完整还原从 SKILL.md 入口指令、mempalace instructions status指令下发机制到 MCP 工具与mempalace statusCLI 双路径执行的完整状态检查流程并结合仓库源码剖析 wing/room/drawer 计数、知识图谱统计与宫殿健康判定的底层实现。读完本文你可以直接在自己的 Codex CLI 环境中使用/status技能并理解每一行状态输出的数据来源与失败回退逻辑。Status 技能SKILL.md 定义了什么status技能是 MemPalace Codex CLI 插件的五个技能之一。插件的 README 中列出了完整的技能清单技能说明/help显示可用命令与使用提示/init初始化一个新的记忆宫殿/search跨全部已挖掘记忆进行语义搜索/mine挖掘项目或对话数据进入宫殿/status显示宫殿状态、房间计数与健康状况技能定义文件 SKILL.md 全文很短其 frontmatter 声明了技能的元信息--- name: status description: Show MemPalace status — room counts, storage usage, and palace health. allowed-tools: Bash, Read ---三个字段各司其职name是技能在插件内的唯一标识description说明该技能的职责——展示房间计数、存储占用与宫殿健康allowed-tools: Bash, Read限定了执行该技能时 Agent 可用的工具面即只需要执行一条 shell 命令并读取其输出不需要写文件或调用其他工具。技能正文只有一条核心指令mempalace instructions status要求 Agent 执行该命令并“按返回的指令逐步操作”。这行指令是整个技能设计的枢纽——它把技能正文与真正的操作流程解耦SKILL.md 不内嵌任何具体步骤而是运行时从已安装的 MemPalace 包中拉取最新的状态检查规程。指令下发机制mempalace instructions status的源码实现mempalace instructions name命令的实现在 instructions_cli.py核心逻辑只有几步INSTRUCTIONS_DIR Path(__file__).parent / instructions AVAILABLE [init, search, mine, help, status] def run_instructions(name: str): Read and print the instruction .md file for the given name. if name not in AVAILABLE: print(fUnknown instructions: {name}, filesys.stderr) print(fAvailable: {, .join(sorted(AVAILABLE))}, filesys.stderr) sys.exit(1) md_path INSTRUCTIONS_DIR / f{name}.md if not md_path.is_file(): print(fInstructions file not found: {md_path}, filesys.stderr) sys.exit(1) print(md_path.read_text(encodingutf-8))从源码结构看该机制有三点值得注意白名单校验AVAILABLE固定为[init, search, mine, help, status]五个值。传入未知名称时打印错误和可用列表并以退出码 1 终止Agent 端因此能明确感知命令拼写问题。指令即 Markdown 文件每个指令都是包内instructions/目录下与命令同名的.md文件命令只是原样打印文件内容。status技能对应的就是 instructions/status.md。版本跟随安装包更新因为指令文件随 Python 包分发技能永远执行的是当前安装版本对应的规程而不是 SKILL.md 里写死的旧流程。这也意味着 SKILL.md 保持极简是刻意为之——流程变更只需更新包内的 md 文件。该行为由 tests/test_instructions_cli.py 覆盖tests/test_cli.py 中也通过 mockrun_instructions验证了 CLI 与指令模块的接线关系。四步状态流程instructions/status.md 的完整规程status.md 定义了 Agent 拿到指令后的四个执行步骤。以下完整继承该文档的每一步。Step 1: 收集宫殿状态MCP 优先CLI 兜底规程要求先检查 MCP 工具是否可用在可用工具列表中查找mempalace_statusMCP 可用直接调用mempalace_status工具获取宫殿状态MCP 不可用回退执行 CLI 命令mempalace status。这一双路径设计的意义在于MCP 工具返回结构化数据、可与图谱统计串联CLI 则是任何安装环境下都存在的底线能力两者输出的是同一份宫殿计数事实。Step 2: 展示 Wing/Room/Drawer 三级计数规程要求清晰呈现宫殿结构计数wing翼数量room房间数量drawer抽屉数量存储的总记忆数并明确要求“输出保持简洁——使用简短摘要格式而不是冗长的表格”。这与 miner.py 中_print_status的渲染格式一致先打印总计再按 wing 分组、每个 wing 内按 drawer 数降序列出各 room 的计数直方图。Step 3: 知识图谱统计仅 MCP 路径当 MCP 工具可用时规程要求额外调用两个工具并与宫殿计数合并为统一摘要mempalace_kg_stats—— 知识图谱概览三元组数量、实体数量、关系类型mempalace_graph_stats—— 连通性信息连通分量数、每个实体的平均连接数。这两个工具在 MCP 服务端均有对应 handlermempalace_graph_stats映射到 mcp_server.py 的tool_graph_statsmempalace_kg_stats映射到 tool_kg_stats。其中tool_graph_stats优先走_sqlite_graph_stats快速路径——单次分组 sqlite 读取即可算出连通性统计仅在快速路径不可用时才回退到客户端重建palace_graph.graph_stats从源码结构看这与 CLI status 的 sqlite 优先策略是同一套性能思路。Step 4: 基于当前状态给出下一步建议规程定义了三种状态各对应一条建议话术状态判定建议动作空宫殿零记忆“Try /mempalace:mine to add data from files, URLs, or text.”有数据但无知识图谱记忆存在但 KG 统计为零三元组“Consider adding knowledge graph triples for richer queries.”健康宫殿记忆与 KG 数据齐全“Use /mempalace:search to query your memories.”这一步把 status 从“只读快照”升级为“可行动诊断”Agent 不只是汇报数字还要根据数字给出唯一的、与状态匹配的行动指引。输出风格与失败降级规程对输出风格有两条约束以及一条降级约定简洁而信息充分——目标是“一眼扫完”不是生成报告用短标签和数字不用散文段落任何一步失败或某个工具不可用时简要注明并继续执行可用部分。最后一条尤其关键它要求 status 检查是部分失败容忍的例如 MCP 可用但 KG 工具报错时仍应输出宫殿计数并注明缺失部分。CLI 底层实现mempalace status如何计数MCP 不可用时的兜底命令mempalace status在 cli.py 中注册除--palace全局路径参数外还暴露一个--backend选项默认按“配置文件 → 环境变量 → 探测 → chroma”的顺序取后端。入口函数cmd_status非常薄def cmd_status(args): # mempalace/cli.py#L1434 from .miner import status palace_path os.path.expanduser(args.palace) if args.palace else MempalaceConfig().palace_path status(palace_pathpalace_path)真正的计数逻辑在 miner.py 的 status()源码 docstring 和实现揭示了三个工程要点1. sqlite 直读优先避免冷加载 HNSW 向量索引。主路径通过_sqlite_wing_room_counts(palace_path, mempalace_drawers)直接从chroma.sqlite3按 wing/room 聚合计数。源码注释说明动机一次例行 status 检查绝不应触发 HNSW 向量索引的冷加载——在大宫殿上那是一次调用几十秒 CPU 的开销。2. 回退路径带 HNSW 发散预检。当 sqlite 直读不可用数据库缺失、集合未引导、意外 schema时函数回退到 ChromaDB 客户端路径。但在调用col.count()之前会先执行hnsw_capacity_status预检若索引处于 diverged 状态直接打印HNSW index is diverged: message Run mempalace repair --mode from-sqlite --archive-existing first.源码注释解释了为何必须预检——发散 segment 上的count()可能触发段错误级别的故障这类问题无法被普通的 try/except 捕获。这也正是 SKILL.md 描述中“palace health”宫殿健康一词的落点status 命令顺带承担了索引健康探测的哨兵角色。3. 大宫殿分页计数。回退路径中room 级聚合以 5000 条为一批分页拉取 metadata源码注释指出这是为避免大宫殿上 SQLite “too many SQL variables” 错误。计数完成后统一交给_print_status渲染 MemPalace Status -- N drawers WING: wing 名 ROOM: room 名 N drawersroom 在 wing 内按 drawer 数降序排列即最“满”的房间排在最前与规程要求的“简短摘要格式”吻合。实用前提与验证建议适用前提Python 3.9且通过uv tool install mempalace推荐或pip install mempalace安装了 MemPalace 包使mempalace与mempalace-mcp命令在 PATH 上将.codex-plugin目录复制或软链到项目根目录cp -r .codex-plugin /path/to/your/project/.codex-plugin用codex --plugins确认插件被识别再用codex /init初始化宫殿——完整安装步骤见 Codex 插件 README。验证方式手动运行mempalace instructions status应原样打印 instructions/status.md 的全文可用它核对当前安装版本的规程内容手动运行mempalace status应看到上文所述的 wing/room 直方图输出若出现 “HNSW index is diverged” 提示则说明索引健康检查命中了异常分支应按提示先执行修复命令在 Codex CLI 中触发/status技能时Agent 应先探测mempalace_status工具是否存在再按四步规程依次执行并输出统一摘要。小结status技能用一份 14 行的 SKILL.md 定义了一个完整的“宫殿体检”流程技能层只做一件事——运行mempalace instructions status拉取权威规程规程层定义 MCP/CLI 双路径、wing/room/drawer 计数、KG 与图谱连通性统计、状态驱动的行动建议四步流程实现层则由 miner.py 的 sqlite 快速计数、HNSW 发散预检与 MCP 服务端的mempalace_status/mempalace_kg_stats/mempalace_graph_stats工具共同支撑。这种“极简技能入口 包内指令文件 双执行路径”的分层设计既保证了流程随版本演进也让任何环境下都能至少拿到 CLI 兜底的状态快照。【免费下载链接】mempalaceThe best-benchmarked open-source AI memory system. And its free.项目地址: https://gitcode.com/GitHub_Trending/me/mempalace创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考