<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/locating-the-source-of-a-mysterious-beep-with-claude-cn3nvcvhb" -->

---
title: Locating the source of a mysterious beep with Claude
description: Simon Willison used Claude Code to build Beep Locator, a system that triangulates the source of an intermittent beeping sound using multiple devices as...
canonical: https://daily.dev/posts/locating-the-source-of-a-mysterious-beep-with-claude-cn3nvcvhb
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: Locating the source of a mysterious beep with Claude | daily.dev
og:description: Simon Willison used Claude Code to build Beep Locator, a system that triangulates the source of an intermittent beeping sound using multiple devices as...
og:url: https://daily.dev/posts/locating-the-source-of-a-mysterious-beep-with-claude-cn3nvcvhb
og:image: https://api.daily.dev/og/posts/cn3Nvcvhb.png
og:image:alt: Locating the source of a mysterious beep with Claude
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Locating the source of a mysterious beep with Claude

**[Simon Willison](https://daily.dev/sources/simonwillison)** · 10 min read · 1 upvotes · 0 comments

## Summary

Simon Willison used Claude Code to build Beep Locator, a system that triangulates the source of an intermittent beeping sound using multiple devices as listeners. The Python web server coordinates phones, iPads and laptops over WebSockets, using Fast Fourier Transform beep detection and a chirp to align recorded clips, and Willison names the 2007 BeepBeep acoustic ranging paper as the research Claude found. The tool located the beep to within about 40cm, which turned out to be an ancient carbon monoxide detector that wanted its batteries replaced. He started with Claude Code Cloud running Opus 5.5 on his iPhone, then continued on his laptop after Fable 5.2 was released, iterating live by pushing new JavaScript to listening devices so they did not need to be manually restarted.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://simonwillison.net/2026/Nov/9/mysterious-beeps>

## Questions this post answers

### How can I use multiple phones and laptops to triangulate the source of a mysterious beeping sound?

Run a Python web server as the coordinator, with other devices (phones, iPads, laptops) joining as WebSocket-connected listeners using browser WebAudio microphone access. Each listener runs FFT-based beep detection, and when a beep is heard, the server has one device play a chirp so all devices' audio clips can be time-aligned, enabling triangulation. One implementation located a beep to within about 40cm.

_daily.dev surfaces more hands-on builds like this for developers experimenting with agent-driven hardware projects._

### What is the BeepBeep acoustic ranging algorithm and how does it work?

BeepBeep is a 2007 acoustic-based ranging system (by Chunyi Peng, Guobin Shen, Yongguang Zhang, Yanlin Li, and Kun Tan) that estimates distance between commodity devices using only a speaker, microphone, and device-to-device communication. It achieves high accuracy through two-way sensing, self-recording, and sample counting, without needing any pre-planned infrastructure.

_developers researching device-to-device ranging techniques can find more acoustic computing deep dives on daily.dev._

### How can a coding agent like Claude Code interact with real-world audio input since it has no native audio support?

Claude Code can be given 'ears' by having it write and run JavaScript and Python code that captures and analyzes microphone audio, rather than relying on native audio input, which it lacks. In one project it coordinated a Python server and browser-based WebAudio listeners over WebSockets, then used hot-swappable code execution to iterate without restarting devices or re-triggering mic permissions.

_engineers building creative sensor integrations for AI agents can track similar experiments on daily.dev._

## Community take

How the wider developer community reacted, aggregated from 1 discussion and 109 comments across hackernews (as of 2026-11-10).

**TL;DR:** Reaction is largely delighted and nostalgic, with many sharing their own beep-hunting stories, while a vocal minority debates whether using an agent for this was overkill compared to simpler manual or DIY solutions.

**Sentiment:** 45% positive · 35% mixed · 20% skeptical

**The case for**

- Several found it a fun, relatable showcase of giving an AI 'ears' via microphones and WebAudio, prompting their own ideas for similar audio-analysis projects.
- People appreciated that the approach taught the author genuinely new things about audio/network programming in a short time.
- Multiple commenters shared similar real-world beep-hunting stories, validating that this is a widely annoying problem worth solving.

**The pushback**

- Some argued a simple physical binary search (splitting boxes between rooms) or just unpacking would have been faster and cheaper than building a whole system.
- A commenter felt that outsourcing problem-solving to AI removes the sense of struggle and accomplishment, and that one doesn't really learn anything meaningfully this way.
- One commenter critiqued the broader trend of using AI to write 'problems.md'-style documents that substitute for actual critical thinking, though noted this project itself wasn't that case.
- A few questioned the use case entirely, suggesting it was more about enjoying tinkering with AI than solving a practical problem efficiently.

**By community**

- hackernews (mixed): Most engagement goes into a long tangent debating the algorithmic complexity of a manual 'binary search' alternative, alongside genuine appreciation for the project, personal beep-hunting anecdotes, and a side debate on whether using AI for this kind of task is meaningful or just avoids useful struggle.

**Hottest debate:** Whether solving this with a coding agent was a clever use of AI or whether it was needless over-engineering when simpler manual methods (unpacking, binary search, timing beeps) would have worked just as well or better.

**Open questions**

- Why did automatic location mode underperform compared to the 'rough mode' fallback?
- Could the same technique work for very quiet, infrequent, or low-rumbling sounds that are hard to capture on a phone mic?
- How exactly were multiple devices (phones, laptops) connected as listeners without native apps — is it a PWA or plain web app?
- How many listening devices would be needed for the system to self-calibrate without relying on manual claps?

**Highlights**

> Yeah, I wouldn't do this for code that I was expecting anyone else to review. This is actually the first time I've told an agent to write out a "problems.md" document - it was an experiment to see if stating the problem provided decent results, as opposed to working directly on a spec. It did seem to work well though. I was outsourcing as much judgement as possible to the model, and the model did a good job at making decisions that got me to my required end result. In this case, the AI could do the reasoning for me. Opus 5.5 and Fable 5.2 are really good!
> — [simonw on hackernews](https://news.ycombinator.com/item?id=50436557)

> It makes me feel great! There is no world in which I would have spent the days (more likely weeks) necessary to learn enough about audio analysis in both JavaScript and Python and the WebAudio APIs necessary to build this thing, just to help me identify an annoying beep. Thanks to coding agents, I got to build a wildly ambitious system that still taught me a bunch of interesting things about audio analysis and network web application design, all in about an hour and a half of clock time. The alternative wasn't learning those things at increased detail, it was not learning anything about them at all. And I added more tools to my tool belt for the future. I now know that it's possible to measure distances to sounds using cheap devices over a network, and I've got code in a GitHub repository that shows exactly how to do that. The trick where the server could inject additional JS modules into the clients without needing to refresh the page (and hence lose the microphone permission) was neat, too.
> — [simonw on hackernews · 1 comments](https://news.ycombinator.com/item?id=50437286)

> What I'd like to know is: did it make you feel good? Did you get a sense of satisfaction at having solved a problem? Do you feel more stronger and more capable than you were before? What I've been finding is just setting AI loose like this doesn't give me any of that. I've decided not to think, so I don't feel any struggle. No struggle means no relief, no feeling of accomplishment. I also don't learn anything because AI read the paper for me. Learning is what I live for.
> — [globular-toast on hackernews · 1 comments](https://news.ycombinator.com/item?id=50436908)

> I'd like to understand why the auto location mode did not work well leading to the need to introduce "rough mode". Maybe the directionality of typical speaker and mic spoils an attempt to apply a 1/r^2 fit?
> — [frumiousirc on hackernews](https://news.ycombinator.com/item?id=50438997)

> Around '05 or so, the house we were staying in started beeping.  Smoke alarm sounds, as usual.  For almost a day we couldn't find the source.  Contacted the owners -- they didn't know it either.  They bought the house few years prior, so not much of a help. Standing in the hallways listening at different angles, as the article says, didn't help.  No Fable in '05 either. So I had to improvise.  Got a ~1 meter stick and two headphones (every headphone is a microphone, even if it sucks as a microphone).  Plugged them into the stereo mic port, and started recording in Audacity.  The phase shift between L and R pointed directly to the source.  Took about 4 or 5 beeps to get the sucker. Turns out, it was hiding above the ceiling tiles in the garage.  My wife still tells this story to all her friends as one of my biggest life achievements.  Everything I shipped, the companies I founded -- pales in comparison to finding a dead smoke alarm
> — [chimpontherun on hackernews · 3 comments](https://news.ycombinator.com/item?id=50437990)

**Source threads**

- [hackernews](https://news.ycombinator.com/item?id=50434310) · 217 points · 109 comments

## Similar posts on daily.dev

- [I customized Claude Code to interrupt me with Warcraft sounds, and now I actually notice when it's done](https://daily.dev/posts/i-customized-claude-code-to-interrupt-me-with-warcraft-sounds-and-now-i-actually-notice-when-it-s-d-2nts6gtnk) · XDA Developers · 0 upvotes · 0 comments
- [A Tiny Toy Synth For Smaller Computers](https://daily.dev/posts/a-tiny-toy-synth-for-smaller-computers-augpcxneq) · Hackaday · 0 upvotes · 0 comments
- [Adding TILs, releases, museums, tools and research to my blog](https://daily.dev/posts/adding-tils-releases-museums-tools-and-research-to-my-blog-v0folpxni) · Simon Willison · 2 upvotes · 0 comments
- [How Bats Gave Me a Project Idea \(and Why I’m Building It on Just My Laptop\)](https://daily.dev/posts/how-bats-gave-me-a-project-idea-and-why-i-m-building-it-on-just-my-laptop--mxlydahjo) · Medium · 0 upvotes · 0 comments

---

Tags: [#webdev](https://daily.dev/tags/webdev), [#python](https://daily.dev/tags/python), [#ai-agents](https://daily.dev/tags/ai-agents), [#claude-code](https://daily.dev/tags/claude-code)

[View this post on daily.dev](https://daily.dev/posts/locating-the-source-of-a-mysterious-beep-with-claude-cn3nvcvhb)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"Locating the source of a mysterious beep with Claude","url":"https://daily.dev/posts/locating-the-source-of-a-mysterious-beep-with-claude-cn3nvcvhb","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/locating-the-source-of-a-mysterious-beep-with-claude-cn3nvcvhb"},"datePublished":"2026-11-10T00:07:00.362Z","dateModified":"2026-11-10T12:30:02.551Z","description":"Simon Willison used Claude Code to build Beep Locator, a system that triangulates the source of an intermittent beeping sound using multiple devices as...","image":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/6b85caab684a4681833a443ae5e65aee?_a=AQAEuop","thumbnailUrl":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/6b85caab684a4681833a443ae5e65aee?_a=AQAEuop","isAccessibleForFree":true,"articleSection":"Simon Willison","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"Simon Willison","logo":"https://media.daily.dev/image/upload/t_logo,f_auto/v1/logos/cf12b897300740218b35f49a6309ec5b","url":"https://daily.dev/sources/simonwillison"},"commentCount":0,"discussionUrl":"https://daily.dev/posts/locating-the-source-of-a-mysterious-beep-with-claude-cn3nvcvhb","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":1},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":"webdev,python,ai-agents,claude-code","timeRequired":"PT10M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"Simon Willison","item":"https://daily.dev/sources/simonwillison"},{"@type":"ListItem","position":3,"name":"Locating the source of a mysterious beep with Claude"}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/locating-the-source-of-a-mysterious-beep-with-claude-cn3nvcvhb#faq","mainEntity":[{"@type":"Question","name":"How can I use multiple phones and laptops to triangulate the source of a mysterious beeping sound?","acceptedAnswer":{"@type":"Answer","text":"Run a Python web server as the coordinator, with other devices (phones, iPads, laptops) joining as WebSocket-connected listeners using browser WebAudio microphone access. Each listener runs FFT-based beep detection, and when a beep is heard, the server has one device play a chirp so all devices' audio clips can be time-aligned, enabling triangulation. One implementation located a beep to within about 40cm. daily.dev surfaces more hands-on builds like this for developers experimenting with agent-driven hardware projects."}},{"@type":"Question","name":"What is the BeepBeep acoustic ranging algorithm and how does it work?","acceptedAnswer":{"@type":"Answer","text":"BeepBeep is a 2007 acoustic-based ranging system (by Chunyi Peng, Guobin Shen, Yongguang Zhang, Yanlin Li, and Kun Tan) that estimates distance between commodity devices using only a speaker, microphone, and device-to-device communication. It achieves high accuracy through two-way sensing, self-recording, and sample counting, without needing any pre-planned infrastructure. developers researching device-to-device ranging techniques can find more acoustic computing deep dives on daily.dev."}},{"@type":"Question","name":"How can a coding agent like Claude Code interact with real-world audio input since it has no native audio support?","acceptedAnswer":{"@type":"Answer","text":"Claude Code can be given 'ears' by having it write and run JavaScript and Python code that captures and analyzes microphone audio, rather than relying on native audio input, which it lacks. In one project it coordinated a Python server and browser-based WebAudio listeners over WebSockets, then used hot-swappable code execution to iterate without restarting devices or re-triggering mic permissions. engineers building creative sensor integrations for AI agents can track similar experiments on daily.dev."}}]}
```

