🍃作者介绍:25届双非本科网络工程专业,阿里云专家博主,深耕 AI 原理 / 应用开发 / 产品设计。前几年深耕Java技术体系,现专注把 AI 能力落地到实际产品与业务场景。
🦅个人主页:@逐梦苍穹
🐼GitHub主页:https://github.com/XZL-CODE
✈ 您的一键三连,是我创作的最大动力🌹

1、前言

这是系列文章的第三篇,也是最后一篇。

第一篇,我拆解了 OpenClaw 的五个核心架构问题——Heartbeat+Cron双调度引发的5个已确认Bug、子Agent回调无限循环烧掉1.28亿Token、Session持久化的熵增死亡螺旋。结论是:OpenClaw试图用工程约束驯服模型的"过度智能",结果工程本身成了最大问题。
⬇️:
OpenClaw的工程化困局:1.28亿Token灾难背后的架构反思

第二篇,我设计了 NewClaw 的架构——借鉴 Claude Code 的单循环+渐进式信任+Bash万能哲学,结合 OpenClaw 的产品定位,用事件驱动替代双调度,用外部记忆服务替代Session熵增。结论是:NewClaw = CC架构哲学 + OpenClaw产品定位 + 事件驱动 + 渐进式信任。
⬇️:
为什么90%的AI伴侣项目死于工程问题?从OpenClaw的崩溃到NewClaw的重生

这一篇,回答最关键的问题:做出来了吗?跑起来了吗?

先亮数据:

  • 47个TypeScript源文件,零编译错误
  • 6.5小时连续自主运行(03:15 - 09:49)
  • 600+次工具调用,约25轮Mission执行
  • 3次Ctrl+C手动重启,每次自动恢复Mission状态
  • 全程零崩溃

项目已开源,MIT License。

写在前面:

NewClaw 目前是 v0.1 个人实验项目,不是生产级框架。在阅读本文时,请注意以下几点:

  1. 测试规模有限:文中的 6.5 小时实战数据来自单个 Mission 任务、单用户、单机运行,没有经过大规模并发和长期稳定性验证。
  2. 务实降级:设计文档中描述的一些能力在实现中做了降级——比如向量检索用的是 TF-IDF 而非 sqlite-vec,bash 执行没有 Docker 沙箱隔离,只有字符串级别的危险命令拦截。这些取舍在文中会坦诚说明。
  3. 强模型依赖:NewClaw 的"少约束"哲学建立在模型能力足够强的前提上。实测使用的是 qwen3.5-plus(通义千问),换用更弱的模型效果可能会明显下降。
  4. 个人学习项目:我的初衷是通过实践来验证 Claude Code 架构哲学在 AI 伴侣场景下的可行性,而非做一个对标 OpenClaw 的竞品。开源是为了和社区交流思路。

本文对 OpenClaw 的架构分析基于其公开源码和社区 Issue 讨论,目的是学习借鉴。OpenClaw 在产品定位、社区运营和生态建设上的成功有目共睹——20 万 Star 不是凭空来的。我从中学到了很多,NewClaw 的产品定位本身就来源于 OpenClaw 的启发。
在这里插入图片描述

2、快速上手

三步跑起来。

2.1 Clone

git clone https://github.com/XZL-CODE/NewClaw.git
cd NewClaw
npm install

2.2 配置

复制配置模板并填入你的LLM API Key:

cp config.example.json config.json

最小配置只需要一个LLM Provider。以DeepSeek为例:

{
  "llm": {
    "provider": "deepseek",
    "apiKey": "sk-your-key",
    "model": "deepseek-chat"
  }
}

NewClaw 预配置了12个LLM厂商(Anthropic、OpenAI、DeepSeek、Moonshot、Dashscope、Zhipu、Gemini、Ollama、LM Studio、vLLM、OpenRouter、SiliconFlow),切换只需改provider字段。本地模型(Ollama/LM Studio/vLLM)不需要apiKey。

2.3 运行

# Terminal模式(最简单)
npm start

# 或指定通道
npm run start:web    # Web GUI
npm run start:feishu # 飞书

5个通道可选:Terminal、Web GUI、Feishu、Telegram、Discord。Terminal模式开箱即用,其他通道需要额外配置对应的Bot Token。

3、实战故事:让AI去"社交"

理论好不好,要看实战。

我选了一个足够复杂的场景来测试NewClaw:让它自主探索 InStreet AI Agent社交平台。任务很简单,通过飞书给它发了一条消息:

自主探索InStreet平台——注册、验证、炒股、发帖、去酒馆社交,沉淀方法论。全程禁止问我。

然后我就去睡了。

3.1 它做了什么

6.5小时后(03:15 - 09:49),我起来看结果。

NewClaw 的Mission引擎接管了整个任务。约25轮Mission run,每轮3-30个循环(大多数跑满30 loops上限),总计600+次工具调用。最长单轮处理时间423,532ms,约7分钟。

到我查看时(第238轮),它已经完成了:

  • 竞技场:持仓稳定,总资产1,002,628元(+0.26%),4持仓分散策略
  • 社区:Score 15点,通过深度评论稳定积累
  • 预言机:2个仓位已建立
  • 酒馆:注册成功,完整流程(买酒 -> 喝酒 -> 留言 -> 涂鸦)全部走通

3.2 "Bash就是一切"的验证

这次实战最让我意外的发现:项目中曾预写了25个InStreet专用工具,最终全部删除——因为模型用bash+curl就搞定了一切。
在这里插入图片描述

没有一行专用InStreet API工具代码。模型拿到bash工具后,自主完成了:

# 注册账号
curl -X POST https://instreet.com/api/v1/register \
  -H 'Content-Type: application/json' \
  -d '{"username":"newclaw_agent","email":"..."}'

# 查询持仓
curl -s https://instreet.com/api/v1/arena/positions \
  -H 'Authorization: Bearer xxx' | jq '.data'

# 发帖
curl -X POST https://instreet.com/api/v1/community/posts \
  -H 'Authorization: Bearer xxx' \
  -d '{"content":"..."}'

这正是Claude Code团队的核心发现——Ben Mann说的"Don’t build for today’s model, build for the model six months from now"——当模型足够强时,最朴素的glob+grep效果超过精心设计的RAG,最基础的bash+curl就能替代一切专用工具。

25个精心设计的工具,不如一个bash。这不是偷懒,是对模型能力的信任。

3.3 故障与自动恢复

6.5小时不是一帆风顺的。系统经历了4种故障,全部自动恢复:

在这里插入图片描述

故障1:SQLite语法错误(07:14)

Error: no such column: ""

系统记录错误但不崩溃,下一轮循环继续执行。单循环架构的好处——一个工具调用失败不会传染到整个系统。

故障2:阿里云API 429限流(07:57)

Throttling.RateQuota: Request was denied due to request throttling.

该轮只跑了5个loops就退出,后续轮次正常恢复。事件驱动的好处——限流了就歇会儿,有事件了再继续,不需要复杂的重试逻辑。

故障3:3次Ctrl+C手动重启(07:03, 07:23, 08:28)

每次重启后:

Restored 1 active mission(s)

Mission持久化在SQLite中,进程重启后自动恢复。这是NewClaw替代OpenClaw Session持久化方案的核心优势——不是把整个对话历史存下来(那会导致熵增),而是只持久化Mission的状态和进度。

故障4:飞书WSClient断线重连(09:13)

[ws] reconnect

WebSocket断线后自动重连。通道层的问题不影响核心循环。

3.4 并行处理验证

Mission在后台跑的同时,我通过飞书发了几条消息测试:“你在干嘛”、“你好”、“记得我是谁么”。

系统同时处理对话和Mission,互不阻塞。这得益于事件驱动架构——用户消息和Mission事件进入同一个事件收集器,主循环统一处理,不需要多线程。

4、从Log看架构验证

用实战数据逐项验证NewClaw的五个设计原则。

4.1 单线程主循环

master-loop.ts,313行。最多25轮循环安全限制。

InStreet实战中,约25轮Mission run,每轮3-30个循环。单线程意味着没有并发竞争,没有死锁,没有状态不一致。SQLite语法错误发生在某一轮的某一次工具调用中,不会传染到其他轮次。

对比OpenClaw的Heartbeat+Cron双调度——两个独立调度器并发访问同一个Session,5个已确认Bug。

4.2 事件驱动替代轮询

event-collector.ts,179行。核心是waitForEvent/wakeUp异步等待机制。

InStreet实战中,API 429限流时系统自然暂停,有新事件时自动唤醒。不需要定时器,不需要轮询,不需要重试队列。

对比OpenClaw的60秒Heartbeat——无论有没有事发生都执行,空转消耗Token。

4.3 渐进式信任

四级权限边界,permission.ts,100行:

级别 说明 示例
L0 FREE 无需确认 读文件、搜索、web_fetch
L1 NOTIFY 执行后通知 发消息、写记忆
L2 APPROVE 执行前审批 写文件、执行bash命令
L3 FORBIDDEN 禁止执行 危险系统命令

InStreet实战中,Mission模式下bash命令自动提权到L1(通知但不阻塞),因为Mission本身就是用户授权的自主任务。这就是"渐进式信任"——不是一刀切地禁止或放行,而是根据上下文动态调整。

4.4 外部记忆替代Session

三层记忆架构,全部存储在SQLite WAL + FTS5中:

  • Fact记忆(FTS5全文检索):用户偏好、平台信息等结构化知识
  • Episode记忆(TF-IDF相似度):交互片段的摘要
  • Reflection记忆(LLM驱动):compact触发时调用LLM生成高阶洞见

混合检索权重0.4/0.6。多用户隔离——不同通道、不同用户的记忆互不污染。

InStreet实战中,模型通过memory_write工具把InStreet平台的API格式、认证方式、各模块用法存为Fact记忆。下一轮Mission启动时,context-assembler自动检索相关记忆注入上下文——不需要带着7069条消息历史。

对比OpenClaw的Session持久化——170k Token/次的上下文窗口,越用越慢。

4.5 最小工具集

20个核心工具:bash, read_file, write_file, search_files, grep_content, web_search, web_fetch, send_message, memory_read, memory_write, set_timer,加上9个mission_*工具。

没有InStreet专用工具,没有特定平台的API封装。模型用bash+curl完成了所有HTTP交互。

Claude Code的经验在这里得到了完美验证:给模型一个万能工具(bash),比给它25个专用工具效果更好。因为专用工具限制了模型的行为空间,而bash给了它无限可能。

5、设计到实现的取舍

做工程不是写论文,必须务实。这里坦诚讲几个取舍。
在这里插入图片描述

5.1 sqlite-vec换成TF-IDF

设计阶段计划用sqlite-vec做向量检索。实现时发现native编译在不同平台上问题不断。MVP阶段,TF-IDF的文本相似度检索够用——InStreet实战中记忆检索的召回质量足以支撑6.5小时的自主运行。

后续可以在不改接口的前提下替换为向量检索。

5.2 Docker沙箱换成字符串检测

设计阶段计划用Docker做bash命令的沙箱隔离。实现时这是一个优先级选择——当前只有危险命令的正则黑名单检测(rm -rf /mkfs之类)。

对于个人使用和受控环境足够,生产环境部署需要升级。

5.3 反思记忆的迭代

最初的反思记忆是纯模板拼接——把多条Episode记忆按模板拼成一段总结。实际使用中发现效果不好,迭代为LLM驱动的方案:compact触发时调用LLM生成高阶洞见,质量明显提升。

5.4 25个工具的意外删除

这是最有趣的取舍——它不是设计决策,而是实战发现。

预写了25个InStreet专用工具(注册、验证、买入、卖出、发帖、喝酒…),代码都写好了。测试时发现模型根本不需要这些工具,用bash+curl的效果反而更好:

  • 专用工具有固定的参数格式,模型必须适配
  • bash+curl让模型自由组合请求,灵活处理各种边界情况
  • 模型遇到API变更时能自主调整curl参数,专用工具却需要人工更新

于是全部删除。这不是偷懒,是CC哲学的意外验证。

6、项目架构全景

在这里插入图片描述

简要介绍核心模块。

6.1 主循环(master-loop.ts,313行)

单线程事件循环。等待事件 -> 组装上下文 -> 调用LLM -> 执行工具 -> 循环。最多25轮安全限制。这是整个系统的心脏,也是最简单的部分。

6.2 事件收集器(event-collector.ts,179行)

统一收集所有通道的用户消息、Mission事件、定时器事件。核心API就两个:waitForEvent(异步等待)和wakeUp(唤醒主循环)。

6.3 上下文组装器(context-assembler.ts,184行)

每轮循环开始时,组装完整的LLM调用上下文:身份提示词 + 相关记忆 + 当前任务 + 可用工具列表。多用户隔离在这一层实现。

6.4 Mission引擎(runner.ts 393行 + store.ts 357行)

后台自主任务的执行引擎。两种模式:sprint(5分钟短冲刺)和patrol(30分钟长巡逻)。每轮最多30个循环、10分钟安全上限。异步任务队列最大并发5。

Mission的状态持久化在SQLite中,进程重启可恢复——InStreet实战中3次Ctrl+C都证明了这一点。

关于调度机制的坦诚说明:

Mission 的调度底层是 setTimeout 链——一轮执行完后,setTimeout(runIntervalMs) 调度下一轮。这和 OpenClaw 的心跳在底层原理上有相似之处,都是定时触发。我不回避这一点。

但核心区别不在"怎么触发",而在"触发后做什么":

维度 OpenClaw 心跳 NewClaw Mission
触发后的执行内容 固定检查清单(HEARTBEAT.md) 模型自主推理决定做什么
间隔由谁决定 硬编码配置 模型动态切换(sprint/patrol)
上下文 在主 Session 中跑(170k token/次) 独立 context,不污染主对话
空转消耗 每次心跳都跑完整推理 没有 Mission 时零消耗
自主控制 模型可自己续跑、暂停、调频

如果要做到完全的纯事件驱动 Mission——由外部事件(Webhook、文件变更等)触发 Mission 继续执行,而不依赖定时器——这是未来可以改进的方向,当前版本没有做到。

6.5 权限系统(permission.ts,100行)

四级权限边界(L0 FREE / L1 NOTIFY / L2 APPROVE / L3 FORBIDDEN),根据工具类型和执行上下文动态判定。Mission模式下自动提权,交互模式下严格审批。

6.6 记忆系统

三层记忆(Fact + Episode + Reflection),SQLite WAL + FTS5存储,零外部服务依赖。混合检索权重0.4/0.6。所有数据本地存储,不依赖任何云服务。

6.7 LLM适配层

12个厂商预配置,统一的调用接口。切换Provider只需改配置,不需要改代码。支持本地模型(Ollama/LM Studio/vLLM),离线可用。

6.8 插件系统

MCP(Model Context Protocol)客户端 + 插件注册机制。可以通过MCP协议接入外部工具服务,扩展NewClaw的能力边界。

7、开源信息

7.1 仓库

  • GitHubhttps://github.com/XZL-CODE/NewClaw
  • License:MIT
  • 语言:TypeScript
  • README:中英文双版本(1:1 对应,487行),含架构图、快速上手、完整模块说明

README 覆盖的内容一览:

章节 内容摘要
背景故事 CC vs Cursor 胜负逆转的来龙去脉,OpenClaw 的五大架构困境
五大设计原则 单循环/渐进式信任/Bash万能/事件驱动/AI提案人类决策
快速开始 git clone → 填 API Key → npm run dev,三步跑起来
核心架构 9大核心模块的详细职责与代码行数
三层记忆 Fact(FTS5) + Episode(TF-IDF) + Reflection(LLM) 完整说明
四级权限 L0 FREE ~ L3 FORBIDDEN 配置方法
Mission 引擎 Sprint/Patrol 双模式、9个工具、调度机制坦诚说明
20个核心工具 完整工具列表 + 权限分配
12个 LLM 厂商 环境变量自动检测,覆盖国内外主流厂商
多通道 Terminal/Web/飞书/Telegram/Discord 使用说明
扩展机制 MCP 协议接入 + 插件系统
与 OpenClaw 对比 8个维度的横向对比表格

7.2 贡献指南

欢迎参与贡献,以下方向特别欢迎:

  • Docker沙箱:替换当前的字符串检测方案,提供真正的bash命令隔离
  • 向量检索:用sqlite-vec或其他方案替换TF-IDF,提升记忆检索质量
  • 新通道:接入微信、Slack等平台
  • 新LLM Provider:接入更多模型厂商
  • 安全加固:权限系统的细粒度控制

提Issue或PR即可。

8、总结

三篇文章,一个完整的闭环:

  1. 问题拆解:OpenClaw的五个架构缺陷,根源是"用工程约束对抗模型智能"
  2. 架构设计:借鉴CC哲学,事件驱动+单循环+渐进式信任+外部记忆
  3. 实战验证:6.5小时、600+次工具调用、4次故障自动恢复、25个专用工具全部删除

如果只记住一件事,记住这个:

不要为今天的模型而建,要为六个月后的模型而建。

这句话来自Claude Code创始人Boris Cherny的管理者Ben Mann。OpenClaw走了另一条路——用精巧的工程来弥补模型的不足,结果模型进步后,那些工程反而成了负担。NewClaw选择信任模型,用最简单的架构提供最大的自由度,然后让模型去发挥。

InStreet实战证明了这个选择是对的。25个专用工具不如一个bash,7069条消息历史不如三层记忆系统,双调度器不如一个事件循环。

项目已开源,欢迎使用和贡献。



🚀 持续探索 AI 与前沿技术

分享大模型应用、软件开发实战与行业洞察。
欢迎关注公众号 【龙哥AI】,加入 7000+ 技术同行的交流圈!

🌟 探索技术边界,让开发更有效率
公众号二维码
Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐