# cppClaw
**Repository Path**: judeli/cppclaw
## Basic Information
- **Project Name**: cppClaw
- **Description**: cppClaw 是一个基于现代 C++23 打造的高性能、轻量级 AI 智能体(c++版本小龙虾),受 nanobot 和 OpenClaw 启发,具备 ReAct Agent 循环、可扩展工具系统、多渠道接入、灵活 JSON 配置,支持主流 LLM 提供商及长期记忆与会话持久化能力等,是将 AI Agent 带入 C++ 世界的原生解决方案。
- **Primary Language**: C++
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 2
- **Forks**: 0
- **Created**: 2026-03-12
- **Last Updated**: 2026-04-14
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
🦞 cppClaw:C++ 原生 AI 助手框架
基于现代 C++23 打造的高性能、轻量级 AI Agent 框架
版本 0.1.0
[English](README.md) | **中文**
---
## 🚀 概述
**cppClaw** 是一个基于现代 C++23 打造的 AI 助手框架,致力于将大语言模型的智能带入本地应用场景:
- ⚡ **极致性能**:编译型语言优势,毫秒级启动,内存占用仅约 10MB
- 🔧 **灵活配置**:JSON 配置文件,支持切换多种 LLM 提供商
- 🛡️ **隐私优先**:支持本地 Ollama 部署,数据无需出网
- 📦 **便携部署**:跨平台单二进制文件,无复杂依赖
### 灵感来源
受 [nanobot](https://github.com/HKUDS/nanobot) 和 [OpenClaw](https://github.com/openclaw/openclaw.git) 启发,cppClaw 将相同的理念带入 C++ 生态系统,专注于:
- **性能**:最小化运行时开销
- **便携性**:跨 Windows/Linux/macOS 的单二进制部署
- **可扩展性**:通过技能和工具的插件架构
---
## ✨ 功能特性
### 核心能力
| 功能 | 描述 |
|------|----------------------------------------------------|
| **🧠 ReAct Agent** | Complete → Tool Calls → Execute → Iterate 循环,带安全保障 |
| **🛠️ 工具系统** | 文件操作、shell 执行、网络搜索、技能中心 |
| **💬 多渠道** | CLI 本地使用,Gateway 对接 微信、飞书、钉钉、QQ(计划) |
| **🔧 配置系统** | JSON 配置,支持 OpenAI/Anthropic/Ollama/智谱等 |
| **📚 技能** | GitHub、天气、摘要、自我改进等预置技能 |
| **🧵 记忆系统** | 长期记忆(`MEMORY.md`)+ 会话历史持久化 |
### 技术亮点
- **现代 C++23**:`std::expected`、ranges、协程、模块化等新特性,不乏现代编程语言的丝滑。
- **类型安全工具**:工具定义与执行的强类型约束
- **工作区沙箱**:安全优先的文件/命令访问控制
---
## 📊 对比
| Feature | cppClaw | PicoClaw (Golang)| NanoBot (Python) | OpenClaw (TypeScript) |
|----------------|--------------|------------------|----------------------|----------------------|
| **语言** | C++23 | Golang 1.25+| Python 3.10+ | TypeScript/Node.js |
| **内存占用** | ~10MB | < 10MB | ~100MB | ~1GB+ |
| **启动时间** | <10ms | ~1s | ~5s | ~30s |
| **部署方式** | Single binary | Single binary| Python env + deps | Node.js + npm |
| **性能** | ⚡⚡⚡⚡ | ⚡⚡⚡ | ⚡⚡ | ⚡ |
*基于当前实现的估算值;实际使用因工作负载而异。
---
---
## 🏗️ 架构
### 目录结构
```
cpp-ai-assistant/
├── CMakeLists.txt # CMake 根目录配置
├── config/ # 配置管理
│ └── default.json # 默认配置,init 时复制到 ~/.cppclaw/
├── third_party/ # header-only 库(内部依赖库目录为示例,按实际下载的为准)
│ ├── json/ # nlohmann/json
│ ├── spdlog/ # spdlog
│ ├── cereal/ # cereal
│ ├── httplib/ # cpp-httplib
│ └── CMakeLists.txt # 依赖库和自动下载配置
├── include/ # 头文件目录。各自头文件工具、agent接口或抽象类封装。
│ ├── common/ # 基础模块
│ │ ├── logger.hpp # 日志封装
│ │ ├── serializer.hpp # 序列化封装
│ │ ├── config.hpp # 配置加载
│ │ ├── file_util.hpp # 文件操作封装
│ │ ├── error.hpp # 错误处理封装
│ │ ├── date_time.hpp # 时间处理封装
│ │ ├── string_util.hpp # 字符串处理封装
│ │ ├── uuid.hpp # UUID 生成封装
│ │ ├── base64.hpp # Base64 编码解码封装
│ │ ├── md5.hpp # MD5 计算封装
│ │ ├── constants.hpp # 公共常量定义。如多环境名称dev/prod/test,配置文件路径,日志默认级别,错误码等
│ │ └── expected.hpp # expected 封装
│ ├── core/ # 核心引擎
│ │ ├── agent_loop.hpp # ReAct 循环
│ │ ├── context.hpp # 上下文构建
│ │ ├── memory.hpp # 记忆系统
│ │ ├── skills_loader.hpp # 技能加载
│ │ └── task.hpp # 任务定义
│ ├── llm/ # LLM 提供商
│ │ ├── provider.hpp # 统一接口
│ │ ├── provider_registry.hpp # Provider Registry
│ │ ├── openai.hpp # OpenAI 实现
│ │ ├── anthropic.hpp # Anthropic 实现
│ │ └── ollama.hpp # Ollama 本地实现
│ ├── tools/ # 工具系统
│ │ ├── tool_base.hpp # 工具抽象
│ │ ├── shell_tool.hpp # Shell 执行
│ │ ├── file_tool.hpp # 文件读写操作
│ │ └── web_tool.hpp # 网页搜索
│ ├── bus/ # 消息总线
│ │ ├── message.hpp # 消息定义
│ │ ├── event_queue.hpp # 事件队列
│ │ └── channel.hpp # 渠道抽象
│ ├── channels/ # 渠道实现
│ │ ├── cli_channel.hpp # 命令行
│ │ └── http_channel.hpp # HTTP API
│ ├── cron/ # 定时任务
│ │ └── scheduler.hpp # 任务调度
│ └── heartbeat/ # 主动唤醒
│ └── heartbeat.hpp # HEARTBEAT.md 周期性任务
├── src/ # 源代码
│ ├── apps/ # 应用程序
│ │ ├── gateway/ # gateway 主程序
│ │ │ ├── main.cpp # 主程序
│ │ │ └── CMakeLists.txt # CMake 配置
│ │ └── cli/ # CLI 工具(init、status 等)
│ │ ├── main.cpp # 主程序
│ │ └── CMakeLists.txt # CMake 配置
│ ├── common/ # libcppclaw_common
├── tests/ # 单元测试
│ ├── p1/ # 阶段1测试执行程序
│ ├── p2/ # 阶段2测试执行程序
│ ├── .../ # 其他阶段测试执行程序
│ └── CMakeLists.txt # tests下执行程序公共CMake配置
├── docs/ # 文档
│ ├── prompt_example/ # 配置文档示例
│ │ ├── scripts/ # 构建脚本
│ │ ├── skills/ # 内置技能
│ │ ├── AGENTS.md # 角色定义
│ │ ├── SOUL.md # 性格与价值观
│ │ ├── TOOLS.md # 拥有的工具
│ │ ├── USER.md # 用户画像
│ │ └── HEARTBEAT.md # 周期性任务
│ ├── 日志说明.md
│ ├── 测试情况.md
│ └── 编程规范.md
├── LICENSE
├── README.md
├── README.zh.md
└── CMakeLists.txt
```
### 执行流程
```
用户输入 (CLI/Gateway)
↓
AgentLoop.run()
↓
ContextBuilder.build() → System Prompt + 消息
↓
LLM Provider.complete()
↓
有 tool_calls?
├─ 是 → 执行工具 → 写入结果 → 重复
└─ 否 → 返回响应 → 保存到记忆
```
### 系统语境图(C4 Level 1 — Context)
**回答**:本系统是谁在用、和哪些外部系统打交道?
```mermaid
flowchart TB
subgraph actors["人员"]
U([终端用户])
end
subgraph sys["软件系统:cppclaw AI 助手"]
direction TB
S["自动化对话、工具调用与\n工作区记忆(C++)"]
end
subgraph ext["外部依赖"]
OLL["Ollama\n(本地/局域网 LLM)"]
OAI["OpenAI 兼容 API\n(可选云端)"]
MMX["MiniMax API\n(可选云端)"]
end
subgraph fs["用户环境"]
WS[("工作区目录\nSOUL.md / session / memory / …")]
CFG[("配置文件\nconfig.json")]
SKILLS[("skills/ 目录\n(SKILL.md 索引)")]
end
U -->|交互式 / -m 单轮 | S
S -->|HTTPS/HTTP\nchat / complete| OLL
S -->|HTTPS\nchat/completions| OAI
S -->|HTTPS\nchat/completions| MMX
S <-->|读写 | WS
S <-->|加载 | CFG
S <-->|读取技能索引 | SKILLS
```
**说明**:
- 实际 **LLM 提供商**由配置决定,支持 **Ollama**(本地)、**OpenAI** 或 **MiniMax**(云端),可切换。
- **工作区**与 **配置**在磁盘上;会话历史落在工作区下的 **`session/history.json`** 等(见阶段5 文档)。
- **skills/** 目录包含已安装的技能包,每个技能含 `SKILL.md` 定义文件。
---
### 容器图(C4 Level 2 — Containers)
**回答**:系统由哪些**可运行/可边界**的块组成、之间如何连接?
```mermaid
flowchart LR
U([用户])
subgraph deploy["本机进程"]
CLI["cppclaw_cli\n(init / status / agent)"]
GW["cppclaw_gateway\n(CLI 渠道 + Agent)"]
end
subgraph lib["共享库逻辑\n(libcppclaw_common)"]
APP["agent_session\n(resolve workspace,\nagent_run_turn)"]
CORE["AgentLoop\nContextBuilder\nMemoryStore"]
LLM["ProviderRegistry\nOllama / OpenAI / MiniMax"]
TOOL["ToolManager\nfile / shell / web_search"]
SKILLS["SkillsLoader\n(skills/*/SKILL.md)"]
end
OLL["Ollama :11434"]
OAI["OpenAI API"]
MMX["MiniMax API"]
DISK[("磁盘:workspace + config")]
SKDISK[("skills/ 目录\n(SKILL.md 索引)")]
U --> CLI
U --> GW
CLI --> APP
GW --> APP
APP --> CORE
APP --> LLM
APP --> TOOL
APP --> SKILLS
CORE --> LLM
CORE --> TOOL
CORE --> SKILLS
LLM --> OLL
LLM --> OAI
LLM --> MMX
CORE --> DISK
APP --> DISK
SKILLS --> SKDISK
```
**说明**:
- **CLI** 与 **Gateway** 是两个**入口进程**;核心逻辑在 **`cppclaw_common`**(含 `agent_session`、`AgentLoop`、LLM、工具等)。
- **Gateway** 当前以 **CLIChannel** 接 stdin/stdout;后续可扩展 HTTP 等渠道(规划见 `规划.md`)。
- **EventBus** 在 Gateway 内用于演示入站/出站队列;与 Agent 调用链并行存在。
- **SkillsLoader**:负责加载 `skills/*/SKILL.md` 索引,在 `ContextBuilder` 中注入技能摘要到 system prompt。
- **LLM Providers**:新增 **MiniMax** 提供商(与 Ollama/OpenAI 并列),通过 ProviderRegistry 统一管理。
---
## 🎯 快速开始
### 前置要求
| 要求 | 版本 | 说明 |
|------|------|------|
| **CMake** | ≥ 3.22 | 构建系统 |
| **编译器** | 支持 C++23 | GCC 13+、Clang 16+、MSVC 2022+ |
| **OpenSSL** | 可选 | HTTPS 支持(推荐) |
### 源码构建
```bash
# 克隆仓库
git clone https://gitee.com/judeli/cppclaw.git
cd cppclaw
# 配置
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
# 构建
cmake --build build --target cppclaw_cli cppclaw_gateway
# 输出位于 build/bin/
```
## 📦 安装
### 预编译二进制(即将推出)
从 [Releases](https://gitee.com/judeli/cppclaw/tags) 页面下载。
解压安装包到指定目录(例如 /opt/cppclaw)
```bash
unzip cppclaw-linux-x64.zip -d /opt/cppclaw
```
解压后的安装根目录:
```
cppclaw/
├── bin/
│ ├── cppclaw_cli
│ └── cppclaw_gateway
├── skills/
│ ├── create-agent-skills/
│ ├── weather/
│ └── ...
└── config/
├── default.json
└── ...
```
### 首次运行
```bash
# 初始化工作区 (~/.cppclaw/)
./cppclaw_cli init
# 编辑配置
vim ~/.cppclaw/config.json
# 测试简单查询
./cppclaw_cli agent -m "你好!你能做什么?"
```
---
## ⚙️ 配置
### 配置文件位置
默认:`~/.cppclaw/config.json`
### 基础配置
```json
{
"agent": {
"name": "钢铁龙虾",
"profession": "AI 助手",
"system_prompt": "",
"max_iterations": 10,
"working_directory": "~/.cppclaw/workspace"
},
"llm": {
"provider": "ollama",
"model": "qwen3.5:4b",
"base_url": "http://localhost:11434/v1",
"api_key": "",
"max_tokens": 4096,
"temperature": 0.7
},
"tools": {
"shell_enabled": true,
"file_enabled": true,
"web_search_enabled": true,
"skill_hub_enabled": true,
"clawhub_api_base": "https://wry-manatee-359.convex.site"
}
}
```
### 支持的 LLM 提供商
| 提供商 | 模型格式 | 获取 API Key |
|--------|----------|-------------|
| **Ollama** | `ollama/{model}` | 本地(无需 key) |
| **OpenAI** | `openai/{model}` | [platform.openai.com](https://platform.openai.com) |
| **Kimi** | `kimi/{model}` | [platform.moonshot.cn](https://platform.moonshot.cn) |
| **MiniMax** | `minimax/{model}` | [platform.minimaxi.com](https://platform.minimaxi.com) |
| **千问 (Qwen)** | `qwen/{model}` | [dashscope.console.aliyun.com](https://dashscope.console.aliyun.com) |
| **豆包 (Doubao)** | `doubao/{model}` | [www.volcengine.com](https://www.volcengine.com) |
| **DeepSeek** | `deepseek/{model}` | [platform.deepseek.com](https://platform.deepseek.com) |
| **智谱 AI** | `zhipu/{model}` | [bigmodel.cn](https://bigmodel.cn) |
| **Anthropic** | `anthropic/{model}` | [console.anthropic.com](https://console.anthropic.com) |
### 工作区结构
```
~/.cppclaw/workspace/
├── sessions/ # 会话历史
├── memory/
│ ├── MEMORY.md # 长期事实
│ └── YYYY-MM-DD.md # 每日笔记
├── skills/ # 自定义技能
├── AGENTS.md # Agent 指南
├── SOUL.md # 人格与价值观
├── USER.md # 用户偏好
└── TOOLS.md # 工具文档
```
---
## 💬 使用方式
### CLI 模式
```bash
# 一次性查询
./cppclaw_cli agent -m "列出当前目录下的文件"
# 交互模式
./cppclaw_cli agent
# 指定自定义工作区
./cppclaw_cli agent -w /path/to/workspace -m "帮我..."
```
### Gateway 模式(聊天平台)
```bash
# 启动 Telegram/Discord Gateway
./cppclaw_gateway
# 在 ~/.cppclaw/config.json 中配置 channels
```
#### 示例:Telegram 设置(待定)
1. 通过 [@BotFather](https://t.me/BotFather) 创建机器人
2. 复制 Token 到配置:
```json
{
"channels": {
"telegram": {
"enabled": true,
"token": "YOUR_BOT_TOKEN",
"allow_from": ["YOUR_USER_ID"]
}
}
}
```
3. 运行 gateway,与你的机器人聊天!
---
## 🛠️ 工具系统
### 内置工具
| 工具 | 操作 | 描述 |
|------|------|------|
| **file** | read/write/append/list/delete | 工作区范围内的文件操作 |
| **shell** | execute | 带安全过滤的命令执行 |
| **web_search** | search | 网络搜索(需要 API key) |
| **skill_hub** | search/install/uninstall | ClawHub 技能管理 |
### 安全沙箱
默认情况下,cppClaw 运行在沙箱环境中:
- ✅ 文件访问限制在工作区内
- ✅ 危险命令被拦截(`rm -rf`、`format` 等)
- ✅ 长时间运行操作有超时限制
禁用限制(⚠️ 安全风险,暂不支持):
```json
{
"agent": {
"restrict_to_workspace": false
}
}
```
---
## 📚 技能
预装技能:
| 技能 | 描述 |
|------|------|
| **github** | 通过 `gh` CLI 集成 GitHub |
| **weather** | 当前天气与预报 |
| **summarize** | URL/文件摘要 |
| **self-improving-agent** | 从错误中持续学习 |
| **create-agent-skills** | 创建新技能的指南 |
### 使用技能
技能从 `skills/` 目录自动加载。使用技能:
```markdown
用户:"查看北京的天气"
→ Agent 加载:skills/weather/SKILL.md
→ 执行天气工具
→ 返回天气预报
```
### ClawHub
安装社区技能,当前直接对话安装即可,命令行方式暂未支持。
```bash
# 搜索 ClawHub
cppclaw_cli skill search "code-review"
# 安装技能
cppclaw_cli skill install code-review-assistant
```
---
## 🤝 贡献
欢迎 PR!代码库设计为可读且可扩展。
### 如何贡献
1. Fork 仓库
2. 创建功能分支
3. 进行修改
4. 运行测试
5. 提交 Pull Request
### 需要帮助的领域
- 🚀 性能优化(SIMD、异步 I/O)
- 🌍 更多渠道集成(Discord、QQ、企业微信)
- 🧪 测试覆盖扩展
- 📚 ClawHub 技能开发
- 🐛 Bug 修复与平台兼容性
---
## 🔒 安全
### 沙箱机制
- 默认启用工作区限制
- 危险命令模式被拦截
- 文件访问验证
### 漏洞报告
请通过 GitHub Private Vulnerability Reporting(如果启用)或直接联系维护者报告安全问题。
---
## 📄 许可证
**MIT License** - 详见 [LICENSE](LICENSE)。
### 第三方依赖
| 库 | 许可证 | 用途 |
|----|--------|------|
| spdlog | MIT | 日志 |
| nlohmann/json | MIT | JSON 处理 |
| httplib | BSD-3 | HTTP 服务器/客户端 |
| cereal | BSD-3 | 序列化 |
---
## 🙏 致谢
- [nanobot](https://github.com/HKUDS/nanobot) - 原始灵感
- [OpenClaw](https://github.com/openclaw/openclaw.git) - 架构参考
- [spdlog](https://github.com/gabime/spdlog) - 快速 C++ 日志
- [nlohmann/json](https://github.com/nlohmann/json) - 现代 C++ JSON
---
## 📬 联系方式
- **GitHub Issues**: [报告 Bug / 功能请求](https://gitee.com/judeli/cppclaw/issues)
- **Discussions**: [社区论坛](https://github.com/your-org/cppclaw/discussions) (planning)
---
🦞 cppClaw — 将 AI Agent 带入 C++!
使用现代 C++23 构建,用 ❤️ 打造