运行时依赖
安装命令
点击复制技能文档
💾 复杂记忆管理器 面向AI Agent的隐私感知结构化记忆管理。提供三层记忆模型(公开/内部加密/私人不存储),支持XOR+Base64加密、自动清理和泛化规则。 这是一个共享组件技能——其他技能通过它实现跨会话持久化记忆。更新时需保证向后兼容所有依赖它的技能。
三层记忆模型 层级 内容 可见性 加密 存储位置 公开(T1) 技能使用统计、通用工作流模式 任何人可见 无 memory/tier1-public/ 内部(T2) 特定偏好、学习到的行为 仅Agent可见 XOR+Base64 memory/tier2-internal/ 私人(T3) API密钥、凭据、个人身份信息 本技能不存储 不适用 环境变量/密钥管理器
T1:公开记忆 存储位置:memory/tier1-public/ 或每日笔记 允许内容: 聚合技能使用统计(无个人标识) 通用工作流模式 常见用户请求分类 非识别的行为数据 格式: { "skill_stats": { "skill-a": { "calls": 47, "success_rate": 0.96, "last_used": "2026-05-19" }, "skill-b": { "calls": 23, "success_rate": 0.91, "last_used": "2026-05-18" } }, "patterns_observed": [ { "trigger": "早晨请求", "skills_used": ["morning-news-daily"], "count": 30 } ] }
T2:内部加密记忆 使用XOR+Base64加密。密钥由技能名+日期派生,无需存储密钥即可重建。 加密方法: import hashlib, base64 def _derive_key(skill_name, year_month): raw = skill_name + year_month return hashlib.sha256(raw.encode()).hexdigest()[:8]
def encrypt(text, skill_name, year_month): key = _derive_key(skill_name, year_month) result = bytes([ord(c) ^ ord(key[i % len(key)]) for i, c in enumerate(text)]) return base64.b64encode(result).decode()
def decrypt(encoded, skill_name, year_month): key = _derive_key(skill_name, year_month) raw = base64.b64decode(encoded) return ''.join(chr(b ^ ord(key[i % len(key)])) for i, b in enumerate(raw))
记忆条目格式: --- tier: internal source_skill: key_hint: - created: expires: # 30天后过期 ---
加密条目
解密说明
密钥 = sha256("-")[:8],然后XOR + base64解码。T3:私人(不存储) 规则(强制执行): API密钥/令牌 → 存储在环境变量中 密码 → 使用密钥管理器(1Password、Bitwarden、系统密钥链) 电子邮件地址、电话号码 → 永远不存储在技能记忆中 家庭/工作地址、政府ID → 永远不存储在技能记忆中 金融账户号码 → 永远不存储在技能记忆中
清理协议 每7天运行一次,或由任何依赖技能触发: 列出memory/tier1-public/、memory/tier2-internal/中的所有文件 找到创建时间超过30天的条目 → 移动到memory/archive// 扫描Tier 2条目中的意外个人身份信息 → 立即删除如果找到 合并重复条目,删除过时的模式 压缩:合并同一source_skill的条目到单个文件中 记录清理操作:[YYYY-MM-DD] 记忆清理:X存档,Y删除,Z合并
隐私审计检查清单 记忆中没有真实姓名、用户名或句柄 没有API密钥或令牌在任何可见文件中 没有包含个人主目录的文件系统路径 没有固定个人时间表(使用相对时间: "早晨"而不是"6点") 没有地理位置信息超出城市级别 所有Tier 2条目都有过期日期 Tier 3数据永远不会触及技能记忆
跨技能使用 其他技能通过YAML前置内容中的requires声明依赖: metadata: openclaw: requires: skills: - complex-memory-manager 当多个技能共享记忆时,使用source技能名称作为文件名前缀: memory/tier1-public/skill-a_stats.json memory/tier2-internal/skill-a_preferences.md