Milo BRAND + INTERFACE SYSTEM V1.2
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. Six signature events survive, each one designed as a single composition of motion, sound, haptic, colour and language — and most of what Milo does makes no sound at all.

SIGNATURE EVENTS 6HAPTIC PATTERNS 7PEAK ≤ −20 dBFSBUDGET 4 / MINUTESOURCE tools/make_sounds.py
Signatures26.1

Six events. Everything else is silent.

Each one is a single composition — visual, motion, sound, haptic, colour and language designed together, never as separate tracks. The sound is derived: Milo is named after a golden lion tamarin who had one leg and was the fastest of the tamarins, so the arrival cue is fast and deliberately uneven. Nothing here imitates an animal, and nothing is loud: the whole set sits between −26 and −20 dBFS.

VermilionMilo the intervention. Short, fast attack, dry, precise, a small organic tail.
MossOffline the environment. Lower, softer, rounded — felt rather than announced.
DitherTranslation. Granular texture resolving toward clarity and toward silence.
SilenceOrdinary progress, every subtask, every keystroke. The larger half of the system.

Interruption level decides the volume, not the difficulty of the work

SILENTOrdinary progress. Milo understands, Milo acts, work hands off between machines.no sound · no haptic
AMBIENTState available when the person looks. Milo recedes, a local resource is ready.−26 to −23 dBFS
NOTICEA state change to register now: an invocation answered, or a meaningful completion.−24 to −20.5 dBFS
INTERRUPTA human decision is required before work continues.−20 dBFS · two events
CRITICALDestructive, security, or high cost. Lower and longer — never louder.−20 dBFS · three events

Budget: four cues a minute, shared between sound and haptics. The fifth is suppressed in both channels and the visible state still shows. Approval is never suppressed. Source: tokens/sound.json.

The set26.2

Play them. Then turn them off and check nothing is lost.

Each button plays the real file from assets/sound/ and fires the haptic pattern where the device has one. Nothing plays on load. The waveform is drawn peak-normalised on a common 0–600 ms axis, so lengths are comparable by eye; the level is in the numbers beside it.

Ready. Nothing plays until you press a button.

01 · Signature

Milo arrives

NOTICE Vermilion

Milo is invoked — voice, quick entry, command palette — and becomes present. The primary signature: the one moment Milo must be recognisable with the screen hidden.

pixels → the mark resolves → one vermilion element lands · 180 ms · --ease-enter
Stays silent when
  • Milo is already present
  • the person is speaking
  • the invocation was itself silent — a scheduled run starting
Waveform: three small separate spikes at 0, 18 and 41 milliseconds, then one much larger spike at 62 milliseconds with a short decaying tail, silent after about 98 milliseconds.
0 ms100200300400500600
Measured
file 178.0 ms · audible 97.8 ms · peak −20.5 dBFS · RMS −37.1 · centroid 2041 Hz · −20 dB in 19 ms
Character
three uneven grains inside the ~50 ms fusion window, so they read as one textured attack, then the mark landing, then a small organic tail
Haptic
3 steps · 68 ms · sharpness 0.90 — uneven, resolving, lands on the third
Language
no words; the pill appears already labelled Listening
Visible
the voice pill or quick-entry surface — that, not the sound, is what tells you
Haptic pattern

0 ms100200300400

02 · Signature

Milo recedes

AMBIENT Moss remains

The intervention ends and the environment is what is left. Arrival without departure would imply Milo is always present; the brand's position is the opposite.

structure discretises → pixels separate → vermilion recedes → the Moss field remains · 240 ms · --ease-exit
Stays silent when
  • the person navigated away
  • another cue played in the last two seconds
  • the session is ending anyway
Waveform: one large spike at the start, then three progressively smaller spikes at widening intervals, then a low sustained band of quiet texture that fades out by about 137 milliseconds.
0 ms100200300400500600
Measured
file 258.0 ms · audible 137.0 ms · peak −23.0 dBFS · RMS −45.9 · centroid 1253 Hz
Descends
centroid 1282 Hz in the first half, 546 Hz in the second — it measurably recedes into the low Moss register
Character
the mark first, already decaying, then grains at widening gaps and falling amplitude, ending on the Moss floor. Not a reversed file: a reversed envelope swells, and a swell asks for attention.
Haptic
3 steps · 82 ms · sharpness 0.55 — gaps widen where arrival's narrowed
Language
none
Visible
the pill dismisses; the run row stays
Haptic pattern

0 ms100200300400

03 · Signature

Offline ready

AMBIENT Signal Moss

A local resource becomes available — a machine wakes, a model loads, a volume mounts. The only Moss voice in the system. Without it, sound has no Offline half.

Motion: the machine row's Moss glyph fades up over --dur-base. Nothing translates — readiness is a state, not an arrival.

Stays silent when
  • the person asked for it and is watching
  • more than one resource becomes ready inside five seconds — one cue for the group, not one each
  • the resource is remote; remote is not local capability
Waveform: a single rounded burst with no sharp leading edge, reaching its peak about 9 milliseconds in and settling smoothly to silence by about 49 milliseconds.
0 ms100200300400500600
Measured
file 126.0 ms · audible 48.6 ms · peak −26.0 dBFS — the quietest in the system · RMS −40.2
Register
centroid 259 Hz, rolloff 844 Hz, spread 186 Hz — the lowest and narrowest sound here; attack 8.7 ms, the softest
Character
abstracted from setting a wooden thing down on a wooden bench. An environment does not announce itself.
Haptic
1 step · 30 ms · sharpness 0.15 — the only single, blunt, low-sharpness pattern
Language
“Local. Ready.” Never “Success”.
Visible
the machine or resource row
Haptic pattern

0 ms100200300400

04 · Signature

Artifact born

NOTICE Ink · Vermilion mark only

A meaningful new thing exists — a file, a document, a dataset, a build. A new thing existing is what the product is for.

Motion: emerge — the artifact row translates 8 px up into place over --dur-slow, --ease-enter.

Stays silent when
  • the artifact is an intermediate — a temp file, a cache, a checkpoint
  • a batch produces several: one cue for the batch
  • the person created it by hand
Waveform: one dense burst that reaches full height almost immediately and collapses to a thin tail within about 43 milliseconds. The shortest event in the set.
0 ms100200300400500600
Measured
file 93.3 ms · audible 43.3 ms — the shortest sound in the system · peak −22.0 dBFS · RMS −35.4 · centroid 1115 Hz
Character
two layers 9 ms apart — a broadband contact and a mid woody register — fusing into one press closing. A press does not ring, so there is almost no resonance.
Haptic
1 step · 8 ms · sharpness 1.00 — the crispest and shortest pattern
Language
the artifact's name and path. Nothing else.
Visible
the artifact row and its path
Haptic pattern

0 ms100200300400

05 · Signature

Resolved

NOTICE Dither

An unknown or a problem becomes a completed resolution. The event most at risk of turning into a reward sound, so it is designed rather than avoided: it never rises, and it ends on its smallest grain.

Motion: the run row settles into its done state; the progress bar completes and stops. No flourish.

Stays silent when
  • the run took under two minutes and the person is looking at it
  • it is one of several resolutions in the same minute
  • the person resolved it themselves
Waveform: fourteen small bursts, densest and tallest at the start, each one smaller than the last and separated by a slightly wider gap, thinning to single dots and stopping at about 273 milliseconds.
0 ms100200300400500600
Measured
file 324.0 ms · audible 272.8 ms · peak −24.0 dBFS · RMS −44.6 · centroid 1738 Hz
Resolves
spectral spread collapses 1325 Hz → 368 Hz between first and second half; centroid falls 1741 → 1248 Hz. The texture genuinely narrows onto one band.
Character
fourteen grains; centre frequencies converge, bandwidth narrows, gaps widen so it settles instead of accelerating, amplitude decays to nothing
Haptic
3 steps · 56 ms · sharpness 0.35 — intensity descends and the last step is longer and softer, so peak force never rises. That is the anti-reward test in the haptic channel.
Language
“Resolved.” or the plain result. Never “Done!”.
Visible
the row state and the toast
Haptic pattern

0 ms100200300400

06 · Signature

Approval required

INTERRUPT · CRITICAL Vermilion edge

Human agency becomes necessary: nothing proceeds until a person acts. The only event the four-a-minute budget cannot suppress, and the only one that reaches the system's loudest permitted level.

Motion: the permission surface arrives at elevation 3 with its vermilion edge; the critical variant is elevation 4 with a 2 px border and a scrim.

Stays silent when
  • never — this is the one event that always plays when sound is on
Waveform: two firm bursts 130 milliseconds apart, the second slightly smaller, each decaying quickly. Two clearly separate events, not a single sound.
0 ms100200300400500600
Waveform: the same two bursts, then a third at 280 milliseconds that is visibly longer and rougher. Same height as the first two — longer and lower, not louder.
0 ms100200300400500600
Interrupt
file 196.0 ms · audible 164.2 ms · peak −20.0 dBFS · RMS −34.3 · centroid 754 Hz
Critical
file 381.1 ms · audible 332.3 ms · peak −20.0 dBFS — identical · centroid 693 Hz — lower
Why
cost is weight and length, never volume. A system that gets louder as the stakes rise teaches the person to fear the speaker instead of reading the screen.
Character
a small relay throwing. The 130 ms separation is the design: it sits outside the ~50 ms fusion window that arrival sits inside, so the ear counts two events. Countability, not loudness, is what makes it unambiguous.
Haptic
2 steps · 160 ms (critical: 3 steps · 314 ms) — the 120 ms pause is far longer than any other gap in the set, so the pattern is countable through the wrist alone
Language
the question in one line, with the cost named; the critical variant states the consequence first
Visible
the permission surface, or a role="alertdialog" confirmation
Haptic pattern · interrupt Haptic pattern · critical

0 ms100200300400

Silent by design26.3

Three candidates were cut. That is the design, not an omission.

Eight events were considered. The silent set is larger than the sounded set, and it has to be: a system that marks every completed subtask has stopped meaning anything by the third one.

Milo understands
SILENT

Intent resolving is a sub-state of arrival. It happens within a second of the arrival cue, while the person is still looking at the pill they summoned — two cues that close together stop being two events and become a chime pair. Intent resolution is also the step most likely to need correcting, so sounding it would confirm something that is not yet true. Carried by the pill's state word changing to Understanding, then the transcript.

Milo acts
SILENT

Starting work is ordinary progress, which is the definition of SILENT. If every run start sounded, the four-a-minute budget would be spent before anything finished. The commitment is already in the tail of the arrival cue and in the vermilion mark landing. Carried by the run row appearing, the active pulse, the progress bar.

Handoff
SILENT

A handoff between executor, machine or context is an implementation detail of a run. The person asked for an outcome, not for a particular machine to be busy; sounding it trains them to care about the wrong layer. A handoff that fails is not a handoff — it is Approval required, or a failed Resolved. Carried by the executor mark in the run detail.

Everything else
SILENT

A task completed by hand, a row reordered, a tab changed, a keystroke, a hover, a save, a scroll. The person did it; they already know. Carried by the state itself.

Every measurement, and how it was taken7 files
eventfile msaudible mspeak dBFSRMS dBFScentroid Hz−20 dB inwav
milo-arrives178.097.8−20.5−37.11204119 ms17 KB
milo-recedes258.0137.0−23.0−45.8712538 ms25 KB
offline-ready126.048.6−26.0−40.2325933 ms12 KB
artifact-born93.343.3−22.0−35.37111521 ms9 KB
resolved324.0272.8−24.0−44.58173821 ms31 KB
approval-required196.0164.2−20.0−34.2675423 ms19 KB
approval-required-critical381.1332.3−20.0−34.8269323 ms37 KB

All seven are synthesised by tools/make_sounds.py from the standard library — no recorded samples, so no provenance or licence question; the parameters in that file are the sound. Every write is gated: nothing over 600 ms, nothing above −19.9 dBFS peak, no spectral centroid above 3000 Hz, no decay to −20 dB slower than 260 ms, and in-band spectral flatness at or above 0.15 so a tone cannot pass as a material. Re-verify the shipped files with python3 tools/make_sounds.py --measure. Full derivation in docs/MILO_SOUND_SYSTEM_V1.md.

Haptics: patterns, not a light / medium / heavy scale7 patterns

A scale describes force, and force is not meaning. Each pattern is a sequence of {duration, intensity, gap} steps with a sharpness value in tokens/haptics.json, and each carries the same shape as the sound and the motion it belongs to. Nothing crescendos, nothing runs past 400 ms, nothing repeats while it waits for you, and no haptic carries information the screen does not.

macOSCore Haptics preferred: each step becomes a .hapticTransient with hapticIntensity from the step and hapticSharpness from the pattern, scheduled at the running sum of duration + gap. Gate on CHHapticEngine.capabilitiesForHardware().supportsHaptics. Fallback is NSHapticFeedbackManager, which offers three named patterns and no duration or intensity control at all — rhythm survives, nothing else does. Haptics reach the trackpad only; a Mac on a mouse has no haptic channel.
OmarchyNo haptic output exists and none is faked. Wayland and libinput expose no haptic actuator API for trackpads, and kernel force feedback covers game controllers. The sound and the visible state carry the event; the timeline above is the pattern's only representation here, which is sufficient because nothing in this system depends on touch.
Web prototypenavigator.vibrate takes milliseconds only, so intensity and sharpness are dropped and only rhythm and duration survive. Desktop Safari and desktop Chrome implement nothing; the buttons above say so rather than failing silently.

Accessibility: every event has a visible carrier, named on each card. Sound and haptics are supplementary — turn both off and nothing is lost, which is the test. Nothing plays without a press. Reduce Sound leaves haptics only; Do Not Disturb leaves nothing; Reduce Motion leaves sound and haptics unchanged, because they are not motion.

The tonal family26.4

What the product plays now.

James, 2026-09-25: "The sound design needs to sound soft, tonal and like the future." Every interface sound is now a few notes of one key, D major — a small bell, never a buzz — and the launch film's score is in the same key (48.2).

A rises to D: the signature.

Milo's own notification is a rising fourth. The same two notes, reversed or joined, run through the whole set, so the ear learns one voice. The six signature events of 26.1 keep their names and their silence rules; only the material changed — from a struck material to tuned glass.

Each note is a sine with a quiet octave and a faint inharmonic "glass" partial that fades first. Notes open with a raised-cosine attack (no click), decay exponentially, and pass through a short shimmer of two tuned delays — air without noise. Every sound peaks between −21 and −34 dBFS, under speech. Three takes of each differ by a hair of tuning and timing so repeats never sound mechanical; take 1 is below.

SoundWhat it saysBrand cue it playsLength · peakListen
opena surface opens: D rises to A, softmilo-arrives520 ms · −28 dBFS
closea surface closes: A settles to Dmilo-recedes460 ms · −30 dBFS
pressa button: one quiet round note—180 ms · −32 dBFS
ticka switch: a tiny high note—110 ms · −34 dBFS
pagea new page: a third breathes in—480 ms · −30 dBFS
slidegoing back: a note glides down a third—380 ms · −30 dBFS
landarrival: a low warm fifthoffline-ready500 ms · −26 dBFS
confirmdone: D, F♯, A, unhurriedresolved740 ms · −26 dBFS
errornot done: a gentle fall of a fourth, never harsh—520 ms · −28 dBFS
notifyMilo's notification: A rises to D, the signature—950 ms · −22 dBFS
needsMilo needs your yes: F♯, A, D, risingapproval-required · approval-required-critical1050 ms · −21 dBFS
madesomething was made: one glass noteartifact-born620 ms · −26 dBFS

Nothing plays by itself: each sound starts only when you press its control. Files: assets/sound/tonal/, copied from offline-os assets/sounds/ (take 1), made by Tools/sound/tonal.py. The V1.2 prototypes in 26.1 are kept as the record. REF: https://m2.material.io/design/sound/applying-sound-to-ui.html