Build an app for Brilliant Labs smart glasses (Halo or Frame) with this SDK, in Python, Flutter or WebBluetooth/TypeScript.

BSD-3-ClauseAuto-check passedMobile

Install Glasses App

skills CLI
$ npx skills add brilliantlabsAR/brilliant_sdk --skill glasses-app -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install brilliantlabsAR/brilliant_sdk glasses-app --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/brilliantlabsAR/brilliant_sdk.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/glasses-app .claude/skills/glasses-app && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
glasses-app
GitHub stars
115
Token cost
~1.2k tokens
SKILL.md length
469 words
Files
5 (incl. references)
Skills in repo
1
Repo updated
First seen
Licence
BSD-3-Clause

At a glance

Build an app for Brilliant Labs smart glasses (Halo or Frame) with this SDK, in Python, Flutter or WebBluetooth/TypeScript.

  • Works in 4 steps: Parity: device-side Lua is triplicated… → Flutter assets: every .lua file the app… → Errors on device: wrap the Lua app loop… → …
  • Debugging a host program + device-side Lua app pair
  • SKILL.md covers Choose the path, The canonical lifecycle…, Message codes and Halo vs Frame (both supported,…, plus 2 more sections
  • Calls pip

What it does

Glasses App is an agent skill from brilliantlabsAR/brilliant_sdk. Build an app for Brilliant Labs smart glasses (Halo or Frame) with this SDK, in Python, Flutter or WebBluetooth/TypeScript. Use when writing, extending or debugging a host program + device-side Lua app pair, or when asked to display something on / read sensors from the glasses.

Its SKILL.md is about 1.2k tokens, which your agent loads only when the skill is triggered. The skill folder holds 5 other files, including reference files (for example `references/flutter-quickstart.md`, `references/frame-api.md` and `references/python-quickstart.md`).

It sits in Mobile, covering Cross-platform mobile apps. It works with Lua, Python, Flutter and TypeScript. The repository describes itself as: All Brilliant SDKs in one monorepo. The licence is BSD-3-Clause.

When your agent uses it

  • Debugging a host program + device-side Lua app pair
  • Asked to display something on / read sensors from the glasses

Example prompts

  • “/glasses-app”

Requirements

  • Python 3

Workflow steps

4 steps, taken from the first numbered list in SKILL.md.

  1. Parity: device-side Lua is triplicated across the three SDKs and must
  2. Flutter assets: every .lua file the app uploads must be listed under
  3. Errors on device: wrap the Lua app loop in pcall and print(err) —
  4. Memory: the VM has ~30 KB free; collectgarbage('collect') after

What it can do on your machine

Read from SKILL.md and the folder at commit 2ec3f66. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • pip

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Links to these hosts (documentation or services it may open):

    • docs.brilliant.xyz

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Glasses App loads about 1.2k tokens when it runs, and up to ~3.9k if it reads all its reference files. Until then it costs about 73 tokens; SKILL.md has 469 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~73
When it runs · the whole SKILL.md, loaded when a task matches
~1.2k
With references · SKILL.md plus every file in references/, read only if the agent opens them
~3.9k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from brilliantlabsAR/brilliant_sdk at commit 2ec3f66, republished under its BSD-3-Clause licence (© brilliantlabsAR). 469 words, ~1,220 tokens.

Download SKILL.mdSave it as .claude/skills/glasses-app/SKILL.md (or your agent's skills folder). This skill also uses 4 other files; get the full folder from GitHub.
name
glasses-app
description
Build an app for Brilliant Labs smart glasses (Halo or Frame) with this SDK, in Python, Flutter or WebBluetooth/TypeScript. Use when writing, extending or debugging a host program + device-side Lua app pair, or when asked to display something on / read sensors from the glasses.

Building a glasses app

Every app is two programs: a host program (Python / Dart / TypeScript) and a device-side Lua app running in the glasses' Lua 5.4 VM. They exchange messages over BLE, identified by a single-byte message code that must match on both sides. Get this pairing right and everything else is bookkeeping.

Choose the path

  • Just poking the device (show text, read battery, run a Lua snippet)? Use the *_ble layer alone and send raw Lua to the REPL — no Lua app needed. See python/packages/brilliant_ble/examples/hello_world.py.
  • A real app (camera, audio, sprites, IMU, interaction)? Use the *_msg layer and the lifecycle below.
  • Copy an existing example rather than starting blank — indexes: python/packages/brilliant_msg/examples/EXAMPLES.md, flutter/packages/simple_brilliant_app/example/EXAMPLES.md, webbluetooth/packages/brilliant-msg/example/EXAMPLES.md.

Per-SDK minimal working apps with file-by-file explanations:

On-device API: references/frame-api.md (condensed frame.* reference and Halo/Frame differences).

The canonical lifecycle (identical in all SDKs; camelCase in Dart/TS)

connect()
upload_stdlua_libs(['data', <per-message-type libs>])   # e.g. 'plain_text', 'camera'
upload_frame_app('lua/<name>_frame_app.lua')            # your device-side app
attach_print_response_handler()                         # see device print()/errors
start_frame_app()                                       # runs it; blocks until it prints ready
send_message(code, msg.pack()) / attach Rx receivers    # the app conversation
stop_frame_app(); disconnect()

The data Lua lib is always needed: it reassembles BLE-chunked messages into data.app_data[code] (or raw items) on the device. Each Tx*/Rx* message class has a same-named Lua lib that parses/renders it — upload the ones you use. While the frame app runs, the REPL is busy: no more raw send_lua() without a break signal.

Message codes

Single byte, chosen per app (examples use e.g. 0x0a text, 0x0d camera, 0x0e control codes). Host send_message(0x0a, TxPlainText(...).pack()) must match if flag == 0x0a (or data.app_data[0x0a]) in the Lua app. Small control signals use TxCode; responses stream back via Rx* receivers attached to the data channel.

Halo vs Frame (both supported, auto-detected)

Branch on frame.HARDWARE_VERSION in Lua; BrilliantDeviceType on the host.

FrameHalo
Display640×400 rectangular256×256 round
Draw modelbuffered — call frame.display.show()draws immediately — no show()
App start—call frame.display.power_save(false)
Inputtapbutton + tap kinds ('single'/'double'/'triple'), RxClick (Dart/TS)
Audio out—speaker + frame.sound sfxr presets
TextTxPlainText, TxTextSpriteBlocksame, plus TxTextPage with CircularTextLayout (Dart/TS)

Full table: https://docs.brilliant.xyz/halo/halo-sdk-lua/

Show full SKILL.md (165 more words)Show less

Verify before hardware

Run the device-side Lua in the emulator first (pip install halo-emulator) — firmware-faithful, works for the Lua half of Flutter/TS apps too since the Lua is identical across SDKs:

bash
halo-emulator ./my_app_lua_dir/    # REPL + display window

or drive it from a pytest (inject taps/BLE/mic data, assert on get_bluetooth_sent() / display state) — test-writing API in python/packages/halo_emulator/README.md.

Rules that bite

  1. Parity: device-side Lua is triplicated across the three SDKs and must stay byte-identical (tools/check_lua_parity.py); SDK feature changes are expected to land in all three implementations (see root AGENTS.md for known asymmetries before assuming an API exists in your language).
  2. Flutter assets: every .lua file the app uploads must be listed under assets: in pubspec.yaml (including packages/brilliant_msg/lua/*.min.lua).
  3. Errors on device: wrap the Lua app loop in pcall and print(err) — with the print handler attached, that's your only stderr. A break signal arrives as an error in that pcall.
  4. Memory: the VM has ~30 KB free; collectgarbage('collect') after handling large messages, prefer .min.lua libs and progressive/sliced sprites (TxImageSpriteBlock) over big ones.

© brilliantlabsAR, BSD-3-Clause. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 4 other files (references) in .claude/skills/glasses-app of brilliantlabsAR/brilliant_sdk.

  • SKILL.md
  • references/flutter-quickstart.md
  • references/frame-api.md
  • references/python-quickstart.md
  • references/webbluetooth-quickstart.md

Open the folder on GitHubat commit 2ec3f66

Compare with similar skills

Glasses App next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Glasses App compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Glasses App this skillbrilliantlabsAR/brilliant_sdk115—~1.2kAutomated safety check: PassBSD-3-Clause
Core API Changelibnativeapi/nativeapi164—~2.5kAutomated safety check: PassMIT
MCP Debuggerdebugmcp/mcp-debugger173—~4.1kAutomated safety check: PassMIT
Vicoa CLIvicoa-ai/vicoa504—~5.8kAutomated safety check: PassAGPL-3.0
Flutter UI Probelibnativeapi/nativeapi164—~988Automated safety check: PassMIT
Implement Flet Extensionflet-dev/flet17k—~2.1kAutomated safety check: PassApache-2.0

Similar skills

  • Core API Change

    libnativeapi/nativeapi

    Carry a change to the C++ public API in core/ all the way downstream — design check, header edit, six platform implementations, C ABI + Rust/Dart/C/JS/Python regeneration, per-binding verification…

    164 GitHub stars~2.5k tokensUpdated today
    MobileAuto-check passed
  • MCP Debugger

    debugmcp/mcp-debugger

    A skill your agent uses when investigating a bug, failing test, or unexpected runtime behavior and the mcp-debugger MCP server is available — drives real step-through debuggers (breakpoints, stack…

    173 GitHub stars~4.1k tokensUpdated yesterday
    DevelopmentAuto-check passed
  • Vicoa CLI

    vicoa-ai/vicoa

    Operate Vicoa from the terminal with the vicoa CLI — list and inspect agent sessions (and their transcripts) across machines, start/resume/stop sessions, manage the task backlog with projects and…

    504 GitHub stars~5.8k tokensUpdated today
    MobileAuto-check passed
  • Flutter UI Probe

    libnativeapi/nativeapi

    Find where widgets are on screen in a running debug Flutter desktop app (macOS, Windows, Linux) by reading its render tree through the VM service — no hard-coded coordinates, no screenshots, works…

    164 GitHub stars~988 tokensUpdated today
    MobileAuto-check passed
  • Implement a new Flet extension/control that wraps a third-party Flutter package end-to-end, including dependency selection, version pinning, compatibility checks, Python/Flutter integration, docs…

    17k GitHub stars~2.1k tokensUpdated yesterday
    MobileAuto-check passed
  • Test Flet Apps Dev

    flet-dev/flet

    A skill your agent uses when testing or debugging Flet apps in maintainer/contributor development mode with local Python package sources and the local Flutter client, including web, desktop…

    17k GitHub stars~1.3k tokensUpdated yesterday
    MobileAuto-check passed

Questions about Glasses App

What does Glasses App do?

Build an app for Brilliant Labs smart glasses (Halo or Frame) with this SDK, in Python, Flutter or WebBluetooth/TypeScript. Glasses App is an agent skill from brilliantlabsAR/brilliant_sdk. Build an app for Brilliant Labs smart glasses (Halo or Frame) with this SDK, in Python, Flutter or WebBluetooth/TypeScript.

When should I use Glasses App?

Glasses App fits situations like: debugging a host program + device-side Lua app pair; asked to display something on / read sensors from the glasses.

How do I install Glasses App in Claude Code?

Run `npx skills add brilliantlabsAR/brilliant_sdk --skill glasses-app -a claude-code`. Or copy the skill folder (.claude/skills/glasses-app in brilliantlabsAR/brilliant_sdk) into .claude/skills/glasses-app in your project. Claude Code loads it when a task matches its description.

How do I install Glasses App in Codex?

Run `npx skills add brilliantlabsAR/brilliant_sdk --skill glasses-app -a codex`. Or copy the skill folder (.claude/skills/glasses-app in brilliantlabsAR/brilliant_sdk) into .agents/skills/glasses-app in your project. Codex loads it when a task matches its description.

Can I use Glasses App in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add brilliantlabsAR/brilliant_sdk --skill glasses-app -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/glasses-app, .gemini/skills/glasses-app, .github/skills/glasses-app and .opencode/skills/glasses-app in your project.

What does Glasses App need to run?

Going by SKILL.md and its folder, Glasses App needs the command-line tools its instructions call (pip). Our summary lists: Python 3.

Does Glasses App access the network?

SKILL.md names 1 domain. As links in the text: docs.brilliant.xyz. This is read from the text; nothing was executed.

Is Glasses App safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Glasses App use?

Glasses App is published under the BSD-3-Clause licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Glasses App use?

About 1.2k tokens (SKILL.md is roughly 4.9k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 2.6k tokens, read only when the agent opens those files.

What are the alternatives to Glasses App?

Skills that share tags, products or a category with Glasses App: Core API Change (libnativeapi/nativeapi, 164 stars), MCP Debugger (debugmcp/mcp-debugger, 173 stars), Vicoa CLI (vicoa-ai/vicoa, 504 stars) and Flutter UI Probe (libnativeapi/nativeapi, 164 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Glasses App?

brilliantlabsAR (a GitHub organization) maintains it in brilliantlabsAR/brilliant_sdk, which has 115 GitHub stars. The repository was last updated on October 6, 2026.

Source: brilliantlabsAR/brilliant_sdk on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.