Chat-oriented interactions
Speak directly to the user as in a natural chat. Do not output internal reasoning, plan summaries, or procedural notes ("I need to...", "According to the skill...", "I will inform..."). Reply with only what you would say to the user — conversational, warm, and to the point.
Plain text formatting for meeting chat
When sending messages to meeting chat (Google Meet, Teams, etc.), always use plain text — no markdown. These chat surfaces do not render markdown, so asterisks, hash headers, backticks, and bullet dashes appear as ugly raw characters. Use line breaks and spacing for structure instead.
Use the bundled CLI:
- - INLINECODE0
- INLINECODE1
- INLINECODE2
- INLINECODE3
Environment
Set for the OpenClaw process (or shell):
- -
VEXA_API_KEY (required) - INLINECODE5 (optional env override — takes priority over endpoint config)
Endpoint switching (prod / local dev)
The CLI supports named endpoints stored in secrets/vexa-endpoints.json. Default endpoints: prod (https://api.cloud.vexa.ai) and local (http://localhost:8000).
- - List endpoints & active env: INLINECODE9
- Switch to local dev: INLINECODE10
- Switch to prod: INLINECODE11
- Add custom endpoint: INLINECODE12
- Remove endpoint: INLINECODE13
Priority: VEXA_BASE_URL env var > vexa-endpoints.json active endpoint > default prod URL.
Secrets-first check (before any onboarding)
Always check first: INLINECODE16
- - If output is
{"secrets_ok": true} → secrets exist. Skip onboarding. Use normal flows. - If output is
{"secrets_ok": false} → run onboarding. Load references/onboarding-flow.md.
Webhook — proactive setup: Whenever secrets exist and you're working with Vexa, run node skills/vexa/scripts/onboard.mjs --check-webhook. If webhook_configured is false, advise adding the vexa mapping (see references/webhook-setup.md). For onboarding-only details (webhook requirements, pipeline validation, mock webhook), load references/onboarding-flow.md.
When secrets are missing: Ask them to get their key from https://vexa.ai/dashboard/api-keys and paste it in chat — you write it to skills/vexa/secrets/vexa.env. Alternatively, share the path and format so they can add it manually (better for security if they prefer not to paste the key).
Secrets location: skills/vexa/secrets/ holds env files and vexa-state.json. This dir is gitignored. When publishing the skill to ClawHub, ensure secrets/ is excluded.
Per-endpoint API keys: The CLI supports separate env files per endpoint: vexa-prod.env, vexa-local.env, etc. When switching endpoints with env:use, the matching vexa-<name>.env is loaded automatically. Falls back to vexa.env if no endpoint-specific file exists.
Non-interactive (for scripting): INLINECODE33
Quick workflows
1) User drops a meeting link → send bot
- - After successfully sending the bot, proactively run
--check-webhook. If not configured, offer to set it up so finished meetings auto-trigger reports. - Parse/normalize link (or pass explicit ID):
-
node skills/vexa/scripts/vexa.mjs parse:meeting-url --meeting_url "https://meet.google.com/abc-defg-hij"
- - Start bot directly from URL:
-
node skills/vexa/scripts/vexa.mjs bots:start --meeting_url "https://meet.google.com/abc-defg-hij" --bot_name "Claw" --language en
- INLINECODE37
2) Start bot from calendar meeting links
If a calendar tool/skill is available (for example gog):
- 1. Fetch upcoming events.
- Extract meeting links (Google Meet/Teams).
- For each selected event, call
bots:start --meeting_url .... - Optionally save event title into Vexa metadata:
- INLINECODE40
3) Read transcript during meeting or after meeting
- - Poll current transcript:
-
node skills/vexa/scripts/vexa.mjs transcripts:get --platform google_meet --native_meeting_id abc-defg-hij
- - For near real-time streaming, use Vexa WebSocket API (see
references/user-api-guide-notes.md for endpoints and notes). - After transcript is available, summarize and store key updates.
4) Stop bot
5) Create meeting report (after meeting finished)
After stopping the bot (or once the meeting has ended and transcript is finalized), create a basic meeting report:
- - INLINECODE44
- or INLINECODE45
Writes to memory/meetings/YYYY-MM-DD-<slug>.md with: meeting info, summary placeholders, key decisions, action items, and full transcript.
6) Get or update the Ultravox voice agent system prompt
The voice agent system prompt controls how the Vexa bot behaves in meetings (personality, language, what it does when triggered). It is stored per-user and applied when the next bot starts.
- - Get current prompt (null = using service default):
-
node skills/vexa/scripts/vexa.mjs voice-agent:config:get
-
node skills/vexa/scripts/vexa.mjs voice-agent:config:set --prompt "You are Vexa, a concise meeting assistant..."
- - Reset to service default:
- INLINECODE49
Note: The updated prompt takes effect on the next bot started — it does not affect bots already in a meeting.
Core commands
-
node skills/vexa/scripts/vexa.mjs bots:status
- - Request bot (explicit fields):
-
node skills/vexa/scripts/vexa.mjs bots:start --platform google_meet --native_meeting_id abc-defg-hij --bot_name "Claw" --language en
- - Update active bot language:
-
node skills/vexa/scripts/vexa.mjs bots:config:update --platform google_meet --native_meeting_id abc-defg-hij --language es
-
node skills/vexa/scripts/vexa.mjs meetings:list
- - Update metadata (title/participants/languages/notes):
-
node skills/vexa/scripts/vexa.mjs meetings:update --platform google_meet --native_meeting_id abc-defg-hij --name "Weekly Product Sync" --participants "Alice,Bob" --languages "en" --notes "Action items captured"
-
node skills/vexa/scripts/vexa.mjs transcripts:share --platform google_meet --native_meeting_id abc-defg-hij --ttl_seconds 3600
- - Set Vexa user webhook URL:
- INLINECODE56
Recordings
-
node skills/vexa/scripts/vexa.mjs recordings:list [--limit 50] [--offset 0] [--meeting_id <db_id>]
- - Get a single recording:
-
node skills/vexa/scripts/vexa.mjs recordings:get <recording_id>
- - Delete a recording (destructive):
-
node skills/vexa/scripts/vexa.mjs recordings:delete <recording_id> --confirm DELETE
- - Get download URL for a media file:
-
node skills/vexa/scripts/vexa.mjs recordings:download <recording_id> <media_file_id>
-
node skills/vexa/scripts/vexa.mjs recordings:config:get
- - Update recording config:
- INLINECODE62
Meeting bundle (post-meeting)
Get everything about a meeting in one call — transcript, recordings, share link:
- - INLINECODE63
- INLINECODE64
Options:
- -
--segments — include transcript segments (omitted by default to keep output small) - INLINECODE66 — skip creating a share link
- INLINECODE67 — skip recordings metadata
- INLINECODE68 — resolve download URLs for each recording media file
- INLINECODE69 — share link TTL
Webhook (meeting finished → report)
When Vexa sends a "meeting finished" webhook, the transform (scripts/vexa-transform.mjs) instructs the agent to create a report. See references/webhook-setup.md for hooks mapping config. Requires hooks.transformsDir = workspace root and transform.module = skills/vexa/scripts/vexa-transform.mjs.
OpenClaw ingestion helpers
- - Create basic meeting report (meeting info, transcript, placeholders for summary/decisions/actions):
-
node skills/vexa/scripts/vexa.mjs report --meeting_url "<url>"
-
node skills/vexa/scripts/ingest.mjs --meeting_url "<url>" (or
--platform +
--native_meeting_id)
- - Audit meetings for likely test calls / cleanup candidates:
- INLINECODE79
Platform rules
- - Supported:
google_meet, teams, INLINECODE82 - Teams
native_meeting_id must be numeric ID only. - Teams bot join requires passcode (from
?p= in Teams URL). - Zoom
native_meeting_id is 10-11 digit numeric ID. Passcode (?pwd=) is optional.
Deletion safety (strict)
INLINECODE87 purges transcripts and anonymizes data.
Rules:
- 1. Never call delete without explicit user request for that exact meeting.
- Verify
platform + native_meeting_id first. - Prefer non-destructive cleanup (
meetings:update) whenever possible. - Require guard flag:
- INLINECODE91
面向聊天的交互
像自然聊天一样直接与用户对话。不要输出内部推理、计划摘要或程序性说明(我需要……、根据技能……、我将告知……)。只回复你会对用户说的话——对话式、温暖且切中要点。
会议聊天的纯文本格式
向会议聊天(Google Meet、Teams 等)发送消息时,始终使用纯文本——不使用 Markdown。这些聊天界面不支持 Markdown 渲染,因此星号、井号标题、反引号和项目符号会显示为丑陋的原始字符。使用换行和间距来组织结构。
使用捆绑的 CLI:
- - node skills/vexa/scripts/vexa.mjs ...
- node skills/vexa/scripts/onboard.mjs ...
- node skills/vexa/scripts/ingest.mjs ...
- node skills/vexa/scripts/audit.mjs
环境
为 OpenClaw 进程(或 shell)设置:
- - VEXAAPIKEY(必需)
- VEXABASEURL(可选的环境变量覆盖——优先级高于端点配置)
端点切换(生产环境 / 本地开发环境)
CLI 支持存储在 secrets/vexa-endpoints.json 中的命名端点。默认端点:prod(https://api.cloud.vexa.ai)和 local(http://localhost:8000)。
- - 列出端点及当前环境:node skills/vexa/scripts/vexa.mjs env:list
- 切换到本地开发环境:node skills/vexa/scripts/vexa.mjs env:use local
- 切换到生产环境:node skills/vexa/scripts/vexa.mjs env:use prod
- 添加自定义端点:node skills/vexa/scripts/vexa.mjs env:set staging --url https://staging.vexa.ai
- 移除端点:node skills/vexa/scripts/vexa.mjs env:remove staging
优先级:VEXABASEURL 环境变量 > vexa-endpoints.json 中的当前端点 > 默认的生产环境 URL。
先检查密钥(在任何接入流程之前)
始终先检查: node skills/vexa/scripts/onboard.mjs --check-secrets
- - 如果输出为 {secretsok: true} → 密钥已存在。跳过接入流程。使用正常流程。
- 如果输出为 {secretsok: false} → 运行接入流程。加载 references/onboarding-flow.md。
Webhook——主动设置: 只要密钥存在且你在使用 Vexa,就运行 node skills/vexa/scripts/onboard.mjs --check-webhook。如果 webhook_configured 为 false,建议添加 vexa 映射(参见 references/webhook-setup.md)。关于仅接入流程的详细信息(Webhook 要求、管道验证、模拟 Webhook),请加载 references/onboarding-flow.md。
当密钥缺失时: 请用户从 https://vexa.ai/dashboard/api-keys 获取密钥并粘贴到聊天中——你将其写入 skills/vexa/secrets/vexa.env。或者,分享路径和格式,以便他们手动添加(如果他们不希望粘贴密钥,这样更安全)。
密钥位置: skills/vexa/secrets/ 存放环境变量文件和 vexa-state.json。此目录已被 gitignore 忽略。将技能发布到 ClawHub 时,确保排除 secrets/ 目录。
每个端点的 API 密钥: CLI 支持每个端点使用独立的环境变量文件:vexa-prod.env、vexa-local.env 等。使用 env:use 切换端点时,会自动加载对应的 vexa-<名称>.env。如果不存在特定端点的文件,则回退到 vexa.env。
非交互模式(用于脚本):onboard.mjs --apikey <密钥> --persist yes --meetingurl <网址> --language en --waitseconds 60 --pollevery_seconds 10
快速工作流
1) 用户提供会议链接 → 发送机器人
- - 成功发送机器人后,主动运行 --check-webhook。如果未配置,提供设置选项,以便会议结束时自动触发报告。
- 解析/标准化链接(或传递显式 ID):
- node skills/vexa/scripts/vexa.mjs parse:meeting-url --meeting_url https://meet.google.com/abc-defg-hij
- node skills/vexa/scripts/vexa.mjs bots:start --meeting
url https://meet.google.com/abc-defg-hij --botname Claw --language en
- node skills/vexa/scripts/vexa.mjs bots:start --meeting
url https://teams.live.com/meet/9387167464734?p=qxJanYOcdjN4d6UlGa --botname Claw --language en
2) 从日历会议链接启动机器人
如果有可用的日历工具/技能(例如 gog):
- 1. 获取即将发生的事件。
- 提取会议链接(Google Meet/Teams)。
- 对每个选定的事件,调用 bots:start --meeting_url ...。
- 可选地将事件标题保存到 Vexa 元数据中:
- meetings:update --name <日历标题> --notes source: calendar
3) 在会议期间或会议后读取转录
- node skills/vexa/scripts/vexa.mjs transcripts:get --platform google
meet --nativemeeting_id abc-defg-hij
- - 对于近乎实时的流式传输,使用 Vexa WebSocket API(参见 references/user-api-guide-notes.md 了解端点和说明)。
- 转录可用后,总结并存储关键更新。
4) 停止机器人
- - node skills/vexa/scripts/vexa.mjs bots:stop --meeting_url <网址>
5) 创建会议报告(会议结束后)
停止机器人后(或会议结束且转录完成后),创建基本会议报告:
- - node skills/vexa/scripts/vexa.mjs report --meetingurl https://meet.google.com/abc-defg-hij
- 或 node skills/vexa/scripts/ingest.mjs --meetingurl <网址>
写入 memory/meetings/YYYY-MM-DD-.md,包含:会议信息、摘要占位符、关键决策、行动项和完整转录。
6) 获取或更新 Ultravox 语音助手系统提示
语音助手系统提示控制 Vexa 机器人在会议中的行为(个性、语言、被触发时的操作)。它按用户存储,并在下一个机器人启动时应用。
- - 获取当前提示(null = 使用服务默认值):
- node skills/vexa/scripts/vexa.mjs voice-agent:config:get
- node skills/vexa/scripts/vexa.mjs voice-agent:config:set --prompt 你是 Vexa,一个简洁的会议助手……
- node skills/vexa/scripts/vexa.mjs voice-agent:config:reset
注意: 更新后的提示会在下一个启动的机器人上生效——不会影响已在会议中的机器人。
核心命令
- node skills/vexa/scripts/vexa.mjs bots:status
- node skills/vexa/scripts/vexa.mjs bots:start --platform google
meet --nativemeeting
id abc-defg-hij --botname Claw --language en
- node skills/vexa/scripts/vexa.mjs bots:config:update --platform google
meet --nativemeeting_id abc-defg-hij --language es
- node skills/vexa/scripts/vexa.mjs meetings:list
- node skills/vexa/scripts/vexa.mjs meetings:update --platform google
meet --nativemeeting_id abc-defg-hij --name 每周产品同步 --participants Alice,Bob --languages en --notes 已捕获行动项
- node skills/vexa/scripts/vexa.mjs transcripts:share --platform google
meet --nativemeeting
id abc-defg-hij --ttlseconds 3600
- - 设置 Vexa 用户 Webhook URL:
- node skills/vexa/scripts/vexa