Reaper Daemon workflow preview
Workflow · reaper · v3.13.0

Reaper Daemon

Drive REAPER from Claude, Codex, or any AI agent on macOS, Windows, or Linux. No extensions, no network server, files in and files out. Free and open source.

Install · one line
macOS / Linux
git clone https://github.com/wretcher207/reaper-daemon.git && cd reaper-daemon && python3 setup/install.py
Windows
git clone https://github.com/wretcher207/reaper-daemon.git; cd reaper-daemon; python setup/install.py

Inputs

  • JSON command files

Outputs

  • JSON results
  • REAPER project edits

A local file bridge for driving REAPER from an AI agent. No network, no socket, nothing listening on a port. The agent drops JSON command files in a folder, a Lua script inside REAPER runs them and writes JSON results back. That is the whole design. If your agent speaks MCP, an optional stdio server in the repo exposes the same bridge as typed tools.

git clone https://github.com/wretcher207/reaper-daemon.git && cd reaper-daemon && python3 setup/install.py

View the source on GitHub →

Free and open source, MIT licensed. macOS, Windows, or Linux, REAPER plus Python 3, about thirty seconds to install.

What it does

  • Project control: transport, tempo, cursor, time selection, render
  • Tracks: add, delete, rename, select, volume, pan, mute, solo, arm, color
  • FX: add, remove, bypass, reorder, set parameters, write automation envelopes
  • Markers, regions, and media items
  • MIDI: insert and audition MIDI files
  • Discovery: scan_fx dumps every FX and parameter in the project
  • Stem profiling: read a guitar track bar by bar and plan drums per section (Daemon Beater)
  • Recipes: save a command sequence and replay it on any project

Every mutating command runs inside a REAPER undo block, so Cmd+Z reverts it like anything else.

Daemon Beater

New in 3.13. Before the agent writes a drum part, it reads the guitar. reaperd.py profile walks a stem bar by bar and prints 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 sections change, which sections repeat.

Point it at bar 33 and it reads just that window, not the whole song. It only pays for the bars you ask about, and the numbers match what a full pass would say. The agent proposes section labels, you correct them, and the drums get built section by section against real measurements instead of vibes.

How it works

One runtime. The Lua bridge runs forever as a defer loop inside REAPER. It polls an inbox folder, executes one command per tick, writes results to an outbox, and drops a heartbeat file you can check. It is the only thing that touches the REAPER API. Every JSON write is atomic, so a reader never sees a half-written file.

The bridge is plugin-agnostic. It ships with no knowledge of any specific synth, amp sim, or instrument. The agent learns what a project contains with scan_fx, then acts on tracks, FX, and parameters by name.

Who this is for

  • Producers who already run a coding agent on their Mac and want it to touch their session, not just talk about it
  • Anyone building tools on top of REAPER who does not want to maintain a socket server or an extension
  • People who want their drum, MIDI, or FX automation generated and inserted in one move

Install

The fastest path is the one-line installer at the top of the page. It clones the repo and runs setup/install.py, which detects your OS, macOS, Windows, or Linux, finds REAPER’s resource folder, and writes a managed block into its startup script so the bridge loads on every launch.

If you already have a coding agent on your machine, you can hand the whole job to it instead. Paste the repo’s INSTALL.md into Claude Code or Codex and it will clone, wire startup, pause for you to restart REAPER, and run a real smoke test to confirm the bridge is live.

Reaper Daemon on GitHub →

Install

Install Reaper Daemon

  1. Step 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. Step 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. Step 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. Step 4
    Confirm it is 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.

Questions

Common questions

Is this free?

Yes. Reaper Daemon is free and open source under the MIT license. The source is on GitHub. There is 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.

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 does not need to know the REAPER API, it discovers the project with scan_fx and acts on tracks and FX by name.