你的模型和工具链已经不再重要。
真正重要的是……
你的个人上下文 / 共享记忆
引言
我将向你展示如何为你的编程 Agent 构建一个共享记忆……这样下一个工具就能找到你已经做出的决策。
在 Claude 中的架构讨论、在 Codex 中的调试会话、在 Cursor 中埋藏的解释……这些有用的工作成果,在你更换工具、开始新会话,或者一个月后重新回到项目时,应该仍然可用。
长话短说;如果你不想读完这 3,845 个字,直接把下面这个 GitHub 仓库给你的 Agent 就行 ➡️ https://github.com/codejunkie99/agentic-stack-desktop
整个项目我都是用 Codex Harness 中的 Kimi K3 构建的。视频也是用 Kimi K3 配合 Cua 进行计算机操作制作和编辑的。

这是一份面向 Agentic Stack Desktop 的构建指南,从你的首次导入开始,一直到这样一个工作流:Agent 能够找回之前的决策,对照当前代码进行检查,做出有边界的修改,并留下有用的信息。
你将获得以下内容:
- 基础:当你切换工具时,什么能够保留下来
- 最快路径:构建一个你可以判断的工作区
- 工作设置:将调查与实施分开
- 项目练习:将一个反复出现的 Bug 跑完整个流程
- 共享层:将检索引入你的其他工具
- 持久层:什么值得成为经验教训
- 操作规则:简洁、有边界、可检查
- 自定义构建:围绕一个真实的痛点修改工作区
- 扩展:在上一个流程暴露的缺口处增加覆盖
- 构建清单
1. 基础:当你切换工具时,什么能够保留下来

想象一下,你花了一个下午来决定一个功能应该如何工作。你探索了各种方案,发现了一个限制,否决了显而易见的解决方案,最终找到了一个合适的方案。
实现代码被提交了。但解释说明留在了对话中。
一周后,另一个 Agent 查看了代码,并提出了你之前已经否决过的相同方案。从它可获得的信息来看,这甚至可能是一个合理的建议。缺失的正是那个让你做出不同选择的讨论。
让推理过程可恢复
从这里开始:让那个讨论变得可恢复,然后让下一个 Agent 在行动之前先检查它。
Agentic Stack 提供了一个原生的 macOS 工作区,其中包含来自 Claude Code、Codex、OpenCode 和 Cursor 的可搜索、精选的历史记录。Claude Code 和 Codex 也通过其官方 CLI 执行;Cursor 和 OpenCode 目前仅提供上下文。仓库概览
下面的工作流程是我会如何使用这些功能。任务简报、职责划分和项目练习是建议的操作实践,你可以根据自身情况进行调整。
2. 最快路径:构建一个你可以判断的工作区

从一个你熟悉的仓库开始。选择一个你知道重要文件、记得最近一个决策、并且能识别出糟糕建议的项目。
一个你熟悉的项目能为你提供参考点。 如果你从陌生的代码和陌生的历史开始,你将同时尝试验证工具和学习系统。
对于源码构建,文档要求包括 macOS 14+、Python 3.10+、Xcode 命令行工具和 Swift 6 工具链。安装并登录到你想要运行的编程 CLI。要求
1git clone https://github.com/codejunkie99/agentic-stack-desktop.git2cd agentic-stack-desktop3./install.sh desktop --build
在应用中打开你的仓库并完成引导设置。这是一个带有临时签名的预览版,因此 macOS 可能在首次启动时需要确认。设置
设定第一个验收检查
在导入任何内容之前,写下你希望第一个 Agent 回答的问题。比如:为什么我们的导出作业要分批处理记录,当前的实现是否仍然需要这个限制?
这个问题将成为你的第一个验收检查。你要寻找的是正确的决策、正确的支持代码,以及对 Agent 无法确定的任何内容的诚实解释。
2.1 首次导入:给它一个值得寻找的决策
打开知识图谱 → 图谱 → 导入记忆,预览来源,然后选择你想要包含的材料。
该图谱使用 SQLite 全文搜索,基于主题、仓库链接和来源建立连接;原始聊天存储保持不变。导入行为
我会从一段包含你记得的决策的完整对话开始。特别是那些你因为一个从最终代码中看不出来的限制而否决了某个有吸引力的方案的决策。
导入后搜索该决策。打开结果并检查来源。确保你看到的是你打算引入的对话,并且有足够的上下文解释来理解发生了什么。
测试你是否能再次找到它
然后,使用你下个月可能会自然使用的词汇进行第二次搜索。你可能记得功能名称,而对话中使用的却是内部模块名称。发现这种不匹配现在可以帮助你理解以后如何检索这些材料。
我会将第一个集合保持得足够小,以便手动检查。从已知来源得到的正确答案是工作流有效的有用证据。
大量的导入计数告诉你有多少材料进入了系统,而其有用性则需要测试。
当另一个任务给你理由时,再扩展集合。
2.2 首次工作会话:让实验小到可以完成
我会在打开另一个配置界面之前,为初始设置设定一个终点线。到会话结束时,你应该已经恢复了一个已知的决策,对照仓库进行了检查,并产生了一份你可以向其他人解释的审查报告。
选择一个边界狭窄的例子。检查单个导出行为比检查整个数据平台更容易。验证一个关于组件的早期选择比问一个关于架构是否良好的宽泛问题更容易。
在练习旁边保留一个简短的笔记:问题、预期的来源、当前的实现,以及需要判断的部分。这是你评估答案的参考。
诊断正确的失败原因
- 如果审查者找错了对话,那就改进检索。
- 如果它找到了正确的对话但误读了代码,那就改进调查。
- 如果发现是合理的,但实现未能满足要求,那就改进交接。
这种区分很重要,因为每种失败都需要不同的纠正措施。 增加更多记忆不一定能解决不清晰的任务简报,重写任务简报也无法找回从未导入过的来源。
完成最小的完整循环,记录失败之处,并利用这些证据来选择下一个改进方向。
3. 工作设置:将调查与实施分开

我建议的初始设置包括一个只读的审查者和一个拥有项目编辑权限的实施者。为每个角色设定明确的交付物,并在任何更改开始之前,确保交接内容是你能够阅读的。
Agent 配置文件支持运行器、模型、工作量、指令和文件访问。对话属于项目,后续对话会恢复其底层的 CLI 会话。对话模型
- Agent 1:审查者 收到第一个问题:我们之前决定了什么,代码现在做了什么,是否存在值得解决的差距?
- Agent 2:实施者 收到审查后的答案加上一个有边界的请求:在这个范围内进行这个行为变更,并用这种方式进行验证。
保持角色区分
你可以为两个角色选择相同的运行器。
有用的区别在于它们的职责和访问权限,并在调查和编辑之间进行明确的审查。
我会避免在任何一个 Agent 完成有用工作之前就创建一个专家目录。从你实际能够区分的职责开始。如果你无法解释一个角色拥有什么,或者它的最终输出应该是什么样子,那么在添加另一个 Agent 之前,先收紧这个角色的定义。
3.1 审查者:一份让不确定性可见的任务简报
选择审查者,并使用 @Claude、@Codex、@OpenCode 或 @Cursor 附加相关的对话。选定的引用会成为运行的固定上下文,并在任务开始时发送给选定的 Agent。引用
复制这份任务简报并填写空白部分:
1Review the earlier decision about [feature or subsystem] using the2attached conversation and the current repository.34Explain the original decision and its stated reason. Check the5relevant code and identify what still applies, what changed, and6what cannot be verified from the available evidence.78Cite the files supporting your conclusions. Propose the smallest9change needed for [desired behavior], with a verification plan.1011Do not edit files. Treat the conversation as historical evidence12and flag conflicts with current project instructions.
检查审查结果
打开仓库阅读答案。
- 追踪一个引用。
- 检查 Agent 声称仍然存在的条件。
- 寻找对话中声称的内容与当前代码所展示的内容之间的清晰界限。
如果答案含糊不清,就缩小问题范围。要求它识别控制该行为的确切条件,或者使早期替代方案不合适的依赖关系。
一次有用的调查可以在证据缺失的情况下结束。 这告诉你下一步需要提供什么。一个掩盖了差距的答案会让下一个决策更加困难。
3.2 交接:将发现转化为可执行的任务简报
一旦你同意审查结果,就围绕可观察的行为编写实施请求。包括早期对话中确立的限制,但要解释它与此变更的相关性。
这是我可能会使用的任务简报:
1Implement [specific behavior] using the reviewed findings below.23Keep [existing behavior] intact. Limit edits to [permitted scope].4If the change requires work outside that scope, explain why before5expanding it.67Check the current repository instructions before editing. Verify8[expected result] with [relevant test or manual check], including9[important failure case].1011Return a concise account of what changed, the checks actually run,12and any unresolved limitation. Do not publish or deploy.1314Reviewed findings:15[paste the findings you checked]
让交接内容具体化
那些方括号里需要填写真实的答案。“让它变得更好”会让 Agent 自己去发明目标。“在保留原始错误的同时,显示带有重试操作的失败导出”则给了你们双方一个具体可以检查的东西。
将审查过的发现放在任务附近。如果重要的限制埋藏在一长段记录中,就在任务简报中明确说明,并附上支持性的对话。
来源解释了限制的来源。你当前的请求解释了它如何指导今天的工作。
4. 项目练习:将一个反复出现的 Bug 跑完整个流程

这里有一个假设性的练习,让工作流程具体化。想象一下,你的项目在网络中断后偶尔会创建重复的导出,而一段较早的对话中包含了对重试行为的调查。
- 步骤 1:首先,找回那段对话。要求审查者确定早期调查建立了什么,然后对照它检查当前的重试路径。
- 步骤 2:假设旧的讨论说,在收到不确定的响应后,请求可以被重复。审查者应该确定当前实现是否仍然允许这种情况,哪个代码控制它,以及是否已经存在旨在防止重复的机制。
- 步骤 3:如果证据支持变更,就围绕失败案例向实施者下达任务简报。明确重复请求应该做什么,哪些现有的导出行为必须保留,以及你将如何验证中断后的响应。
- 步骤 4:然后检查变更并执行相关路径。检查成功的导出和不确定性后的重试。如果环境无法重现中断,记录这个限制,并决定需要什么样的进一步验证。
- 步骤 5:最后,审查你可能保留的经验教训:导致重复的条件、解决问题的机制,以及支持修复的证据。
这个例子是一个建议性的练习,而不是声称 Agentic Stack 中存在 Bug。用你自己项目中的真实失败来替换,并保持相同的顺序。
5. 共享层:将检索引入你的其他工具

桌面端可以通过 工具 → 连接 → 在工具中使用 @ → 在所有四个工具中启用 来安装集成。等效的命令是:
1agentic-stack context install
之后重启工具。MCP 入口暴露了对话搜索、选定聊天阅读和共享记忆搜索。集成
选择器的行为取决于客户端;在资源补全不可用的情况下,Agent 可以搜索并呈现匹配的对话。客户端行为
测试跨工具的连续性
我的第一个检查是要求另一个工具找到你刚刚审查过的同一个决策。给它主题,要求它呈现匹配的来源,并在要求分析之前确认选择。
然后将结果与你在桌面端检查过的来源进行比较。你正在测试上下文跨工具的连续性,所以在改变提问地点的同时,保持问题稳定。
我还建议,每当一个决策对工作产生实质性影响时,将来源包含在最终的任务简报中。“我们之前讨论过这个”给了 Agent 一个搜索问题。“使用这份审查过的对话,并验证这个条件”则给了它一个具体的责任。
6. 持久层:什么值得成为经验教训

检索将旧材料带回视野。你仍然需要决定这些材料应该具有什么权威。
一段对话可能包含一个被放弃的计划、一个错误的诊断,或者一个在项目改变之前合理的答案。保留它可以让你以后检查推理过程;接受一个经验教训是一个独立的决定。
任务持有执行记录。知识 → 经验教训 支持暂存、接受、拒绝和重新审视带有理由的经验教训,而导入的历史记录则与已接受的经验教训分开。审查生命周期
写一个你可以质疑的经验教训
我会写一个包含足够细节以便被质疑的经验教训提案:它适用的条件、它推荐的行为、理由和证据。
对于假设的导出 Bug,“总是安全重试”太模糊了,没有帮助。一个有用的笔记会指出什么使得重试变得不确定,以及这个项目的实现应该如何识别重复的工作。
然后问什么会使这个经验教训过时。不同的后端、变更的合同或替换的子系统可能会移除原始限制。包括这个边界,以便未来的审查有地方可以开始。
这就是我如何防止一个有用的修正变成一个过时的规则。
6.1 记忆结构:将每种知识放在其位置
在桌面端之下,可移植的 .agent/ 架构将工作状态、先前事件、持久模式和个人偏好分开。技能提供了可重复的程序,而协议描述了权限和委托。架构
- 当前的调查属于进行中的工作。
- 其完成的记录成为所发生事情的证据。
- 一个经过验证的模式可以成为一个持久的经验教训。
- 关于你希望结果如何呈现的偏好属于你的偏好。
保持这些含义清晰可以使以后的审查更容易。一个临时的变通方法应该说明何时可以移除它。一个个人写作偏好不应该意外地成为一个架构规则。
将一个经过验证的程序转化为技能
这同样适用于技能。当一个程序足够有用值得重复,并且足够具体可以遵循时,我会创建一个技能。包括它需要的输入、重要的步骤、预期的输出以及需要另一个决策的条件。
对于导出示例,调查可能会产生一个有用的回归检查程序。只有在你确认这些步骤在你的项目上有效之后,才保存它。复制的记录给了下一个 Agent 一个故事;一个经过审查的程序给了它一个你可以评估的方法。
7. 操作规则:简洁、有边界、可检查

以下是我会从第一个项目开始围绕工作流程制定的规则。
- 规则 1:每个任务简报都指明交付物。 审查返回带有证据的发现。实施返回带有检查的行为变更。经验教训提案返回一个你可以接受或拒绝的主张。
- 规则 2:访问权限跟随工作。 调查从只读访问开始;实施获得商定变更所需的权限范围。在请求中明确说明发布、部署和其他重要操作。
- 规则 3:要求实际的验证。 报告应该说明运行了什么以及发生了什么。如果某个检查不可用,要使其可见,而不是悄悄地将缺失的结果视为成功。
- 规则 4:保持历史上下文从属于当前证据和适用的项目指令。 检索到的对话可以解释早期的决策,同时仍然可能是过时的。
- 规则 5:在保留结论之前审查结果。 Agent 对其自身工作的解释是需要与差异和观察到的行为一起检查的东西。
这些是我所描述的设置的操作实践。根据你的项目进行调整,但保持职责足够清晰,以便另一个人能够判断一个任务是否达到了其任务简报的要求。
7.1 审查队列:让工作易于接受或退回
我会要求每个实施都以相同的格式结束:
- 改变了什么,
- 验证了什么,
- 仍然不确定的是什么,
- 以及它是否提出了一个可复用的经验教训。
这为你提供了一种一致的方式来阅读已完成的工作,而无需每次都重建整个对话。支持性细节可以保留,供你需要检查的部分使用。
当你退回某些内容时,将修正附加到它未能满足的要求上。“这是错的”会开始另一轮猜测。“在这个条件下,重试创建了第二个导出;保留原始请求标识并重新运行这个检查”则指出了差距。
决定什么值得保留
在修正通过后,决定它代表一个反复出现的约束还是该任务的细节。当前者有证据支持时,保存它。后者可以保留在任务的历史记录中。
我会抵制将每条审查意见都变成永久记忆的冲动。有些修正只用一次就有用。其他的则揭示了一个应该塑造后续工作的规则。 做出这种区分是维护系统的一部分。
在审查结束时,有用的问题是:未来的 Agent 在尝试类似任务之前应该知道什么,以及它可以在哪里验证这些知识?
7.2 成本纪律:为每次运行设定停止条件
我会在任何可能不断扩展的任务中包含一个停止条件。对于审查,这可能是一份关于相关行为和未解决问题的书面说明。对于实施,这可能是商定的变更通过了其指定的检查。
如果 Agent 发现了一个更大的问题,在将该工作吸收到当前变更之前,要求它解释这个发现及其与原始任务的关系。
决定这是否属于当前任务。
比较结果并强制执行限制
使用你账户中实际可用的选项来选择运行器和模型,然后在你自己的有边界示例上判断它们。在将某个配置设为默认值之前,我会比较发现的质量、所需的修正和提供的验证。
通过保持任务和源材料不变来确保实验公平。如果每次试验都改变问题、上下文和验收标准,那么比较将难以解释。
并且将任何支出控制放在你的工具或提供商实际强制执行的地方。 要求 Agent 节约用语的句子是一种偏好;在依赖某个限制之前,检查可用的控制措施。
8. 自定义构建:围绕一个真实的痛点修改工作区

一旦你完成了基本循环,你会更清楚你想从桌面端本身得到什么。也许一个重复的导航步骤困扰着你,或者一个任务视图使得某个字段比需要的更难检查。
在提出功能请求之前,写下这个痛点。描述你试图采取的行动、你在哪里浪费时间,以及改进后的行为会让你能够做什么。
然后打开源代码仓库,给你的 Agent 一个有限制的变更请求。包括你打算如何在应用中检查结果。
构建并检查变更
仓库记录了以下开发和打包命令:
1python3 -m pytest -q2swift build --package-path apps/macos -c release3python3 scripts/check-desktop-connection.py4bash scripts/build-macos-app.sh --output ./apps/macos/dist
SwiftUI 的更改需要重新构建和重启才能检查。桌面工作流
我会测试促使更改的交互以及一个可能被破坏的邻近案例。如果你改进了任务过滤,检查过滤后的结果、一个空结果集以及返回完整列表的路径。
使用你应用于导出练习的相同标准:一个具体的之前状态,一个有边界的更改,以及一个观察到的之后状态。
8.1 远程选项:决定工作应该在哪里进行
在本地工作流运行良好之后,你可能希望在持久服务器上执行。自托管路径将原生应用连接到一个单一所有者的服务,该服务拥有自己的项目、记忆、任务历史和 CLI 登录;切换主机不会自动传输你 Mac 的数据或凭据。托管指南
我会出于具体原因才进行部署,比如将项目及其执行环境保留在你已维护的机器上。在承担部署工作之前,先写下这个理由。
按照托管指南进行支持的配置、身份验证和验证步骤。将服务器视为另一个工作环境,拥有其自身需要检查的状态。
验证所选环境
然后在那里重复一项熟悉的任务。检查所选项目,确认 Agent 可以访问预期的来源,并验证结果属于你选择的服务器环境。
使用已知任务可以更容易评估过渡情况。如果你同时更改了主机、项目和工作流程,就很难确定是哪个更改导致了意外结果。
本地环境足以学习核心模式。当工作给你一个理由时,再扩展基础设施。
9. 扩展:在上一个周期暴露的缺口处增加覆盖范围

我会根据实际任务中遇到的缺失上下文来扩展这个设置。
- 如果一次审查需要更早的架构讨论,就导入那次讨论。
- 如果实现过程反复需要相同的流程,就开发并验证一个技能。
- 如果一个决策不断被重新提起,就编写一个范围明确的课程,并附上支持它的证据。
保留一小套你已知答案的问题。在更改导入或工作流程后使用它们:找到这个决策,解释这个约束,识别实现它的代码,并标记出不再适用的部分。
当工作证明其合理性时再扩展
只有当某个 Agent 角色的职责在工作中变得清晰时,我才会添加它。重复出现的文档审查可能证明需要一个专门的简报。一次性的请求可能完全适合现有的角色。
扩展那些已经证明自身价值的部分。 保持其余部分足够简单,以便在出现问题时能够理解。
9.1 维护习惯:当系统发生变化时重新审视知识
每当子系统发生足够改变其假设的变化时,我都会审查相关的课程。将变化本身作为触发器:新的依赖项、替换的存储层、不同的部署环境或修订的产品需求。
询问哪些现有课程依赖于旧行为,然后检查这些来源以及变化本身。保留仍然成立的内容,修订需要缩小范围的内容,并通过可用的审查工作流程淘汰不再适用的内容。
重要的是保留解释。未来的构建者应该能够理解为什么存在早期的规则,以及发生了什么变化足以取代它。
刷新流程并解决冲突
对于技能,在影响其输入或命令的更改发生后,再次运行该流程。如果某个步骤不再有效,则根据观察到的失败更新流程,并重复相关检查。
这使维护与项目中的实际事件保持联系。你正在审查最可能过时的知识,并且当前证据就在你面前。
当任务出现冲突的笔记时,将解决该冲突作为审查的一部分。确定哪个陈述适用于当前版本,并留下足够清晰的结果,以便下一个 Agent 无需重复整个调查就能遵循推理过程。
留下有用的交接记录
在下一次会话之前,留下简短的交接记录,描述已验证的结果、未解决的问题以及另一个 Agent 应首先阅读的来源。使其具体到你实际检查的项目状态。
这为明天的工作提供了一个可追溯的起点,特别是当你通过不同的工具或在一段时间后返回时,原始的推理过程仍然可用。
10. 构建清单

- 选择一个熟悉的仓库和一个你能识别的决策。
- 构建桌面端,完成设置,并导入包含该决策的已完成对话。
- 搜索它,检查来源,并将其附加到当前代码的只读审查中。
- 自己检查结果,然后简要说明一个具有可见验收条件的实现。
- 检查差异并运行相关验证,包括促使该工作的失败案例。
- 仅当结果支持时,才编写一个课程,并记录其范围和原因。
- 当你已验证某个流程值得重复时,将其转化为一个技能。
- 尝试从另一个工具进行相同的检索,然后在实际任务需要时扩展你的上下文或基础设施。
本周从一个决策开始,并在导入整个历史记录之前完成整个周期。
下一个 Agent 应该继承你的判断。





