{"id":"0e754080-0697-444b-87ef-3b2d3f8e31d3","shortId":"LBmFNn","kind":"skill","title":"cometchat-features","tagline":"Add features (calls, reactions, polls, file sharing, presence, etc.) to an already-integrated CometChat project. Routes to the right sub-flow based on feature type — default (already enabled), extension (API toggle), ai-feature (API toggle + OpenAI key), dashboard-only (third-par","description":"> **Companion skills:** `cometchat-core` covers initialization and the\n> provider pattern; `cometchat-customization` is the next step when a\n> feature is enabled but needs visual customization;\n> `cometchat-troubleshooting` handles post-feature-enable failures.\n\n## Purpose\n\nThis skill teaches Claude how CometChat features are structured and\nwhat work is actually required to enable each one. Most features require\n**zero code** — they are either already built into the UI Kit, toggled\nvia the `cometchat apply-feature` CLI (which hits the dashboard API),\nor activated by a single npm install. Understanding which type a feature\nis prevents unnecessary work.\n\n---\n\n## 1. Use this skill when\n\nThe user wants to add a specific feature to an already-integrated CometChat\nproject. Trigger phrases:\n\n- `/cometchat features` (or invoke the cometchat-features skill via your agent's mechanism — keyword \"cometchat feature\" or \"add chat feature\" works in most agents)\n- `/cometchat features <name>` (e.g. `/cometchat features reactions`)\n- `/cometchat <feature>` (e.g. `/cometchat polls`, `/cometchat calls`)\n- \"add reactions to my chat\"\n- \"add video calling\"\n- \"enable polls\"\n- \"add file sharing\"\n- \"enable smart replies\"\n- \"add typing indicators\"\n\n## 2. Preconditions\n\nThe user must have an existing integration:\n\n```bash\nnpx @cometchat/skills-cli info --json\n```\n\nIf `integrated` is `false`, **stop** and tell the user to run `/cometchat`\nfirst to create the integration.\n\n## 3. Why features fall into each type\n\nCometChat features split into six types based on what work is actually\nneeded to enable each one:\n\n- **default (compiled-in):** Shipped inside the UI Kit component bundle\n  unconditionally. CometChat builds reactions, typing indicators,\n  mentions, etc. into `CometChatMessageList` and `CometChatMessageComposer`\n  at compile time. The feature is always present; the only question is\n  whether the prop that surfaces it is enabled. No action needed.\n\n- **extension (backend boolean toggle):** Pure on/off backend extension.\n  The CLI's `apply-feature` command flips the toggle via the same REST\n  API the dashboard UI uses (`POST /apps/{id}/extensions`), so no\n  browser visit required. Once enabled, the UI Kit renders the matching\n  UI automatically. Examples: polls, link-preview, voice-transcription,\n  message-translation, stickers.\n\n- **ai-feature (backend AI toggle + OpenAI key):** Same API path as\n  extensions but split out because the AI feature requires an OpenAI\n  API key on the app's AI settings (`PUT /apps/{id}/ai/settings`)\n  before the toggle (`POST /apps/{id}/features/ai.{key}/enabled`)\n  succeeds. The CLI handles both calls in one invocation when given\n  `--openai-key sk-…`. Examples: smart-replies, conversation-summary,\n  conversation-starter.\n\n- **dashboard-only (third-party config):** Requires entering config\n  the user has to fetch themselves — third-party API keys (Giphy,\n  Stipop, Tenor), webhooks (Chatwoot), or multi-field choices\n  (disappearing-messages interval, message-shortcuts list). The CLI\n  cannot automate these; the skill prints the dashboard path and\n  stops.\n\n- **package-install (separate SDK):** Voice/video calling requires\n  `@cometchat/calls-sdk-javascript` because it links against browser\n  media APIs that would bloat every integration if bundled unconditionally.\n  Once installed, the UI Kit detects it via dynamic import.\n\n- **component-swap (variant component):** Replaces one UI Kit component\n  with a drop-in variant whose default behavior differs (e.g.\n  `CometChatCompactMessageComposer` enables rich text by default).\n  The CLI does a safe word-boundary replace in `state.files_owned`.\n  Requires `cometchat apply` to have run (i.e. web/RN integrations\n  only — native cohorts can't use this path).\n\n---\n\n## 4. The feature catalog\n\n### Type 1 — Default features (~14, already enabled in UI Kit)\n\nThese are already part of the components your integration uses. The skill's\njob is to **tell the user they're already there** and point at the relevant\ncomponent:\n\n- Instant Messaging\n- Media Sharing (file/image/audio/video)\n- Read Receipts\n- Mark as Unread\n- Typing Indicator\n- User Presence (online/offline)\n- Reactions\n- Mentions (incl. @all)\n- Threaded Conversations\n- Quoted Replies\n- Group Chat\n- Report Message\n- Conversation/Advanced Search\n\nFor these: query the docs MCP for the feature's component/usage docs, show\nthe user where it is in their integration. **No code changes needed.**\n\n### Type 2a — Extensions (pure boolean, CLI-toggleable)\n\nThese are backend extensions enabled by a single API call (`POST /apps/{id}/extensions`).\nUse the CLI — no browser visit required:\n\n```bash\ncometchat apply-feature <id>\n```\n\nFor native cohorts (iOS / Android / Flutter / Angular) where there's no\n`.cometchat/state.json`, pass `--app-id` explicitly:\n\n```bash\ncometchat apply-feature <id> --app-id <your-app-id>\n```\n\nOnce enabled, the UI Kit auto-integrates them. **No code changes needed.**\n\n> **Note:** Conversation and Advanced Search has its own toggle on the\n> Features page. It is on by default but can be disabled. If a user\n> reports that search is missing, check this toggle.\n\n**Extensions — User Experience:**\nAvatar, Bitly, Link Preview, Message Shortcuts, Pin Message, Rich\nMedia Preview, Save Message, Thumbnail Generation, TinyURL, Voice\nTranscription\n\n**Extensions — User Engagement:**\nBroadcast, Giphy, Gfycat, Message Translation, Polls, Reminders,\nStickers, Stipop, Tenor\n\n**Extensions — Collaboration:**\nCollaborative Document, Collaborative Whiteboard\n\n**Extensions — Security:**\nDisappearing Messages, E2E Encryption (Enterprise plan only)\n\n**Extensions — Moderation** (on the separate Extensions page, not Features):\nData Masking, Image Moderation, Profanity Filter, Sentiment Analysis,\nXSS Filter, Human Moderation, Report User, Slow Mode,\nVirus/Malware Scanner\n\n**Extensions — Notifications** (on the separate Extensions page):\nEmail Notification, Push Notification, SMS Notification\n\n**Extensions — Customer Support:**\nChatwoot, Intercom\n\n### Type 2b — AI features (CLI-toggleable, OpenAI key required)\n\n`smart-replies`, `conversation-summary`, `conversation-starter`. These\nneed an OpenAI API key on the app's AI settings before the toggle\nsucceeds. The CLI does both calls in one invocation:\n\n```bash\ncometchat apply-feature smart-replies --openai-key sk-...\n# native:\ncometchat apply-feature smart-replies --app-id <id> --openai-key sk-...\n```\n\nAfter the first AI feature is enabled the key is stored on the app, so\nsubsequent ai-feature applies don't need `--openai-key` repeated.\n\nGet an OpenAI key: https://platform.openai.com/api-keys\n\n### Type 2c — Dashboard-only (third-party config required)\n\nThese extensions require config the user has to provide themselves\n(third-party API keys / webhooks / multi-field setup) — `apply-feature`\nreturns `manual-action-required` and prints the dashboard path. The\nCLI cannot automate these:\n\n- **Third-party API keys:** Giphy, Stipop, Tenor, Intercom\n- **Webhooks:** Chatwoot\n- **Multi-field config:** Message Shortcuts (shortcut list), Disappearing Messages (interval)\n\nManual flow for these:\n1. https://app.cometchat.com → select your app\n2. Sidebar → Extensions (or Chat & Messaging → Features for\n   Disappearing Messages)\n3. Find the extension, enter the third-party config, toggle ON\n\n### Moderation and Notification extensions\n\nLive on a separate Extensions page (not Features). Both currently\nrequire dashboard navigation (Phase 1 didn't cover moderation rules):\n\n- **Moderation:** Data Masking, Image Moderation, Profanity Filter,\n  Sentiment Analysis, XSS Filter, Human Moderation, Report User,\n  Slow Mode, Virus/Malware Scanner\n- **Notifications:** Email, Push, SMS\n\n> Sidebar → **Extensions** → find extension → configure + enable.\n\nAfter enabling any feature, run `cometchat verify` to ensure the\nexisting integration still passes. No code changes are needed — the\nUI Kit picks up enabled features automatically.\n\n### Type 3 — Package-install features (4, calls)\n\nThese require installing `@cometchat/calls-sdk-javascript`. Once installed,\nthe UI Kit auto-detects it and surfaces the call UI in CometChatMessageHeader,\nCometChatConversations, etc.\n\n- Call Buttons (in message headers)\n- Incoming Call notifications\n- Outgoing Call interface\n- Call Logs (call history)\n\nFor these, the user opting in IS consent — run the install directly:\n\n```bash\nnpm install @cometchat/calls-sdk-javascript\nnpx @cometchat/skills-cli verify --json\n```\n\nThe UI Kit's `initiateAfterLogin()` auto-calls `enableCalling()` after the\npackage is installed. No manual wiring needed for default call buttons in\nCometChatMessageHeader. Restart the dev server.\n\n### Type 4 — Component-swap features (drop-in variant)\n\nSome features require swapping one component for a variant that has\ndifferent default behavior. The CLI handles the swap automatically —\nit walks `state.files_owned`, performs a word-boundary regex replace,\nupdates `state.json` checksums, and records the applied feature so\nre-runs are no-ops. Idempotent.\n\nCurrently available:\n\n- `rich-text-formatting` — swaps `CometChatMessageComposer` →\n  `CometChatCompactMessageComposer` (the compact variant enables rich\n  text formatting by default; the regular composer has\n  `enableRichTextEditor=false` baked in)\n\n```bash\nnpx @cometchat/skills-cli apply-feature rich-text-formatting\n```\n\nDo NOT hand-edit the swap. The CLI is the source of truth. If future\nSDK releases add new variant components, they will follow this same\n`apply-feature <id>` pattern.\n\n---\n\n## 4b. Deep patterns for three most-requested features\n\nFor calls, AI smart replies, and presence, the catalog above only says \"install a package\" or \"toggle in dashboard.\" Here are the concrete compositional patterns so common requests don't require a docs MCP round-trip.\n\n### Calls (audio + video)\n\nAfter `npm install @cometchat/calls-sdk-javascript`, call buttons auto-appear in `CometChatMessageHeader` and the call UI renders in place. **No manual wiring needed** for basic 1:1 audio/video calls.\n\nFor custom integration — e.g. putting a \"Start video call\" button outside the message header, or handling an incoming call notification in a custom way — use `CometChatCallButtons` + `CometChatIncomingCall` + `CometChatOngoingCall`:\n\n```tsx\nimport { useState, useEffect } from \"react\";\nimport {\n  CometChatCallButtons,\n  CometChatIncomingCall,\n  CometChatOngoingCall,\n} from \"@cometchat/chat-uikit-react\";\nimport { CometChat } from \"@cometchat/chat-sdk-javascript\";\n\nexport function CustomCallUI({ targetUser }: { targetUser: CometChat.User }) {\n  const [ongoingCall, setOngoingCall] = useState<CometChat.Call>();\n\n  useEffect(() => {\n    // Listen for call state changes\n    const listenerId = \"custom-call-listener\";\n    CometChat.addCallListener(\n      listenerId,\n      new CometChat.CallListener({\n        onOutgoingCallAccepted: (call: CometChat.Call) => setOngoingCall(call),\n        onIncomingCallCancelled: () => setOngoingCall(undefined),\n        onCallEnded: () => setOngoingCall(undefined),\n      }),\n    );\n    return () => CometChat.removeCallListener(listenerId);\n  }, []);\n\n  return (\n    <>\n      <CometChatCallButtons user={targetUser} />\n      <CometChatIncomingCall />\n      {ongoingCall && <CometChatOngoingCall call={ongoingCall} />}\n    </>\n  );\n}\n```\n\n**Common gotchas:**\n- Calls require a logged-in CometChat user on *both* sides. Test from two browsers (or incognito) logged in as different UIDs.\n- `CometChatIncomingCall` must be mounted globally (e.g. in your provider or layout) so incoming calls ring on every page.\n- Group calls use `CometChat.Group` instead of `CometChat.User` on `CometChatCallButtons`.\n\n### AI smart replies\n\nSmart replies is an `ai-feature`. Enable with one CLI call (the first time also sets the OpenAI key on the app):\n\n```bash\ncometchat apply-feature smart-replies --openai-key sk-...\n# native cohorts: add --app-id <your-app-id>\n```\n\n**No code changes are required** — the `CometChatMessageComposer` automatically renders suggested replies as chips above the input when there's a recent incoming message.\n\nFor a custom UI — e.g. showing smart replies inline instead of above the composer, or only for certain conversation types — you read the extension data from the incoming message and render your own chips:\n\n```tsx\nfunction SmartReplyChips({ message }: { message: CometChat.BaseMessage }) {\n  const metadata = message.getMetadata() as Record<string, unknown> | undefined;\n  const extensions = (metadata?.[\"@injected\"] as Record<string, unknown>)?.[\"extensions\"] as\n    | Record<string, unknown>\n    | undefined;\n  const smartReply = extensions?.[\"smart-reply\"] as { reply_positive?: string; reply_neutral?: string; reply_negative?: string } | undefined;\n\n  if (!smartReply) return null;\n\n  const replies = [smartReply.reply_positive, smartReply.reply_neutral, smartReply.reply_negative].filter(Boolean) as string[];\n  return (\n    <div style={{ display: \"flex\", gap: 8, padding: 8 }}>\n      {replies.map((r) => (\n        <button key={r} onClick={() => sendTextMessage(r)}>{r}</button>\n      ))}\n    </div>\n  );\n}\n```\n\nSmart replies are server-generated and attached to messages via the `@injected.extensions.smart-reply` metadata path — the AI feature runs on CometChat's backend, not in your code.\n\n### Presence (online / offline status)\n\nPresence is a **default feature** (Type 1) — online status indicators appear automatically on user avatars in `CometChatConversations`, `CometChatUsers`, and `CometChatGroupMembers`. Nothing to install, nothing to enable.\n\nFor custom UI that needs to know a specific user's online state — e.g. a \"Sold by Aria Chen · online now\" label on a product page — subscribe to user events:\n\n```tsx\nimport { useEffect, useState } from \"react\";\nimport { CometChat } from \"@cometchat/chat-sdk-javascript\";\n\nexport function useUserPresence(uid: string): \"online\" | \"offline\" | \"unknown\" {\n  const [status, setStatus] = useState<\"online\" | \"offline\" | \"unknown\">(\"unknown\");\n\n  useEffect(() => {\n    // 1. Fetch initial state\n    CometChat.getUser(uid).then((u) => {\n      setStatus(u.getStatus() === \"online\" ? \"online\" : \"offline\");\n    });\n\n    // 2. Subscribe to live changes\n    const listenerId = `presence-${uid}`;\n    CometChat.addUserListener(\n      listenerId,\n      new CometChat.UserListener({\n        onUserOnline: (user: CometChat.User) => {\n          if (user.getUid() === uid) setStatus(\"online\");\n        },\n        onUserOffline: (user: CometChat.User) => {\n          if (user.getUid() === uid) setStatus(\"offline\");\n        },\n      }),\n    );\n    return () => CometChat.removeUserListener(listenerId);\n  }, [uid]);\n\n  return status;\n}\n```\n\n**Common gotchas:**\n- Presence events only fire for users the current user has interacted with (conversation exists, in same group, etc.). For arbitrary UIDs with no prior interaction, you may need to call `CometChat.getUser(uid)` periodically instead.\n- `getStatus()` returns `\"online\"` or `\"offline\"` — also check `getLastActiveAt()` for a \"last seen X ago\" timestamp.\n- \"Last seen\" is disabled by default on free-tier apps. Enable it in the dashboard (Settings → Chat → Last Seen).\n\n---\n\n## 5. Docs MCP contract\n\nThe CometChat docs MCP at `cometchat-docs` is a **hard requirement** for\nthis skill. It's the canonical source for:\n\n- Per-feature SDK reference (props, callbacks, builders, events)\n- Per-feature configuration details beyond the dashboard path above\n- Feature compatibility notes (which features need backend setup,\n  which auto-wire, which require explicit `setExtensions([...])`)\n\n**Hard rules:**\n\n1. **Always query the docs MCP first** before answering any feature\n   question that's not in our local catalog (`cometchat features info`).\n2. **If the docs MCP is not installed**, STOP. Tell the user:\n   \"I need the CometChat docs MCP to walk you through this feature.\n   Install it with `claude mcp add --transport http cometchat-docs\n   https://www.cometchat.com/docs/mcp` and re-run.\"\n3. **Use `cometchat apply-feature <id>` for extension and ai-feature\n   types.** The CLI is the canonical path. Only fall back to the\n   dashboard URL when the CLI returns `manual-action-required`,\n   `auth-required`, or `error`.\n4. **Canonical reference URLs** (use as starting points if the agent\n   doesn't have an MCP query handy):\n   - Extensions: https://www.cometchat.com/docs/ui-kit/react/extensions\n   - AI features: https://www.cometchat.com/docs/ui-kit/react/ai-features\n   - Calls: https://www.cometchat.com/docs/ui-kit/react/call-features\n   - Core features: https://www.cometchat.com/docs/ui-kit/react/core-features\n\n---\n\n## 6. Steps\n\n### Step 1 — Read state\n\n```bash\nnpx @cometchat/skills-cli info --json\n```\n\nIf not integrated, stop. Otherwise note the framework + experience so you\ncan find the right files.\n\n### Step 2 — Determine feature\n\nIf the user named a feature, use it. Otherwise list the categories above\nand ask which feature they want.\n\n### Step 3 — Classify the feature\n\nMatch the feature name against the 4 types in section 4. If you don't know\nthe type, query the docs MCP first.\n\n### Step 4 — Execute the right sub-flow\n\n- **Default:** show the user it's already there. Point at the component.\n  Use `npx @cometchat/skills-cli features info <id>` to surface\n  the walkthrough verbatim.\n  - **CRITICAL — if the user explicitly wants a UI element to surface\n    the default feature** (e.g. \"implement conversation search\",\n    \"add a search bar\", \"show typing indicators in the header\",\n    \"expose mentions in the composer\"), **do NOT add a new component\n    yet**. Most default features are exposed via PROPS on the\n    components your integration already mounts:\n    - \"search bar\" → `showSearchBar` on `CometChatConversations`\n      (and `onSearchBarClicked` to swap in `<CometChatSearch>` for\n      advanced dual-scope search if the user wants that)\n    - \"filter conversations / messages\" → `conversationsRequestBuilder`\n      / `messagesRequestBuilder`\n    - \"custom empty / error / loading state\" → `emptyStateView`,\n      `errorStateView`, `loadingStateView`\n    - \"custom message bubble\" → `templates` prop on\n      `CometChatMessageList` (NOT a custom bubble component)\n    - \"hide / disable a sub-feature\" → `disable*` boolean props\n    - \"click handler\" → `onItemClick`, `onMessageClick`,\n      `onSearchBarClicked`, `onBack`\n    - \"custom subtitle / status / timestamp\" → `subtitleView`,\n      `statusView`, `timestampView`\n    Process before any code change:\n    1. Read the files in `.cometchat/state.json` `files_owned` and\n       grep for the `<CometChat[A-Z]` JSX components actually in use:\n       ```bash\n       grep -hoE '<CometChat[A-Z][a-zA-Z]*' \\\n         $(jq -r '.files_owned[]' .cometchat/state.json 2>/dev/null) \\\n         2>/dev/null | sort -u\n       ```\n    2. Query the docs MCP for `\"<ComponentName> props\"` for each one.\n    3. If a prop matches the user's intent, **add the prop and stop**.\n       No new components, no custom CSS, no new files.\n    4. Only if no prop matches, route to the `cometchat-customization`\n       skill for the full four-tier discovery.\n- **Extension / AI feature:** run `cometchat apply-feature <id>`. The\n  CLI hits the dashboard API directly using the bearer token from\n  `cometchat auth login` (stored in the OS keychain). For native\n  cohorts (iOS / Android / Flutter / Angular), pass `--app-id <id>`\n  explicitly because there's no `.cometchat/state.json`. AI features\n  also take `--openai-key sk-…` the first time:\n\n  ```bash\n  # Web/RN (state.json present):\n  cometchat apply-feature polls\n  cometchat apply-feature smart-replies --openai-key sk-...\n\n  # Native (stateless):\n  cometchat apply-feature polls --app-id A1B2C3\n  cometchat apply-feature smart-replies --app-id A1B2C3 --openai-key sk-...\n  ```\n\n  Response shapes (`--json`):\n  - `\"status\": \"applied\"` → done. Tell the user to hard-refresh\n    (Cmd+Shift+R) the browser tab running their dev server.\n  - `\"status\": \"already-applied\"` → the feature is already enabled\n    in this integration's `state.applied_features`.\n  - `\"status\": \"auth-required\"` → run `cometchat auth login` first.\n  - `\"status\": \"openai-key-required\"` (ai-feature only) → re-run\n    with `--openai-key sk-…`.\n  - `\"status\": \"error\"` → surface `next_steps` verbatim.\n\n  **Only fall back to the dashboard** when the CLI returns `error` or\n  isn't available. Manual flow for extensions: app.cometchat.com →\n  *Chat & Messaging → Features → flip Status toggle*.\n\n  **Note:** if the feature has `auto_wired_in_uikit: false` in the\n  catalog (most non-default extensions), the toggle alone isn't\n  enough — you also need to register the extension via\n  `UIKitSettingsBuilder.setExtensions([...])` before `init`. Query\n  the docs MCP for the exact builder syntax.\n\n- **Dashboard-only:** the CLI returns `manual-action-required` and\n  prints the dashboard path. These need third-party config (Giphy\n  API key, Chatwoot webhook, etc.) that only the user can supply.\n  Walk them through the dashboard.\n\n- **Package-install (calls):** run `npm install @cometchat/calls-sdk-javascript`\n  directly. The user opted in, that IS consent.\n\n- **Component-swap:** run `cometchat apply-feature <id>` (web/RN\n  only — needs `state.json`). The CLI handles the swap\n  deterministically. Do NOT hand-edit.\n\n### Step 5 — Verify\n\n```bash\nnpx @cometchat/skills-cli verify --json\n```\n\nSurface any failed checks verbatim. If anything looks off after enabling\na feature (drift, unexpected build error, env warning), run\n`cometchat doctor` for combined drift + env + AST diagnostics with\nper-issue fix instructions, or route to the `cometchat-troubleshooting`\nskill for deeper triage.\n\n## Hard rules\n\n- Never modify a project without an existing CometChat integration.\n- Always query the docs MCP for SDK reference (do not invent function names).\n- For component-swap, extension, and ai-feature types, always use\n  `cometchat apply-feature <id>` — the CLI is the source of truth,\n  never hand-edit and never tell the user to navigate the dashboard\n  unless the CLI itself returns `manual-action-required`.\n- For ai-feature types, the OpenAI key prerequisite is the only\n  manual input — pass it as `--openai-key sk-…` the first time per\n  app.\n- For native cohorts (iOS / Android / Flutter / Angular), always\n  pass `--app-id <id>` because their projects don't write\n  `.cometchat/state.json`.\n- For package-install features (calls), the user opting in IS consent —\n  run `npm install <package>` directly.\n- For dashboard-only features (third-party API keys, webhooks,\n  multi-field config), walk the user through the dashboard — these\n  cannot be automated.\n- Always use `npx @cometchat/skills-cli`.\n\n## Sources\n\n- [Core features](https://www.cometchat.com/docs/ui-kit/react/core-features)\n- [Extensions](https://www.cometchat.com/docs/ui-kit/react/extensions)\n- [AI features](https://www.cometchat.com/docs/ui-kit/react/ai-features)\n- [Call features](https://www.cometchat.com/docs/ui-kit/react/call-features)","tags":["cometchat","features","skills","agent-skills","ai-agent","chat","claude-code","cursor","messaging","nextjs","react","react-native"],"capabilities":["skill","source-cometchat","skill-cometchat-features","topic-agent-skills","topic-ai-agent","topic-chat","topic-claude-code","topic-cometchat","topic-cursor","topic-messaging","topic-nextjs","topic-react","topic-react-native","topic-ui-kit"],"categories":["cometchat-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/cometchat/cometchat-skills/cometchat-features","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add cometchat/cometchat-skills","source_repo":"https://github.com/cometchat/cometchat-skills","install_from":"skills.sh"}},"qualityScore":"0.463","qualityRationale":"deterministic score 0.46 from registry signals: · indexed on github topic:agent-skills · 27 github stars · SKILL.md body (23,023 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-18T19:04:49.570Z","embedding":null,"createdAt":"2026-05-07T13:05:08.778Z","updatedAt":"2026-05-18T19:04:49.570Z","lastSeenAt":"2026-05-18T19:04:49.570Z","tsv":"'/ai/settings':420 '/api-keys':996 '/apps':356,418,425,713 '/cometchat':171,196,199,202,204,206,252 '/dev/null':2504,2506 '/docs/mcp':2151 '/docs/ui-kit/react/ai-features':2221 '/docs/ui-kit/react/ai-features)':3107 '/docs/ui-kit/react/call-features':2225 '/docs/ui-kit/react/call-features)':3112 '/docs/ui-kit/react/core-features':2230 '/docs/ui-kit/react/core-features)':3098 '/docs/ui-kit/react/extensions':2216 '/docs/ui-kit/react/extensions)':3102 '/enabled':429 '/extensions':358,715 '/features/ai':427 '1':149,602,1071,1116,1469,1470,1834,1911,2092,2234,2466 '14':605 '2':227,1076,1924,2114,2259,2503,2505,2509 '2a':695 '2b':894 '2c':998 '3':258,1086,1179,2156,2282,2519 '4':597,1184,1272,2195,2292,2296,2310,2542 '4b':1396 '5':2030,2882 '6':2231 '8':1784,1786 'a-z':2479,2491 'a-za-z':2494 'a1b2c3':2648,2659 'action':326,1033,2188,2812,3001 'activ':134 'actual':100,276,2484 'add':4,158,189,208,213,218,224,1383,1656,2143,2357,2374,2528 'advanc':769,2404 'agent':182,195,2205 'ago':2008 'ai':38,387,390,404,415,895,922,966,980,1407,1616,1624,1813,2166,2217,2563,2607,2717,2965,3005,3103 'ai-featur':37,386,979,1623,2165,2716,2964,3004 'alon':2780 'alreadi':16,32,114,165,606,613,632,2323,2391,2689,2694 'already-appli':2688 'already-integr':15,164 'also':1634,2000,2609,2785 'alway':311,2093,2945,2968,3036,3089 'analysi':864,1130 'android':732,2594,3033 'angular':734,2596,3035 'answer':2100 'anyth':2895 'api':35,40,132,350,395,409,474,522,710,916,1020,1048,2575,2826,3072 'app':413,742,751,920,957,976,1075,1641,1658,2020,2599,2646,2657,3028,3039 'app-id':741,750,956,1657,2598,2645,2656,3038 'app.cometchat.com':1072,2753 'appear':1453,1838 'appli':125,340,582,726,748,939,951,982,1028,1318,1359,1393,1645,2160,2568,2624,2629,2642,2651,2668,2690,2864,2972 'apply-featur':124,339,725,747,938,950,1027,1358,1392,1644,2159,2567,2623,2628,2641,2650,2863,2971 'arbitrari':1980 'aria':1871 'ask':2276 'ast':2915 'attach':1803 'audio':1443 'audio/video':1471 'auth':2191,2583,2704,2708 'auth-requir':2190,2703 'auto':759,1196,1249,1452,2084,2765 'auto-appear':1451 'auto-cal':1248 'auto-detect':1195 'auto-integr':758 'auto-wir':2083 'autom':497,1043,3088 'automat':373,1177,1300,1667,1839 'avail':1330,2748 'avatar':802,1842 'back':2177,2736 'backend':329,334,389,704,1819,2080 'bake':1353 'bar':2360,2394 'base':27,271 'bash':236,723,745,936,1235,1355,1642,2237,2487,2618,2884 'basic':1468 'bearer':2579 'behavior':559,1294 'beyond':2069 'bit':803 'bloat':525 'boolean':330,698,1775,2446 'boundari':575,1309 'broadcast':823 'browser':361,520,720,1581,2681 'bubbl':2429,2437 'build':295,2904 'builder':2062,2802 'built':115 'bundl':292,529 'button':1209,1264,1450,1482,1789 'call':6,207,215,435,513,711,932,1185,1202,1208,1214,1217,1219,1221,1250,1263,1406,1442,1449,1458,1472,1481,1491,1530,1537,1544,1547,1563,1567,1602,1608,1630,1990,2222,2845,3053,3108 'callback':2061 'cannot':496,1042,3086 'canon':2052,2173,2196 'catalog':600,1413,2110,2772 'categori':2273 'certain':1700 'chang':692,764,1167,1532,1662,1928,2465 'chat':190,212,664,1080,2027,2754 'chatwoot':480,891,1055,2828 'check':796,2001,2892 'checksum':1314 'chen':1872 'chip':1672,1716 'choic':485 'classifi':2283 'claud':90,2141 'cli':127,337,432,495,569,700,718,898,929,1041,1296,1373,1629,2170,2184,2571,2742,2808,2871,2975,2996 'cli-toggl':699,897 'click':2448 'cmd':2677 'code':110,691,763,1166,1661,1823,2464 'cohort':591,730,1655,2592,3031 'collabor':834,835,837 'combin':2912 'cometchat':2,18,53,62,78,92,123,167,177,186,265,294,581,724,746,937,949,1156,1514,1573,1643,1817,1891,2035,2040,2111,2129,2147,2158,2478,2490,2552,2566,2582,2622,2627,2640,2649,2707,2862,2909,2928,2943,2970 'cometchat-cor':52 'cometchat-custom':61,2551 'cometchat-doc':2039,2146 'cometchat-featur':1,176 'cometchat-troubleshoot':77,2927 'cometchat.addcalllistener':1539 'cometchat.adduserlistener':1933 'cometchat.basemessage':1722 'cometchat.call':1545 'cometchat.calllistener':1542 'cometchat.getuser':1915,1991 'cometchat.group':1610 'cometchat.removecalllistener':1555 'cometchat.removeuserlistener':1954 'cometchat.user':1522,1613,1939,1947 'cometchat.userlistener':1936 'cometchat/calls-sdk-javascript':515,1189,1238,1448,2849 'cometchat/chat-sdk-javascript':1516,1893 'cometchat/chat-uikit-react':1512 'cometchat/skills-cli':238,1240,1357,2239,2331,2886,3092 'cometchat/state.json':739,2471,2502,2606,3047 'cometchatcallbutton':1498,1508,1558,1615 'cometchatcompactmessagecompos':562,1337 'cometchatconvers':1206,1844,2397 'cometchatgroupmemb':1847 'cometchatincomingcal':1499,1509,1589 'cometchatmessagecompos':304,1336,1666 'cometchatmessagehead':1205,1266,1455 'cometchatmessagelist':302,2433 'cometchatongoingcal':1500,1510,1562 'cometchatus':1845 'command':342 'common':1431,1565,1959 'compact':1339 'companion':50 'compat':2075 'compil':284,306 'compiled-in':283 'compon':291,542,545,550,617,639,1274,1286,1386,2328,2377,2388,2438,2483,2535,2859,2960 'component-swap':541,1273,2858,2959 'component/usage':679 'compos':1349,1696,2371 'composit':1428 'concret':1427 'config':461,464,1005,1010,1059,1095,2824,3078 'configur':1149,2067 'consent':1230,2857,3059 'const':1523,1533,1723,1731,1745,1766,1902,1929 'contract':2033 'convers':450,453,660,767,907,910,1701,1973,2355,2415 'conversation-start':452,909 'conversation-summari':449,906 'conversation/advanced':667 'conversationsrequestbuild':2417 'core':54,2226,3094 'cover':55,1119 'creat':255 'critic':2339 'css':2538 'current':1111,1329,1968 'custom':63,76,889,1474,1495,1536,1685,1855,2419,2427,2436,2454,2537,2553 'custom-call-listen':1535 'customcallui':1519 'dashboard':45,131,352,456,503,1000,1038,1113,1423,2025,2071,2180,2574,2739,2805,2817,2841,2993,3066,3084 'dashboard-on':44,455,999,2804,3065 'data':857,1123,1707 'deep':1397 'deeper':2932 'default':31,282,558,567,603,783,1262,1293,1346,1831,2015,2317,2351,2380,2776 'detail':2068 'detect':536,1197 'determin':2260 'determinist':2875 'dev':1269,2685 'diagnost':2916 'didn':1117 'differ':560,1292,1587 'direct':1234,2576,2850,3063 'disabl':787,2013,2440,2445 'disappear':487,841,1064,1084 'disappearing-messag':486 'discoveri':2561 'display':1781 'div':1779 'doc':673,680,1437,2031,2036,2041,2096,2117,2130,2148,2306,2512,2797,2948 'doctor':2910 'document':836 'doesn':2206 'done':2669 'drift':2902,2913 'drop':554,1278 'drop-in':553,1277 'dual':2406 'dual-scop':2405 'dynam':539 'e.g':198,203,561,1476,1594,1687,1867,2353 'e2e':843 'edit':1369,2880,2984 'either':113 'element':2347 'email':882,1142 'empti':2420 'emptystateview':2424 'enabl':33,72,84,103,216,221,279,324,365,563,607,706,754,969,1150,1152,1175,1341,1626,1853,2021,2695,2899 'enablecal':1251 'enablerichtexteditor':1351 'encrypt':844 'engag':822 'enough':2783 'ensur':1159 'enter':463,1090 'enterpris':845 'env':2906,2914 'error':2194,2421,2729,2744,2905 'errorstateview':2425 'etc':12,300,1207,1978,2830 'event':1883,1962,2063 'everi':526,1605 'exact':2801 'exampl':374,445 'execut':2311 'exist':234,1161,1974,2942 'experi':801,2250 'explicit':744,2088,2343,2601 'export':1517,1894 'expos':2367,2383 'extens':34,328,335,398,696,705,799,820,833,839,848,853,875,880,888,1008,1078,1089,1101,1106,1146,1148,1706,1732,1739,1747,2163,2213,2562,2752,2777,2790,2962,3099 'fail':2891 'failur':85 'fall':261,2176,2735 'fals':244,1352,2769 'featur':3,5,29,39,70,83,93,107,126,144,161,172,178,187,191,197,200,260,266,309,341,388,405,599,604,677,727,749,777,856,896,940,952,967,981,1029,1082,1109,1154,1176,1183,1276,1282,1319,1360,1394,1404,1625,1646,1814,1832,2057,2066,2074,2078,2102,2112,2137,2161,2167,2218,2227,2261,2267,2278,2285,2288,2332,2352,2381,2444,2564,2569,2608,2625,2630,2643,2652,2692,2701,2718,2756,2763,2865,2901,2966,2973,3006,3052,3068,3095,3104,3109 'fetch':469,1912 'field':484,1025,1058,3077 'file':9,219,2257,2469,2472,2500,2541 'file/image/audio/video':644 'filter':862,866,1128,1132,1774,2414 'find':1087,1147,2254 'fire':1964 'first':253,965,1632,2098,2308,2616,2710,3025 'fix':2921 'flex':1782 'flip':343,2757 'flow':26,1068,2316,2750 'flutter':733,2595,3034 'follow':1389 'format':1334,1344,1364 'four':2559 'four-tier':2558 'framework':2249 'free':2018 'free-tier':2017 'full':2557 'function':1518,1718,1895,2956 'futur':1380 'gap':1783 'generat':816,1801 'get':990 'getlastactiveat':2002 'getstatus':1995 'gfycat':825 'giphi':476,824,1050,2825 'given':440 'global':1593 'gotcha':1566,1960 'grep':2475,2488 'group':663,1607,1977 'hand':1368,2879,2983 'hand-edit':1367,2878,2982 'handi':2212 'handl':80,433,1297,1488,2872 'handler':2449 'hard':2044,2090,2675,2934 'hard-refresh':2674 'header':1212,1486,2366 'hide':2439 'histori':1222 'hit':129,2572 'hoe':2489 'http':2145 'human':867,1133 'i.e':586 'id':357,419,426,714,743,752,958,1659,2600,2647,2658,3040 'idempot':1328 'imag':859,1125 'implement':2354 'import':540,1502,1507,1513,1885,1890 'incl':657 'incognito':1583 'incom':1213,1490,1601,1681,1710 'indic':226,298,651,1837,2363 'info':239,2113,2240,2333 'init':2794 'initi':56,1913 'initiateafterlogin':1247 'inject':1734 'injected.extensions.smart':1808 'inlin':1691 'input':1675,3016 'insid':287 'instal':139,509,532,1182,1188,1191,1233,1237,1256,1417,1447,1850,2121,2138,2844,2848,3051,3062 'instant':640 'instead':1611,1692,1994 'instruct':2922 'integr':17,166,235,242,257,527,588,619,689,760,1162,1475,2244,2390,2698,2944 'intent':2527 'interact':1971,1985 'intercom':892,1053 'interfac':1218 'interv':489,1066 'invent':2955 'invoc':438,935 'invok':174 'io':731,2593,3032 'isn':2746,2781 'issu':2920 'job':624 'jq':2498 'json':240,1242,2241,2666,2888 'jsx':2482 'key':43,393,410,428,443,475,901,917,946,961,971,988,993,1021,1049,1638,1652,1790,2613,2636,2662,2714,2726,2827,3010,3022,3073 'keychain':2589 'keyword':185 'kit':119,290,368,535,549,610,757,1172,1194,1245 'know':1860,2301 'label':1875 'last':2005,2010,2028 'layout':1599 'link':377,518,804 'link-preview':376 'list':493,1063,2271 'listen':1528,1538 'listenerid':1534,1540,1556,1930,1934,1955 'live':1102,1927 'load':2422 'loadingstateview':2426 'local':2109 'log':1220,1571,1584 'logged-in':1570 'login':2584,2709 'look':2896 'manual':1032,1067,1258,1464,2187,2749,2811,3000,3015 'manual-action-requir':1031,2186,2810,2999 'mark':647 'mask':858,1124 'match':371,2286,2523,2547 'may':1987 'mcp':674,1438,2032,2037,2097,2118,2131,2142,2210,2307,2513,2798,2949 'mechan':184 'media':521,642,811 'mention':299,656,2368 'messag':383,488,491,641,666,806,809,814,826,842,1060,1065,1081,1085,1211,1485,1682,1711,1720,1721,1805,2416,2428,2755 'message-shortcut':490 'message-transl':382 'message.getmetadata':1725 'messagesrequestbuild':2418 'metadata':1724,1733,1810 'miss':795 'mode':872,1138 'moder':849,860,868,1098,1120,1122,1126,1134 'modifi':2937 'most-request':1401 'mount':1592,2392 'multi':483,1024,1057,3076 'multi-field':482,1023,1056,3075 'must':231,1590 'name':2265,2289,2957 'nativ':590,729,948,1654,2591,2638,3030 'navig':1114,2991 'need':74,277,327,693,765,913,985,1169,1260,1466,1858,1988,2079,2127,2786,2820,2868 'negat':1759,1773 'neutral':1756,1771 'never':2936,2981,2986 'new':1384,1541,1935,2376,2534,2540 'next':66,2731 'no-op':1325 'non':2775 'non-default':2774 'note':766,2076,2247,2760 'noth':1848,1851 'notif':876,883,885,887,1100,1141,1215,1492 'npm':138,1236,1446,2847,3061 'npx':237,1239,1356,2238,2330,2885,3091 'null':1765 'offlin':1826,1900,1907,1923,1952,1999 'on/off':333 'onback':2453 'oncallend':1551 'onclick':1792 'one':105,281,437,547,934,1285,1628,2518 'ongoingcal':1524,1561,1564 'onincomingcallcancel':1548 'onitemclick':2450 'onlin':1825,1835,1865,1873,1899,1906,1921,1922,1944,1997 'online/offline':654 'onmessageclick':2451 'onoutgoingcallaccept':1543 'onsearchbarclick':2399,2452 'onuserofflin':1945 'onuseronlin':1937 'op':1327 'openai':42,392,408,442,900,915,945,960,987,992,1637,1651,2612,2635,2661,2713,2725,3009,3021 'openai-key':441,944,959,986,1650,2611,2634,2660,2724,3020 'openai-key-requir':2712 'opt':1227,2853,3056 'os':2588 'otherwis':2246,2270 'outgo':1216 'outsid':1483 'own':579,1304,2473,2501 'packag':508,1181,1254,1419,2843,3050 'package-instal':507,1180,2842,3049 'pad':1785 'page':778,854,881,1107,1606,1879 'par':49 'part':614 'parti':460,473,1004,1019,1047,1094,2823,3071 'pass':740,1164,2597,3017,3037 'path':396,504,596,1039,1811,2072,2174,2818 'pattern':60,1395,1398,1429 'per':2056,2065,2919,3027 'per-featur':2055,2064 'per-issu':2918 'perform':1305 'period':1993 'phase':1115 'phrase':170 'pick':1173 'pin':808 'place':1462 'plan':846 'platform.openai.com':995 'platform.openai.com/api-keys':994 'point':635,2202,2325 'poll':8,205,217,375,828,2626,2644 'posit':1753,1769 'post':82,355,424,712 'post-feature-en':81 'precondit':228 'prerequisit':3011 'presenc':11,653,1411,1824,1828,1931,1961 'present':312,2621 'prevent':146 'preview':378,805,812 'print':501,1036,2815 'prior':1984 'process':2461 'product':1878 'profan':861,1127 'project':19,168,2939,3043 'prop':319,2060,2385,2431,2447,2515,2522,2530,2546 'provid':59,1015,1597 'pure':332,697 'purpos':86 'push':884,1143 'put':417,1477 'queri':671,2094,2211,2304,2510,2795,2946 'question':315,2103 'quot':661 'r':1788,1791,1794,1795,2499,2679 're':631,1322,2154,2721 're-run':1321,2153,2720 'react':1506,1889 'reaction':7,201,209,296,655 'read':645,1704,2235,2467 'receipt':646 'recent':1680 'record':1316,1727,1736,1741 'refer':2059,2197,2952 'refresh':2676 'regex':1310 'regist':2788 'regular':1348 'releas':1382 'relev':638 'remind':829 'render':369,1460,1668,1713 'repeat':989 'replac':546,576,1311 'repli':223,448,662,905,943,955,1409,1618,1620,1649,1670,1690,1750,1752,1755,1758,1767,1797,1809,2633,2655 'replies.map':1787 'report':665,791,869,1135 'request':1403,1432 'requir':101,108,363,406,462,514,580,722,902,1006,1009,1034,1112,1187,1283,1435,1568,1664,2045,2087,2189,2192,2705,2715,2813,3002 'respons':2664 'rest':349 'restart':1267 'return':1030,1554,1557,1764,1778,1953,1957,1996,2185,2743,2809,2998 'rich':564,810,1332,1342,1362 'rich-text-format':1331,1361 'right':23,2256,2313 'ring':1603 'round':1440 'round-trip':1439 'rout':20,2548,2924 'rule':1121,2091,2935 'run':251,585,1155,1231,1323,1815,2155,2565,2683,2706,2722,2846,2861,2908,3060 'safe':572 'save':813 'say':1416 'scanner':874,1140 'scope':2407 'sdk':511,1381,2058,2951 'search':668,770,793,2356,2359,2393,2408 'section':2295 'secur':840 'seen':2006,2011,2029 'select':1073 'sendtextmessag':1793 'sentiment':863,1129 'separ':510,852,879,1105 'server':1270,1800,2686 'server-gener':1799 'set':416,923,1635,2026 'setextens':2089 'setongoingcal':1525,1546,1549,1552 'setstatus':1904,1919,1943,1951 'setup':1026,2081 'shape':2665 'share':10,220,643 'shift':2678 'ship':286 'shortcut':492,807,1061,1062 'show':681,1688,2318,2361 'showsearchbar':2395 'side':1577 'sidebar':1077,1145 'singl':137,709 'six':269 'sk':444,947,962,1653,2614,2637,2663,2727,3023 'skill':51,88,152,179,500,622,2048,2554,2930 'skill-cometchat-features' 'slow':871,1137 'smart':222,447,904,942,954,1408,1617,1619,1648,1689,1749,1796,2632,2654 'smart-repli':446,903,941,953,1647,1748,2631,2653 'smartrepli':1746,1763 'smartreply.reply':1768,1770,1772 'smartreplychip':1719 'sms':886,1144 'sold':1869 'sort':2507 'sourc':1376,2053,2978,3093 'source-cometchat' 'specif':160,1862 'split':267,400 'start':1479,2201 'starter':454,911 'state':1531,1866,1914,2236,2423 'state.applied':2700 'state.files':578,1303 'state.json':1313,2620,2869 'stateless':2639 'status':1827,1836,1903,1958,2456,2667,2687,2702,2711,2728,2758 'statusview':2459 'step':67,2232,2233,2258,2281,2309,2732,2881 'sticker':385,830 'still':1163 'stipop':477,831,1051 'stop':245,506,2122,2245,2532 'store':973,2585 'string':1728,1737,1742,1754,1757,1760,1777,1898 'structur':95 'style':1780 'sub':25,2315,2443 'sub-featur':2442 'sub-flow':24,2314 'subscrib':1880,1925 'subsequ':978 'subtitl':2455 'subtitleview':2458 'succeed':430,927 'suggest':1669 'summari':451,908 'suppli':2836 'support':890 'surfac':321,1200,2335,2349,2730,2889 'swap':543,1275,1284,1299,1335,1371,2401,2860,2874,2961 'syntax':2803 'tab':2682 'take':2610 'targetus':1520,1521,1560 'teach':89 'tell':247,627,2123,2670,2987 'templat':2430 'tenor':478,832,1052 'test':1578 'text':565,1333,1343,1363 'third':48,459,472,1003,1018,1046,1093,2822,3070 'third-par':47 'third-parti':458,471,1002,1017,1045,1092,2821,3069 'thread':659 'three':1400 'thumbnail':815 'tier':2019,2560 'time':307,1633,2617,3026 'timestamp':2009,2457 'timestampview':2460 'tinyurl':817 'toggl':36,41,120,331,345,391,423,774,798,926,1096,1421,2759,2779 'toggleabl':701,899 'token':2580 'topic-agent-skills' 'topic-ai-agent' 'topic-chat' 'topic-claude-code' 'topic-cometchat' 'topic-cursor' 'topic-messaging' 'topic-nextjs' 'topic-react' 'topic-react-native' 'topic-ui-kit' 'transcript':381,819 'translat':384,827 'transport':2144 'triag':2933 'trigger':169 'trip':1441 'troubleshoot':79,2929 'truth':1378,2980 'tsx':1501,1717,1884 'two':1580 'type':30,142,225,264,270,297,601,650,694,893,997,1178,1271,1702,1833,2168,2293,2303,2362,2967,3007 'u':1918,2508 'u.getstatus':1920 'ui':118,289,353,367,372,534,548,609,756,1171,1193,1203,1244,1459,1686,1856,2346 'uid':1588,1897,1916,1932,1942,1950,1956,1981,1992 'uikit':2768 'uikitsettingsbuilder.setextensions':2792 'uncondit':293,530 'undefin':1550,1553,1730,1744,1761 'understand':140 'unexpect':2903 'unknown':1729,1738,1743,1901,1908,1909 'unless':2994 'unnecessari':147 'unread':649 'updat':1312 'url':2181,2198 'use':150,354,594,620,716,1497,1609,2157,2199,2268,2329,2486,2577,2969,3090 'useeffect':1504,1527,1886,1910 'user':155,230,249,466,629,652,683,790,800,821,870,1012,1136,1226,1559,1574,1841,1863,1882,1938,1946,1966,1969,2125,2264,2320,2342,2411,2525,2672,2834,2852,2989,3055,3081 'user.getuid':1941,1949 'usest':1503,1526,1887,1905 'useuserpres':1896 'variant':544,556,1280,1289,1340,1385 'verbatim':2338,2733,2893 'verifi':1157,1241,2883,2887 'via':121,180,346,538,1806,2384,2791 'video':214,1444,1480 'virus/malware':873,1139 'visit':362,721 'visual':75 'voic':380,818 'voice-transcript':379 'voice/video':512 'walk':1302,2133,2837,3079 'walkthrough':2337 'want':156,2280,2344,2412 'warn':2907 'way':1496 'web/rn':587,2619,2866 'webhook':479,1022,1054,2829,3074 'whether':317 'whiteboard':838 'whose':557 'wire':1259,1465,2085,2766 'without':2940 'word':574,1308 'word-boundari':573,1307 'work':98,148,192,274 'would':524 'write':3046 'www.cometchat.com':2150,2215,2220,2224,2229,3097,3101,3106,3111 'www.cometchat.com/docs/mcp':2149 'www.cometchat.com/docs/ui-kit/react/ai-features':2219 'www.cometchat.com/docs/ui-kit/react/ai-features)':3105 'www.cometchat.com/docs/ui-kit/react/call-features':2223 'www.cometchat.com/docs/ui-kit/react/call-features)':3110 'www.cometchat.com/docs/ui-kit/react/core-features':2228 'www.cometchat.com/docs/ui-kit/react/core-features)':3096 'www.cometchat.com/docs/ui-kit/react/extensions':2214 'www.cometchat.com/docs/ui-kit/react/extensions)':3100 'x':2007 'xss':865,1131 'yet':2378 'z':2481,2493,2497 'za':2496 'zero':109","prices":[{"id":"90a3d304-9b7a-4969-abe7-649efee45d5a","listingId":"0e754080-0697-444b-87ef-3b2d3f8e31d3","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"cometchat","category":"cometchat-skills","install_from":"skills.sh"},"createdAt":"2026-05-07T13:05:08.778Z"}],"sources":[{"listingId":"0e754080-0697-444b-87ef-3b2d3f8e31d3","source":"github","sourceId":"cometchat/cometchat-skills/cometchat-features","sourceUrl":"https://github.com/cometchat/cometchat-skills/tree/main/skills/cometchat-features","isPrimary":false,"firstSeenAt":"2026-05-07T13:05:08.778Z","lastSeenAt":"2026-05-18T19:04:49.570Z"}],"details":{"listingId":"0e754080-0697-444b-87ef-3b2d3f8e31d3","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"cometchat","slug":"cometchat-features","github":{"repo":"cometchat/cometchat-skills","stars":27,"topics":["agent-skills","ai-agent","chat","claude-code","cometchat","cursor","messaging","nextjs","react","react-native","ui-kit"],"license":null,"html_url":"https://github.com/cometchat/cometchat-skills","pushed_at":"2026-05-18T05:04:24Z","description":"Add CometChat chat to any React, Next.js, React Native, Angular, Android, iOS, or Flutter project through your AI coding agent. Works with Claude Code, Cursor, Codex, VS Code Copilot, Windsurf, Cline, Kiro, and 50+ more agents.","skill_md_sha":"7c3fec4581c973868b7880c5719adcab5139db3d","skill_md_path":"skills/cometchat-features/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/cometchat/cometchat-skills/tree/main/skills/cometchat-features"},"layout":"multi","source":"github","category":"cometchat-skills","frontmatter":{"name":"cometchat-features","license":"MIT","description":"Add features (calls, reactions, polls, file sharing, presence, etc.) to an already-integrated CometChat project. Routes to the right sub-flow based on feature type — default (already enabled), extension (API toggle), ai-feature (API toggle + OpenAI key), dashboard-only (third-party config), package-install (calls), or component-swap (rich text).","compatibility":"Node.js >=18; @cometchat/chat-uikit-react ^6; integration must already be applied"},"skills_sh_url":"https://skills.sh/cometchat/cometchat-skills/cometchat-features"},"updatedAt":"2026-05-18T19:04:49.570Z"}}