返回 FEED
AGENT2026-04-16

四层记忆 + Fat Skills + 协议层:个人 Agent 的完整技术栈

Harrison Chase 那篇 Harness Design 发布后,Av1dlive 花了三个月搭建了一套完整实现。这篇文章是 4,000 字的工程复盘,附完整源码和 folder structure。


核心洞察

薄 harness、厚文件层。

Harness 不思考,它只读文件、调工具、写日志、跑钩子。所有智能住在 skill 文件和 memory 文件里,protocols 执行边界约束。

这意味着:

  • 明天换掉 harness,什么都不丢
  • 明天换掉模型,什么都不丢
  • 唯一积累价值的是 skills、memory、protocols——都是 git 仓库里的 markdown 和 JSON

Folder Structure

.agent/
├── AGENTS.md                    # 根配置,harness 第一个读
├── harness/
│   ├── conductor.py             # 薄循环(~200行)
│   ├── context_budget.py        # token 分配管理
│   └── hooks/
│       ├── pre_tool_call.py     # 权限执行
│       ├── post_execution.py    # 自动写记忆
│       └── on_failure.py        # 升级 + 反思触发
├── memory/
│   ├── working/                 # 当前任务状态,易失
│   │   ├── WORKSPACE.md
│   │   └── ACTIVE_PLAN.md
│   ├── episodic/                # 历次运行发生了什么
│   │   ├── AGENT_LEARNINGS.jsonl
│   │   └── snapshots/
│   ├── semantic/                # 超越 episode 的抽象
│   │   ├── LESSONS.md
│   │   ├── DECISIONS.md
│   │   └── DOMAIN_KNOWLEDGE.md
│   ├── personal/               # 用户个人偏好
│   │   └── PREFERENCES.md
│   └── auto_dream.py            # 夜间压缩 + 整合
├── skills/
│   ├── _index.md               # 发现注册表
│   ├── _manifest.jsonl         # 机器可读元数据
│   └── [各技能目录...]
├── protocols/
│   ├── tool_schemas/           # 每个工具的 typed 接口
│   ├── permissions.md          # agent 能/不能做什么
│   └── delegation.md           # sub-agent 交接规则
└── tools/
    ├── memory_reflect.py
    ├── skill_loader.py         # 渐进式加载引擎
    └── budget_tracker.py

四层记忆详解

Working Memory

  • WORKSPACE.md + ACTIVE_PLAN.md
  • 每次任务开始加载,结束时清除

Episodic Memory

  • AGENT_LEARNINGS.jsonl:原始经验日志,每次交互追加
  • snapshots/:定期全量快照
  • 用途:告诉 agent "上次在这件事上你是怎么处理的"

Semantic Memory

  • LESSONS.md:提炼出的模式
  • DECISIONS.md:重大决策及理由(含日期、考虑过的替代方案、状态)
  • DOMAIN_KNOWLEDGE.md:领域知识
  • 用途:做决定前读,训练的是判断力而非过程

Personal Memory

  • PREFERENCES.md
  • 你的代码风格偏好、工作习惯、沟通方式
  • 是上下文,不是指令——告诉 agent 你是什么样的人,不是教它怎么做

自动梦境压缩循环

每天凌晨 3 点运行 .agent/memory/auto_dream.py

  • 压缩记忆
  • 将有价值的经验晋升到 LESSONS
  • 归档过时内容
  • git commit 结果

日志示例:

dream cycle: promoted 2, decayed 7, kept 31

这就是 agent 的自传——每一行都是一夜的学习。


失败处理钩子

on_failure.py 在每次失败时记录:

  • 时间戳、skill 名称、错误类型
  • 疼痛分数(自动给 8 分)
  • 上下文(前 300 字符)

如果 14 天内同一 skill 失败 3 次以上,标记为需要重写,疼痛分数升到 10。


常见反模式

问题表现解法
上下文膨胀加载 90K tokens 才能思考渐进式加载,只加载匹配 skill
技能过时API 变了,skill 还在自信跑旧指令manifest 每条加版本日期,60 天未触碰的标审
不安全组合两个安全 skill 合成危险操作约束放 pre_tool_call,不放在 skill 内部
教条执行agent 照着步骤做,哪怕已经不合理写目标和边界,不写驾驶指令
工作区过期WORKSPACE.md 任务结束后没清零梦境循环归档 2 天以上的工作区

Protocol 层

  • permissions.md:读在任何工具调用之前,被禁止就是被禁止
  • tool_schemas/:每个外部工具的 typed 接口
  • delegation.md:何时交给 sub-agent,交给谁

对于个人编程 agent,薄心跳 + 一个 permissions 文件就够了。在生产系统上跑 agent,最终你会需要完整的 tool schemas 和审批钩子——但先跑几个星期的薄版本,它会告诉你 guardrail 具体要加在哪里。


架构核心原则

这套系统的 thesis:

模型可以随时换。skills 和 memory 换不了。它们编码了你的特定错误、你的特定决策、你的特定工作方式。

拥有你的记忆。拥有你的 skills。放在任何人都拿不走的 plain files 和 git 里。