# Extending Producer Pal

Producer Pal is a stable core with open edges. The core does one thing: control
Ableton Live, with the fewest tools and tokens it can manage. How the AI is
instructed, what you drive it from, and whether there's an AI involved at all is
up to you, without forking the repo or changing the core.

## Script Live over the REST API

The [REST API](/guide/rest-api) exposes every tool over plain HTTP on your own
machine. There's no AI in this path unless you add one.

```bash
# Read the Live Set overview
curl -X POST http://localhost:3350/api/tools/ppal-read-live-set \
  -H 'Content-Type: application/json' -d '{}'

# Set the tempo to 128
curl -X POST http://localhost:3350/api/tools/ppal-update-live-set \
  -H 'Content-Type: application/json' -d '{"tempo": 128}'
```

You can:

- **Build your own interface.** A local web page can drive Live: the whole REST
  API, straight from browser JavaScript.
- **Use it without AI at all.** Generative scripts, batch edits across many
  clips, project scaffolding, reproducible test Sets.
- **Put your own AI in front of it.** The API doesn't care which model. Use an
  agent framework, a local model, a notebook, whatever fits.

The [`ppal-live-api`](/features/tools#ppal-live-api) tool goes lower, with
direct access to the [Live Object Model](https://docs.cycling74.com/apiref/lom/)
for reads and writes the specialized tools don't cover. It's off by default; see
[Live API](/guide/rest-api#live-api).

Zero-dependency [Node and Python sample scripts](/guide/rest-api#sample-scripts)
are included to get you started.

## Drive it from a coding agent

Producer Pal ships a portable [Agent Skill](/guide/skills), built on the
`SKILL.md` convention shared by Claude Code, Codex CLI, and Gemini CLI. Drop the
folder into your agent's skills directory and it can control Live through the
REST API, no MCP client needed.

A coding agent can write and run code against the API, iterate on a generative
script while you listen, and change device settings mid-session:
[notation](/features/midi-notation),
[small model mode](/features#small-model-mode),
[Direct Live API](/features/tools#ppal-live-api). MCP clients can only change
those by changing settings on the device and starting a new conversation.

[Companion skills](/guide/skills#companion-skills) build on that connection.
**`ableton-audio-generator`** synthesizes audio from scratch with plain Node.js
DSP (drum kits, Simpler samples, wavetables, reverb impulse responses, drones)
and places it in Live. **`ableton-export-audio`** goes the other way: it renders
the mix, a single track, or one Session clip to a file (**macOS only**, because
Live exposes no render API, so this drives the Export dialog with AppleScript).
**`ableton-analyze-audio`** hands that file to Google's Gemini for feedback on
how it actually sounds (any platform, needs a `GEMINI_KEY`; it's one small
script, so pointing it at a different audio-capable API is a short edit).

None of these belong in Producer Pal. Driving another app's UI and calling an
external API need a real runtime the Max for Live device doesn't have. The
device could technically do DSP, but synthesis is open-ended enough that an
agent writing real code beats any DSL Producer Pal would have to teach.

[Set up the Agent Skill →](/guide/skills)

## Customize what the AI is told

Shape how the AI uses the tools with text, not code. It all lives in
`~/.producer-pal/` as plain Markdown you can edit, back up, and share, and you
can edit it in the [context editor](/guide/context#the-context-editor).

- **[Skills](/guide/customizing-skills)**: the instructions the AI gets when it
  connects. Override any fragment with your own text, or delete the parts you
  don't use so you stop paying for them every conversation. A fragment can also
  `@include` your own Markdown files, to add guidance the built-ins don't cover.
- **[Global context](/guide/context#global)**: what you want in every Live Set,
  your genres, your habits, your rules.
- **[Memory](/guide/context#memory)**: facts the AI records about you as you
  work, loaded on demand so a growing memory stays cheap.
- **[Custom instructions](/guide/context#instructions)**: the system prompt for
  the built-in [Chat UI](/guide/chat-ui). (External clients bring their own.)

If you can describe a workflow in plain language, you can change how the AI
works.

## Choosing the right extension point

| I want to…                                              | Use                                                |
| ------------------------------------------------------- | -------------------------------------------------- |
| Script Ableton Live without AI                          | [REST API](/guide/rest-api)                        |
| Build my own interface for Live                         | [REST API](/guide/rest-api)                        |
| Work from Claude Code, Codex CLI, or Gemini CLI         | [Agent Skill](/guide/skills)                       |
| Synthesize audio and land it in Live                    | [Companion skills](/guide/skills#companion-skills) |
| Render a mixdown or stem (macOS only), or analyze a mix | [Companion skills](/guide/skills#companion-skills) |
| Teach the AI a production technique                     | [Skills](/guide/customizing-skills)                |
| Tell the AI my preferences once, for good               | [Global context](/guide/context#global)            |
| Cut what the AI costs per conversation                  | [Trim the skills](/guide/customizing-skills)       |

## Ideas under consideration

These aren't commitments, just what I'm thinking about after 2.1:

- **Custom skills as first-class.** Today you extend the skills by overriding a
  fragment and `@include`-ing your own files. Registering a standalone skill
  (named, described, and loaded when it's relevant) is a natural next step.
- **Personas.** [Presets](/guide/chat-ui#presets) already bundle a provider,
  model, tool set, and notation. Carrying their own context and skills too would
  make them a full switch of the AI's setup for a focused task.
- **Workflows.** Fixed tool-call sequences the AI runs but doesn't improvise.
  2.1 answered half the question with [subagents](/guide/chat-ui#subagents),
  which cover the delegation part; whether the fixed-sequence part is worth
  building, or is just a command-oriented skill, is still undecided.

Have an opinion on any of these?
[GitHub Discussions](https://github.com/adamjmurray/producer-pal/discussions) or
[Discord](https://discord.gg/rmU3DSzgwH).

## Stable core

The core repo won't change much after 2.0, and that's on purpose. Extensions
don't break when the core doesn't move.

Starting with 2.0, breaking changes need at least a minor version bump (2.1,
3.0); patch releases stay backward-compatible. Core work continues on bug fixes,
new Live API features as they land, and efficiency, since cost matters whether
you're on a local model, a subscription, or pay-as-you-go. All through small
improvements, not rewrites.

## Contributing back

If you find tweaks to the default skills or tool and parameter descriptions that
make the AI behave better, send a pull request. Improvements to the built-ins
reach everyone. A few areas I'm especially interested in:

- **Skills and chat system instructions**: changes to the built-in Producer Pal
  Skills or the Chat UI system instructions, especially ones backed by
  experiments that show better behavior.
- **Coding-agent skills**: more [Agent Skill](/guide/skills) examples for other
  workflows and agents. I'm happy to feature good ones on this site.
- **MIDI notation and transforms**: experiments with other notation systems, and
  additions to the [transforms](/features/midi-notation#transforms) syntax. Ask
  first so we can agree on the grammar direction.

Changes like these land best with
[evals](https://github.com/adamjmurray/producer-pal/blob/main/evals/README.md)
that show they help, ideally on both large and small models, since a prompt
tweak that helps a big model can hurt a small local one.

The toolset itself has stabilized, so changing a tool or adding one takes some
convincing. Ask first. The
[contributing guide](https://github.com/adamjmurray/producer-pal/blob/main/CONTRIBUTING.md)
covers the strict code-quality checks (they're there to fight AI slop, not to
gatekeep) and how to work with them.

Questions, or an extension to show off?
[GitHub Discussions](https://github.com/adamjmurray/producer-pal/discussions) or
[Discord](https://discord.gg/rmU3DSzgwH).
