All projects
TOOLINGPublic repo

blipsmith

An agent-playable lo-fi synthesizer. There is no model inside: an LLM turns the knobs over MCP and a deterministic C++ core renders the bytes, identical on every platform.

Product

The shipped product: live link, the problem it solves, and the stack it runs on.

The problem

Game and app builders need short lo-fi sound effects without sample licensing, a sound designer, or a generative audio model, and a coding agent cannot produce audio at all. Generative audio is non-deterministic, opaque, and license-murky. blipsmith gives the agent a real instrument instead: a C++ DSP core it plays one typed setter at a time over MCP, while a human drives the same engine from a terminal and gets the same bytes. Because the agent cannot hear, every render comes back with six measured acoustic features, so it steers by numbers.

Stack

C++17Pythonpybind11MCPGitHub Actions

Preview

$ blipsmith render blip.spec.json
 blipsmith-out/blip.wav
 220 ms · peak -1.0 dBFS · f0 653 Hz
 35 goldens match · linux + macos

How I built it

Product requirements

Open the PRD

The full PRD lives in the repo. Open it above.

blipsmith went from a rough idea doc to a feature-complete v1 in three days, one spec at a time. The idea was grilled across seven rounds with /prd-grill-me until every open design question was resolved, written up as a DEFINED PRD, then decomposed into a thirteen-item dependency-ordered backlog that was implemented and verified item by item. One constraint drove the whole architecture: no libm transcendentals anywhere on the audio path, because IEEE-754 guarantees only + - * / sqrt and fma exactly, and everything else is a given platform's choice of approximation. So sine comes from a wavetable built by a fixed-term Taylor polynomial, filter coefficients are recombined from that same table through the double-angle identities, and the FFT behind the brightness measurement is forty lines of radix-2 reading exact twiddles rather than a vendored library that would have called cos. The ban is enforced rather than intended: a script reads the compiled core's undefined symbols and fails the gate on any transcendental, and the suite compiles a probe that calls sin() to prove that gate can actually fail. CI renders 35 golden specs on Linux x86_64 and macOS arm64 and diffs the SHA-256 manifests, so the determinism claim is measured, not argued. The README is executable too: a test lifts the documented spec out of its heredoc, runs it in an empty directory, and compares the printed output to the documented block, so the docs cannot quietly drift from the tool.

Continuous integration

Every push runs the seven-step gate on Linux x86_64 and macOS arm64, then a join job diffs the two hash manifests. One diverging byte across the 35 golden renders fails the build. This badge is live.

GitHub Actions CI status

Timeline

  1. milestoneJul 25, 2026

    Corpus frozen at 35 goldens; two-platform CI green and bit-identical across Linux x86_64 and macOS arm64

  2. milestoneJul 25, 2026

    The two surfaces ship: a 30-tool MCP server over stdio and a five-command CLI, both over the same 13-preset library

  3. milestoneJul 24, 2026

    Deterministic C++ core: SoundSpec contract, oscillators, modulation, filter, lo-fi, effects, master bus, measured features

  4. prdJul 24, 2026

    Idea grilled to a DEFINED PRD over seven rounds, then cut into a 13-item dependency-ordered backlog

Metrics

Each metric carries an honesty tag. Verified numbers read solid; targets and placeholders read muted.

Bit-identical2 platforms
REAL
Golden specs35
REAL
Tests1,095
REAL
MCP tools30
REAL
Presets13
REAL
30s mix render73 ms
REAL

Built the same way, every time.

Every exhibit runs the same loop: spec, implement, verify, ship. If you want this kind of work on your team, full-time or freelance, let's talk.