Skip to content

The Desktop Editor ​

The Electra One Editor is the preset editor you already know, running on your own computer. Everything in the Preset Editor chapter describes it too: the same layouts and controls, the same control settings, SysEx templates, patch requests, Lua editor and debugger, and the same MIDI console.

What this page covers is the part that has no online counterpart, because each piece of it needs something that belongs to you — a disk, a keychain, or a USB port. Your presets are files in a folder you choose, a preset slot can be a folder on that disk, the AI assistant runs on your own Anthropic key, and the firmware needed to rescue a controller is in the application rather than on a server.

The desktop editor starts with no account and no network. Signing in is something you do when you want the shared Library, and going offline again takes nothing away.

Settings ​

Everything described here is set up in one place: Settings in the main menu, with a tab per decision.

The Library tab of Settings
Settings: the library folder, where every preset, revision and script is written as a file

Your presets are files ​

Every project, revision, snapshot and Lua script is written into a library folder as plain JSON, one file per document. There is no database and nothing hidden: you can back the folder up, put it in Git, sync it between computers, or read it by hand when something has gone wrong.

The folder is yours to choose — a synced folder, an external drive, wherever you already keep your work. Change folder picks a new one and Open folder shows it in the file manager.

Two things worth knowing:

  • Changing the folder does not move what is already saved. The presets stay where they are and the editor starts again from the new folder.
  • A folder that has gone missing — an unplugged drive, a sync that has not finished — falls back to the default folder rather than leaving the editor unable to read or write anything.

Unlike the online editor, a preset here has no size limit. The cloud refuses a document over one megabyte; a file on your disk has no such ceiling.

Agent instructions ​

Both of the editor's agents — the assistant in the AI panel, and a Claude Code session working on a watched folder — can be given standing instructions: how you like Lua written, which controller is on your desk, what they must not touch.

The Agent instructions tab
Agent instructions: a CLAUDE.md in the library folder, edited in the app and given to both agents

The Agent instructions tab edits a CLAUDE.md in your library folder. It is an ordinary markdown file, so you can also open it in any editor, keep it in Git, or copy it to another machine.

  • The assistant in the AI panel is given it with every question.
  • A copy is written into the watched slot folder as .electra/instructions.md, and the folder's own CLAUDE.md tells an agent opened there to read it first.

Save writes the file, Remove deletes it. Removing is not a way of switching the instructions off and on — once the file is gone, neither agent is given anything until you write new instructions.

A preset slot as a folder ​

A preset slot is a handful of files, so the editor can treat one as a folder on your disk. Point a slot at a folder and its files — preset.json, main.lua, router.lua and the rest — appear there as ordinary files for any tool you like: an editor, Git, a diff, a coding agent.

The Current slot page watching a folder
The Current slot page of the desktop app: the Watch a folder for this slot switch and the folder under it. The gear opens the Slot folder settings

The watch is switched on and off on the Current slot page, with Watch a folder for this slot. Which folder, and whether the editor writes a CLAUDE.md into it, are set in Settings, Slot folder; the gear at the right of the switch opens that tab.

Nothing reaches the controller on its own. A change on disk is staged and shown in the file list; Apply changes writes the changed files to the slot and reloads the preset. That is the deliberate act, and it is the only one.

The editor writes nothing into your folder except what is under .electra/:

FileWhat it is
request.jsonwritten by a tool asking for something to be done
status.jsonwhat came of it, file by file
log.txtwhat the controller printed
sysex.logwhat the app and the controller said to each other
screen.pnga picture of the controller's screen, when asked for one
instructions.mdyour agent instructions, copied from the library folder
reference/the reference files a coding agent needs, written with the folder's CLAUDE.md
journal.mdevery hand-over between you and the agent: what changed in each file, and who changed it
baseline/the files as the last hand-over left them
incoming/a version of a file the app would not write over the agent's unpushed change

An upload is additive: a file the slot has and the folder does not is left running on the controller. Nothing here deletes anything from the device.

The app has to be running, with a controller connected

A request is carried out against the slot the controller is on, whatever page the app is showing - the editor included. While a folder is watched a small strip in the corner of the window names it, says what the last request did, and is where the watch is stopped. With the app closed, a request is answered with an error rather than hanging - but it is not carried out.

While a folder is watched the Current slot page also lists its test files, main-tests.lua and router-tests.lua, beside the slot's own: open one to edit it, Run tests to run it on the controller as it is on screen, and Apply changes writes it into the folder. A test file is never stored on the controller, which is why the folder is where the page keeps it; without a watched folder none is offered. Choosing a file in Add a file… adds it.

Working on one preset from both sides ​

The bar along the bottom of the window carries everything done with the folder, as links: Open editor on the Current slot page, which opens the slot's preset in the editor - the one the slot was sent from where there is one, otherwise the one in your library with the same name, and where several share the name a list to choose from - or Open current slot anywhere else; Copy slot to folder, the folder's starting point; Change folder, Open folder and Stop watching.

The editor and the folder are kept in step through the controller:

  • A push reaches the editor. When the preset the editor has open is the one in that slot, the files an agent pushed are taken into it - main.lua and router.lua as they are, preset.json as the layout it describes, with every control keeping its place in the history. The change is marked as an edit, not saved, and one Undo puts your version back.
  • A Send to Electra reaches the folder. The files the editor sent - preset.json, main.lua, and router.lua where there is one - are written into the folder, so the agent sees what you did. Only into a folder that holds this preset: a folder holding another preset is left alone.
  • One of you writes at a time. While a request from the folder is writing to the controller a Send is refused with a message; while the app is writing for you, a request is answered with an error saying so.
  • Every hand-over is written down. .electra/journal.md gets one entry per Send, push or copy: who asked, what they said about it, and what changed in each file - a control by its id and name with the fields that moved, a script as a diff. The agent reads that instead of re-reading your files, and when a push comes from VS Code rather than from the agent, the entry says so.
  • Your work is never written over, and neither is the agent's. A Send that would replace a file the agent changed in the folder and has not pushed yet leaves the agent's file where it is, puts yours in .electra/incoming/, says so on your screen, and the journal lists what your version changes - the agent merges it and pushes. The same holds the other way round in the editor: a push that replaces your unsent edit is one Undo away.

VS Code ​

Once a slot is watching a folder, the Electra One extension makes that folder an ordinary VS Code project and uploading it the build task. One keystroke saves your open editors, writes every changed file, reloads the preset and runs the preset's tests, with a refused file or malformed JSON landing in the Problems panel on the character that broke it.

Three more tasks have shortcuts of their own: reload without writing, run the tests alone, and photograph the controller's screen into the folder.

The extension never talks to the controller itself — it asks the editor, and the editor does it.

The AI assistant, on your own key ​

The desktop editor has an AI tab in the preset editor. It is an agent: it reads and changes the preset you have open through the same actions the interface uses, reads the reference documentation shipped with the app, and — with a controller connected — uploads a preset, reads the controller's log and runs the preset's Lua tests.

The Assistant tab of Settings
The assistant runs on your own Anthropic API key, kept in the system keychain

There is no account behind it. The assistant runs on your own Anthropic API key, created at platform.claude.com and pasted into Settings, Assistant. The key is kept in your system keychain, the requests are billed to your Anthropic account, and the key never leaves the machine.

This is pay-per-use API access, which is not the same thing as a Claude Pro or Max subscription.

Workspace ID, for an organisation-level key ​

A key created inside an Anthropic Console workspace already carries that scope, and the field below it on the Assistant tab can stay empty. A key created at the organisation level does not — Anthropic refuses it outright until a workspace is named, which shows up as an anthropic-workspace-id error the first time the assistant is asked anything.

Workspace ID on the Assistant tab is that name. The id is in the Console's own address bar when the workspace is open, in the form wrkspc_…. Paste it in and save; clearing the field and saving removes it, for when you swap back to a workspace-scoped key. It is an identifier, not a secret, so — unlike the key itself — it is read back and shown once saved.

A session's running cost, shown beside Send in the AI panel, is read from the usage Anthropic's API reports for each request; a workspace lets you see that same spending broken out in the Console, separate from anything else the organisation runs.

Going online, and going back ​

The desktop app's menu has Workspace, your projects, controls and surfaces in the local library, Settings and Go online. Go online signs the app into your Electra One account and adds Library to the menu: presets published by other players to search, open and import, and your own to upload and share. A preset you import is written to your library folder like everything else.

Going online does not move your work into the cloud. The local library stays where it is and keeps being what the editor reads and writes. Go offline signs out again, and nothing stops working, because nothing was running somewhere else.

Rescuing a controller ​

Settings, Factory reset writes the firmware image that came with your copy of the editor into the controller's code flash, through the controller's own boot firmware. It talks to the hardware below the level of the running firmware, so a controller that no longer starts up properly can still be restored — with no network in the room and nothing to download first.

The controller has to be in boot mode, which is a hardware action: hold the boot mode button while powering it on. There is no command that leaves boot mode again, so the way back is a power cycle.

Choose the right model

In boot mode the controller cannot say which hardware it is, so you choose the model yourself and nothing checks it. Make sure you pick the image for the controller in front of you.

Only the code flash is written. The controller's own settings, kept in its data flash, are left alone.

Electra One proudly uses Lua and ArduinoJson.
For support contact info@electra.one · © 2019-2026 Electra One