Config reference
A brand is one config.yaml under brands/<id>/. Anything you leave out is simply off. The builder writes this file for you, and this page explains every section it writes.
brand:identity on the shell↓
device:what ships in firmware↓
moods:numbers to faces↓
alerts:when to interrupt you↓
brand
Identity. The id is the folder name under brands/, everything else lands on the device.
namethe title on the boot screenmascotwhat the pet calls itselftaglineunder the namewebsiteandlogoon the about screen
brand: id: gooshi name: TAMAGOOSHI mascot: GOOSHI tagline: keep it alive website: gooshi.me logo: logo.png
device
What ships in firmware. Every subsection is an enabled list plus a default, and the image only carries what the brand lists. Transport is ble: gatt.
Themes are palettes, and theme.custom takes your own three colors. Try one, default is slate.
The same shape covers typeface, mascot packs, games, and apps. agent: muse pairs the device with Muse, persona bakes your name into the status bar and an about screen (long-press A on home), and timezone sets the clock.
Mascots can be custom too. mascot.custom takes any transparent PNG next to the config, and the mixer builds one from parts. persona.avatar uses the same 6-expression strip. Set mascot: true to also offer it in mascot selection.
moods & alerts
Moods map metrics to the face. A rule is a condition plus a mood, the highest priority match wins, and with no match the device falls back to mascot.mood. Try one.
When signups drop under 100, the mood turns
device: moods: - {when: {metric: signups, op: lt, value: 100}, mood: sick, priority: 10}
Operators are lt, lte, gt, gte, eq, and ne. Alerts use the same condition but page you instead: a severity, a title, and an acknowledgement on the device.
device: alerts: - {id: cpu-high, when: {metric: cpu, op: gt, value: 90}, severity: critical, title: "CPU is pegged", source: hub}
Severities are info, warning, and critical. Ready to write yours? The builder has a form for all of this.