← MidiPilot overview

MidiPilot Modes and Conversations

MidiPilot answers in one of two ways: Simple mode sends a single request, Agent mode works step by step and calls tools between the steps. This page covers both modes, how answers stream in while they are still being written, the two shortcuts that start a conversation from what is already on screen, and where finished conversations are kept.


Simple Mode (One-Shot)

Simple mode sends a single API call to the AI model containing your instruction, the current editor state, selected events, and surrounding musical context. The model responds with one complete answer - no follow-up calls, no iterative loop.

How It Works

  1. Your prompt is bundled with a JSON snapshot of the editor (cursor position, active track, tempo, time signature, selection, and ±5 measures of surrounding events)
  2. Everything is sent as one request to the model
  3. The model returns a single JSON response with one or more actions (edit, delete, create_track, set_tempo, etc.)
  4. MidiEditor executes all actions from that response at once

When to Use Simple Mode

Limitations

If MidiPilot detects a truncated response (finish_reason: "length"), it will display a warning suggesting you switch to Agent mode for the task.

Simple Mode - one-shot response from GPT-5.5 streaming text and the resulting JSON action into the editor

Agent Mode (Multi-Step)

Agent mode is the powerhouse for complex compositions and large-scale edits. Instead of squeezing everything into one response, the AI works iteratively - planning, executing, inspecting, and adjusting across multiple API calls until the task is complete.

How It Works

  1. Your prompt is sent along with the system prompt and a set of 22 tools (plus 5 FFXIV tools when FFXIV mode is on) the model can call
  2. The model responds with one or more tool calls (e.g., create_track, insert_events, get_editor_state)
  3. MidiEditor executes each tool call and sends the results back to the model
  4. The model reviews the results, decides the next step, and issues more tool calls
  5. This loop continues until the model decides the task is complete (or the max steps limit is reached)

Why This Matters

Agent Steps Panel

During an Agent run, a collapsible Agent Steps panel appears below the chat showing real-time progress: each tool call, its parameters, and results. The agent loop can also stream live reasoning summaries, assistant text, and tool-call argument progress while the step is still being generated. Step indicators use theme-aware colors that adapt to dark and light mode (⏳ pending, 🔄 active, ✅ done, ⚠ retrying, ❌ failed).

Gemini 3.1 native streaming with live thought summaries and Agent tool progress

When to Use Agent Mode

Configuration

SettingDescription
Agent Max StepsMaximum tool calls per request (5-100, default 50). Increase for very large compositions.
Token LimitOptional output cap. Agent mode is less sensitive to this since each call is smaller, but very low limits can still truncate individual steps.

Agent Conductor & Working State

The agent loop is wrapped by a lightweight conductor that owns a compact, program-managed working state: the user goal, the inferred task type, a list of confirmed facts (what the model has already accomplished), the last tool result, the active constraints (e.g. FFXIV rules), and a counter of consecutive failed write attempts.

GPT-5.5 model-isolation policy

For OpenAI gpt-5.5*, MidiPilot applies a small set of model-specific mitigations through a central policy table - nothing else is touched. Currently:

On OpenRouter, only the schema-light tools and prompt sanitisation apply (no Responses-API knobs). On every other model, including all current OpenAI gpt-5*/gpt-4o/o-series, Pitch Bend and parallel tool calls remain unchanged.


Response Streaming

MidiPilot uses Server-Sent Events (SSE) to stream responses in real time. Instead of waiting for the entire response to complete, Simple mode can show text or action composition immediately, and Agent mode can show live reasoning, assistant text, and tool-call progress while each step is still being generated.

How It Works

When Streaming Is Used

ModeStreamingReason
Simple - text response✅ YesReduces perceived latency
Simple - JSON actions✅ PreviewShows action composition, then executes after complete JSON arrives
Agent - Chat Completions✅ YesStreams assistant text and tool-call argument deltas when the provider supports them
Agent - OpenAI Responses API✅ YesStreams text, reasoning summaries, and function-call arguments for GPT-5-family tool use
Agent - Gemini native✅ YesStreams thought summaries and whole function calls via :streamGenerateContent
Broken provider/model stream⚠ FallbackRetries non-streaming and marks the model for the current app session
OpenAI GPT-5.4 (Chat Completions, Material Dark) and Gemini 3.1 native streaming side by side - see the MidiPilot overview for the GPT-5.5 Responses-API run
Model dropdown showing a model marked with the warning icon and a (Simple) suffix after a streaming failure
Mode-scoped streaming fallback - failed paths are marked (Simple), (Agent), or (Simple+Agent) in the model dropdown until you re-enable streaming for that model

Non-Streaming Reference Run

For comparison, here is the same Agent loop running without live streaming - either because the provider does not support it, the user disabled Live Streaming in settings, or a previous request hit the per-session streaming-fallback marker. Tool calls and assistant text still arrive correctly, just in one chunk per round-trip instead of progressively.

Non-streaming Agent run - same multi-step composition flow, batched tool results per round-trip

Ask MidiPilot About a Selection

The quickest way to start a conversation about the music in front of you: select notes in the editor, right-click them and choose Ask MidiPilot about the selection. There is no dialog and nothing to fill in - the question goes out immediately.

MidiPilot writes that question for you, and it describes what you pointed at: how many notes are selected, the bar or bar range they sit in, the track they belong to (by name, or “across N tracks” when the selection spans several), and the pitch range from the lowest to the highest note. The selected notes themselves travel along with the question as data, so the answer is about your actual material rather than about a description of it.

The note context menu with the entry Ask MidiPilot about the selection

Right-click a selection - the entry sends the question straight to MidiPilot with the notes attached.

Edit → Ask MidiPilot… is the smaller version of the same idea: it opens the panel and puts the cursor in the input without sending anything.


Questions About the Editor Itself

MidiPilot does not only work on your music - it also answers questions about MidiEditor AI. Ask “How do I split drums?” or “What does the voice-load lane show?” and it looks the answer up in the built-in manual instead of guessing: search_help finds the matching sections, get_help_section reads the best one in full, and the reply is written from that text with the manual page named, so you can open the page and read the rest.

Both halves live in the same conversation: ask how a feature works, get the answer with its page reference, then ask MidiPilot to use that feature on the open file. External clients connected to the MCP server get the same two tools.

MidiPilot answering a how-do-I question: the search_help and get_help_section steps above an answer that names the manual page

A question about the editor itself - MidiPilot looks the answer up in the manual and says which page it comes from.


Conversation History

MidiPilot automatically saves every conversation as a JSON file. You can browse, search, and resume past sessions at any time.

How It Works

Conversation File Format

Each conversation is stored as a single JSON file containing the full message history, model/provider info, token usage, per-turn metadata, and the associated MIDI file path. Files are human-readable and can be exported or shared.

Conversation history dropdown menu

See also