[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6MF97PWTMDP9V8TY8W329SJ":3,"skill-same:01M6MF97PWTMDP9V8TY8W329SJ":80},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":23,"publishedAt":46,"linkOnly":47,"markdownContent":48,"markdownBody":49,"frontMatter":50,"refName":56,"commitSha":57,"skillDirectory":58,"forksCount":59,"repositoryHtmlUrl":60,"repositoryHomepageUrl":61,"ownerHtmlUrl":62,"ownerBlogUrl":63,"ownerDescription":64,"updatedAt":65,"install":66,"resources":79},"01M6MF97PWTMDP9V8TY8W329SJ","cometchat-flutter-v6-calls",null,"Add voice & video calling to a Flutter app with the CometChat v6 UI Kit — turn calling on in settings, wire the native config and the root navigatorKey (the kit presents incoming\u002Foutgoing call screens itself), and add call-log surfaces. Triggers: 'add voice and video calls in flutter', 'add calling to my flutter chat', 'enable video call flutter', 'add call buttons flutter', 'show call logs flutter'.","hashgraph-online\u002Fawesome-codex-plugins","hashgraph-online","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F160371962?v=4","01M6CNB6NRJVNNGN14TR01Q6D3","HOL (Hashgraph Online)","01M6JT1HSKKG9V68KQAQGBA7XP",1559,"MIT","https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Fcometchat\u002Fcometchat-skills\u002Fskills\u002Fcometchat-flutter-v6-calls\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000016","图像与多媒体","SCENARIO","使用场景",[24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],"cometchat","cometchat flutter v6 calls","flutter","calls","app","buttons","verified","my","kit","native","add","flutter app","config","triggers","webrtc","call","show","surfaces","log","Video","logs","ui","2026-11-10 10:12:30",false,"---\nname: cometchat-flutter-v6-calls\ndescription: \"Add voice & video calling to a Flutter app with the CometChat v6 UI Kit — turn calling on in settings, wire the native config and the root navigatorKey (the kit presents incoming\u002Foutgoing call screens itself), and add call-log surfaces. Triggers: 'add voice and video calls in flutter', 'add calling to my flutter chat', 'enable video call flutter', 'add call buttons flutter', 'show call logs flutter'.\"\nlicense: \"MIT\"\ncompatibility: \"Flutter >=3.38.9; cometchat_chat_uikit ^6 (6.1.x, verified 6.1.0); cometchat_calls_sdk ^5 (5.0.x — separate package)\"\nmetadata:\n  author: \"CometChat\"\n  version: \"1.0.0\"\n  tags: \"cometchat flutter calls voice video calling webrtc v6\"\n---\n\n> **Ground truth:** the call UI ships INSIDE `cometchat_chat_uikit`, but in a **second barrel**, and the WebRTC engine is a separate package (`cometchat_calls_sdk`). Every symbol below is catalog-verified against 6.1.0. Exhaustive props: FETCH the twin via `..\u002Fcometchat-flutter-v6-core\u002Freferences\u002Fdocs-map.md` (`call-features` · `incoming-call` · `outgoing-call` · `call-logs` · `call-buttons`). **APPEND to the user's app — additive wiring only.**\n\n## Companion skills (read first)\n- `cometchat-flutter-v6-core` — install, credentials, the settings asset, `init→login→render`. This skill ASSUMES it (calling rides the SAME init).\n- `cometchat-flutter-v6-components` — the widget catalog.\n- `cometchat-flutter-v6-placement` — where call surfaces sit in the app shell (incoming calls need only the root `navigatorKey` — no widget).\n\n## Use this skill when\n\"add voice & video calls\", \"enable video call\", \"add call buttons\", \"show call logs\". Precondition: chat already works (core done).\n\n## Prerequisites & install\n`cometchat_chat_uikit` **already depends on `cometchat_calls_sdk`** (`^5.0.4`, in the kit's own `dependencies:` — verified in the 6.1.x pubspec), so the WebRTC engine is pulled in transitively; you do **not** need to add it. Add an explicit direct dependency **only** if you import `cometchat_calls_sdk` symbols directly (then pin it to keep resolution predictable):\n```bash\nflutter pub add cometchat_calls_sdk   # optional — only if you import the package directly\n```\nThen the native config the docs require — **all four steps, or calling silently never rings**:\n1. `cometchat_calls_sdk` (transitive via the kit; pin `^5.0.4` in `pubspec.yaml` only if you added it directly).\n2. **Android** `android\u002Fapp\u002Fbuild.gradle.kts`: `minSdk = 26`.\n3. **iOS** `ios\u002FPodfile`: `platform :ios, '15.1'`, then `pod install`.\n4. **Permissions** — camera + microphone (`AndroidManifest.xml`; `NSCameraUsageDescription` \u002F `NSMicrophoneUsageDescription` in `Info.plist`). Without them the call surface opens black.\n> **⚠️ The docs' floors are too low and these are compiler-verified instead.** `cometchat_calls_sdk`\n> pins `minSdkVersion 26` in its `android\u002Fbuild.gradle` and `platform :ios, '15.1'` in its podspec\n> (5.0.7; it was 13.0 through 5.0.6). Gradle and CocoaPods take the MAXIMUM across the dependency\n> graph, so a lower app-level value is a build error, not a warning. Docs say 24 \u002F 13.0 —\n> DOCS-BACKLOG D7. Platform floors do move: re-verify against the installed package, not the page.\n\n## THE BARREL TRAP (read before writing a line)\nEvery call widget resolves **only** from the calls barrel, and that barrel does **not** re-export the chat widgets. A calls screen imports **both**:\n```dart\nimport 'package:cometchat_chat_uikit\u002Fcometchat_chat_uikit.dart';        \u002F\u002F chat widgets + SDK types\nimport 'package:cometchat_chat_uikit\u002Fcometchat_calls_uikit.dart';       \u002F\u002F ALL call widgets\n```\nImporting only the chat barrel and then emitting `CometChatIncomingCall` fails to compile with *\"Undefined name\"* — the single most common calls mistake.\n\n## Enable calling (BAKED — the #1 gotcha: TWO things must be true)\nCalling is off until **(a)** the Calls SDK is installed **and (b)** calling is enabled in settings. Core inits via `initFromSettings`, which reads `cometchat-settings.json` — so flip it **in the file**:\n```json\n{\n  \"appId\": \"APP_ID\",\n  \"region\": \"REGION\",\n  \"credentials\": { \"authKey\": \"AUTH_KEY\" },\n  \"uiKit\": { \"subscribePresenceForAllUsers\": true, \"enableCalling\": true },\n  \"chatSDK\": { \"autoEstablishSocketConnection\": true }\n}\n```\n> `uiKit.enableCalling` is the **only** way to enable calling on the `initFromSettings` path — `UIKitSettings` defaults it to false. (If the project uses the classic builder instead, the equivalent is `..enableCalls = true` plus `..callingConfiguration = CallingConfiguration()`.)\n\n## Wire it (BAKED)\n**1. A navigator key at the app root** so the kit can present call screens from anywhere:\n```dart\nimport 'package:cometchat_chat_uikit\u002Fcometchat_calls_uikit.dart';\nimport 'package:flutter\u002Fmaterial.dart';\n\nWidget app(Widget home) => MaterialApp(\n      navigatorKey: CallNavigationContext.navigatorKey,   \u002F\u002F REQUIRED for call routing\n      home: home,\n    );\n```\n\n**2. That's it for incoming calls — the kit does the rest.** Do **NOT** add your own root `CallListener` or present `CometChatIncomingCall` yourself. When `uiKit.enableCalling` is true, the kit's `CallEventService` registers its **own** `CometChat.addCallListener(...)` on login and shows the incoming-call overlay automatically via `IncomingCallOverlay` (verified in `cometchat_chat_uikit` 6.1.x). Adding a second listener + a manual overlay produces a **DOUBLE** incoming-call screen. All you owe it is the `navigatorKey` from step 1 (that is how the overlay finds a context to present — without it the kit logs *\"Incoming call overlay cannot be shown\"*).\n\n**To customize the incoming\u002Foutgoing\u002Fcall-button surfaces, pass a `CallingConfiguration`** — not a hand-rolled listener. On the classic builder path: `..callingConfiguration = CallingConfiguration(incomingCallConfiguration: ..., outgoingCallConfiguration: ..., callButtonsConfiguration: ...)`. `CallingConfiguration` (with `incomingCallConfiguration` \u002F `outgoingCallConfiguration` \u002F `callButtonsConfiguration`) is the kit's supported entry point; fetch its fields via the twin (`call-features`).\n\n**3. Extra surfaces you place yourself** — call logs, and the incoming\u002Foutgoing widgets only when you build a fully custom flow — from the CALLS barrel:\n```dart\nimport 'package:cometchat_chat_uikit\u002Fcometchat_calls_uikit.dart';\nimport 'package:flutter\u002Fmaterial.dart';\n\nWidget logs() => const CometChatCallLogs();\n\u002F\u002F Only when replacing the built-in overlay with a fully custom flow — otherwise the kit\n\u002F\u002F already presents these for you:\nWidget incoming(Call call, User user) => CometChatIncomingCall(call: call, user: user);\nWidget outgoing(Call call, User user) => CometChatOutgoingCall(call: call, user: user);\n```\n> **Call buttons are already in `CometChatMessageHeader`** — do NOT hand-roll them. They appear once calling is enabled; hide with `hideVoiceCallButton` \u002F `hideVideoCallButton`. `CometChatCallButtons` is for placing them somewhere else (e.g. a profile screen).\n\n## Common pitfalls (BAKED — the ones that actually bite)\n- **Enabled in only one place** — SDK installed but `enableCalling` false (or vice-versa) ⇒ every call affordance stays hidden, with no error.\n- **Missing camera\u002Fmic permissions** ⇒ the call surface opens black. Test on a real device; simulators have no camera.\n- **Adding your own root `CallListener` + `CometChatIncomingCall`** ⇒ a DOUBLE incoming-call screen. The kit's `CallEventService` already listens and shows the overlay when calling is enabled — don't duplicate it; customize via `CallingConfiguration`.\n- **No `navigatorKey`** (`CallNavigationContext.navigatorKey` on your `MaterialApp`) ⇒ the kit's overlay has no context to present from and logs *\"Incoming call overlay cannot be shown\"*.\n- **A call surface with no bounded height** ⇒ zero-dimension video (`..\u002Fcometchat-flutter-v6-core\u002Freferences\u002Flayout.md`).\n- **Group calls do not ring** the way 1:1 does — group calling is join-based. Verify the behaviour you promise against `call-features`.\n- **Details screens are host-composed** — there is no `CometChatCallLogDetails` widget; build it from `guide-call-log-details`.\n\n## Verify it works\nOn TWO real devices (not simulators): calling enabled in the settings file and the Calls SDK installed → the header shows call buttons → placing a call rings the other device → accept shows the ongoing surface with real video → decline\u002Fend returns both sides cleanly → the call appears in `CometChatCallLogs`. A black surface means permissions; no ring means the enable pair or a missing `navigatorKey`; two incoming screens means a hand-added listener\u002F`CometChatIncomingCall`.\n> Build the feature; do not write tests unless asked (`RULES.md`) — the above is an advisory human pass.\n\n**Close (after it builds):** end with the shared 3-option selectable menu and WAIT — **① add another feature · ② customize theming · ③ test it manually** (same contract as core, `RULES.md` §19).\n","> **Ground truth:** the call UI ships INSIDE `cometchat_chat_uikit`, but in a **second barrel**, and the WebRTC engine is a separate package (`cometchat_calls_sdk`). Every symbol below is catalog-verified against 6.1.0. Exhaustive props: FETCH the twin via `..\u002Fcometchat-flutter-v6-core\u002Freferences\u002Fdocs-map.md` (`call-features` · `incoming-call` · `outgoing-call` · `call-logs` · `call-buttons`). **APPEND to the user's app — additive wiring only.**\n\n## Companion skills (read first)\n- `cometchat-flutter-v6-core` — install, credentials, the settings asset, `init→login→render`. This skill ASSUMES it (calling rides the SAME init).\n- `cometchat-flutter-v6-components` — the widget catalog.\n- `cometchat-flutter-v6-placement` — where call surfaces sit in the app shell (incoming calls need only the root `navigatorKey` — no widget).\n\n## Use this skill when\n\"add voice & video calls\", \"enable video call\", \"add call buttons\", \"show call logs\". Precondition: chat already works (core done).\n\n## Prerequisites & install\n`cometchat_chat_uikit` **already depends on `cometchat_calls_sdk`** (`^5.0.4`, in the kit's own `dependencies:` — verified in the 6.1.x pubspec), so the WebRTC engine is pulled in transitively; you do **not** need to add it. Add an explicit direct dependency **only** if you import `cometchat_calls_sdk` symbols directly (then pin it to keep resolution predictable):\n```bash\nflutter pub add cometchat_calls_sdk   # optional — only if you import the package directly\n```\nThen the native config the docs require — **all four steps, or calling silently never rings**:\n1. `cometchat_calls_sdk` (transitive via the kit; pin `^5.0.4` in `pubspec.yaml` only if you added it directly).\n2. **Android** `android\u002Fapp\u002Fbuild.gradle.kts`: `minSdk = 26`.\n3. **iOS** `ios\u002FPodfile`: `platform :ios, '15.1'`, then `pod install`.\n4. **Permissions** — camera + microphone (`AndroidManifest.xml`; `NSCameraUsageDescription` \u002F `NSMicrophoneUsageDescription` in `Info.plist`). Without them the call surface opens black.\n> **⚠️ The docs' floors are too low and these are compiler-verified instead.** `cometchat_calls_sdk`\n> pins `minSdkVersion 26` in its `android\u002Fbuild.gradle` and `platform :ios, '15.1'` in its podspec\n> (5.0.7; it was 13.0 through 5.0.6). Gradle and CocoaPods take the MAXIMUM across the dependency\n> graph, so a lower app-level value is a build error, not a warning. Docs say 24 \u002F 13.0 —\n> DOCS-BACKLOG D7. Platform floors do move: re-verify against the installed package, not the page.\n\n## THE BARREL TRAP (read before writing a line)\nEvery call widget resolves **only** from the calls barrel, and that barrel does **not** re-export the chat widgets. A calls screen imports **both**:\n```dart\nimport 'package:cometchat_chat_uikit\u002Fcometchat_chat_uikit.dart';        \u002F\u002F chat widgets + SDK types\nimport 'package:cometchat_chat_uikit\u002Fcometchat_calls_uikit.dart';       \u002F\u002F ALL call widgets\n```\nImporting only the chat barrel and then emitting `CometChatIncomingCall` fails to compile with *\"Undefined name\"* — the single most common calls mistake.\n\n## Enable calling (BAKED — the #1 gotcha: TWO things must be true)\nCalling is off until **(a)** the Calls SDK is installed **and (b)** calling is enabled in settings. Core inits via `initFromSettings`, which reads `cometchat-settings.json` — so flip it **in the file**:\n```json\n{\n  \"appId\": \"APP_ID\",\n  \"region\": \"REGION\",\n  \"credentials\": { \"authKey\": \"AUTH_KEY\" },\n  \"uiKit\": { \"subscribePresenceForAllUsers\": true, \"enableCalling\": true },\n  \"chatSDK\": { \"autoEstablishSocketConnection\": true }\n}\n```\n> `uiKit.enableCalling` is the **only** way to enable calling on the `initFromSettings` path — `UIKitSettings` defaults it to false. (If the project uses the classic builder instead, the equivalent is `..enableCalls = true` plus `..callingConfiguration = CallingConfiguration()`.)\n\n## Wire it (BAKED)\n**1. A navigator key at the app root** so the kit can present call screens from anywhere:\n```dart\nimport 'package:cometchat_chat_uikit\u002Fcometchat_calls_uikit.dart';\nimport 'package:flutter\u002Fmaterial.dart';\n\nWidget app(Widget home) => MaterialApp(\n      navigatorKey: CallNavigationContext.navigatorKey,   \u002F\u002F REQUIRED for call routing\n      home: home,\n    );\n```\n\n**2. That's it for incoming calls — the kit does the rest.** Do **NOT** add your own root `CallListener` or present `CometChatIncomingCall` yourself. When `uiKit.enableCalling` is true, the kit's `CallEventService` registers its **own** `CometChat.addCallListener(...)` on login and shows the incoming-call overlay automatically via `IncomingCallOverlay` (verified in `cometchat_chat_uikit` 6.1.x). Adding a second listener + a manual overlay produces a **DOUBLE** incoming-call screen. All you owe it is the `navigatorKey` from step 1 (that is how the overlay finds a context to present — without it the kit logs *\"Incoming call overlay cannot be shown\"*).\n\n**To customize the incoming\u002Foutgoing\u002Fcall-button surfaces, pass a `CallingConfiguration`** — not a hand-rolled listener. On the classic builder path: `..callingConfiguration = CallingConfiguration(incomingCallConfiguration: ..., outgoingCallConfiguration: ..., callButtonsConfiguration: ...)`. `CallingConfiguration` (with `incomingCallConfiguration` \u002F `outgoingCallConfiguration` \u002F `callButtonsConfiguration`) is the kit's supported entry point; fetch its fields via the twin (`call-features`).\n\n**3. Extra surfaces you place yourself** — call logs, and the incoming\u002Foutgoing widgets only when you build a fully custom flow — from the CALLS barrel:\n```dart\nimport 'package:cometchat_chat_uikit\u002Fcometchat_calls_uikit.dart';\nimport 'package:flutter\u002Fmaterial.dart';\n\nWidget logs() => const CometChatCallLogs();\n\u002F\u002F Only when replacing the built-in overlay with a fully custom flow — otherwise the kit\n\u002F\u002F already presents these for you:\nWidget incoming(Call call, User user) => CometChatIncomingCall(call: call, user: user);\nWidget outgoing(Call call, User user) => CometChatOutgoingCall(call: call, user: user);\n```\n> **Call buttons are already in `CometChatMessageHeader`** — do NOT hand-roll them. They appear once calling is enabled; hide with `hideVoiceCallButton` \u002F `hideVideoCallButton`. `CometChatCallButtons` is for placing them somewhere else (e.g. a profile screen).\n\n## Common pitfalls (BAKED — the ones that actually bite)\n- **Enabled in only one place** — SDK installed but `enableCalling` false (or vice-versa) ⇒ every call affordance stays hidden, with no error.\n- **Missing camera\u002Fmic permissions** ⇒ the call surface opens black. Test on a real device; simulators have no camera.\n- **Adding your own root `CallListener` + `CometChatIncomingCall`** ⇒ a DOUBLE incoming-call screen. The kit's `CallEventService` already listens and shows the overlay when calling is enabled — don't duplicate it; customize via `CallingConfiguration`.\n- **No `navigatorKey`** (`CallNavigationContext.navigatorKey` on your `MaterialApp`) ⇒ the kit's overlay has no context to present from and logs *\"Incoming call overlay cannot be shown\"*.\n- **A call surface with no bounded height** ⇒ zero-dimension video (`..\u002Fcometchat-flutter-v6-core\u002Freferences\u002Flayout.md`).\n- **Group calls do not ring** the way 1:1 does — group calling is join-based. Verify the behaviour you promise against `call-features`.\n- **Details screens are host-composed** — there is no `CometChatCallLogDetails` widget; build it from `guide-call-log-details`.\n\n## Verify it works\nOn TWO real devices (not simulators): calling enabled in the settings file and the Calls SDK installed → the header shows call buttons → placing a call rings the other device → accept shows the ongoing surface with real video → decline\u002Fend returns both sides cleanly → the call appears in `CometChatCallLogs`. A black surface means permissions; no ring means the enable pair or a missing `navigatorKey`; two incoming screens means a hand-added listener\u002F`CometChatIncomingCall`.\n> Build the feature; do not write tests unless asked (`RULES.md`) — the above is an advisory human pass.\n\n**Close (after it builds):** end with the shared 3-option selectable menu and WAIT — **① add another feature · ② customize theming · ③ test it manually** (same contract as core, `RULES.md` §19).\n",{"name":5,"license":15,"metadata":51,"description":7,"compatibility":55},{"tags":52,"author":53,"version":54},"cometchat flutter calls voice video calling webrtc v6","CometChat","1.0.0","Flutter >=3.38.9; cometchat_chat_uikit ^6 (6.1.x, verified 6.1.0); cometchat_calls_sdk ^5 (5.0.x — separate package)","main","2b63f856ce19c2a797929cacabd9e0fc936812fa","plugins\u002Fcometchat\u002Fcometchat-skills\u002Fskills\u002Fcometchat-flutter-v6-calls",474,"https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins","https:\u002F\u002Fhol.org\u002Fplugins\u002Fbest-codex-plugins","https:\u002F\u002Fgithub.com\u002Fhashgraph-online","https:\u002F\u002Fhol.org","Open-source standards and developer tools for interoperable AI agents: discovery, identity, communication, payments, privacy and security.","2026-11-11 14:40:14",{"source":8,"skillName":5,"commands":67,"prompt":77,"zipAvailable":78},[68,71,74],{"tool":69,"command":70},"npx","npx skills add hashgraph-online\u002Fawesome-codex-plugins --skill cometchat-flutter-v6-calls",{"tool":72,"command":73},"bunx","bunx skills add hashgraph-online\u002Fawesome-codex-plugins --skill cometchat-flutter-v6-calls",{"tool":75,"command":76},"pnpm","pnpm dlx skills add hashgraph-online\u002Fawesome-codex-plugins --skill cometchat-flutter-v6-calls","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Fcometchat\u002Fcometchat-skills\u002Fskills\u002Fcometchat-flutter-v6-calls\u002FSKILL.md",true,[],[81,90,97,104,131,156],{"skillNo":82,"name":83,"nameZh":6,"description":84,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":85,"licenseFileUrl":6,"sourceHtmlUrl":86,"categories":87,"keywords":88,"publishedAt":89},"01M746ZWACVKMZ1BJXJZHYJSSX","migrate-to-e2e","Moves an existing Playwright, Cypress, Selenium, Appium, Detox, Maestro, or TesterArmy suite to e2e one slice at a time, with the old suite running beside the new one until each ported test is proven. Keeps a MIGRATION.md progress file so any later session resumes where the last stopped. Optionally plants a defect to show both suites catch it. Use for \u002Fmigrate-to-e2e, \"migrate our tests to e2e\", \"port these Maestro flows\", \"move our TesterArmy tests\", or when a project has an e2e config and an older suite still running.","Apache-2.0","https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Ftester-army\u002Fe2e\u002Fskills\u002Fmigrate-to-e2e\u002FSKILL.md",[],[],"2026-11-11 15:11:14",{"skillNo":91,"name":92,"nameZh":6,"description":93,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":85,"licenseFileUrl":6,"sourceHtmlUrl":94,"categories":95,"keywords":96,"publishedAt":89},"01M746ZPTAX1Q0FBKAB1CYND7E","e2e","Writes, runs, and debugs end-to-end tests for web and mobile apps with e2e, the agentic test runner, which mixes agent.act goals with exact locator assertions on a Playwright browser or an iOS or Android device. Also drives a project's running app live over the e2e MCP server to look at a screen, check a UI change, take a screenshot or record a video, and try a locator; and runs bug bashes, parallel e2e explore runs with each bug proven by a repro test. Use when a project depends on e2e or has an e2e.config.ts, when asked for end-to-end, browser, mobile, or agentic UI tests, to check a change in the running app, to QA or bug bash an app or branch, or when an e2e run fails.","https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Ftester-army\u002Fe2e\u002Fskills\u002Fe2e\u002FSKILL.md",[],[],{"skillNo":98,"name":99,"nameZh":6,"description":100,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":85,"licenseFileUrl":6,"sourceHtmlUrl":101,"categories":102,"keywords":103,"publishedAt":89},"01M746ZJN784HVHMDP9MQGCSGG","create-verification-skill","Generate a project-local verify-\u003Capp> skill on top of e2e, so any coding agent can launch the app, check it is worth driving, exercise a feature the way a user does, keep evidence, and bug bash it. Writes the skill, a feature map with one explore charter per feature, and proves it once. Use for \u002Fcreate-verification-skill, \"make a verification skill for this repo\", or when a project has no scripted way to prove UI behavior.","https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Ftester-army\u002Fe2e\u002Fskills\u002Fcreate-verification-skill\u002FSKILL.md",[],[],{"skillNo":105,"name":106,"nameZh":6,"description":107,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":85,"licenseFileUrl":6,"sourceHtmlUrl":108,"categories":109,"keywords":110,"publishedAt":46},"01M716A6ETNB9B1SQ3GXZC75VR","deja-search","deja-vu memory — search the user's past AI coding sessions with the deja CLI. Holds what they already settled and never wrote into the repo (naming rules, banned or already-tried tools, required checks before merge, preferred values, who owns what). Use before your first edit in a task, before you call a change done or ready to merge, before you recommend a tool, library, design or reviewer, before re-debugging an error that may already be solved, when they say 'didn't we fix this before', 'what did we decide about X' or 'I already have that', and before telling them something on this machine does not exist.","https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Fvshulcz\u002Fdeja-vu\u002Fskills\u002Fdeja-search\u002FSKILL.md",[],[111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130],"search","deja search","never","error","ready","memory","re","decide","fix","design","debugging","when","you","done","reviewer","io","change","cli","merge","past",{"skillNo":132,"name":133,"nameZh":6,"description":134,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":85,"licenseFileUrl":6,"sourceHtmlUrl":135,"categories":136,"keywords":137,"publishedAt":46},"01M716A3J2W5SENSE9VGMXB375","deja-reflect","End-of-session reflection and memory curation with deja-vu. Review what was decided, what commands broke and what repaired them, and record durable project rules or decisions with deja remember so the next session starts with them.","https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Fvshulcz\u002Fdeja-vu\u002Fskills\u002Fdeja-reflect\u002FSKILL.md",[],[138,139,140,126,141,142,143,144,145,146,147,148,149,150,116,151,152,153,154,155],"deja reflect","reflect","review","with","record","github","next","https","node","Rules","decisions","brew","remember","project rules","project","session","end","reflection",{"skillNo":157,"name":158,"nameZh":6,"description":159,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":85,"licenseFileUrl":6,"sourceHtmlUrl":160,"categories":161,"keywords":169,"publishedAt":46},"01M715T3RR4BAYSR57HPPTJ0PF","revid","Make, edit, export and post AI videos with Revid (revid.ai) through the Revid MCP server. Use whenever the user wants a short-form or long-form video made (from an idea, a script, a URL, an article, a PDF, a tweet, a product page, their own clips, or a song), wants to find what is going viral on TikTok, YouTube, Instagram or X before making something, wants to edit or re-export an existing Revid project, generate a standalone AI image or clip, make a series episode, or publish and schedule a finished video to connected social accounts. Covers setup (hosted MCP with OAuth, or an API key), the 36 tools, credits, polling and the rules for publishing. Routes to the more specific revid-* skills when one fits.","https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Ftmakersas\u002Frevid-skills\u002Fskills\u002Frevid\u002FSKILL.md",[162,163,166],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":164,"categoryName":165,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",{"categoryNo":167,"categoryName":168,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000010","后端与接口",[158,170,43,171,172,173,174,152,175,117,176,177,178,179,122,180,181,182,183,184],"URL","short-form","standalone","PDF","viral","tiktok","short","social","MCP","song","image","mcp server","schedule","api","publish"]