engineering deep-dive

NanoClaw 如何用 Claude Agent SDK 在 500 行代码内构建完整的 AI 助手

NanoClaws.io

NanoClaws.io

@nanoclaws

2026年2月26日

8 分钟阅读

NanoClaw 如何用 Claude Agent SDK 在 500 行代码内构建完整的 AI 助手

每个软件项目都有这样一个时刻:你意识到自己一直在造错误的轮子。你花了好几周写消息路由器、工具执行引擎、对话状态管理器和重试系统——然后你发现 AI 提供商已经把这些全做了,比你做得更好,而且只需一个 API 调用。

这个时刻催生了 NanoClaw 的架构。整个核心——将一条 WhatsApp 消息转化为带有工具调用、网页浏览、文件访问和多轮对话的 AI agent 响应——大约 500 行 TypeScript。不是 500 行胶水代码导入了 50000 行框架,而是总共 500 行,构建在 Anthropic 的 Claude Agent SDK 之上。

第一次阅读源码的开发者通常先是不敢相信,然后问出那个关键问题:"剩下的代码在哪?"

Claude Agent SDK 到底做了什么

大多数 AI agent 框架的存在是因为,在历史上,语言模型 API 是无状态且简单的。你发送一个 prompt,得到一个回复。如果你想要工具调用,你得自己构建工具执行循环。如果你想要多轮对话,你得自己管理消息历史。如果你想让模型在多个工具之间做选择,你得自己构建路由逻辑。

Claude Agent SDK 从根本上改变了这个等式。SDK 不只是调用 Claude API——它运行一个 agent 循环。你给它一个系统提示词、一组工具和一条用户消息。SDK 处理其余一切:它将消息发送给 Claude,接收响应,检查 Claude 是否想使用工具,执行工具,将结果发回给 Claude,然后重复直到 Claude 产生最终响应。整个工具调用循环——大多数框架花费数千行来实现的东西——只是一个函数调用。

这不是一个薄封装。SDK 处理流式传输、重试逻辑、token 计数和对话状态。它管理 Claude 和工具之间跨多轮的交互,处理工具执行失败和上下文窗口限制等边界情况。NanoClaw 不需要实现的复杂性并没有消失——它被下沉到了一个由 Anthropic 工程团队维护的、经过充分测试的 SDK 中。

NanoClaw 实际构建了什么

如果 SDK 处理了 agent 循环,那 NanoClaw 的 500 行代码到底做了什么?答案是循环周围的一切——那些运行个人 AI 助手(而不仅仅是调用 API)所特有的部分。

第一个职责是频道集成。NanoClaw 通过 Baileys 库连接 WhatsApp,接收消息,并将它们路由到正确的 agent 容器。这是"有人在 WhatsApp 上发了一条消息"和"一个 agent 需要处理这条消息"之间的桥梁。代码不复杂,但不可或缺——没有它,agent 就无法触达用户已经在使用的平台。

第二个职责是容器编排。每个 agent 对话都在自己的 Linux 容器中运行——macOS 上用 Apple Container,Linux 上用 Docker。NanoClaw 启动容器、挂载正确的目录、通过 stdin 传递密钥并收集响应。这是防止被攻破的 agent 访问沙箱外任何内容的安全边界。容器生命周期管理大约 80 行代码,但这 80 行是一个可以被信任处理真实凭证的 agent 和一个不能被信任的 agent 之间的区别。 第三个职责是持久化记忆。NanoClaw 维护一个 SQLite 数据库,存储对话、群组状态和定时任务。每个 WhatsApp 群组都有自己的 CLAUDE.md 文件,作为该群组 agent 的长期记忆。记忆系统很简单——这是刻意为之——因为记忆的复杂部分(决定什么相关、回忆什么、如何使用上下文)由 Claude 自身处理。

第四个职责是定时任务。用户可以让 agent 在特定时间做事——"下午 3 点提醒我"或"每天早上检查这个网站"。NanoClaw 的类 cron 调度器在正确的时间触发 agent 容器,这是一个小但真正实用的功能,将被动的聊天机器人变成了主动的助手。

为什么 500 行很重要

行数不是虚荣指标。它直接衡量了维护面、bug 面和理解系统所需的认知负荷。

当 NanoClaw 核心出现 bug 时,它只可能藏在 500 行中的某处。一个开发者可以在一小时内读完整个代码库,理解每一个决策。相比之下,拥有 50000 行核心代码的框架——找一个 bug 意味着在抽象层中穿行,理解插件系统,在层层间接调用中追踪执行流程,而这些抽象可能支持的是你根本用不到的功能。

安全影响同样具体。每一行代码都是潜在的漏洞。NanoClaw 500 行的核心攻击面比大多数框架的配置解析器还小。容器隔离、stdin 密钥传递、挂载白名单——这些安全特性的实现代码小到可以在一个下午完成全面审计。

升级也很简单。当 Anthropic 发布新版 Claude Agent SDK,带来更好的工具调用、更快的流式传输或新功能时,NanoClaw 只需更新一个依赖就能获得这些改进。不需要更新框架抽象层来暴露新的 SDK 特性。SDK 就是框架。

不造轮子的哲学

NanoClaw 架构中最难的部分不是构建它——而是决定什么不构建。添加自定义工具执行引擎、复杂的记忆检索系统、多提供商抽象层、插件市场的诱惑——这些都是其他框架已经构建的东西,也都是 NanoClaw 刻意没有的东西。

这些功能中的每一个都会增加数千行代码、数十个潜在 bug 和数周的维护负担。而且每一个都会重复 Claude Agent SDK 已经提供的功能,或者 Claude 自身比任何手写代码都能更好处理的功能。

结果是一个项目,其中有趣的决策是架构性的,而非实现性的。容器应该如何隔离?密钥应该如何传递?记忆应该如何按群组划分?这些才是个人 AI 助手真正重要的问题,也是 NanoClaw 这 500 行代码致力于回答的问题。

下次你评估 AI agent 框架时,不要数功能,数行数。行数最少的框架不是最弱的——它可能是那个对问题理解得足够深刻,从而让 AI 提供商来做重活的框架。

保持关注

获取新版本发布、集成和 NanoClaw 开发动态。无垃圾邮件,随时退订。