{
  "schemaVersion": "1.0",
  "item": {
    "slug": "vexa",
    "name": "Google Meet and MS Teams  meeting assistant",
    "source": "tencent",
    "type": "skill",
    "category": "效率提升",
    "sourceUrl": "https://clawhub.ai/DmitriyG228/vexa",
    "canonicalUrl": "https://clawhub.ai/DmitriyG228/vexa",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/vexa",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=vexa",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md",
      "_meta.json",
      "references/onboarding-flow.md",
      "references/user-api-guide-notes.md",
      "references/webhook-setup.md",
      "scripts/audit.mjs"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-23T16:43:11.935Z",
      "expiresAt": "2026-04-30T16:43:11.935Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=4claw-imageboard",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=4claw-imageboard",
        "contentDisposition": "attachment; filename=\"4claw-imageboard-1.0.1.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/vexa"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/vexa",
    "agentPageUrl": "https://openagent3.xyz/skills/vexa/agent",
    "manifestUrl": "https://openagent3.xyz/skills/vexa/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/vexa/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "Chat-oriented interactions",
        "body": "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."
      },
      {
        "title": "Plain text formatting for meeting chat",
        "body": "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.\n\nUse the bundled CLI:\n\nnode skills/vexa/scripts/vexa.mjs ...\nnode skills/vexa/scripts/onboard.mjs ...\nnode skills/vexa/scripts/ingest.mjs ...\nnode skills/vexa/scripts/audit.mjs"
      },
      {
        "title": "Environment",
        "body": "Required: VEXA_API_KEY — get yours from https://vexa.ai/dashboard/api-keys\n\nSet VEXA_API_KEY in your environment or create skills/vexa/secrets/vexa.env manually with:\n\nVEXA_API_KEY=your_key_here\n\nOptional: VEXA_BASE_URL (env override — takes priority over endpoint config)"
      },
      {
        "title": "Endpoint switching (prod / local dev)",
        "body": "The CLI supports named endpoints stored in secrets/vexa-endpoints.json. Default endpoints: prod (https://api.cloud.vexa.ai) and local (http://localhost:8000).\n\nList endpoints & active env: node skills/vexa/scripts/vexa.mjs env:list\nSwitch to local dev: node skills/vexa/scripts/vexa.mjs env:use local\nSwitch to prod: node skills/vexa/scripts/vexa.mjs env:use prod\nAdd custom endpoint: node skills/vexa/scripts/vexa.mjs env:set staging --url https://staging.vexa.ai\nRemove endpoint: node skills/vexa/scripts/vexa.mjs env:remove staging\n\nPriority: VEXA_BASE_URL env var > vexa-endpoints.json active endpoint > default prod URL."
      },
      {
        "title": "Secrets-first check (before any onboarding)",
        "body": "Always check first: node skills/vexa/scripts/onboard.mjs --check-secrets\n\nIf output is {\"secrets_ok\": true} → secrets exist. Skip onboarding. Use normal flows.\nIf output is {\"secrets_ok\": false} → run onboarding. Load references/onboarding-flow.md.\n\nWebhook — 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.\n\nWhen secrets are missing: Direct the user to get their key from https://vexa.ai/dashboard/api-keys and set it up themselves. They should either set VEXA_API_KEY in their environment or create skills/vexa/secrets/vexa.env manually with VEXA_API_KEY=their_key_here. Do not ask users to paste API keys in chat.\n\nSecrets 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.\n\nPer-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.\n\nNon-interactive (for scripting): onboard.mjs --api_key <key> --persist yes --meeting_url \"<url>\" --language en --wait_seconds 60 --poll_every_seconds 10"
      },
      {
        "title": "1) User drops a meeting link → send bot",
        "body": "After successfully sending the bot, proactively run --check-webhook. If not configured, offer to set it up so finished meetings auto-trigger reports.\nParse/normalize link (or pass explicit ID):\n\nnode skills/vexa/scripts/vexa.mjs parse:meeting-url --meeting_url \"https://meet.google.com/abc-defg-hij\"\n\n\nStart bot directly from URL:\n\nnode skills/vexa/scripts/vexa.mjs bots:start --meeting_url \"https://meet.google.com/abc-defg-hij\" --bot_name \"Claw\" --language en\nnode skills/vexa/scripts/vexa.mjs bots:start --meeting_url \"https://teams.live.com/meet/9387167464734?p=qxJanYOcdjN4d6UlGa\" --bot_name \"Claw\" --language en"
      },
      {
        "title": "2) Start bot from calendar meeting links",
        "body": "If a calendar tool/skill is available (for example gog):\n\nFetch upcoming events.\nExtract meeting links (Google Meet/Teams).\nFor each selected event, call bots:start --meeting_url ....\nOptionally save event title into Vexa metadata:\n\nmeetings:update --name \"<calendar title>\" --notes \"source: calendar\""
      },
      {
        "title": "3) Read transcript during meeting or after meeting",
        "body": "Poll current transcript:\n\nnode skills/vexa/scripts/vexa.mjs transcripts:get --platform google_meet --native_meeting_id abc-defg-hij\n\n\nFor near real-time streaming, use Vexa WebSocket API (see references/user-api-guide-notes.md for endpoints and notes).\nAfter transcript is available, summarize and store key updates."
      },
      {
        "title": "4) Stop bot",
        "body": "node skills/vexa/scripts/vexa.mjs bots:stop --meeting_url \"<url>\""
      },
      {
        "title": "5) Create meeting report (after meeting finished)",
        "body": "After stopping the bot (or once the meeting has ended and transcript is finalized), create a basic meeting report:\n\nnode skills/vexa/scripts/vexa.mjs report --meeting_url \"https://meet.google.com/abc-defg-hij\"\nor node skills/vexa/scripts/ingest.mjs --meeting_url \"<url>\"\n\nWrites to memory/meetings/YYYY-MM-DD-<slug>.md with: meeting info, summary placeholders, key decisions, action items, and full transcript."
      },
      {
        "title": "6) Get or update the Ultravox voice agent system prompt",
        "body": "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.\n\nGet current prompt (null = using service default):\n\nnode skills/vexa/scripts/vexa.mjs voice-agent:config:get\n\n\nSet a custom prompt:\n\nnode skills/vexa/scripts/vexa.mjs voice-agent:config:set --prompt \"You are Vexa, a concise meeting assistant...\"\n\n\nReset to service default:\n\nnode skills/vexa/scripts/vexa.mjs voice-agent:config:reset\n\nNote: The updated prompt takes effect on the next bot started — it does not affect bots already in a meeting."
      },
      {
        "title": "Core commands",
        "body": "Bot status:\n\nnode skills/vexa/scripts/vexa.mjs bots:status\n\n\nRequest bot (explicit fields):\n\nnode skills/vexa/scripts/vexa.mjs bots:start --platform google_meet --native_meeting_id abc-defg-hij --bot_name \"Claw\" --language en\n\n\nUpdate active bot language:\n\nnode skills/vexa/scripts/vexa.mjs bots:config:update --platform google_meet --native_meeting_id abc-defg-hij --language es\n\n\nList meetings:\n\nnode skills/vexa/scripts/vexa.mjs meetings:list\n\n\nUpdate metadata (title/participants/languages/notes):\n\nnode 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\"\n\n\nGenerate share URL:\n\nnode skills/vexa/scripts/vexa.mjs transcripts:share --platform google_meet --native_meeting_id abc-defg-hij --ttl_seconds 3600\n\n\nSet Vexa user webhook URL:\n\nnode skills/vexa/scripts/vexa.mjs user:webhook:set --webhook_url https://your-public-url/hooks/vexa"
      },
      {
        "title": "Recordings",
        "body": "List recordings:\n\nnode skills/vexa/scripts/vexa.mjs recordings:list [--limit 50] [--offset 0] [--meeting_id <db_id>]\n\n\nGet a single recording:\n\nnode skills/vexa/scripts/vexa.mjs recordings:get <recording_id>\n\n\nDelete a recording (destructive):\n\nnode skills/vexa/scripts/vexa.mjs recordings:delete <recording_id> --confirm DELETE\n\n\nGet download URL for a media file:\n\nnode skills/vexa/scripts/vexa.mjs recordings:download <recording_id> <media_file_id>\n\n\nGet recording config:\n\nnode skills/vexa/scripts/vexa.mjs recordings:config:get\n\n\nUpdate recording config:\n\nnode skills/vexa/scripts/vexa.mjs recordings:config:update --enabled true --capture_modes audio,video"
      },
      {
        "title": "Meeting bundle (post-meeting)",
        "body": "Get everything about a meeting in one call — transcript, recordings, share link:\n\nnode skills/vexa/scripts/vexa.mjs meetings:bundle --meeting_url \"https://meet.google.com/abc-defg-hij\"\nnode skills/vexa/scripts/vexa.mjs meetings:bundle --platform zoom --native_meeting_id 1234567890\n\nOptions:\n\n--segments — include transcript segments (omitted by default to keep output small)\n--no-share — skip creating a share link\n--no-recordings — skip recordings metadata\n--download-urls — resolve download URLs for each recording media file\n--ttl_seconds 3600 — share link TTL"
      },
      {
        "title": "Webhook (meeting finished → report) — optional",
        "body": "Optionally, Vexa can POST a \"meeting finished\" webhook to trigger automatic report creation. This requires the user to manually configure their openclaw.json — see references/webhook-setup.md for the hooks mapping config. The skill does NOT modify openclaw.json automatically. Users who want this feature add hooks.transformsDir and the vexa mapping to their config themselves."
      },
      {
        "title": "OpenClaw ingestion helpers",
        "body": "Create basic meeting report (meeting info, transcript, placeholders for summary/decisions/actions):\n\nnode skills/vexa/scripts/vexa.mjs report --meeting_url \"<url>\"\nnode skills/vexa/scripts/ingest.mjs --meeting_url \"<url>\" (or --platform + --native_meeting_id)\n\n\nAudit meetings for likely test calls / cleanup candidates:\n\nnode skills/vexa/scripts/audit.mjs"
      },
      {
        "title": "Platform rules",
        "body": "Supported: google_meet, teams, zoom\nTeams native_meeting_id must be numeric ID only.\nTeams bot join requires passcode (from ?p= in Teams URL).\nZoom native_meeting_id is 10-11 digit numeric ID. Passcode (?pwd=) is optional."
      },
      {
        "title": "Deletion safety (strict)",
        "body": "DELETE /meetings/{platform}/{native_meeting_id} purges transcripts and anonymizes data.\n\nRules:\n\nNever call delete without explicit user request for that exact meeting.\nVerify platform + native_meeting_id first.\nPrefer non-destructive cleanup (meetings:update) whenever possible.\nRequire guard flag:\n\nnode skills/vexa/scripts/vexa.mjs meetings:delete --platform google_meet --native_meeting_id abc-defg-hij --confirm DELETE"
      }
    ],
    "body": "Chat-oriented interactions\n\nSpeak 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.\n\nPlain text formatting for meeting chat\n\nWhen 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.\n\nUse the bundled CLI:\n\nnode skills/vexa/scripts/vexa.mjs ...\nnode skills/vexa/scripts/onboard.mjs ...\nnode skills/vexa/scripts/ingest.mjs ...\nnode skills/vexa/scripts/audit.mjs\nEnvironment\n\nRequired: VEXA_API_KEY — get yours from https://vexa.ai/dashboard/api-keys\n\nSet VEXA_API_KEY in your environment or create skills/vexa/secrets/vexa.env manually with:\n\nVEXA_API_KEY=your_key_here\n\n\nOptional: VEXA_BASE_URL (env override — takes priority over endpoint config)\n\nEndpoint switching (prod / local dev)\n\nThe CLI supports named endpoints stored in secrets/vexa-endpoints.json. Default endpoints: prod (https://api.cloud.vexa.ai) and local (http://localhost:8000).\n\nList endpoints & active env: node skills/vexa/scripts/vexa.mjs env:list\nSwitch to local dev: node skills/vexa/scripts/vexa.mjs env:use local\nSwitch to prod: node skills/vexa/scripts/vexa.mjs env:use prod\nAdd custom endpoint: node skills/vexa/scripts/vexa.mjs env:set staging --url https://staging.vexa.ai\nRemove endpoint: node skills/vexa/scripts/vexa.mjs env:remove staging\n\nPriority: VEXA_BASE_URL env var > vexa-endpoints.json active endpoint > default prod URL.\n\nSecrets-first check (before any onboarding)\n\nAlways check first: node skills/vexa/scripts/onboard.mjs --check-secrets\n\nIf output is {\"secrets_ok\": true} → secrets exist. Skip onboarding. Use normal flows.\nIf output is {\"secrets_ok\": false} → run onboarding. Load references/onboarding-flow.md.\n\nWebhook — 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.\n\nWhen secrets are missing: Direct the user to get their key from https://vexa.ai/dashboard/api-keys and set it up themselves. They should either set VEXA_API_KEY in their environment or create skills/vexa/secrets/vexa.env manually with VEXA_API_KEY=their_key_here. Do not ask users to paste API keys in chat.\n\nSecrets 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.\n\nPer-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.\n\nNon-interactive (for scripting): onboard.mjs --api_key <key> --persist yes --meeting_url \"<url>\" --language en --wait_seconds 60 --poll_every_seconds 10\n\nQuick workflows\n1) User drops a meeting link → send bot\nAfter successfully sending the bot, proactively run --check-webhook. If not configured, offer to set it up so finished meetings auto-trigger reports.\nParse/normalize link (or pass explicit ID):\nnode skills/vexa/scripts/vexa.mjs parse:meeting-url --meeting_url \"https://meet.google.com/abc-defg-hij\"\nStart bot directly from URL:\nnode skills/vexa/scripts/vexa.mjs bots:start --meeting_url \"https://meet.google.com/abc-defg-hij\" --bot_name \"Claw\" --language en\nnode skills/vexa/scripts/vexa.mjs bots:start --meeting_url \"https://teams.live.com/meet/9387167464734?p=qxJanYOcdjN4d6UlGa\" --bot_name \"Claw\" --language en\n2) Start bot from calendar meeting links\n\nIf a calendar tool/skill is available (for example gog):\n\nFetch upcoming events.\nExtract meeting links (Google Meet/Teams).\nFor each selected event, call bots:start --meeting_url ....\nOptionally save event title into Vexa metadata:\nmeetings:update --name \"<calendar title>\" --notes \"source: calendar\"\n3) Read transcript during meeting or after meeting\nPoll current transcript:\nnode skills/vexa/scripts/vexa.mjs transcripts:get --platform google_meet --native_meeting_id abc-defg-hij\nFor near real-time streaming, use Vexa WebSocket API (see references/user-api-guide-notes.md for endpoints and notes).\nAfter transcript is available, summarize and store key updates.\n4) Stop bot\nnode skills/vexa/scripts/vexa.mjs bots:stop --meeting_url \"<url>\"\n5) Create meeting report (after meeting finished)\n\nAfter stopping the bot (or once the meeting has ended and transcript is finalized), create a basic meeting report:\n\nnode skills/vexa/scripts/vexa.mjs report --meeting_url \"https://meet.google.com/abc-defg-hij\"\nor node skills/vexa/scripts/ingest.mjs --meeting_url \"<url>\"\n\nWrites to memory/meetings/YYYY-MM-DD-<slug>.md with: meeting info, summary placeholders, key decisions, action items, and full transcript.\n\n6) Get or update the Ultravox voice agent system prompt\n\nThe 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.\n\nGet current prompt (null = using service default):\nnode skills/vexa/scripts/vexa.mjs voice-agent:config:get\nSet a custom prompt:\nnode skills/vexa/scripts/vexa.mjs voice-agent:config:set --prompt \"You are Vexa, a concise meeting assistant...\"\nReset to service default:\nnode skills/vexa/scripts/vexa.mjs voice-agent:config:reset\n\nNote: The updated prompt takes effect on the next bot started — it does not affect bots already in a meeting.\n\nCore commands\nBot status:\nnode skills/vexa/scripts/vexa.mjs bots:status\nRequest bot (explicit fields):\nnode skills/vexa/scripts/vexa.mjs bots:start --platform google_meet --native_meeting_id abc-defg-hij --bot_name \"Claw\" --language en\nUpdate active bot language:\nnode skills/vexa/scripts/vexa.mjs bots:config:update --platform google_meet --native_meeting_id abc-defg-hij --language es\nList meetings:\nnode skills/vexa/scripts/vexa.mjs meetings:list\nUpdate metadata (title/participants/languages/notes):\nnode 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\"\nGenerate share URL:\nnode skills/vexa/scripts/vexa.mjs transcripts:share --platform google_meet --native_meeting_id abc-defg-hij --ttl_seconds 3600\nSet Vexa user webhook URL:\nnode skills/vexa/scripts/vexa.mjs user:webhook:set --webhook_url https://your-public-url/hooks/vexa\nRecordings\nList recordings:\nnode skills/vexa/scripts/vexa.mjs recordings:list [--limit 50] [--offset 0] [--meeting_id <db_id>]\nGet a single recording:\nnode skills/vexa/scripts/vexa.mjs recordings:get <recording_id>\nDelete a recording (destructive):\nnode skills/vexa/scripts/vexa.mjs recordings:delete <recording_id> --confirm DELETE\nGet download URL for a media file:\nnode skills/vexa/scripts/vexa.mjs recordings:download <recording_id> <media_file_id>\nGet recording config:\nnode skills/vexa/scripts/vexa.mjs recordings:config:get\nUpdate recording config:\nnode skills/vexa/scripts/vexa.mjs recordings:config:update --enabled true --capture_modes audio,video\nMeeting bundle (post-meeting)\n\nGet everything about a meeting in one call — transcript, recordings, share link:\n\nnode skills/vexa/scripts/vexa.mjs meetings:bundle --meeting_url \"https://meet.google.com/abc-defg-hij\"\nnode skills/vexa/scripts/vexa.mjs meetings:bundle --platform zoom --native_meeting_id 1234567890\n\nOptions:\n\n--segments — include transcript segments (omitted by default to keep output small)\n--no-share — skip creating a share link\n--no-recordings — skip recordings metadata\n--download-urls — resolve download URLs for each recording media file\n--ttl_seconds 3600 — share link TTL\nWebhook (meeting finished → report) — optional\n\nOptionally, Vexa can POST a \"meeting finished\" webhook to trigger automatic report creation. This requires the user to manually configure their openclaw.json — see references/webhook-setup.md for the hooks mapping config. The skill does NOT modify openclaw.json automatically. Users who want this feature add hooks.transformsDir and the vexa mapping to their config themselves.\n\nOpenClaw ingestion helpers\nCreate basic meeting report (meeting info, transcript, placeholders for summary/decisions/actions):\nnode skills/vexa/scripts/vexa.mjs report --meeting_url \"<url>\"\nnode skills/vexa/scripts/ingest.mjs --meeting_url \"<url>\" (or --platform + --native_meeting_id)\nAudit meetings for likely test calls / cleanup candidates:\nnode skills/vexa/scripts/audit.mjs\nPlatform rules\nSupported: google_meet, teams, zoom\nTeams native_meeting_id must be numeric ID only.\nTeams bot join requires passcode (from ?p= in Teams URL).\nZoom native_meeting_id is 10-11 digit numeric ID. Passcode (?pwd=) is optional.\nDeletion safety (strict)\n\nDELETE /meetings/{platform}/{native_meeting_id} purges transcripts and anonymizes data.\n\nRules:\n\nNever call delete without explicit user request for that exact meeting.\nVerify platform + native_meeting_id first.\nPrefer non-destructive cleanup (meetings:update) whenever possible.\nRequire guard flag:\nnode skills/vexa/scripts/vexa.mjs meetings:delete --platform google_meet --native_meeting_id abc-defg-hij --confirm DELETE"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/DmitriyG228/vexa",
    "publisherUrl": "https://clawhub.ai/DmitriyG228/vexa",
    "owner": "DmitriyG228",
    "version": "0.1.3",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/vexa",
    "downloadUrl": "https://openagent3.xyz/downloads/vexa",
    "agentUrl": "https://openagent3.xyz/skills/vexa/agent",
    "manifestUrl": "https://openagent3.xyz/skills/vexa/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/vexa/agent.md"
  }
}