Vizhi
For Claude Code

Claude Console

Physical hardware controls for Claude Code in Apple Terminal or Windows Terminal, on the Logitech MX Creative Keypad. Press a button. Ship code.

Version 2.3.2 · macOS + Windows · Available

Claude Console puts Claude Code on your keypad. Each session gets its own key, and you can answer Claude's permission prompts, send ready-made prompts, run git commands, take screenshots and dictate, all without touching the keyboard. Voice runs on your computer; nothing is sent to the cloud. See the privacy policy.

What you need

  • A Logitech MX Creative Keypad and Logi Options+ 6.4 or newer. (Older Options+ versions can't load the plugin; let Options+ update itself first.)
  • Claude Code, installed on the same computer. Sessions inside WSL are not visible.
  • Mac: Apple Silicon and the built-in Terminal app. iTerm2, Ghostty and Warp are not supported.
  • Windows: Windows 10 or 11 (x64) and Windows Terminal.

Install

  1. Install the plugin from the Logi Marketplace in Options+, or double-click the ClaudeConsole_2.3.2.lplug4 file.
  2. Import the layout (below). The keypad stays empty until you do. That is normal: the plugin comes without a layout.
  3. Turn on live status (below), so the keys can show what Claude is doing.
Mac

If macOS blocks the file, right-click it and choose Open.

Import the keypad layout

  1. Download the layout from the keypad layouts page: ClaudeConsole-Keypad.lp5 for Mac, ClaudeConsole-Windows.lp5 for Windows.
  2. In Logi Options+, open your keypad, click the ⋯ button and choose Import Profile. Pick the file.

You get five pages of keys, shown whenever Terminal (or Windows Terminal) is in front. You only import once: updates never change your layout. You can move or change keys afterwards.

PageKeys, top row to bottom row
1Session 1 Session 2 Session 3 / Clear No Yes / Esc Tab Dictate
2Cost Model Compact / Up Return Down / Scroll Up Scroll Down
3Explore Explain Review / Optimize Refactor Write Tests / Document Fix Bug Security
4Go to Project New Tab Next Tab / Prev Tab New Claude Exit
5Commit Create PR Diff / Log Push Status

Prefer your own Terminal profile? Skip the import and drag the Claude Console actions onto it. More keys (Sessions 4 to 6, Screenshot, Voice Draft, Context, Activity, Mode) are in the action panel, ready to drag on.

Tip

Don't open the live keys (Sessions, Yes, No, Cost, Context, Activity) in the Options+ icon editor. It freezes them and they stop updating.

Permissions

Mac

Each is asked once, the first time it is needed:

  • Accessibility for Logi Plugin Service, so keys can type into Terminal.
  • Microphone for ClaudeVoiceHelper, the first time you dictate.
  • Screen Recording for Logi Plugin Service, the first time you take a screenshot.
Windows

No prompts. For voice, allow microphone access for desktop apps in Windows Settings.

Live status

The keys that show what Claude is doing (Cost, Context, Activity, the session bars, and Yes and No) need live status. It adds a few entries to your Claude Code settings file, so it is off until you turn it on. Until then those keys say Set up or Off.

Turn it on

  1. Press Cost (or any live key).
  2. Mac: choose Turn on in the window that appears. Windows: press the same key again within 15 seconds.
  3. The key says Turned on. Running sessions pick it up by themselves.

Turn it off

Hold a live key. Mac: choose Turn off. Windows: hold it again within 15 seconds. The keys then say Off; press one to turn it back on.

Your settings file is backed up before every change, and your own entries are never touched.

Exactly what is added to your settings

One status line and five hooks in ~/.claude/settings.json. If you already have a status line, it keeps working. The backup is settings.json.claude-console.bak, rewritten before each change (it is the state one change ago, not a copy from before installing). Each entry checks that the plugin is still installed before running, so a leftover entry does nothing. On Windows the entries run through a PowerShell launcher (powershell.exe … -EncodedCommand …) instead of bash.

{
  "statusLine": {
    "type": "command",
    "command": "[ ! -f \"$HOME/.claude/claude-console/scripts/statusline-handler.sh\" ] || bash \"$HOME/.claude/claude-console/scripts/statusline-handler.sh\""
  },
  "hooks": {
    "UserPromptSubmit":  [{ "hooks": [{ "type": "command", "command": "[ ! -f \"$HOME/.claude/claude-console/scripts/activity-hook.sh\" ] || bash \"$HOME/.claude/claude-console/scripts/activity-hook.sh\" busy" }] }],
    "PostToolUse":       [{ "matcher": "*", "hooks": [{ "type": "command", "command": "[ ! -f \"$HOME/.claude/claude-console/scripts/activity-hook.sh\" ] || bash \"$HOME/.claude/claude-console/scripts/activity-hook.sh\" busy" }] }],
    "Notification":      [{ "hooks": [{ "type": "command", "command": "[ ! -f \"$HOME/.claude/claude-console/scripts/activity-hook.sh\" ] || bash \"$HOME/.claude/claude-console/scripts/activity-hook.sh\" waiting" }] }],
    "Stop":              [{ "hooks": [{ "type": "command", "command": "[ ! -f \"$HOME/.claude/claude-console/scripts/activity-hook.sh\" ] || bash \"$HOME/.claude/claude-console/scripts/activity-hook.sh\" done" }] }],
    "PermissionRequest": [{ "hooks": [{ "type": "command", "command": "[ ! -f \"$HOME/.claude/claude-console/scripts/activity-hook.sh\" ] || bash \"$HOME/.claude/claude-console/scripts/activity-hook.sh\" permission" }] }]
  }
}

The plugin writes full paths rather than $HOME. Its status files live in a private /tmp/claude-console/ folder that only you can read.

Sessions

Each Claude session in its own Terminal tab gets a key with its folder name and a bar that says what it is doing: Thinking, Waiting, Allow? (a permission prompt is up) or Complete. Press the key to jump to that tab.

Pressing a Session key also selects it: every other key then acts on that session, even while you look at another tab or another app. Its bar is highlighted. Press it again to let go.

  • One session: no need to select anything.
  • Nothing selected, one session asking permission: Yes and No go to it.
  • Can't tell which session you mean: the key beeps instead of guessing.
  • On Windows, select a session first when more than one is open.

A session keeps its key for as long as it runs. The layout shows three; up to six can have keys.

Yes, No and the dots

When Claude asks permission, press Yes to allow or No to refuse. If Claude is not asking permission (for example it asked a plain question), the keys beep; type your answer in the terminal. Up, Down and Return move through any menu.

You seeIt means
No dotNothing is waiting for you.
Amber dots on Yes and NoClaude is waiting, and the action is routine (reading a file, running a test).
Red dot on YesApproving would do something risky, such as git push, rm -rf or sudo. Check before you press Yes.

The dots are a hint. Claude's own prompt always shows the full command.

Voice

  • Dictate: press, speak, press again. Your words are typed and sent.
  • Voice Draft: the same, but not sent, so you can fix it first. Good for longer prompts.
  • Go to Project: say a project name to open it in a new tab with Claude.

The first time, the plugin asks for the microphone and downloads the speech model (about 140 MB). Options+ tells you when it is ready. After that, voice works offline. (To skip the download, put ggml-base.en.bin in ~/.claude/claude-console/whisper/ first.)

If something goes wrong, the key tells you:

  • Starting (Windows): the microphone is getting ready.
  • Model loading: still downloading. Try again once Options+ says it's ready.
  • Mic denied: allow ClaudeVoiceHelper under System Settings → Privacy & Security → Microphone (Mac), or allow microphone access for desktop apps (Windows).
  • No speech: nothing clear was heard. Try again.
  • No target: no session to type into. Press a Session key, then try again.
  • Not typed: the words could not be typed, for example the terminal closed.
  • No match (Go to Project): say just the folder name. Projects somewhere unusual? List their parent folders, one per line, in ~/.claude/claude-console/project-roots.
  • No helper or No whisper: voice files are missing. Reinstall the plugin.

Windows notes

  • Use Windows Terminal, and don't run Claude as administrator. To make Windows Terminal the default: Settings → System → For developers → Terminal.
  • Import the Windows layout, ClaudeConsole-Windows.lp5.
  • Select a session when more than one is open. Windows Terminal doesn't tell the plugin which tab is in front.
  • Key presses can't go to the wrong app. They are sent straight to the session, not to whatever window is in front.
  • “Blocked”: security software removed or blocked the helper claude-console-hook.exe. Ask IT to allow the publisher Ravi Shankar S, or restore the file. The keys recover by themselves.
  • Signed files: every Windows file is signed by Ravi Shankar S. Check it in the file's Properties → Digital Signatures.
  • Not on Windows: Next Window, Previous Window and the Turn on window. Go to Project always opens a new tab.
  • Renamed tabs: if a Session key can't switch to a tab you renamed, clear the custom name.

All keys

GroupKeys
SessionsSession 1 to 6
StatusCost · Context · Activity · Model
ClaudeEsc · Tab · Mode · Compact · Clear · Exit · Screenshot
AnswerYes · No · Up · Down · Return
PromptsFix Bug · Write Tests · Explore · Explain · Refactor · Review · Optimize · Security · Document · Deploy
GitCommit · Diff · Push · Create PR · Status · Log
ScrollScroll Up · Scroll Down
TerminalTerminal · New Tab · New Claude · New Claude (Window) · Next Tab · Prev Tab · Next Window · Prev Window · Go to Project
VoiceDictate · Voice Draft
  • Tab accepts Claude's suggestion and sends it.
  • Mode switches Claude's mode: normal, auto-accept edits, plan.
  • Model opens Claude's model menu; pick with Up, Down and Return.
  • Screenshot: pick an area, and the image is added to your message. Type your question and send.

Change the prompt keys

Each prompt key sends a full prompt. They live in ~/.claude/claude-console/prompts.json. Edit a prompt, rename a key, delete keys or add your own, then reload the plugin. Add "submit": false to type a prompt without sending it. Updates never overwrite your file; delete it to get the defaults back.

Troubleshooting

What you seeWhat to do
The keypad is empty after installing. Import the layout. If Claude Console actions are missing from the Options+ action panel, the plugin didn't load; send us the log.
Keys say Set up, or Yes and No say Off. Live status is off. Turn it on.
Yes and No beep. Claude isn't asking for permission right now. Type your answer in the terminal.
Keys never change, but presses still work. A key was opened in the Options+ icon editor. Delete the profile and import it again.
Keys say Blocked (Windows). Security software blocked the helper. Ask IT to allow the publisher Ravi Shankar S, or restore the file.
Windows: keys beep and Options+ mentions Windows Terminal. Run Claude Code in Windows Terminal, not as administrator.
Screenshot captures nothing (Mac). Allow Logi Plugin Service under System Settings → Privacy & Security → Screen Recording.
A voice key shows a message. See Voice.
The log says already loaded when Options+ starts. Harmless. Options+ does this for every plugin installed from a file.
Keys show ! or plain text. You have a version older than 2.2.0. Update.

Still stuck? Send us the plugin log (ClaudeConsole.log):

  • macOS~/Library/Application Support/Logi/LogiPluginService/Logs/plugin_logs/ClaudeConsole.log
  • Windows%LOCALAPPDATA%\Logi\LogiPluginService\Logs\plugin_logs\ClaudeConsole.log

Uninstall

  1. Turn live status off (hold Cost, then Turn off).
  2. In Options+, right-click Claude Console, choose Uninstall, and delete its profile.
  3. Remove what is left:
    Mac

    Run this and confirm. It removes the settings entries, the voice files, the speech model, your prompts.json and the microphone permission:

    bash ~/.claude/claude-console/scripts/uninstall.sh

    Add --dry-run to see what it would remove first.

    Windows

    Delete the folder %USERPROFILE%\.claude\claude-console.

Forgot step 1? Nothing breaks. On a Mac the plugin's settings entries remove themselves about a minute later. On Windows the uninstall removes them (2.3.1 or newer). With an older Windows version, open %USERPROFILE%\.claude\settings.json and delete the statusLine entry and the five hooks that start with powershell.exe -NoLogo. Don't restore settings.json.claude-console.bak to undo the plugin; it is only the state one change ago.

What's new

2.3.2

  • Signed Windows files, so security software can trust the publisher once.
  • “Blocked” instead of silence on Windows when security software blocks the helper.

2.3.1

  • Windows uninstall cleans up after itself: it removes the plugin's settings entries and leaves yours alone.

2.2.2

  • The Model key opens Claude's model menu.
  • Windows: Yes and No work again, and turning on live status works without restarting.
  • Yes finds the one session that is asking, even with others open.
  • Voice says when it couldn't type (No target, Not typed).
  • Mac: after an uninstall, the settings entries remove themselves.
  • Windows: no separate .NET install needed, and a smaller download.

Layouts are unchanged since 2.2.0; no re-import needed.


Free · Privacy · EULA · Report a problem