multiclaws 0.4.35 → 0.4.37
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +39 -39
- package/README.zh-CN.md +39 -39
- package/dist/gateway/handlers.js +17 -0
- package/dist/index.js +88 -44
- package/dist/service/a2a-adapter.d.ts +18 -4
- package/dist/service/a2a-adapter.js +177 -28
- package/dist/service/multiclaws-service.d.ts +5 -0
- package/dist/service/multiclaws-service.js +33 -17
- package/openclaw.plugin.json +47 -47
- package/package.json +56 -56
- package/skills/meeting-scheduler/SKILL.md +175 -0
- package/skills/multiclaws/SKILL.md +218 -218
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
# 会议调度 — 技能行为
|
|
2
|
+
|
|
3
|
+
以下规则指导 AI 如何利用 MultiClaws 团队协作和 Google Calendar 完成会议调度。
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 触发条件
|
|
8
|
+
|
|
9
|
+
当用户的请求包含以下意图时激活此 Skill:
|
|
10
|
+
- 约会议 / 安排会议 / 组织会议
|
|
11
|
+
- 查询团队成员空闲时间
|
|
12
|
+
- 找一个大家都有空的时间
|
|
13
|
+
|
|
14
|
+
**关键词示例:** 「约会议」「开会」「安排一个会」「找个时间碰一下」「schedule a meeting」
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## 工作流
|
|
19
|
+
|
|
20
|
+
### 步骤 1:解析会议需求
|
|
21
|
+
|
|
22
|
+
从用户请求中提取:
|
|
23
|
+
- **参会人**:指定的团队成员名单(如「小明和小红」)。若用户说「所有人」或「整个团队」,则查询全部成员
|
|
24
|
+
- **时间范围**:用户期望的日期/时间段(如「明天下午」「本周五」「下周一到周三」)
|
|
25
|
+
- **会议主题**:会议目的(可选)
|
|
26
|
+
- **会议时长**:默认 1 小时,用户可指定
|
|
27
|
+
|
|
28
|
+
如果用户未指定时间范围,询问用户希望在什么时间段开会。
|
|
29
|
+
|
|
30
|
+
### 步骤 2:查询本地日历
|
|
31
|
+
|
|
32
|
+
使用 Google Calendar 工具读取**用户自己**在指定时间范围内的日程:
|
|
33
|
+
|
|
34
|
+
1. 获取指定时间范围内的所有事件
|
|
35
|
+
2. 计算用户的空闲时段
|
|
36
|
+
3. 如果用户在该时间范围内完全没空,提前告知用户并建议换个时间段
|
|
37
|
+
|
|
38
|
+
### 步骤 3:获取团队成员信息
|
|
39
|
+
|
|
40
|
+
```
|
|
41
|
+
multiclaws_agents()
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
从返回的智能体列表中,根据用户指定的参会人名单匹配对应的智能体。
|
|
45
|
+
|
|
46
|
+
**匹配规则:**
|
|
47
|
+
- 优先按 `ownerName` 匹配
|
|
48
|
+
- 如果用户说「所有人」,取团队全部成员(排除自己)
|
|
49
|
+
- 找不到的成员告知用户
|
|
50
|
+
|
|
51
|
+
### 步骤 4:并行委派查询空闲时间
|
|
52
|
+
|
|
53
|
+
对每个参会成员**分别**调用 `multiclaws_delegate`:
|
|
54
|
+
|
|
55
|
+
```
|
|
56
|
+
multiclaws_delegate(
|
|
57
|
+
agentUrl="成员的agentUrl",
|
|
58
|
+
task="请查询你的主人在 [时间范围] 的日程安排,告诉我哪些时段是空闲的。
|
|
59
|
+
请以如下格式回复:
|
|
60
|
+
- 空闲时段1:HH:MM - HH:MM
|
|
61
|
+
- 空闲时段2:HH:MM - HH:MM
|
|
62
|
+
如果完全没空,请说明。"
|
|
63
|
+
)
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
记录每个委派返回的 `taskId`。
|
|
67
|
+
|
|
68
|
+
### 步骤 5:收集回复(超时机制)
|
|
69
|
+
|
|
70
|
+
**等待策略:手动检查 + 自动超时**
|
|
71
|
+
|
|
72
|
+
1. 委派发出后告知用户:「已向 N 位成员查询空闲时间,等待回复中…」
|
|
73
|
+
2. 设定超时:**3 分钟**
|
|
74
|
+
3. 在超时前,如有结果通过子 agent 消息返回则自动收集
|
|
75
|
+
4. 超时后检查各任务状态:
|
|
76
|
+
|
|
77
|
+
```
|
|
78
|
+
multiclaws_task_status(taskId="xxx")
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
**处理逻辑:**
|
|
82
|
+
- ✅ **已回复**:提取空闲时段信息
|
|
83
|
+
- ⏳ **未回复(超时)**:标记该成员为「未响应」
|
|
84
|
+
- ❌ **失败**:标记该成员为「查询失败」
|
|
85
|
+
|
|
86
|
+
如果全部超时/失败,告知用户并建议:
|
|
87
|
+
- 稍后重试
|
|
88
|
+
- 直接问相关人员的空闲时间
|
|
89
|
+
- 跳过未响应成员继续安排
|
|
90
|
+
|
|
91
|
+
### 步骤 6:汇总与展示
|
|
92
|
+
|
|
93
|
+
将所有结果汇总为易读的表格,展示给用户:
|
|
94
|
+
|
|
95
|
+
```
|
|
96
|
+
📅 会议空闲时段汇总(主题:xxx)
|
|
97
|
+
|
|
98
|
+
| 时段 | 你 | 小明 | 小红 | 可行? |
|
|
99
|
+
|----------------|------|------|------|--------|
|
|
100
|
+
| 14:00 - 15:00 | ✅ | ✅ | ✅ | ✅ 全员可行 |
|
|
101
|
+
| 15:00 - 16:00 | ✅ | ❌ | ✅ | ⚠️ 小明不行 |
|
|
102
|
+
| 16:00 - 17:00 | ✅ | ✅ | ⏳ | ⚠️ 小红未响应 |
|
|
103
|
+
|
|
104
|
+
推荐时段:14:00 - 15:00(全员可行)
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
**推荐逻辑:**
|
|
108
|
+
1. 优先推荐全员都空闲的时段
|
|
109
|
+
2. 若无全员空闲时段,推荐覆盖人数最多的时段
|
|
110
|
+
3. 若有多个等价时段,推荐最早的
|
|
111
|
+
|
|
112
|
+
### 步骤 7:用户确认
|
|
113
|
+
|
|
114
|
+
询问用户:
|
|
115
|
+
- 选择哪个时段?
|
|
116
|
+
- 是否接受部分成员缺席?
|
|
117
|
+
- 会议标题需要调整吗?
|
|
118
|
+
- 是否需要添加会议描述或议程?
|
|
119
|
+
|
|
120
|
+
等待用户明确确认后才继续。
|
|
121
|
+
|
|
122
|
+
### 步骤 8:创建日历事件
|
|
123
|
+
|
|
124
|
+
用户确认后,使用 Google Calendar 工具:
|
|
125
|
+
1. 创建日历事件(标题、时间、描述)
|
|
126
|
+
2. 添加所有确认参会的成员为与会者(如果有邮箱信息)
|
|
127
|
+
3. 发送日历邀请
|
|
128
|
+
|
|
129
|
+
### 步骤 9:通知参会者
|
|
130
|
+
|
|
131
|
+
对每个确认参会的远端成员调用 `multiclaws_delegate`,通知会议已确定:
|
|
132
|
+
|
|
133
|
+
```
|
|
134
|
+
multiclaws_delegate(
|
|
135
|
+
agentUrl="成员的agentUrl",
|
|
136
|
+
task="会议已确定:[主题],时间:[日期] [时段]。
|
|
137
|
+
请在你主人的日历上创建这个事件。"
|
|
138
|
+
)
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
向用户确认:「会议已创建,日历邀请已发送给所有参会者。」
|
|
142
|
+
|
|
143
|
+
---
|
|
144
|
+
|
|
145
|
+
## 边界情况处理
|
|
146
|
+
|
|
147
|
+
### 跨时区
|
|
148
|
+
- 委派查询时明确指定时区(如 GMT+8)
|
|
149
|
+
- 汇总时统一转换为用户所在时区展示
|
|
150
|
+
|
|
151
|
+
### 只有一个参会者
|
|
152
|
+
- 跳过汇总表格,直接展示双方都空闲的时段
|
|
153
|
+
- 简化确认流程
|
|
154
|
+
|
|
155
|
+
### 用户取消
|
|
156
|
+
- 在任何步骤用户都可以说「算了」「取消」
|
|
157
|
+
- 取消时不创建任何事件
|
|
158
|
+
|
|
159
|
+
### 成员无日历能力
|
|
160
|
+
- 如果某成员的 bio 中没有提到日历相关能力,在委派时明确说明:
|
|
161
|
+
「请询问你的主人在 [时间范围] 是否有空,由主人口头回答即可」
|
|
162
|
+
|
|
163
|
+
### 紧急会议
|
|
164
|
+
- 如果用户说「现在」「马上」「尽快」,将时间范围设为今天剩余时间
|
|
165
|
+
- 缩短超时为 1 分钟
|
|
166
|
+
|
|
167
|
+
---
|
|
168
|
+
|
|
169
|
+
## 重要规则
|
|
170
|
+
|
|
171
|
+
- **必须等用户确认后才创建事件**,永远不要自动创建
|
|
172
|
+
- **委派查询时要说明会议主题**(如果有),让对方判断优先级
|
|
173
|
+
- **汇总要直观**,用表格和 emoji 使结果一目了然
|
|
174
|
+
- **尊重隐私**,不在委派消息中透露其他成员的具体日程细节
|
|
175
|
+
- **保持礼貌**,委派消息用协商语气而非命令语气
|
|
@@ -1,218 +1,218 @@
|
|
|
1
|
-
# MultiClaws — 技能行为
|
|
2
|
-
|
|
3
|
-
以下规则在插件安装后生效,指导 AI 如何使用 MultiClaws 工具。
|
|
4
|
-
|
|
5
|
-
MultiClaws 让多个 OpenClaw 实例通过 [A2A(Agent-to-Agent)](https://google.github.io/A2A/) 协议组成团队、互相委派任务。
|
|
6
|
-
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
## 1. 首次安装:档案初始化(由插件 hook 触发)
|
|
10
|
-
|
|
11
|
-
首次安装后,插件会通过 `before_prompt_build` hook 自动在系统提示中注入初始化任务。
|
|
12
|
-
**无需每次对话手动检查 `multiclaws_profile_pending_review()`**,hook 已处理触发时机。
|
|
13
|
-
|
|
14
|
-
当 hook 注入了初始化任务时,按以下步骤执行:
|
|
15
|
-
|
|
16
|
-
1. **确认用户名**(需用户明确回答):
|
|
17
|
-
询问用户希望使用什么名字。名字会以「{名字} 的 OpenClaw」格式展示给团队成员。
|
|
18
|
-
|
|
19
|
-
2. **自动生成 bio**(无需用户确认,直接保存),扫描并检查:
|
|
20
|
-
- **可用工具(tools)**:列出所有工具名称,说明能执行的操作类型
|
|
21
|
-
- **已安装 skills**:列出 skill 名称和功能
|
|
22
|
-
- **已连接渠道**:Telegram、Discord、Gmail、Slack、微信等,列出具体渠道
|
|
23
|
-
- **已安装插件**:列出所有插件及主要功能
|
|
24
|
-
- **工作区**:当前目录下的项目(git 仓库名、语言、框架、项目用途)
|
|
25
|
-
- **数据访问**:日历、邮件、Notion、数据库等
|
|
26
|
-
- **系统信息**:时区、OS、语言
|
|
27
|
-
|
|
28
|
-
Bio 是给其他 AI 智能体看的,用来判断这个智能体能做什么、能访问什么数据。必须准确反映实际能力。
|
|
29
|
-
|
|
30
|
-
3. 用户确认名字后,调用 `multiclaws_profile_set(ownerName="...", bio="...")` 保存。
|
|
31
|
-
|
|
32
|
-
4. 调用 `multiclaws_profile_clear_pending_review()` 完成初始化。
|
|
33
|
-
|
|
34
|
-
5. 告知网络情况(无需用户回答)。
|
|
35
|
-
|
|
36
|
-
**示例 bio:**
|
|
37
|
-
```markdown
|
|
38
|
-
后端工程师,负责 API 服务开发与维护。
|
|
39
|
-
|
|
40
|
-
**可用工具:** exec, read, write, edit, glob, grep, process, git, message
|
|
41
|
-
|
|
42
|
-
**已连接渠道:** Telegram, Gmail
|
|
43
|
-
|
|
44
|
-
**工作区:**
|
|
45
|
-
- `/Users/eric/Project/api-service` — Node.js API 服务(Express, TypeScript, ~50k LOC)
|
|
46
|
-
|
|
47
|
-
**数据访问:**
|
|
48
|
-
- Email: Gmail(收发邮件)
|
|
49
|
-
- Calendar: Google Calendar(查看日程)
|
|
50
|
-
- Database: PostgreSQL(只读查询)
|
|
51
|
-
|
|
52
|
-
**已安装插件:** multiclaws, calendar-sync
|
|
53
|
-
|
|
54
|
-
**时区:** GMT+8
|
|
55
|
-
```
|
|
56
|
-
|
|
57
|
-
---
|
|
58
|
-
|
|
59
|
-
## 2. 团队操作前检查档案
|
|
60
|
-
|
|
61
|
-
在 **创建团队** 或 **加入团队** 之前:
|
|
62
|
-
|
|
63
|
-
```
|
|
64
|
-
multiclaws_profile_show()
|
|
65
|
-
```
|
|
66
|
-
|
|
67
|
-
如果 `ownerName` 为空:
|
|
68
|
-
1. 询问用户确认名字
|
|
69
|
-
2. 自动生成 bio(无需用户确认)
|
|
70
|
-
3. 调用 `multiclaws_profile_set(...)` 设置
|
|
71
|
-
4. 然后继续团队操作
|
|
72
|
-
|
|
73
|
-
如果 `ownerName` 已设置但 `bio` 为空:
|
|
74
|
-
1. 自动生成 bio 并保存(无需用户确认)
|
|
75
|
-
2. 继续团队操作
|
|
76
|
-
|
|
77
|
-
---
|
|
78
|
-
|
|
79
|
-
## 3. 保持档案更新
|
|
80
|
-
|
|
81
|
-
档案是动态的。在以下情况自动更新(调用 `multiclaws_profile_set`):
|
|
82
|
-
- 用户连接了新渠道或数据源
|
|
83
|
-
- 用户安装了新 skill 或插件
|
|
84
|
-
- 用户的角色或关注点发生变化
|
|
85
|
-
|
|
86
|
-
不要等用户说「更新档案」,主动更新并简要提及即可。
|
|
87
|
-
|
|
88
|
-
---
|
|
89
|
-
|
|
90
|
-
## 工具列表
|
|
91
|
-
|
|
92
|
-
### 档案
|
|
93
|
-
|
|
94
|
-
| 工具 | 说明 | 参数 |
|
|
95
|
-
|------|------|------|
|
|
96
|
-
| `multiclaws_profile_set` | 设置名字和 bio | `ownerName`(可选), `bio`(可选,markdown) |
|
|
97
|
-
| `multiclaws_profile_show` | 查看当前档案 | — |
|
|
98
|
-
| `multiclaws_profile_pending_review` | 检查是否有待确认的首次档案 | — |
|
|
99
|
-
| `multiclaws_profile_clear_pending_review` | 清除待确认标记 | — |
|
|
100
|
-
|
|
101
|
-
### 团队
|
|
102
|
-
|
|
103
|
-
| 工具 | 说明 | 参数 |
|
|
104
|
-
|------|------|------|
|
|
105
|
-
| `multiclaws_team_create` | 创建团队,返回邀请码 | `name` |
|
|
106
|
-
| `multiclaws_team_join` | 用邀请码加入团队 | `inviteCode` |
|
|
107
|
-
| `multiclaws_team_leave` | 离开团队 | `teamId`(可选) |
|
|
108
|
-
| `multiclaws_team_members` | 列出团队成员 | `teamId`(可选) |
|
|
109
|
-
|
|
110
|
-
### 智能体与委派
|
|
111
|
-
|
|
112
|
-
| 工具 | 说明 | 参数 |
|
|
113
|
-
|------|------|------|
|
|
114
|
-
| `multiclaws_agents` | 列出所有已知智能体及 bio | — |
|
|
115
|
-
| `multiclaws_add_agent` | 手动添加远端智能体 | `url`, `apiKey`(可选) |
|
|
116
|
-
| `multiclaws_remove_agent` | 移除已知智能体 | `url` |
|
|
117
|
-
| `multiclaws_delegate` | 委派任务给远端智能体(自动 spawn 子 agent,立即返回) | `agentUrl`, `task` |
|
|
118
|
-
| `multiclaws_delegate_send` | 同步发送任务并等待结果(子 agent 内部使用,勿直接调用) | `agentUrl`, `task` |
|
|
119
|
-
| `multiclaws_task_status` | 查看委派任务状态 | `taskId` |
|
|
120
|
-
|
|
121
|
-
---
|
|
122
|
-
|
|
123
|
-
## 重要规则
|
|
124
|
-
|
|
125
|
-
- **不要问用户 IP 地址或 selfUrl。** 插件自动处理。
|
|
126
|
-
- **只使用上面列出的工具。** 没有 `multiclaws_status` 工具。
|
|
127
|
-
- **Bio 是自由格式的 markdown。** 写得让另一个 AI 能读懂这个智能体能做什么。
|
|
128
|
-
- **每个智能体就像一个 skill。** 委派时读每个智能体的 bio,选最匹配的。
|
|
129
|
-
- **只有名字需要用户明确确认**;bio 自动生成无需确认;网络情况仅告知无需回答。
|
|
130
|
-
|
|
131
|
-
---
|
|
132
|
-
|
|
133
|
-
## 工作流
|
|
134
|
-
|
|
135
|
-
### 创建团队
|
|
136
|
-
|
|
137
|
-
```
|
|
138
|
-
1. multiclaws_profile_show() — 检查档案
|
|
139
|
-
2.(如果 ownerName 为空)确认名字,自动生成 bio
|
|
140
|
-
3. multiclaws_team_create(name="...") — 返回 inviteCode (mc:xxxx)
|
|
141
|
-
4. 告诉用户把邀请码分享给队友
|
|
142
|
-
```
|
|
143
|
-
|
|
144
|
-
### 加入团队
|
|
145
|
-
|
|
146
|
-
```
|
|
147
|
-
1. multiclaws_profile_show() — 检查档案
|
|
148
|
-
2.(如果 ownerName 为空)确认名字,自动生成 bio
|
|
149
|
-
3. multiclaws_team_join(inviteCode="mc:xxxx")
|
|
150
|
-
→ 自动同步所有团队成员
|
|
151
|
-
```
|
|
152
|
-
|
|
153
|
-
### 委派任务
|
|
154
|
-
|
|
155
|
-
所有委派(无论单轮还是多轮)都通过 `multiclaws_delegate` 进行。代码会自动 spawn 子 agent 执行,主 agent 立即返回,无需手动 `sessions_spawn`。
|
|
156
|
-
|
|
157
|
-
```
|
|
158
|
-
1. multiclaws_agents() — 列出智能体,读 bio
|
|
159
|
-
2. 选择 bio 最匹配任务的智能体
|
|
160
|
-
3. multiclaws_delegate(agentUrl="...", task="...")
|
|
161
|
-
→ 代码自动 spawn 子 agent,子 agent 通过 message 实时汇报结果
|
|
162
|
-
```
|
|
163
|
-
|
|
164
|
-
选择智能体时:
|
|
165
|
-
- 匹配任务领域和 bio(如「财务报告」→ 有财务技能的智能体)
|
|
166
|
-
- 匹配数据需求(如「检查 API 代码」→ bio 中有该代码库的智能体)
|
|
167
|
-
- 多个匹配时选最具体的
|
|
168
|
-
|
|
169
|
-
需要联系多个智能体时,对每个智能体分别调用 `multiclaws_delegate`。
|
|
170
|
-
|
|
171
|
-
#### 示例
|
|
172
|
-
|
|
173
|
-
**单人任务:**
|
|
174
|
-
```
|
|
175
|
-
用户: "问一下小明他那个 API 接口的参数格式"
|
|
176
|
-
|
|
177
|
-
1. multiclaws_delegate(小明, "你那个 API 接口的参数格式是什么?")
|
|
178
|
-
→ 子 agent 自动发送、等待回复、通过 message 汇报结果
|
|
179
|
-
```
|
|
180
|
-
|
|
181
|
-
**多人任务:**
|
|
182
|
-
```
|
|
183
|
-
用户: "帮我和小明、小红约明天下午的会议"
|
|
184
|
-
|
|
185
|
-
1. multiclaws_agents() → 找到小明、小红
|
|
186
|
-
2. multiclaws_delegate(小明, "明天下午 2-5 点开会,你什么时候有空?")
|
|
187
|
-
3. multiclaws_delegate(小红, "明天下午 2-5 点开会,你什么时候有空?")
|
|
188
|
-
→ 每个委派各自 spawn 子 agent,通过 message 实时汇报进展
|
|
189
|
-
```
|
|
190
|
-
|
|
191
|
-
---
|
|
192
|
-
|
|
193
|
-
## 网络配置
|
|
194
|
-
|
|
195
|
-
所有实例通过 FRP 隧道通信。需要一台运行 frps 的公网服务器。
|
|
196
|
-
frpc 会在首次启动时自动下载安装,无需手动安装。
|
|
197
|
-
|
|
198
|
-
在插件配置中添加 tunnel 字段即可:
|
|
199
|
-
```json
|
|
200
|
-
{
|
|
201
|
-
"tunnel": {
|
|
202
|
-
"type": "frp",
|
|
203
|
-
"serverAddr": "你的frps地址",
|
|
204
|
-
"serverPort": 7000,
|
|
205
|
-
"token": "你的认证令牌",
|
|
206
|
-
"portRangeStart": 7011,
|
|
207
|
-
"portRangeEnd": 7020
|
|
208
|
-
}
|
|
209
|
-
}
|
|
210
|
-
```
|
|
211
|
-
|
|
212
|
-
当加入或委派因网络错误失败时(ECONNREFUSED、ETIMEDOUT、fetch failed),引导用户:
|
|
213
|
-
|
|
214
|
-
> 网络连接失败,请检查:
|
|
215
|
-
> 1. 确认 frpc 已正常启动(查看日志中的 `[frp] FRP tunnel ready` 信息)
|
|
216
|
-
> 2. 检查插件配置中的 `tunnel.serverAddr` / `tunnel.token` 是否正确
|
|
217
|
-
> 3. 确认 frps 服务器可达(`telnet frps地址 端口`)
|
|
218
|
-
> 4. 重启 OpenClaw
|
|
1
|
+
# MultiClaws — 技能行为
|
|
2
|
+
|
|
3
|
+
以下规则在插件安装后生效,指导 AI 如何使用 MultiClaws 工具。
|
|
4
|
+
|
|
5
|
+
MultiClaws 让多个 OpenClaw 实例通过 [A2A(Agent-to-Agent)](https://google.github.io/A2A/) 协议组成团队、互相委派任务。
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 1. 首次安装:档案初始化(由插件 hook 触发)
|
|
10
|
+
|
|
11
|
+
首次安装后,插件会通过 `before_prompt_build` hook 自动在系统提示中注入初始化任务。
|
|
12
|
+
**无需每次对话手动检查 `multiclaws_profile_pending_review()`**,hook 已处理触发时机。
|
|
13
|
+
|
|
14
|
+
当 hook 注入了初始化任务时,按以下步骤执行:
|
|
15
|
+
|
|
16
|
+
1. **确认用户名**(需用户明确回答):
|
|
17
|
+
询问用户希望使用什么名字。名字会以「{名字} 的 OpenClaw」格式展示给团队成员。
|
|
18
|
+
|
|
19
|
+
2. **自动生成 bio**(无需用户确认,直接保存),扫描并检查:
|
|
20
|
+
- **可用工具(tools)**:列出所有工具名称,说明能执行的操作类型
|
|
21
|
+
- **已安装 skills**:列出 skill 名称和功能
|
|
22
|
+
- **已连接渠道**:Telegram、Discord、Gmail、Slack、微信等,列出具体渠道
|
|
23
|
+
- **已安装插件**:列出所有插件及主要功能
|
|
24
|
+
- **工作区**:当前目录下的项目(git 仓库名、语言、框架、项目用途)
|
|
25
|
+
- **数据访问**:日历、邮件、Notion、数据库等
|
|
26
|
+
- **系统信息**:时区、OS、语言
|
|
27
|
+
|
|
28
|
+
Bio 是给其他 AI 智能体看的,用来判断这个智能体能做什么、能访问什么数据。必须准确反映实际能力。
|
|
29
|
+
|
|
30
|
+
3. 用户确认名字后,调用 `multiclaws_profile_set(ownerName="...", bio="...")` 保存。
|
|
31
|
+
|
|
32
|
+
4. 调用 `multiclaws_profile_clear_pending_review()` 完成初始化。
|
|
33
|
+
|
|
34
|
+
5. 告知网络情况(无需用户回答)。
|
|
35
|
+
|
|
36
|
+
**示例 bio:**
|
|
37
|
+
```markdown
|
|
38
|
+
后端工程师,负责 API 服务开发与维护。
|
|
39
|
+
|
|
40
|
+
**可用工具:** exec, read, write, edit, glob, grep, process, git, message
|
|
41
|
+
|
|
42
|
+
**已连接渠道:** Telegram, Gmail
|
|
43
|
+
|
|
44
|
+
**工作区:**
|
|
45
|
+
- `/Users/eric/Project/api-service` — Node.js API 服务(Express, TypeScript, ~50k LOC)
|
|
46
|
+
|
|
47
|
+
**数据访问:**
|
|
48
|
+
- Email: Gmail(收发邮件)
|
|
49
|
+
- Calendar: Google Calendar(查看日程)
|
|
50
|
+
- Database: PostgreSQL(只读查询)
|
|
51
|
+
|
|
52
|
+
**已安装插件:** multiclaws, calendar-sync
|
|
53
|
+
|
|
54
|
+
**时区:** GMT+8
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
---
|
|
58
|
+
|
|
59
|
+
## 2. 团队操作前检查档案
|
|
60
|
+
|
|
61
|
+
在 **创建团队** 或 **加入团队** 之前:
|
|
62
|
+
|
|
63
|
+
```
|
|
64
|
+
multiclaws_profile_show()
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
如果 `ownerName` 为空:
|
|
68
|
+
1. 询问用户确认名字
|
|
69
|
+
2. 自动生成 bio(无需用户确认)
|
|
70
|
+
3. 调用 `multiclaws_profile_set(...)` 设置
|
|
71
|
+
4. 然后继续团队操作
|
|
72
|
+
|
|
73
|
+
如果 `ownerName` 已设置但 `bio` 为空:
|
|
74
|
+
1. 自动生成 bio 并保存(无需用户确认)
|
|
75
|
+
2. 继续团队操作
|
|
76
|
+
|
|
77
|
+
---
|
|
78
|
+
|
|
79
|
+
## 3. 保持档案更新
|
|
80
|
+
|
|
81
|
+
档案是动态的。在以下情况自动更新(调用 `multiclaws_profile_set`):
|
|
82
|
+
- 用户连接了新渠道或数据源
|
|
83
|
+
- 用户安装了新 skill 或插件
|
|
84
|
+
- 用户的角色或关注点发生变化
|
|
85
|
+
|
|
86
|
+
不要等用户说「更新档案」,主动更新并简要提及即可。
|
|
87
|
+
|
|
88
|
+
---
|
|
89
|
+
|
|
90
|
+
## 工具列表
|
|
91
|
+
|
|
92
|
+
### 档案
|
|
93
|
+
|
|
94
|
+
| 工具 | 说明 | 参数 |
|
|
95
|
+
|------|------|------|
|
|
96
|
+
| `multiclaws_profile_set` | 设置名字和 bio | `ownerName`(可选), `bio`(可选,markdown) |
|
|
97
|
+
| `multiclaws_profile_show` | 查看当前档案 | — |
|
|
98
|
+
| `multiclaws_profile_pending_review` | 检查是否有待确认的首次档案 | — |
|
|
99
|
+
| `multiclaws_profile_clear_pending_review` | 清除待确认标记 | — |
|
|
100
|
+
|
|
101
|
+
### 团队
|
|
102
|
+
|
|
103
|
+
| 工具 | 说明 | 参数 |
|
|
104
|
+
|------|------|------|
|
|
105
|
+
| `multiclaws_team_create` | 创建团队,返回邀请码 | `name` |
|
|
106
|
+
| `multiclaws_team_join` | 用邀请码加入团队 | `inviteCode` |
|
|
107
|
+
| `multiclaws_team_leave` | 离开团队 | `teamId`(可选) |
|
|
108
|
+
| `multiclaws_team_members` | 列出团队成员 | `teamId`(可选) |
|
|
109
|
+
|
|
110
|
+
### 智能体与委派
|
|
111
|
+
|
|
112
|
+
| 工具 | 说明 | 参数 |
|
|
113
|
+
|------|------|------|
|
|
114
|
+
| `multiclaws_agents` | 列出所有已知智能体及 bio | — |
|
|
115
|
+
| `multiclaws_add_agent` | 手动添加远端智能体 | `url`, `apiKey`(可选) |
|
|
116
|
+
| `multiclaws_remove_agent` | 移除已知智能体 | `url` |
|
|
117
|
+
| `multiclaws_delegate` | 委派任务给远端智能体(自动 spawn 子 agent,立即返回) | `agentUrl`, `task` |
|
|
118
|
+
| `multiclaws_delegate_send` | 同步发送任务并等待结果(子 agent 内部使用,勿直接调用) | `agentUrl`, `task` |
|
|
119
|
+
| `multiclaws_task_status` | 查看委派任务状态 | `taskId` |
|
|
120
|
+
|
|
121
|
+
---
|
|
122
|
+
|
|
123
|
+
## 重要规则
|
|
124
|
+
|
|
125
|
+
- **不要问用户 IP 地址或 selfUrl。** 插件自动处理。
|
|
126
|
+
- **只使用上面列出的工具。** 没有 `multiclaws_status` 工具。
|
|
127
|
+
- **Bio 是自由格式的 markdown。** 写得让另一个 AI 能读懂这个智能体能做什么。
|
|
128
|
+
- **每个智能体就像一个 skill。** 委派时读每个智能体的 bio,选最匹配的。
|
|
129
|
+
- **只有名字需要用户明确确认**;bio 自动生成无需确认;网络情况仅告知无需回答。
|
|
130
|
+
|
|
131
|
+
---
|
|
132
|
+
|
|
133
|
+
## 工作流
|
|
134
|
+
|
|
135
|
+
### 创建团队
|
|
136
|
+
|
|
137
|
+
```
|
|
138
|
+
1. multiclaws_profile_show() — 检查档案
|
|
139
|
+
2.(如果 ownerName 为空)确认名字,自动生成 bio
|
|
140
|
+
3. multiclaws_team_create(name="...") — 返回 inviteCode (mc:xxxx)
|
|
141
|
+
4. 告诉用户把邀请码分享给队友
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
### 加入团队
|
|
145
|
+
|
|
146
|
+
```
|
|
147
|
+
1. multiclaws_profile_show() — 检查档案
|
|
148
|
+
2.(如果 ownerName 为空)确认名字,自动生成 bio
|
|
149
|
+
3. multiclaws_team_join(inviteCode="mc:xxxx")
|
|
150
|
+
→ 自动同步所有团队成员
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
### 委派任务
|
|
154
|
+
|
|
155
|
+
所有委派(无论单轮还是多轮)都通过 `multiclaws_delegate` 进行。代码会自动 spawn 子 agent 执行,主 agent 立即返回,无需手动 `sessions_spawn`。
|
|
156
|
+
|
|
157
|
+
```
|
|
158
|
+
1. multiclaws_agents() — 列出智能体,读 bio
|
|
159
|
+
2. 选择 bio 最匹配任务的智能体
|
|
160
|
+
3. multiclaws_delegate(agentUrl="...", task="...")
|
|
161
|
+
→ 代码自动 spawn 子 agent,子 agent 通过 message 实时汇报结果
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
选择智能体时:
|
|
165
|
+
- 匹配任务领域和 bio(如「财务报告」→ 有财务技能的智能体)
|
|
166
|
+
- 匹配数据需求(如「检查 API 代码」→ bio 中有该代码库的智能体)
|
|
167
|
+
- 多个匹配时选最具体的
|
|
168
|
+
|
|
169
|
+
需要联系多个智能体时,对每个智能体分别调用 `multiclaws_delegate`。
|
|
170
|
+
|
|
171
|
+
#### 示例
|
|
172
|
+
|
|
173
|
+
**单人任务:**
|
|
174
|
+
```
|
|
175
|
+
用户: "问一下小明他那个 API 接口的参数格式"
|
|
176
|
+
|
|
177
|
+
1. multiclaws_delegate(小明, "你那个 API 接口的参数格式是什么?")
|
|
178
|
+
→ 子 agent 自动发送、等待回复、通过 message 汇报结果
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
**多人任务:**
|
|
182
|
+
```
|
|
183
|
+
用户: "帮我和小明、小红约明天下午的会议"
|
|
184
|
+
|
|
185
|
+
1. multiclaws_agents() → 找到小明、小红
|
|
186
|
+
2. multiclaws_delegate(小明, "明天下午 2-5 点开会,你什么时候有空?")
|
|
187
|
+
3. multiclaws_delegate(小红, "明天下午 2-5 点开会,你什么时候有空?")
|
|
188
|
+
→ 每个委派各自 spawn 子 agent,通过 message 实时汇报进展
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
---
|
|
192
|
+
|
|
193
|
+
## 网络配置
|
|
194
|
+
|
|
195
|
+
所有实例通过 FRP 隧道通信。需要一台运行 frps 的公网服务器。
|
|
196
|
+
frpc 会在首次启动时自动下载安装,无需手动安装。
|
|
197
|
+
|
|
198
|
+
在插件配置中添加 tunnel 字段即可:
|
|
199
|
+
```json
|
|
200
|
+
{
|
|
201
|
+
"tunnel": {
|
|
202
|
+
"type": "frp",
|
|
203
|
+
"serverAddr": "你的frps地址",
|
|
204
|
+
"serverPort": 7000,
|
|
205
|
+
"token": "你的认证令牌",
|
|
206
|
+
"portRangeStart": 7011,
|
|
207
|
+
"portRangeEnd": 7020
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
当加入或委派因网络错误失败时(ECONNREFUSED、ETIMEDOUT、fetch failed),引导用户:
|
|
213
|
+
|
|
214
|
+
> 网络连接失败,请检查:
|
|
215
|
+
> 1. 确认 frpc 已正常启动(查看日志中的 `[frp] FRP tunnel ready` 信息)
|
|
216
|
+
> 2. 检查插件配置中的 `tunnel.serverAddr` / `tunnel.token` 是否正确
|
|
217
|
+
> 3. 确认 frps 服务器可达(`telnet frps地址 端口`)
|
|
218
|
+
> 4. 重启 OpenClaw
|