Milo BRAND + INTERFACE SYSTEM V1.0
26Sound + Haptics

Silent by default.

Sound is the last signal, not the first. Milo speaks with type, state and motion; a cue is added only where the eye may be elsewhere — a run that needs you, a long run finishing, a failure, a Level 4 interruption. One material, eight events, never more than four a minute, and nothing that a visible state does not already say.

CUES 8 · 4 SOUNDEDMATERIAL ONE STRUCK OBJECTBUDGET 4 / MINUTESOURCE tokens/sound.json
Policy26.1

Nothing carries information by sound alone.

Every cue pairs with a row state, a toast or a pill. Turn sound off and nothing is lost; that is the test.

DefaultSilent. Cues are opt-in per event; the four sounded cues ship on, the rest never sound.
BudgetFour cues a minute. The fifth is suppressed, and the visible state still shows.
ReducedSystem Reduce Sound or reduced motion → haptics only. Do Not Disturb → nothing.
NeverAmbient loops, typing sounds, success chimes on routine work, sound while you are speaking.
The material

A single struck object: short, dry, mid-pitched — a pencil on paper, a print block registering. No synth pads, no bells, no rising arpeggios. The prototype synthesises it (Web Audio, triangle through a bandpass, 40 ms); production records one sample at 48 kHz mono and uses it everywhere. Loudness −18 LUFS integrated, so it sits under speech.

One tick · 40 ms
Two ticks · 90 ms apart
Cues26.2

Eight events. Four make a sound.

Play them. Each button fires the prototype cue and the haptic pattern the platform would use; the budget counter shows the four-a-minute rule working.

Cue table — event, sound, haptic, visible pair, default
cueeventsoundhapticvisible pairdefault
needs-youa run stops for approval or inputone tick, 40 mslight◉ Needs you row + notificationon
done-longa run longer than 2 minutes finishestwo ticks, 90 ms apartmedium✓ Done + toaston
errora run failsone low tick, 60 msrigid✕ Failed row + toaston
permissionLevel 4 interruption opensone tickmediumconfirmationon
voice-openvoice pill appearsnonelightpillon
voice-donevoice intent resolvednonelightpill ✓on
quick-entryquick entry submittednoneselectiontoaston
routinetask completed by hand, reorder, tab changenonenonestatenever
Platforms26.3

Same eight cues, three players.

macOS plays the bundled sample and uses NSHapticFeedbackManager; Omarchy plays it through PipeWire and has no haptics; the web prototype synthesises it.

Platform mapping and the open item
macOSNSSound with tick.wav; NSHapticFeedbackManager .levelChange for light, .alignment for medium; rigid is two .alignment pulses.
Omarchypw-play (or canberra-gtk-play) with the bundled wav; mako notification carries the sound flag; no haptics.
Web prototypesite/js/26-sound.js: Web Audio after a user gesture; navigator.vibrate where it exists.

Open: the recorded sample (assets/sound/tick.wav) is not yet cut; V1 ships the synthesised prototype. Everything else on this page is specified in tokens/sound.json.