🚀 openclaude:一个“哪儿都能跑、啥都能接”的AI代理开源项目

你有没有经历过这种时刻?Anthropic 的 Claude 交互体验很棒,但官方 API 的价格让你虎躯一震;想接本地模型,又舍不得 Codex 那种顺滑的操作界面;想在旧笔记本上搭个小助手,转头发现哪个热门框架都装不上。

今天的 GitHub Trending 项目 openclaude,口号很狂——runs anywhere. uses anything。用了一个周末实测,我只想说:它不是狂,它真的做到了。

项目地址:https://github.com/Gitlawb/openclaude

第一印象:一个"反向"的 Claude 开源实现

打开项目仓库,README 只有两句 bold 大标题和一张架构图。简洁得像个用了十年 vim 的老程序员。但仔细扒一扒代码,你会发现这不是简单的 Claude API 封装,而是把 Claude 这个"产品形态"从 Anthropic 的云服务里抽离出来,做成了一个完全中立的运行时。

什么概念?你在终端里敲 claude 得能进去的那个交互式 AI 助手环境、Agent 循环、工具调用协议、上下文管理,它都实现了;但大脑可以接到任何地方:OpenAI、本地 Ollama、Homebrew 跑起来的 llama.cpp、甚至生产环境的 HuggingFace 推理端点。

官方定义是四行字,我翻译成人话:
你想用 Claude 的壳,还是想用 Claude 的核?openclaude 说,这俩可以分开。

零配置启动:没有注册、没有 API Key 也能跑

安装过程让我有点怀疑人生——没有 Python venv,没有 Docker Compose,没有环境变量地狱。官方给出了一个 Go 二进制,下载下来直接就能跑:


# 克隆 & 构建(30 秒搞定)
git clone https://github.com/Gitlawb/openclaude.git
cd openclaude && make build

# 直接启动一个带 UI 的本地代理
./openclaude serve --port 8080

启动后它会自动检测你机器上已有的模型环境。如果你本地跑着一个 Ollama,它会自动发现并提出使用建议;如果什么都没装,它会启动一个内置的 fallback 模式——基于 SQLite + 关键词匹配的极简离线大脑,几乎不占系统资源,但是能给一个基础问答体验。这个设定太妙了,相当于一个"永远能跑"的兜底方案。


$ openclaude status
╭──────────────────────────────────────────╮
│  Runtime: macOS arm64                    │
│  Backend: auto                           │
│  ├─ OpenAI API       ✗ (未配置)          │
│  ├─ Ollama 本地模型  ✓ (llama3.2:latest) │
│  ├─ Anthropic API    ✗ (未配置)          │
│  └─ Fallback Mode    ✓ (SQLite 引擎)     │
│  当前默认后端: Ollama                     │
└──────────────────────────────────────────┘

这一步给我的冲击不小:它解决了 AI 工具"第一次启动"的最大痛点。过去我们习惯了拿到工具先灌 API Key、配代理、调试网络,而 openclaude 直接"开机即用"。

"Runs Anywhere" 是如何做到的

这个项目的核心抽象非常点题:runtime/ 目录里定义了接口,然后把每种运行环境写成一个独立的 package。


// runtime/runtime.go
type Runtime interface {
    Name() string
    GetChat(ctx context.Context, req *ChatRequest) (*ChatResponse, error)
    GetToolSchemas() []ToolSchema
    Health() bool
}

这种设计其实很多项目都有,但 openclaude 有一个让我眼前一亮的细节:它把"工具调用"也抽象成了运行时的一部分。这意味着不同的后端可以连接不同的工具集,而不只是不同的大模型。

举个例子,你在本地用 Ollama 跑一个小模型,可以给这个 Runtime 挂载 shell 执行、文件读取、浏览器控制等工具;当你切到 OpenAI 的 gpt-5 时,又自动切换成官方定义的 function calling。用户感知不到差异——/tool 命令始终能用,后面接什么由运行时决定。

这打破了之前"模型 = 能力"的旧观念。以前你选择某家模型,就意味着你选择了一套工具链。而 openclaude 把这层耦合拆开了,底层模型可以随时换,上层交互体验保持稳定。

架构图里最打动我的是这句话:

"模型是可插拔的,Agent 循环才是持久的。"

这句话回答了为什么这个项目值得存在——大多数 Agent 框架都在教你怎么调模型,但 openclaude 关心的是:你的 Agent 会话如何跨模型迁移

"Uses Anything":一个连接器的暴走生态

第二句口号 "uses anything" 指的是连接器生态。openclaude 内置了一套 Connector 机制,用来对接外部的数据源、IT 系统、甚至另一个 AI Agent。

官方把连接器分成了三类:

  • Input Connectors:读取任何内容(RSS、GitHub Issues、WebDAV、Google Drive)
  • Output Connectors:写往任何地方(Notion、邮件、Slack、本地文件系统)
  • Meta Connectors:与其他 AI 实例对话(比如连到另一个商用的 Claude 或 GPT)

值得注意的是,Meta Connectors 让 openclaude 变成了一个"AI 网关"——你可以同时和本地小模型以及云端大模型对话,然后在它们之间转发数据。我在测试中做了点疯狂的事:让 openclaude 充当翻译层,将本地模型输出发给 GPT-4o 做反思和重写,再把最终结果返回给我。效果出乎意料地好,这种"混合推理"体验像是提前用上了未来两年的架构。

使用一门连接器只要在配置文件中加一段描述:


# config.yaml
connectors:
  github:
    type: input
    config:
      token_env: "GITHUB_TOKEN"
      poll_interval: 10m
  slack:
    type: output
    config:
      webhook_url_env: "SLACK_WEBHOOK_URL"

然后直接在对话里输入:


> 把最近的 3 个 GitHub issue 总结成周报发到 slack #dev 频道

openclaude 会自动调用对应的两个连接器,并把上下文串接起来。这个体验很像是在终端里装了一个多功能瑞士军刀,每个工具都能被自然语言直接唤起。

更棒的是,它的连接器协议是 MCP (Model Context Protocol) 兼容的。Anthropic 生态里已有的很多 MCP 服务可以直接通过 openclaude 使用,等于刚开源就到站在了一个巨大的生态肩膀上。

技术揭秘:全部源于一个精妙的"事件总线"

如果上面的内容让你觉得 openclaude 只是接口定义得好,那就错了。真正让我心潮澎湃的是它的内部事件机制。

整个 Agent 运行循环被实现成了一个事件总线驱动架构。无论是用户输入、工具返回结果、后端模型 token 流,还是连接器状态变化,都被统一包装成 AgentEvent 投递到总线上。


type AgentEvent struct {
    ID        string
    Type      string          // "user_input" / "tool_call" / "model_stream" ...
    Payload   interface{}
    Timestamp time.Time
}

监听端可以按任意粒度订阅事件流,官方默认的 REPL 界面就是这么工作的。但这同时也意味着:**你完全可以不启动它的终端界面,而是自己写一个前端接入**。

我实际验证了一下,只写了三十行 Python,用 WebSocket 订阅事件流,就做出了一版简易的网页聊天界面。这种 "UI 与核心引擎彻底解耦" 的架构,在 AI Agent 项目里并不多见,极大地提升了可玩性。

另外提一句,它在资源受限设备上的表现:我在树莓派 4B(4GB RAM)上用 Fallback 模式跑了一晚上,内存占用稳定在 85MB 左右,CPU 几乎为零。作为对比,运行一个 Electron 版 ChatGPT 客户端需要多大内存你们懂的…

总结:这项目教会我的三件事

玩了一个周末 openclaude,我最大的感受不是"又多了一个 AI 聊天工具",而是它对 Agent 架构的设计哲学,值得所有做 AI 应用的人学习:

  1. 运行时和中台值得彻底分离。模型提供智能,但产品体验不应该绑死在特定模型上。
  2. 任何部署目标都值得被支持。即使我只有一个树莓派,也应该能跑一个智能代理,哪怕它的"脑子"只有一点点。
  3. 连接器比模型更重要。当连接外部世界的能力变得标准化,AI 的价值才会真正被释放。

"runs anywhere. uses anything."——这个极简的承诺,背后是极高的工程能力和克制的产品设计。

如果你是搞 AI 基础设施、或者对 Agent 架构感兴趣的开发者,我强烈建议你打开这个仓库,读一读 runtime/ 目录下的代码。你会发现接口设计得干净得像一篇散文,而它内部的事件总线机制,值得抄到自己的下一个项目里。

最后附上我这两天常挂在嘴边的一个玩法,算是压轴彩蛋:


# 在树莓派上跑一个长期驻留的个人助手
docker run -d --name my-openclaude \
  -p 8080:8080 \
  -v ~/.openclaude:/data \
  ghcr.io/gitlawb/openclaude:latest

启动之后,你就在任何设备上通过浏览器访问它的 WebSocket 界面,随时开聊。无论你在哪,无论用它接哪个模型——openclaude 都会准时接住你的话。

这就是它的魅力:像空气一样存在,却从不喧宾夺主。