[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M713KM2PQRWSW6R6WDRKFGZR":3,"skill-same:01M713KM2PQRWSW6R6WDRKFGZR":97},{"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":18,"publishedAt":39,"linkOnly":40,"markdownContent":41,"markdownBody":42,"frontMatter":43,"refName":47,"commitSha":48,"skillDirectory":49,"forksCount":50,"repositoryHtmlUrl":51,"repositoryHomepageUrl":52,"ownerHtmlUrl":53,"ownerBlogUrl":54,"ownerDescription":55,"updatedAt":56,"install":57,"resources":70},"01M713KM2PQRWSW6R6WDRKFGZR","smart-glasses-rokid",null,"Rokid Glasses apps driven from an Android phone with Rokid's public CXR-L SDK - authorise once in the Hi Rokid companion app (Global or China build), open a custom view on the green display and update its text, stream the glasses microphone as 16 kHz PCM, survive pauses for the Rokid assistant, and fall back to phone notifications mirrored by Hi Rokid (also on iPhone) when the SDK path is not an option. Covers Maven setup, CXR-L versus CXR-M and CXR-S, R8 rules, iOS notes, input limits and real community issues. Use when the user mentions Rokid, Rokid Glasses, RV101, CXR, CXR-L, CXR-M, CXR-S, Hi Rokid, Rokid AI App or YodaOS-Sprite and wants a phone app to put text on the glasses or read their microphone. Not for apps that run on the glasses themselves (see RealComputer\u002FGlassKit or Rokid's bare-metal docs), not for AIUI agents (use the yodaos-project\u002Faiui skill), and not for Rokid Max or other USB-C display glasses (use the smart-glasses skill).","hashgraph-online\u002Fawesome-codex-plugins","hashgraph-online","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F160371962?v=4","01M6CNB6NRJVNNGN14TR01Q6D3","HOL (Hashgraph Online)","01M6JT1HSKKG9V68KQAQGBA7XP",1559,"Apache-2.0","https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Fhinty-eu\u002Fsmart-glasses-skills\u002Fskills\u002Fsmart-glasses-rokid\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38],"smart glasses rokid","open","limits","notes","usb","text","notifications","iphone","display","when","apps","china","issues","option","project","green","community","app","bare","back","2026-11-10 10:12:30",false,"---\nname: smart-glasses-rokid\ndescription: Rokid Glasses apps driven from an Android phone with Rokid's public CXR-L SDK - authorise once in the Hi Rokid companion app (Global or China build), open a custom view on the green display and update its text, stream the glasses microphone as 16 kHz PCM, survive pauses for the Rokid assistant, and fall back to phone notifications mirrored by Hi Rokid (also on iPhone) when the SDK path is not an option. Covers Maven setup, CXR-L versus CXR-M and CXR-S, R8 rules, iOS notes, input limits and real community issues. Use when the user mentions Rokid, Rokid Glasses, RV101, CXR, CXR-L, CXR-M, CXR-S, Hi Rokid, Rokid AI App or YodaOS-Sprite and wants a phone app to put text on the glasses or read their microphone. Not for apps that run on the glasses themselves (see RealComputer\u002FGlassKit or Rokid's bare-metal docs), not for AIUI agents (use the yodaos-project\u002Faiui skill), and not for Rokid Max or other USB-C display glasses (use the smart-glasses skill).\nlicense: Apache-2.0\nmetadata:\n  version: \"1.0.1\"\n  last-updated: \"2026-11-09\"\n---\n\n# Rokid Glasses from a phone (CXR-L)\n\nLast checked: 2026-11-09. Verification: docs-only (no hardware test yet). SDK names, roles and versions were read\nfrom Rokid's SDK overview ([developerdoc.rokid.com\u002Fsdk](https:\u002F\u002Fdeveloperdoc.rokid.com\u002Fsdk?lang=en); the English and\nChinese pages both show CXR-L 1.1.2 dated 2026-09-08), the Rokid Maven metadata, CocoaPods trunk, and the public\nsignatures of the published `client-l` 1.1.2 artifact. The snippets were written for this skill and not compiled here.\nRokid publishes no licence for CXR-L, so this skill only describes the API in its own words and links to Rokid.\n\n## Decide first\n\nRokid Glasses (retail model RV101) are display glasses: monochrome green micro-LED waveguides for both eyes,\nblack is transparent. They also have a camera, four microphones, speakers and a temple touchpad, and run\nYodaOS-Sprite, an Android-based OS (Android 12 by community measurement). The phone app **Hi Rokid** owns the\nBluetooth link. Your phone app never talks to the glasses directly with CXR-L: every call goes through Hi Rokid.\n\nRokid's SDKs (as of 2026-11-08, SDK overview page):\n\n| SDK | Runs on | Needs Hi Rokid | Access | Latest |\n|---|---|---|---|---|\n| **CXR-L** (`com.rokid.cxr:client-l`) | phone, Android + iOS | yes, it is the proxy | public | 1.1.2 (2026-09-08); iOS `RGCxrClient` 1.1.1 on CocoaPods trunk (1.1.1.1 in Rokid's sample project) |\n| CXR-M (`com.rokid.cxr:client-m`) | phone, Android | no, direct link | business only (`Glasses.BD@rokid.com`) | 1.1.0 on the portal, 1.2.2 on Maven |\n| CXR-S (`com.rokid.cxr:cxr-service-bridge`) | glasses, inside your glasses APK | used with CXR-L `CUSTOM_APP` | public, documented inside the CXR-L docs | 1.8 on Maven (2026-10-30) |\n| Bare-metal development | glasses (AOSP) | no | public | 1.0.0 (2026-06-05) |\n\nCXR-S has no entry of its own on the overview: it is mentioned only inside the CXR-M entry (\"can be used with the\non-device CXR-S SDK\") and in a CXR-L changelog line (1.0.3: glasses-side CXR-S integration merged into the CXR-L docs).\n\nThe overview says CXR-M \"cannot run alongside\" the Rokid AI App on the same phone, and it needs business onboarding.\nFor an app that ordinary owners install next to Hi Rokid, **CXR-L is the only option**.\n\n| You want | Use |\n|---|---|\n| Text on the glasses from your Android app, no glasses code | CXR-L `CUSTOM_VIEW` (this skill) |\n| Touchpad gestures, your own UI or anything beyond a text layout | CXR-L `CUSTOM_APP` plus your APK on the glasses (CXR-S), see [input.md](references\u002Finput.md) |\n| An app that lives on the glasses | Not this skill: [RealComputer\u002FGlassKit](https:\u002F\u002Fgithub.com\u002FRealComputer\u002FGlassKit) (`npx skills add RealComputer\u002FGlassKit`) or Rokid's bare-metal docs |\n| An agent inside Hi Rokid's Agent Store | Not this skill: Rokid AIUI, `npx skills add yodaos-project\u002Faiui` |\n| iPhone | CXR-L iOS (`RGCxrClient`, see [setup.md](references\u002Fsetup.md#ios)) or notifications |\n| Zero SDK work, Android or iPhone | A normal phone notification mirrored by Hi Rokid, [notifications.md](references\u002Fnotifications.md) |\n| Spoken output | Text-to-speech on the phone; the glasses play phone audio over Bluetooth |\n| Teleprompter, translation or AI scenes built by Rokid | CXR-M only (business contract); not reachable from CXR-L |\n\nIn the display-text ladder of the `smart-glasses` skill, Rokid Glasses support rung 1 (**Vendor SDK**, CXR-L),\nrung 4 (**phone notification mirrored by the companion app**) and rung 5 (**voice in the ear**).\n\nA newer model, Rokid Glasses 2 (480x380, 25 degree field of view), was announced in China on 2026-10-27 and goes on\nsale there on 2026-11-11, with no sale date outside China\n([Notebookcheck, 2026-10-28](https:\u002F\u002Fwww.notebookcheck.net\u002FRokid-Glasses-2-launch-with-upgraded-design-bigger-battery-and-Dolby-Audio-support.1435436.0.html),\npress). Whether CXR-L 1.1.2 drives it is unverified.\n\n## Setup in brief\n\nDetails, versions and the R8 rules: [references\u002Fsetup.md](references\u002Fsetup.md).\n\n```kotlin\n\u002F\u002F settings.gradle.kts: only the com.rokid.cxr group comes from Rokid's repository\ndependencyResolutionManagement {\n    repositories {\n        google()\n        mavenCentral()\n        exclusiveContent {\n            forRepository { maven { url = uri(\"https:\u002F\u002Fmaven.rokid.com\u002Frepository\u002Fmaven-public\u002F\") } }\n            filter { includeGroup(\"com.rokid.cxr\") }\n        }\n    }\n}\n\u002F\u002F app\u002Fbuild.gradle.kts\ndependencies { implementation(\"com.rokid.cxr:client-l:1.1.2\") } \u002F\u002F pin it, never a -SNAPSHOT\n```\n\n- `minSdk` 28. Native libraries ship for `arm64-v8a` and `armeabi-v7a` only, so creating a session on an x86\n  emulator throws `UnsatisfiedLinkError`. Catch `Throwable` around `create()`.\n- The library merges `\u003Cqueries>` for both Hi Rokid packages into your manifest.\n- The library's consumer R8 rules remove **your** `Log.d` and `Log.v` calls in release builds. Log glasses state with `Log.i`.\n- The user needs Hi Rokid installed, signed in, and the glasses connected **inside Hi Rokid** (pairing in Android\n  Bluetooth settings is not enough). client-l 1.1.2 checks for Hi Rokid versionCode 10110000 (1.11.0) or newer.\n- No app key, client secret or Rokid registration is documented for Android (as of 2026-11-08).\n- Rokid publishes no licence for the SDK: none in the docs, none in the client-l 1.1.2 POM (checked 2026-11-09).\n  Depend on the Maven artifact and do not copy SDK files,\n  `.aar` contents or Rokid's sample code into your repository; write your own calls against the documented API.\n\n## The core flow\n\n1. Check that Hi Rokid is installed and new enough.\n2. Ask Hi Rokid for permission (`requestAuthorization`). The first time Hi Rokid shows a consent screen; later calls\n   return silently. Call it again after every process start: it also decides whether the Global or the China\n   build of Hi Rokid serves the session.\n3. Create a `CUSTOM_VIEW` session with your initial view JSON, add callbacks **before** `connect(token)`.\n4. Wait for `onSessionStarted`. `connect()` returning does not mean the view is up.\n5. Replace text with `customViewUpdate`. Keep the latest text and re-send it on start and resume.\n6. Optional: `startAudioStream()` for the glasses microphone ([audio.md](references\u002Faudio.md)).\n7. `close()` the session when done. A closed session cannot reconnect; create a new one.\n\n```kotlin\nimport android.app.Activity\nimport android.content.Context\nimport android.content.Intent\nimport android.os.Handler\nimport android.os.Looper\nimport android.util.Log\nimport com.rokid.cxr.session.*\n\nclass RokidText(private val app: Context, private val onState: (String) -> Unit) {\n    private val manager = CxrSessionManager.getInstance(app.applicationContext)\n    private val main = Handler(Looper.getMainLooper())\n    private var token: String? = null          \u002F\u002F memory only, re-authorise after a process restart\n    private var session: CxrSession? = null\n    private var title = \"\"\n    private var body = \"\"\n\n    fun companionOk(): Boolean = manager.checkRokidAppCompatibility(app) is RokidAppStatus.Compatible\n\n    fun authorize(activity: Activity) {\n        \u002F\u002F MEDIA for the view; add GlassPermission.MICROPHONE if you stream audio.\n        \u002F\u002F unverified: which scope the custom view strictly needs; the docs list CAMERA, MICROPHONE, MEDIA, DEVICE_MANAGE\n        manager.requestAuthorization(activity, listOf(GlassPermission.MEDIA)) { r ->\n            main.post {\n                token = r.token?.takeIf { r.isSuccess && it.isNotEmpty() }\n                onState(if (token != null) \"authorized\" else \"auth_failed:${r.errorCode}\")\n            }\n        }\n        \u002F\u002F If neither Hi Rokid build passes the version check the callback may never come: time out yourself.\n    }\n\n    \u002F** Call from your Activity's onActivityResult for every request code while authorising. *\u002F\n    fun onActivityResult(resultCode: Int, data: Intent?) {\n        manager.parseAuthorizationResult(resultCode, data ?: Intent())\n    }\n\n    fun start() {\n        val t = token ?: return onState(\"not_authorized\")\n        if (session != null) return\n        val s = try {\n            manager.create(SessionConfig(\n                sessionType = SessionType.CUSTOM_VIEW,\n                aiInterceptMode = AiInterceptMode.ALLOW_WITH_PAUSE,\n                timeouts = SessionTimeouts(),\n                viewData = TextCard.view(title, body),   \u002F\u002F compact JSON, see display.md\n            ))\n        } catch (e: Throwable) {                         \u002F\u002F a session is still open, or no ARM native libs\n            Log.i(\"RokidText\", \"create failed: $e\"); onState(\"create_failed\"); return\n        }\n        session = s\n        s.addLifecycleCallback(lifecycle)                \u002F\u002F before connect\n        s.connect(t)\n        onState(\"connecting\")\n    }\n\n    fun show(newTitle: String, newBody: String) {\n        title = newTitle; body = newBody\n        val s = session ?: return\n        if (s.state != SessionState.Started) return      \u002F\u002F sent again in onSessionStarted \u002F onSessionResumed\n        val r = s.customViewUpdate(TextCard.update(title, body))\n        if (!r.isSuccess) Log.i(\"RokidText\", \"update ${r.code} ${r.message}\")\n    }\n\n    fun stop() {\n        session?.let { it.removeLifecycleCallback(lifecycle); it.close() }\n        session = null\n        onState(\"idle\")\n    }\n\n    private val lifecycle = object : ISessionLifecycleCbk {\n        override fun onConnectResult(success: Boolean, errorCode: SessionErrorCode?) {\n            if (success) return\n            if (errorCode == SessionErrorCode.NOT_AUTHENTICATED || errorCode == SessionErrorCode.TOKEN_EXPIRED) token = null\n            session = null\n            onState(\"connect_failed:$errorCode\")\n        }\n        override fun onSessionStarted() { onState(\"started\"); show(title, body) }\n        override fun onSessionPaused(reason: PausedReason) = onState(\"paused:$reason\")   \u002F\u002F AI_ASSIST, BT_DISCONNECTED\n        override fun onSessionResumed() { onState(\"started\"); show(title, body) }\n        override fun onSessionTerminating(reason: TerminatingReason, gracePeriodMs: Long) = onState(\"terminating:$reason\")\n        override fun onSessionClosed(reason: CloseReason) {\n            session = null\n            if (reason == CloseReason.LINK_LOST || reason == CloseReason.CHAIN_TORN) token = null\n            onState(\"closed:$reason\")                    \u002F\u002F GLASSES_EXIT = the wearer left your view\n        }\n    }\n}\n```\n\n`TextCard` builds the view JSON with `org.json`; it is in [display.md](references\u002Fdisplay.md). Lifecycle callbacks\narrive on the main thread; audio may not.\n\nWhat each state means for your app:\n\n| Event | Meaning | Do |\n|---|---|---|\n| `onConnectResult(false, NOT_AUTHENTICATED \u002F TOKEN_EXPIRED)` | token rejected | drop the token, `requestAuthorization` again |\n| `onConnectResult(false, BT_NOT_CONNECTED \u002F LINK_NOT_READY)` | glasses not connected in Hi Rokid | ask the user to open Hi Rokid |\n| `onSessionPaused(AI_ASSIST)` | the wearer started the Rokid assistant, your view is hidden | keep state, wait |\n| `onSessionResumed()` | view is back | re-send the latest text |\n| `onSessionClosed(GLASSES_EXIT)` | the wearer closed your view on the glasses | respect it; reopen only on a new user action or new content |\n| `onSessionClosed(LINK_LOST \u002F CHAIN_TORN)` | link broken, token void | re-authorise, then a new session |\n\nCapability calls before `Started` fail with `SESSION_NOT_STARTED`, during `Paused` with `SESSION_PAUSED`. Only one\nsession can be active per manager; `create()` throws while the old one is alive.\n\n## Showing text well\n\nSummary of [display.md](references\u002Fdisplay.md):\n\n- The view is a JSON tree of `LinearLayout`, `RelativeLayout`, `TextView` and `ImageView`; `id` goes inside `props`.\n  Send it as **compact single-line JSON**: indented JSON fails silently (a comment in Rokid's sample).\n- Updates are an array of `{\"action\":\"update\",\"id\":...,\"props\":{...}}` with only the changed keys.\n- Plan for a 480 px wide portrait area. Use black backgrounds and bright green text, `textSize` 16sp or more.\n- Coalesce updates (a few per second). Community reports on some Global Hi Rokid builds say `customViewUpdate`\n  returns success without redrawing; keep a \"recreate the session\" fallback behind a switch.\n\n## Input, microphone, iPhone\n\n- **Taps on a custom view do not reach the phone.** You do get pause, resume, close, wearing and screen events.\n  Full touchpad events need your own APK on the glasses. See [input.md](references\u002Finput.md).\n- **Glasses microphone:** `startAudioStream()` delivers PCM 16 kHz, mono, 16-bit, once the session is `Started` and\n  `GlassPermission.MICROPHONE` was granted. See [audio.md](references\u002Faudio.md).\n- **iPhone:** CXR-L iOS exists (`RGCxrClient` 1.1.1 on CocoaPods trunk; Rokid's sample project pins 1.1.1.1 from\n  Rokid's private specs source, or uses the source modules bundled in the sample), with the same JSON and state\n  model and an auth round trip through Hi Rokid by URL scheme. Notifications are the low-effort path. See\n  [setup.md](references\u002Fsetup.md#ios) and [notifications.md](references\u002Fnotifications.md).\n\n## Live captions\n\nWith the shared caption server of the `smart-glasses-live-captions` skill, the Rokid client:\n\n- sends `{\"type\":\"hello\",\"target\":\"rokid\",\"lines\":3,\"cols\":22}` (3 lines of 24sp text, about 22 Latin characters\n  each: an estimate, unverified on hardware; `examples\u002Flive-captions` uses the same numbers);\n- on each `caption` message replaces the body text, keeps only the last lines that fit, and sends at most one\n  `customViewUpdate` every 250 ms (also an estimate; the newest partial result wins); a caption marked\n  `\"repeat\":true` is shown again, not appended a second time;\n- on `clear` sends empty strings;\n- maps shared actions (`repeat`, `skip`, `hide`) to buttons in the phone app, because glasses taps do not arrive.\n\n## Testing without hardware\n\nThere is no CXR-L simulator (none found in the docs as of 2026-11-08). Put the class above behind your own interface,\nunit-test the JSON builders and the line fitting, and drive the rest of the app from a fake. The ARM-only native\nlibraries mean the real path cannot run on an x86 emulator. AIUI Studio's web simulator is for AIUI agents only.\n\n## Publishing\n\n- Android: ship through Google Play or any store like a normal app. The CXR-L docs describe no Rokid review and no\n  app key; the user grants access inside Hi Rokid. Community projects report a one-time \"unverified app\"\n  confirmation in Hi Rokid.\n- iOS: the CXR-L docs ask for a registered Rokid developer account and a bundle ID plus URL scheme; one community\n  iOS project reports that auth worked without registration. Unverified either way.\n- AIUI agents go through review in the Hi Rokid Agent Store; that is a different product path.\n\n## Pitfalls (most common first)\n\n1. Only `Log.i` survives release builds next to this SDK (consumer R8 rules).\n2. Re-authorise after each process start, even with a stored token, before `connect`.\n3. If both Hi Rokid builds are installed and the China build is new enough, the SDK picks the China build.\n4. Hi Rokid must keep running. Aggressive battery managers on some phones kill it and the link drops.\n5. `customViewUpdate` success does not prove a redraw on every Global build.\n6. The Maven `1.2.X-SNAPSHOT` (updated 2026-11-05) is a moving target; stay on 1.1.2.\n\nMore, with links: [references\u002Ftroubleshooting.md](references\u002Ftroubleshooting.md).\n\n## References\n\n- [setup.md](references\u002Fsetup.md) - Maven, artifacts, manifest, R8, Hi Rokid Global vs China, iOS, credentials.\n- [display.md](references\u002Fdisplay.md) - view JSON, text layout limits, update pacing, teleprompter-like flows.\n- [audio.md](references\u002Faudio.md) - glasses microphone stream, format, routing, speakers.\n- [input.md](references\u002Finput.md) - which events reach a phone app and how to get real touchpad events.\n- [notifications.md](references\u002Fnotifications.md) - the no-SDK fallback on Android and iPhone, timing quirks.\n- [troubleshooting.md](references\u002Ftroubleshooting.md) - real issues and fixes.\n\n## Official resources\n\n- SDK overview: https:\u002F\u002Fdeveloperdoc.rokid.com\u002Fsdk?lang=zh\n- CXR-L documentation (Chinese): https:\u002F\u002Fcustom.rokid.com\u002Fprod\u002Frokid_web\u002F84feb39f8ef141b0ad0326f902ab881f\u002Fpc\u002Fcn\u002Ffa92e9303bc848e6b4a20c062f2c792b.html\n- Maven repository: https:\u002F\u002Fmaven.rokid.com\u002Frepository\u002Fmaven-public\u002F\n- Community issue tracker: https:\u002F\u002Fgithub.com\u002Frokid\u002Fcommunity\u002Fissues\n- AIUI (agents on the glasses): https:\u002F\u002Fgithub.com\u002Fyodaos-project\u002FAIUI\n- Hi Rokid: [Google Play](https:\u002F\u002Fplay.google.com\u002Fstore\u002Fapps\u002Fdetails?id=com.rokid.sprite.global.aiapp), [App Store](https:\u002F\u002Fapps.apple.com\u002Fus\u002Fapp\u002Fid6749669942)\n","# Rokid Glasses from a phone (CXR-L)\n\nLast checked: 2026-11-09. Verification: docs-only (no hardware test yet). SDK names, roles and versions were read\nfrom Rokid's SDK overview ([developerdoc.rokid.com\u002Fsdk](https:\u002F\u002Fdeveloperdoc.rokid.com\u002Fsdk?lang=en); the English and\nChinese pages both show CXR-L 1.1.2 dated 2026-09-08), the Rokid Maven metadata, CocoaPods trunk, and the public\nsignatures of the published `client-l` 1.1.2 artifact. The snippets were written for this skill and not compiled here.\nRokid publishes no licence for CXR-L, so this skill only describes the API in its own words and links to Rokid.\n\n## Decide first\n\nRokid Glasses (retail model RV101) are display glasses: monochrome green micro-LED waveguides for both eyes,\nblack is transparent. They also have a camera, four microphones, speakers and a temple touchpad, and run\nYodaOS-Sprite, an Android-based OS (Android 12 by community measurement). The phone app **Hi Rokid** owns the\nBluetooth link. Your phone app never talks to the glasses directly with CXR-L: every call goes through Hi Rokid.\n\nRokid's SDKs (as of 2026-11-08, SDK overview page):\n\n| SDK | Runs on | Needs Hi Rokid | Access | Latest |\n|---|---|---|---|---|\n| **CXR-L** (`com.rokid.cxr:client-l`) | phone, Android + iOS | yes, it is the proxy | public | 1.1.2 (2026-09-08); iOS `RGCxrClient` 1.1.1 on CocoaPods trunk (1.1.1.1 in Rokid's sample project) |\n| CXR-M (`com.rokid.cxr:client-m`) | phone, Android | no, direct link | business only (`Glasses.BD@rokid.com`) | 1.1.0 on the portal, 1.2.2 on Maven |\n| CXR-S (`com.rokid.cxr:cxr-service-bridge`) | glasses, inside your glasses APK | used with CXR-L `CUSTOM_APP` | public, documented inside the CXR-L docs | 1.8 on Maven (2026-10-30) |\n| Bare-metal development | glasses (AOSP) | no | public | 1.0.0 (2026-06-05) |\n\nCXR-S has no entry of its own on the overview: it is mentioned only inside the CXR-M entry (\"can be used with the\non-device CXR-S SDK\") and in a CXR-L changelog line (1.0.3: glasses-side CXR-S integration merged into the CXR-L docs).\n\nThe overview says CXR-M \"cannot run alongside\" the Rokid AI App on the same phone, and it needs business onboarding.\nFor an app that ordinary owners install next to Hi Rokid, **CXR-L is the only option**.\n\n| You want | Use |\n|---|---|\n| Text on the glasses from your Android app, no glasses code | CXR-L `CUSTOM_VIEW` (this skill) |\n| Touchpad gestures, your own UI or anything beyond a text layout | CXR-L `CUSTOM_APP` plus your APK on the glasses (CXR-S), see [input.md](references\u002Finput.md) |\n| An app that lives on the glasses | Not this skill: [RealComputer\u002FGlassKit](https:\u002F\u002Fgithub.com\u002FRealComputer\u002FGlassKit) (`npx skills add RealComputer\u002FGlassKit`) or Rokid's bare-metal docs |\n| An agent inside Hi Rokid's Agent Store | Not this skill: Rokid AIUI, `npx skills add yodaos-project\u002Faiui` |\n| iPhone | CXR-L iOS (`RGCxrClient`, see [setup.md](references\u002Fsetup.md#ios)) or notifications |\n| Zero SDK work, Android or iPhone | A normal phone notification mirrored by Hi Rokid, [notifications.md](references\u002Fnotifications.md) |\n| Spoken output | Text-to-speech on the phone; the glasses play phone audio over Bluetooth |\n| Teleprompter, translation or AI scenes built by Rokid | CXR-M only (business contract); not reachable from CXR-L |\n\nIn the display-text ladder of the `smart-glasses` skill, Rokid Glasses support rung 1 (**Vendor SDK**, CXR-L),\nrung 4 (**phone notification mirrored by the companion app**) and rung 5 (**voice in the ear**).\n\nA newer model, Rokid Glasses 2 (480x380, 25 degree field of view), was announced in China on 2026-10-27 and goes on\nsale there on 2026-11-11, with no sale date outside China\n([Notebookcheck, 2026-10-28](https:\u002F\u002Fwww.notebookcheck.net\u002FRokid-Glasses-2-launch-with-upgraded-design-bigger-battery-and-Dolby-Audio-support.1435436.0.html),\npress). Whether CXR-L 1.1.2 drives it is unverified.\n\n## Setup in brief\n\nDetails, versions and the R8 rules: [references\u002Fsetup.md](references\u002Fsetup.md).\n\n```kotlin\n\u002F\u002F settings.gradle.kts: only the com.rokid.cxr group comes from Rokid's repository\ndependencyResolutionManagement {\n    repositories {\n        google()\n        mavenCentral()\n        exclusiveContent {\n            forRepository { maven { url = uri(\"https:\u002F\u002Fmaven.rokid.com\u002Frepository\u002Fmaven-public\u002F\") } }\n            filter { includeGroup(\"com.rokid.cxr\") }\n        }\n    }\n}\n\u002F\u002F app\u002Fbuild.gradle.kts\ndependencies { implementation(\"com.rokid.cxr:client-l:1.1.2\") } \u002F\u002F pin it, never a -SNAPSHOT\n```\n\n- `minSdk` 28. Native libraries ship for `arm64-v8a` and `armeabi-v7a` only, so creating a session on an x86\n  emulator throws `UnsatisfiedLinkError`. Catch `Throwable` around `create()`.\n- The library merges `\u003Cqueries>` for both Hi Rokid packages into your manifest.\n- The library's consumer R8 rules remove **your** `Log.d` and `Log.v` calls in release builds. Log glasses state with `Log.i`.\n- The user needs Hi Rokid installed, signed in, and the glasses connected **inside Hi Rokid** (pairing in Android\n  Bluetooth settings is not enough). client-l 1.1.2 checks for Hi Rokid versionCode 10110000 (1.11.0) or newer.\n- No app key, client secret or Rokid registration is documented for Android (as of 2026-11-08).\n- Rokid publishes no licence for the SDK: none in the docs, none in the client-l 1.1.2 POM (checked 2026-11-09).\n  Depend on the Maven artifact and do not copy SDK files,\n  `.aar` contents or Rokid's sample code into your repository; write your own calls against the documented API.\n\n## The core flow\n\n1. Check that Hi Rokid is installed and new enough.\n2. Ask Hi Rokid for permission (`requestAuthorization`). The first time Hi Rokid shows a consent screen; later calls\n   return silently. Call it again after every process start: it also decides whether the Global or the China\n   build of Hi Rokid serves the session.\n3. Create a `CUSTOM_VIEW` session with your initial view JSON, add callbacks **before** `connect(token)`.\n4. Wait for `onSessionStarted`. `connect()` returning does not mean the view is up.\n5. Replace text with `customViewUpdate`. Keep the latest text and re-send it on start and resume.\n6. Optional: `startAudioStream()` for the glasses microphone ([audio.md](references\u002Faudio.md)).\n7. `close()` the session when done. A closed session cannot reconnect; create a new one.\n\n```kotlin\nimport android.app.Activity\nimport android.content.Context\nimport android.content.Intent\nimport android.os.Handler\nimport android.os.Looper\nimport android.util.Log\nimport com.rokid.cxr.session.*\n\nclass RokidText(private val app: Context, private val onState: (String) -> Unit) {\n    private val manager = CxrSessionManager.getInstance(app.applicationContext)\n    private val main = Handler(Looper.getMainLooper())\n    private var token: String? = null          \u002F\u002F memory only, re-authorise after a process restart\n    private var session: CxrSession? = null\n    private var title = \"\"\n    private var body = \"\"\n\n    fun companionOk(): Boolean = manager.checkRokidAppCompatibility(app) is RokidAppStatus.Compatible\n\n    fun authorize(activity: Activity) {\n        \u002F\u002F MEDIA for the view; add GlassPermission.MICROPHONE if you stream audio.\n        \u002F\u002F unverified: which scope the custom view strictly needs; the docs list CAMERA, MICROPHONE, MEDIA, DEVICE_MANAGE\n        manager.requestAuthorization(activity, listOf(GlassPermission.MEDIA)) { r ->\n            main.post {\n                token = r.token?.takeIf { r.isSuccess && it.isNotEmpty() }\n                onState(if (token != null) \"authorized\" else \"auth_failed:${r.errorCode}\")\n            }\n        }\n        \u002F\u002F If neither Hi Rokid build passes the version check the callback may never come: time out yourself.\n    }\n\n    \u002F** Call from your Activity's onActivityResult for every request code while authorising. *\u002F\n    fun onActivityResult(resultCode: Int, data: Intent?) {\n        manager.parseAuthorizationResult(resultCode, data ?: Intent())\n    }\n\n    fun start() {\n        val t = token ?: return onState(\"not_authorized\")\n        if (session != null) return\n        val s = try {\n            manager.create(SessionConfig(\n                sessionType = SessionType.CUSTOM_VIEW,\n                aiInterceptMode = AiInterceptMode.ALLOW_WITH_PAUSE,\n                timeouts = SessionTimeouts(),\n                viewData = TextCard.view(title, body),   \u002F\u002F compact JSON, see display.md\n            ))\n        } catch (e: Throwable) {                         \u002F\u002F a session is still open, or no ARM native libs\n            Log.i(\"RokidText\", \"create failed: $e\"); onState(\"create_failed\"); return\n        }\n        session = s\n        s.addLifecycleCallback(lifecycle)                \u002F\u002F before connect\n        s.connect(t)\n        onState(\"connecting\")\n    }\n\n    fun show(newTitle: String, newBody: String) {\n        title = newTitle; body = newBody\n        val s = session ?: return\n        if (s.state != SessionState.Started) return      \u002F\u002F sent again in onSessionStarted \u002F onSessionResumed\n        val r = s.customViewUpdate(TextCard.update(title, body))\n        if (!r.isSuccess) Log.i(\"RokidText\", \"update ${r.code} ${r.message}\")\n    }\n\n    fun stop() {\n        session?.let { it.removeLifecycleCallback(lifecycle); it.close() }\n        session = null\n        onState(\"idle\")\n    }\n\n    private val lifecycle = object : ISessionLifecycleCbk {\n        override fun onConnectResult(success: Boolean, errorCode: SessionErrorCode?) {\n            if (success) return\n            if (errorCode == SessionErrorCode.NOT_AUTHENTICATED || errorCode == SessionErrorCode.TOKEN_EXPIRED) token = null\n            session = null\n            onState(\"connect_failed:$errorCode\")\n        }\n        override fun onSessionStarted() { onState(\"started\"); show(title, body) }\n        override fun onSessionPaused(reason: PausedReason) = onState(\"paused:$reason\")   \u002F\u002F AI_ASSIST, BT_DISCONNECTED\n        override fun onSessionResumed() { onState(\"started\"); show(title, body) }\n        override fun onSessionTerminating(reason: TerminatingReason, gracePeriodMs: Long) = onState(\"terminating:$reason\")\n        override fun onSessionClosed(reason: CloseReason) {\n            session = null\n            if (reason == CloseReason.LINK_LOST || reason == CloseReason.CHAIN_TORN) token = null\n            onState(\"closed:$reason\")                    \u002F\u002F GLASSES_EXIT = the wearer left your view\n        }\n    }\n}\n```\n\n`TextCard` builds the view JSON with `org.json`; it is in [display.md](references\u002Fdisplay.md). Lifecycle callbacks\narrive on the main thread; audio may not.\n\nWhat each state means for your app:\n\n| Event | Meaning | Do |\n|---|---|---|\n| `onConnectResult(false, NOT_AUTHENTICATED \u002F TOKEN_EXPIRED)` | token rejected | drop the token, `requestAuthorization` again |\n| `onConnectResult(false, BT_NOT_CONNECTED \u002F LINK_NOT_READY)` | glasses not connected in Hi Rokid | ask the user to open Hi Rokid |\n| `onSessionPaused(AI_ASSIST)` | the wearer started the Rokid assistant, your view is hidden | keep state, wait |\n| `onSessionResumed()` | view is back | re-send the latest text |\n| `onSessionClosed(GLASSES_EXIT)` | the wearer closed your view on the glasses | respect it; reopen only on a new user action or new content |\n| `onSessionClosed(LINK_LOST \u002F CHAIN_TORN)` | link broken, token void | re-authorise, then a new session |\n\nCapability calls before `Started` fail with `SESSION_NOT_STARTED`, during `Paused` with `SESSION_PAUSED`. Only one\nsession can be active per manager; `create()` throws while the old one is alive.\n\n## Showing text well\n\nSummary of [display.md](references\u002Fdisplay.md):\n\n- The view is a JSON tree of `LinearLayout`, `RelativeLayout`, `TextView` and `ImageView`; `id` goes inside `props`.\n  Send it as **compact single-line JSON**: indented JSON fails silently (a comment in Rokid's sample).\n- Updates are an array of `{\"action\":\"update\",\"id\":...,\"props\":{...}}` with only the changed keys.\n- Plan for a 480 px wide portrait area. Use black backgrounds and bright green text, `textSize` 16sp or more.\n- Coalesce updates (a few per second). Community reports on some Global Hi Rokid builds say `customViewUpdate`\n  returns success without redrawing; keep a \"recreate the session\" fallback behind a switch.\n\n## Input, microphone, iPhone\n\n- **Taps on a custom view do not reach the phone.** You do get pause, resume, close, wearing and screen events.\n  Full touchpad events need your own APK on the glasses. See [input.md](references\u002Finput.md).\n- **Glasses microphone:** `startAudioStream()` delivers PCM 16 kHz, mono, 16-bit, once the session is `Started` and\n  `GlassPermission.MICROPHONE` was granted. See [audio.md](references\u002Faudio.md).\n- **iPhone:** CXR-L iOS exists (`RGCxrClient` 1.1.1 on CocoaPods trunk; Rokid's sample project pins 1.1.1.1 from\n  Rokid's private specs source, or uses the source modules bundled in the sample), with the same JSON and state\n  model and an auth round trip through Hi Rokid by URL scheme. Notifications are the low-effort path. See\n  [setup.md](references\u002Fsetup.md#ios) and [notifications.md](references\u002Fnotifications.md).\n\n## Live captions\n\nWith the shared caption server of the `smart-glasses-live-captions` skill, the Rokid client:\n\n- sends `{\"type\":\"hello\",\"target\":\"rokid\",\"lines\":3,\"cols\":22}` (3 lines of 24sp text, about 22 Latin characters\n  each: an estimate, unverified on hardware; `examples\u002Flive-captions` uses the same numbers);\n- on each `caption` message replaces the body text, keeps only the last lines that fit, and sends at most one\n  `customViewUpdate` every 250 ms (also an estimate; the newest partial result wins); a caption marked\n  `\"repeat\":true` is shown again, not appended a second time;\n- on `clear` sends empty strings;\n- maps shared actions (`repeat`, `skip`, `hide`) to buttons in the phone app, because glasses taps do not arrive.\n\n## Testing without hardware\n\nThere is no CXR-L simulator (none found in the docs as of 2026-11-08). Put the class above behind your own interface,\nunit-test the JSON builders and the line fitting, and drive the rest of the app from a fake. The ARM-only native\nlibraries mean the real path cannot run on an x86 emulator. AIUI Studio's web simulator is for AIUI agents only.\n\n## Publishing\n\n- Android: ship through Google Play or any store like a normal app. The CXR-L docs describe no Rokid review and no\n  app key; the user grants access inside Hi Rokid. Community projects report a one-time \"unverified app\"\n  confirmation in Hi Rokid.\n- iOS: the CXR-L docs ask for a registered Rokid developer account and a bundle ID plus URL scheme; one community\n  iOS project reports that auth worked without registration. Unverified either way.\n- AIUI agents go through review in the Hi Rokid Agent Store; that is a different product path.\n\n## Pitfalls (most common first)\n\n1. Only `Log.i` survives release builds next to this SDK (consumer R8 rules).\n2. Re-authorise after each process start, even with a stored token, before `connect`.\n3. If both Hi Rokid builds are installed and the China build is new enough, the SDK picks the China build.\n4. Hi Rokid must keep running. Aggressive battery managers on some phones kill it and the link drops.\n5. `customViewUpdate` success does not prove a redraw on every Global build.\n6. The Maven `1.2.X-SNAPSHOT` (updated 2026-11-05) is a moving target; stay on 1.1.2.\n\nMore, with links: [references\u002Ftroubleshooting.md](references\u002Ftroubleshooting.md).\n\n## References\n\n- [setup.md](references\u002Fsetup.md) - Maven, artifacts, manifest, R8, Hi Rokid Global vs China, iOS, credentials.\n- [display.md](references\u002Fdisplay.md) - view JSON, text layout limits, update pacing, teleprompter-like flows.\n- [audio.md](references\u002Faudio.md) - glasses microphone stream, format, routing, speakers.\n- [input.md](references\u002Finput.md) - which events reach a phone app and how to get real touchpad events.\n- [notifications.md](references\u002Fnotifications.md) - the no-SDK fallback on Android and iPhone, timing quirks.\n- [troubleshooting.md](references\u002Ftroubleshooting.md) - real issues and fixes.\n\n## Official resources\n\n- SDK overview: https:\u002F\u002Fdeveloperdoc.rokid.com\u002Fsdk?lang=zh\n- CXR-L documentation (Chinese): https:\u002F\u002Fcustom.rokid.com\u002Fprod\u002Frokid_web\u002F84feb39f8ef141b0ad0326f902ab881f\u002Fpc\u002Fcn\u002Ffa92e9303bc848e6b4a20c062f2c792b.html\n- Maven repository: https:\u002F\u002Fmaven.rokid.com\u002Frepository\u002Fmaven-public\u002F\n- Community issue tracker: https:\u002F\u002Fgithub.com\u002Frokid\u002Fcommunity\u002Fissues\n- AIUI (agents on the glasses): https:\u002F\u002Fgithub.com\u002Fyodaos-project\u002FAIUI\n- Hi Rokid: [Google Play](https:\u002F\u002Fplay.google.com\u002Fstore\u002Fapps\u002Fdetails?id=com.rokid.sprite.global.aiapp), [App Store](https:\u002F\u002Fapps.apple.com\u002Fus\u002Fapp\u002Fid6749669942)\n",{"name":5,"license":15,"metadata":44,"description":7},{"version":45,"last-updated":46},"1.0.1","2026-11-09","main","f620abaff09061f8c8b1f1559dca3fdd031a32e5","plugins\u002Fhinty-eu\u002Fsmart-glasses-skills\u002Fskills\u002Fsmart-glasses-rokid",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":58,"prompt":68,"zipAvailable":69},[59,62,65],{"tool":60,"command":61},"npx","npx skills add hashgraph-online\u002Fawesome-codex-plugins --skill smart-glasses-rokid",{"tool":63,"command":64},"bunx","bunx skills add hashgraph-online\u002Fawesome-codex-plugins --skill smart-glasses-rokid",{"tool":66,"command":67},"pnpm","pnpm dlx skills add hashgraph-online\u002Fawesome-codex-plugins --skill smart-glasses-rokid","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Fhinty-eu\u002Fsmart-glasses-skills\u002Fskills\u002Fsmart-glasses-rokid\u002FSKILL.md",true,[71,77,81,85,89,93],{"path":72,"resourceType":73,"resourceTypeDesc":74,"sizeBytes":75,"sourceHtmlUrl":76},"references\u002Faudio.md","REFERENCE","参考文档",6010,"https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Fhinty-eu\u002Fsmart-glasses-skills\u002Fskills\u002Fsmart-glasses-rokid\u002Freferences\u002Faudio.md",{"path":78,"resourceType":73,"resourceTypeDesc":74,"sizeBytes":79,"sourceHtmlUrl":80},"references\u002Fdisplay.md",10074,"https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Fhinty-eu\u002Fsmart-glasses-skills\u002Fskills\u002Fsmart-glasses-rokid\u002Freferences\u002Fdisplay.md",{"path":82,"resourceType":73,"resourceTypeDesc":74,"sizeBytes":83,"sourceHtmlUrl":84},"references\u002Finput.md",5908,"https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Fhinty-eu\u002Fsmart-glasses-skills\u002Fskills\u002Fsmart-glasses-rokid\u002Freferences\u002Finput.md",{"path":86,"resourceType":73,"resourceTypeDesc":74,"sizeBytes":87,"sourceHtmlUrl":88},"references\u002Fnotifications.md",7592,"https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Fhinty-eu\u002Fsmart-glasses-skills\u002Fskills\u002Fsmart-glasses-rokid\u002Freferences\u002Fnotifications.md",{"path":90,"resourceType":73,"resourceTypeDesc":74,"sizeBytes":91,"sourceHtmlUrl":92},"references\u002Fsetup.md",10657,"https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Fhinty-eu\u002Fsmart-glasses-skills\u002Fskills\u002Fsmart-glasses-rokid\u002Freferences\u002Fsetup.md",{"path":94,"resourceType":73,"resourceTypeDesc":74,"sizeBytes":95,"sourceHtmlUrl":96},"references\u002Ftroubleshooting.md",7896,"https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Fhinty-eu\u002Fsmart-glasses-skills\u002Fskills\u002Fsmart-glasses-rokid\u002Freferences\u002Ftroubleshooting.md",[98,106,113,120,146,170],{"skillNo":99,"name":100,"nameZh":6,"description":101,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":102,"categories":103,"keywords":104,"publishedAt":105},"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.","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":107,"name":108,"nameZh":6,"description":109,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":110,"categories":111,"keywords":112,"publishedAt":105},"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":114,"name":115,"nameZh":6,"description":116,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":117,"categories":118,"keywords":119,"publishedAt":105},"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":121,"name":122,"nameZh":6,"description":123,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":124,"categories":125,"keywords":126,"publishedAt":39},"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",[],[127,128,129,130,131,132,133,134,135,136,137,28,138,139,140,141,142,143,144,145],"search","deja search","never","error","ready","memory","re","decide","fix","design","debugging","you","done","reviewer","io","change","cli","merge","past",{"skillNo":147,"name":148,"nameZh":6,"description":149,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":150,"categories":151,"keywords":152,"publishedAt":39},"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",[],[153,154,155,141,156,157,158,159,160,161,162,163,164,165,132,166,33,167,168,169],"deja reflect","reflect","review","with","record","github","next","https","node","Rules","decisions","brew","remember","project rules","session","end","reflection",{"skillNo":171,"name":172,"nameZh":6,"description":173,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":174,"categories":175,"keywords":187,"publishedAt":39},"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",[176,181,184],{"categoryNo":177,"categoryName":178,"taxonomyType":179,"taxonomyTypeDesc":180},"01JBSEEDCAT000000000000016","图像与多媒体","SCENARIO","使用场景",{"categoryNo":182,"categoryName":183,"taxonomyType":179,"taxonomyTypeDesc":180},"01JBSEEDCAT000000000000023","Skill与智能体开发",{"categoryNo":185,"categoryName":186,"taxonomyType":179,"taxonomyTypeDesc":180},"01JBSEEDCAT000000000000010","后端与接口",[172,188,189,190,191,192,193,33,194,133,195,196,197,198,28,199,200,201,202,203],"URL","Video","short-form","standalone","PDF","viral","tiktok","short","social","MCP","song","image","mcp server","schedule","api","publish"]