在这里插入图片描述

TL;DR

Simon Willison 用 Claude Fable 5 从零搭建了一个 Claude Code 风格的 Python 编码 Agent,已发布到 PyPI。本文拆解它的核心架构——5 个工具、一个 Agent 主循环、以及不到 200 行就能跑起来的完整实现,附上可直接运行的代码和踩坑提示。

1. 背景:为什么还要自己搭一个 Coding Agent?

Claude Code、Codex、Cursor——市面上的 AI 编码工具已经够多了。但 Simon Willison 决定自己动手,理由很直接:他的 LLM 库 已经演化成一个 Agent 框架,他想验证它能不能支撑一个完整的 coding agent。更重要的是,自己搭意味着你能理解每一行代码在做什么——这恰好呼应了 Geoffrey Litt 在 AIE 大会上说的"理解才能参与"。

他用 Claude Fable 5 写了 spec、实现了所有代码、跑了测试、写了文档,最后发布到 PyPI。你可以这样安装:

uvx --prerelease=allow --with llm-coding-agent llm code

2. 核心架构:五个工具 + 一个主循环

llm-coding-agent 的架构极其简洁。它只有 5 个工具,每个工具就是一个 Python 函数:

工具 功能 对应 Claude Code 的哪个能力
edit_file 精确字符串替换(old_string → new_string) Edit 工具
execute_command 在项目根目录执行 shell 命令 Bash 工具
list_files 按 glob 模式列出文件 Glob 工具
read_file 读取文件,返回 cat -n 格式的行号输出 Read 工具
write_file 创建或覆盖文件(自动创建父目录) Write 工具

Fable 还贴心地加了一个 search_files 工具做正则搜索——这其实是 Simon 没要求的,但 Fable 自己判断应该加上。

Agent 主循环和 Claude Code 一样:读用户指令 → 调用工具 → 拿结果 → 继续调用工具 → 返回最终结果。关键区别在于,llm-coding-agent 把这个循环暴露为 Python API:

from llm_coding_agent import CodingAgent

agent = CodingAgent(
    model="gpt-5.5",      # 也可以用 claude-sonnet-5-20250914
    root="/path/to/project",
    approve=True           # False 就是 --yolo 模式
)
agent.run("Fix the failing test in tests/test_parser.py")

3. 上手实操:5 分钟搭起来

第一步,确保有 Python 3.10+ 和 uv:

# 安装 uv(如果没有)
curl -LsSf https://astral.sh/uv/install.sh | sh

# 安装 llm-coding-agent(预发布版)
uvx --prerelease=allow --with llm-coding-agent llm code

第二步,配置 API key。llm-coding-agent 复用了 LLM 库的配置,所以如果你已经配过 llm keys set openai,直接就能用。没有的话:

pip install llm --break-system-packages
llm keys set openai
# 粘贴你的 OpenAI API key

第三步,跑起来:

# 交互模式(需要你审批每个操作)
llm code

# --yolo 模式(自动执行,适合小任务)
llm code --yolo

# 只允许特定命令
llm code --allow "pytest*" --allow "git diff*"

试试让它写个 ASCII 艺术时钟:

llm code --yolo
> mkdir /tmp/demo && cd /tmp/demo && create a simple Python CLI app for telling the time in ascii art

Simon 实测的结果——GPT-5.5 生成了一个完整的 Swift 命令行 ASCII 时钟。你的体验取决于模型,但核心循环是一样的。

4. 踩坑提示

工具权限控制是重点。 --yolo 模式会让 Agent 自动执行所有命令,包括 rm -rf。建议日常使用 --allow 白名单:

llm code --allow "pytest*" --allow "git*" --allow "python*"

模型选择影响很大。 Fable 5 和 GPT-5.5 在编码任务上表现最好,但成本也最高。Simon 在 7 月 3 日的笔记里分享了一个技巧:告诉 Agent “对小任务用 Sonnet/Haiku 做子代理,自己判断”——这能省不少 token。

这个项目还在 alpha 阶段。 功能远不如 Claude Code 完善,但代码量极少(核心不到 500 行),非常适合学习和魔改。

5. 这意味着什么

llm-coding-agent 的意义不在于"又一个编码工具",而在于它证明了 coding agent 的核心循环可以压缩到几百行 Python。当你能看懂每一行代码时,你对 AI 写代码这件事的掌控力就完全不同了——你不会再盲目信任,而是能精确判断它哪里可能出错。

正如 Armin Ronacher 在 7 月 4 日的文章里指出的,即使是 Opus 4.8 这样的顶级模型,在自定义工具调用上也可能出错。理解工具层的实现细节,能帮你更快定位问题。

6. 参考资料

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐