Display Glasses With Jetpack Compose GlimmerSAFE
Overview
An agent skill published by android.
6c14d01899d6OBSERVED · 2026-10-26What it tells the agent
The instruction file, verbatim from the audited commit — this is the text the model reads, and the surface the audit's instruction layer examines. Quoted here so you can judge it without cloning anything.
---
name: display-glasses-with-jetpack-compose-glimmer
description: Provides guidelines for developing projected Android XR apps for display
glasses using the Jetpack Compose Glimmer UI toolkit. Covers Glimmer design principles,
workflows, and interaction models for the glasses form factor. Use this skill to
build an Android XR Augmented Experience app with Jetpack Compose Glimmer. Don't
use for audio-only AI glasses without a display, non-glasses Android XR headsets
(spatial panels or 3D volumes with Jetpack Compose for XR), or phone and tablet
Material 3 UIs.
license: Complete terms in LICENSE.txt
metadata:
author: Google LLC
last-updated: '2026-10-22'
keywords:
- Jetpack Compose Glimmer
- display glasses
- Projected Activity
- GlimmerTheme
- Additive Display
- Android XR - Augmented Experiences
---
## Glossary
| Term | Definition |
|---|---|
| **Intelligent eyewear** | Hands-free eyewear with speakers, camera, and microphone (audio-only or display glasses). |
| **Display glasses** | Eyewear with a private in-lens display for glanceable visuals that pair with audio. |
| **Jetpack Compose Glimmer** | Compose UI toolkit providing components, theming, and focus behavior for display glasses. |
| **Projected activity** | An `Activity` running on a phone host whose UI and input are projected to connected eyewear. |
| **Projected device** | An XR eyewear device connected to an Android host phone that projects app content to it. |
| **GlimmerTheme** | Root styling provider for `GlimmerColors`, `GlimmerTypography`, and `GlimmerShapes`. |
| **Additive display** | Display where black (`#000000`) renders as 100% transparent by adding light to the scene. |
| **Augmented experiences** | Lightweight, additive Android XR experiences that help users while they're on the go. |
| **Visual angle** | Perceived size in XR; minimum readable text is 0.6 degrees (about 18sp at 1 m). |
## Prerequisites
- Target `compileSdk` 37 or higher (`compileSdk = 37` or `compileSdk { version
= release(37) }`). Update `compileSdk` to 37 if lower.
- When adding dependencies, follow the instructions in [Create your first
activity for intelligent eyewear](https://developer.android.com/develop/xr/jetpack-xr-sdk/ai-glasses/first-activity):
- `androidx.xr.glimmer:glimmer` (minimum `1.0.0-alpha21`, or catalog alias `libs.androidx.glimmer`)
- `androidx.xr.glimmer:glimmer-google-fonts` (minimum `1.0.0-alpha21`, or catalog alias `libs.androidx.glimmer.google.fonts`)
- `androidx.xr.projected:projected` (minimum `1.0.0-alpha13`, or catalog alias `libs.androidx.xr.projected` or `libs.androidx.projected`)
- Check `gradle/libs.versions.toml` first; if catalog entries exist, use them in `app/build.gradle.kts` and verify their versions meet the minimums. Never guess `1.0.0-alpha01` for `glimmer-google-fonts`.
## Core constraints and limitations
- **Don't** : Use `MaterialTheme` or Material 3 components (`androidx.compose.material3.*`) inside Projected Activities or Glimmer UI.
- **Do** : Use `GlimmerTheme` and Glimmer components (`androidx.xr.glimmer.*`).
- **Do** : Always pass `createGoogleSansFlexTypography()` from `androidx.xr.glimmer.googlefonts` as `typography` in `GlimmerTheme`.
- Specific hardware device models or unique capabilities aren't detailed.
- **Elevation** : Material 3 shadow or elevation modifiers aren't supported. Use `ShadowScope` or `Depth` tokens from Jetpack Compose Glimmer.
- **Typography limits**: Minimum readable text size is 18sp (0.6°). Avoid "Thin" or "Hairline" weights, which shimmer on additive lenses.
## 1. Set up dependencies
- **Set up projected activity** : When creating a projected activity, follow
[Create your first activity for intelligent eyewear](https://developer.android.com/develop/xr/jetpack-xr-sdk/ai-glasses/first-activity) and
[projectedcontext-source.md](references/projectedcontext-source.md). Set `android:requiredDisplayCategory` to
`android.hardware.display.category.XR_PROJECTED` in `AndroidManifest.xml`:
```xml
<activity
android:name="com.example.xr.projected.ProjectedMainActivity"
android:exported="true"
android:requiredDisplayCategory="android.hardware.display.category.XR_PROJECTED">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.XR_PROJECTED_LAUNCHER"/>
</intent-filter>
</activity>
```
<br />
- **Mobile app integration** : In the host phone app, add a button with
`Text("Launch on Glasses")`. Observe
`ProjectedContext.isProjectedDeviceConnected(context, coroutineContext)`
using
`collectAsStateWithLifecycle(initialValue = false)` to set the button's
`enabled` state so it's disabled when glasses are disconnected. When
clicked, launch `GlassesMainActivity` on the glasses display using
`ProjectedContext.createProjectedActivityOptions(context).toBundle()` as
shown in the following snippet:
```kotlin
val options = ProjectedContext.createProjectedActivityOptions(context)
val intent = Intent(context, ProjectedMainActivity::class.java)
context.startActivity(intent, options.toBundle())
```
<br />
- **UI library and font** : When declaring the Glimmer, Google Fonts, and
Projected artifacts in `app/build.gradle.kts`, follow [Declaring Jetpack
Compose Glimmer Dependencies](https://developer.android.com/jetpack/androidx/releases/xr-glimmer), and follow
[glimmersansflextypography-source.md](references/glimmersansflextypography-source.md) when configuring Google Sans Flex
using `createGoogleSansFlexTypography`.
- **Theming, initial focus, and black background** : On additive displays, pure
black (`Color.Black` or `GlimmerTheme.colors.background`) renders as 100%
transparent. In `onCreate` (annotated with
`@OptIn(ExperimentalComposeUiApi::class)`), set
`ComposeUiFlags.isInitialFocusOnFocusableAvailable = true`
(`androidx.compose.ui.ComposeUiFlags`), wrap content in
`GlTrust audit
SAFEgrade B · trust 89/100 Nothing in the source contradicts what it says it does. Grade A is reserved for packages that have also passed the behavioural sandbox.
| Layer | What it checks | Result |
|---|---|---|
| L0 | Provenance & inventory | PASS |
| L1 | Static analysis of the code | NA |
| L2 | Instruction surface (what it tells the agent) | PASS |
| L3 | Class-specific surface | PASS |
| L4 | Behavioural (sandbox) | SKIPPED |
What the source does
- Filesystem
- none-observed
- Network
- none-observed
- Shell
- none-observed
- Dependencies
- pinned
- Secrets in source
- none-found
Findings (0)
No findings outside the package's declared scope.
Gates applied: no_behavioural_pass.
6c14d01899d6full audit observations/trust-audit/skill/android__display-glasses-with-jetpack-compose-glimmer.json · Report an issue / request a re-scanAudit history
Every audit this skill has had.
| Date | Source | Verdict | Grade | Score | Change |
|---|---|---|---|---|---|
| 2026-10-26 | 6c14d01899d6 | SAFE | B | 89 | first audit |
Questions
Is display-glasses-with-jetpack-compose-glimmer — android/skills safe to install?
The audit found nothing in the source that contradicts what it says it does, and graded it B (89/100). Grade A is held back for packages that have also passed a sandboxed behavioural run, which is why a clean skill reads B.
What can display-glasses-with-jetpack-compose-glimmer — android/skills access on my machine?
The audit observed no filesystem, network or shell use at all in its source.
How current is this page?
The grade is for one exact copy of the source (6c14d01899d6), read on 2026-10-26. The repository is watched, and a new audit runs when it changes — this is the first audit.
Add this badge to your README
Shows this page's audit result and links back to it. It updates when the audit does.
[](https://modelsatlas.com/skills/android/display-glasses-with-jetpack-compose-glimmer/)
Not your listing, or something out of date? Claim or update your listing.