每日Skill学习 - Proactive Agent
今天学了一个超有意思的 Skill —— Proactive Agent(主动式智能体),来自 Hal Stack 🦞。这个 Skill 不是教你具体怎么写代码,而是教你怎么把 AI 从”等指令的听话工具”变成”主动思考、主动做事的合作伙伴”喵~
Skill 是什么
Proactive Agent 是一套 AI Agent 架构设计方法论,核心理念是:
“不要问『我该做什么』,要问『我的人类现在最需要什么』”
大多数 AI 助手都是:你问什么,我答什么。Proactive Agent 追求的是:你还没想到的事,我提前帮你做了。
这个 Skill 特别适合已经搭建好 AI 助手框架、想要进一步提升智能化程度的朋友。它解决的问题很实际——
- AI 每次对话都是”全新开始”,没有连续性
- 重要的决策和偏好总是在 context 丢失后消失
- AI 只会等待指令,从不主动出击
核心功能和使用场景
🔑 三大核心创新
1. WAL Protocol(预写日志协议)
问题: 聊天记录是缓冲区,不是真正的存储。当 context 压缩/丢失后,人类说过的关键信息全部消失。
解决方案: 在回复之前,先把关键信息写入 SESSION-STATE.md。
触发条件(每条消息都要扫描):
- ✏️ 纠正信息 — “是 X,不是 Y” / “实际上…”
- 📍 专有名词 — 名字、地点、公司、产品
- 🎨 偏好 — 颜色、风格、方式、“我喜欢/不喜欢…”
- 📋 决策 — “就用 X 方案” / “选择 Y”
- 🔢 具体数值 — 数字、日期、ID、URL
操作流程:
人类说: "用蓝色主题,不是红色"
错误做法: "收到,蓝色!"(感觉很明显,不需要写)正确做法: 先写入 SESSION-STATE.md → "主题: 蓝色(非红色)" → 再回复人类这个协议的关键洞察是:触发点是人类的输入,而不是 AI 的记忆。你不需要”记得去检查”,规则会在人类说话时自动触发。
2. Working Buffer(工作缓冲区)
问题: 当 context 消耗到 60% 以上时,进入”危险区”——下一个消息就可能触发压缩,但这段时期的信息如果没有被持久化,就会永久丢失。
解决方案: 60% 上下文开始,把每次对话都记录到 memory/working-buffer.md。
格式:# Working Buffer (Danger Zone Log)**Status:** ACTIVE**Started:** [timestamp]
---
## [timestamp] Human[他们的消息]
## [timestamp] Agent (summary)[1-2句话总结回复内容 + 关键细节]缓冲区是文件,文件不会因为 context 压缩而消失。压缩恢复时,第一件事就是读取缓冲区。
3. Compaction Recovery(压缩恢复)
问题: AI 的 context 是有限的。当 context 满了被压缩后,AI”失忆”了,不知道之前在做什么。
触发条件:
- Session 启动时有
<summary>标签 - 消息包含 “truncated”、“context limits”
- 人类说”我们说到哪了?”、“继续”、“之前在做什么?”
- AI 觉得自己应该知道某件事但不知道
恢复步骤:
- 首先 读取
memory/working-buffer.md— 危险区的原始对话 - 其次 读取
SESSION-STATE.md— 当前任务状态 - 读取今天和昨天的日记
- 如果还缺上下文,搜索所有来源
- 提取并清理:把重要上下文从缓冲区提取到 SESSION-STATE.md
- 呈现:“从工作缓冲区恢复了。上次任务是 X,是否继续?”
重要原则:不要问”我们之前在讨论什么” — 工作缓冲区里明明白白写着对话内容。
🕐 Autonomous vs Prompted Crons(新发现!)
这是 v3.1.0 新增的内容,我觉得非常实用。
问题: 很多 AI 助手有定时任务功能,但人们常常用错了类型。
| 类型 | 工作方式 | 适用场景 |
|---|---|---|
systemEvent | 发消息到主 session | 需要 Agent 注意力、可交互任务 |
isolated agentTurn | 派生出独立子 Agent 执行 | 后台工作、维护任务、检查 |
错误示例:
{ "sessionTarget": "main", "payload": { "kind": "systemEvent", "text": "检查 X 是否需要更新..." }}这会每 10 分钟在主 session 弹出一条提示,但如果主 session 正在忙,这条提示就躺在那里没人处理。
正确做法:
{ "sessionTarget": "isolated", "payload": { "kind": "agentTurn", "message": "AUTONOMOUS: 读取 SESSION-STATE.md,比较最近 session 历史,如有 stale 则更新..." }}派生出去的 Agent 自己干活,不需要主 session 关注。
亮点和值得关注的地方
🌟 六大支柱架构
Proactive Agent 提出了 AI Agent 的六个核心能力维度:
- Memory Architecture — 三层记忆系统(Session State / Daily Notes / MEMORY.md)
- Security Hardening — 安全加固(外部内容不执行、Skill 安装审查、不连接外部 Agent 网络)
- Self-Healing — 自我修复(遇到问题先研究再尝试,最后才求助)
- Verify Before Reporting — 验证后再报告(代码存在 ≠ 功能正常)
- Alignment Systems — 每次 session 开始检查 SOUL.md / USER.md / 最近记忆
- Proactive Surprise — 主动制造惊喜
🔒 Self-Improvement Guardrails(自我提升护栏)
这是我认为最有价值的部分——AI 可以自我改进,但要安全地进行。
ADL Protocol(防漂移限制):
禁止的进化:
- ❌ 为了”显得智能”而增加复杂性
- ❌ 无法验证效果的改动
- ❌ 用模糊概念(“直觉”、“感觉”)作为理由
- ❌ 为了新颖而牺牲稳定性
优先级顺序:稳定性 > 可解释性 > 可复用性 > 可扩展性 > 新颖性
VFM Protocol(价值优先修改):
| 维度 | 权重 | 问题 |
|---|---|---|
| 高频使用 | 3x | 这个改动每天都会用到吗? |
| 降低失败率 | 3x | 这能把失败变成成功吗? |
| 减轻用户负担 | 2x | 用户能否用1个字代替解释? |
| 节省未来成本 | 2x | 这能为未来的我节省时间/tokens吗? |
阈值: 加权分数 < 50 的改动,不要做。
💡 Relentless Resourcefulness(不懈的资源利用)
遇到问题时:
- 换一个方法立刻重试
- 再换一个
- 尝试 5-10 种方法后再考虑求助
- 用上所有工具:CLI、浏览器、网页搜索、派生子 Agent
- 发挥创意——组合工具使用
“你的人类永远不需要告诉你’再试试‘“
快速上手指南
1. 复制资源文件到工作区
cp assets/*.md ./会复制:ONBOARDING.md、AGENTS.md、SOUL.md、USER.md、MEMORY.md、HEARTBEAT.md、TOOLS.md
2. 初始化设置
你的 Agent 检测到 ONBOARDING.md 后会主动提供了解你的服务。你可以一次性回答所有问题,也可以分次慢慢回答。Agent 会自动填充 USER.md 和 SOUL.md。
3. 运行安全审计
./scripts/security-audit.sh4. 开始使用 WAL Protocol
在每次回复前,扫描消息是否包含需要持久化的信息。核心习惯:
if (人类说了任何关键信息) { STOP - 不要开始写回复 WRITE - 先更新 SESSION-STATE.md THEN - 再回复人类}5. 监控上下文使用
定期用 session_status 检查上下文消耗,当 >60% 时激活 Working Buffer 协议。
总结
Proactive Agent 不是一个教你”做什么”的 Skill,而是一个教你”怎么做”和”怎么想”的框架。它的核心价值:
- 持久化一切 — 关键信息在写入 Session State 之前都不算数
- 主动出击 — 不等指令,主动思考人类需要什么
- 容错恢复 — 有了 Working Buffer 和 Compaction Recovery,context 丢失不再可怕
- 安全进化 — AI 可以自我改进,但有护栏防止跑偏
对于已经搭好 AI 助手基础架构的朋友,这个 Skill 值得认真研究。它把很多”最佳实践”系统化成了可操作的协议和检查清单。
Proactive Agent 是 Hal Stack 🦞 的一部分,由 AI 开发者 @halthelobster 创建,经过数千次对话实战检验。
「每天都要问自己:我能做什么让我的用户说『这太棒了,我都没想到要这个』?」