12

全流程串联

从用户输入到 Agent 响应的完整之旅

场景:用户说「帮我修复 login.py 中的 Bug」

让我们完整追踪这个请求在 OpenHarness 中的每一步:

第 1 步:CLI 入口

用户在终端输入请求。CLI(命令行界面)接收到文字后,将其包装成一条用户消息(User Message),传递给 Engine。 📂 涉及代码:cli.py → 解析命令行参数和输入

第 2 步:Engine 初始化

Engine 准备 Agent Loop 需要的所有组件: • 加载系统提示词(System Prompt) • 注入 MEMORY.md 中的记忆 • 准备工具列表(内置 + MCP) • 初始化权限检查器 📂 涉���代码:engine/query_engine.py → 组装运行上下文

第 3 步:Agent Loop 第一轮

消息被发送给 LLM(通过 Anthropic API)。LLM 分析请求,决定先读取文件: 返回:tool_use → Read(file_path="login.py") 📂 涉及代码:engine/query.py → run_query 循环

第 4 步:Hook + 权���检查

在执行 Read 工具之前: 1. PreToolUse Hook 被触发 → 记录日志 2. PermissionChecker 检查 → Read 是只读操作,默认模式下自动通过 📂 涉及���码:hooks/executor.py + permissions/checker.py

第 5 步:工具执行

Read 工具被执行: • 打开 login.py 文件 • 读取内容 • 包装成 ToolResult 返回 结果被添加到消息历史中。 ���� 涉及代码���tools/file_read.py → execute()

第 6 步:Agent Loop 第二轮

LLM 看到了文件内容,发现第 42 行有一个条件判断写反了。决定修复: 返回:tool_use → Edit(file_path="login.py", old_string="if user == None", new_string="if user is not None") 这次 Edit 是写入操作。在默认模式下: • Hook 触发 • 权限检查 → 需要用户确认 • 用户在终端看到确认提示,点击「允许」 • Edit 工具执行修改

第 7 步:Agent Loop 第三轮

LLM 看到修改成功,决定运行测试确认: 返回:tool_use → Bash(command="python -m pytest test_login.py") 用户确认后,测试运行通过。

第 8 步:循环结束

LLM 认为任务完成,返回最终响应(stop_reason="end_turn"): 「已修复 login.py 第 42 行的 Bug。问题是条件判断 `if user == None` 应该改为 `if user is not None`。测试已通过。��� Agent Loop 结束,结果显示在终端。

第 9 步:记忆(可选)

如果在过程中发现了值得记住的信息(比如这是一个反复出现的 Bug 模式),Agent 会写入记忆文件,供下次对话参考。

全流程总结

让我们回顾涉及的所有子系统: 1. CLI / UI → 用户界面 2. Engine → Agent Loop 核心循环(3 轮) 3. API → 与 LLM 通信(3 次调用) 4. Tools → Read、Edit、Bash(3 个工具) 5. Hooks → PreToolUse / PostToolUse(每次工具前后) 6. Permissions → 读取自动通过、写入需确认(2 次确认) 7. Memory → 可选的跨会话记忆 看到了吗?一个简单的「修复 Bug」请求,就涉及了 OpenHarness 的大部分子系统。这就是 Harness 的威力 —— 所有组件协同工作,让 Agent 能完���复杂任务。
📌 关键要点
所有概念串联起来了
恭喜你完成了全部 12 章的学习!现在你理解了:Agent 是什么、Harness 的五大能力、Agent Loop 循环、工具系统、权限控制、Hook 生命周期、技能按需加载、记忆持久化、MCP 标准协议、多 Agent 协作,以及它们如何在一个真实请求中协同工作。

下一步该做什么?

现在你对 OpenHarness 有了全面的理解,可以考��: 🔍 阅读源码 OpenHarness 只有约 11,700 行代码,按照这门课的���序阅读会非常顺畅。 🔧 写一个自定义工具 继承 BaseTool,实现自己的工具,注册到工具列表中。 📚 编写一个 Skill 为你的项目或团队编写专属技能文件。 🌐 搭建 MCP Server 把你常用的服务封装成 MCP Server,让 Agent 能直接使用。 🤝 贡献代码 OpenHarness 是开源的,欢迎贡献代��和想法。
🧠 检验理解
在「修复 Bug」的完整流程中,Agent Loop 一共循环了几轮?
🧠 检验理解
在默认权限模式下,这个流程中哪些操作需要用户确认?