@cometchat/skills 4.0.0 → 4.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (258) hide show
  1. package/README.md +42 -2
  2. package/bin/install.js +448 -57
  3. package/package.json +1 -1
  4. package/skills/cometchat/SKILL.md +337 -80
  5. package/skills/cometchat-a11y/SKILL.md +476 -0
  6. package/skills/cometchat-android-v5/SKILL.md +1 -1
  7. package/skills/cometchat-android-v5-calls/SKILL.md +413 -0
  8. package/skills/cometchat-android-v5-calls/references/README.md +53 -0
  9. package/skills/cometchat-android-v5-calls/references/add-calls-to-existing-chat.md +195 -0
  10. package/skills/cometchat-android-v5-calls/references/audio-controls.md +91 -0
  11. package/skills/cometchat-android-v5-calls/references/background-handling.md +168 -0
  12. package/skills/cometchat-android-v5-calls/references/call-layouts.md +123 -0
  13. package/skills/cometchat-android-v5-calls/references/call-logs.md +113 -0
  14. package/skills/cometchat-android-v5-calls/references/call-session.md +274 -0
  15. package/skills/cometchat-android-v5-calls/references/custom-ui.md +150 -0
  16. package/skills/cometchat-android-v5-calls/references/event-listeners.md +123 -0
  17. package/skills/cometchat-android-v5-calls/references/group-calls.md +205 -0
  18. package/skills/cometchat-android-v5-calls/references/idle-timeout.md +111 -0
  19. package/skills/cometchat-android-v5-calls/references/in-call-chat.md +134 -0
  20. package/skills/cometchat-android-v5-calls/references/join-session.md +120 -0
  21. package/skills/cometchat-android-v5-calls/references/migration-v4-to-v5.md +206 -0
  22. package/skills/cometchat-android-v5-calls/references/participant-management.md +110 -0
  23. package/skills/cometchat-android-v5-calls/references/picture-in-picture.md +106 -0
  24. package/skills/cometchat-android-v5-calls/references/raise-hand.md +242 -0
  25. package/skills/cometchat-android-v5-calls/references/recording.md +101 -0
  26. package/skills/cometchat-android-v5-calls/references/ringing-integration.md +152 -0
  27. package/skills/cometchat-android-v5-calls/references/screen-sharing.md +82 -0
  28. package/skills/cometchat-android-v5-calls/references/server-fcm-voip.md +215 -0
  29. package/skills/cometchat-android-v5-calls/references/session-settings.md +121 -0
  30. package/skills/cometchat-android-v5-calls/references/setup.md +137 -0
  31. package/skills/cometchat-android-v5-calls/references/share-invite.md +151 -0
  32. package/skills/cometchat-android-v5-calls/references/video-controls.md +87 -0
  33. package/skills/cometchat-android-v5-calls/references/voip-calling.md +526 -0
  34. package/skills/cometchat-android-v5-components/SKILL.md +1 -1
  35. package/skills/cometchat-android-v5-core/SKILL.md +1 -1
  36. package/skills/cometchat-android-v5-customization/SKILL.md +1 -1
  37. package/skills/cometchat-android-v5-extensions/SKILL.md +1 -1
  38. package/skills/cometchat-android-v5-features/SKILL.md +1 -1
  39. package/skills/cometchat-android-v5-placement/SKILL.md +1 -1
  40. package/skills/cometchat-android-v5-production/SKILL.md +1 -1
  41. package/skills/cometchat-android-v5-push/SKILL.md +1 -1
  42. package/skills/cometchat-android-v5-testing/SKILL.md +1 -1
  43. package/skills/cometchat-android-v5-theming/SKILL.md +1 -1
  44. package/skills/cometchat-android-v5-troubleshooting/SKILL.md +1 -1
  45. package/skills/cometchat-android-v6/SKILL.md +1 -1
  46. package/skills/cometchat-android-v6-builder-settings/SKILL.md +1 -1
  47. package/skills/cometchat-android-v6-calls/SKILL.md +375 -0
  48. package/skills/cometchat-android-v6-calls/references/add-calls-to-existing-chat.md +97 -0
  49. package/skills/cometchat-android-v6-calls/references/call-layouts.md +91 -0
  50. package/skills/cometchat-android-v6-calls/references/call-session.md +163 -0
  51. package/skills/cometchat-android-v6-calls/references/device-management.md +171 -0
  52. package/skills/cometchat-android-v6-calls/references/group-calls.md +191 -0
  53. package/skills/cometchat-android-v6-calls/references/idle-timeout.md +107 -0
  54. package/skills/cometchat-android-v6-calls/references/in-call-chat.md +136 -0
  55. package/skills/cometchat-android-v6-calls/references/raise-hand.md +186 -0
  56. package/skills/cometchat-android-v6-calls/references/ringing-integration.md +176 -0
  57. package/skills/cometchat-android-v6-calls/references/server-fcm-voip.md +127 -0
  58. package/skills/cometchat-android-v6-calls/references/share-invite.md +105 -0
  59. package/skills/cometchat-android-v6-compose-components/SKILL.md +2 -2
  60. package/skills/cometchat-android-v6-compose-customization/SKILL.md +1 -1
  61. package/skills/cometchat-android-v6-compose-placement/SKILL.md +1 -1
  62. package/skills/cometchat-android-v6-compose-theming/SKILL.md +1 -1
  63. package/skills/cometchat-android-v6-core/SKILL.md +1 -1
  64. package/skills/cometchat-android-v6-events/SKILL.md +1 -1
  65. package/skills/cometchat-android-v6-extensions/SKILL.md +1 -1
  66. package/skills/cometchat-android-v6-features/SKILL.md +1 -1
  67. package/skills/cometchat-android-v6-kotlin-components/SKILL.md +1 -1
  68. package/skills/cometchat-android-v6-kotlin-customization/SKILL.md +1 -1
  69. package/skills/cometchat-android-v6-kotlin-placement/SKILL.md +1 -1
  70. package/skills/cometchat-android-v6-kotlin-theming/SKILL.md +1 -1
  71. package/skills/cometchat-android-v6-migration/SKILL.md +398 -0
  72. package/skills/cometchat-android-v6-production/SKILL.md +1 -1
  73. package/skills/cometchat-android-v6-push/SKILL.md +1 -1
  74. package/skills/cometchat-android-v6-testing/SKILL.md +1 -1
  75. package/skills/cometchat-android-v6-troubleshooting/SKILL.md +1 -1
  76. package/skills/cometchat-angular-calls/SKILL.md +511 -0
  77. package/skills/cometchat-angular-calls/references/add-calls-to-existing-chat.md +95 -0
  78. package/skills/cometchat-angular-calls/references/call-layouts.md +106 -0
  79. package/skills/cometchat-angular-calls/references/call-session.md +167 -0
  80. package/skills/cometchat-angular-calls/references/custom-ui.md +231 -0
  81. package/skills/cometchat-angular-calls/references/device-management.md +135 -0
  82. package/skills/cometchat-angular-calls/references/group-calls.md +412 -0
  83. package/skills/cometchat-angular-calls/references/idle-timeout.md +145 -0
  84. package/skills/cometchat-angular-calls/references/in-call-chat.md +148 -0
  85. package/skills/cometchat-angular-calls/references/lazy-loading-pitfalls.md +205 -0
  86. package/skills/cometchat-angular-calls/references/migration-v4-to-v5.md +53 -0
  87. package/skills/cometchat-angular-calls/references/ngzone-and-async-callbacks.md +183 -0
  88. package/skills/cometchat-angular-calls/references/picture-in-picture.md +285 -0
  89. package/skills/cometchat-angular-calls/references/raise-hand.md +167 -0
  90. package/skills/cometchat-angular-calls/references/recording-screen-share.md +267 -0
  91. package/skills/cometchat-angular-calls/references/ringing-integration.md +131 -0
  92. package/skills/cometchat-angular-calls/references/server-web-push-vapid.md +100 -0
  93. package/skills/cometchat-angular-calls/references/share-invite.md +116 -0
  94. package/skills/cometchat-angular-components/SKILL.md +1 -1
  95. package/skills/cometchat-angular-core/SKILL.md +1 -1
  96. package/skills/cometchat-angular-customization/SKILL.md +1 -1
  97. package/skills/cometchat-angular-features/SKILL.md +1 -1
  98. package/skills/cometchat-angular-patterns/SKILL.md +1 -1
  99. package/skills/cometchat-angular-placement/SKILL.md +1 -1
  100. package/skills/cometchat-angular-production/SKILL.md +1 -1
  101. package/skills/cometchat-angular-push/SKILL.md +403 -0
  102. package/skills/cometchat-angular-testing/SKILL.md +333 -0
  103. package/skills/cometchat-angular-theming/SKILL.md +1 -1
  104. package/skills/cometchat-angular-troubleshooting/SKILL.md +1 -1
  105. package/skills/cometchat-astro-patterns/SKILL.md +1 -1
  106. package/skills/cometchat-calls/SKILL.md +358 -0
  107. package/skills/cometchat-calls/references/use-case-broadcast.md +194 -0
  108. package/skills/cometchat-calls/references/use-case-marketplace.md +158 -0
  109. package/skills/cometchat-calls/references/use-case-support.md +190 -0
  110. package/skills/cometchat-calls/references/use-case-team.md +169 -0
  111. package/skills/cometchat-calls/references/use-case-telehealth.md +154 -0
  112. package/skills/cometchat-components/SKILL.md +1 -1
  113. package/skills/cometchat-core/SKILL.md +1 -1
  114. package/skills/cometchat-customization/SKILL.md +2 -2
  115. package/skills/cometchat-features/SKILL.md +2 -2
  116. package/skills/cometchat-flutter-v5/SKILL.md +1 -1
  117. package/skills/cometchat-flutter-v5-calls/SKILL.md +325 -94
  118. package/skills/cometchat-flutter-v5-calls/references/add-calls-to-existing-chat.md +169 -0
  119. package/skills/cometchat-flutter-v5-calls/references/call-layouts.md +98 -0
  120. package/skills/cometchat-flutter-v5-calls/references/call-session.md +330 -0
  121. package/skills/cometchat-flutter-v5-calls/references/device-management.md +120 -0
  122. package/skills/cometchat-flutter-v5-calls/references/group-calls.md +187 -0
  123. package/skills/cometchat-flutter-v5-calls/references/idle-timeout.md +97 -0
  124. package/skills/cometchat-flutter-v5-calls/references/in-call-chat.md +132 -0
  125. package/skills/cometchat-flutter-v5-calls/references/migration-v4-to-v5.md +160 -0
  126. package/skills/cometchat-flutter-v5-calls/references/raise-hand.md +244 -0
  127. package/skills/cometchat-flutter-v5-calls/references/ringing-integration.md +193 -0
  128. package/skills/cometchat-flutter-v5-calls/references/server-push-bridge.md +101 -0
  129. package/skills/cometchat-flutter-v5-calls/references/share-invite.md +142 -0
  130. package/skills/cometchat-flutter-v5-conversations/SKILL.md +1 -1
  131. package/skills/cometchat-flutter-v5-core/SKILL.md +1 -1
  132. package/skills/cometchat-flutter-v5-customization/SKILL.md +1 -1
  133. package/skills/cometchat-flutter-v5-events/SKILL.md +1 -1
  134. package/skills/cometchat-flutter-v5-messages/SKILL.md +1 -1
  135. package/skills/cometchat-flutter-v5-production/SKILL.md +1 -1
  136. package/skills/cometchat-flutter-v5-push/SKILL.md +1 -1
  137. package/skills/cometchat-flutter-v5-testing/SKILL.md +390 -0
  138. package/skills/cometchat-flutter-v5-theming/SKILL.md +1 -1
  139. package/skills/cometchat-flutter-v5-troubleshooting/SKILL.md +1 -1
  140. package/skills/cometchat-flutter-v5-users-groups/SKILL.md +1 -1
  141. package/skills/cometchat-flutter-v6/SKILL.md +1 -1
  142. package/skills/cometchat-flutter-v6-calls/SKILL.md +308 -243
  143. package/skills/cometchat-flutter-v6-calls/references/add-calls-to-existing-chat.md +134 -0
  144. package/skills/cometchat-flutter-v6-calls/references/call-layouts.md +102 -0
  145. package/skills/cometchat-flutter-v6-calls/references/call-session.md +229 -0
  146. package/skills/cometchat-flutter-v6-calls/references/device-management.md +99 -0
  147. package/skills/cometchat-flutter-v6-calls/references/group-calls.md +190 -0
  148. package/skills/cometchat-flutter-v6-calls/references/idle-timeout.md +80 -0
  149. package/skills/cometchat-flutter-v6-calls/references/in-call-chat.md +122 -0
  150. package/skills/cometchat-flutter-v6-calls/references/raise-hand.md +268 -0
  151. package/skills/cometchat-flutter-v6-calls/references/ringing-integration.md +171 -0
  152. package/skills/cometchat-flutter-v6-calls/references/server-push-bridge.md +93 -0
  153. package/skills/cometchat-flutter-v6-calls/references/share-invite.md +102 -0
  154. package/skills/cometchat-flutter-v6-components/SKILL.md +1 -1
  155. package/skills/cometchat-flutter-v6-conversations/SKILL.md +1 -1
  156. package/skills/cometchat-flutter-v6-core/SKILL.md +1 -1
  157. package/skills/cometchat-flutter-v6-customization/SKILL.md +1 -1
  158. package/skills/cometchat-flutter-v6-events/SKILL.md +1 -1
  159. package/skills/cometchat-flutter-v6-features/SKILL.md +1 -1
  160. package/skills/cometchat-flutter-v6-messages/SKILL.md +1 -1
  161. package/skills/cometchat-flutter-v6-migration/SKILL.md +1 -1
  162. package/skills/cometchat-flutter-v6-placement/SKILL.md +1 -1
  163. package/skills/cometchat-flutter-v6-production/SKILL.md +1 -1
  164. package/skills/cometchat-flutter-v6-push/SKILL.md +452 -0
  165. package/skills/cometchat-flutter-v6-testing/SKILL.md +319 -0
  166. package/skills/cometchat-flutter-v6-theming/SKILL.md +1 -1
  167. package/skills/cometchat-flutter-v6-troubleshooting/SKILL.md +1 -1
  168. package/skills/cometchat-flutter-v6-users-groups/SKILL.md +1 -1
  169. package/skills/cometchat-i18n/SKILL.md +358 -0
  170. package/skills/cometchat-ios/SKILL.md +5 -5
  171. package/skills/cometchat-ios-calls/SKILL.md +409 -0
  172. package/skills/cometchat-ios-calls/references/add-calls-to-existing-chat.md +172 -0
  173. package/skills/cometchat-ios-calls/references/avaudiosession-routing.md +189 -0
  174. package/skills/cometchat-ios-calls/references/call-layouts.md +136 -0
  175. package/skills/cometchat-ios-calls/references/call-session.md +221 -0
  176. package/skills/cometchat-ios-calls/references/callkit-and-pushkit.md +353 -0
  177. package/skills/cometchat-ios-calls/references/custom-ui.md +322 -0
  178. package/skills/cometchat-ios-calls/references/device-management.md +171 -0
  179. package/skills/cometchat-ios-calls/references/group-calls.md +396 -0
  180. package/skills/cometchat-ios-calls/references/idle-timeout.md +185 -0
  181. package/skills/cometchat-ios-calls/references/in-call-chat.md +183 -0
  182. package/skills/cometchat-ios-calls/references/migration-v4-to-v5.md +138 -0
  183. package/skills/cometchat-ios-calls/references/picture-in-picture.md +246 -0
  184. package/skills/cometchat-ios-calls/references/raise-hand.md +239 -0
  185. package/skills/cometchat-ios-calls/references/recording-screen-share.md +339 -0
  186. package/skills/cometchat-ios-calls/references/ringing-integration.md +142 -0
  187. package/skills/cometchat-ios-calls/references/server-apns-pushkit.md +267 -0
  188. package/skills/cometchat-ios-calls/references/share-invite.md +152 -0
  189. package/skills/cometchat-ios-calls/references/swiftui-uikit-hosting.md +246 -0
  190. package/skills/cometchat-ios-calls/references/voip-cert-setup.md +166 -0
  191. package/skills/cometchat-ios-components/SKILL.md +1 -1
  192. package/skills/cometchat-ios-core/SKILL.md +1 -1
  193. package/skills/cometchat-ios-customization/SKILL.md +1 -1
  194. package/skills/cometchat-ios-features/SKILL.md +1 -1
  195. package/skills/cometchat-ios-placement/SKILL.md +1 -1
  196. package/skills/cometchat-ios-production/SKILL.md +1 -1
  197. package/skills/cometchat-ios-push/SKILL.md +1 -1
  198. package/skills/cometchat-ios-testing/SKILL.md +371 -0
  199. package/skills/cometchat-ios-theming/SKILL.md +1 -1
  200. package/skills/cometchat-ios-troubleshooting/SKILL.md +1 -1
  201. package/skills/cometchat-native-bare-patterns/SKILL.md +45 -3
  202. package/skills/cometchat-native-calls/SKILL.md +599 -0
  203. package/skills/cometchat-native-calls/references/add-calls-to-existing-chat.md +203 -0
  204. package/skills/cometchat-native-calls/references/call-layouts.md +124 -0
  205. package/skills/cometchat-native-calls/references/call-session.md +182 -0
  206. package/skills/cometchat-native-calls/references/custom-ui.md +250 -0
  207. package/skills/cometchat-native-calls/references/device-management.md +135 -0
  208. package/skills/cometchat-native-calls/references/expo-vs-bare.md +179 -0
  209. package/skills/cometchat-native-calls/references/group-calls.md +291 -0
  210. package/skills/cometchat-native-calls/references/idle-timeout.md +128 -0
  211. package/skills/cometchat-native-calls/references/in-call-chat.md +143 -0
  212. package/skills/cometchat-native-calls/references/migration-v4-to-v5.md +72 -0
  213. package/skills/cometchat-native-calls/references/picture-in-picture.md +276 -0
  214. package/skills/cometchat-native-calls/references/raise-hand.md +203 -0
  215. package/skills/cometchat-native-calls/references/recording-screen-share.md +290 -0
  216. package/skills/cometchat-native-calls/references/ringing-integration.md +118 -0
  217. package/skills/cometchat-native-calls/references/server-push-bridge.md +135 -0
  218. package/skills/cometchat-native-calls/references/server-push-payloads.md +193 -0
  219. package/skills/cometchat-native-calls/references/share-invite.md +144 -0
  220. package/skills/cometchat-native-calls/references/voip-push-end-to-end.md +317 -0
  221. package/skills/cometchat-native-components/SKILL.md +1 -1
  222. package/skills/cometchat-native-core/SKILL.md +1 -1
  223. package/skills/cometchat-native-customization/SKILL.md +1 -1
  224. package/skills/cometchat-native-expo-patterns/SKILL.md +18 -1
  225. package/skills/cometchat-native-features/SKILL.md +1 -1
  226. package/skills/cometchat-native-placement/SKILL.md +1 -1
  227. package/skills/cometchat-native-production/SKILL.md +1 -1
  228. package/skills/cometchat-native-push/SKILL.md +1 -1
  229. package/skills/cometchat-native-testing/SKILL.md +1 -1
  230. package/skills/cometchat-native-theming/SKILL.md +1 -1
  231. package/skills/cometchat-native-troubleshooting/SKILL.md +1 -1
  232. package/skills/cometchat-nextjs-patterns/SKILL.md +1 -1
  233. package/skills/cometchat-placement/SKILL.md +29 -1
  234. package/skills/cometchat-production/SKILL.md +1 -1
  235. package/skills/cometchat-react-calls/SKILL.md +539 -0
  236. package/skills/cometchat-react-calls/references/add-calls-to-existing-chat.md +145 -0
  237. package/skills/cometchat-react-calls/references/call-layouts.md +161 -0
  238. package/skills/cometchat-react-calls/references/call-session.md +235 -0
  239. package/skills/cometchat-react-calls/references/custom-ui.md +201 -0
  240. package/skills/cometchat-react-calls/references/device-management.md +206 -0
  241. package/skills/cometchat-react-calls/references/group-calls.md +262 -0
  242. package/skills/cometchat-react-calls/references/idle-timeout.md +175 -0
  243. package/skills/cometchat-react-calls/references/in-call-chat.md +212 -0
  244. package/skills/cometchat-react-calls/references/migration-v4-to-v5.md +172 -0
  245. package/skills/cometchat-react-calls/references/picture-in-picture.md +245 -0
  246. package/skills/cometchat-react-calls/references/raise-hand.md +238 -0
  247. package/skills/cometchat-react-calls/references/recording-screen-share.md +143 -0
  248. package/skills/cometchat-react-calls/references/ringing-integration.md +255 -0
  249. package/skills/cometchat-react-calls/references/server-web-push-vapid.md +241 -0
  250. package/skills/cometchat-react-calls/references/share-invite.md +176 -0
  251. package/skills/cometchat-react-calls/references/testing-calls-on-web.md +198 -0
  252. package/skills/cometchat-react-calls/references/voip-and-web-push.md +165 -0
  253. package/skills/cometchat-react-patterns/SKILL.md +56 -8
  254. package/skills/cometchat-react-push/SKILL.md +448 -0
  255. package/skills/cometchat-react-router-patterns/SKILL.md +1 -1
  256. package/skills/cometchat-react-testing/SKILL.md +404 -0
  257. package/skills/cometchat-theming/SKILL.md +3 -3
  258. package/skills/cometchat-troubleshooting/SKILL.md +2 -2
@@ -2,7 +2,7 @@
2
2
  name: cometchat
3
3
  description: Entry-point for CometChat integration in any React, React Native, Angular, Android, Flutter, or iOS project — web (React/Next.js/React Router/Astro), React Native (Expo/bare), Angular (12-15), native Android (V5 stable, V6 beta), Flutter (V5 stable, V6 beta), and native iOS (V5 stable). Detects the framework, gathers requirements through an interactive conversation, and writes production-quality integration code.
4
4
  license: "MIT"
5
- allowed-tools: "executeBash, readFile, fileSearch, listDirectory, AskUserQuestion"
5
+ allowed-tools: "shell, file-read, file-search, file-list, ask-user"
6
6
  metadata:
7
7
  author: "CometChat"
8
8
  version: "3.0.0"
@@ -13,7 +13,7 @@ metadata:
13
13
 
14
14
  The user wants to add CometChat to any kind of project. Trigger phrases:
15
15
 
16
- - `/cometchat`
16
+ - `/cometchat` (or invoke the cometchat skill via your agent's mechanism — keyword "cometchat" or "integrate chat" works in most agents)
17
17
  - "add cometchat", "integrate cometchat", "add chat to my app"
18
18
  - "add messaging", "add chat ui", "add in-app chat"
19
19
 
@@ -41,7 +41,7 @@ the framework and dump code. You have a conversation with the developer
41
41
  to understand their project, their use case, and exactly where chat
42
42
  should go — THEN you write code that fits.
43
43
 
44
- Pattern skills (loaded from your context, not via `Skill()`):
44
+ Pattern skills (loaded from your context as plain files — not via your agent's skill-loading mechanism):
45
45
  - `cometchat-core` (web) / `cometchat-native-core` (RN) / `cometchat-angular-core` (Angular) / `cometchat-android-{v5,v6}-core` (Android) / `cometchat-flutter-{v5,v6}-core` (Flutter) — init, login, provider chain, env vars, anti-patterns
46
46
  - `cometchat-components` (web) / `cometchat-native-components` (RN) / `cometchat-angular-components` (Angular) / `cometchat-android-v5-components` or `cometchat-android-v6-{compose,kotlin}-components` (Android) / `cometchat-flutter-v6-components` (V6 only — V5 splits into `-conversations`/`-messages`/`-users-groups`) — component catalog, props, composition
47
47
  - `cometchat-placement` (web) / `cometchat-native-placement` (RN) / `cometchat-angular-placement` (Angular) / `cometchat-android-v5-placement` or `cometchat-android-v6-{compose,kotlin}-placement` (Android) / `cometchat-flutter-v6-placement` (V6 only) — WHERE to put chat
@@ -74,14 +74,14 @@ The JSON output includes `framework` (one of `reactjs`, `nextjs`, `react-router`
74
74
 
75
75
  **Android — `android_version` is load-bearing.** When `framework === "android"`, the detect output includes `android_version: "v5" | "v6" | null`. The cohort selects which V5 or V6 pattern set to load — V5 (live, `chat-uikit-android:5.x`, Java + Kotlin Views) and V6 (beta, `chatuikit-{compose,kotlin}-android:6.x`) are different SDKs with different APIs. Treat them as separate routing targets even though both live under `--family android`.
76
76
 
77
- If `android_version` is `null`, the project is greenfield (no cometchat dep yet). Ask the user via `AskUserQuestion`:
77
+ If `android_version` is `null`, the project is greenfield (no cometchat dep yet). Ask the user:
78
78
  > "Which CometChat Android UI Kit do you want to use? V5 is the live SDK (recommended for production today). V6 is beta (Compose + Kotlin Views split, future-facing)."
79
79
 
80
80
  Save the choice into `.cometchat/config.json` under `android_version` so subsequent `/cometchat` runs don't re-ask.
81
81
 
82
82
  **Flutter — `flutter_version` is load-bearing too.** When `framework === "flutter"`, the detect output includes `flutter_version: "v5" | "v6" | null`. V5 is GetX-based (`cometchat_chat_uikit:^5.2`); V6 is Bloc-based (`cometchat_chat_uikit:^6.0.0-beta2`). The two cohorts have different state-management primitives, different barrel exports, and different theme APIs — never mix them. Same `--family flutter` install ships both sets; routing picks the right one.
83
83
 
84
- If `flutter_version` is `null`, ask via `AskUserQuestion`:
84
+ If `flutter_version` is `null`, ask the user:
85
85
  > "Which CometChat Flutter UI Kit do you want to use? V5 is the live SDK (GetX-based, recommended for production today). V6 is beta (Bloc-based, future-facing)."
86
86
 
87
87
  Save the choice into `.cometchat/config.json` under `flutter_version`.
@@ -141,6 +141,55 @@ Save the choice into `.cometchat/config.json` under `flutter_version`.
141
141
 
142
142
  Store this mental map — you'll use it throughout the conversation.
143
143
 
144
+ #### Then show the user what you found — Step 1.5 (the "I see you" moment)
145
+
146
+ This is the most important moment of the whole flow. After running detection + reading the project, narrate what you found in **3–5 specific, observation-grounded bullets** BEFORE asking any question. The user should feel that you understand their project before deciding whether to trust you with it.
147
+
148
+ The shape (use it verbatim — the structure earns trust):
149
+
150
+ > Taking a look at your project...
151
+ >
152
+ > - **{Framework} + {Build tool} {version}** {with TypeScript / JavaScript / etc., as detected}
153
+ > - **{Router or nav state}** — {one observation about how routing is set up, or "no router yet" for greenfield}
154
+ > - **{Auth system status}** — {"NextAuth detected → I'll wire token-based login", or "no auth detected → I'll start with dev mode + a test user; you can upgrade later"}
155
+ > - **{Existing CometChat state}** — {"existing `cometchat/` folder with X — I'll patch around it", or "fresh start — no prior CometChat code"}
156
+ > - **{One personal observation}** — {something specific you noticed: "Tailwind classes throughout", "shadcn/ui components", "monorepo with apps/* and packages/*"}
157
+ >
158
+ > Ready to set this up? I'll walk you through account setup, then ask where chat should live.
159
+
160
+ **The rules for this moment:**
161
+
162
+ 1. **Be specific, not generic.** "Vite + React 19 + TypeScript" beats "a React project." Read the actual versions from `package.json`.
163
+ 2. **Five bullets max.** Beyond five, it stops feeling observational and starts feeling like a recital. Cut to what's *interesting* about the project.
164
+ 3. **Lead with what's load-bearing.** Framework + version, router, auth, existing CometChat, then one personal touch. The personal touch is what makes it land — show you actually looked.
165
+ 4. **Skip the bullet if there's nothing to say.** No router on greenfield → say "no router yet"; don't invent one. No auth → say "no auth detected"; don't list every package you didn't find.
166
+ 5. **End with a single confident question.** Not five questions. The flow continues into Step 2 (credentials) or Step 3 (placement) — let the next step ask.
167
+
168
+ **Examples of good vs bad bullets:**
169
+
170
+ | ✓ Good (specific, observational) | ✗ Bad (generic, unfounded) |
171
+ |---|---|
172
+ | "Vite + React 19 + TypeScript, Tailwind for styling" | "A React project with TypeScript" |
173
+ | "React Router v7 detected (`routes.ts` + `react-router.config.ts`)" | "Some routing is configured" |
174
+ | "NextAuth in `auth.config.ts` — I'll mint CometChat tokens server-side via your existing session cookie" | "Authentication is set up" |
175
+ | "shadcn/ui detected (`components/ui/*`) — I'll use your existing Button + Dialog primitives in the chat trigger" | "Some UI components are present" |
176
+ | "Monorepo: `apps/web` is your dashboard, `apps/marketing` is the public site — I'll integrate into apps/web" | "This is a monorepo" |
177
+
178
+ **For greenfield projects (the test case):**
179
+
180
+ > Taking a look at your project...
181
+ >
182
+ > - **Vite + React 19 + TypeScript** — fresh `cometchat-test-app` scaffold
183
+ > - **No router yet** — for the demo, chat will mount in `src/App.tsx` directly; we can move it to a route later
184
+ > - **No auth system detected** — I'll set you up in dev mode with a pre-seeded test user (`cometchat-uid-1`); production auth is a one-flag upgrade later
185
+ > - **Fresh start** — no existing CometChat code to patch around
186
+ >
187
+ > Ready to set this up? I'll get you a CometChat account first, then ask where chat should live.
188
+
189
+ This moment costs ~5 seconds of conversation but anchors the rest. Skip it and the user feels like they're talking to a script. Run it well and the rest of the flow feels effortless.
190
+
191
+ ---
192
+
144
193
  **Compatibility baselines (the CLI enforces these):**
145
194
  - Web: react@<18 → upgrade required; nextjs@<13 → warning; astro@<4 → warning
146
195
  - RN: react-native@<0.70 → upgrade required; expo@<49 → upgrade required
@@ -160,15 +209,17 @@ To check whether the pattern skills are loaded, attempt to read `cometchat-core/
160
209
  **If `framework` is `expo` or `react-native` AND `cometchat-native-core` is NOT loaded:**
161
210
 
162
211
  ```bash
163
- npx @cometchat/skills-native add
212
+ npx @cometchat/skills add --family native
164
213
  ```
165
214
 
166
215
  **If `framework` is `reactjs`, `nextjs`, `react-router`, or `astro` AND `cometchat-core` is NOT loaded:**
167
216
 
168
217
  ```bash
169
- npx @cometchat/skills add
218
+ npx @cometchat/skills add --family web
170
219
  ```
171
220
 
221
+ > **Important — `--family <name>` is non-negotiable.** Without the family flag, `npx @cometchat/skills add` (default) installs only the cross-family base skills (cometchat dispatcher + i18n + a11y + calls dispatcher). It does NOT install `cometchat-core`, `cometchat-react-patterns`, `cometchat-placement`, etc. — the framework-specific skills with the actual integration patterns. Running base-only twice doesn't load the missing skills; only `--family <name>` does. Skipping the flag here causes the agent to write integration code from training memory instead of from the framework-specific skills, which produces real bugs (e.g. the `minHeight: 0` flex-shrink trap in `cometchat-react-patterns` rule 6a — only in that skill).
222
+
172
223
  **If `framework` is `angular` AND `cometchat-angular-core` is NOT loaded:**
173
224
 
174
225
  ```bash
@@ -203,7 +254,7 @@ After the install completes, tell the user:
203
254
 
204
255
  > "I just installed the {family} pattern skills into your workspace. Please re-run `/cometchat` to continue — your config is saved in `.cometchat/config.json` and credentials in `.env`, so the next run picks up at code generation without re-asking the questions you've already answered."
205
256
 
206
- **Why re-run rather than continue in this session:** Claude Code (and most coding agents) snapshot the skill set at session start and do NOT hot-reload SKILL.md mid-session. Even though the install writes the new skill files into `.claude/skills/`, your in-context skill set is the snapshot. Continuing would mean writing code from training memory — which the skills explicitly forbid (this is the same failure mode that produced the `UIKitSettingsBuilder` and `getLoggedinUser` casing bugs at v2.2.0). The re-run is the only safe path.
257
+ **Why re-run rather than continue in this session:** Claude Code, Cursor, Cline, Kiro, and other modern AI coding agents snapshot the skill set at session start and do NOT hot-reload SKILL.md mid-session. Even though the install writes the new skill files into `.claude/skills/` (or `.cursor/skills/` / `.kiro/skills/` / `.agents/skills/` — your agent's skills dir), your in-context skill set is the snapshot. Continuing would mean writing code from training memory — which the skills explicitly forbid (this is the same failure mode that produced the `UIKitSettingsBuilder` and `getLoggedinUser` casing bugs at v2.2.0). The re-run is the only safe path.
207
258
 
208
259
  **Non-default IDE — pass `--ide`.** The default installer target is `claude` (`.claude/skills/`). If the dispatcher's own SKILL.md was loaded from a different location, pass the matching flag:
209
260
 
@@ -225,6 +276,21 @@ to a browser or dashboard for credential copy-pasting. The CLI handles
225
276
  signup, login, app creation, and credential writing — all from the
226
277
  terminal — for every framework.**
227
278
 
279
+ #### Hard rule — signup flows MUST ask, not infer
280
+
281
+ **For Sign-Up paths specifically (Step 2b → 2b.5 → 2b.6 → 2c), the following structured prompts are NON-NEGOTIABLE and MUST be rendered via `AskUserQuestion`:**
282
+
283
+ | Prompt | When | Skipped only if |
284
+ |---|---|---|
285
+ | **Role** (Step 2b.6) | After `auth me` if `meta.role === null` | `auth me` returned a non-null role |
286
+ | **Intent** (Step 2b.6) | After `auth me` if `meta.intent === null` | `auth me` returned a non-null intent |
287
+ | **App name** (Step 2c) | Before `provision setup` | NEVER — even if a suggested default exists, user must explicitly confirm |
288
+ | **Region** (Step 2c) | Before `provision setup` | `last_app.region` exists AND user accepted the "use same region?" confirmation |
289
+ | **Industry** (Step 2c) | Before `provision setup` | `last_app.industry` exists AND user accepted the "same industry?" confirmation |
290
+ | **Product** (Step 3.0 Tier 3) | After Step 2c if Tier 1 (`auth me last_app.product`) AND Tier 2 (natural-language inference from slash-command + prior turn) both returned null | Tier 1 OR Tier 2 resolved a non-null value |
291
+
292
+ **Auto-mode classifiers do NOT authorize bypassing these prompts.** "Allowed by auto mode classifier" applies to Bash/tool approvals — it does NOT apply to structured user prompts. The agent must surface each prompt regardless of approval mode. Rationalizations like "fresh test scaffold = just exploring, skip the prompt" or "moving forward without stops for the demo" are **explicit spec violations** — the dashboard's `/select-product` + `/create-app` + `/choose-role` + `/choose-intent` flows ask these in the browser; the CLI flow MUST ask them in the terminal for parity. Skipping them silently picks defaults that affect downstream Step 3a (intent → archetype) and Step 3b.1 (industry → recommendation upsells) — the user can't correct values they never saw asked.
293
+
228
294
  If config has `appId` set, verify credentials are in `.env` and skip to Step 3.
229
295
 
230
296
  Otherwise check:
@@ -236,7 +302,7 @@ If `status` is `"logged-in"`, skip to **Step 2b.5** (fetch dashboard profile).
236
302
 
237
303
  If `status` is `"logged-out"`, ask:
238
304
 
239
- Use `AskUserQuestion`:
305
+ Ask the user (preserve this exact shape — `question`, `header`, `multiSelect`, `options[].label`, `options[].description` — agents have varying primitive names but they all support this structured form):
240
306
  - **question:** "Let's set up CometChat. Do you have an account?"
241
307
  - **header:** "Account"
242
308
  - **multiSelect:** false
@@ -311,7 +377,7 @@ Response shape:
311
377
  "region": "us",
312
378
  "industry": "online_marketplaces",
313
379
  "technology": "react",
314
- "product": "support"
380
+ "product": "chat-messaging"
315
381
  }
316
382
  }
317
383
  ```
@@ -321,11 +387,27 @@ Field meanings (from the dashboard's signup screens — see `/Users/swapnil/Down
321
387
  - `role`: `"frontend"` / `"backend"` / `"fullstack_engineer"` / `"startup_founder"` / `"product_leader/manager"` / `"engineering_leader/manager"` / `"others"` (when `others`, `other_role` carries the freeform value)
322
388
  - `intent`: `"building"` / `"evaluating"` / `"exploring"` (this is the **dashboard's** intent — distinct from Step 3a's `placement_intent` which asks about app archetype)
323
389
  - `last_app`: most-recently-created app on the user's account (or `null` if they have none). The dashboard's `/create-app` and `/select-product` screens write `industry`, `technology`, `product` into the app's `metadata` — we surface them here so Step 2c can pre-fill region/industry instead of asking again.
390
+ - `last_app.product`: the surface the user picked on the dashboard's `/select-product` screen — `"chat-messaging"` / `"voice-video"` / `"ai-agent"` / `"byo-agent"` / `null`. **Load-bearing for Step 3.0** — it decides which dispatcher (chat or calls) handles the integration. `chat-messaging` runs the existing chat flow; `voice-video` hands off to `cometchat-calls`; `ai-agent` and `byo-agent` are out of scope for `/cometchat` today and point at the AI Agents docs.
391
+
392
+ > **Dashboard ↔ canonical mapping** (load-bearing — wired in `cometchat-api.ts:listApps`):
393
+ >
394
+ > | Dashboard `metadata.features` | Canonical `last_app.product` |
395
+ > |---|---|
396
+ > | `chat` | `chat-messaging` |
397
+ > | `calling` | `voice-video` |
398
+ > | `aiAgent` | `ai-agent` |
399
+ > | `byo-agent` | `byo-agent` |
400
+ >
401
+ > The dashboard's `/select-product` is **single-select** and writes `metadata.features = "<dashboard-key>"`; the CLI maps it to canonical at the API boundary so downstream code only sees canonical values. If dashboard sends an unknown key (e.g. `moderation`), `product` is left `undefined` and Step 3.0 infers from natural language or asks at routing time.
402
+ >
403
+ > The combined value `chat-messaging+voice-video` is **CLI-only** — surfaced in Step 3.0's prompt as "Both Chat and Calling" when inference can't tell. The dashboard picker doesn't expose "Both" today.
324
404
 
325
405
  **Store the response in working memory.** Reference these fields downstream:
326
406
 
327
407
  - **Step 2c (new app):** if `last_app` is non-null, default `--region` and `--industry` to the values from `last_app` and only ask the user to confirm — do NOT re-prompt from scratch.
408
+ - **Step 3.0 (product branch):** route by `last_app.product`. `chat-messaging` continues into Step 3a; `voice-video` short-circuits to the `cometchat-calls` dispatcher; `ai-agent` and `byo-agent` exit with a docs pointer.
328
409
  - **Step 3a:** if `meta.intent === "exploring"`, skip the placement-intent question and route straight to the "Just exploring" branch (one route/screen with `<CometChatConversations />` and `cometchat-uid-1` pre-logged-in).
410
+ - **Step 3b.1 (industry tailoring):** use `last_app.industry` to layer industry-specific upsells onto the placement recommendation — moderation features for dating apps, HIPAA-aware production patterns for healthcare, link-preview for marketplaces, etc. Augment, don't replace.
329
411
  - **Step 5 explanations:** if `meta.role === "frontend"`, lead with concrete component composition + CSS examples; if `meta.role === "engineering_leader/manager"`, lead with placement architecture trade-offs (where state lives, what gets cached, how routing fits the project's pattern).
330
412
  - **Greeting:** if `meta.name` is non-null, greet by name in any user-facing message during the rest of the flow ("Got it, Swapnil — let's pick an app").
331
413
 
@@ -337,6 +419,7 @@ Field meanings (from the dashboard's signup screens — see `/Users/swapnil/Down
337
419
  - `name` is `null` → no greeting (don't ask, the dashboard will collect it on next browser visit).
338
420
  - `role` is `null` → **ask in Step 2b.6** (this is the case for accounts that signed up via `auth signup` from the CLI — they never saw the dashboard's `/choose-role` screen).
339
421
  - `intent` is `null` → **ask in Step 2b.6**.
422
+ - `last_app.product` is `null` (or `last_app` itself is `null`) → **resolved in Step 3.0** via natural-language inference, falling back to a prompt only if ambiguous. Do NOT ask product upfront in Step 2b.6 — the dashboard's `/select-product` is a structured form because a UI can't read intent; the agent flow can.
340
423
  - `last_app` is `null` → ask region/industry normally in Step 2c.
341
424
 
342
425
  After this step, proceed to **Step 2b.6**.
@@ -348,11 +431,13 @@ The dashboard's `/choose-role` and `/choose-intent` screens collect two profile
348
431
  - `role` shapes the depth and angle of code explanations in Step 5
349
432
  - `intent` decides whether Step 3a's placement question is needed (`exploring` short-circuits to a single screen)
350
433
 
434
+ (`product` is resolved separately in **Step 3.0** via natural-language inference + lazy ask — not here.)
435
+
351
436
  If `auth me` returned non-null values for both, **skip this step entirely** and go to Step 2c — the dashboard already collected them, do not re-ask.
352
437
 
353
- If either is `null` (typical for accounts created via `cometchat auth signup` rather than the dashboard browser flow), ask the user. The options below mirror the dashboard exactly so that anyone who later visits the dashboard sees consistent terminology.
438
+ If either is `null` (typical for accounts created via `cometchat auth signup` rather than the dashboard browser flow), ask the user. The options below mirror the dashboard exactly so anyone who later visits the dashboard sees consistent terminology.
354
439
 
355
- **If `role === null`** — `AskUserQuestion`:
440
+ **If `role === null`** — ask the user (preserve the structured shape — `question`/`header`/`multiSelect`/`options[].label`/`options[].description` — agents have varying primitive names but all support this form):
356
441
  - **question:** "What's your role? (We'll tailor explanations to match.)"
357
442
  - **header:** "Role"
358
443
  - **multiSelect:** false
@@ -368,9 +453,9 @@ If either is `null` (typical for accounts created via `cometchat auth signup` ra
368
453
  | Engineering Manager | `engineering_leader/manager` |
369
454
  | Other | `others` |
370
455
 
371
- If the user picks **Other**, follow up with a free-form `AskUserQuestion` for `other_role` (single short text field; store the freeform value in `other_role`).
456
+ If the user picks **Other**, follow up with a free-form question for `other_role` (single short text field; store the freeform value in `other_role`).
372
457
 
373
- **If `intent === null`** — `AskUserQuestion`:
458
+ **If `intent === null`** — ask the user (preserve the structured shape):
374
459
  - **question:** "What brings you to CometChat?"
375
460
  - **header:** "Intent"
376
461
  - **multiSelect:** false
@@ -382,7 +467,13 @@ If either is `null` (typical for accounts created via `cometchat auth signup` ra
382
467
  | I'm evaluating | Comparing options for my team. | `evaluating` |
383
468
  | I'm exploring | Just looking around for now. | `exploring` |
384
469
 
385
- **Store the answers in working memory under the same keys** (`role`, `other_role`, `intent`) as if they had come from `auth me`. Downstream steps (3a + 5) treat dashboard-supplied and CLI-collected values identically.
470
+ **Do NOT ask for `product` in this step.** The dashboard's `/select-product` is a structured form because a UI can't read intent; the CLI/agent flow is conversational and the user has often already said what they want. Asking upfront ("Chat & Messaging? Voice & Video? Both?") is friction the dashboard has but the agent doesn't need.
471
+
472
+ The product decision happens in **Step 3.0** (Branch by product), where it actually matters for routing. Step 3.0 first tries to infer from the user's slash-command args and prior turn, and only falls back to a prompt if it can't tell. By then the agent has more context (the framework is detected, credentials are set up, the user has shared more about their goal), so inference works better than upfront.
473
+
474
+ This step (Step 2b.6) is for `role` + `intent` only — those are profile fields the dashboard collected upfront, so we collect them here too if they're missing.
475
+
476
+ **Store the answers in working memory under the same keys** (`role`, `other_role`, `intent`, `product`) as if they had come from `auth me`. Downstream steps (3.0 + 3a + 5) treat dashboard-supplied and CLI-collected values identically.
386
477
 
387
478
  > **Note:** These answers are not yet persisted back to the dashboard `/me` endpoint — they only live for the current session. A follow-up will add a `cometchat auth me --update` mode that PATCHes them server-side so the next session won't re-ask. Until then, the user may be asked again in a fresh session.
388
479
 
@@ -410,9 +501,14 @@ npx @cometchat/skills-cli provision setup \
410
501
 
411
502
  This creates/updates the env file with the correct prefix AND writes `.cometchat/config.json` in one step. Output is compact: `{ appId, region, framework, envFile, configPath }` — no authKey echoed back.
412
503
 
413
- **If no apps exist** (or user wants new), collect:
414
- 1. App name — suggest `<project-name>-chat` from package.json `name`
415
- 2. Region **if Step 2b.5 returned `last_app.region`**, default to that value and ask only `"Use the same region as your <last_app.name> app (<region>)? [Y/n]"`. Otherwise `AskUserQuestion`:
504
+ **If no apps exist** (or user wants new), collect via **structured `AskUserQuestion` prompts — NON-NEGOTIABLE.** Do NOT silently default app name / region / industry on signup flows. The agent must surface each prompt and let the user pick. Auto-mode does NOT authorize bypassing these — they're load-bearing for the rest of the integration (`industry` drives Step 3b.1 recommendations downstream).
505
+
506
+ 1. **App name** SUGGEST `<project-name>-chat` from package.json `name`, then **ask the user to confirm or override** (preserve the structured shape):
507
+ - **question:** "What should we name your CometChat app?"
508
+ - **header:** "App name"
509
+ - Pre-filled default: `<project-name>-chat`. User must explicitly accept or change before the CLI runs `provision setup`.
510
+
511
+ 2. **Region** — **if Step 2b.5 returned `last_app.region`**, default to that value and ask only `"Use the same region as your <last_app.name> app (<region>)? [Y/n]"`. Otherwise **MUST ask** via structured prompt:
416
512
  - **question:** "Which region for your CometChat app?"
417
513
  - **header:** "Region"
418
514
  - **options:** US (recommended), EU, India
@@ -423,8 +519,11 @@ This creates/updates the env file with the correct prefix AND writes `.cometchat
423
519
  | US | `us` |
424
520
  | EU | `eu` |
425
521
  | India | `in` |
426
- 3. Industry — **if Step 2b.5 returned `last_app.industry`**, default to that value and ask only `"Same industry as your previous app (<industry>)? [Y/n]"`. Otherwise `AskUserQuestion`:
427
- - **options:** SaaS / Business, Marketplace, Social / Community, Other (or finer-grained from the table below)
522
+
523
+ 3. **Industry** **if Step 2b.5 returned `last_app.industry`**, default to that value and ask only `"Same industry as your previous app (<industry>)? [Y/n]"`. Otherwise **MUST ask** via structured prompt:
524
+ - **question:** "What industry is your app in? (Drives industry-specific recommendations downstream.)"
525
+ - **header:** "Industry"
526
+ - **options** — full 11-option set (see table below); do NOT pick a default like `saas_businesses` without asking
428
527
 
429
528
  **Industry key mapping:**
430
529
 
@@ -592,13 +691,58 @@ After writing credentials, don't echo the Auth Key back in the transcript. Confi
592
691
 
593
692
  This is the core of v3. A multi-step conversation that gathers everything you need before writing a single line of code.
594
693
 
694
+ #### 3.0. Branch by product (chat vs calls)
695
+
696
+ `product` decides which dispatcher (chat or calls) handles the rest of Step 3. Resolve it in this priority order:
697
+
698
+ **1. Use `last_app.product` if non-null** — set by the dashboard's `/select-product` screen. Trust it.
699
+
700
+ **2. Otherwise, infer from the user's slash-command args + prior turn.** Most users name what they want; don't make them re-pick from a list:
701
+
702
+ | User said something like… | Set `product` to |
703
+ |---|---|
704
+ | "add chat", "integrate messaging", "build chat", "I want messaging" | `chat-messaging` |
705
+ | "add calling", "integrate voice/video", "add video calls", "set up voip" | `voice-video` |
706
+ | "add both chat and calls", "chat with calling on top", "messaging and calls" | `chat-messaging+voice-video` |
707
+
708
+ Confirm inferred values briefly so the user can redirect if you guessed wrong:
709
+ > "Got it — setting up Chat & Messaging. (If you wanted calling instead, say so and I'll switch.)"
710
+
711
+ **3. Only if you can't tell** (plain `/cometchat` with no further context, ambiguous wording like "set up CometChat") — **MUST ask via `AskUserQuestion`. NON-NEGOTIABLE.** Do NOT silently default to chat-messaging or rationalize a shortcut (e.g. "fresh test scaffold → just exploring") to skip this prompt. Auto-mode does NOT authorize bypassing. The product decision drives Step 3a (chat) vs `cometchat-calls` dispatcher handoff — getting it wrong forces a re-run.
712
+
713
+ - **question:** "Which surface do you want to add to your app?"
714
+ - **header:** "Product"
715
+ - **multiSelect:** false
716
+ - **options:**
717
+
718
+ | Label | Description shown under the label | `product` value |
719
+ |---|---|---|
720
+ | Chat & Messaging | Real-time user to user & group chats. | `chat-messaging` |
721
+ | Voice & Video Calling | In-app calling & conferencing. | `voice-video` |
722
+ | Both Chat and Calling | I want chat with calling on top — chat is the main surface, calls ride alongside. | `chat-messaging+voice-video` |
723
+
724
+ > AI Agent / BYO Agent intentionally hidden — `/cometchat` doesn't yet ship integration paths for those products. Step 3.0's routing table below still gracefully handles `ai-agent` / `byo-agent` values that arrive from `auth me` (real dashboard signups), pointing the user at the AI Agents docs.
725
+
726
+ Once `product` is resolved, route — the rest of Step 3 is chat-shaped, and a calls-only integration shouldn't sit through it.
727
+
728
+ | `product` value | Branch | What runs |
729
+ |---|---|---|
730
+ | `chat-messaging` | Continue to 3a | Existing chat flow — placement intent, recommendation, framework skills, scaffold chat surfaces. |
731
+ | `voice-video` | **Hand off to `cometchat-calls`** | Stop here. Invoke the `cometchat-calls` dispatcher with the framework + family + credentials already established. Calls dispatcher routes to the per-family `cometchat-{family}-calls` skill in **standalone** mode — no chat UI Kit, full calls surface, VoIP push wired by default, `IncomingCall` mounted at app root. |
732
+ | `chat-messaging+voice-video` | Run 3a–6 (chat), THEN hand off to `cometchat-calls` in additive mode | Full chat flow first. After Step 6 verifies the chat integration, invoke `cometchat-calls` in **additive** mode — patches the existing provider to mount `IncomingCall` at root, adds call buttons inline on chat surfaces, opt-in VoIP push. Skip `apply-feature calls` — `cometchat-calls` covers it end-to-end. |
733
+ | `ai-agent` / `byo-agent` | Exit with docs pointer | Tell the user: *"`/cometchat` integrates chat and calling surfaces. AI Agents have their own integration path — see https://www.cometchat.com/docs/ai-agents."* Exit cleanly; do not attempt to scaffold. |
734
+
735
+ **If config has `placement_intent` set from a previous run**, confirm it and skip to Step 3b. The product branch above still runs first — a chat-mode integration that's now adding calls re-enters via the `chat-messaging+voice-video` row, not the chat-only row.
736
+
737
+ **Why this branch comes before 3a:** Step 3a's options are all chat archetypes (Messaging app, Marketplace, SaaS, …). For a `voice-video` product, that taxonomy doesn't apply — the user isn't picking *where chat lives*, they're picking *where the call trigger lives* (profile button vs `/calls` route vs always-on lock-screen-ringer). The `cometchat-calls` dispatcher owns its own placement question with the right options for the calls surface.
738
+
595
739
  #### 3a. "What are you building?"
596
740
 
597
741
  If config has `intent` set, confirm it and move on.
598
742
 
599
743
  **If `meta.intent === "exploring"` from Step 2b.5** (the user already told the dashboard during signup that they're just exploring), skip the rest of Step 3 entirely and route to the "Just exploring" branch — scaffold the minimal integration in Step 5 (one route/screen showing `<CometChatConversations />` with `cometchat-uid-1` pre-logged-in). Do not ask the placement-intent question; the user has already said "show me the simplest thing."
600
744
 
601
- Otherwise, use `AskUserQuestion`:
745
+ Otherwise, ask the user (preserve this exact shape — `question`, `header`, `multiSelect`, `options[].label`, `options[].description` — agents have varying primitive names but all support this structured form):
602
746
  - **question:** "What kind of app are you building?"
603
747
  - **header:** "Your app"
604
748
  - **multiSelect:** false
@@ -614,29 +758,70 @@ Otherwise, use `AskUserQuestion`:
614
758
 
615
759
  #### 3b. Show what you recommend and why
616
760
 
617
- The recommendation table differs by family because the placement vocabulary is different (web has routes/drawers/widgets; RN has screens/tabs/sheets):
761
+ This is the second wow moment after the detection summary. Don't just list a placement **tell the user why**. Two sentences of reasoning earn confidence; a table alone reads like a lookup.
762
+
763
+ The recommendation has two layers:
764
+
765
+ 1. **The placement** — what you'll set up (route / drawer / modal / tab / widget)
766
+ 2. **The reason** — why this fits the user's archetype (one or two sentences grounded in how their kind of app actually works)
767
+
768
+ When you write your response, lead with the reason, then the concrete placement, then offer to override:
769
+
770
+ > **For a marketplace app, I'd put a "Chat with seller" drawer on your product page + an inbox at `/messages`.**
771
+ >
772
+ > The drawer keeps buyers in the buying flow — they can ask a question without losing the listing. The inbox is for going back to past conversations. Two surfaces, one integration.
773
+ >
774
+ > Sound right, or want to try a different shape?
775
+
776
+ That's the shape. The recommendation tables below are the *what*; the reasoning column is the *why* you should narrate.
618
777
 
619
778
  **Web family (reactjs, nextjs, react-router, astro):**
620
779
 
621
- | Intent | What you'll set up |
622
- |---|---|
623
- | **Messaging app** | A dedicated messages page at a route you choose. Two-pane: conversation list + active chat. |
624
- | **Marketplace** | A "Chat with seller" drawer on your product page + an inbox page at /messages. |
625
- | **SaaS / dashboard** | A chat modal triggered from your navbar + a full messages page. |
626
- | **Social / community** | A full messenger page with tabs: Chats, Calls, Users, Groups. |
627
- | **Support** | A floating widget bubble in the bottom-right corner. |
780
+ | Intent | Placement | Why |
781
+ |---|---|---|
782
+ | **Messaging app** | Dedicated messages page (route you pick), two-pane: conversation list + active chat | Chat IS the product. Users land directly on it; the route is the home of your app. |
783
+ | **Marketplace** | "Chat with seller" drawer on the product page + inbox at `/messages` | Drawer keeps buyers in the buying flow; the inbox handles "go back to a past conversation." |
784
+ | **SaaS / dashboard** | Modal triggered from your navbar + full messages page | Modal feels lightweight (chat without leaving your work); the page is for serious conversations. |
785
+ | **Social / community** | Full messenger page with tabs: Chats, Calls, Users, Groups | Discovery matters as much as messaging — users want to find people, not just their existing threads. |
786
+ | **Support** | Floating widget bubble in the bottom-right | One-way customer-to-team — minimal cognitive load on the customer; your team triages from the dashboard. |
628
787
 
629
788
  **React Native family (expo, react-native):**
630
789
 
631
- | Intent | What you'll set up |
790
+ | Intent | Placement | Why |
791
+ |---|---|---|
792
+ | **Messaging app** | Dedicated "Messages" bottom tab → conversations → thread | Mobile users expect chat as a first-class destination; a tab puts it one tap away. |
793
+ | **Marketplace** | "Chat with seller" button on the product screen → modal thread + Inbox stack screen | Modal preserves the buying context; the Inbox is the "back to a conversation" entry point. |
794
+ | **SaaS / productivity** | "Chat" stack screen accessible from nav, optionally bottom sheet for quick replies | Stack screen for focused conversations; bottom sheet for fast back-and-forth without leaving your current work. |
795
+ | **Social / community** | "Messages" bottom tab + "Message" button on profile screens → modal thread | Tab handles discovery; per-profile button is the "I want to talk to THIS person" path. |
796
+ | **Support** | Modal triggered from a "Help" or "Support" button in header/settings | Lightweight, doesn't compete with your product's primary tabs. |
797
+
798
+ When explaining, reference the ASCII diagrams from `cometchat-placement` (web) or `cometchat-native-placement` (RN) so the user can visualize the shape.
799
+
800
+ **One sentence to hand them control:** end the recommendation with "Sound right, or want to try a different shape?" — never "Which would you like?" The first phrasing implies you've thought it through and they can override; the second implies you're just collecting answers.
801
+
802
+ #### 3b.1 — Tailor the recommendation by `last_app.industry`
803
+
804
+ If `auth me` returned `last_app.industry`, layer the industry-specific upsell onto the placement archetype recommendation. Do NOT replace it — augment it. Industry is a hint, not a rule.
805
+
806
+ | Industry value | What to add to the recommendation |
632
807
  |---|---|
633
- | **Messaging app** | A dedicated "Messages" bottom tab. Conversations list tap a conversation message thread. |
634
- | **Marketplace** | A "Chat with seller" button on the product screen that opens a modal with the message thread. Plus an "Inbox" stack screen for all conversations. |
635
- | **SaaS / productivity** | A "Chat" stack screen accessible from the nav or a header button. Optionally a bottom sheet for quick replies. |
636
- | **Social / community** | A "Messages" bottom tab with conversations list + message thread. Plus a "Message" button on user profile screens that opens a modal. |
637
- | **Support** | A modal triggered from a "Help" or "Support" button in the header or settings. |
808
+ | `healthcare` | Mention HIPAA-aware patterns: server-minted auth tokens (NEVER Auth Key), data-masking extension, audit-log retention, recording consent. Point at `cometchat-{family}-production` and `cometchat-features` for the moderation suite. |
809
+ | `dating` | Suggest enabling Profanity Filter + Image Moderation + Sentiment Analysis upfront dating apps almost always want them. Suggest a "Report user" button next to the message header. |
810
+ | `online_marketplaces` | Confirm the drawer-on-product-page placement (default for marketplace archetype). Suggest enabling Link Preview (buyers share product URLs) and Quick Replies for sellers. |
811
+ | `community_and_social` | Suggest enabling Reactions + Mentions + Threaded Conversations (these are default-on but worth surfacing as design-system colors). Recommend the tab-based "full messenger" placement. |
812
+ | `online_education` | Suggest a `/messages` route + a "Help" button in the navbar (instructor support). Mention Recording for class sessions if calls product is also enabled. |
813
+ | `events_and_streaming` | Suggest the floating widget for live audience chat. If calls product is enabled, recommend group calls + screen-share for hosts. |
814
+ | `sports_and_gaming` | Suggest tab-based messenger + Reactions + GIPHY/Stipop sticker integration (gamer apps lean heavily on stickers). |
815
+ | `team_comms_and_workflows` | Match Slack-like patterns: dedicated `/messages` route, threaded conversations on, mentions on. Skip the floating widget. |
816
+ | `on_demand_services` | Marketplace drawer pattern. Mention auto-translate for cross-language driver/rider chat. |
817
+ | `saas_businesses` | Modal-from-navbar default (matches the SaaS archetype). Suggest server-minted auth tokens + user-mgmt API for tenant scoping. |
818
+ | `other` / `null` | No industry-specific upsell — recommendation stays at the archetype level only. |
638
819
 
639
- When explaining, reference the ASCII diagrams from `cometchat-placement` (web) or `cometchat-native-placement` (RN) so the user can visualize.
820
+ Phrase the upsell as a *follow-up* after the base recommendation, not a replacement:
821
+
822
+ > "For the marketplace archetype, I'll set up the chat-with-seller drawer + /messages inbox. Since this is a marketplace app (per your dashboard), I'll also enable Link Preview by default — buyers and sellers share product URLs in chat all the time, and the preview helps. You can disable it after with `cometchat apply-feature link-preview --remove`."
823
+
824
+ Don't drown the user — pick at most 2 industry-specific suggestions per session. The verification matrix in the iteration menu surfaces the rest later.
640
825
 
641
826
  Ask: "Does this sound right, or do you want a different approach?" Let them override.
642
827
 
@@ -758,64 +943,136 @@ If the user has auth AND wants to set up production mode now:
758
943
 
759
944
  If they share an example, validate it's CometChat-compatible (alphanumeric, underscores, hyphens — no spaces or special chars; max 100 chars). Firebase UIDs, Clerk user IDs, Supabase UUIDs, and Auth0 `sub` claims are all CometChat-compatible by default.
760
945
 
761
- #### 3f. Confirm the plan
946
+ #### 3f. Confirm the plan — the third wow moment
947
+
948
+ **This is the trust contract. Show EXACTLY what you'll do BEFORE doing it.** Three sections, in this order:
762
949
 
763
- **This is critical. Show EXACTLY what you'll do before doing it.** The plan format differs by framework.
950
+ 1. **Files I'll create** new files, with a one-line purpose for each
951
+ 2. **Files I'll modify** — existing files, with the specific edit (not "wrap with provider" alone — say "wrap the children of `<Layout>` with `<CometChatProvider>` at line ~14")
952
+ 3. **Files I won't touch** — call out the load-bearing files that stay untouched (auth config, route definitions outside the chat surface, your existing components). This is the reassurance.
764
953
 
765
- **Web example (Next.js, marketplace):**
766
- > "Here's what I'll create:
954
+ Then dependencies + auth mode + an approval line that hands the user control.
955
+
956
+ The shape (use it verbatim — three sections + reassurance):
957
+
958
+ > Here's the plan:
959
+ >
960
+ > **Files I'll create**
961
+ > - `cometchat/CometChatProvider.tsx` — wraps the kit's auth + theme providers, gates render on login
962
+ > - `cometchat/init.ts` — module-level CometChat.init + login, called from the provider
963
+ > - `app/messages/page.tsx` — full-page messages route (your inbox)
964
+ > - `app/components/ChatDrawer.tsx` — the "chat with seller" drawer for product pages
965
+ > - `.env.local` — your CometChat App ID + Region + Auth Key (gitignored)
767
966
  >
768
- > **New files:**
769
- > - `app/providers/CometChatProvider.tsx`
770
- > - `app/messages/page.tsx`
771
- > - `app/components/ChatDrawer.tsx`
772
- > - `.env.local`
967
+ > **Files I'll modify**
968
+ > - `app/layout.tsx` — wrap `{children}` with `<CometChatProvider>` (one line, around line 14)
969
+ > - `app/products/[id]/page.tsx` — add the `<ChatDrawer />` trigger button next to the seller info (your existing layout stays)
970
+ > - `app/components/Navbar.tsx` — add a `<Link href="/messages">Messages</Link>` next to your existing nav items
773
971
  >
774
- > **Files I'll modify:**
775
- > - `app/products/[id]/page.tsx` — add ChatDrawer trigger
776
- > - `app/layout.tsx` — wrap with CometChatProvider
777
- > - `app/components/Navbar.tsx`add 'Messages' link
972
+ > **Files I won't touch**
973
+ > - `auth.config.ts` — your NextAuth setup stays as-is; we'll wire CometChat to it in production-auth mode later
974
+ > - `tailwind.config.ts`, `globals.css`no styling changes outside `cometchat/`
975
+ > - Anything under `app/products/`, `app/cart/`, etc. — your existing routes are untouched
778
976
  >
779
- > **Dependencies:** @cometchat/chat-sdk-javascript, @cometchat/chat-uikit-react
977
+ > **Dependencies**
978
+ > `@cometchat/chat-sdk-javascript`, `@cometchat/chat-uikit-react`
780
979
  >
781
- > **Auth mode:** Development (Auth Key).
782
- > Proceed? [y/n]"
980
+ > **Auth mode** Development (Auth Key for now; production auth is a one-flag upgrade later)
981
+ >
982
+ > **Estimated time** ~30 seconds to write the code, ~1 minute for `npm install` to finish.
983
+ >
984
+ > If anything looks off, just tell me what to change. Otherwise, say "go" and I'll write it.
985
+
986
+ **The rules for this moment:**
987
+
988
+ 1. **Be specific in the modify section.** "Wrap with provider" is vague. "Wrap `{children}` with `<CometChatProvider>` at line ~14" tells the user exactly what to expect when they git-diff later.
989
+ 2. **List the don't-touch files explicitly.** Users worry about agents stomping their auth config, their tailwind, their routes. Naming what stays untouched defuses that worry up front.
990
+ 3. **Estimated time matters.** Two short numbers — a few seconds to write code, a couple minutes for `npm install`. Sets expectations; reduces "is it stuck?" mid-flow.
991
+ 4. **End with a hand-off, not a yes/no.** "Say 'go' and I'll write it. Or tell me what to change." Beats "Proceed? [y/n]" — it implies the user can adjust without throwing the whole plan away.
992
+ 5. **Never abbreviate the plan in subsequent runs.** Every integration deserves a fresh, full plan. If the user has been through this before, they can skim — but don't pre-skim for them.
993
+
994
+ **Web example (Next.js + NextAuth, marketplace):** see the shape above.
995
+
996
+ **Web example (Vite + React, greenfield messaging app):**
997
+
998
+ > Here's the plan:
999
+ >
1000
+ > **Files I'll create**
1001
+ > - `src/cometchat/CometChatProvider.tsx` — wraps the kit's providers, gates render on login
1002
+ > - `src/cometchat/init.ts` — `CometChat.init` + `CometChat.login` (with `cometchat-uid-1` for dev)
1003
+ > - `src/components/ChatScreen.tsx` — your full-page chat surface (conversations + messages)
1004
+ > - `.env` — your CometChat App ID + Region + Auth Key (gitignored)
1005
+ >
1006
+ > **Files I'll modify**
1007
+ > - `src/main.tsx` — wrap `<App />` with `<CometChatProvider>` (line ~10)
1008
+ > - `src/App.tsx` — render `<ChatScreen />` instead of the Vite default (you can move it to a route later)
1009
+ >
1010
+ > **Files I won't touch**
1011
+ > - `vite.config.ts`, `tsconfig.*` — no build config changes
1012
+ > - `src/index.css`, `src/App.css` — kit ships its own CSS; your styles stay
1013
+ >
1014
+ > **Dependencies** `@cometchat/chat-sdk-javascript`, `@cometchat/chat-uikit-react`
1015
+ >
1016
+ > **Auth mode** Development (Auth Key + `cometchat-uid-1`; you can log in as `cometchat-uid-1`–`uid-5` to chat with yourself across browser windows)
1017
+ >
1018
+ > **Estimated time** ~30 seconds to write, ~1 minute for `npm install`.
1019
+ >
1020
+ > Say "go" or tell me what to change.
783
1021
 
784
1022
  **RN example (Expo Router, messaging):**
785
- > "Here's what I'll create:
1023
+
1024
+ > Here's the plan:
1025
+ >
1026
+ > **Files I'll create**
1027
+ > - `cometchat/CometChatProvider.tsx` — four-wrapper chain (gesture handler → safe area → theme → CometChat)
1028
+ > - `cometchat/init.ts` — init + login, module-level guard
1029
+ > - `app/(tabs)/messages.tsx` — your Messages tab
1030
+ > - `.env` — `EXPO_PUBLIC_COMETCHAT_APP_ID` + region + auth key
1031
+ >
1032
+ > **Files I'll modify**
1033
+ > - `app/_layout.tsx` — wrap with the four-wrapper chain (line ~10)
1034
+ > - `app/(tabs)/_layout.tsx` — add the Messages tab as the third entry, after Home and Profile
1035
+ > - `index.js` — `import 'react-native-gesture-handler'` at line 1 (mandatory; without it release builds break silently)
1036
+ >
1037
+ > **Files I won't touch**
1038
+ > - `app.json` — no Expo config changes for dev mode (production push needs them, but that's later)
1039
+ > - Your existing `app/(tabs)/index.tsx`, `profile.tsx` — stay as-is
786
1040
  >
787
- > **New files:**
788
- > - `providers/CometChatProvider.tsx`
789
- > - `app/(tabs)/messages.tsx`
790
- > - `.env`
1041
+ > **Dependencies (via `npx expo install`)**
1042
+ > `@cometchat/chat-uikit-react-native`, `@cometchat/chat-sdk-react-native`, `react-native-gesture-handler`, `react-native-reanimated`, `react-native-safe-area-context`, `react-native-screens`, `@react-native-async-storage/async-storage`, `@react-native-community/netinfo`, `react-native-video`, `react-native-image-picker`, `react-native-document-picker`, `react-native-vector-icons`, `react-native-fs`
791
1043
  >
792
- > **Files I'll modify:**
793
- > - `app/_layout.tsx` — wrap with the four-wrapper chain
794
- > - `app/(tabs)/_layout.tsx` — add the Messages tab
795
- > - `index.js` — `import 'react-native-gesture-handler'` at line 1 (if missing)
1044
+ > **Auth mode** Development (Auth Key).
796
1045
  >
797
- > **Dependencies (via `npx expo install`):**
798
- > @cometchat/chat-uikit-react-native, @cometchat/chat-sdk-react-native,
799
- > react-native-gesture-handler, react-native-reanimated,
800
- > react-native-safe-area-context, react-native-screens,
801
- > @react-native-async-storage/async-storage, @react-native-community/netinfo,
802
- > react-native-video, react-native-image-picker, react-native-document-picker,
803
- > react-native-vector-icons, react-native-fs
1046
+ > **Estimated time** ~30 seconds to write, ~3 minutes for `expo install` (RN deps are heavier).
804
1047
  >
805
- > **Auth mode:** Development (Auth Key).
806
- > Proceed? [y/n]"
1048
+ > Say "go" or tell me what to change.
807
1049
 
808
- **Bare RN variant** — same as Expo, except `npm install` instead of `npx expo install`, plus:
809
- - Run `cd ios && pod install`
810
- - Patch `ios/<Name>/Info.plist`, `android/app/src/main/AndroidManifest.xml` for permissions
1050
+ **Bare RN variant** — same as Expo, except:
1051
+ - `npm install` instead of `npx expo install`
1052
+ - Run `cd ios && pod install` (~1-2 min extra)
1053
+ - Patch `ios/<Name>/Info.plist`, `android/app/src/main/AndroidManifest.xml` for camera/mic permissions
811
1054
  - Add `ios/<Name>/PrivacyInfo.xcprivacy` (Apple Privacy Manifest)
812
1055
  - Patch `android/build.gradle` for the async-storage Maven repo (v3+)
813
1056
 
814
- Wait for explicit confirmation. If the user says no or wants changes, go back to the relevant question and re-ask.
1057
+ Surface these in the "Files I'll modify" section so the user knows they're coming.
1058
+
1059
+ **After approval — the writing moment:**
1060
+
1061
+ When the user says "go", narrate progress as you work. Don't be silent for 30 seconds while you write 5 files. Brief structured updates, one per beat:
1062
+
1063
+ > ✓ Created `cometchat/CometChatProvider.tsx`
1064
+ > ✓ Created `cometchat/init.ts`
1065
+ > ✓ Modified `src/main.tsx` (wrapped App with provider)
1066
+ > ✓ Wrote `.env` (Auth Key hidden)
1067
+ > Installing dependencies (this takes ~1 minute)...
1068
+
1069
+ The structured beats make the writing feel like a contract being executed, not a black box churning.
1070
+
1071
+ **If the user says no or wants changes:** go back to the relevant question and re-ask. Don't try to negotiate the plan in-line — the plan is atomic. Adjust the source decision, then regenerate the plan.
815
1072
 
816
1073
  ### Step 4 — Reference pattern skills
817
1074
 
818
- **All skills are already loaded in your context** as `.claude/skills/` files. Do NOT use the `Skill()` tool. Read and follow them directly.
1075
+ **All skills are already loaded in your context** as `.claude/skills/` (or `.cursor/skills/` / `.kiro/skills/` / `.agents/skills/` — your agent's skills dir) files. NEVER explicitly load CometChat skills via your agent's skill-loading mechanism — the skills are already in your context. Just read and follow them directly.
819
1076
 
820
1077
  **For web frameworks:**
821
1078
  1. `cometchat-core` — initialization, provider, CSS, anti-patterns
@@ -1152,7 +1409,7 @@ Then:
1152
1409
 
1153
1410
  ### Step 7 — Iteration menu
1154
1411
 
1155
- Use `AskUserQuestion`. The option set differs by family — RN has two extra options (push notifications + testing) that don't apply to web.
1412
+ Ask the user (preserve this exact shape — `question`, `header`, `multiSelect`, `options[].label`, `options[].description` — agents have varying primitive names but all support this structured form). The option set differs by family — RN has two extra options (push notifications + testing) that don't apply to web.
1156
1413
 
1157
1414
  **Web — 8 canonical options:**
1158
1415
  - **question:** "What would you like to do next?"
@@ -1209,15 +1466,15 @@ For **troubleshooting (RN)**: read `cometchat-native-troubleshooting` and match
1209
1466
 
1210
1467
  ### Re-rendering the menu after each action
1211
1468
 
1212
- After every Phase B action completes, you **MUST** re-invoke `AskUserQuestion` with the **exact same option set** (web: 8 options, RN: 10) — same `question`, `header`, `multiSelect: false`, same labels and descriptions, verbatim. This gives the user arrow-key selection in their terminal.
1469
+ After every Phase B action completes, you **MUST** re-render the menu via your agent's structured-question primitive with the **exact same option set** (web: 8 options, RN: 10) — same `question`, `header`, `multiSelect: false`, same labels and descriptions, verbatim. This gives the user arrow-key selection in their terminal.
1213
1470
 
1214
1471
  **Do NOT:**
1215
1472
  - Present the options as a prose bullet list — forces typed answers, worse UX.
1216
1473
  - Invent new options based on what the user just did. The canonical set doesn't change between iterations.
1217
- - Skip the menu and ask freeform "What's next?" — always route through `AskUserQuestion`.
1474
+ - Skip the menu and ask freeform "What's next?" — always route through your agent's structured-question primitive.
1218
1475
  - Drop options or add new ones. The user expects the same choices every time, even if some are redundant with what they just did (they may want to do the same kind of action twice).
1219
1476
 
1220
- The iteration loop is the whole point of Phase B. Re-rendering the canonical menu via `AskUserQuestion` after every action is how the user controls the session.
1477
+ The iteration loop is the whole point of Phase B. Re-rendering the canonical menu via your agent's structured-question primitive after every action is how the user controls the session.
1221
1478
 
1222
1479
  ## Hard rules
1223
1480
 
@@ -1233,7 +1490,7 @@ The iteration loop is the whole point of Phase B. Re-rendering the canonical men
1233
1490
  - **NEVER build a custom search UI.** The UI Kit ships `<CometChatSearch>` — full dual-scope search across conversations + messages with built-in filter chips, pagination, and result highlighting. Any request involving "search", "find messages", "search conversations" MUST use the built-in component (and `showSearchBar` / `onSearchBarClicked` on `CometChatConversations` for web; `hideSearch={false}` for RN). Do NOT create custom search bars, hand-rolled result lists, or filter UIs.
1234
1491
  - For component names and props, use the framework-appropriate `*-components` skill or docs MCP — never invent from training data.
1235
1492
  - After writing code, record state in `.cometchat/state.json` (Step 5 step 11) so the iteration menu can detect the integration in a future session.
1236
- - **NEVER use the `Skill()` tool** to load CometChat skills. They're already in your context as `.claude/skills/` files. Just read and follow them directly.
1493
+ - **NEVER explicitly load CometChat skills via your agent's skill-loading mechanism.** They're already in your context as `.claude/skills/`, `.cursor/skills/`, `.kiro/skills/`, or `.agents/skills/` files. Just read and follow them directly.
1237
1494
 
1238
1495
  ### Web only
1239
1496