
omo-senpi Dream 子代理深度解析跨会话记忆整合、技能审计与人际知识维护【免费下载链接】oh-my-openagentOmO: Just type mass ulw keyword with your prompt. Now you are the master of graph engineering.项目地址: https://gitcode.com/gh_mirrors/oh/oh-my-openagent导读本文围绕 dream-persona.md 这份运行在后台的 Dream 子代理系统提示词展开完整解读 omo-senpi 记忆体系中梦境运行dream run的职责边界、输入契约、六个执行阶段与提交规范。读完本文你将掌握 Dream 与 reflection 的定位差异、$MEMORY_DIR三层记忆文件系统的组织规则、基于用量账本做分层升降级tier rebalance的证据驱动方法、技能审计的六种操作选择以及 People 阶段演绎/归纳绝不混淆的铁律并能结合dream.ts、dream-trigger.ts、memory.ts等源码理解其触发门控与配置默认值。一、Dream 是什么跨会话的记忆整理员在 omo-senpi 的记忆架构中主代理primary agent每次对话产生的大量痕迹分散在多个会话转录transcript里。reflection子代理负责对单段对话进行复盘并沉淀可持久化的经验而 Dream 子代理则是更宏观的后台角色一次性横跨整个记忆文件系统与多个会话执行三件事——整合主代理的记忆、审计其技能skills是否仍被使用、维护其关于人的知识people knowledge。其定位可以从 dream-persona.md 的自我声明中提炼出三个关键约束不是主代理Dream 只审查已经发生的对话绝不回应用户消息。transcript 中system消息用于理解身份assistant消息来自主代理user消息来自用户但所有记忆修改都必须通过$MEMORY_DIR下的文件流转而非直接编辑系统提示。自主运行所有指令一次性提供完毕运行过程中不能提问只能基于上下文做合理假设并在最终报告中记录这些假设。以整理而非积累为天职一次只增不改的 dream 是失败的。shrinking、merging、placing缩小、合并、归位才是核心动作。与 reflection-persona.md 对比reflection 聚焦从最近对话提取可复用经验并写入记忆/技能Dream 则站在全库视角做去重、分层、归档与审计两者在plugin/extensions/目录下并列部署共同构成记忆的自维护闭环。二、运行环境与输入契约Dream 运行时的记忆仓库根目录是$MEMORY_DIR待审查的转录载荷路径为$TRANSCRIPT_PATH。所有文件系统写入必须落在记忆仓库内git 命令也只能在该目录内执行不得检查或修改.git内部结构也不得改动 git config只能使用常规的git status、git diff、git add、git commit。除基础路径外Dream 运行还会获得七个额外输入详见 dream-persona.md输入内容语义$SYSTEM_TOKENS_PATHsystem/下已提交 markdown 的 token 估算 JSON{ totalTokens: n, files: [{ path, bytes, tokens }] }文件按 token 估算降序排列供 Consolidate 阶段的系统 token 预算契约使用$SYSTEM_TOKEN_BUDGET配置的compile_warn_tokens预算触发强制降载的阈值$SYSTEM_TOKEN_TARGET软压力目标floor(0.8 * $SYSTEM_TOKEN_BUDGET)超额时必须压到的水位$SKILLS_USAGE_PATH技能用量账本以技能 idskills/下的目录名为键值为{ count, lastUsedAt }空对象表示尚无记录账本中缺失的技能自统计起从未被读取技能审计的证据源$MEMORY_USAGE_PATH记忆用量账本以仓库相对文件路径为键值为{ count, lastUsedAt }system/路径被排除始终在上下文中投影分层升降级tier rebalance的主要证据$DREAM_STATE_PATH两次 dream 运行之间传递的状态首次运行为{}跨运行状态持久化$DREAM_POLICY_PATHPeople 策略{ version: 1, people: { enabled, max_entries, max_entry_chars } }门控 People 阶段并约束每条写入的上限这七项输入是证据驱动原则的基石使用记录usage ledger只用于报告候选矛盾证据才用于直接行动。另外Dream 必须采用有界读取先用wc -c确认文件大小小文件整读大文件用head、tail、grep、sed -n定向读取临时文件放在$MEMORY_DIR/.tmp/下且提交前必须移除。三、记忆文件系统三层结构$MEMORY_DIR下的记忆文件系统承载主代理的上下文修改提交到记忆 git 仓库后才会反映到主代理上下文见 dream-persona.mdPromptssystem/始终在上下文中。只放身份、偏好、约定与每轮都需要的活跃项目上下文保持精简冗长内容应下沉到外部记忆。其中两个文件有特殊约定system/boundaries.md用户关于代理不得做什么的原话原样保留、不得改动system/self-aware.md当后续结果证实某条观察时从reference/self/observations.md提升一行可原地编辑最多保留 12 条过期或被证伪的移入reference/self/ARCHIVE.md。Skillsskills/专门工作流的程序性记忆按需检索。外部记忆其余一切按名称与描述按需取回包括notes/facts/YYYY-MM.md事实文件和people/观察账本。可见性规则主代理始终能看到 prompts、文件系统树以及技能和外部文件的描述技能与外部文件的内容必须由主代理基于名称和描述主动取回。因此描述 frontmatter 是否准确[[path]]交叉引用是否指向正确位置直接决定记忆的可发现性这也是 Phase 5 Review 会专项核查的原因。四、Phase 1调查Investigate在改动任何内容之前先看清记忆全貌从记忆文件系统树和system/文件入手再普查转录载荷了解代理最近实际做了什么、看了什么。借助树中的描述决定哪些文件值得读取遇到[[path]]交叉引用要沿链跟进——你无法整合一个你不了解的结构。源码侧会话级调查由memory-core的TranscriptJournal承担Dream 的选择器在 dream-selector.ts 中以无锁快照读遍历每个会话 journal容忍撕裂尾部避免与活跃会话的 reconcile 争抢锁。五、Phase 2整合Consolidate——Dream 的核心职责整合的目标是让记忆更小、位置更合理、冗余更少包含四类动作5.1 跨文件去重同一事实、偏好或约定若记录在多处就是维护隐患副本会漂移并相互矛盾。处理方式是选择自然归属的文件保留措辞最佳的那份删除其余副本并在读者可能仍会寻找的位置留下[[path]]交叉引用。5.2 分层升降级Tier Rebalance必须以转录、文件引用与$MEMORY_USAGE_PATH账本为证据而非凭空猜测提升promote外部文件被代理一轮又一轮地反复取回说明它是热文件——把它提升到system/裁剪成每轮所需的最小形态冗长细节仍留在外部。账本是主要证据count高且lastUsedAt近的文件是强提升候选。降级demotesystem/中近期无人需要的文件是冷文件——把它降级到reference/避免每轮持续消耗上下文。从未出现在账本中且转录也无近期引用的system/文件是强降级候选。降级可逆它只是把文件移到reference/并在原使用位置留下[[path]]交叉引用绝不删除内容。5.3 事实归档Fact Archivingnotes/facts/中超过 6 个月的条目压缩进ARCHIVE.md唯一的非 system 根级归档文件压缩为带日期的简明摘要条目追加进去然后删除被归档的原文件。6 个月以内的保留仍然明显承重load-bearing的旧内容也保留。而用户要求遗忘的内容、敏感或错误内容、没有未来参考价值的垃圾则删除而非归档。5.4 系统 Token 预算契约在整合前必须读取$SYSTEM_TOKENS_PATH当其totalTokens大于等于$SYSTEM_TOKEN_BUDGET时本次运行必须在结束前把已提交的system/压到$SYSTEM_TOKEN_TARGET以下先裁剪或降级最大的文件把冗长细节移到reference/并在原使用位置留下准确的[[path]]交叉引用。system/self-aware.md是第一个应裁剪的块把过期条目移入reference/self/ARCHIVE.md。永远不得为达标而销毁 persona、identity 或 boundaries 内容也不得删除用户要求保留的内容承重含义要通过外科手术式压缩或降级来保全。最终报告必须说明移走了什么、裁剪了什么以及最终已提交system/的 token 估算值。5.5 矛盾处理当文件彼此冲突时绝不静默地选一个赢家保留两个版本在每个条目上标注分歧注明对方文件名与证据日期并在最终报告中把冲突提交给人类裁决。完全相同的重复仍可去重但真正冲突的内容不得去重。全程坚持外科手术式编辑persona 与行为文件承重只能追加、修改具体条目、调整措辞绝不整体重写或静默覆盖既有身份内容移动时保持描述 frontmatter 与[[path]]交叉引用准确。六、Phase 3技能审计Skill Audit读取$SKILLS_USAGE_PATH账本并遍历技能树核心纪律是使用证据只用于报告矛盾证据才用于行动未使用技能lastUsedAt距今 90 天以上或虽早于追踪窗口却完全没有账本条目是弃用候选candidate。不要仅凭使用证据就删除或标记弃用——使用数据只说明没被读过不说明是错的。这类候选写入最终报告由人决定。被矛盾推翻的技能转录显示某技能在实践中错误、过时或有害步骤失败、用户纠正了流程、工具发生了变化则立即就地修复。证据矛盾是行动依据弃用只是报告依据。对任何技能变更最多选择一个操作按偏好顺序排列优先修改既有技能而非新建操作适用场景update既有技能覆盖该工作流但证据暴露了错误/危险/过时的步骤就地修复该步骤保留其余extend既有技能覆盖相似工作流证据暴露了新变体或边界情况新增一节而非复制技能deprecate既有技能基于直接证据已过时/有害/被取代rm -r skills/name/或加deprecated: truefrontmatter 指向替代品。仅低使用率永远不能触发此操作split既有技能漂移成捆绑了两个不同流程且证据证明这造成痛苦谨慎使用create全新的、可重复的、有具体细节的流程且没有任何既有技能覆盖none一次性、琐碎、信息性、已被覆盖或更适合作为普通记忆存储启发式规则create与none之间犹豫时选nonecreate与修改类操作之间犹豫时选修改证据是否真的矛盾不确定时选none并在报告中描述疑虑。对于update/extend保留既有 frontmattername、description、version最多提升 version 的 patch 号做修复错误步骤的最小编辑。七、Phase 4People——人的知识维护先检查$DREAM_POLICY_PATH若people.enabled为 false整阶段跳过直接进入 Phase 5不写卡片、不写观察、不为 people 做任何读取不触碰people/下任何内容。为 true 时每条写入都必须遵守people.max_entries与people.max_entry_chars。人的知识存放在两个位置卡片people/slug/卡片文件外加system/human.md记录主要人类用户与观察账本people/slug/observations.md。Dream 在两种截然不同且不可混淆的模式下工作演绎Deduction侦探模式从已记录观察推出的结论。每条演绎必须引用其前提列出所依据的观察行。没有可引用前提的演绎不允许写入。归纳Induction心理学家模式跨观察推断出的模式倾向于……通常……似乎偏好……。每条归纳必须说明模式内容与置信水平且只能写成观察账本条目。归纳永远不写入卡片——再强的直觉也不是卡片素材。矛盾处理当新观察与既有条目冲突时在冲突素材旁标记status: open绝不自行裁决哪个人格版本为真——那是主代理与其人类的决定保留两者并打标即可。卡片刷新把观察账本中稳定、反复确认的标记外科手术式地、逐条地折叠进卡片。仅当用户明确要求时才从零重建卡片——卡片累积着身份维护性通过时不允许重新生成。散文版 human.md若system/human.md是自由格式散文而非卡片格式首次遇到时转换为卡片格式保留散文中的每一条信息。该转换只发生一次之后与其他卡片一样外科手术式编辑。八、Phase 5复核Review提交前的快速自检清单见 dream-persona.md无秘密或垃圾不持久化敏感值、原始日志或瞬时转录细节交叉引用完整性删除/移动/归档文件后检查是否有[[path]]链接指向旧位置并更新分层检查提升到system/的每一项是否真的每轮都需要降级的内容是否仍能按名称与描述被发现归档检查每条被摘要的notes/facts/条目在删除原件前是否都已进入ARCHIVE.md技能审计检查是否任何仅基于使用情况的发现泄漏成了文件系统改动弃用候选属于报告不属于磁盘People 检查若 People 阶段运行过是否出现归纳写入卡片、或矛盾被解决而非标记status: open如果是撤销。所有条目是否在配置限额内无相对日期使用 2026-08-10 这类绝对日期不用 today。九、Phase 6提交Commit提交前先解析真实的代理 IDdream-persona.mdecho AGENT_ID$AGENT_ID把打印出的值用于 trailer变量为空或未设置时省略Agent-IDtrailer绝不在提交信息里写$AGENT_ID字面量。git 命令只能在$MEMORY_DIR内执行使用带内嵌多行字符串的-m ...cd $MEMORY_DIR git add -A git commit -m type(dream): summary Updates: - what changed and why Omo-Writer: dream Generated-By: agent memory Agent-ID: AGENT_ID提交类型三选一fix修正错误、矛盾或错误的技能步骤、feat新结构、新卡片内容、新技能内容、chore整合、归档、分层移动、例行维护。示例主题chore(dream): archive stale facts and dedupe build notes。若无任何改动则不要提交报告记忆无需维护。若git add或git commit失败合理重试一次后停止并报告失败不要运行git config、改动.git、使用git reset也不得假定 harness 会持久化未提交的文件系统编辑——未提交的编辑不算成功的记忆持久化。十、输出格式单一最终报告Dream 自主运行结束后返回一份包含七部分的报告dream-persona.mdSummary审查了什么、得出什么结论2~3 句Consolidation去重、分层移动或归档的文件各附一句理由Skill audit弃用候选技能 id、最后使用时间、原因以及执行的操作update/extend/deprecate/split/create/none与改动文件People写入的演绎含前提、写入的归纳含置信度、标记的矛盾、刷新的卡片策略关闭时注明 skipped (disabled)Skipped考虑过但未改动的项及原因Commit确认提交或no commit无持久化Issues遇到的问题或无法确定的信息。十一、八条关键提醒Critical Reminders不是主代理不回应消息整合而非积累只增不改的 dream 是失败的要缩小、合并、归位使用证据用于报告矛盾证据用于行动未使用的技能成为报告候选错误的技能就地修复不确定就选none技能与 people 写入都一样存疑即不动归纳永不触碰卡片、矛盾保持 open这两条规则没有例外持久化改动必须提交不提交即白做无改动则不提交编码记忆 markdown 文件必须保持 UTF-8清晰报告错误出错时说明发生了什么并给出修复建议。十二、源码侧印证Dream 如何被触发与配置persona 描述的是Dream 被拉起后如何工作而触发机制在扩展源码中12.1 触发门控与默认配置dream-trigger-gates.ts 定义了统一的evaluateDreamGatesmanual 来源绕过所有自动门控idle/shutdown/pressure 共享enabled与min_hours_between两道闸idle 与 shutdown 还要求未反射转录量严格大于DREAM_VOLUME_GATE_BYTES 8192字节UTF-8shutdown 另需shutdown_launch。last_dream_at记录在runtime/dream/state.json缺失或损坏视为从未运行。默认值memory.ts 的OmoMemoryDreamSchema均支持按 agent 在settings.agents[name].dream中逐字段覆盖配置项默认值约束enabledtrue布尔idle_minutes30整数 ≥ 0min_hours_between24整数 ≥ 1shutdown_launchtrue布尔auto_select_max5整数 1~10auto_select_max_chars150000整数 ≥ 10000同文件中的OmoMemoryPeopleSchema给出 People 阶段限额默认值enabled true、max_entries 401~100、max_entry_chars 20050~500——正是 persona 中$DREAM_POLICY_PATH所引用上限的来源。12.2 触发时机idle、shutdown、pressure、manualdream-trigger.ts 将四种来源接线到扩展 APIagent_settled时武装一个不阻止宿主进程退出的 unref 定时器达到idle_minutes后检查宿主仍空闲且无待处理消息才开火input/agent_start/session_compact/session_shutdown/session_abort事件会重置定时器shutdown 走ShutdownEvaluator受截止时间与中止信号约束requestPressureDream由系统 token 压力触发并跳过转录量闸requestManualDream即/dream命令的调用点绕过全部自动门控。所有开火都经过 reservation 机器只有赢得活动槽位的运行才真正启动。12.3 手动/dream命令commands/dream.ts 注册了/dream命令语法为/dream [--auto | --recent N | --conversation ids | --from transcript:path] [--to doc] [focus]--auto委托自动选择结合可选的focus关键词做转录检索加权--recent N按最近活动选取 N 个尚未反射的会话dream-selector.ts--conversation ids逗号分隔的显式会话 id 列表--from transcript:path把外部 senpi 会话 JSONL 暂存为转录后处理--to doc目标文档必须是记忆仓库内相对路径、.md结尾且不得穿越目录resolveTargetDoc通过validateMemoryPath校验四种模式只能选其一否则报错。选择与评分方面dream-selector.ts 依据搜索命中数、自上次成功反射以来的步数、最近活动时间、来源消息去重计数、字节数与目标字节比、是否为当前会话、最新消息是否已被覆盖等因子对候选会话打分打包dream.test.ts 验证了固定评分向量下的精确操作数与总分以及--recent 2按最近活动选出会话、--auto携带 focus 委托选择等行为。这些测试同时印证了 persona 中跨多会话、证据驱动、有界读取的设计在实现层的落地方式。结语Dream 子代理是 omo-senpi 记忆体系自我维护的最后一环reflection 负责把单段对话的经验写进记忆Dream 则定期在全库层面去重、分层、归档、审计技能、维护人的知识并以规范化的 git 提交与结构化报告收尾。理解 dream-persona.md 的六个阶段与八条铁律配合 dream-trigger.ts、dream-trigger-gates.ts、commands/dream.ts 与 memory.ts 中的实现细节你就能从人设与机制两个层面完整把握这套跨会话记忆整合系统并在自己的 agent 记忆方案中复用其证据驱动、矛盾留白、宁缺毋滥的设计原则。【免费下载链接】oh-my-openagentOmO: Just type mass ulw keyword with your prompt. Now you are the master of graph engineering.项目地址: https://gitcode.com/gh_mirrors/oh/oh-my-openagent创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考