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
- 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
- Covered
- Nov 10 edition
- Evidence
- 10 sources across 8 sites
- 1Simon Willison: Locating the source of a mysterious beep…simonwillison.net
- 2There is a mysterious intermittent beep coming from…x.com
- 3Peng et al., BeepBeep (SenSys'07)cs.purdue.edu
- 4BibBase: BeepBeep recordbibbase.org
- 5Simon Willison: Game Boy Color on my conference badgesimonwillison.net
- 6beep-locator problem.mdgithub.com
StrongHow 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.

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]
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]
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]
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]
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
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 (;).
- 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 ().
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 ().
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 (;).
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
uvandcloudflaredfor 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.
The source trail.
Sources (10)
Simon Willison: Locating the source of a mysterious beep with Claude
simonwillison.netThere is a mysterious intermittent beep coming from somewhere in your room of unopened boxes. Do you: 1. Open boxes methodically until you find it 2. Vibe code software t
Related coverage; assess separately
x.com