AI/Nov 10 edition/Reporting & analysis
AgentsCodingModels

AgentsAutonomy & tool use

Simon Willison uses Claude Code to build a phone-and-laptop microphone array that found a beeping carbon monoxide detector

Simon Willison had Claude Code build Beep Locator, which turns laptops, phones and iPads into a shared microphone array. It traced an intermittent beep to a carbon monoxide detector, and the agent kept updating the listening code on the devices while they ran.

From the Simon Willison article of November 9, 2026 and cited sources: The localization method itself is not new. [1] [6] [3] [9]

SOURCES[1] Simon Willison: Locating the source of a mysterious beep… simonwillison.net[6] beep-locator problem.md github.com[3] Peng et al., BeepBeep (SenSys'07) cs.purdue.edu

AI-assisted, not human-edited. Methodology Corrections Who owns this site

KEY FACTS
What happened
The localization method itself is not new. [1] [6] [3] [9]
Original source
Simon Willison article, independent perspective
Brief by
AT Pulse research desk AI-assisted; publisher and contact on the desk page
Studies
arXiv 1901.03450 (Jan 2019) [10] date from arXiv ID
When
November 9, 2026 article published
Evidence
10 sources across 8 sites
66/100StrongHow it’s measured

Hacker News · 237 likes · 118 comments

Reach blends public engagement (views, likes, comments, shares, stars) from the platforms where the story or its original source lives: YouTube, Hacker News, GitHub, Substack and similar. A video and the article written from its transcript share one score, taken from the video. Platforms with no data are left out rather than counted as zero, and the age of a story never lowers its score.

Illustration from Simon Willison’s Weblog: Simon Willison uses Claude Code to build a phone-and-laptop microphone array that found a beeping carbon monoxide detector
Image: Simon Willison’s Weblog — Original article ↗
THE CORE IDEAS4 TAKEAWAYS
01

The localization method itself is not new. While planning the work, Claude Opus 5.5 found and cited the 2007 BeepBeep paper on acoustic ranging. The resulting design uses chirps sent between devices to measure distances without syncing their clocks. It then places the beep with a time-difference-of-arrival grid search followed by a Gauss-Newton refinement step. [1] [6] [3] [9]

02

Claude cannot take audio input directly. It works only through browser and Python analysis code that it writes itself. A WebSocket channel let the agent send new code to devices that were already listening, so it could keep revising its own sensors without anyone reloading pages or re-granting microphone access. Claude Fable 5.2 did this live iteration. [1] [9]

03

Willison says the system placed the beep to within about 40cm. Locating the devices by sound alone worked poorly, though. A manual mode lets the user drag device icons into position, and the layout sometimes has to be flipped by hand because distance measurements can't distinguish a room from its mirror image. [1] [9] [6]

04

The same code-push mechanism lets the server run any code it chooses on every connected phone or laptop. Those devices connect through a public tunnel, so this convenience for the agent is also a remote-code-execution risk. [9]

WHY IT MATTERS

a single working build traced a real beep. Implication: agents given sensors they can reprogram, such as browser microphones or webcams, may be able to debug physical-world problems and make one-off tools cheap.

Read the full assessment

Code-push channels like this one also widen the attack surface.

Executive brief

Simon Willison found a beeping carbon monoxide detector buried in a room of unpacked boxes. He used Beep Locator, a localization system built by Claude Code that turns ordinary laptops, phones and iPads into a shared microphone array. He says it placed the beep to within about 40cm. The bigger point is how it was built. Claude Code wrote a WebSocket channel that pushes new code to the listening devices while they run, so the agent could keep reworking its own "ears" without a person touching each device. Claude Opus 5.5 built the first version; Claude Fable 5.2, released the same day, did the live iteration.

What changed and event timeline

  1. BeepBeep paper

    Microsoft Research Asia researchers presented acoustic ranging on off-the-shelf phones at SenSys'07. It combines two-way sensing, self-recording and sample counting, and reports centimeter-level accuracy (;).

  2. Late Oct 2026

    (approximate): Beeping starts

    Willison says the intermittent beeping began "a couple of weeks" before his post. Opus 5.5 then wrote a problem statement that cites BeepBeep ().

  3. Agents on conference hardware

    Willison wrote about GitHub Universe badge hacking. The Martin Woodward webcam anecdote he cites later appears only in his beep post, not in this earlier one ().

  4. Fable 5.2 ships

    Anthropic released Claude Fable 5.2 and Mythos 5.2. It claims 30% faster output, and Fable's price drops to $8/$40 per million input/output tokens (;).

  5. Write-up published

    Willison posted the project and the open-source repo, with the source traced to a CO detector that needed new batteries (;).

Capabilities and access

  • Scaffolding: Claude Opus 5.5 at "Extra" thinking effort, run through Claude Code Cloud on an iPhone against an empty GitHub repo (Willison).
  • Live iteration: Claude Fable 5.2 (claude-fable-5-2) running in local Claude Code. Fast mode costs $16/$80 per million tokens (Anthropic).
  • No native audio: Claude does not take audio input. The agent "hears" only through JavaScript and Python analysis code that it writes itself (Willison).
Read the full section
  • Scaffolding: Claude Opus 5.5 at "Extra" thinking effort, run through Claude Code Cloud on an iPhone against an empty GitHub repo (Willison).
  • Live iteration: Claude Fable 5.2 (claude-fable-5-2) running in local Claude Code. It is generally available on Claude Platform, AWS, Google Cloud and Azure. Fast mode costs $16/$80 per million tokens (Anthropic).
  • No native audio: Claude does not take audio input. The agent "hears" only through JavaScript and Python analysis code that it writes itself (Willison).
  • Code: Apache-2.0 licensed. It needs uv and cloudflared for HTTPS to mobile browsers (repo).

Technical analysis for researchers and developers

  • Topology: A Python hub talks to browser listeners over WebSockets.
  • Alignment: When a beep is detected, the device with the lowest round-trip time plays a reference chirp.
  • Localization:
Read the full section
  • Topology: A Python hub talks to browser listeners over WebSockets. Each listener keeps a 60-second WebAudio ring buffer and runs an FFT-plus-high-pass beep detector (detector.js; repo).
  • Alignment: When a beep is detected, the device with the lowest round-trip time plays a reference chirp. Every listener then uploads a clip running from about 0.6s before the beep to 0.8s after the chirp, and the chirp is used to align the clips (Willison).
  • Localization:
  • Chirps between devices give two-way ranging, which avoids network clock sync. The design notes say 1 ms of timing error is about 34 cm of distance error.
  • Device layout comes from MDS + SMACOF with outlier rejection.
  • The beep's position comes from a TDOA grid search plus Gauss-Newton refinement (problem.md; repo).
  • Hot-swap: An installModule() method runs code sent by the server on each listener. This avoids repeated microphone-permission prompts when pages reload (runtime.js).

Claims and evidence

  • About 40cm localization: Reported only by the author, from one room and one target. There was no ground-truth test series (Willison).
  • Agent found and used BeepBeep: The problem.md file and the shared session support this (problem.md).
  • Fable 5.2 speed, price and benchmarks: Anthropic's own claims, which were not tested in this project (Anthropic).
Read the full section
  • About 40cm localization: Reported only by the author, from one room and one target. There was no ground-truth test series (Willison). The design document had predicted roughly half-meter precision (problem.md).
  • Agent found and used BeepBeep: The problem.md file and the shared session support this (problem.md).
  • Fable 5.2 speed, price and benchmarks: Anthropic's own claims, which were not tested in this project (Anthropic).
  • No independent reporting: Beyond the author's own X post, no other outlet has covered the project.

Context and prior work

  • BeepBeep: Two-way sensing removes clock and latency uncertainty on commodity devices (paper). Later surveys place it within a broader body of acoustic-sensing work (arXiv survey).
  • What is new: Not the localization method.
  • Related practice: Willison describes a similar idea from Martin Woodward, who pointed a webcam at a device screen so his coding agent could check whether updates worked (Willison).
Read the full section
  • BeepBeep: Two-way sensing removes clock and latency uncertainty on commodity devices (paper). Later surveys place it within a broader body of acoustic-sensing work (arXiv survey).
  • What is new: Not the localization method. The new part is a coding agent finding the method, building it, and tuning it against live sensor data.
  • Related practice: Willison describes a similar idea from Martin Woodward, who pointed a webcam at a device screen so his coding agent could check whether updates worked (Willison).

Limitations, safety and contested findings

  • Self-calibration was weak: Locating devices purely by sound "didn't work particularly well," so a manual "Rough mode" lets the user drag device icons into place (Willison).
  • Mirror ambiguity: Distances alone cannot tell a room from its mirror image, so the layout has to be flipped or rotated by hand (repo).
  • Known risks: The design notes list reverberation, clock drift of tens of ppm, 3D geometry, and Safari's inconsistent handling of echo cancellation (problem.md).
Read the full section
  • Self-calibration was weak: Locating devices purely by sound "didn't work particularly well," so a manual "Rough mode" lets the user drag device icons into place (Willison).
  • Mirror ambiguity: Distances alone cannot tell a room from its mirror image, so the layout has to be flipped or rotated by hand (repo).
  • Known risks: The design notes list reverberation, clock drift of tens of ppm, 3D geometry, and Safari's inconsistent handling of echo cancellation (problem.md).
  • Security: installModule() lets the server run arbitrary code on every connected client, exposed to mobile devices through a tunnel (runtime.js; repo).

Business and practitioner implications

  • Pattern: Give an agent sensors it can reprogram, such as browser microphones or webcams, and it can debug physical-world problems without native multimodal input.
  • Speed: A useful acoustic tool was built in a short session from a 2007 paper the agent found itself.
  • Governance: Remote code-push channels that are convenient for agents are also remote-code-execution surfaces. Scope them to trusted networks, and treat them as prototype-only.
Read the full section
  • Pattern: Give an agent sensors it can reprogram, such as browser microphones or webcams, and it can debug physical-world problems without native multimodal input.
  • Speed: A useful acoustic tool was built in a short session from a 2007 paper the agent found itself. That lowers the cost of one-off, bespoke tools.
  • Governance: Remote code-push channels that are convenient for agents are also remote-code-execution surfaces. Scope them to trusted networks, and treat them as prototype-only.
  • Model choice: Anthropic positions Fable 5.2 for "power" technical work and Opus 5.5 for simpler tasks (CNBC). This project used both models.
FOLLOW THE EVIDENCE

The source trail.

Sources (10)
A LITTLE LESS NOISE. A LOT MORE CONTEXT.

Stay curious.
Follow the evidence.

Independent perspectives, the original sources, and room for the questions that don't have easy answers.

How we build the brief
Connect with us

Find us where you already read.