Twist & Code

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:

  1. Architecture first. We had Codex study the Logitech Actions SDK's documented capabilities before writing any code, explicitly ruling out invented or undocumented APIs.
  2. 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.
  3. 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.
  4. 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 that 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 for Twist & Code

  • 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.

Built With

Share this project:

Updates