源自于openclaw,用golang重写了一版,因为在cmit,故大胆命名为cmitclaw

# cmitclaw

cmit自己的 openclaw。


## 功能特性

- 🛠️ **完整的工具系统**:FileSystem、Shell、Web、Message、Spawn,支持安全沙箱(cmitsandbox)与权限控制。
- 📚 **技能系统 (Skills)**:兼容 [OpenClaw](https://github.com/openclaw/openclaw) 和 [AgentSkills](https://agentskills.io) 规范,支持自动发现与环境准入控制 (Gating)。
- 💾 **持久化会话**:基于 JSONL 的会话存储,支持完整的工具调用链 (Tool Calls) 记录与恢复。
- 📢 **多渠道支持**:移动办公。
- 🔧 **灵活配置**:支持 YAML/JSON 配置,热加载。
- 🎯 **多 LLM 提供商**:九天/聚智。

## 技能系统 (New!)

cmitclaw 引入了先进的技能系统,允许用户通过编写 Markdown 文档 (`SKILL.md`) 来扩展 Agent 的能力。

### 特性
*   **Prompt-Driven**: 技能本质上是注入到 System Prompt 中的指令集,指导 LLM 使用现有工具 (exec, read_file 等) 完成任务。
*   **OpenClaw 兼容**: 完全兼容 OpenClaw 的技能生态。您可以直接将 `openclaw/skills` 目录下的技能复制过来使用。
*   **自动准入 (Gating)**: 智能检测系统环境。例如,只有当系统安装了 `curl` 时,`weather` 技能才会生效;只有安装了 `git` 时,`git-helper` 才会加载。

### 使用方法

#### 配置文件加载优先级

cmitclaw 按以下顺序查找配置文件(找到第一个即使用):

1. `~/.cmitclaw/config.json` (用户全局目录,**最高优先级**)
2. `./config.json` (当前目录)

可通过 `--config` 参数指定配置文件路径覆盖默认行为。

#### Skills 加载顺序

技能按以下顺序加载,**同名技能后面的会覆盖前面的**:

| 顺序 | 路径 | 说明 |
|-----|------|------|
| 1 | `传入的自定义目录` | 通过 `NewSkillsLoader()` 指定 |
| 2 | `workspace/skills/` | 工作区目录 |
| 3 | `workspace/.cmitclaw/skills/` | 工作区隐藏目录 |
| 4 | `<可执行文件路径>/skills/` | 可执行文件同级目录 |
| 5 | `./skills/` (当前目录) | **最后加载,优先级最高** |

默认 `workspace` 为 `~/.cmitclaw/workspace`。

1.  **列出可用技能**
    ```bash
    ./cmitclaw skills list
    ```

2.  **安装技能**
    将技能文件夹放入以下任一位置:
    *   `./skills/` (当前目录,最高优先级)
    *   `${WORKSPACE}/skills/` (工作区目录)
    *   `~/.cmitclaw/skills/` (用户全局目录)

3.  **编写技能**
    创建一个目录 `my-skill`,并在其中创建 `SKILL.md`:
    ```yaml
    ---
    name: my-skill
    description: A custom skill description.
    metadata:
      openclaw:
        requires:
          bins: ["python3"] # 仅当 python3 存在时加载
    ---
    # My Skill Instructions
    When the user asks for X, use `exec` to run `python3 script.py`.
    ```

## 项目结构

```
cmitclaw/
├── agent/              # Agent 核心逻辑
│   ├── loop.go         # Agent 循环
│   ├── context.go      # 上下文构建器
│   ├── memory.go       # 记忆系统
│   ├── skills.go       # 技能加载器
│   ├── subagent.go     # 子代理管理器
│   └── tools/          # 工具系统
├── channels/           # 消息通道
│   ├── base.go         # 通道接口
│   └── moa.go          # moa实现
├── bus/                # 消息总线
│   ├── events.go       # 消息事件
│   └── queue.go        # 消息队列
├── config/             # 配置管理
│   ├── schema.go       # 配置结构
│   └── loader.go       # 配置加载器
├── providers/          # LLM 提供商
│   ├── base.go         # 提供商接口
│   └── jiutian.go      # 九天实现
├── session/            # 会话管理
│   └── manager.go      # 会话管理器
├── cli/                # 命令行界面
│   └── root.go         # CLI 命令
├── internal/           # 内部包
│   ├── logger/         # 日志
│   └── utils/          # 工具函数
└── main.go             # 主入口
```

## 快速开始

### 安装

```bash
go mod tidy
go build -o cmitclaw .
```

### 配置

创建 `config.json`:

```json
{
  "agents": {
    "defaults": {
      "model": "openrouter:anthropic/claude-opus-4-5",
      "max_iterations": 15,
      "temperature": 0.7
    }
  },
  "providers": {
    "openrouter": {
      "api_key": "your-openrouter-key"
    }
  },
  "channels": {
    "telegram": {
      "enabled": true,
      "token": "your-telegram-bot-token"
    }
  }
}
```

### 运行

```bash
# 启动 Agent
./cmitclaw start

# 交互模式
./cmitclaw chat

# 查看配置
./cmitclaw config show
```

## 开发

### 添加新工具

在 `agent/tools/` 目录下创建新工具文件,实现 `Tool` 接口:

```go
type Tool interface {
    Name() string
    Description() string
    Parameters() map[string]interface{}
    Execute(ctx context.Context, params map[string]interface{}) (string, error)
}
```

### 添加新通道

在 `channels/` 目录下创建新通道,实现 `BaseChannel` 接口:

```go
type BaseChannel interface {
    Name() string
    Start(ctx context.Context) error
    Send(msg OutboundMessage) error
    IsAllowed(senderID string) bool
}
```

## 常见问题

### Q: 如何切换不同的 LLM 提供商?

A: 修改配置文件中的 `model` 字段:
- `gpt-4` - OpenAI
- `claude-3-opus-20240229` - Anthropic
- `openrouter:anthropic/claude-opus-4-5` - OpenRouter

### Q: 工具调用失败怎么办?

A: 检查工具配置,确保 `enabled: true`,且没有权限限制。

### Q: 如何限制 Shell 工具的权限?

A: 在配置中设置 `denied_cmds` 列表,添加危险的命令。


## 许可证

MIT

架构图

欢迎star:https://github.com/tanzhe-chinamobile-it/cmitclaw.git

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐