如何让 Agent 拥有跨会话长期记忆:PenguinHarness 记忆与 Vault 密钥管理详解

发布时间:2026/10/4 2:41:09

如何让 Agent 拥有跨会话长期记忆:PenguinHarness 记忆与 Vault 密钥管理详解 如何让 Agent 拥有跨会话长期记忆PenguinHarness 记忆与 Vault 密钥管理详解【免费下载链接】penguin-harness Unified and Stable RSI Platform项目地址: https://gitcode.com/gh_mirrors/pe/penguin-harnessPenguinHarness 是一款开源的本地优先多智能体应用开发平台它内置了Agent 跨会话长期记忆Memory和Vault 密钥管理两大能力Agent 会把用户偏好、项目决策整理成 Markdown 笔记在每次新会话中自动召回而 API Key 等敏感凭据则统一存放在密钥保险柜Vault里只注入命令的环境变量模型永远看不到密钥的值。本文用一次读的时间讲清这两块机制的设计与使用方法。为什么 Agent 需要跨会话记忆 大多数 Agent 工具都有一个共同毛病关掉会话就失忆。你上周告诉它我们项目统一用 pnpm这周它又开始建议你 npm同一个项目里换几个会话之前的架构决策要反复解释一遍上下文压缩Compaction只能救活当前会话的短期状态救不了长期知识。PenguinHarness 的做法是让 Agent 自己维护一套长期存储——位于agent_state/memory/下的 Markdown 笔记。它保存的正是那些后续会话无法从代码库重新推导的东西用户是谁、长期偏好、项目决策及理由、指向外部系统的入口。记忆不是上下文压缩。压缩保留的是单个 Session 的短期工作状态Memory 是 Session 结束之后仍然幸存的东西。设计细节可参考该功能的完整说明changelog/0.2.2/2026-08-07-memory.zh.md。记忆是如何工作的两个作用域 一份索引PenguinHarness 的记忆分两个作用域都只属于同一个 Agent绝不与其他 Agent 共享作用域目录存什么谁读取用户记忆memory/user/用户是谁、长期偏好、不绑定代码库的参考资料每个会话Workspace 记忆memory/workspace-key/某个项目里的决策、约定、外部系统入口同 Agent 在同 Workspace 的会话目录结构长这样agent_state/memory/ ├── user/ # 用户作用域随 Agent 一同创建 │ ├── MEMORY.md # 该作用域的索引 │ └── prefers-pnpm.md └── my-app-a81f32c4/ # 某个 Workspace 的记忆 ├── MEMORY.md └── testing-conventions.md几个值得注意的设计每个作用域有自己的MEMORY.md索引每条记忆一行- 标题 — 钩子每条记忆是一个主题文件frontmatter 含name/description/updated_at而不是按任务或日期散落的碎片绝不会被保存的内容凭证、任务进度、未经确认的猜测以及代码和 Git 历史本身就说明了的事实。什么会真正进入模型只有索引为了控制 token 开销每次会话注入上下文的是MEMORY.md索引经系统提示词的{{MEMORY}}占位符展开而不是全部正文。注入上限为每作用域 200 行、合计 25,000 字符超出时模型会被提示自行打开完整的MEMORY.md。正文则按需读取——读取、写入和去重都由 Agent 用普通文件工具自己完成。在 Web App 中管理记忆查看、编辑、导入导出打开某个 Agent 的设置页在记忆Memory标签页可以集中管理全部记忆按作用域分组展示用户记忆在前之后每个 Workspace 一组每条记忆一行支持查看侧边面板显示标题、日期、描述与完整正文编辑打开新对话由 Agent 更新记忆文件与索引记忆内容刻意不开放就地编辑保证索引与正文一致删除确认后删除文件并机械地移除MEMORY.md中对应行添加 / 导入 / 导出粘贴文本、文件路径或 URL 交给 Agent 整理成记忆分组可整组导出为 JSON再按需导入含保留现有 / 改用文件版本 / 整组替换三种冲突策略。顶部的启用记忆开关切换后立即生效关闭只是让记忆不再进入上下文不会删除任何文件。相关操作说明见 Agent 设置文档。Vault 密钥管理模型只看得见变量名看不见值 Agent 干活经常需要 API Key。把密钥贴在对话里或写进提示词等于发给模型供应商并永久留在 Trace 里。PenguinHarness 的答案是密钥保险柜Vault变量按 Agent 保存在agent_state/.vault.toml0600 权限的隐藏文件值只注入 Agent 命令的子进程环境变量从不进入模型上下文——模型只能看到变量名{{VAULT_KEYS}}列出的名单永远看不到值子 Agent 使用各自的 Vault不继承父 Agent 的变量修改从下一个 Task 生效正在运行的 Task 不受影响权限上只有 Project owner 能修改 Vault成员看到的值全部是掩码。两种添加变量的方式手动添加推荐在密钥保险柜标签页选手动创建输入键名如OPENAI_API_KEY和值即可。用 AI 创建描述需要的变量例如盘点这个智能体需要的 keyProject 的默认 Agent 会用penguin config vault set写入。也可以直接用 CLI 管理penguin config vault set --key GITHUB_TOKEN --value ghp_xxx penguin config vault list penguin config vault remove --key GITHUB_TOKEN⚠️ 安全提示在 AI 对话框里直接输入的密钥值会发送给模型供应商并记录进 Trace。更安全的做法是让 AI 只创建变量名、说明用途然后自己在保险柜标签页填入值。CLI 用法详见 CLI 文档。数据落在哪里全部是可编辑的本地文件PenguinHarness 是本地优先的——Agent 的全部行为都是可编辑的文件记忆与密钥也不例外内容存放位置说明记忆agent_state/memory/按作用域分目录各带MEMORY.md索引密钥保险柜agent_state/.vault.toml0600 权限值只进子进程环境记忆/保险柜提示词agent_state/system_config.yamlmemory.prompt、vault.prompt均可在对应标签页编辑记忆随 Agent State 一起迁移导出、导入和快照都会带上但快照刻意排除 Vault密钥永远不会随快照流走。完整的存储分层见 架构文档 与 配置参考。常见问题记忆会泄露给其他 Agent 吗不会。每个 Agent 的记忆只属于它自己即使多个 Agent 在同一个 Workspace 工作也互不可见。关闭记忆开关会删数据吗不会。关闭只是阻止记忆进入上下文、不再为新会话准备目录文件原样保留。移动项目目录后记忆还在吗旧记忆仍以旧键留在磁盘上Workspace 键基于真实路径哈希新路径被视为新 Workspace。小结PenguinHarness 给 Agent 装上长期记忆的思路很克制记忆 Markdown 文件两个作用域、一份索引、按需读取透明可编辑密钥 Vault 环境变量值只进命令子进程模型只见名不见值一切本地优先数据都在agent_state/下可导出、可迁移、可随时关掉。想动手试试的话从 Agent 设置文档 的记忆标签页和密钥保险柜标签页两节开始十分钟就能跑起来。【免费下载链接】penguin-harness Unified and Stable RSI Platform项目地址: https://gitcode.com/gh_mirrors/pe/penguin-harness创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/10/4 2:41:09

系统架构设计师综合知识真题解析:高频考点与复习主线

我花了两个周末,把近四次系统架构设计师(也就是大家常说的"系分架构"方向)综合知识科目的真题逐一过了一遍,每道题都做了考点标注和错误选项分析。做完之后最直观的感受是:这门科目绝对不只是"背多分&q…

2026/10/4 3:26:11

for循环从入门到实战:语法、应用与避坑指南

很多刚接触编程的朋友都经历过这样的阶段:想让程序输出1到100,第一反应是把print语句复制粘贴一百遍;后来学会了函数,写了个print_1_to_100(),总算不用在调用时复制粘贴了,但每次改动范围还是得改函数体里的…

2026/10/4 3:26:11

插件加载失败深度拆解:从plugins机制到排查实战

最近好几个开发者社群里都在刷同一类报错:failed to load plugins web boot: 2 entries did not activate linxin666/dsh-p。后面挂的插件名五花八门,有公司内部的组件库,有个人开发者写的开源包,也有musicfree plugins这类面向普…

2026/10/4 3:26:11

杰理蓝牙芯片Key本质:硬件绑定的启动校验特征码

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 3:21:10

JVM调优与常量池深度解析:从Full GC排查到String.intern内存陷阱

前两天晚上处理了一个线上服务卡顿的问题,接口P99从平时50ms直接飙到3秒,CPU偶尔冲到100%,jstat一看,Young GC一分钟几十次,Full GC更是每隔几秒就来一次。排到后面发现罪魁祸首是一段用String.intern()缓存业务key的代…

2026/10/4 0:01:02

Jev+Agent接管浏览器:browser-use实战与jev-ultrafast性能优化

1. 从“Jev”说起:为什么我要把Agent接进浏览器“Jev”这个词最近在圈子里出现的频率越来越高,很多人第一次听到会以为是某个新模型的名字,其实它更像是一种思路——把Jev模型的能力当作底座,通过Agent的方式去接管浏览器&#xf…

2026/10/4 0:01:02

多智能体集群实战:DeepAgents编排、MCP与A2A协议及Skills体系

1. 从"单兵作战"到"集群协同":多智能体编排到底在解决什么问题如果你最近在折腾 Agent 相关的东西,大概率会有一种感觉:单个 Agent 能做的事情,其实很快就摸到天花板了。你给它一个提示词,挂几个工…

2026/10/4 1:01:05

无源低通滤波器设计实战:从RC到LC,手把手教你避开那些坑

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 0:01:02

Jev+Agent接管浏览器:browser-use实战与jev-ultrafast性能优化

1. 从“Jev”说起:为什么我要把Agent接进浏览器“Jev”这个词最近在圈子里出现的频率越来越高,很多人第一次听到会以为是某个新模型的名字,其实它更像是一种思路——把Jev模型的能力当作底座,通过Agent的方式去接管浏览器&#xf…

2026/10/4 0:01:02

多智能体集群实战:DeepAgents编排、MCP与A2A协议及Skills体系

1. 从"单兵作战"到"集群协同":多智能体编排到底在解决什么问题如果你最近在折腾 Agent 相关的东西,大概率会有一种感觉:单个 Agent 能做的事情,其实很快就摸到天花板了。你给它一个提示词,挂几个工…

2026/10/4 1:01:05

无源低通滤波器设计实战:从RC到LC,手把手教你避开那些坑

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑