---
created: "2026-03-22"
updated: "2026-03-22"
type: resource
tags: [resource, openclaw, ai-agent, discord, howto, homelab]
source: "实际创建 xhs-creator agent 的过程总结 + skill review 后改进"
---

# OpenClaw Agent 创建指南

## 概述

基于创建小红书 agent (xhs-creator) 的实际经验，总结 OpenClaw agent 创建的完整流程。Claude Code 有对应的自动化 skill (`openclaw-create-agent`)，说"创建一个 xxx agent"即可触发。

## 前置准备

### 1. 创建 Discord Bot

1. 访问 [Discord Developer Portal](https://discord.com/developers/applications)
2. New Application > 命名 > Create
3. Bot 页面 > Reset Token > 复制 token
4. 开启 **Message Content Intent**（Privileged Gateway Intents 下）
5. 生成邀请链接：OAuth2 > URL Generator > 勾选 `bot` > 权限选择 Send Messages, Read Message History, Add Reactions
6. 用链接把 bot 邀请到目标 Discord 服务器

### 2. 获取 Discord ID

需要开启开发者模式（用户设置 > 高级 > 开发者模式）：

| 信息 | 获取方式 |
|------|---------|
| Guild ID | 右键服务器图标 > 复制服务器 ID |
| Channel ID | 右键文字频道 > 复制频道 ID |
| Bot User ID | Base64 解码 token 第一段（`.` 之前）|
| Owner User ID | `964122056163721286`（固定值） |

Bot User ID 解码方法：

```bash
echo "TOKEN第一段" | base64 -d
# 例如: echo "MTQ4NTMwNTQyOTcxMzA5NjkzNw" | base64 -d
# 输出: 1485305429713096937
```

## 创建步骤

### Step 1: Pre-flight 检查

验证 agent ID 是否已被占用：

```bash
ssh yiukai@192.168.68.108 'node -e "
const cfg = JSON.parse(require(\"fs\").readFileSync(\"/home/yiukai/.openclaw/openclaw.json\", \"utf8\"));
const exists = cfg.agents.list.some(a => a.id === \"AGENT_ID\");
console.log(exists ? \"CONFLICT\" : \"OK\");
"'
```

### Step 2: 创建目录

```bash
ssh yiukai@192.168.68.108 "mkdir -p ~/.openclaw/workspace-{agent-id} ~/.openclaw/agents/{agent-id}/agent"
```

### Step 3: 编写 Bootstrap 文件

**重要**: 所有 .md 文件放在 **workspace** 目录（`~/.openclaw/workspace-{agent-id}/`），**不是** agentDir。agentDir 只放 JSON 配置文件（auth-profiles.json, models.json），由系统自动管理。

**AGENTS.md** -- 操作指令、能力定义、工作流程。必须包含：

1. 身份声明 -- 一句话说明 agent 是谁、专注什么
2. 核心能力 -- 3-5 个编号章节，具体描述
3. 工作流程/输出模板 -- agent 产出的结构化格式
4. 约束条件 -- 明确不做什么

**SOUL.md** -- 人格、语气、边界。保持简短（20-30行）：

1. 身份 -- 一行角色描述
2. 语气 -- 3-4 条沟通风格
3. 语言 -- 主要使用的语言
4. 边界 -- 3-4 条拒绝做的事

可选文件：
- `TOOLS.md` -- 用户自定义工具说明
- `BOOTSTRAP.md` -- 一次性引导（运行后自动删除）
- `IDENTITY.md` -- 名称/风格
- `USER.md` -- 用户画像

### Step 4: 更新 openclaw.json（三部分）

使用 Node.js 脚本通过 SSH 原子更新，确保 JSON 有效性：

#### 4a. Agent 条目 (`agents.list`)

```json
{
  "id": "agent-id",
  "name": "agent-id",
  "workspace": "/home/yiukai/.openclaw/workspace-agent-id",
  "agentDir": "/home/yiukai/.openclaw/agents/agent-id/agent",
  "model": "kimi-coding/k2p5",
  "identity": { "name": "显示名称" },
  "groupChat": {
    "mentionPatterns": ["<@!?BOT_USER_ID>", "中文名称", "英文简称", "BOT_USER_ID"]
  }
}
```

| 字段 | 必填 | 说明 |
|------|------|------|
| `id` | Yes | 唯一标识符，用于 binding 和命令引用 |
| `workspace` | Yes | agent 的工作目录，存放会话数据 |
| `agentDir` | Yes | AGENTS.md/SOUL.md 所在目录 |
| `model` | No | 覆盖 `agents.defaults.model.primary` |
| `identity.name` | Yes | 在消息中显示的名称 |
| `groupChat.mentionPatterns` | No | 群聊中触发 agent 的模式 |
| `subagents.allowAgents` | No | 允许调用的子 agent 列表 |

#### 4b. Discord 账户 (`channels.discord.accounts`)

```json
"account-id": {
  "name": "显示名称",
  "enabled": true,
  "token": "DISCORD_BOT_TOKEN",
  "groupPolicy": "open",
  "streaming": "off",
  "guilds": {
    "GUILD_ID": {
      "requireMention": false,
      "users": ["964122056163721286", "BOT_USER_ID"],
      "channels": { "CHANNEL_ID": { "allow": true } }
    }
  }
}
```

| 字段 | 说明 |
|------|------|
| `groupPolicy` | `open` = 允许所有，`allowlist` = 仅白名单，`disabled` = 禁用 |
| `requireMention` | `true` = 共享频道需 @mention，`false` = 独占频道直接响应 |
| `users` | 白名单，必须包含 owner ID 和 bot 自身 ID |
| `streaming` | `off` / `partial` / `full` |

#### 4c. Binding (`bindings`)

```json
{ "agentId": "agent-id", "match": { "channel": "discord", "accountId": "account-id" } }
```

### Step 5: 验证

配置支持热重载，保存后自动生效。检查日志：

```bash
ssh yiukai@192.168.68.108 'journalctl --user -u openclaw-gateway --since "30 sec ago" --no-pager | grep -iE "agent-id|error|reload"'
```

三个成功指标（全部出现才算成功）：

1. `[reload] config change detected` -- 热重载触发
2. `[discord] [agent-id] starting provider` -- bot 连接 Discord
3. `channels resolved: GUILD_ID/CHANNEL_ID` -- 频道解析成功

如果热重载未触发：

```bash
ssh yiukai@192.168.68.108 'systemctl --user restart openclaw-gateway'
```

## 可选扩展

### 添加 Skills

```bash
ssh yiukai@192.168.68.108 "mkdir -p ~/.openclaw/skills/skill-name"
# 然后写 SKILL.md（含 frontmatter: name, description, requires, install）
```

### 添加 Cron 定时任务

通过 Node.js 脚本添加到 `cron.entries`，或使用 CLI：

```bash
openclaw cron add --agent agent-id --schedule "0 8 * * 1-5" \
  --message "任务内容" --deliver discord:CHANNEL_ID
```

### 启用 Agent 间通信

1. 添加 agent ID 到 `tools.agentToAgent.allow` 列表
2. 在调用方 agent 设置 `subagents.allowAgents`
3. 共享频道中所有协作 agent 设置 `requireMention: true`

## 实际案例

### xhs-creator（2026-03-22）

| 项目 | 值 |
|------|-----|
| Agent ID | `xhs-creator` |
| 显示名称 | 小红薯 |
| Discord Bot | @小红书牛马 |
| Guild | 小红书 (`1485305839379021871`) |
| Channel | general (`1485305839828074620`) |
| Bot User ID | `1485305429713096937` |
| 模型 | kimi-coding/k2p5 |
| requireMention | false（独占频道） |
| 用途 | 小红书内容创作、话题分析、笔记撰写 |

## 排障指南

### Bot 无响应

1. 检查 bot 是否已邀请到服务器
2. 检查 Message Content Intent 是否开启
3. 检查 `enabled: true`
4. 检查 users 白名单是否包含你的 ID (`964122056163721286`)
5. 查看日志：`journalctl --user -u openclaw-gateway -f`
6. 检查 token 是否有效（可能已过期需重新生成）

### 多 Agent 协作

- 在同一 Guild 的同一频道放多个 agent
- 所有 agent 设置 `requireMention: true` 避免同时响应
- 配置 `subagents.allowAgents` 允许 agent 间通信
- 配置 `tools.agentToAgent.allow` 列表

## Claude Code 自动化

对应 skill: `~/.claude/skills/openclaw-create-agent/SKILL.md`

触发方式：告诉 Claude "创建一个 xxx agent" / "add agent" / "new bot"，提供 token、Guild ID、Channel ID 即可自动完成全部步骤。

## Related

- [[OpenClaw-Skill-Reference]]
- [[OpenClaw 部署配置分析]]
- [[OpenClaw Stock Agent 配置详情]]
