维护一个 AI Agent 系统(比如昵称为“龙虾”的系统),本质上是一个将个人工作方式工程化、产品化的过程。它旨在创造一个可复制、可升级、可协作的数字分身。你如何思考,你的行为习惯,日常工作流,已掌握的技能,乃至你希望未来具备的能力,都可以在这个系统中得到映射和实现。以往,使用同样的工具链需要不断重复尝试、思考与手动操作。而现在,你只需要完成一次“尝试-思考-落地”的闭环,剩下的重复性工作便可以交给你的 Agent 分身去持续执行。
更具体地说,这套系统像是在把你脑中的工作模式拆解为三类“可移植资产”:
1. 分身的性格与原则:你习惯如何处理问题?
memory/USER.md: 你的个人偏好(例如偏好的输出格式、默认工作环境、你的禁忌、你需要何种证据支持)。
memory/SOUL.md: 你的工作纪律(例如必须形成证据链、禁止主观臆测、结论必须可复现)。
这部分决定了你的分身“像不像你”。
2. 分身的知识与套路:你如何进行判断与问题定位?
memory/PATTERNS.md: 漏洞模式库、逆向工程套路、问题分类检查清单、Hook策略等。
- 针对特定角色的
agents/*/memory/PATTERNS.md: 将通用模式细化为角色专属知识(例如针对 selRef/ADRP+ADD 的识别模式、对 JEB 调用图封装的自动化识别)。
这部分决定了你的分身“强不强”,以及能否有效地复用历史经验。
3. 分身的肌肉与手:你如何实际操作与执行?
skills/ 目录 + MCP (Model Context Protocol): 对 adb、JEB、IDA、frida、git 以及各类脚本工具链的封装与调用能力。
这部分决定了你的分身“能不能真的替你干活”。
1. 龙虾的 Agent 是什么?
一个 Agent 代表一个具体的“人”或“角色”。这个 Agent 具备以下核心特性:
- 有职责:明确知晓自己的身份和任务目标。
- 有记忆:拥有
MEMORY.md(长期记忆)和 ACTIVE_CONTEXT.md(短期记忆/上下文)。
- 会思考:背后由大语言模型(LLM)驱动决策与推理。
- 有技能:
skills 是技能描述,而 tools 则是技能的具体实现。
2. 为什么采用这样的设计?
- 限制复杂度:更贴近人类解决复杂问题的思维方式,即“分而治之”,将大问题拆解为小问题。
- 方便协作:模拟真实世界中团队协作的模式,不同职责的 Agent 可以像团队成员一样分工合作。
3. 如何设计一个优秀的 Agent?
- 单一职责:一个 Agent 最好只专注于解决一类问题,例如 App 攻击面分析、PoC 生成、静态分析或动态验证。
- 方便解析:输出结果应尽可能结构化、格式化,如 JSON、YAML,以便被下游的 Agent 或系统直接消费。
- 结构清晰:一个 Agent 至少应包含以下组成部分:
agent.md 或 agent.yaml: 描述 Agent 的职责(做什么/不做什么)、输出格式、失败处理策略等。
4. Agent 设计模式
人设模式 (Persona)
顾名思义,此类 Agent 被赋予一个具备特定专业能力的角色身份。
id: attack-surface
name: Attack Surface Analyst
role: 分析组件导出、Intent 路径、PendingIntent 注入风险
skills:
- adb
- manifest-parser
- diff-analyzer
memory:
- attack_surface_patterns.md
工具型 Agent
一组特定工具的封装,例如 jeb-agent, ida-agent, frida-agent。有时这种模式也可以简化为 skills 直接提供。
流程型 Agent (Pipeline)
用于执行具有固定步骤的工作流,例如漏洞分析流水线。
pipeline-agent:
- step1: collect commits
- step2: analyze diff
- step3: classify vulnerability
- step4: generate poc
- step5: generate report
5. Memory 分层设计
前文主要讨论了多 Agent 环境下的架构与职能划分。在 Agent 系统中,Memory(记忆)同样关键,且需要分层设计。核心原因在于:不同类型的信息,其生命周期、稳定性和使用频率截然不同。
不同信息的“生命周期”差异
AI 记忆系统实际上管理着三种不同寿命的信息:
| 类型 |
生命周期 |
事例 |
| 长期稳定 |
几个月/几年 |
用户偏好、长期研究方向(例如“一名资深的移动安全研究员”) |
| 半稳定 |
几周/几月 |
技术模式、漏洞利用模式 |
| 短期 |
一次任务/会话 |
本次分析任务的详细记录、当前会话的上下文、使用的大模型及代理配置等 |
一个简单的目录结构示例如下:
memory/
USER.md
PATTERNS.md
DAILY/
分层设计的核心优势
- 避免上下文污染:防止短期、临时的信息污染长期稳定的核心知识。
- 减少 Token 成本:每次会话的 Prompt 中只需纳入必要的 Memory,避免携带全量历史数据。
- 适应不同 Agent 需求:每个 Agent 可能有其专属的知识库和 Prompt,Memory 系统需要与之适配。
- 防止记忆过时:便于对半稳定和长期记忆进行单独管理和更新。
- 方便自动学习:系统可以将验证成功的模式(如某种新的漏洞模式)自动归档到
PATTERNS.md 中。
- 快速启动与行为一致性:使 Agent 能基于清晰、稳定的记忆快速进入工作状态,并防止其行为因杂乱的日志信息而发生“漂移”。
因此,结合个人研究方向和习惯,一个更完善的 Memory 目录结构可以是:
memory/
USER.md # 长期:个人偏好
SOUL.md # 长期:核心原则与纪律
PATTERNS.md # 半稳定:通用模式
ANDROID_PATTERNS.md # 半稳定:平台专属模式
IOS_PATTERNS.md
DAILY/ # 短期:日常会话记录
6. 实战案例:我的“龙虾”骨架
针对我个人的日常安全分析工作流,我构建了如下所示的系统骨架:
~/.openclaw/workspace/
AGENTS.md # Agent 总览清单
SKILLS.md # 全局技能清单
memory/ # 全局记忆系统
USER.md
SOUL.md
PATTERNS.md
DAILY/
2026-03-03.md
agents/ # 各职能 Agent
00-orchestrator/ # 调度员
agent.yaml
persona.md
memory/ # Agent 私有记忆
NOTES.md
DAILY/
2026-03-04.md
10-diff-triage/ # 差异分析员
agent.yaml
persona.md
memory/
PATTERNS.md # 专属模式库
NOTES.md
DAILY/
2026-03-04.md
20-attack-surface/ # 攻击面分析师
agent.yaml
persona.md
memory/
PATTERNS.md
NOTES.md
DAILY/
2026-03-04.md
30-poc-designer/ # PoC 设计师
agent.yaml
persona.md
memory/
PATTERNS.md
DAILY/
2026-03-04.md
40-jeb-runner/ # JEB 执行器
agent.yaml
persona.md
memory/
PATTERNS.md
NOTES.md
DAILY/
2026-03-04.md
50-native-ios-ida/ # iOS/IDA 分析员
agent.yaml
persona.md
memory/
PATTERNS.md
NOTES.md
DAILY/
2026-03-04.md
60-frida-runtime/ # Frida 运行时
agent.yaml
persona.md
memory/
PATTERNS.md
NOTES.md
DAILY/
2026-03-04.md
全局记忆(workspace/memory/)包含的是通用知识,如个人偏好、通用分析思路和方法论,通常与具体的技术领域无关。而各个 Agent 的私有记忆则与特定的专业知识强相关,并包含其执行任务的局部日志。通过这样的架构,我们既能保持核心工作原则的一致性,又能让每个专业分身在其领域内不断深化和积累经验。
这种将人的思维与工作模式“代码化”、“资产化”的实践,正是构建高效、可复现 AI 工作流的核心。如果你也在探索类似的 Agent 系统设计,欢迎来 云栈社区 交流心得。