MX Creative Console

Profiles for Claude Code — and a builder for your own

Ready-made keypad and dialpad profiles for driving a Claude Code session from the MX Creative Console, plus VS Code and Adobe Bridge layouts. Everything here is generated from a plain JSON spec, so you can edit a layout in the browser and download a working .lp5 without installing anything.

Ready-made profiles

Download an .lp5 and import it in Logi Options+. Every profile targets the built-in System plugin, so it imports on any machine without needing the matching application to be installed first.

Build your own

Pick a device, click a control, give it a label and a keystroke. On the dialpad the two dials are editable too — each takes a separate action for turning anticlockwise, turning clockwise, and pressing. Any action can be a keystroke, a string of typed text, or several of them in sequence. The file is assembled in your browser — nothing is uploaded anywhere.

The attention key

The thing a profile alone cannot do is tell you that Claude is waiting. A .lp5 is static configuration — it maps a key to a keystroke and nothing more. To make a key light up when Claude needs you, something has to be running that can push a new image to the device.

How the pieces fit

Claude Code hooks write a small state file; a Logi Actions SDK plugin polls that file and redraws the key when the state changes.

Claude Code hook  ──writes──▶  ~/.claude/mx-console/state.json
                                        │
                              polled 4x/second
                                        ▼
                         Claude Console plugin (C#)
                                        │
                            ActionImageChanged()
                                        ▼
                              key repaints / flashes

The state file looks like this:

{"state": "needs_input",
 "cwd": "/Users/you/project", "title": "project",
 "app": "iTerm", "bundle_id": "com.googlecode.iterm2",
 "reason": "permission_prompt", "ts": 1769600000}
Status. The hooks and the focus script are working and tested. The plugin that does the flashing is written but has not been compiled or run — it needs the .NET 8 SDK, which is a separate install. Treat it as a starting point rather than a finished product, and expect to fix build errors on the first dotnet build. See claude/plugin/README.md in the repository.

Without the plugin

The hooks are still useful on their own. claude/scripts/focus-claude.sh brings the terminal running your Claude session to the front, and you can bind it to a key in Logi Options+ as a Smart Action, or to a system-wide shortcut.

Installing

1. Import a profile

In Logi Options+, choose your MX Creative Console, open the profile menu and pick Import. Keypad profiles and dialpad profiles are separate files — import both if you want the full layout.

2. Install the hooks (optional)

Only needed if you want the attention key or the focus script.

git clone https://github.com/dr-richard-barker/mx-creative-console.git
cd mx-creative-console
./claude/hooks/install.sh

This merges into your existing ~/.claude/settings.json rather than replacing it, keeps a timestamped backup, and can be undone with ./claude/hooks/install.sh --uninstall.

3. Rebuild the profiles yourself (optional)

python3 tools/lp5kit/build_profiles.py     # regenerate every .lp5
python3 tools/lp5kit/verify.py --all      # structural self-check

How it works

A .lp5 is a ZIP archive of Newtonsoft.Json-serialised .NET objects. The format was worked out by unpacking the profiles Logi Options+ exports and matching their structure exactly — there is no published schema.

Keystroke encoding

Each keystroke is one string with four ___-separated sections:

ControlOrCommand+KeyN___2057___Cmd+N___mac-45#¤%&+?1048584#¤%&+?n#¤%&+?com.apple.keylayout.British
└──── logical ────┘   └LCID┘  └label┘  └─ keycode ─┘└── modifier mask ──┘└char┘└─ input source ─┘
SectionMeaning
logicalModifiers in the order ControlOrCommand, Control, AltOrOption, Shift, then the key name.
LCIDKeyboard locale. 2057 is English (UK), 1033 English (US).
labelWhat Options+ shows in its UI. Uses a different modifier order: Cmd, Opt, Ctrl, Shift.
keycodemacOS virtual keycode. The whole mac-… tail is absent in profiles authored on Windows.
modifier maskCGEvent flags OR'd with the left-hand device bits. Arrows also carry 0xA00000, function keys 0x800000.

Verified against real exports

The encoder reproduces strings from the profiles Options+ itself wrote, byte for byte, and tools/lp5kit/verify.py passes on all 21 profiles in the repository — both the generated ones and the originals. That shared pass is the main evidence the generator is producing genuinely valid files.

Confirmed: Logi Options+ imports these files. The Claude Code keypad profile, generated from scratch rather than round-tripped through Options+'s own exporter, imported successfully on real hardware on 29 July 2026. That was the format's one load-bearing assumption.

What that does not prove is that every key fires the right keystroke once pressed — importing shows the file deserialises, not that each encoding lands correctly on the host. Since the encodings are byte-identical to ones Options+ wrote itself, that is a far weaker assumption. If a key misbehaves, please open an issue saying which one.