daemonrunning stationin tick0 last beat0.0s ports0
Reaper Daemon · v3.21.0 · MIT

Nothing is listening.

A REAPER MCP server and file bridge for AI agents.
Ask Claude to help mix your session, and undo any move it makes.

  • 0ports open
  • 0sockets
  • 0extensions
  • 3operating systems
daemon running
tick
0
last beat
0.0s
station
in
ports open
0
The loop

One command per tick, forever.

The bridge is a defer loop that never exits. It polls a folder, runs one thing, writes the answer down, and leaves a pulse behind. Four stations, in this order, for as long as REAPER is open.

  1. Inbox Your agent writes a JSON command file into a folder. Anything that can write a file can drive REAPER.
  2. Execute A Lua defer loop inside REAPER picks up one command per tick and runs it against the native API. It's the only thing that touches your session.
  3. Outbox The result comes back as JSON. Every write is atomic, so a reader never catches a half written file.
  4. Heartbeat The loop drops a heartbeat file on every pass, so you know it's alive without asking it anything.

Every command that changes the project runs inside a REAPER undo block, so Cmd+Z reverts it like anything else you did by hand. The bridge ships with no knowledge of any specific synth or amp sim. Your agent learns what the project contains with scan_fx, then works by name.

One instruction

Say it once. It edits every note.

Reaper Daemon session proof. The instruction reads: keep the kicks between 109 and 116, keep the snare between 89 and 101. Below it, REAPER's MIDI editor shows the drum take with every velocity bar inside those ranges. 864 velocity edits, timing preserved. Disgrace, Monarch.
A real drum take from Disgrace, shown in REAPER's MIDI editor after the daemon applied the instruction. 864 velocity edits · timing preserved
The surface

Everything it can touch.

Project
  • transport
  • tempo
  • cursor
  • time selection
  • render
Tracks
  • add / delete
  • rename
  • volume / pan
  • mute / solo / arm
  • colour
FX
  • add / remove
  • bypass
  • reorder
  • set parameters
  • automation envelopes
Timeline
  • markers
  • regions
  • media items
  • insert MIDI
  • audition
Discovery
  • scan_fx
  • every FX by name
  • every parameter
  • offline media
  • project state
Performance
  • profile a stem
  • cut the band
  • write a riff
  • humanize a take
  • transcribe drums
  • replay a recipe
and then it waits
Daemon Beater

It reads the guitar before it writes the drums.

Point it at a stem and it walks the take bar by bar, listening for what a drummer listens for: how dense the picking is, how regular, whether notes ring out or die palm muted, where the silence sits, where the feel changes. Then the drums get built against real measurements instead of vibes.

Bars 9 to 12 ring open while everything around them is dead palm mutes. Nobody labelled that, it heard it.

Real output from reaperd.py profile, run on a rendered test stem.

track GTR L tempo 150 bars 16
Bar by bar analysis of a guitar stem: hits, density, timing regularity, decay, silence, level and the sixteenth note grid.
bar hits dens ioi decay sil rms grid
1 16 10.0 0.06 0.02 0.10 -27.3 Xxxx xxxx Xxxx xxxx
2 14 8.8 0.25 0.02 0.20 -27.6 Xxxx xxx. Xxxx Xxx.
3 16 10.0 0.06 0.02 0.11 -27.4 xxxx Xxxx xxxx xxxx
4 14 8.8 0.24 0.02 0.21 -27.5 xxxx Xxx. xxxx Xxx.
5 14 8.8 0.32 0.03 0.12 -24.8 Xxxx Xx.x xxxX xx.x
6 14 8.8 0.31 0.03 0.12 -24.0 xxxx xx.x XxxX Xx.x
7 14 8.8 0.31 0.03 0.12 -25.0 xxxx xx.x xxxx xx.x
8 14 8.8 0.31 0.03 0.14 -24.0 xxxx xx.x xxxX Xx.x
9 19 11.9 0.78 0.90 0.00 -17.3 Xxxx xxx. XxxX xxxx
10 21 13.1 1.21 0.99 0.00 -17.2 XXxx xxx. xxxx xxx.
11 17 10.6 0.96 0.87 0.00 -18.0 X.xx xxx. Xxxx xxx.
12 24 15.0 1.01 0.96 0.00 -18.0 Xxxx xxxx Xxxx xxxx
13 14 8.8 0.32 0.21 0.09 -24.5 xxxx x.xx xxxx X.xx
14 14 8.8 0.31 0.02 0.24 -27.3 xxxx X.xx Xxxx X.xx
15 14 8.8 0.30 0.02 0.20 -27.3 xxxx X.xx xxxx x.xx
16 8 5.0 0.30 0.01 0.54 -29.3 xxxx x.xx x... ....
[A] bars 1–6 [B] bars 7–8 [C] bars 9–12 [D] bars 13–15 [E] bars 16–16
When a measurement looks wrong

A daemon is always the background app.

one command turns it off python3 reaperd.py media --fix-offline

REAPER can unload your audio the moment it stops being the active window. It's a preference, it saves RAM, and working by hand you'd never notice. A daemon notices, because a daemon is never the active window. Reads come back describing media that isn't loaded, your virtual instruments keep playing while your recorded tracks go quiet, and it looks like a plugin problem instead of a checkbox.

So it tells you. It names the preference, lists which items are offline and which are actually missing, and warns you before it measures anything, so a number never arrives quietly wrong.

Files in. Files out.

Thirty seconds, then restart REAPER.

Free and open source under MIT. macOS, Windows or Linux. REAPER plus Python 3, and nothing else.

git clone https://github.com/wretcher207/reaper-daemon.git && cd reaper-daemon && python3 setup/install.py
  • License · MIT, free
  • Runtime · REAPER
  • In · JSON command files
  • Out · JSON results, REAPER project edits
Mixing

Mix your REAPER session with an AI agent

Reaper Daemon lets Claude, or any MCP-capable agent, read every plugin and parameter in your open session with scan_fx, then make real moves. Set an FX value, write automation, adjust a send. Nothing happens off in a black box. It's your actual REAPER session, on your actual machine.

verify_change captures the track before and after a move and reports the loudness change, plus per-band spectrum when the Post Mortem engine is installed. Every move lives inside a REAPER undo block. The agent doesn't hand back a finished mix. It makes a move, shows you the numbers, and you audition it.

  • The bass is muddy, pull down the low mids on that track.
  • The vocal is sitting on top of the mix, bring it back.
  • Tune the bass until its LUFS lands 3 dB lower.
  • Read what's on the guitar bus and tell me what's fighting for the same space.
  • Carve 2 dB at 300 Hz on the bass and show me what changed.
New in 3.21.0

Turn a recording into drum MIDI.

Separate the drums from an audio item and recreate the hits on your own kit. Analysis runs locally in the background, preserving the source trim and timeline position. Requires the optional Python 3.11 model environment. Exact cymbal types, hat openness and individual tom pitches are estimates.

Transcription setup and usage

Reference

Install Reaper Daemon

  1. Clone and run the installer

    Copy the one-line installer at the top of this page, macOS/Linux or Windows, and paste it into your terminal. It clones the repo and runs setup/install.py, which finds REAPER and wires the bridge into its startup script.

  2. Restart REAPER

    Quit and reopen REAPER once so the startup script loads the bridge. It then runs forever in the background and writes a heartbeat file you can check.

  3. Point your agent at the folder

    Tell Claude Code, Codex, or your agent of choice where the clone lives. It writes JSON commands into inbox/ and reads results from outbox/.

  4. Confirm it's live

    Run python3 reaperd.py status from the clone (use python on Windows). A live heartbeat and a JSON description of the open project mean the daemon is in.

Can it turn a recording into drum MIDI?

Yes. Version 3.21.0 adds local drum separation and transcription. Start a background job from an audio item, then insert the notes onto your drum kit with the original trim and timeline position preserved. It needs the optional Python 3.11 model environment. Exact cymbal types, hat openness and individual tom pitches are estimates.

Can AI mix my song in REAPER?

It can make real moves in your REAPER session, set FX parameters, write automation, adjust sends, and measure what changed. It doesn't render a finished mix on its own with a guaranteed result. Every move sits inside an undo block, so you hear it and decide.

Is Reaper Daemon a REAPER MCP server?

Yes. reaper_mcp.py ships in the repo and exposes the bridge as MCP tools over stdio, with no network port. The file bridge underneath also works with any agent that can read and write JSON, MCP or not.

Does it work with Claude Desktop, Claude Code, or ChatGPT?

It works with Claude Desktop and Claude Code, and with any MCP client or agent that runs on your machine and can read and write files. The ChatGPT website can't reach a REAPER session on your computer, so use a local MCP client instead.

How is this different from AI mixing plugins like Neutron?

Those plugins analyze audio and apply a suggestion inside their own window. The mixing bridge controls your installed plugins. Optional drum transcription processes audio locally in a separate worker. It lets an agent read your whole REAPER session, make the same moves you would make by hand with your own plugins, measure what happened, and undo it.

Is this free?

Yes. Reaper Daemon is free and open source under the MIT license. The source is on GitHub. There's nothing to buy.

Do I need a REAPER extension like SWS?

No. The bridge uses the native REAPER API only. No third-party extensions, no plugins, no separate install.

Is there a server or network connection?

Not at runtime. The bridge opens no socket and listens on no port. The agent writes JSON files into a folder and a Lua script inside REAPER reads them; everything stays on your machine. If your agent prefers MCP, an optional stdio MCP server ships in the repo and speaks over the same files, still nothing on the network.

Can the agent break my project?

Every command that changes the project runs inside a REAPER undo block. If an edit is wrong, Cmd+Z reverts it like any other action.

Does it work on Windows?

Yes. The bridge is pure Lua on the native REAPER API and the CLI is a single Python file, so the same install runs on macOS, Windows, and Linux. setup/install.py detects your OS and wires REAPER's startup script automatically.

Do I need Shreddage and the GGD Nolly bass for the guitar side?

Those are the two libraries mapped out of the box, Shreddage 3.5 Argent in E or drop C# and the GGD Nolly bass. The engine writes plain MIDI with keyswitches, so a different library is a new entry in one map file, not a rewrite. The drum side already discovers any kit you've installed.

Which agents work with it?

Anything that can read and write files. Claude Code, Codex CLI, Cursor's terminal agent, or your own scripts. The agent doesn't need to know the REAPER API, it discovers the project with scan_fx and acts on tracks and FX by name.

Related

Keep reading.