flowchart LR
U["用户与 Agent 交互 消息 · 纠正 · 工具结果"]
E["统一事件与记忆提取 AgentEvent · 质量 · 来源"]
M["本地记忆治理 版本 · 冲突 · 敏感保护"]
R["混合检索与分阶段上下文 FTS · 向量 · 图谱 · Kylin SDK"]
A["Agent 行为改善 规划 · 工具选择 · 回答"]
F["精准遗忘 预览 · 确认 · 清理 · 验证"]
O["openKylin 系统能力 systemd · cgroup · auditd · BPF LSM"]
U --> E --> M --> R --> A
A -. "新交互继续学习" .-> E
F --> M
O -. "资源、安全与审计" .-> M
classDef interaction fill:#EAF4FF,stroke:#1677C8,color:#0B3558,stroke-width:1.5px;
classDef extraction fill:#EEF2FF,stroke:#6366F1,color:#312E81,stroke-width:1.5px;
classDef memory fill:#E8F7F1,stroke:#138A72,color:#0B4F43,stroke-width:1.5px;
classDef retrieval fill:#FFF6E5,stroke:#D97706,color:#7C3F00,stroke-width:1.5px;
classDef outcome fill:#F3ECFF,stroke:#7C3AED,color:#4C1D95,stroke-width:1.5px;
classDef forgetting fill:#FFF0F1,stroke:#D14343,color:#7F1D1D,stroke-width:1.5px;
classDef os fill:#F3F4F6,stroke:#64748B,color:#263442,stroke-width:1.5px;
class U interaction;
class E extraction;
class M memory;
class R retrieval;
class A outcome;
class F forgetting;
class O os;
flowchart TB
subgraph S1["交互与系统事件"]
U["用户消息与纠正"]
A["Agent 消息与工具轨迹"]
O["授权的 OS / auditd 事件"]
end
subgraph S2["记忆形成"]
E["统一 AgentEvent 协议"]
Q["质量校验与来源治理"]
P["敏感阻断与脱敏"]
X["偏好 / 知识 / 程序性经验提取"]
V["版本、时间与冲突处理"]
end
subgraph S3["本地存储与检索"]
M["mmap 追加式段文件"]
D["SQLite 元数据与 FTS"]
G["实体关系图谱"]
R["向量缓存与可选 Kylin SDK"]
H["多信号混合排序"]
end
subgraph S4["Agent 使用与系统治理"]
C["规划 / 工具 / 回答上下文"]
G2["执行前行动契约 allow · redirect · confirm · deny"]
L["会话记忆巩固 证据晋级 · 版本计划"]
D2["强化与健康度衰减 命中 · 新鲜度 · 可逆降级"]
F["精准遗忘预览与执行"]
Z["审计链、systemd、cgroup、BPF LSM"]
UI["UKUI / Peony / 托盘 / Web / CLI"]
end
U --> E
A --> E
O --> E
E --> Q --> P
P -->|"允许写入"| X --> V
P -->|"高风险"| Z
V --> M
V --> D
V --> G
V --> R
M --> H
D --> H
G --> H
R --> H
H --> C --> L --> D2 --> G2 --> A
UI --> F
F --> M
F --> D
F --> G
F --> R
F --> Z
Z --> UI
classDef event fill:#EAF4FF,stroke:#1677C8,color:#0B3558,stroke-width:1.4px;
classDef form fill:#EEF2FF,stroke:#6366F1,color:#312E81,stroke-width:1.4px;
classDef store fill:#E8F7F1,stroke:#138A72,color:#0B4F43,stroke-width:1.4px;
classDef use fill:#FFF6E5,stroke:#D97706,color:#7C3F00,stroke-width:1.4px;
classDef govern fill:#FFF0F1,stroke:#D14343,color:#7F1D1D,stroke-width:1.4px;
class U,A,O event;
class E,Q,P,X,V form;
class M,D,G,R,H store;
class C,UI use;
class F,Z govern;
MemGuardOS
面向 openKylin 与 Linux OS Agent 的本地记忆提取、上下文增强与精准遗忘系统
让 Agent 从用户纠正、工具调用和执行结果中持续学习,同时让每一条记忆可查看、可追溯、可控制、可遗忘。
快速体验 · 核心能力 · 真实-agent-接入 · 项目结构 · 系统架构 · 验证结果 · 完整文档 · 演示视频
🎬 演示视频
4 分 56 秒核心流程演示:openKylin 桌面入口、工具结果与偏好记忆提取、新会话复用、版本更新、精准遗忘、敏感信息保护及 Web 可追溯证据链。
MemGuardOS 是部署在本机的 OS Agent 记忆层。它接收用户与 Agent 的交互事件,提取长期偏好、知识和工具经验,在下一次任务中按需提供分阶段上下文,并为每次注入生成包含记忆版本和作用域的可复核收据;当用户要求遗忘时,系统先展示候选和影响范围,再清理受管存储、检索索引、图谱、缓存和段文件中的目标内容。
系统默认离线运行,不要求 GPU,也不会把原始记忆上传到云端。openKylin 用户可以从 UKUI 系统设置、Peony 文件右键菜单、系统托盘和本地工作台使用;Agent 开发者可以通过 Python API、标准事件 JSON、JSONL 或 Unix socket 接入。
新会话自动采用工具与回答偏好,记录实际行为证明和上下文版本收据
自然语言预览、编号确认、多检索表面清理与残留复核
10k 记忆负载 P95 10.105 ms,支持延迟预算与透明回退
UKUI、Peony、托盘、系统服务与五包安装链路
🗂️ 项目结构
仓库以可安装、可运行、可评测和可复现为整理原则,源代码、原生组件、安装资产、测试、正式文档与验证证据各自归入明确目录;发行版通过版本标签和 SHA-256 清单提供可追溯交付。
根目录另外保留
LICENSE、.gitignore、.gitattributes、.github/、.devcontainer/、Dockerfile和.dockerignore等工程配置,以便仓库平台识别许可证、自动执行 CI,并正确处理忽略规则、换行和容器构建。构建容器使用docker build -t memguardos .,容器内部在/workspace/src运行源码及根目录测试。🧭 系统架构总览
MemGuardOS 位于 Agent 与 openKylin 之间:向上提供记忆与上下文,向下使用本地存储、审计和系统安全能力。核心链路通过统一 AgentEvent 协议兼容不同交互界面,OpenHands 提供已经完成真实验证的第一方适配实现;记忆写入前先经过准入层,结合来源、用户意图、内容质量、抽取置信度、敏感等级和项目作用域决定进入工作层、会话层、长期层、待复核区或直接阻断,并说明还需要哪些证据。上下文构建同时返回所选记忆的当前版本映射和稳定指纹,执行前可以复核上下文是否因更新或遗忘而失效。工具真正执行前,还可以通过行动计划核对当前记忆、作用域和拟执行参数,得到允许、改用建议、确认或拒绝的可审计闸门;工具执行完成后,Agent 适配器再回写退出状态和遵循结果,系统据此区分成功强化、偏离、失败和拦截,形成可去重、可遗忘的行动证据链。
flowchart LR U["用户与 Agent 交互消息 · 纠正 · 工具结果"] E["统一事件与记忆提取
AgentEvent · 质量 · 来源"] M["本地记忆治理
版本 · 冲突 · 敏感保护"] R["混合检索与分阶段上下文
FTS · 向量 · 图谱 · Kylin SDK"] A["Agent 行为改善
规划 · 工具选择 · 回答"] F["精准遗忘
预览 · 确认 · 清理 · 验证"] O["openKylin 系统能力
systemd · cgroup · auditd · BPF LSM"] U --> E --> M --> R --> A A -. "新交互继续学习" .-> E F --> M O -. "资源、安全与审计" .-> M classDef interaction fill:#EAF4FF,stroke:#1677C8,color:#0B3558,stroke-width:1.5px; classDef extraction fill:#EEF2FF,stroke:#6366F1,color:#312E81,stroke-width:1.5px; classDef memory fill:#E8F7F1,stroke:#138A72,color:#0B4F43,stroke-width:1.5px; classDef retrieval fill:#FFF6E5,stroke:#D97706,color:#7C3F00,stroke-width:1.5px; classDef outcome fill:#F3ECFF,stroke:#7C3AED,color:#4C1D95,stroke-width:1.5px; classDef forgetting fill:#FFF0F1,stroke:#D14343,color:#7F1D1D,stroke-width:1.5px; classDef os fill:#F3F4F6,stroke:#64748B,color:#263442,stroke-width:1.5px; class U interaction; class E extraction; class M memory; class R retrieval; class A outcome; class F forgetting; class O os;
技术亮点
交互记忆提取
统一 AgentEvent 承载用户纠正、工具调用与执行结果,形成偏好、知识和程序性经验
多信号混合检索
融合 FTS、向量、图谱、时间、来源和工具行为信号,并受端侧延迟预算约束
三阶段上下文与行动闭环
分阶段检索、执行前判定,执行后记录是否遵循及实际结果
可验证精准遗忘
自然语言生成 ErasurePlan,先看候选和影响,再清理正文、索引、图谱与缓存
本地敏感治理
凭据写入前阻断,个人信息脱敏,来源、版本、使用和遗忘过程均可审计
openKylin 原生交付
UKUI、Peony、托盘、systemd、cgroup、Polkit 与五个 Debian 包协同工作
更完整的模块关系、存储结构和精准遗忘数据流见后文技术实现与关键设计。
🎯 它解决什么问题
OS Agent 会反复处理命令、文件、工具和系统状态。只有聊天记录时,Agent 很难稳定区分长期偏好、一次性指令、工具失败经验和敏感数据;传统向量库虽然能找回文本,却通常没有完整的来源追踪、冲突治理和遗忘验证。
MemGuardOS 将“记住、用好、忘干净”串成一个可验证的本地闭环:
🔄 一次真实使用会发生什么
rg,回答先给结论。”rg,并按偏好组织答复;系统同时记录采用的记忆、实际命令和偏好遵循结果。✨ 核心能力
ErasurePlan、dry-run、确认、墓碑、索引清理与压缩👥 使用入口
memguard-agent-showcasememctl真实自然语言任务由已经接入的 Agent 执行,Web 工作台专注于本机记忆查看、检索、遗忘、安全治理与系统维护。
🚀 快速体验
① 三分钟体验记忆闭环
Python 3.10 及以上环境可以直接从源码安装:
Windows PowerShell 使用
.venv\Scripts\Activate.ps1激活环境。开发和测试环境使用python -m pip install -e ".[dev,security]"。运行可读的确定性闭环演示:
memguard demo用本地事件回放稳定展示写入、检索、上下文和遗忘预览,不调用真实模型,也不会冒充真实 Agent 结果。随后可以逐步操作真实数据:forget默认只预览候选;只有带--yes才会执行,--compact会继续整理追加式段文件。 临时记忆属于具体会话:memguard shell会自动创建并在正常退出时清理;单条命令可用memguard remember "本次会话临时记录构建步骤" --session-id demo-01,之后用同一--session-id搜索,最后执行memguard end-session --session-id demo-01 --yes。长期记忆不随会话结束删除。异常退出留下的临时会话可用
memctl stale-sessions --older-than-hours 72预览,再按会话编号逐项确认清理。真实 Agent 的工具结果先进入会话记忆;只有完整任务通过校验、同一工具在至少两个独立会话成功后,系统才形成不含原始命令的项目级工具经验,且不会把执行统计冒充用户偏好。② 在 openKylin 安装完整桌面版
需要复现当前
main的最新代码时,建议在 openKylin 构建机准备qmake、pkg-config、libpeony-dev、libukcc-dev和 Qt5 开发包,然后直接从源码构建并安装五包:install_deb_package_set.sh会重新构建五包,通过生成清单确认包名和路径,使用 APT 安装,并复核 systemd、CLI、Polkit、托盘入口和审计链。若已经取得构建完成的五个.deb文件,也可以在同一目录直接执行:安装完成后,
memguardd会由 systemd 自动启动并设置为开机运行。日常使用不需要进入源码目录,也不需要手动启动服务;memguard、memctl和桌面入口可从任意工作目录使用。如果只需要核心服务、源码和 systemd 单元,不需要 UKUI、Peony、托盘与 Debian 分包,可以执行轻量源码部署:
轻量脚本适合快速体验核心闭环;用于评审复现或其他 openKylin 机器部署时,推荐采用上面的
install_deb_package_set.sh完成桌面五包安装。安装桌面包后,可以从开始菜单打开“MemGuardOS 记忆安全”,或在 UKUI 系统设置的安全分类中进入记忆安全中心。完整环境依赖、安装验证、升级和卸载步骤见 安装部署。
③ 打开本地工作台
浏览器访问
http://127.0.0.1:8765。工作台默认只监听本机地址,不应直接暴露到公网。🤖 真实 Agent 接入
MemGuardOS 不要求 Agent 使用特定界面。接入方只需发送统一事件,并在规划、工具选择或回答生成前请求上下文。当前完成端到端实机验证的第一方适配器是 OpenHands;其他 Agent 可以按相同协议接入,但需要实现并验证各自的事件映射层。
使用 OpenHands 运行自然语言任务
OpenHands 是运行自然语言 Agent 的可选适配器,不影响本地记忆管理、文件扫描、检索、遗忘和审计。五包安装后,首次使用真实 Agent 时执行一次:
配置模型后,可以在任意目录指定 Agent 的工作区,无需手动进入 MemGuardOS 源码目录:
通过上述入口启动 OpenHands 时,MemGuardOS 会自动挂载事件采集、上下文适配和执行前行动检查;其他 Agent 可按照统一 AgentEvent 协议接入,并在工具调用前使用同一行动契约。源码开发环境也可直接使用
memguard --workspace "$(pwd)" --model "<模型名称>" shell。交互工作台内可以完成一轮清晰的记忆效果对照:
/run用于运行真实 Agent;输入/run 忘掉……或直接输入“忘掉……”时,工作台会识别记忆治理意图并进入遗忘预览。只有一条候选时输入yes或“确认”即可;出现多条候选时,先输入1、1,3等编号,或输入“全部”,再确认执行。输入no或“取消”则停止。真实任务会显示记忆开关、采用记忆数量、工具调用、最终答复、偏好作用验证、上下文版本收据和本次记忆变化;运行前配置检查会给出 Agent、模型与网络状态及对应处理指引,展示结果均来自实际执行记录。自然语言入口采用“确定性安全规则 + 结构化语义提取 + 拒绝猜测”的分层策略。查看、检索、运行、保存和遗忘等高频意图支持常见礼貌表达;密码、口令、验证码和密钥在任何语义增强之前由本机规则阻断;“本次会话”“当前任务”“长期保存”等表述直接进入对应保留层级。系统只在意图明确时改变记忆状态,疑问句不会形成偏好,无法可靠判断是任务还是记忆的输入会要求用户选择
/run或“记住:”,避免用错误的自动化换取表面上的“什么都能听懂”。也可以用一条命令执行同任务双臂对照:
通用接入方式
标准事件包含会话、序号、角色、事件类型、工具名称、工具参数、执行结果和来源。接入协议、事件示例、OpenHands 配置和安全注意事项见 Agent 接入 与 接口参考。
🧩 技术实现与关键设计
flowchart TB subgraph S1["交互与系统事件"] U["用户消息与纠正"] A["Agent 消息与工具轨迹"] O["授权的 OS / auditd 事件"] end subgraph S2["记忆形成"] E["统一 AgentEvent 协议"] Q["质量校验与来源治理"] P["敏感阻断与脱敏"] X["偏好 / 知识 / 程序性经验提取"] V["版本、时间与冲突处理"] end subgraph S3["本地存储与检索"] M["mmap 追加式段文件"] D["SQLite 元数据与 FTS"] G["实体关系图谱"] R["向量缓存与可选 Kylin SDK"] H["多信号混合排序"] end subgraph S4["Agent 使用与系统治理"] C["规划 / 工具 / 回答上下文"] G2["执行前行动契约allow · redirect · confirm · deny"] L["会话记忆巩固
证据晋级 · 版本计划"] D2["强化与健康度衰减
命中 · 新鲜度 · 可逆降级"] F["精准遗忘预览与执行"] Z["审计链、systemd、cgroup、BPF LSM"] UI["UKUI / Peony / 托盘 / Web / CLI"] end U --> E A --> E O --> E E --> Q --> P P -->|"允许写入"| X --> V P -->|"高风险"| Z V --> M V --> D V --> G V --> R M --> H D --> H G --> H R --> H H --> C --> L --> D2 --> G2 --> A UI --> F F --> M F --> D F --> G F --> R F --> Z Z --> UI classDef event fill:#EAF4FF,stroke:#1677C8,color:#0B3558,stroke-width:1.4px; classDef form fill:#EEF2FF,stroke:#6366F1,color:#312E81,stroke-width:1.4px; classDef store fill:#E8F7F1,stroke:#138A72,color:#0B4F43,stroke-width:1.4px; classDef use fill:#FFF6E5,stroke:#D97706,color:#7C3F00,stroke-width:1.4px; classDef govern fill:#FFF0F1,stroke:#D14343,color:#7F1D1D,stroke-width:1.4px; class U,A,O event; class E,Q,P,X,V form; class M,D,G,R,H store; class C,UI use; class F,Z govern;
关键设计
ErasurePlan,确认后清理所有受管检索表面并执行残留验证。详细模块边界、数据结构与时序见 系统架构 和 开发者指南。
🐧 openKylin 原生能力
正式交付拆分为五个职责清晰的 Debian 包:
memguardos-corememguardos-ukuimemguardos-agent-bridgememguardos-docmemguardos桌面包可以单独卸载,不影响核心服务;默认卸载保留用户数据,清理数据需要单独确认。
📊 验证结果
以下数字均可追溯到仓库中的原始结果文件。不同数据集、确定性实验和真实模型运行分别列示,使检索质量、Agent 行为、端侧性能和系统交付可以逐项复核。
1751 passed, 3 skippeddata/benchmarks/action_contract.jsonl评测体系从检索到真实行为形成完整链路:Recall@5、跨语言召回和遗忘候选精度衡量记忆处理质量,工具调用、任务完成、偏好遵循与敏感泄漏率衡量 Agent 实际效果,P95/P99、资源占用和安装验证衡量端侧运行与系统交付质量。原始结果、执行命令、运行环境和对应 Git 修订均可复核。
可复现验证
量化评测、openKylin 原生采集、发布包审计和每个指标的含义见 测试与评测。
📚 完整文档
源码构建、安装、评测和测试命令均在
src/中执行。完整测试用例位于根目录tests/,执行python -m pytest ../tests -q;验证材料见 测试导航,复现演示见 演示导航。🔐 安全治理
MemGuardOS 对受管事件、元数据、FTS、图谱、向量缓存、结果缓存和追加式段文件执行一致性遗忘。每次操作经过候选预览、明确确认、分层清理和残留复核,审计链记录操作范围、执行结果与验证状态。
系统采用组合式防护:应用层负责凭据与个人信息识别、脱敏和阻断,Polkit 约束高权限动作,BPF LSM 提供敏感路径强制策略,systemd 与 cgroup 管理服务生命周期和资源预算。离线混合检索作为稳定基础路径,Kylin embedding SDK 可在延迟预算内提供端侧语义增强与重排。
完整威胁模型、权限设计、审计机制和精准遗忘流程见安全治理。报告安全问题时请联系项目维护者,并通过私密渠道提供必要的复现信息。
🤝 贡献与开源
项目采用 MIT License。开发环境、代码边界、测试规范和扩展方式统一收录在开发者指南中;新增功能应同时提供测试、用户可理解的错误反馈和必要文档。
MemGuardOS 起源于第三届中国研究生操作系统开源创新大赛“面向 openKylin 的智能体记忆提取与精准遗忘机制”赛题,现按可独立安装、可接入和可审计的开源项目维护。赛题要求与实现映射见 赛题符合性。