[开源] myclaw:2000 行 Go 平替 43 万行的 OpenClaw
myclaw 是一个用 Go 编写的开源 AI Agent Gateway,核心功能包括多通道消息路由(Telegram + 飞书)、持久化记忆系统和定时任务调度。约 2000 行核心代码实现了 OpenClaw 的核心 Gateway 架构,编译出来就一个二进制文件,适合想要自托管 AI 助手但不想折腾 Node.js 或 Python 环境的开发者。
API服务:https://nicecode.cc/,可以使用claude,codex,gemini
TL;DR myclaw 是一个用 Go 编写的开源 AI Agent Gateway,核心功能包括多通道消息路由(Telegram + 飞书)、持久化记忆系统和定时任务调度。约 2000 行核心代码实现了 OpenClaw 的核心 Gateway 架构,编译出来就一个二进制文件,适合想要自托管 AI 助手但不想折腾 Node.js 或 Python 环境的开发者。
AI Agent Gateway 赛道的现状
2026 年初,AI Agent 领域最火的项目非 OpenClaw 莫属。这个前身为 Clawdbot 🦞(后改名 Moltbot,最终定名 OpenClaw)的项目,在 GitHub 上已经积累了超过 17 万 Star。它的核心理念很直接:给 LLM 一双"手",让 AI 能操作你的本地系统——执行命令、读写文件、控制浏览器。
OpenClaw 的架构确实强大:
-
• Gateway + Pi Agent:Gateway 是 Node.js WebSocket 服务(默认绑
ws://127.0.0.1:18789),内嵌 Pi(Mario Zechner 写的开源 Coding Agent)通过 JSON-RPC over stdio 做推理和工具调用 -
• 多模型支持:通过 Pi 的统一 LLM API 接 Anthropic、OpenAI、Google、Ollama 等多家 Provider
-
• 支持 WhatsApp、Telegram、Discord、iMessage、Slack、Signal 等消息通道
-
• 沙箱模式、设备配对审批、加密凭据存储
但它也有明显的代价:43 万行 TypeScript 代码,Node.js 运行时,以及相当复杂的依赖链。
对于只想自托管一个 AI 助手的个人开发者来说,这个体量太重了。myclaw 想做的事情很简单——用 Go 写一个够用的轻量替代。
myclaw 是什么
myclaw 是一个 Go 编写的自托管 AI Agent Gateway。设计目标三条:
-
1. 轻量:核心代码约 2000 行,单二进制部署,无运行时依赖
-
2. 实用:覆盖日常场景——Telegram 和飞书双通道、定时任务、记忆持久化
-
3. 可扩展:模块化架构,Channel 接口抽象清晰,加新通道写一个 struct 就行
架构上借鉴了 OpenClaw 的 Gateway 模式,但实现上砍掉了所有我用不到的东西。
架构设计
myclaw 的整体架构可以用一句话概括:消息总线驱动的服务编排。
核心组件包括:
1. Message Bus(消息总线)
消息总线是 myclaw 的中枢。两种消息类型:
-
• InboundMessage:从通道流入,携带 Channel、SenderID、ChatID、Content、Timestamp 等字段
-
• OutboundMessage:从 Agent 流出,携带 Channel、ChatID、Content、ReplyTo 等字段
通过 Pub/Sub 模式(SubscribeOutbound / DispatchOutbound),各服务之间实现松耦合的事件路由。缓冲区默认 100 条消息,Goroutine 安全。
2. Gateway(网关编排器)
Gateway 是顶层编排器,负责:
-
• 组装系统 Prompt(从
AGENTS.md+SOUL.md+ 记忆上下文拼接) -
• 处理入站消息,调用 Agent 运行时(支持 Anthropic 和 OpenAI 两种 Provider)
-
• 将 Agent 输出路由到对应的消息通道
-
• 处理
SIGINT/SIGTERM优雅关闭
Provider 切换的逻辑很直接——配置里 provider.type 写 openai 就走 OpenAI,其他情况默认 Anthropic。不搞什么抽象工厂,一个 switch 解决。
3. Channel(消息通道)
Channel 接口定义了四个方法:Name()、Start()、Stop()、Send()。目前实现了两个通道:
Telegram 通道:
-
• 基于
telegram-bot-api/v5长轮询 -
• Markdown → Telegram HTML 格式转换
-
• 消息分片(4096 字符限制)
-
• 发送者白名单过滤
-
• 代理配置支持(方便国内网络环境)
飞书通道:
-
• Webhook 模式,启动一个 HTTP Server 监听
/feishu/webhook(默认端口 9876) -
• Tenant Access Token 管理,带缓存和双重检查锁
-
• URL Verification Challenge 自动应答
-
• 事件驱动的消息接收(
im.message.receive_v1) -
• 发送者白名单过滤(基于 open_id)
-
• Verification Token 校验
飞书通道需要一个公网可达的 Webhook URL。本地开发可以用 Cloudflared 临时隧道,生产环境建议配 DNS。
4. Memory(记忆系统)
记忆系统分为两层:
-
• 长期记忆(
MEMORY.md):持久化的知识库 -
• 每日日记(
YYYY-MM-DD.md):按日期归档的交互记录
提供 ReadLongTerm()、WriteLongTerm()、ReadToday()、AppendToday() 和 GetRecentMemories(days) 方法。默认取最近 7 天的日记,和长期记忆一起组装进 LLM 的系统 Prompt。
文件就是 Markdown,想手动改也行。
5. Cron(定时任务)
支持三种调度模式:
-
•
cron:标准 Cron 表达式(基于robfig/cron/v3) -
•
every:固定间隔(毫秒级) -
•
at:一次性定时执行
任务持久化为 JSON(存在 ~/.myclaw/data/cron/jobs.json),支持状态追踪(LastRunAtMs、LastStatus、LastError)和执行后自动删除。任务的执行结果可以通过 deliver 字段指定是否推送到某个消息通道。
6. Heartbeat(心跳服务)
定期读取 HEARTBEAT.md 文件内容,触发 Agent 处理。Agent 返回 HEARTBEAT_OK 表示无需进一步操作。默认间隔 30 分钟,适合做周期性自检或主动提醒。
为什么用 Go
选 Go 不是为了赶时髦,是几个实际的考量:
-
1. 单二进制部署:
go build产出一个可执行文件,不需要 Node.js 运行时或 Python 虚拟环境。scp到服务器直接跑 -
2. 并发原语:Goroutine + Channel 天然适合消息总线架构。每个通道、每个定时任务、Webhook Server 都是独立的 Goroutine,代码写起来比 async/await 回调链清爽
-
3. 内存占用:Go 运行时的内存开销远低于 Node.js / Python,一个长期驻留的 Gateway 进程,这点差别会累积
-
4. 交叉编译:
GOOS=linux GOARCH=arm64 go build一行命令编译到任意平台
快速开始
安装
go install github.com/stellarlinkco/myclaw/cmd/myclaw@latest
初始化
myclaw onboard
这会在 ~/.myclaw/ 下创建配置文件和工作空间:

配置
编辑 ~/.myclaw/config.json:

想用 OpenAI 兼容的 API?把 provider.type 改成 "openai",填上对应的 Key 和 Base URL 就行。
也支持环境变量覆盖:

一个细节:如果只设了 OPENAI_API_KEY 而没有配 provider.type,myclaw 会自动把 Provider 切到 OpenAI。少一步配置。
运行

部署
Docker
myclaw 提供了多阶段 Dockerfile(golang:1.24-alpine 构建,alpine:3.21 运行),编译产物约 10MB。

Docker Compose 里包含一个可选的 Cloudflared 隧道服务,通过 --profile tunnel 激活。它会自动把飞书 Webhook 端口暴露到公网,省去自己配 Nginx 反向代理的麻烦。
本地开发也可以直接用 Make:

拿到 *.trycloudflare.com 的 URL 后填到飞书开放平台的事件订阅里就行。
裸机部署

人格定制
myclaw 的一个有趣设计是通过 Markdown 文件定义 Agent 的"灵魂"。
AGENTS.md 定义角色和行为准则——你是谁、你能做什么、你的边界在哪里。SOUL.md 定义人格特质——语气、偏好、思维方式。这两个文件会被 Gateway 拼接到系统 Prompt 中。
这意味着你可以通过编辑两个 Markdown 文件来完全自定义 AI 助手的行为,不需要改任何代码。想要一个严肃的工作助手?改 SOUL.md。想要一个幽默的聊天伙伴?也是改 SOUL.md。
与 OpenClaw 的对比

myclaw 不试图替代 OpenClaw。如果你需要多平台消息通道、完整的沙箱安全模型、Pi Agent 的 Skills 扩展体系,OpenClaw 是更好的选择。myclaw 的定位是:你只需要一个能通过 Telegram 或飞书控制的、带记忆的、能跑定时任务的 AI 助手,并且希望它是一个 10MB 的二进制文件而不是一个 Node.js 项目。
测试
myclaw 的测试覆盖率在 82%-100% 之间,核心模块都有单元测试:
-
•
bus_test.go:消息总线的发布/订阅 -
•
channel_test.go:通道接口、Telegram 适配和飞书 Webhook 处理 -
•
config_test.go:配置加载和环境变量覆盖 -
•
cron_test.go:三种调度模式 -
•
gateway_test.go:服务编排和优雅关闭(90.2% 覆盖) -
•
heartbeat_test.go:心跳触发逻辑 -
•
memory_test.go:记忆读写和上下文组装 -
•
main_test.go:CLI 命令注册
使用依赖注入的 Factory 模式,测试时替换外部依赖。RuntimeFactory、BotFactory、FeishuClientFactory 这些接口让你不需要真实的 Telegram Bot 或 Anthropic API 也能跑完所有测试。

安全考量
AI Agent Gateway 的安全性不容忽视。OpenClaw 社区已经多次讨论过"投毒网页"导致的 Prompt 注入攻击问题。myclaw 采取了几个基本措施:
-
• 发送者白名单:Telegram 和飞书通道都支持
allowFrom配置,只有白名单中的用户才能触发 Agent -
• 工具迭代上限:
maxToolIterations限制单次对话中的工具调用次数,防止 Agent 失控循环 -
• 工作空间隔离:
tools.restrictToWorkspace默认开启,Agent 的文件操作限制在工作空间目录内 -
• Webhook 验证:飞书通道支持 Verification Token 校验,防止伪造请求
对于生产环境,建议配合 Docker 容器运行以提供进程级隔离。
关键依赖
myclaw 的外部依赖保持精简,直接依赖只有 4 个:
-
•
agentsdk-go(v0.8.0):Agent 运行时,底层包了 Anthropic SDK 和 OpenAI SDK,处理 ReAct 循环和工具调用 -
•
telegram-bot-api/v5:Telegram Bot API 客户端 -
•
robfig/cron/v3:Cron 表达式解析和调度 -
•
spf13/cobra:CLI 框架
间接依赖包括 anthropic-sdk-go、openai-go、go-sdk(MCP)和 OpenTelemetry 相关的 Tracing 库。go.sum 里条目不少,但运行时真正加载的东西不多。
我的看法
myclaw 证明了一件事:构建一个实用的 AI Agent Gateway 不需要 43 万行代码。2000 行 Go,两个消息通道,一套记忆系统,一个 Cron 调度器——日常够用了。
当然它也有明显的不足。没有 Web UI,没有多用户会话隔离,飞书通道目前只支持纯文本消息。如果你的场景需要这些,OpenClaw 或者自己加功能。
Go 的单二进制部署和低内存占用让它特别适合丢在一台小 VPS 上长期跑着。如果你认同"能用 2000 行解决的问题不要用 43 万行"这个理念,可以试试。
更多推荐



所有评论(0)