# Agent Framework 目录结构

> 框架与应用分层设计

---

## 核心架构

**框架层** (`agent/`): 核心代码、内置预设，可作为独立包发布

**应用层** (项目根目录): 项目特定配置，覆盖或扩展框架

---

## 框架层（`agent/`）

```
agent/
├── core/                       # 核心引擎
│   ├── runner.py               # AgentRunner
│   └── config.py               # AgentConfig, CallResult
├── execution/                  # 执行追踪
│   ├── models.py               # Trace, Step
│   ├── protocols.py            # TraceStore
│   ├── fs_store.py             # FileSystemTraceStore
│   └── tree_dump.py            # 可视化
├── memory/                     # 记忆系统
│   ├── models.py               # Experience, Skill
│   ├── protocols.py            # MemoryStore, StateStore
│   ├── stores.py               # 存储实现
│   └── skill_loader.py         # Skill 加载器（自动加载内置 skills）
├── tools/                      # 工具系统
│   ├── builtin/                # 内置基础工具
│   ├── advanced/               # 高级工具（第三方适配）
│   └── adapters/               # 外部集成
├── llm/                        # LLM 相关
│   ├── gemini.py
│   ├── openrouter.py
│   └── prompts/                # Prompt 工具
├── skills/                     # 框架内置 Skills（自动加载）
│   ├── core.md                 # 核心 skill，每次运行自动加载
│   └── browser_use/            # 浏览器自动化 skill
└── subagents/                  # 内置 Sub-Agent 定义
```

**实现**：
- 核心引擎：`agent/core/runner.py`
- 执行追踪：`agent/execution/`
- 记忆系统：`agent/memory/`（Skills 自动加载）
- 工具系统：`agent/tools/`
- LLM 集成：`agent/llm/`
- Skills：`agent/skills/core.md`（自动加载）+ `agent/skills/browser_use/`（按需加载）
- Sub-Agent 预设：`agent/subagents/`

---

## 应用层（项目根目录）

项目特定配置（可选）：

```
your-project/
├── skills/                     # 项目特定 Skills
├── subagents/                  # 项目特定 Sub-Agents
└── tools/                      # 项目特定工具
```

---

## 加载优先级

| 资源 | 框架预设 | 项目配置 | 优先级 |
|------|---------|---------|--------|
| Skills | `agent/skills/` | `./skills/` | 项目优先（`agent/skills/core.md` 总是自动加载） |
| Sub-Agents | `agent/subagents/` | `./subagents/` | 项目覆盖 |
| Tools | `agent/tools/builtin/` | `./tools/` | 手动注册 |

**实现**：
- Skills 自动加载：`agent/memory/skill_loader.py:load_skills_from_dir()`
  - 总是自动加载 `agent/skills/` 中的所有 skills（包括 `core.md`）
  - 可选加载 `skills_dir` 参数指定的额外自定义 skills
- Skills 工具动态加载：`agent/tools/builtin/skill.py` - 搜索路径 `./skills/` → `./agent/skills/`
- Sub-Agents 加载：按顺序加载配置，后加载的覆盖先加载的

---

## 使用方式

### 加载框架预设

```python
from agent import AgentRunner
from agent.llm import create_gemini_llm_call

# Skills 自动加载
# - agent/skills/core.md 总是自动加载
# - agent/skills/ 中的其他 skills 也会自动加载
runner = AgentRunner(
    llm_call=create_gemini_llm_call(),
    # skills_dir 可选：加载额外的自定义 skills
)
```

### 扩展框架（可选）

```python
# 加载项目特定的自定义 skills
runner = AgentRunner(
    llm_call=create_gemini_llm_call(),
    skills_dir="./skills",  # 额外加载项目自定义 skills
)

# 结果：agent/skills/ + ./skills/ 中的所有 skills 都会被加载
```

**Skills 加载机制**：
- **自动加载**：`agent/skills/` 中的所有 skills（包括 `core.md`）总是自动加载
- **可选加载**：通过 `skills_dir` 参数额外加载项目自定义 skills
- **动态加载**：通过 `skill` 工具运行时按需加载特定 skill

详见 [`SKILLS_SYSTEM.md`](../SKILLS_SYSTEM.md)

---

## 相关文档

- [Sub-Agent 配置](./sub-agents.md) - Sub-Agent 定义格式
- [Skills](./skills.md) - Skill 使用和编写
- [工具系统](./tools.md) - 工具注册和使用
