[FEATURE] Local control interface for Claude Desktop Chat (model/effort, stop, open chat) for hardware controllers

Status Open
Maintainer reply None cached
Activity 0 comments · opened Sep 26, 2026

Preflight Checklist

  • [x] I have searched existing requests and this feature hasn't been requested yet
  • [x] This is a single feature request (not multiple features)

Problem Statement

There is no supported way for a local tool to control the Claude Desktop app's Chat tab. I'm building a Stream Deck plugin for Claude Desktop on Windows (keys and dials for model/effort, Stop, New chat, and opening recent chats), and the only route is driving the UI through Windows UI Automation:

  • Model/effort: the plugin has to open the real model menu, find the Effort / More models submenus by accessible name, click an item, answer the "Switch model?" confirmation, then read the model label back to check it worked. The menu visibly flashes open, each change takes a second or more, and no other input can safely happen until it finishes.
  • Opening a chat: sidebar rows are exposed as buttons named by title, with no conversation ID. Duplicate titles collide, and claude://claude.ai/chat/{id} deep links can't be used because the ID is never visible.
  • Fragility: any change to an accessible name ("Stop response", "Model: …", "More models") silently breaks integrations after an app update.

For comparison, OpenAI's Codex exposes a documented local protocol (app-server) that its official Stream Deck plugin uses for model selection, interrupting, and approvals. Claude Code has hooks for its own sessions. The Chat tab has nothing.

Proposed Solution

A small, local, user-consented control interface for the Chat tab (local IPC or a documented protocol), off by default, scoped to the signed-in user. Minimal command set:

  • list available models and effort levels; get and set the current model and effort for the active chat
  • stop the current response
  • start a new chat, and open a chat by conversation ID
  • list recent chats with their conversation IDs

Alternative Solutions

Smaller steps that would each remove part of the need for UI Automation:

  1. Deep-link parameters for model and effort, e.g. claude://claude.ai/new?model=…&effort=…, plus a deep link or keyboard shortcut to stop the current response.
  2. Expose each sidebar chat's conversation ID or URL through accessibility (e.g., as the row's link value), so claude://claude.ai/chat/{id} can be used.
  3. Treat key accessible names (Send, Stop, model button, Effort / More models) as stable across releases.

Priority

Medium: it's a real workflow blocker for hardware and accessibility integrations, and there's a (fragile) workaround today.

Feature Category

Other (Desktop app / Integrations)

Use Case Example

  1. I turn a Stream Deck dial one step toward "smarter".
  2. The plugin calls setModel("Opus …", effort: "High") and gets confirmation back, with no menu opening on screen.
  3. Mid-response, I press a hardware Stop key and the response stops, without switching focus to Claude.
  4. A "Recent chat" key opens a specific conversation by ID, even if two chats share a title.

Additional Context

  • Same need as #96500 (local API to change model/effort in a running Claude Code session) and the earlier #65586 (closed as stale), but for the Desktop Chat tab, which has no hooks, SDK, or CLI to fall back on. A shared control interface across Code and Chat would cover all of them.
  • #92288 asks for a local status feed from Desktop Chat/Cowork; this request is the control side.
  • Claude Code hooks (including PermissionRequest) already work in the Desktop app's Code tab on Windows (verified), so approvals and status for Code sessions are covered. This request is only about the Chat tab.
  • Desktop deep links (June 2026) are a great start, but they're one-way ("open this") and don't cover model/effort or stop.
  • Environment: Windows 11, Claude Desktop (Microsoft Store install), Stream Deck + with keys and dials.

---
Drafted with help from Claude Code.

View original on GitHub ↗