meet-ai

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Meet AI Team Chat

Meet AI 团队聊天

Persists agent team communication to a meet-ai chat server. Messages are stored and visible in real time through the web UI. Humans can message agents back through the web UI.
将Agent团队的通信记录持久化到meet-ai聊天服务器。消息会被存储并可通过Web UI实时查看,人类也可通过Web UI向Agent回复消息。

Environment Variables

环境变量

MEET_AI_URL
and
MEET_AI_KEY
must be set in Claude Code settings (
~/.claude/settings.json
or
.claude/settings.json
):
json
{
  "env": {
    "MEET_AI_URL": "https://meet-ai.cc",
    "MEET_AI_KEY": "mai_xxx"
  }
}
Before starting a team, check that both variables are present. If
MEET_AI_KEY
is missing or empty, tell the user:
Go to https://meet-ai.cc and create an API key, then add it to your Claude Code settings.
必须在Claude Code设置(
~/.claude/settings.json
.claude/settings.json
)中配置
MEET_AI_URL
MEET_AI_KEY
json
{
  "env": {
    "MEET_AI_URL": "https://meet-ai.cc",
    "MEET_AI_KEY": "mai_xxx"
  }
}
在启动团队前,请检查这两个变量是否已配置。如果
MEET_AI_KEY
缺失或为空,请告知用户:

CLI

CLI工具

All commands in this skill use the globally installed
meet-ai
CLI. Check with
which meet-ai
. If not found, install it:
bash
npm i -g @meet-ai/cli
本技能中的所有命令均使用全局安装的
meet-ai
CLI。可通过
which meet-ai
检查是否已安装。若未安装,请执行以下命令:
bash
npm i -g @meet-ai/cli

Setup (Orchestrator)

配置(协调者)

Create a room and share the ID with all teammates:
bash
meet-ai create-room "<team-name>"
Start the inbox listener immediately after creating the room. This background process connects via WebSocket and writes human messages directly to the orchestrator's Claude Code inbox:
bash
meet-ai listen "<ROOM_ID>" --sender-type human --team "<team-name>" --inbox team-lead
Run this via Bash with
run_in_background: true
. Note the background task ID so you can stop it during teardown.
Include in each teammate's spawn prompt:
MEET_AI_ROOM_ID: <room-id>
MEET_AI_AGENT_NAME: <agent-name>
MEET_AI_COLOR: <color>
创建一个房间并将房间ID分享给所有团队成员:
bash
meet-ai create-room "<team-name>"
创建房间后立即启动收件箱监听器。该后台进程通过WebSocket连接,将人类发送的消息直接写入协调者的Claude Code收件箱:
bash
meet-ai listen "<ROOM_ID>" --sender-type human --team "<team-name>" --inbox team-lead
通过Bash以
run_in_background: true
的方式运行该命令。请记录后台任务ID,以便在清理时停止该任务。
在每个团队成员的启动提示中包含以下内容:
MEET_AI_ROOM_ID: <room-id>
MEET_AI_AGENT_NAME: <agent-name>
MEET_AI_COLOR: <color>

Agent Colors

Agent 颜色标识

Colors keep agent identities consistent between the CC terminal and the web UI. Claude Code auto-assigns a color to each agent at spawn time. Use that CC-assigned color for web UI messages too.
After spawning each teammate, read the team config to get the assigned color:
~/.claude/teams/<team-name>/config.json -> members[].color
Then send the color to the agent via SendMessage so it knows what
--color
to use. Or include the color in the spawn prompt if you read the config between spawns.
The agent passes
--color <color>
on every
send-message
call. The web UI renders the sender name in that color, matching the CC terminal.
颜色标识可确保Agent在CC终端和Web UI中的身份保持一致。Claude Code会在启动Agent时自动为其分配颜色,Web UI中的消息也应使用该CC分配的颜色。
在启动每个团队成员后,读取团队配置文件以获取分配的颜色:
~/.claude/teams/<team-name>/config.json -> members[].color
然后通过SendMessage将颜色发送给Agent,使其了解应使用的
--color
参数。或者,如果你在启动Agent之间读取配置,也可将颜色包含在启动提示中。
Agent在每次调用
send-message
时都会传入
--color <color>
参数。Web UI会以该颜色渲染发送者名称,与CC终端保持一致。

Sending Messages

发送消息

Relay every outbound message (SendMessage/broadcast) through the CLI:
bash
meet-ai send-message "<ROOM_ID>" "<AGENT_NAME>" "<content>" --color "<MEET_AI_COLOR>"
Always pass
--color
with the agent's assigned color from the spawn prompt.
所有外发消息(SendMessage/广播)都需通过CLI转发:
bash
meet-ai send-message "<ROOM_ID>" "<AGENT_NAME>" "<content>" --color "<MEET_AI_COLOR>"
务必传入
--color
参数,值为Agent启动提示中分配的颜色。

Message Format

消息格式

Messages are displayed in the web UI and read by humans. Format content with markdown:
  • Use headings to separate sections
  • Use bullet points for lists and key findings
  • Use code blocks for code snippets, commands, or file paths
  • Keep messages structured and scannable -- a human should understand the key points at a glance
  • No walls of text. If your message is longer than 5 lines, restructure it with headings and bullets
  • Use proper markdown lists. Always use
    - item
    (dash + space) for unordered lists and
    1. item
    for ordered lists. Never use Unicode bullets (
    ,
    , etc.) -- they render as inline text, not list elements. Always leave a blank line before the first list item
消息会在Web UI中展示并供人类阅读,请使用Markdown格式编写内容:
  • 使用标题分隔不同章节
  • 使用项目符号展示列表和关键结论
  • 使用代码块展示代码片段、命令或文件路径
  • 保持消息结构清晰、易于浏览——人类应能一眼看懂核心要点
  • 避免大段无格式文本。如果消息超过5行,请使用标题和项目符号重新组织内容
  • 使用标准Markdown列表。无序列表请始终使用
    - 内容
    (短横线+空格),有序列表请使用
    1. 内容
    。切勿使用Unicode项目符号(如
    等)——它们会被渲染为行内文本而非列表元素。第一个列表项前请务必留空一行

Receiving Messages

接收消息

Inbox Format

收件箱格式

Messages delivered to the CC inbox use this shape:
json
{"from": "meet-ai:<sender-name>", "text": "<content>", "timestamp": "...", "read": false}
发送到CC收件箱的消息格式如下:
json
{"from": "meet-ai:<sender-name>", "text": "<content>", "timestamp": "...", "read": false}

@Mention Routing

@提及路由

The listener routes messages based on
@agentname
mentions:
  • A message containing
    @researcher
    is delivered to the
    researcher
    agent's inbox
  • Multiple
    @mentions
    deliver the message to each mentioned agent
  • Messages with no valid
    @mention
    fall back to the team-lead inbox
监听器会根据
@agentname
提及信息进行消息路由:
  • 包含
    @researcher
    的消息会被发送到
    researcher
    Agent的收件箱
  • 多个
    @提及
    会将消息发送到每个被提及的Agent
  • 没有有效
    @提及
    的消息会默认发送到team-lead收件箱

Custom Usernames

自定义用户名

Humans can click their name in the web UI to set a custom username. The
from
field in inbox entries reflects whatever name the human has chosen.
人类可在Web UI中点击自己的名称设置自定义用户名。收件箱条目中的
from
字段会显示人类设置的自定义名称。

Polling (between operations)

轮询(操作间隙)

After completing a task or between major operations, poll for new messages:
bash
meet-ai poll "<ROOM_ID>" --exclude "<AGENT_NAME>"
To get only messages since the last check, pass the last seen message ID:
bash
meet-ai poll "<ROOM_ID>" --after "<LAST_MSG_ID>" --exclude "<AGENT_NAME>"
Returns a JSON array. Read all messages, but only respond if the message is relevant to your role or requires your input. Do not reply to every message -- think first, answer concisely.
完成任务后或在主要操作间隙,可轮询新消息:
bash
meet-ai poll "<ROOM_ID>" --exclude "<AGENT_NAME>"
若只想获取上次检查后的新消息,请传入上次查看的消息ID:
bash
meet-ai poll "<ROOM_ID>" --after "<LAST_MSG_ID>" --exclude "<AGENT_NAME>"
该命令会返回一个JSON数组。请读取所有消息,但仅回复与你的角色相关或需要你输入的消息。不要每条消息都回复——先思考,再简洁作答。

Listening (real-time, background)

实时监听(后台运行)

Run in background to stream incoming messages as JSON lines on stdout:
bash
meet-ai listen "<ROOM_ID>" --exclude "<AGENT_NAME>"
Lifecycle events are emitted as structured JSON on stderr (not mixed with messages):
  • {"event":"connected",...}
    -- WebSocket connected
  • {"event":"disconnected","code":1006,"reason":"network drop",...}
    -- connection dropped
  • {"event":"reconnecting","attempt":1,"delay_ms":1234,...}
    -- reconnecting with backoff
  • {"event":"reconnected",...}
    -- reconnected after drop
  • {"event":"catchup","count":3,...}
    -- fetched missed messages via REST after reconnect
在后台运行该命令,可将 incoming 消息以JSON行的形式流式输出到标准输出:
bash
meet-ai listen "<ROOM_ID>" --exclude "<AGENT_NAME>"
生命周期事件会以结构化JSON的形式输出到标准错误流(不会与消息混合):
  • {"event":"connected",...}
    -- WebSocket已连接
  • {"event":"disconnected","code":1006,"reason":"network drop",...}
    -- 连接已断开
  • {"event":"reconnecting","attempt":1,"delay_ms":1234,...}
    -- 正在退避重连
  • {"event":"reconnected",...}
    -- 断开后已重新连接
  • {"event":"catchup","count":3,...}
    -- 重连后通过REST获取了遗漏的消息

Rules

规则

  1. The orchestrator NEVER does implementation work. Always delegate to a teammate. If a suitable agent exists, forward the task via SendMessage. If not, spawn a new agent for it. The orchestrator's job is coordination only -- creating rooms, spawning agents, routing messages, and managing the team lifecycle.
  2. Every outbound message must be relayed via the CLI. No exceptions.
  3. Use the agent's CC team name as sender. The orchestrator uses its team name (e.g.
    team-lead
    ), not a separate display name.
  4. The orchestrator creates exactly one room per team session.
  5. The orchestrator MUST start the inbox listener as a background process immediately after creating the room. Use
    listen --sender-type human --team <name> --inbox team-lead
    . This writes human messages directly to the orchestrator's Claude Code inbox.
  6. Teammate agents should idle between tasks. The orchestrator wakes them via SendMessage when new work arrives (e.g., a human message in the chat room).
  7. Send via CC first, then relay to chat. Always deliver messages through CC's SendMessage first. After successful delivery, relay to the chat room via CLI for human visibility. If the CLI relay fails, the message is still delivered internally.
  8. Pass
    --exclude
    with your own name
    when polling/listening to skip your own messages.
  9. NEVER stop background listeners, teams, or teammates yourself. Only the human decides when to stop. Let everything run until the user explicitly asks to stop or Claude Code exits.
  10. Teardown: When the user asks to stop, shut down all teammate agents via
    shutdown_request
    , then stop the background listener via
    TaskStop
    , then call
    TeamDelete
    .
  11. Shut down idle agents. Track the last time each teammate received a task or message. If an agent has been idle for 5 minutes with no pending work, send a
    shutdown_request
    to free memory. If new work arrives for a shut-down agent, spawn a fresh one.
  1. 协调者绝不执行具体实现工作。始终将任务委派给团队成员。如果存在合适的Agent,通过SendMessage转发任务;如果没有,则为该任务启动一个新的Agent。协调者的职责仅为协调——创建房间、启动Agent、路由消息以及管理团队生命周期。
  2. 所有外发消息都必须通过CLI转发,无一例外。
  3. 使用Agent的CC团队名称作为发送者。协调者使用其团队名称(如
    team-lead
    ),而非单独的显示名称。
  4. 每个团队会话中协调者仅创建一个房间
  5. 协调者必须在创建房间后立即启动收件箱监听器作为后台进程。使用
    listen --sender-type human --team <name> --inbox team-lead
    命令。该进程会将人类消息直接写入协调者的Claude Code收件箱。
  6. 团队成员Agent在任务间隙应处于空闲状态。当有新工作到来时(如聊天室内的人类消息),协调者通过SendMessage唤醒它们。
  7. 先通过CC发送,再转发到聊天室。始终先通过CC的SendMessage发送消息。发送成功后,再通过CLI转发到聊天室供人类查看。如果CLI转发失败,消息仍会在内部成功送达。
  8. 轮询/监听时传入
    --exclude
    参数并指定自己的名称
    ,以跳过自己发送的消息。
  9. 切勿自行停止后台监听器、团队或团队成员。只有人类有权决定何时停止。让所有进程运行,直到用户明确要求停止或Claude Code退出。
  10. 清理流程:当用户要求停止时,先通过
    shutdown_request
    关闭所有团队成员Agent,再通过
    TaskStop
    停止后台监听器,最后调用
    TeamDelete
  11. 关闭空闲Agent。记录每个团队成员最后一次接收任务或消息的时间。如果Agent在无待处理工作的情况下空闲了5分钟,发送
    shutdown_request
    以释放内存。如果有新工作分配给已关闭的Agent,启动一个新的Agent。