18-local-filesystem-first-agent-encapsulation.md 4.13 KB

18. Local File-System First 与 Agent 完全自治架构 (v3.5)

1. 架构演进背景

在早期的 LemonBoss 设计中,技能 (Skills)、对话日志 (Conversations)、系统配置和 Agent 实例是分离的。这导致了三个核心问题:

  1. 全局耦合污染:所有的 Skill 堆砌在外部的 repo/skills/ 中,当 Innovator 创建新的子 Agent 能力时,很容易造成命名空间冲突或权限越界。
  2. 缺乏运行闭环:前端、日志存储和运行时配置需要依赖 SQLite 或独立的全局缓存映射,系统状态难以通过简单的文件复制进行迁移和备份。
  3. Claude CLI 兼容性冲突:Claude Code CLI 默认从工作空间目录底下的 .claude/skills/ 挂载原生能力,而我们原本的自定义 skills/ 与其天然隔离,导致大模型在本地原生工具和自定义 Agent 调度间产生严重的幻觉或抢跑情况。

2. Agent 的“完全封装” (Encapsulation)

系统现已全线迁移至 Local File-System First 和 “Agent 就是微容器” 的架构。全局根目录下的 skills/ 与数据库已被彻底移除。现在的每一位 Agent 都是一个 100% 便携的“自治微容器”。

2.1 Agent 内部目录结构闭环

所有 Agent(如 innovator-001)统一收拢在 data/agents/{agentId}/ 下。其数据组织如下:

data/agents/innovator-001/
  ├── config.json         ← Agent 基础运行配置项
  ├── identity.md         ← Agent 姓名、Emoji 及基础设定
  ├── user.md             ← 面对的用户画像预设
  ├── soul.md             ← Agent 的性格特征与边界
  ├── tools.md            ← Agent 允许使用的外部工具白名单
  ├── memory/             ← Agent 长短期记忆数据库
  ├── conversations/      ← Agent 所有的历史对话记录(原全局级映射下放)
  │   └── {convId}/
  │       ├── meta.json
  │       ├── history.json
  │       └── messages.log
  ├── agent.md            ← 【核心】Persona 指令(负责统驭“我是谁”)
  └── .claude/
      └── skills/         ← 该 Agent 本人拥有的独占子技能挂载区
          ├── main_skill/
          │   └── SKILL.md ← 【核心】Workflow 指令(负责指导“我专业怎么做”)
          ├── meta_hunt/
          └── meta_digest/

2.2 灵肉分离 (Persona vs Capability)

在设计上,将传统臃肿的宏大提示词进行了概念切分:

  • agent.md: 这是一个轻量级的占位符,仅告知 LLM 它的宏观定位(例如:“你是 Innovator 编排总控大脑…”)并以引用指针的方式要求其遵循 main_skill。
  • .claude/skills/main_skill/SKILL.md: 这才是其实际作业指南(包含编排语法 [CALL:xxx] 规则、反思规则矩阵、生成文件的指令路径逻辑)。这种划分让 LLM 启动时能像挂载可执行程序一样拥有天然的边界感,同时也完美迎合了 Claude MCP 的结构体系。

3. 多路并发与无缝切盘

由于实现了 Agent 单体的绝对封闭自治,后台 Node 服务 server/routes/agent-chat.js 也顺势进行了架构级优化:

  1. 并发解析:通过对输出流的拦截,现在单次对话可以触发一个纯文本中包含了多个 [CALL:] 块的调度池。底层的 AgentManager 将利用 Promise.all 齐发请求到各个挂载的 SubAgent 的专用沙盒中执行任务。
  2. 零配置扫描:服务器不再静态维护全系统的技能库表,而是启动热加载并遍历所有的 data/agents/*/.claude/skills/ 节点。用户在网页端切换 Agent 头像时,后端路由从对应沙盒目录吐出隔离的 conversations List,界面实现极致丝滑的无状态切盘和防死链。
  3. 动态生成:meta_creator 被赋予了全权创世能力。它不再只生成一个孤零零的脚本文档,而是通过 AgentScaffold.js 的引擎直接在 data/agents/ 下开辟一个新的隔离目录,灌入完整的六大配置文件。一个新能力(Agent)的诞生,即代表着文件系统的一次干净合规的增量。