没有向量库、没有守护进程:LifeOS 的本地记忆检索 CLI 凭什么 8 个命令都可验证

发布时间:2026/9/20 8:43:08
没有向量库、没有守护进程:LifeOS 的本地记忆检索 CLI 凭什么 8 个命令都可验证 没有向量库、没有守护进程LifeOS 的本地记忆检索 CLI 凭什么 8 个命令都可验证【免费下载链接】LifeOS⛰️ LifeOS — The universal AI Harness designed to move you from Current to Ideal state in both life and work.项目地址: https://gitcode.com/GitHub_Trending/pe/LifeOS一个不联网、不起常驻进程、不建索引的检索层却坚持给每次调用都返回固定五字段的审计级信封和语义化退出码——这就是 LifeOS 的 Cortex一个构建在 Bun 之上的本地记忆检索 CLI。本文讲它如何只用 Markdown 和 JSONL 文件撑起可信检索根目录的信任边界、逐次授予的写授权以及基准测试与运营健康两条自证链路。先跑两条命令再看契约为什么存在Cortex 的日常用法很朴素。一次检索bun LIFEOS/TOOLS/Cortex.ts search BM25 idf 平滑 --type memory一次写入bun LIFEOS/TOOLS/Cortex.ts remember {type:memory,title:...,content:...} --adapter claude --allow-write两条命令就把 Cortex 的全部设计张力暴露出来前者在你的私人记忆语料里找东西后者会改动这份语料。所以整个契约围绕两个问题展开——怎么保证检索不越界读怎么保证写入没被越权执行。五字段信封、退出码、private标签都只是对这两个问题的回答。它不是 MCP 服务器不是 HTTP 服务没有守护进程不被调用就不启动也不引入 Chroma、CMEM、向量索引或跨设备同步。机制一根目录允许是别名底下一步都不行规范根按四级顺序解析运行时注入的memoryRoot→--memory-root→ 环境变量CORTEX_MEMORY_ROOT→ 默认~/.claude/LIFEOS/MEMORY。默认值通常是一个指向私有用户数据仓库的符号链接pinCanonicalRoot()先用 realpath 解析、确认是目录再把真实路径钉成信任边界——顶层别名合法别名之下的一切符号链接都被拒绝。遍历中每个路径都过一遍 Cortex.ts 里的checkedRealpath()lstat 判定符号链接、校验 realpath 不逃逸钉住的根越界立即抛 IntegrityError以退出码 4 的integrity_error失败。重复记录 ID、格式错误的 JSONL、updated早于created、valid_from valid_until、非法日历日期、socket 等非常规模块同判出局。还有语料级上限在读任何内容之前检查10,000 文件、单文件 8 MiB、总量 128 MiB、50,000 条记录。语料布局是KNOWLEDGE/树加根级*_MEMORY.md按 KNOWLEDGE → MEMORY/KNOWLEDGE → 根本身三级回退provenance 记相对规范根的路径——换根别名不改变记录摘要。检索基于本地 BM25[a-z0-9]分词tf 饱和系数 2.5长度归一化b 0.25 0.75·len/avgdl--type/--source/--session精确匹配--from/--to对created做闭区间--recency是有限非负权重但不替代词法相关性返回的永远只是卡片从不带正文。机制二五字段信封与自我校验的退出码每条命令向 stdout 写恰好一个 JSON顶层字段恰好五个{schema:lifeos-cortex/v1,ok:true,command:status,data:{},error:null}失败时ok:false、data:nullerror带{code,message}多余顶层字段被禁止。发布版 Schema lifeos-cortex-v1.schema.json 对成功/失败两态都声明additionalProperties:false用oneOf互斥。而且这不是文档约定validateCortexEnvelope()会校验字段集合精确等于command/data/error/ok/schema、schema 常量、ok与data/error的一致性每次构造ok(...)/fail(...)都先过这个校验器再返回——信封自校验不依赖调用方。但 JSON 能解析不等于成功退出码与信封必须同时使用进程怎么说信封怎么说触发场景0—成功1internal_error未预期的内部失败3not_found显式 ID 或规范根未找到4invalid_input/integrity_error非法命令、选项、payload、过滤器、边界值或规范完整性问题5write_refused/governance_refused缺少写授权或既有治理拒绝变更机制三写授权像门禁每次重刷卡remember/propose是仅有的两个变更命令双重绑定身份与授权分离——--adapter必须从受识别的claude|hermes|codex|subagent中显式给出且同时带--allow-write只命名适配器不授予任何写权限命令与 payload 判别器绑定——remember只接受memory/idea/knowledgepropose只接受proposal不匹配在调用MemorySystem.add()之前就被拒绝治理拒绝则退出码 5不存在部分成功。进程内适配器工厂 CortexAdapter.ts 把八个方法全部Object.freeze读方法恒只读remember/propose虽暴露在接口上但只有writePermission()在每次调用中确认 options 恰好只含allowWrite一个键且值为布尔true时才追加--allow-write多一个键整体拒绝。写权限逐次授予而不是身份级的。隐私边界 标签的 fail-closed 语义public privatenever persist this/private public——私有 span 用类 HTML 标签CaptureEnvelope.ts 的匹配语义刻意严格不区分大小写、容忍无害空白与属性嵌套 span 整体移除深度计数而非单条正则孤儿闭合标签按控制标记移除、保留两侧公开文本未闭合的开头标签 fail closed——从该位置起抑制剩余部分 源码更进一步任何归一化后像 private 开头标签但格式不良的构造NUL/控制字符、全角 Unicode、丢失的都按不可信开头 fail closed而不是尝试宽松的 HTML 恢复。边界生效的时点覆盖 reviewer 推断、调试/错误序列化、类型化条目路由、规范词法排序、图扩展、get/export/rebuild 之前类型化条目净化是递归的覆盖 content 及 title、name、rationale、session、related slugs 等元数据剥离后变空的必填字段被拒。⚠️ 两个诚实声明该边界只保护进入 Cortex 的受控副本——原生 harness 转录可能在文档所述 30 天保留期内仍含private内容Cortex 不触碰转录字节ingestCaptureEnvelope(input, consumer)只在显式调用点净化后交给 consumer助手存在不等于所有既有 hook 已迁移。它如何自证诚实基准排序器就是生产代码。标签集在LIFEOS/MEMORY/BENCHMARKS/cortex-retrieval-v1.jsonl由操作者在首次基准运行前自己编写不随系统发布每行必须携带lifeos-cortex-benchmark-label-provenance/v1溯源证明期望 ID 来自真实live-cortex-cli执行加人工语料核验。CortexBenchmark.ts 直接导入rankBM25、activeCortexRecords、toCortexCard等生产函数每条查询 25 个样本同一份排序结果在两种披露测量间共享bm25-baseline序列化完整 top-5 记录progressive只序列化 top-5 卡片并抓取第一条完整记录。排序质量被刻意保持相同比较的是披露与注入成本而非两个算法。报告 schema 为lifeos-cortex-benchmark/v1--output只能落在解析后的MEMORY/BENCHMARKS/下、版本化文件名、不覆盖既有报告。当前vector_config为 null没有向量候选单纯降低 token 用量不构成采纳向量索引的证据。健康缺失的证据永远不产生绿灯。运营健康不来自Cortex.ts status那只是语料形状而是bun LIFEOS/TOOLS/MemoryHealthCheck.ts --json。CortexHealth.ts 的评估器规则最新 reviewer 证据优先于历史成功最新一次失败/解析失败/超时/格式错误均为 CRITICAL新运行目录 10 分钟宽限后无终行判超时格式错误的 JSONL 被暴露而非静默回退上一次成功未来时间戳不证明新鲜度阈值覆盖只接受有限正数值非法值产生 critical 的cortex-threshold-invalid。证据面默认阈值越界后果最新 reviewer 成功的新鲜度7 天WARN进行中 reviewer 到终行的宽限10 分钟CRITICAL检索证据新鲜度24 小时WARN待审提案积压大于 10WARN可观测性字节数大于 256 MiBWARN最老可观测性日志年龄大于 30 天WARN已采用索引新鲜度大于 7 天WARN索引状态最微妙随系统发布的 CORTEX_INDEX_POLICY.json 是肯定的no-index-v1标记——✅ 标记在、无清单时健康检查报告健康的no-index-v1不会为证明没建索引而遍历哈希整个语料标记与清单双缺时仅告警index-evidence-missing歧义标记格式错误为 critical。合法已采用清单存在时优先于 no-index 标记索引字节与摘要逐字节验证。八个命令一张表所有命令都接受--memory-root与可选--adapter未知选项、重复选项、缺值一律被拒绝并进入退出码 4而不是被忽略。命令读/写一句话契约status读报告规范根、记录数、mode:local-read-only、indexes:[]——语料形状不是健康search读本地 BM25 精确过滤返回卡片--expand沿relatedID 有界 BFS默认预算 10 节点/2,000 估算 tokentimeline读--anchor取记录 ID 或日期before/after默认各 5、上限 100按created排序get/export读显式 ID、单次 ≤100all-or-nothing任一缺失或已过期整条命令退出码 3export只把记录序列化为lifeos-cortex-export/v1打到 stdout不建文件remember/propose变更双重绑定授权单一 JSON payload 委托MemorySystem.add()rebuild读--from-canonical必填对规范视图与重建视图各算 SHA-256 并报告equivalent——证明可确定性重建不创建任何索引卡片只含id/type/created/updated/provenance/score/est_tokens无content无摘录est_tokens ⌈正文字符数/4⌉列表响应带精确total、从 1 起算的page默认每页 10、上限 100同分按 ID 破平。表面硬上限检索查询2,048 字符且 64 个词元列表页大小100timelinebefore/after各 0–100图扩展100 节点、50,000 估算 tokenget/exportID 数100CLI 写 payload262,144 字节类型化自由文本字段65,536 字符类型化元数据字符串1,024 字符提案目标路径4,096 字符热记忆集合48 条、每条 256 字符related 链接数64规范语料10,000 文件 / 单文件 8 MiB / 总量 128 MiB / 50,000 条记录这些是拒绝上限而非目标值代表性 1,500 条记录的契约检索在测试中限定 1.5 秒内。它刻意不做什么负清单与正清单一样长。已发布的 Cortex 不提供MCP 服务器或网络 API跨设备/云端同步CMEM/Chroma/SQLite FTS/嵌入/向量索引外部遥测常驻 sidecar所有 hook/通道/采集表面的自动采纳对原生 harness 转录的清洗从搜索结果自动注入完整记录。派生索引是可丢弃的不能成为事实源——Markdown 与 JSONL 保持规范地位。每次健康报告记录的也是当前证据不是永久保证。适用前提运行环境需 Bun 与已部署的~/.claude/LIFEOS/MEMORY或CORTEX_MEMORY_ROOT指向的规范根而基准标签、检索日志与索引清单均为操作者本地资产不随开源仓库分发。【免费下载链接】LifeOS⛰️ LifeOS — The universal AI Harness designed to move you from Current to Ideal state in both life and work.项目地址: https://gitcode.com/GitHub_Trending/pe/LifeOS创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考