Apple Design
vrcm-team/VRCM
Cross-platform UI/UX design reviewer grounded in Apple's Human Interface Guidelines (122 pages pulled from developer.apple.com, including 57 component pages) plus a design-craft lens for…
Add CometChat chat to a Flutter app end-to-end — detect the project, get & verify dashboard credentials, init→login→render, and the drop-in conversation UI.
$ npx skills add cometchat/cometchat-skills --skill cometchat-flutter-v6-core -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install cometchat/cometchat-skills cometchat-flutter-v6-core --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/cometchat/cometchat-skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/cometchat-flutter-v6-core .claude/skills/cometchat-flutter-v6-core && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "cometchat-flutter-v6-core" agent skill from https://github.com/cometchat/cometchat-skills/tree/main/skills/cometchat-flutter-v6-core into .claude/skills/cometchat-flutter-v6-core/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "cometchat-flutter-v6-core", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/cometchat/cometchat-skills/tree/main/skills/cometchat-flutter-v6-coreType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add cometchat/cometchat-skills --skill cometchat-flutter-v6-core -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install cometchat/cometchat-skills cometchat-flutter-v6-core --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/cometchat/cometchat-skills.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/cometchat-flutter-v6-core .agents/skills/cometchat-flutter-v6-core && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "cometchat-flutter-v6-core" agent skill from https://github.com/cometchat/cometchat-skills/tree/main/skills/cometchat-flutter-v6-core into .agents/skills/cometchat-flutter-v6-core/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "cometchat-flutter-v6-core", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add cometchat/cometchat-skills --skill cometchat-flutter-v6-core -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install cometchat/cometchat-skills cometchat-flutter-v6-core --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/cometchat/cometchat-skills.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/cometchat-flutter-v6-core .cursor/skills/cometchat-flutter-v6-core && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "cometchat-flutter-v6-core" agent skill from https://github.com/cometchat/cometchat-skills/tree/main/skills/cometchat-flutter-v6-core into .cursor/skills/cometchat-flutter-v6-core/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "cometchat-flutter-v6-core", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/cometchat/cometchat-skills.git --path skills/cometchat-flutter-v6-core--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add cometchat/cometchat-skills --skill cometchat-flutter-v6-core -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install cometchat/cometchat-skills cometchat-flutter-v6-core --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/cometchat/cometchat-skills.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/cometchat-flutter-v6-core .gemini/skills/cometchat-flutter-v6-core && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "cometchat-flutter-v6-core" agent skill from https://github.com/cometchat/cometchat-skills/tree/main/skills/cometchat-flutter-v6-core into .gemini/skills/cometchat-flutter-v6-core/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "cometchat-flutter-v6-core", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install cometchat/cometchat-skills cometchat-flutter-v6-coreInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add cometchat/cometchat-skills --skill cometchat-flutter-v6-core -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/cometchat/cometchat-skills.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/cometchat-flutter-v6-core .github/skills/cometchat-flutter-v6-core && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "cometchat-flutter-v6-core" agent skill from https://github.com/cometchat/cometchat-skills/tree/main/skills/cometchat-flutter-v6-core into .github/skills/cometchat-flutter-v6-core/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "cometchat-flutter-v6-core", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add cometchat/cometchat-skills --skill cometchat-flutter-v6-core -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install cometchat/cometchat-skills cometchat-flutter-v6-core --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/cometchat/cometchat-skills.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/cometchat-flutter-v6-core .opencode/skills/cometchat-flutter-v6-core && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "cometchat-flutter-v6-core" agent skill from https://github.com/cometchat/cometchat-skills/tree/main/skills/cometchat-flutter-v6-core into .opencode/skills/cometchat-flutter-v6-core/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "cometchat-flutter-v6-core", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
cometchat-flutter-v6-coreAdd CometChat chat to a Flutter app end-to-end — detect the project, get & verify dashboard credentials, init→login→render, and the drop-in conversation UI.
Cometchat Flutter V6 Core is an agent skill from cometchat/cometchat-skills. Add CometChat chat to a Flutter app end-to-end — detect the project, get & verify dashboard credentials, init→login→render, and the drop-in conversation UI. The core knowledge every other Flutter v6 skill builds on. Triggers: 'add chat to my flutter app', 'integrate cometchat flutter', 'set up cometchat credentials flutter', 'show conversations and messages in flutter'.
Its SKILL.md is about 5.2k tokens, which your agent loads only when the skill is triggered. The skill folder holds 7 other files, including reference files (for example `references/anti-patterns.md`, `references/docs-map.md` and `references/layout.md`). Compatibility notes: Flutter =3.38.9; Dart =3.10.8 <4.0.0; cometchatchatuikit ^6 (6.1.x, verified 6.1.0); cometchatsdk ^5.0.6; cometchatcallssdk ^5.0.4 (calls only)
It sits in Mobile, covering Cross-platform mobile apps. It works with Flutter, CometChat and iOS. The repository describes itself as: Add CometChat chat & messaging and voice & video calls to any React, Next.js, React Native, Angular, Android, iOS, or Flutter project through your AI coding agent. Works with… The licence is MIT.
5 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 911b108. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
flutterFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names these keys or tokens, usually read from environment variables:
AUTH_KEYFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Flutter >=3.38.9; Dart >=3.10.8 <4.0.0; cometchat_chat_uikit ^6 (6.1.x, verified 6.1.0); cometchat_sdk ^5.0.6; cometchat_calls_sdk ^5.0.4 (calls only)
From compatibility in the SKILL.md frontmatter.
Cometchat Flutter V6 Core loads about 5.2k tokens when it runs, and up to ~13k if it reads all its reference files. Until then it costs about 100 tokens; SKILL.md has 1,970 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from cometchat/cometchat-skills at commit 911b108, republished under its MIT licence (© cometchat). 1,970 words, ~5,242 tokens.
.claude/skills/cometchat-flutter-v6-core/SKILL.md (or your agent's skills folder). This skill also uses 6 other files; get the full folder from GitHub.Ground truth:
cometchat_chat_uikit@6(6.1.0) +cometchat_sdk@^5.0.6. EveryCometChat*symbol here is incatalogs/flutter-v6.json— compiler-verified against the published package. Signatures marked [verified] were compiled because the docs were wrong, or (forinitFromSettings) deliberately silent (DOCS-BACKLOG.mdPART 4): trust this file for those, fetch the rest viareferences/docs-map.md. THIN map loaded every run; depth inreferences/*.
<!-- core is the companion the other flutter v6 skills read; it has no Companion block of its own. -->
"add chat to my Flutter app", "integrate CometChat in Flutter", "set up CometChat credentials", "show a conversations + messages screen". An unscoped "add chat" means a production-ready core surface — a CometChatConversations screen pushing a message screen, with threaded replies and search wired, in Scaffold/SafeArea, keyboard-safe, every screen popping back — NOT a two-widget demo, NOT the whole tab-based app (see the golden path). It grows on request → cometchat-flutter-v6-placement.
flutter pub add cometchat_chat_uikitPin the major in pubspec.yaml — cometchat_chat_uikit: ^6.1.0 (a bare any can resolve across majors). The Chat SDK (cometchat_sdk) comes transitively and is re-exported by the kit barrel — do NOT add it separately unless you import SDK-only paths. Voice/video calling = a settings flag + native config (cometchat_calls_sdk is already a transitive kit dependency — see below) → cometchat-flutter-v6-calls.
Platform minimums — Android minSdk = 26 in android/app/build.gradle.kts; iOS platform :ios, '15.1' in ios/Podfile. The getting-started page says 24 / 13.0 and both are too low (DOCS-BACKLOG D7). The kit's own AAR allows 21, but transitive deps set the real floor and this one is not optional: cometchat_chat_uikit depends on cometchat_calls_sdk unconditionally — it sits in the main dependencies: block — and that package pins minSdkVersion 26 / platform :ios, '15.1' (5.0.7). Gradle and CocoaPods take the maximum across the graph, so a lower value is a build error whether or not the app uses calling.
references/setup-credentials.md)pubspec.yaml + lockfile (deps and the kit major), lib/main.dart, state management, navigation, and how config is handled. Reuse an existing .cometchat/config.json or settings asset (skip re-setup). Signal table: references/setup-credentials.md.cometchat_chat_uikit v5 (or any non-v6 major); reconcile first, never mix majors (RULES.md). A v5 project that wants v6 → cometchat-flutter-v6-migration.cometchat-settings.json (§4) from those creds; the CLI is dashboard/API-only and never writes Dart (RULES.md §21). Never defer credentials to a "add them yourself" TODO. Exact commands + the app-picker flow: references/setup-credentials.md.flutter build fails — see the note in §Integration ordering); never echo the Auth Key. Prod → server-minted auth token, not the Auth Key.init then login both hit onSuccess. An auth error is almost always the wrong Region.initFromSettings() once at startup → login(UID) after init succeeds → only THEN render any CometChat* widget.
Init via initFromSettings — the file-based, telemetry-attributed path (RULES.md §5). It reads a cometchat-settings.json asset and persists integrationSource="ai-agent". Flutter's signature takes NO settings argument (unlike web, which passes a settings object) — the file IS the input:
// [verified vs 6.1.0] — INTENTIONALLY undocumented upstream (@nodoc, owner decision:
// DOCS-BACKLOG F4 WONTFIX). Prefer it over the docs' UIKitSettingsBuilder + init()
// path, which loses telemetry attribution. The shape below is the contract.
import 'package:cometchat_chat_uikit/cometchat_chat_uikit.dart';
await CometChatUIKit.initFromSettings(
onSuccess: (String message) => debugPrint('CometChat initialized'),
onError: (CometChatException e) => debugPrint('Init failed: ${e.message}'),
);cometchat-settings.json at the project root, registered in pubspec.yaml under flutter: assets::
{
"appId": "APP_ID",
"region": "REGION",
"credentials": { "authKey": "AUTH_KEY" },
"uiKit": { "subscribePresenceForAllUsers": true, "enableCalling": false },
"chatSDK": { "autoEstablishSocketConnection": true }
}Keys are read exactly as above.
uiKit.enableCallingis the only way to turn calling on via this path (UIKitSettingsdefaults it to false) — leave itfalseuntil the user asks for calls.credentials.authKeyis dev-only; omit it for production and log in with a server-minted token. Make a fresh clone build. A file registered underflutter: assets:MUST exist at build time orflutter build bundlefails with "No file or variants found for asset: cometchat-settings.json." So do not gitignore the registered asset. Instead commit a placeholdercometchat-settings.json— same shape, with a placeholder/emptyauthKey(NEVER a real dev Auth Key) — and have each developer and CI overwrite it locally/at build time with real credentials. (Enforce "no real key committed" via a pre-commit check or CI, not.gitignore.) For production, CI generates the prod-flavoured file (no Auth Key) at build time (cometchat-flutter-v6-production).
// login AFTER init succeeds. CometChatUIKit.login already checks getLoggedInUser()
// internally and no-ops if that UID is signed in, so no host-side re-login guard is needed.
await CometChatUIKit.login(
uid,
onSuccess: (User user) => debugPrint('Logged in: ${user.name}'),
onError: (CometChatException e) => debugPrint('Login failed: ${e.message}'),
);Which UID?
login()needs a user that ALREADY EXISTS — never invent one. ASK, or take one from Dashboard → Users; fresh apps seedcometchat-uid-1…. The only tentative suggestion iscometchat-uid-1, labelled "if this is a fresh app." Prod →CometChatUIKit.loginWithAuthToken(authToken, …)with a token minted server-side. Init-once, hot-restart, and gating the first frame:references/lifecycle.md.
Init/session: CometChatUIKit (initFromSettings · login · loginWithAuthToken · logout · loggedInUser), UIKitSettingsBuilder, CometChatSubscriptionType, CometChatException.
Core surface: CometChatConversations, CometChatMessageHeader, CometChatMessageList, CometChatMessageComposer; wired affordances CometChatThreadedHeader, CometChatSearch.
Grow set (added on request): CometChatUsers, CometChatGroups, CometChatGroupMembers, CometChatChangeScope, CometChatCallLogs. Incoming calls need NO widget — with calling on, the kit presents the overlay itself (-calls).
TWO BARRELS — a real compile trap.
package:cometchat_chat_uikit/cometchat_chat_uikit.dartgives you the chat widgets and the re-exported Chat SDK (User,Group,Conversation,BaseMessage,TextMessage— no separate import). Every calls symbol (CometChatIncomingCall,CometChatOutgoingCall,CometChatCallButtons,CometChatCallLogs,CometChatCallBubble,CometChatCalls) lives ONLY inpackage:cometchat_chat_uikit/cometchat_calls_uikit.dart, and that barrel does NOT re-export the chat widgets — a calls screen imports both. Verified: usingCometChatIncomingCallwith only the chat import fails to compile. The v6 widget isCometChatThreadedHeader—CometChatThreadHeader(the React name) does NOT exist here. Never carry a name across families.
CometChatConversations: onItemTap(Conversation) (select → push the message screen) · hideSearch · searchReadOnly (set true so the field acts as a button) · onSearchTap (→ push CometChatSearch) · conversationsRequestBuilder (scope to user/group when the ask is DM-only or groups-only — reuse the builder, don't client-filter) · hideAppbar · appBarOptions · onBack.CometChatMessageHeader: user: / group: (pass the SAME target as the list) · showBackButton (default true) + onBack · hideVoiceCallButton / hideVideoCallButton (call buttons are built in — leave them unless calls are out of scope) · auxiliaryButtonView / trailingView (where a custom action goes — see search below).CometChatMessageList: user: / group: · parentMessageId (thread mode) · onThreadRepliesClick [verified] — the type is ThreadRepliesClick = void Function(BaseMessage message, BuildContext context, {CometChatMessageTemplate? template}); a one-argument closure does not compile (DOCS-BACKLOG F2).CometChatMessageComposer: user: / group: · parentMessageId (thread mode). A plain send needs nothing else.CometChatSearch [verified]: onConversationClicked / onMessageClicked (not the docs' onConversationItemClick / onMessageItemClick — DOCS-BACKLOG F3) · onBack · user: / group: / searchIn to scope it to one chat.Any OTHER widget or a rarer prop → fetch its
.mdtwin viareferences/docs-map.md. Full catalog:cometchat-flutter-v6-components.
Setup → init/login → gate the first frame on both resolving (show a loader; never render a CometChat* widget before login succeeds) → then:
CometChatConversations inside Scaffold + SafeArea. Wire onItemTap → Navigator.push the message screen for that conversation's User/Group. Wire the global search the documented way: searchReadOnly: true + onSearchTap → push a CometChatSearch screen, whose onConversationClicked/onMessageClicked navigate to the hit and whose onBack pops. (Or set hideSearch: true — but never leave the field dead.)CometChatMessageHeader + Expanded(child: CometChatMessageList(...)) + CometChatMessageComposer, all carrying the SAME user:/group:. Expanded is what makes the list fill the screen; the header/composer keep their intrinsic height. Leave Scaffold.resizeToAvoidBottomInset at its default true so the composer rides above the keyboard. The header's showBackButton defaults to true — wire onBack to Navigator.pop.onThreadRepliesClick to push a screen with CometChatThreadedHeader(parentMessage:, loggedInUser:) — both required, and it has no onBack, so the screen's own AppBar provides back — plus a CometChatMessageList + CometChatMessageComposer that each take parentMessageId: parentMessage.id AND the same user:/group: as the parent chat. Passing parentMessageId without the user/group target makes thread replies silently never send.CometChatMessageHeader has no search prop (unlike React). Put the action in the header's auxiliaryButtonView/trailingView slot — custom UI goes IN the slot, never stacked on top — and push CometChatSearch(user: …/group: …) so it searches only that chat.// [verified vs 6.1.0] the message screen — the shape the whole surface hangs off.
import 'package:cometchat_chat_uikit/cometchat_chat_uikit.dart';
import 'package:flutter/material.dart';
class MessageScreen extends StatelessWidget {
final User? user;
final Group? group;
const MessageScreen({super.key, this.user, this.group});
@override
Widget build(BuildContext context) {
return Scaffold( // resizeToAvoidBottomInset defaults to true = keyboard-safe
body: SafeArea(
child: Column(
children: [
CometChatMessageHeader(user: user, group: group, onBack: () => Navigator.pop(context)),
Expanded( // REQUIRED — the list fills the remaining height
child: CometChatMessageList(
user: user,
group: group,
onThreadRepliesClick: (BaseMessage message, BuildContext context,
{CometChatMessageTemplate? template}) {
Navigator.push(context, MaterialPageRoute(
builder: (_) => ThreadScreen(parentMessage: message, user: user, group: group),
));
},
),
),
CometChatMessageComposer(user: user, group: group),
],
),
),
);
}
}
// The thread screen the callback pushes — part of the DEFAULT surface, not an extra.
// NOTE: the list AND composer each take parentMessageId *and* the same user:/group:
// as the parent chat. parentMessageId alone => replies silently never send.
class ThreadScreen extends StatelessWidget {
final BaseMessage parentMessage;
final User? user;
final Group? group;
const ThreadScreen({super.key, required this.parentMessage, this.user, this.group});
@override
Widget build(BuildContext context) {
return Scaffold(
// The thread screen's back affordance is the AppBar — CometChatThreadedHeader
// has NO onBack/onError param (the docs show one; it does not exist, DOCS-BACKLOG F5).
// A pushed route gets the back button automatically.
appBar: AppBar(title: const Text('Thread')),
body: SafeArea(
child: Column(
children: [
CometChatThreadedHeader( // note the 'ed' — see the map above
parentMessage: parentMessage, // NOT `message:` (DOCS-BACKLOG F1)
loggedInUser: CometChatUIKit.loggedInUser!, // required
),
Expanded(
child: CometChatMessageList(
user: user, group: group, parentMessageId: parentMessage.id,
),
),
CometChatMessageComposer(
user: user, group: group, parentMessageId: parentMessage.id,
),
],
),
),
);
}
}SIZE it the mobile way —
references/layout.md. The kit's list widgets expand to fill their parent, so the failure mode here is an unbounded height error or a collapsed list, and the fix is always the same: give the list a bounded box (Expanded/Flexibleinside aColumn, or a sized parent) instead of letting content drive it. Never nest the surface in an unboundedSingleChildScrollView/ColumnwithoutExpanded. Match the data scope to the REQUEST. Real apps ship seeded groups, so a plainCometChatConversationslists both 1:1s and groups. A DM-only ask scopes the list to user conversations viaconversationsRequestBuilder; a groups-only app scopes to groups; a generic "add chat" keeps BOTH. Reuse the builder — never hand-roll a client-side filter, and don't add a Groups tab to a 1:1-only app. Prod auth: mint a per-user auth token server-side and callloginWithAuthToken— the Auth Key is dev-only (references/lifecycle.md).
Add each only when asked: Users / Groups / Calls tabs (CometChatUsers · CometChatGroups · CometChatCallLogs) · group details (CometChatGroupMembers + CometChatChangeScope) · calls (→ -calls; incoming calls = only navigatorKey: CallNavigationContext.navigatorKey on the root MaterialApp — never mount CometChatIncomingCall yourself, that doubles the kit's overlay) · features (→ -features). The full tab-based app is the union of these — recipe in -placement. A scoped-DOWN ask (chat tab, bottom sheet, embedded panel) → the matching -placement variant.
setup-credentials.md — detect signals · version_conflict · dashboard creds · the settings asset.lifecycle.md — init-once + hot restart · gating the first frame · prod auth-token · logout.layout.md — mobile sizing (bounded height · Expanded · SafeArea · keyboard).docs-map.md — intent → live doc page (component twins + the SDK-docs section) · DOCS-GAP protocol · the pages that are wrong.anti-patterns.md — v5 carry-overs · unbounded height · render-before-login · the two-barrel trap.troubleshooting.md — symptom → cause → fix.references/anti-patterns.md)login succeeds.UIKitSettings.extensions, no CometChatUIKitChatExtensions, no DataSource/ChatConfigurator/*ExtensionDecorator, no CometChatUIKit.getDataSource(). Dashboard-enabled extensions surface automatically with zero client code. Also gone: the v5 combined shells (CometChatConversationsWithMessages, CometChatUsersWithMessages, CometChatMessages, CometChatUI) — v6 has no shell widget; the host composes screens. Full map: cometchat-flutter-v6-migration.[verified] signatures above. The thread-header params, onThreadRepliesClick, and the search callbacks were wrong on the live pages (DOCS-BACKLOG.md PART 4 F1/F2/F3/F5) — all four are now corrected upstream (re-verified against cometchat/docs@2ebb1db, 2026-09-09), so the [verified] names now agree with the pages; keep them. initFromSettings is different: it is deliberately undocumented and stays that way (F4 WONTFIX), so this skill is its only reference.Run the app: init then login both hit onSuccess → the conversations screen renders full-size (no sliver, no unbounded-height exception) → tap a conversation → messages send/receive → "reply in thread" opens the thread screen and back returns → the search field pushes search, a result navigates, back pops → the composer stays visible with the keyboard open → every pushed screen pops back. Blank screen ⇒ rendered before login resolved, or wrong Region/App ID. No bounded height, no thread wiring, or a dead search field ⇒ under-delivery. Tab-based app ⇒ verify per -placement.
Build the feature; do not write tests or run a test framework unless asked (
RULES.md) — the above is an advisory human pass.
RULES.md §19)Don't end on a silent code dump. Briefly: (1) what I wired (3–5 bullets, NAME the files); (2) decisions & why, flagging dev-only AS dev-only (Auth Key → server token for prod; the <uid>); (3) what I did NOT touch (additive — routing/state/theme intact). Then offer THREE options as a selectable choice and WAIT for the pick:
-features / -calls.-customization.A capability not in this pack: say so honestly + link CometChat's docs.
© cometchat, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 6 other files (references) in skills/cometchat-flutter-v6-core of cometchat/cometchat-skills.
Open the folder on GitHubat commit 911b108
Cometchat Flutter V6 Core next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Cometchat Flutter V6 Core this skillcometchat/cometchat-skills | 129 | — | ~5.2k | Automated safety check: Pass | MIT | |
| Apple Designvrcm-team/VRCM | 179 | 1 repos | ~6.2k | Automated safety check: Pass | MIT | |
| Liquid Glass Widgetssdegenaar/liquid_glass_widgets | 711 | — | ~3.8k | Automated safety check: Pass | MIT | |
| OdevioOdevio/Odevio-CLI | 423 | — | ~7.6k | Automated safety check: Pass | MIT | |
| Mobile DesignxenitV1/Antigravity-Workflows | 130 | 2 repos | ~3.7k | Automated safety check: Notes | MIT | |
| Sim PreviewK9i-0/ccpocket | 1.1k | — | ~711 | Automated safety check: Pass | MIT |
vrcm-team/VRCM
Cross-platform UI/UX design reviewer grounded in Apple's Human Interface Guidelines (122 pages pulled from developer.apple.com, including 57 component pages) plus a design-craft lens for…
sdegenaar/liquid_glass_widgets
Mastery guide and architectural rules for liquidglasswidgets.
Odevio/Odevio-CLI
Take a Flutter project to an iPhone or the App Store with Odevio - build, sign and publish iOS apps from Windows, Linux or macOS with no Mac and no Xcode.
xenitV1/Antigravity-Workflows
Mobile-first design thinking and decision-making for iOS and Android apps.
K9i-0/ccpocket
iOSシミュレーターで動くFlutterアプリをExpo Device HubとTailscale HTTPSでスマホのブラウザへ配信・操作するときに使う。
NativeScript/SimDeck
A skill your agent uses for simulator lifecycle, app install/launch, live viewing, UI inspection, touch/keyboard automation, screenshots, recordings, logs, pasteboard, hardware controls, and…
cometchat/cometchat-skills
Adds voice and video calling to an Android app in Kotlin with the headless CometChat Calls SDK v5, covering meeting-style rooms, 1:1 ringing calls, call logs and recording.
cometchat/cometchat-skills
Builds chat on Android with your own UI against the headless CometChat Chat SDK v5, covering install, Jetifier conflicts, credentials and init-before-login ordering.
cometchat/cometchat-skills
Picks and customizes CometChat's Angular UI Kit components by their verified component list, exact input and output event names, and the surfaces that have no kit component at all.
cometchat/cometchat-skills
Enables or builds CometChat features such as polls, reactions, smart replies and pinned messages in an Angular app, first classifying how much client code each one needs.
cometchat/cometchat-skills
Decides where CometChat chat UI goes in an Angular app: a dedicated route, a dashboard panel, a support widget or the full multi-pane app, with thread and search panels.
cometchat/cometchat-skills
Add voice & video calling to any iOS app FROM SCRATCH with the headless CometChat Calls SDK v5 (CometChatCallsSDK, via Swift Package Manager) — no UI Kit.
Categories
Add CometChat chat to a Flutter app end-to-end — detect the project, get & verify dashboard credentials, init→login→render, and the drop-in conversation UI. Cometchat Flutter V6 Core is an agent skill from cometchat/cometchat-skills. Add CometChat chat to a Flutter app end-to-end — detect the project, get & verify dashboard credentials, init→login→render, and the drop-in conversation UI.
Cometchat Flutter V6 Core fits situations like: tasks that involve Cross-platform mobile apps.
Run `npx skills add cometchat/cometchat-skills --skill cometchat-flutter-v6-core -a claude-code`. Or copy the skill folder (skills/cometchat-flutter-v6-core in cometchat/cometchat-skills) into .claude/skills/cometchat-flutter-v6-core in your project. Claude Code loads it when a task matches its description.
Run `npx skills add cometchat/cometchat-skills --skill cometchat-flutter-v6-core -a codex`. Or copy the skill folder (skills/cometchat-flutter-v6-core in cometchat/cometchat-skills) into .agents/skills/cometchat-flutter-v6-core in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add cometchat/cometchat-skills --skill cometchat-flutter-v6-core -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/cometchat-flutter-v6-core, .gemini/skills/cometchat-flutter-v6-core, .github/skills/cometchat-flutter-v6-core and .opencode/skills/cometchat-flutter-v6-core in your project.
Going by SKILL.md and its folder, Cometchat Flutter V6 Core needs the command-line tools its instructions call (flutter) and credentials named AUTH_KEY. Our summary lists: A credential in AUTH_KEY. Compatibility (from SKILL.md): Flutter >=3.38.9; Dart >=3.10.8 <4.0.0; cometchat_chat_uikit ^6 (6.1.x, verified 6.1.0); cometchat_sdk ^5.0.6; cometchat_calls_sdk ^5.0.4 (calls only).
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Cometchat Flutter V6 Core is published under the MIT licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.
About 5.2k tokens (SKILL.md is roughly 21k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 7.4k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Cometchat Flutter V6 Core: Apple Design (vrcm-team/VRCM, 179 stars), Liquid Glass Widgets (sdegenaar/liquid_glass_widgets, 711 stars), Odevio (Odevio/Odevio-CLI, 423 stars) and Mobile Design (xenitV1/Antigravity-Workflows, 130 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
cometchat (a GitHub organization) maintains it in cometchat/cometchat-skills, which has 129 GitHub stars. The repository holds 97 skills in this directory. The repository was last updated on October 5, 2026.
Source: cometchat/cometchat-skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.