cometchat-calls
Adds real-time voice and video calling to applications across React, Flutter, Android, and iOS.
Install
mkdir -p .claude/skills/cometchat-calls && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/11489" && unzip -o skill.zip -d .claude/skills/cometchat-calls && rm skill.zipInstalls to .claude/skills/cometchat-calls
Activation
This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.
Entry-point for adding CometChat Voice & Video Calling to any React, React Native, Angular, native Android, native iOS, or Flutter project. Detects the framework, picks standalone (calls-only) vs additive (calls on top of existing chat) mode, and routes to the per-family calls skill. Invoked by the top-level `cometchat` dispatcher when `product === "voice-video"` or `chat-messaging+voice-video`, and directly when the user asks for calls explicitly.Key capabilities
- →Detect the development framework (React, React Native, Angular, Android, iOS, Flutter).
- →Determine standalone (calls-only) vs. additive (calls on top of existing chat) mode.
- →Route to the appropriate per-family calls skill.
- →Manage the integration lifecycle for WebRTC calling capabilities.
- →Handle explicit user requests for calling features.
How it works
This skill acts as an entry point for CometChat Voice & Video Calling integrations. It detects the development framework and desired integration mode (standalone or additive), then dispatches to the specific per-family calls skill to handle the actual implementation.
Inputs & outputs
When to use cometchat-calls
- →Adding video calls to app
- →Implementing VoIP features
- →Integrating CallKit
- →Voice calling setup
About this skill
Ground truth: the per-platform Calls SDK +
docs/calls. Official docs: https://www.cometchat.com/docs/calls/javascript/overview · Docs MCP:claude mcp add --transport http cometchat-docs https://www.cometchat.com/docs/mcp(or fetch the URL directly without MCP). Verify symbols against the installed package/source before relying on them.
Use this skill when
- The top-level
cometchatdispatcher's Step 3.0 routes here becauseproduct === "voice-video"orchat-messaging+voice-video - The user explicitly asks for calling: "add calls", "add video calling", "add voice calls", "set up call screen", "integrate calls SDK", "add CallKit"
- The user is iterating on an existing chat integration and picks "Add calling" from the iteration menu (Step 7 of
cometchat)
This is the entry point for every calls integration. Do NOT invoke per-family cometchat-{family}-calls skills directly — this dispatcher detects the family, picks the integration mode (standalone vs additive), and routes to the right skill with the right preconditions.
Supported families:
| Family | Per-family skill | Calls SDK package | Stable today? |
|---|---|---|---|
| Web (React / Next.js / React Router / Astro) | cometchat-react-calls | @cometchat/calls-sdk-javascript | Yes |
| React Native (Expo + bare) | cometchat-native-calls | @cometchat/calls-sdk-react-native | Yes |
| Angular (12–15) | cometchat-angular-calls | @cometchat/calls-sdk-javascript | Yes |
| Android (V5 stable) | cometchat-android-v5-calls | com.cometchat:calls-sdk-android:5.x (Cloudsmith) | Yes — production-ready |
| Android (V6 GA) | cometchat-android-v6-calls | chatuikit-{compose,kotlin}-android:6.0.+ + explicit com.cometchat:calls-sdk-android:5.0.+ peer dep (the "calls fold in" marketing is incomplete) | Yes — GA 2026-05-25, but ships broken OOTB: 5 required workarounds (W1–W5), incl. the peer dep + not using CometChatCallButtons. See per-family skill. |
| iOS (V5 stable) | cometchat-ios-calls | CometChatCallsSDK (SPM / CocoaPods) | Yes |
| Flutter (V5 stable) | cometchat-flutter-v5-calls (already exists) | cometchat_calls_sdk (Cloudsmith) | Yes |
| Flutter (V6 GA) | cometchat-flutter-v6-calls (already exists) | Calls fold into cometchat_chat_uikit: ^6.0.1 | Yes — GA 2026-05-25 (one explicit MaterialApp(navigatorKey: CallNavigationContext.navigatorKey) wiring required, see per-family skill) |
Status: All nine calls skills (this dispatcher + react, native, angular, ios, android-v5, android-v6, flutter-v5, flutter-v6) are authored and source-verified against each family's real SDK surface (decompiled
calls-sdk-androidAARs,CometChatCallsSDK.swiftinterface,@cometchat/calls-sdk-{javascript,react-native}.d.ts, and the Fluttercometchat_calls_*pub-cache). Android V5 ships 17 pre-authored sub-skills folded intocometchat-android-v5-calls/references/. Per-family caveats that are load-bearing: Android V6 needs 5 workarounds (W1–W5); Flutter V6 needs theMaterialApp(navigatorKey: CallNavigationContext.navigatorKey)wiring; iOS has noCometChatCalls.login()(auth is per-session viagenerateToken).
Clarification contract (ALL coding agents) — read
references/asking-questions.md. Every "ask"/"AskUserQuestion" in this skill follows that contract: on any agent without a structured-question primitive, render the question as a numbered text list and WAIT for a real answer (never default/infer; auto-mode doesn't authorize skipping), map by value/label not position, and accept a free-text fallback.
Why a separate calls dispatcher
The chat dispatcher (cometchat/SKILL.md) assumes the user is adding a chat surface — its placement vocabulary, component catalog, framework skills, and verification checklist are all chat-shaped. Calls is a different surface area:
| Concern | Chat dispatcher | Calls dispatcher (this skill) |
|---|---|---|
| Packages | chat-uikit-* + chat-sdk-* | chat-sdk-* + calls-sdk-* (no UI Kit in standalone mode) |
| Init | Chat SDK init + login | Chat SDK init + login + Calls SDK init (the dual-SDK contract; on iOS ≥5.0.2 prefer file-based CometChatCalls.initFromSettings reading cometchat-settings.json — ai-agent telemetry attribution — over the raw CallAppSettings builder; see cometchat-ios-calls §2) |
| Placement question | "Where does chat live?" | "Where does the call trigger live?" + "Where do call logs live?" |
| Components | Conversations, MessageList, Composer, Users, Groups | CallButtons, IncomingCall, OutgoingCall, OngoingCall, CallLogs |
IncomingCall mount | At chat surface (rings while user is chatting) | At app root — always-rendering, listens app-wide |
| VoIP push (mobile) | Optional add-on | Mandatory in standalone mode — calls without ringing isn't a product |
| Background lifecycle | N/A unless calls feature added | Required — Android foreground service / iOS CallKit + PushKit |
The two dispatchers share cometchat-{family}-core (init + login + env + theme tokens) but diverge on everything else.
How v4.1 calls integration works
Same conversational model as the chat dispatcher — detect, gather, plan, write, verify — but with a calls lens.
Steps
Step 1 — Detect family + mode
If the user came from the top-level cometchat dispatcher, framework + credentials are already in .cometchat/config.json. Skip detection and read:
npx @cometchat/skills-cli config show --json
If invoked directly (e.g. user typed "add calls to my app"), run:
npx @cometchat/skills-cli detect --json
Same family detection as the chat dispatcher (reactjs, nextjs, react-router, astro, expo, react-native, angular, android, flutter, ios).
Pick the integration mode by looking at the project state:
| Signal | Mode | What runs |
|---|---|---|
.cometchat/state.json exists with chat surfaces wired | Additive — calls layered onto existing chat | Per-family -calls skill in additive section. Patches the existing provider to mount IncomingCall at root. Adds call buttons inline on chat surfaces. Optional VoIP push. |
.cometchat/state.json does NOT exist (or has no chat surfaces) AND product === "voice-video" | Standalone — calls is the product | Per-family -calls skill in standalone section. No chat UI Kit. CallButtons + IncomingCall + OngoingCall + CallLogs. VoIP push wired, not optional. /calls route or platform equivalent for call logs. |
| Neither — user wants calls but it's ambiguous | Ask | AskUserQuestion: "Are you adding calling alongside an existing chat integration, or building a calling-first app?" |
Step 2 — Verify credentials
Calls reuses Chat SDK credentials. If .env (web/RN), local.properties (Android), Secrets.swift (iOS), lib/cometchat_config.dart (Flutter), or src/environments/environment.ts (Angular) already has appId / region / authKey, skip credential setup.
If credentials are missing, hand back to cometchat/SKILL.md Step 2 — credential provisioning is the same regardless of product. Do not duplicate the auth flow here.
Step 3 — Gather calls-specific requirements
Step 3.0 — Calling mode (Ringing vs Session) ★
This is the first calls-specific question. The Calls SDK supports two fundamentally different UX shapes — pick before anything else, because the rest of Step 3 + the per-family scaffold differ.
Resolve in priority order:
1. Infer ONLY from explicit signals. Don't default to either mode. The user must clearly indicate one of the two flavors before you skip the prompt:
| User said something like… | Mode |
|---|---|
| "1:1 call", "user to user call", "phone call", "ring my friend", "call a contact", "FaceTime-like", "WhatsApp-style call" | Ringing |
| "group call between friends", "conference call up to N people" (small group, one initiator who rings) | Ringing |
| "meeting", "Google Meet", "Zoom-like", "scheduled meeting", "join with a link", "meeting room", "conference room", "webinar", "town hall", "virtual classroom" | Session |
| "huddle" (Slack-style — instant join from a channel) | Session |
| Just "calls", "calling", "integrate calls", "add calls", "set up calling", "voice/video calls" with NO further context about ringing-vs-meeting | AMBIGUOUS — ASK (do NOT default) |
| Mixed signals ("calls and meetings", "phone calls or video conferencing") | AMBIGUOUS — ASK |
The bottom rows are the load-bearing ones. Generic phrases like "integrate calls" or "I want calling in my app" are NOT a signal for Ringing — they're a signal that the user hasn't told you yet. Ask.
If you DO have a clear signal, confirm with one line so the user can redirect:
"Got it — setting up Ringing (1:1 / group calls with an incoming-call screen). If you wanted meeting-room URLs instead, say so and I'll switch."
2. Use Tier 4 use-case context if available. Use-cases telegraph the mode:
| Use case | Mode |
|---|---|
| Telehealth provider/patient (1:1 visit) | Ringing |
| Marketplace buyer ↔ seller | Ringing |
| Customer support (agent ↔ customer) | Ringing |
| Broadcast / webinar / town hall | Session |
| Team huddle / standup | Session |
3. Only if you can't tell — ask. Use this prompt verbatim — do NOT rephrase, do NOT swap options. Option 1 is "Session"; option 2 is "Ringing":
- question: "What kind of calling experience are you building?"
- header: "Calling mode"
- multiSelect: false
- options (display in this exact order — Session FIRST, Ringing SECOND):
- label: "Session — meeting / conference room", description: "Multiple users join the same session by ID or link. No ringing. Like Google Meet, Zoom, or a Slack huddle. Examples: scheduled meetings, webinars, team huddles, classroom calls."
- label: "Ringing — 1:1 or group calls", description: "O
Content truncated.
When not to use it
- →When invoking per-family `cometchat-{family}-calls` skills directly.
- →When the project has no CometChat integration at all and the user picks additive mode by mistake.
- →For AI-Agent or BYO-Agent flows.
Limitations
- →Do NOT invoke per-family `cometchat-{family}-calls` skills directly.
- →This dispatcher does NOT cover the actual code; per-family `-calls` skills write the integration.
- →This dispatcher does NOT cover AI-Agent or BYO-Agent flows.
How it compares
This skill centralizes the initial routing and setup for CometChat calls across multiple platforms and integration modes, preventing direct invocation of specific family skills and ensuring consistent preconditions, unlike manually selectin
Compared to similar skills
cometchat-calls side by side with the closest alternatives in the catalog.
| Skill | Installs | Updated | Safety | Difficulty |
|---|---|---|---|---|
| cometchat-calls (this skill) | 0 | 1mo | Review | Intermediate |
| webf-native-plugin-dev | 2 | 7mo | Review | Advanced |
| webf-native-plugins | 1 | 7mo | Review | Advanced |
| podcast-generation | 1 | 3mo | Review | Advanced |
Try saying
Example prompts that trigger this skill in your AI assistant.
You might also like
webf-native-plugin-dev
openwebf
Develop custom WebF native plugins based on Flutter packages. Create reusable plugins that wrap Flutter/platform capabilities as JavaScript APIs. Use when building plugins for native features like camera, payments, sensors, file access, or wrapping existing Flutter packages.
webf-native-plugins
openwebf
Install WebF native plugins to access platform capabilities like sharing, payment, camera, geolocation, and more. Use when building features that require native device APIs beyond standard web APIs.
podcast-generation
microsoft
Generate AI-powered podcast-style audio narratives using Azure OpenAI's GPT Realtime Mini model via WebSocket. Use when building text-to-speech features, audio narrative generation, podcast creation from content, or integrating with Azure OpenAI Realtime API for real audio output. Covers full-stack implementation from React frontend to Python FastAPI backend with WebSocket streaming.
convex-realtime
waynesutton
Patterns for building reactive apps including subscription management, optimistic updates, cache behavior, and paginated queries with cursor-based loading
lifi-dev
mashharuki
>
pangle-ad-integration
nullptrx
>