Sweep sideways
Palm down over the keyboard, sweep across, then pause before sweeping back. Each sweep steps to the next gesture in the agent's vocabulary.
Waiting
Keyboard: ← →
Your speakers play a tone you cannot hear. Your hand reflects it, and the reflection comes back bent: higher when you move in, lower when you pull away. That shift is enough to read a sweep, a push and a lift, and to drive a real 3D agent with them. Nothing is recorded, nothing leaves the page, and the camera stays shut.
Use the built-in speakers and microphone, and keep the volume up. Headphones break the reflection path, so the sensing has nothing to read. The carrier sits near 20 kHz: cats and dogs can hear it, so stop if a pet in the room seems bothered.
Acoustic sensing needs Web Audio and microphone input. Safari, Chrome, Edge and Firefox on a laptop all qualify.
The keyboard controls below work regardless, and the gesture vocabulary is browsable without any hardware.
The carrier and 600 Hz either side of it. Grey is the still room. Green is what is coming back right now: energy to the right of the spike is a hand closing in, to the left is a hand pulling away.
still room live carrier
Palm down over the keyboard, sweep across, then pause before sweeping back. Each sweep steps to the next gesture in the agent's vocabulary.
Waiting
Keyboard: ← →
Push your palm toward the screen to move the camera in. Pull back and it eases out, paced by how fast your hand actually moves.
Waiting
Keyboard: + −
Raise your hand off the keyboard and hold it there. The camera turns around the agent for as long as you hold, and settles when you lower it.
Waiting
Keyboard: [ ]
A siren drops in pitch as it passes you. The same thing happens to a 20 kHz tone reflecting off your hand, only the shift is a few hertz rather than a few hundred. Averaging the room while you hold still gives a reference, and anything that appears beside the carrier afterwards is something that moved.
The microphone only senses whether something got closer or further away. A sweep is read as one coherent approach followed by its retreat, which is why pausing before you sweep back matters: without the pause, the return stroke reads as a second sweep in the other direction.
The technique is SoundWave (Gupta, Morris, Patel and Tan, CHI 2012). The detectors here are ported from Sonar, Emanuel Perez's MIT-licensed macOS implementation, with Daniel Rapp's Doppler as the prior art for doing it in a browser at all.
The sensor and the detectors are two plain modules with no 3D and no DOM in them. Point them at anything: a slide deck, a kiosk, an embedded agent. The developer reference has the whole surface.