内容
<div align="center">
# ⚡ ClaudeOS
**开源代理操作系统。**
*Claude 是内核。每个 AI 工具都是一个进程。所有代理共享一个内存。*
[](LICENSE)
[](https://nodejs.org)
[](#quick-start)
[](#contributing)
<br/>
`一个守护进程` · `多个代理` · `共享内存` · `MCP 驱动`
</div>
---
## 🧠 什么是 ClaudeOS?
目前,每个 AI 代理都生活在自己的独立环境中 —— Claude Code 不知道 Gemini CLI 做了什么,你的本地 Ollama 模型也无法看到 Codex 写入的内容,并且在不同工具之间没有任何信息共享。
**ClaudeOS 将您的 AI 工具视为操作系统中的进程:**
| 操作系统概念 | ClaudeOS |
|---|---|
| 🧬 **内核 / 调度器** | 一个守护进程,根据可配置的规则将任务路由到正确的后端 |
| ⚙️ **进程** | 现有的 CLI 代理(Claude Code、Gemini CLI、Codex)被封装为一流的提供者 —— 无需重新实现 |
| 🔌 **驱动** | 功能插件以 [MCP](https://modelcontextprotocol.io) 服务器的形式存在 —— 文件系统、浏览器、电子邮件等 |
| 💾 **共享内存** | SQLite 索引 + Markdown 仓库(`~/.claudeos/`),**所有代理都可以读取和写入** —— 与 Obsidian 兼容 |
### 有关演示
```
$ claudeos run "write a one-line python script to reverse a string"
[claude-code] ✓ print(input()[::-1]) ← Claude Code wrote this
$ claudeos run "what script did the coding agent write earlier?" --provider ollama
[ollama / llama3.2] ✓ print(input()[::-1]) ← a LOCAL model recalled it
```
两个不同的 AI 后端。一个内存。这是重点。
---
## 🚀 快速开始
**要求:** Node ≥ 23.6(原生支持 TypeScript,无需构建步骤)。可选:[Ollama](https://ollama.com) 用于本地模型,`ANTHROPIC_API_KEY` 用于直接 API 调用,Claude Code / Gemini CLI / Codex 用于代理进程。
```bash
git clone https://github.com/RishavRaj20/claudeos && cd claudeos
npm install
cp claudeos.config.example.json claudeos.config.json # 编辑配置文件
node src/cli.ts start # 守护进程启动 :7777
```
然后,在另一个终端中:
```bash
node src/cli.ts run "explain CRDTs in 3 lines" # 自动路由
node src/cli.ts run "summarize X" --provider ollama # 显式 + 本地
node src/cli.ts run "fix the bug in utils.py" # → 路由到 claude-code
node src/cli.ts providers # 查看活跃的提供者
node src/cli.ts runs # 任务历史
node src/cli.ts recall "that thing from yesterday" # 预览内存
node src/cli.ts mcp # 列出驱动 + 工具
```
---
## ✨ 功能
- **🎯 智能路由** —— 正则表达式规则将提示映射到提供者(`"fix the bug"` → Claude Code,`"summarize"` → 本地 llama);第一个匹配项获胜,支持回退到默认提供者
- **🔋 三种提供者类型,一个接口**
- `claude` —— Anthropic API(流式传输,自适应思考,服务器端拒绝回退)
- `ollama` —— 任何本地模型,完全离线和私有
- `cli` —— 将任何 CLI 代理作为子进程包装,提供 `{prompt}` 模板
- **🔌 MCP 驱动模型** —— 在配置文件中声明服务器(Claude Desktop 格式);守护进程在启动时连接,发现工具,将它们交给内核模型的代理循环,并暴露直接调用:
```bash
claudeos mcp call filesystem__read_text_file '{"path": "README.md"}'
```
- **🧠 语义内存注入** —— 每个任务自动接收最近的运行结果,存放在 `<claudeos-memory>` 块中,由任何提供者生成。排名基于嵌入相似性(本地 `nomic-embed-text` 通过 Ollama —— 完全私有,无需 API),并在 Ollama 关闭时使用关键词 + 最近时间回退。过去的运行结果在守护进程启动时自动嵌入。
- **📓 人类可读的内存** —— 每个运行结果都是一个带有 frontmatter 的 Markdown 文件;将 Obsidian 指向 `~/.claudeos/memory/`,即可浏览所有代理的历史记录
- **📥 驱动注册表** —— `claudeos mcp registry` 列出 9 个精选驱动(fetch、github、puppeteer、sqlite 等);`claudeos mcp install <name>` 为您写入配置文件
- **⏱ 异步任务 + 事件流** —— `claudeos run "..." --async` 立即返回;使用 `claudeos task <id>` 或 `claudeos watch` 流式传输任务生命周期,获取 WebSocket 事件
- **🔗 多步骤管道** —— 将提供者链接成工作流,每个步骤的输出通过 `{input}` / `{prev}` / `{stepname}` 模板输入到下一步:
```
$ claudeos pipeline build "a python function is_palindrome(s)"
── research [ollama] ✓ outline from a local model
── implement [claude-code] ✓ def is_palindrome(s): ...
── verify [claude-code] ✓ LGTM
```
- **🌐 本地 HTTP + WebSocket API** —— `GET /status`,`GET /mcp`,`POST /run`,`POST /tasks`,`ws://:7777/ws`;CLI 只是一个客户端,因此任何 UI 都可以连接(Tauri 桌面应用将在第二阶段推出)
- **📦 零构建步骤** —— 现代 Node 直接运行 TypeScript;一个值得提及的运行时依赖项(`@anthropic-ai/sdk`)和 MCP SDK
---
## 🏗 架构
```
┌──────────────────────────────┐
CLI ───────▶ │ 守护进程 (HTTP :7777) │ ◀─────── UI (第二阶段)
│ └─ 调度器 ("内核") │
└───────┬──────────┬───────────┘
│ 路由 │ 持久化
┌─────────────┼──────────┼──────────────┐
▼ ▼ │ ▼
Claude API Ollama │ CLI 代理
(opus 5 + (llama, │ (claude-code,
MCP 工具) granite...) │ gemini, codex)
│ ▼
│ ~/.claudeos/
└─ MCP 驱动 ├─ claudeos.db SQLite 索引(可搜索)
(文件系统, └─ memory/*.md Markdown 仓库(兼容 Obsidian)
浏览器, ...)
```
## 🖥 桌面应用(第二阶段)
一个原生的 [Tauri](https://tauri.app) 仪表板位于 [desktop/](desktop/) —— 提供者 和 MCP 驱动的健康状态,一个运行控制台(自动路由,选择提供者或运行整个管道),实时的 WebSocket 事件馈流,和运行历史。它是守护进程 API 上的一个薄客户端,因此请保持 `claudeos start` 运行。
```bash
cd desktop
npm install
npm run tauri dev # 需要 Rust(rustup.rs)
```
## ⚙️ 配置
所有内容都存放在 `claudeos.config.json`(gitignored — 复制 [claudeos.config.example.json](claudeos.config.example.json)):
```jsonc
{
"defaultProvider": "claude",
"providers": {
"claude": { "type": "claude", "model": "claude-opus-5" },
"ollama": { "type": "ollama", "model": "llama3.2" },
"claude-code": { "type": "cli", "command": "claude", "args": ["-p", "{prompt}"] }
},
"routing": [
{ "match": "\\b(code|refactor|implement|debug)\\b", "provider": "claude-code" },
{ "match": "\\b(summarize|translate|classify)\\b", "provider": "ollama" }
],
"memory": { "inject": true, "maxEntries": 3 },
"mcpServers": {
"filesystem": { "command": "npx", "args": ["-y", "@modelcontextprotocol/server-filesystem", "/path/to/dir"] }
}
}
```
---
## 🗺 路线图
- [x] 守护进程 + CLI + 提供者抽象(Claude API / Ollama / 封装的 CLI 代理)
- [x] 正则表达式任务路由和回退
- [x] MCP 客户端 —— 功能驱动,暴露给内核模型的代理循环
- [x] 内存注入 —— 跨代理的知识共享在每个任务中
- [x] `claudeos mcp install <name>` —— 一键驱动注册表(9 个精选的 MCP 服务器)
- [x] 异步任务 + WebSocket 流式传输 —— `run --async`,`claudeos task`,`claudeos watch`
- [x] 基于嵌入的召回 —— 通过本地 Ollama 嵌入(`nomic-embed-text`)进行语义内存搜索,并在 Ollama 离线时使用关键词回退
- [x] 多步骤管道 —— 研究 → 实现 → 验证链,跨提供者,按配置定义,通过 WebSocket 流式传输
- [x] **第二阶段(已开始):** Tauri 桌面应用(`desktop/`)—— 原生仪表板,基于守护进程的 HTTP/WS API:提供者 + MCP 健康状态,运行控制台,自动路由,提供者/管道选择,实时事件馈流,运行历史
- [x] 第二阶段继续:UI 中的实时异步运行(WebSocket 馈流输出),内存仓库浏览器,应用内配置编辑器,打包的 `.app`/`.dmg` 构建(`npm run tauri build`)
- [x] 按令牌流式传输 —— 所有三种提供者类型都通过 WebSocket 流式传输增量(`task.delta`);桌面应用实时渲染输出,带有光标
- [ ] 第二阶段下一步:从 UI 安装驱动,通知,签名构建
## 🤝 贡献
该项目还很年轻,正在快速发展 —— 现在是加入的最佳时机。打开一个问题,领取一个路线图项目,或为您的 favorite 代理添加提供者(约 60 行:实现 `available()` 和 `run()` 在 [src/providers/](src/providers/types.ts))。
灵感来自 [OpenHuman](https://github.com/tinyhumansai/openhuman) —— ClaudeOS 致力于编排您已经使用的代理,而不是取代它们。
## 📄 许可证
[Apache-2.0](LICENSE)