earshot: Ears for Coding Agents

Let AI coding agents hear, review and make sound: turning audio into evidence an agent can reason about, running locally on CPU.

Source repo
Leonxlnx/earshot
Stars
★ 3.2k
Last updated
6d ago
License
MIT
Primary language
Python

At a glance

How it runs
CLIMCP serverLibrary / SDK
Works with
Universal · cross-platformClaude Code
Cost
Free, no paid service needed
Setup effort
Medium · a few setup steps
You'll need
Python 3.10+ffmpeg / ffprobePyTorch (CPU build)CLAP laion/larger_clap_general model (~1.1 GB download on first use)AST MIT/ast-finetuned-audioset-10-10-0.4593 modelShell / CLINetwork accessLocal filesystemMCP Server
Typical use
A developer producing a product launch film with Claude Code: have the agent listen to the soundtrack and run critique for a scored list of fixes against professional reference films
Not a fit if
  • Projects that need speech-content or emotional judgement from the tool
  • Work that requires hearing above 14 kHz
  • Users who want a GUI or a hosted cloud audio service out of the box
Source review
78/100 · Good

What does this agent do, and when should you use it?

earshot is an open-source toolkit that gives AI coding agents hearing: it turns audio files into word descriptions, description-match verdicts, best-moment trims, real-vs-synthetic detection, second-by-second listening timelines, annotated listening sheets and scorecards against professional launch films. The same capabilities ship as a CLI, a Python API and an MCP server, all running locally on CPU with no GPU required. Its forge component lets an agent write sounds as physical-synthesis code recipes and improve them by listening through a critic and evolutionary search, while fit translates a recording back into a code recipe with knobs and morphs. The sfx/kit layer ships a bank of 252 code-rendered sound effects and per-film sound kits with measured sync points. Two open models (CLAP and an AudioSet tagger) download on first use and then run fully offline; the repository itself contains no audio.

earshot reads audio or video files and runs two open models — CLAP (laion/larger_clap_general) for text-audio embeddings and an AST AudioSet tagger (MIT/ast-finetuned-audioset-10-10-0.4593) — plus a set of model-free measurements. Core commands: describe (calibrated z tags, AudioSet labels, measurements), match/rank (how well a description fits, candidate ordering with held-out evidence), find (locating best moments as sample trims), realness (real recording vs code-synthesized), timeline and sheet (event transcripts and annotated PNGs), and critique (a scorecard against a profile of 7 professional launch films with timestamped fixes). forge renders candidates from physical-synthesis recipes (modal resonators, filtered noise, a computed room and microphone) and iterates them with a critic, model-free penalties and evolutionary search; fit fits a small synthesis model to a recording by analysis by synthesis and emits a recipe module with render(), variations and morphs. sfx render and kit render produce sounds from the 252-effect bank (no models, no network) with an audit for clicks, clipping and other artifacts, and the launch preset places each role against a music bed and picture cuts. Everything is exposed to agents like Claude Code via earshot mcp as an MCP server.

  1. A developer producing a product launch film with Claude Code: have the agent listen to the soundtrack and run critique for a scored list of fixes against professional reference films
  2. A team adding sound to code-made films: use kit render with the launch preset to place bank effects by measured music-bed level, cut offsets and minimum run gaps
  3. Agent workflows trialing many audio assets: rank candidates by one sentence of description and find key moments inside long recordings
  4. A sound designer collaborating with an agent: write forge recipes, iterate from the critic's worded feedback and side-by-side spectrograms
  5. Anyone needing a recording turned into parametric code: fit converts a click or key press into a recipe module that re-renders, varies and morphs it

How do you install or deploy this agent?

Prerequisites: Python 3.10+, ffmpeg/ffprobe on PATH; CPU only, no GPU.

git clone https://github.com/Leonxlnx/earshot && cd earshot
python -m venv .venv
.venv/bin/python -m pip install torch --index-url https://download.pytorch.org/whl/cpu   # Windows: .venv/Scripts/python
.venv/bin/python -m pip install -e ".[mcp,llm,dev]"
.venv/bin/python -m earshot doctor --load

First model use downloads two open models (~1.1 GB total) into .cache/hf inside the repo (or EARSHOT_HOME): CLAP laion/larger_clap_general and AST MIT/ast-finetuned-audioset-10-10-0.4593, both at pinned revisions; afterwards it never contacts the Hub. earshot doctor --fetch downloads them up front.

Register as an MCP server for Claude Code:

claude mcp add earshot --scope user -e EARSHOT_THREADS=3 -- /path/to/earshot/.venv/bin/python -m earshot mcp

How do you use this agent?

CLI usage (each command prints a plain-language summary first; --json gives the full result):

earshot describe enter.ogg
earshot match key.ogg "a deep thocky mechanical keyboard press" --alts "a mouse click"
earshot find keys.ogg "a single mechanical key press" --top 4
earshot critique film.mp4
earshot forge whoosh --refset whoosh_fast --budget 96 --dir made/whoosh
earshot fit click.wav -o made/click_fit.py --report
earshot sfx render whoosh_fast/crisp -o w.wav --dur 0.8 --apex 0.32
earshot kit init --preset launch -o audio/kit.json && earshot kit render audio/kit.json --out audio/kit

Python API:

import earshot
earshot.describe('whoosh.wav')
earshot.find('typing.ogg', 'a single isolated key press')
from earshot import api

Note: each CLI call is a new process and loads the models (~20-40 s); for multiple calls use the MCP server (models stay loaded) or a Python script with from earshot import api. The optional llm_critique tool needs your own GEMINI_API_KEY and explicit consent to upload.

What are this agent's strengths and limitations?

Pros
  • Fully local, CPU-only execution; after the initial model download it runs with zero network and audio never leaves the machine
  • Comes with measured validation: strong match verdicts are 98% correct on a 125-recording held-out library, realness ROC-AUC 0.92, and the docs honestly flag Goodhart effects and other weaknesses
  • Closes the loop from listening (describe/critique) to making (forge/fit/sfx/kit), so an agent can iterate on sound autonomously
  • An MCP server plus two bundled agent skills (skills/earshot, skills/real-sound) make it work with Claude Code out of the box
Limitations
  • ~1.1 GB model download on first use and a 20-40 s model load per CLI call; longer workflows must switch to the MCP server or the Python API
  • forge reference recordings are licensed and not included; without your own refs (--refs/--refset) the critic runs in designed mode with realness reported but not required
  • Cannot judge taste, emotion, speech content or anything above 14 kHz; the blind tests are tiny (15 trials, one listener) and the author states they are not proof
  • A fit is a derivative of its recording (keep the source licence with the recipe); the 0.4 replication benchmark shows blunter onsets and fewer takes passing the take check on the harder fresh set

How does this agent compare with similar options?

Key facts side by side with the most closely related agents.

Agent Source review Form / cost Stars Updated Language Full support on
earshot: Ears for Coding Agents This agent 78 · Good CLIFree ★ 3.2k 6d ago Python Claude Code
Julep — Durable, Composable AI Agents 64 · Some gaps Library / SDKFree + model costs ★ 6.6k 3mo ago Python —
CLI Agent Orchestrator 65 · Some gaps CLIFree + model costs ★ 1.5k today Python Codex · Claude Code
ClawCodex 51 · Major gaps CLIFree + model costs ★ 924 8d ago TypeScript ChatGPT · OpenAI API · Claude API

How does FollowAgents rate this agent?

FollowAgents source review · FARS-2.1
Good
78/ 100 5-point scale 3.9 / 5
Trust 18/29
Reliability 12/14
Adaptability 15/18
Convention 15/18
Effectiveness 12/13
Verifiability 6/8
Why each dimension lost points
Trust18 / 29 · 3.1/5

Everything runs locally on CPU with no network by default; the sole network path (llm → Gemini) requires --yes-upload explicit consent — user confirmation and data-flow disclosure are strong. Deductions: a heavyweight supply chain (torch/transformers/librosa) with no version locking; file writes, ffmpeg reliance and EARSHOT_BANK env injection are external effects with no rollback or cleanup path evidenced.

Reliability12 / 14 · 4.3/5

test_one_version_everywhere locks package/pyproject/CHANGELOG consistency; error handling is explicitly tested (one-line stderr, exit 1, readable corrupt-file errors, valid JSON under cp1252). Deduction: 20–40 s model load per CLI call and torch's special CPU index-url are real availability frictions on non-standard environments.

Adaptability15 / 18 · 4.2/5

Audience (AI coding agents) and scenarios (CLI/Python/MCP) are clearly defined; capability boundaries are stated with unusual honesty (Goodhart risk, a 15-trial one-listener blind test, fit not re-run on 0.4). Deductions: environment fit requires ffmpeg plus manual CPU torch wheels; MCP trigger precision is documented but statically unverifiable.

Convention15 / 18 · 4.2/5

Excellent documentation architecture: command table, per-knob reference, limits sections, CREDITS_FIT, changelog consistency enforced by test, complete MIT license. Deductions: no step-by-step install instructions in the README (details live in a pyproject comment); a single maintainer (Leon Lin, 2026) with no governance or update commitment; publisher unverified.

Effectiveness12 / 13 · 4.6/5

Uniform plain-language summaries plus --json plus standardized errors make output directly agent-consumable; the tool fills a genuine gap (agents cannot hear). Deductions: 20–40 s cold start and a large dependency tree raise the cost side; cost/benefit is weaker for short ad-hoc calls.

Verifiability6 / 8 · 3.8/5

Fact/inference separation is exemplary: 'one listener is a small test, not a proof', CLAP called a proxy, v2 blind scores unpublished. Tests corroborate some claims (bank counts of 183+51, CC0 sources, version). Deductions: headline benchmark numbers point to docs files not present in this evidence set, so traceability stops at the citation, and the truncated test files prevent full cross-checking.

Risks and how to mitigate them
  • Heavyweight dependencies (torch/transformers) with no version locking; follow the pyproject comment's CPU index-url and verify dependency integrity in a controlled environment.
  • The llm command uploads audio to Gemini: use --yes-upload only when you accept the outbound content; all other commands default to offline.
  • EARSHOT_BANK can point at an arbitrary bank file; verify provenance before loading an external bank.
  • All benchmark numbers are author-reported (one blind test had a single listener and 15 trials); this is a static review with nothing executed, so performance claims need independent verification.
  • Single-maintainer project with no governance commitment; assess long-term maintenance risk before enterprise adoption.
Evidence confidence: Low Reviewed Oct 29, 2026 Reviewed revision 591fa3e02803
See the full review method →

FAQ

Do I need API keys or a paid service?
Not for the core. Both models (CLAP Apache-2.0, AST BSD-3-Clause) run locally after an automatic first-run download. The only optional paid piece is the llm_critique tool, which requires your own GEMINI_API_KEY and explicit consent to upload audio; everything works without it.
Can it run offline?
Yes. With EARSHOT_OFFLINE=1 earshot loads only from the local cache and errors on missing models instead of silently downloading. Initial deployment still needs one ~1.1 GB download.
Does every call really wait 20-40 seconds?
Only model-loading CLI calls (measure, sfx, kit load none). For multiple calls, run the MCP server so models stay warm, or write one Python script using from earshot import api.
Can I trust its judgements?
Not blindly. Loudness, timing, sync to picture and matching verdicts on single exposed sounds are trustworthy; tags inside busy mixes and music mood are hints only. The README states the realness model is easy to fool, so made sounds should be judged by model-free measurements, spectrograms against references and a human blind test.
Are the bank's sounds recordings?
No. All 252 effects are stored as code render blocks and render by id in seconds with no models and no network; the repo holds no audio. 183 are forge v2 finals, 51 are new 0.4 recipes, three are tuned kalimba voices, and 15 were fitted from CC0 recordings.
View on GitHub ↗ Install ↓

Compare agents like this one

The same FARS review applied across the shortlist this agent qualifies for.

Related agents