# Como criar um plugin VST3 ou CLAP com um agente de programação de IA

Por Sonorie. Publicado em 2026-10-27, última alteração em 2026-10-27. https://sonore.dev/pt/blog/build-audio-plugin-with-ai-coding-agent/

Um agente de programação de IA consegue escrever um plugin VST3 ou CLAP funcional, mas não de memória. Agentes falham em frameworks de áudio em C++ inventando nomes que soam corretos e escrevendo código que compila, mas quebra a thread de áudio. A solução é dar ao agente a API real do framework para conferir, um conjunto de regras que ele não consegue adivinhar e uma definição de “pronto” que um validador impõe. É isso que o Sonore SDK oferece para o Claude Code, o Codex, o Cursor e qualquer cliente MCP. Entre os frameworks de plugins estabelecidos, ele é o único com um servidor MCP oficial: o JUCE e o iPlug2 trazem arquivos de instruções para agentes, mas nada que um agente possa consultar.

## Por que agentes erram plugins de áudio

Uma biblioteca C++ desconhecida raramente faz o agente recusar a tarefa. Ele improvisa, e plugins de áudio punem a improvisação de três maneiras:

1. **Nomes inventados.** Uma classe que deveria existir, como um `CompressorPro`, ou uma classe real recebendo um método de outro framework. O código parece perfeito e não compila.
2. **Código que compila e ainda assim está errado.** Uma alocação ou um lock dentro de `process()`, que roda na thread de áudio. Funciona na máquina do desenvolvedor e cai sob carga na sessão de alguém.
3. **Regras que não estão em lugar nenhum da API.** Um limitador com look-ahead que não informa sua latência espalha qualquer mix paralelo em que for colocado. Uma tabela de parâmetros reordenada na versão 1.1 carrega sessões antigas nos controles errados. Nenhum cabeçalho diz isso.

O primeiro problema é de nomes, o segundo de comportamento, o terceiro de convenções. Um modelo maior não ajuda em nenhum deles, porque a informação não está nos dados de treinamento com confiabilidade suficiente para ser confiável.

## O que o agente precisa, em vez disso

Três coisas, cada uma respondendo a um desses modos de falha:

| O agente precisa de | Porque | No Sonore SDK |
| --- | --- | --- |
| Uma forma de verificar se um nome existe | A memória produz nomes plausíveis | Um servidor MCP cuja busca cobre todos os 766 tipos públicos em 282 cabeçalhos |
| As regras que um plugin deve seguir | Elas não podem ser lidas da API | A skill e `sonore_rules`: assinaturas de `process`, latência, o que a thread de áudio proíbe |
| Uma definição de pronto | “Compila” não é “funciona” | Projetos gerados com autoverificação e uma auditoria em tempo real no `ctest`, prontos para os validadores |

Tudo isso é gerado a partir dos cabeçalhos do SDK pelo mesmo script. Isso importa mais do que parece. Uma cola manual para agentes se distancia do código em uma versão, e então vira uma segunda fonte de nomes inventados. Aqui, `npm run verify:llms` falha o build se os arquivos divergirem dos cabeçalhos, e `npm run verify:mcp` confere se a busca encontra cada tipo público, então um “no match” vindo do servidor é uma resposta real, e não uma lacuna no índice.

## As seis ferramentas do servidor MCP

O servidor roda a partir de um checkout local via stdio, precisa apenas do Node.js, e cada ferramenta só lê arquivos do checkout.

| Ferramenta | O que responde |
| --- | --- |
| `sonore_search` | Se esta classe, função, alias ou conceito existe, e onde. As palavras batem em qualquer ordem, então “ladder filter” encontra `LadderFilter`. |
| `sonore_declaration` | A declaração real, com o comentário que explica por que ela existe. |
| `sonore_header` | Para que serve um cabeçalho, seus tipos públicos e a linha de include. |
| `sonore_headers` | Todos os cabeçalhos, com uma linha de finalidade para cada um. |
| `sonore_example` | Um plugin completo e funcional: efeito, instrumento, sidechain, saídas auxiliares, saída MIDI, sampler, reverb, editor nativo e mais. |
| `sonore_rules` | A forma de um plugin, qual assinatura de `process` faz um instrumento, como informar a latência e o que é proibido na thread de áudio. |

Um exemplo da diferença que isso faz. Quando pedido `CompressorPro`, o servidor responde que nada no SDK corresponde. Quando pedido “ladder filter”, ele devolve `LadderFilter` e o filtro ladder de diodo, com os cabeçalhos em que estão. O agente escreve o segundo, não o primeiro.

## Configuração

Clone o SDK e depois adicione a skill e o servidor ao seu agente. Para o Claude Code:

```sh
git clone https://github.com/SonorieAI/sonore-sdk "$HOME/sonore-sdk"
npx skills add SonorieAI/sonore-sdk --skill sonore-sdk -a claude-code -g
claude mcp add --scope user sonore-sdk -- node "$HOME/sonore-sdk/scripts/mcp-server.mjs"
```

Para o Codex, use `-a codex` e `codex mcp add`. Para o Cursor e o Antigravity, instale a skill com `-a cursor` ou `-a antigravity` e configure o servidor no arquivo de configuração MCP deles. O botão **Instalar Skill e MCP** na [página inicial](/pt/#agents) traz os comandos exatos para cada um. Sem a ferramenta de linha de comando `skills`, copiar `skills/sonore-sdk` para a pasta de skills do agente faz o mesmo trabalho.

## Um primeiro prompt que funciona

Seja específico sobre o plugin e diga o que significa “pronto”:

```txt
Make a tape-style saturator plugin with Drive, Tone and Mix.
Start from a generated Sonore project. Look up every sonore:: name
before you use it. It is done when it builds, ctest passes, and
clap-validator and pluginval run clean.
```

Com a skill carregada, o agente segue o fluxo de trabalho do SDK por conta própria: gera um projeto com `sonore_new_plugin.cmake`, escreve o DSP no único `src/plugin.cpp`, confere os nomes à medida que avança e compila. Um arquivo-fonte vira um `.clap`, um `.vst3`, um Audio Unit no macOS, um bundle LV2 e um aplicativo standalone, e o mesmo projeto gera um AUv3 para iPhone e iPad e um app Android.

## O que significa “pronto”

Um plugin que compila é um rascunho. O projeto gerado oferece ao agente três verificações, em ordem do que cada uma prova:

1. **Ele compila** todos os formatos a partir de uma única compilação.
2. **O `ctest` passa.** Ele roda dois testes. O `--verify` do aplicativo standalone renderiza áudio offline e confirma que ele está saudável. Em um projeto compilado a partir de um checkout do SDK, a auditoria em tempo real (`sonore_add_rt_test`) conta cada alocação feita na thread de áudio em vários sample rates e block sizes, e falha em qualquer uma. O próprio SDK submete seus exemplos ao mesmo padrão: nove sample rates de 8 kHz a 384 kHz, block sizes de 1 a 8192, zero alocações.
3. **Os validadores passam.** `clap-validator` e `pluginval` carregam o plugin do jeito que os hosts fazem. Os dois templates de projeto passam neles com strictness 10 do pluginval tal como gerados, então uma falha é algo que o agente introduziu.

A auditoria e os validadores pegam o que a leitura do código não pega, e por isso devem estar no prompt.

## O que ainda depende de você

Um agente com as ferramentas certas escreve um plugin que carrega, passa na validação e não aloca na thread de áudio. Ele não consegue dizer se o saturador soa bem, se a interface parece certa numa sessão, ou se um host que você se importa se comporta direito. Escuta, gosto e testes no seu DAW continuam sendo seus. Os mesmos cuidados valem para os formatos com guardiões: o AAX exige um acordo de desenvolvedor com a Avid e assinatura PACE, algo que nenhum framework pode conceder.

Para a versão passo a passo, sem agente, leia [Primeiros passos](/docs/getting-started/). Para ver como o SDK se compara com o JUCE, o iPlug2 e os demais, veja [Frameworks de plugins de áudio comparados](/pt/blog/audio-plugin-frameworks-compared/).

## Fontes

- [Repositório do Sonore SDK](https://github.com/SonorieAI/sonore-sdk): a seção “Writing plugins with a coding agent” do README, o `llms.txt` e o `scripts/mcp-server.mjs`
- [A skill sonore-sdk](https://github.com/SonorieAI/sonore-sdk/tree/main/skills/sonore-sdk)
- [Especificação do Model Context Protocol](https://modelcontextprotocol.io/specification)
- [Formato Agent Skills](https://agentskills.io)
- [Convenção llms.txt](https://llmstxt.org)

## Perguntas

### O ChatGPT, o Claude ou o Cursor conseguem escrever um plugin VST3?

Sim, desde que o agente consiga consultar a API real do framework e compilar o resultado. Sem essa consulta, os agentes inventam nomes de classes e métodos que não existem no framework que estão usando. Com o servidor MCP e a skill do Sonore SDK instalados, o agente verifica cada nome, parte de um projeto gerado e só considera o plugin pronto quando ele compila e os validadores passam.

### O que é o servidor MCP do Sonore SDK?

Um servidor do Model Context Protocol que roda localmente a partir de um checkout do SDK, via stdio, sem outras dependências além do Node.js. Suas seis ferramentas somente de leitura respondem se um nome existe, mostram sua declaração real, descrevem um cabeçalho, listam os cabeçalhos, devolvem um plugin de exemplo completo e explicam as regras de um plugin. Ele fala MCP 2026-07-28 e também o handshake `initialize` mais antigo.

### O servidor MCP envia meu código para algum lugar?

Não. Ele lê apenas o checkout do SDK na sua máquina: sem acesso à rede, sem telemetria e sem nenhuma ferramenta que escreva arquivos.

### Com quais agentes de programação ele funciona?

A skill usa o formato Agent Skills, que o Claude Code, o Codex, o Cursor e o Antigravity leem. O servidor MCP funciona com qualquer cliente MCP, incluindo o aplicativo de desktop do ChatGPT por meio do Codex.

### É gratuito?

Sim. O Sonore SDK, a skill e o servidor MCP são de código aberto sob a Licença Apache 2.0, que permite plugins de código fechado e comerciais sem limite de receita, taxa ou tela de abertura.
