Project Info
Inspiration
The developer community is one of the most underserved audiences when it comes to purpose-built hardware. Creative professionals have consoles, dials, and shortcut decks tuned to their workflows — but developers are largely left with just a keyboard and mouse, even though a huge amount of daily work is repetitive: opening a terminal, scrolling through logs, reaching for an AI assistant, switching context dozens of times an hour. We saw the Logitech MX Creative Console and asked a simple question: why should this only serve designers and video editors? A developer's "day in the life" — jumping between the editor, the terminal, and now AI coding assistants like GitHub Copilot — is exactly the kind of repetitive, physical friction a console like this could remove. We pitched this idea, and it resonated further than we expected: Logitech's Global Hardware & Software Product Manager reached out directly after seeing our pitch, and asked us to help build out exactly this category of plugin — starting with in-editor AI agent access and navigation simplification for developers.
What it does
Twist & Code turns the Logitech MX Creative Console into a physical control surface for Visual Studio Code. The plugin detects when VS Code is the active, focused application and automatically switches the console into a VS Code-specific action profile. When you switch away, it steps back out of the way. Once active, it gives developers: Open/Focus GitHub Copilot Chat — one button press opens Copilot Chat if it's closed, or brings it to focus if it's already open. Open/Focus Integrated Terminal — reveals and focuses the terminal, reusing the existing terminal instance instead of spawning duplicates. Rotary scroll for the Terminal — turn a dial clockwise or counter-clockwise to scroll terminal output down or up. Rotary scroll for the Editor — the same gesture scrolls your active file, without touching the cursor position. Send Prompt to Copilot — the most ambitious action: opens Copilot Chat, focuses the prompt box, inserts a prompt, and submits it — all from the console. The result: a developer can open an AI agent, scroll code, and manage their terminal without ever reaching for keyboard shortcuts or breaking flow.
How we built it
We built the entire plugin using Codex with GPT-5.6, treating it as our primary engineering partner rather than an autocomplete tool. Our approach: Architecture first. We had Codex study the Logitech Actions SDK's documented capabilities before writing any code, explicitly ruling out invented or undocumented APIs. Separation of concerns. We identified early that some features — like injecting text directly into Copilot Chat's input box — couldn't be done by the Logitech plugin alone. So we had Codex design a minimal companion VS Code extension that exposes just the necessary hooks through documented VS Code extension APIs, with a defined communication channel between the plugin and the extension. Production-grade code, not a demo. We pushed for a complete TypeScript project: manifest, icons, build scripts, structured logging (INFO/WARN/ERROR/DEBUG), and full error handling for edge cases like VS Code restarts, Logitech Options+ restarts, multiple VS Code windows, and no active workspace. Documentation as a deliverable. Setup, build, packaging, and troubleshooting instructions were generated alongside the code so the plugin is installable and testable by anyone, not just us.
Challenges we ran into
SDK boundaries. The Logitech Actions SDK can't reach into VS Code's internal UI elements (like the Copilot Chat input box). We had to design a companion extension and a communication bridge rather than force a hacky workaround. Avoiding fragile automation. Our early instinct was to lean on keyboard shortcut simulation for reliability, but we deliberately constrained ourselves to official VS Code commands wherever possible, only falling back to simulated input where no documented API existed. Reliability across restarts. Making sure the plugin correctly re-detects VS Code focus and reconnects to the companion extension after VS Code or Logitech Options+ restarts required careful state handling, not just a happy-path implementation. Staying within documented capability. It was tempting to assume SDK features that would have made things easier — we held the line on only using confirmed, documented functionality.
Accomplishments we're proud of
Going from a hackathon pitch to a real collaboration request from Logitech's Global Hardware & Software Product Manager within the event window. Shipping a genuinely production-ready plugin — not a proof of concept — with no placeholder code, no TODOs, and full error handling. Solving the "text injection into Copilot Chat" problem cleanly, with a proper companion extension architecture instead of a keyboard-simulation hack. Building something that addresses a real, everyday friction point for developers, using hardware that wasn't originally designed with developers in mind.
What we learned
How much of a developer's daily friction is physical and repetitive, not just cognitive — and how removing that friction with dedicated hardware controls can meaningfully improve flow. How to responsibly extend a hardware SDK with a companion software layer when the SDK's documented capability has a hard boundary, rather than reaching for undocumented or fragile workarounds. How effective Codex with GPT-5.6 is as a build partner for a project that spans a hardware SDK, a VS Code extension, and cross-process communication — accelerating architecture decisions as much as the code itself.
What's next
Expand the action library based on direct feedback from Logitech's product team, including more navigation-simplification actions for developers. Support for additional editors and IDEs beyond VS Code. Package and submit through Logitech's official plugin distribution channel so any MX Creative Console owner in the developer community can install it directly.
VS Code MX Creative Console
Cross-platform MX Creative Console controls for Visual Studio Code, Codex, Claude Code, and Microsoft Excel.
Architecture
flowchart LR
MX[MX Creative Console / Actions Ring] --> LP[Logi Plugin Service]
LP --> NP[Native C# application plugin]
NP --> VS[VS Code localhost bridge]
VS --> CE[Codex + Claude Code extensions]
NP --> HUB[Excel control hub]
HUB --> OA[Office.js Excel add-in]
The production Logitech plugin is in native-plugin/. It is a C# ClientApplication plugin that activates for Code.exe and uses documented Logitech command and adjustment classes. The VS Code bridge uses public commands exposed by the installed Codex and Claude Code extensions. The Excel path uses Office.js rather than COM, AppleScript, or UI automation.
Available MX actions
| Area | Actions |
|---|---|
| VS Code | Open VS Code, Copilot Chat, Terminal, editor scroll, terminal scroll |
| Codex | Open sidebar, new agent, open command menu, add active file to thread |
| Claude Code | Open, new conversation, focus input, Plan/Manual mode for the next conversation, accept/reject proposed changes |
| Excel | Open Excel, Home, End, create PivotTable, create chart, Copilot guidance |
Codex and Claude model pickers, private chat controls, and arbitrary model questions intentionally remain inside their extensions. No supported public VS Code commands exist to control those private UI elements, so this project does not simulate clicks or keystrokes.
Requirements
- Windows 10/11 or macOS with Logi Options+ and an MX Creative Console
- .NET SDK 10 for the native plugin build
- Node.js 22 for the VS Code bridge and Excel control hub
- Visual Studio Code with
openai.chatgptand/oranthropic.claude-code - Excel desktop with Office.js support for Excel actions
Build
For a complete Windows release build (native package, VSIX, control-hub integration test, and Excel compilation):
.\scripts\build-release.ps1
Install the resulting native development link into Logi Options+ and the VSIX into VS Code:
.\scripts\install-windows.ps1
Native Logitech plugin
cd native-plugin
& 'C:\Program Files\dotnet\dotnet.exe' build -c Release
The post-build target links the plugin into Logi Plugin Service. Confirm the native plugin loaded by checking:
%LOCALAPPDATA%\Logi\LogiPluginService\Logs\plugin_logs\VsCodeMxConsoleNative.log
VS Code bridge
cd vscode-extension
npm install
npm run package
code --install-extension .\logitech-vscode-bridge-1.0.0.vsix --force
Reload VS Code, then run Logitech VS Code: Show Bridge Status. Use the Logitech VS Code Bridge Output channel to inspect requests.
Excel control hub and add-in
cd control-hub
npm install
npm run build
npm start
Host excel-addin/public/ over HTTPS and update excel-addin/manifest.xml to the trusted host before sideloading it into Excel. Keep the task pane open while using Excel controls. The control hub uses localhost ports 48732 (native TCP) and 48733 (Office.js polling).
Copy excel-addin/public/config.example.js to config.js and place the shared token in it before hosting the task pane.
Configuration
- In Logi Options+, enable Adapt to App for the Creative Console.
- Focus VS Code and assign actions from VS Code MX Console to buttons, dials, or Actions Ring controls.
- The first VS Code profile is blank until actions are assigned. Disable Adapt to App temporarily to return to the general profile.
- For Copilot prompts, run Logitech VS Code: Set Copilot Prompt.
Bridge security
The components bind only to loopback. Before deployment, generate a unique random token of at least 32 characters and configure the same value in all components:
MX_CONSOLE_BRIDGE_TOKENfor Logi Plugin Service and the control hub.logitechVsCode.bridgeTokenin VS Code user settings.excel-addin/public/config.jsfor the locally hosted task pane.
The included default token exists only to make first-run local development possible and emits warnings. Restart Logi Options+ after changing its environment. Set MX_CONSOLE_ADDIN_ORIGIN on the control hub when the task pane is hosted somewhere other than https://localhost:3000.
Testing
- Native build succeeds with zero errors.
VsCodeMxConsoleNative.logreports registered dynamic actions.- VS Code Output shows
Bridge request receivedafter an MX action. - Codex/Claude actions open the appropriate VS Code extension command surface.
- Claude proposed-diff actions only run when a proposed diff is active.
- Excel task pane displays
MX Console Excel bridge ready; test Home, End, PivotTable, and chart operations against a sample workbook.
Run npm test in control-hub/ for authenticated queue integration coverage. Complete HARDWARE-ACCEPTANCE.md on both Windows and macOS before publishing a release.
Platform notes
- Windows defaults:
Code.exe,code,excel, and%LOCALAPPDATA%\Logi\LogiPluginService\Plugins. - macOS defaults: VS Code bundle
com.microsoft.VSCode,open -a "Visual Studio Code",open -a "Microsoft Excel", and the user Logi Plugin Service plugin directory. - Override non-standard Windows launch/process detection with
MX_CONSOLE_VSCODE_COMMAND,MX_CONSOLE_EXCEL_COMMAND,MX_CONSOLE_VSCODE_PROCESS, andMX_CONSOLE_VSCODE_BUNDLE.
Project structure
native-plugin/ Native C# Logitech application plugin
vscode-extension/ VS Code bridge extension
control-hub/ Local Excel command queue
excel-addin/ Office.js Excel task pane
src/ + index.ts Legacy Node SDK experiment retained as reference
Official references
Analysis
View
Metric
- 2
Figures cover GitHub contributors during the hackathon window. A co-authored commit counts in full for each author, so per-member totals add up to more than the whole-team figures.
Technology
- C#In code
- HTMLIn code
- JavaScriptIn code
- TypeScriptIn code
- PythonClaimed
4 of 5 appear in the indexed code. 1 claimed on Devpost could not be matched to code, which may simply mean the tool leaves no trace in the repository.
AI coding agents
No AI coding agent signals were found in this repository.
Detected from committed agent config files and commit authorship. Absence of a signal is not proof an agent was unused.
Codebase size
Source size
53 KB
Source files
32
Counts recognized source files only; vendored directories, binaries and lockfiles are excluded, so this is smaller than the repository on disk.
Repository
Harish03r/Logitech-MX-Creative-Console-Plugins
56 files · 321 KB · @ 772edda
Structure
Application logic
23 files · 41%Domain rules, services and shared utilities.
+5 more
Supporting
Layers are inferred from where files sit in the tree, not from reading the code. A project that names its directories unconventionally will read oddly here — open the file browser to check anything the diagram implies.
Languages
- TypeScript53%
- C#24%
- Markdown19%
- XML2%
- YAML1%
- HTML1%
- Other (1)0%
Share of indexed source by file size. Binary and vendored files are excluded.
Dependencies
package.json
npm · 7- @logitech/plugin-sdk
- +6 more
vscode-extension/package.json
npm · 44 development-only dependencies.
control-hub/package.json
npm · 22 development-only dependencies.
excel-addin/package.json
npm · 22 development-only dependencies.
Declared in the repository’s manifests at the indexed commit. A declared package is not proof it is used, and runtime dependencies are listed first.
This project’s features have not been analysed yet.
Export this project's context (description, README, evidence, key source files) to chat with an AI agent elsewhere.