Extending

Extending Protocol 0

Protocol 0 is built to be extended. There are three ways to add your own behavior:

Add a smart action

A smart action is the easiest way to add a new action: a tiny .py file you drop into Protocol 0's plugins folder. On Windows that's:

C:\ProgramData\Ableton\Live 12 Suite\Resources\MIDI Remote Scripts\Protocol_0\protocol0\plugins\

Smart actions are written in Python. If you're not a programmer, you don't have to learn it: describe what you want to an AI coding assistant (ChatGPT, Claude, Cursor…), point it at the example file below, and it can write the action for you.

Start from the example, which includes comments and a working action you can copy and adapt: the example plugin on GitHub. A smart action is a small plugin with a single @action method — the method name is the action, and its typed parameters become the inputs:

from protocol0.application.plugin.PluginInterface import PluginInterface
from protocol0.application.plugin.action import action
from protocol0.shared.logging.StatusBar import StatusBar


class HelloPlugin(PluginInterface):
    name = "hello"                       # the namespace shown in the shortcut UI

    @action
    def hello(self, name: str) -> None:  # method name = action; params = inputs
        StatusBar.show_message("Hello %s!" % name)

Save the file, restart Ableton, and hello appears in the shortcut UI at http://127.0.0.1:9010/shortcuts — bind it to any combo.

Full reference on GitHub.

Call the HTTP API

When Ableton is open, Protocol 0 exposes a REST API on your machine — the same calls a keyboard shortcut makes under the hood. Any tool that can send an HTTP request (a script, a Stream Deck, your own app) can drive Live through it.

The full, always-up-to-date list of endpoints — with parameters and a try-it-out button — is in the interactive Swagger UI:

http://127.0.0.1:9010/api-docs/index.html

Write a plugin

If you want full flexibility you write a plugin. Coding a plugin is like coding a remote script, except you can use methods and classes from Protocol 0 — so it might be simpler than starting from scratch :)

Like smart actions, plugins are Python files and are discovered automatically — you subclass PluginInterface, declare what you listen to and what you expose, and the script wires it all up.

Full reference on GitHub.