From everything-evenhub
Scaffolds Even Hub G2 projects by cloning starter templates (minimal Vite+TS, asr mic pipeline, image container, text-heavy paginated reader) via degit. Use for pre-wired app setups instead of blank Vite.
npx claudepluginhub even-realities/everything-evenhub --plugin everything-evenhubThis skill uses the workspace's default tool permissions.
Scaffold a new Even Hub G2 project by cloning one of the starter templates from [`even-realities/evenhub-templates`](https://github.com/even-realities/evenhub-templates) via `degit`. Unlike `/quickstart` (which bootstraps a blank Vite app from scratch), this skill drops the user into a template that already has the wiring they asked for — mic pipeline, image container, paginated reader, etc.
Scaffolds Even Hub G2 smart glasses apps from scratch with Vite, TypeScript, SDK, CLI, simulator, and app manifest. Use for new projects or bootstrapping development.
Scaffolds projects with directory structures, configs, dependencies, linting, testing, CI/CD basics, and docs for frontend, backend, mobile, CLI, libraries, and monorepos.
Guides creating reusable angreal project templates for `angreal init`, covering angreal.toml config, Tera templating, variables, prompts, validation, and publishing.
Share bugs, ideas, or general feedback.
Scaffold a new Even Hub G2 project by cloning one of the starter templates from even-realities/evenhub-templates via degit. Unlike /quickstart (which bootstraps a blank Vite app from scratch), this skill drops the user into a template that already has the wiring they asked for — mic pipeline, image container, paginated reader, etc.
| Template | What's inside |
|---|---|
minimal | Bare Vite + TS + SDK scaffold. Shows "Hello from G2!" on the glasses. |
asr | Mic → STT pipeline with companion UI, double-tap exit. STT provider is a blank stub — user picks their own. |
image | ImageContainerProperty demo with test-pattern bitmap, tap-to-redraw, event-capture layer pattern. |
text-heavy | Long-form reader: pixel-accurate pagination via @evenrealities/pretext (measures each paragraph at the glyph widths LVGL uses on G2), flicker-free page turns via textContainerUpgrade, tap/swipe navigation. |
$ARGUMENTSArguments can arrive in any order and in many spellings. Be lenient — this is loose pattern matching, not formal parsing.
$ARGUMENTS on whitespace. Separate tokens starting with -- (or -) from non-flag tokens.with- or with prefix, strip internal dashes and underscores. Examples that must all map to the same thing:
--asr, --with-asr, --withasr, --ASR, -asr, --with_asr → asr--image, --with-image, --withimage, --img → image--text-heavy, --textheavy, --with-text-heavy, --text, --reader → text-heavy--minimal, --min, --blank, --base, --empty → minimalimage beats image-something). If nothing matches confidently, default to minimal and tell the user which template you picked and why.-, strip anything that isn't [a-z0-9-]. If the user provided no non-flag tokens, default to my-<template>-app (e.g. my-asr-app).package_id slug from the project name by removing hyphens (e.g. my-asr-app → myasrapp). The template already ships an app.json with a placeholder package_id — edit it to com.example.<slug> after degit completes.If the user passes no flags at all (just a project name or nothing), default to minimal and mention the other options so they can rerun with the flag they actually want.
Apply the interpretation rules above. Print a one-line summary before running: Scaffolding <template> template → <project-dir>/. If you defaulted to minimal because the flag was ambiguous or missing, say so explicitly.
npx --yes degit even-realities/evenhub-templates/<template> <project-dir>
This pulls just the chosen template directory (no git history). Use --yes so npx doesn't prompt on first run.
Edit these files to replace placeholders with the user's project name:
package.json — change "name" from the template default (e.g. "evenhub-asr") to the slugified project name.app.json — change "package_id" to com.example.<slug> and "name" to a human-readable form of the project name.cd <project-dir> && npm install
asr → Tell the user:
.env.example to .env.local and paste their STT provider's API key into VITE_STT_API_KEY.src/asr/stt.ts and implement startSttStream() for their chosen provider (Deepgram, AssemblyAI, Whisper, Soniox, self-hosted — their call).network permission to app.json with the provider's hosts in the whitelist array once they pick one. evenhub pack rejects an empty whitelist, which is why the template ships without it.image → Tell the user they can either keep the test-pattern generator or swap makeTestPattern for loadImageBytes in src/image/renderer.ts once they have a real asset. Remind them preprocessing is optional (the SDK handles greyscale conversion).text-heavy → Tell the user to replace src/sample.ts with their actual content. Pagination is driven by the container's pixel box via @evenrealities/pretext — if they resize the body, edit BODY_W / BODY_H / BODY_PAD at the top of src/main.ts and pagination re-fits automatically (no char-budget to tune).minimal → No follow-up.cd <project-dir>
npm run dev # start Vite dev server
npm run simulate # desktop simulator
npx @evenrealities/evenhub-cli qr --url http://<your-ip>:5173 # QR for real glasses
npx @evenrealities/evenhub-cli pack # build .ehpk for distribution
Point the user at the template's own README.md for deeper specifics (it's the authoritative doc).
--withasr, --asr, --with-ASR — all of these should land on the same template. Normalize aggressively before matching.even-realities/evenhub-templates instead./quickstart for a truly blank slate. /template --minimal is close but still ships with an index.html + zoom-lock CSS + our preferred tsconfig; /quickstart runs npm create vite@latest and wires the SDK in fresh.| Property | Value |
|---|---|
| Display | 576 x 288 px, 4-bit greyscale (16 shades of green) |
| Microphone | PCM s16le @ 16 kHz mono |
| Camera | None |
| Speaker | None |
| Input | Touchpad on the temple, optional R1 ring |
Interpret $ARGUMENTS, pick the template, scaffold it, apply template-specific follow-ups, and print next steps: $ARGUMENTS