Keybindings: add discrete actions for setting specific permission modes (not just cycling)

Resolved 💬 3 comments Opened Mar 17, 2026 by carljborg Closed Mar 21, 2026

Feature Request

Add individual keybinding actions for setting specific permission modes, rather than only supporting chat:cycleMode which cycles through all modes sequentially.

Requested Actions

| Proposed Action | Behavior |
|---|---|
| chat:setDefaultMode | Switch directly to "Ask before edits" |
| chat:setPlanMode | Switch directly to "Plan mode" |
| chat:setAcceptEditsMode | Switch directly to "Auto-accept edits" |
| chat:setBypassMode | Switch directly to "Bypass permissions" |

Example keybindings.json

{
  "bindings": [
    {
      "context": "Chat",
      "bindings": {
        "meta+alt+z": "chat:setPlanMode",
        "meta+alt+x": "chat:setBypassMode",
        "meta+alt+c": "chat:setDefaultMode"
      }
    }
  ]
}

Why This Matters

Permission modes are not equal — they serve fundamentally different workflows. A developer working with Claude Code constantly shifts between modes depending on the task at hand:

  • Plan mode when thinking through architecture or exploring an unfamiliar area
  • Auto-accept / bypass when executing a well-understood change (e.g., "rename this variable across the codebase")
  • Ask before edits as the safe default when switching context

These transitions happen dozens of times per session. Currently, the only keyboard option is Shift+Tab (chat:cycleMode), which cycles sequentially through all modes. This means:

  1. You can never go backwards — if you overshoot, you cycle through all remaining modes to get back
  2. The number of keypresses is unpredictable — depending on your current mode, reaching your target mode takes 1, 2, or 3 presses
  3. There's no muscle memory — you can't build a reliable "Cmd+Option+Z = Plan mode" reflex because the same key does different things depending on current state

The result is that most users fall back to clicking the mode indicator with the mouse, which breaks keyboard flow entirely. For a tool that's built around staying in the terminal/keyboard, this is a significant friction point.

Direct mode keybindings would make mode switching as fast and reliable as hitting Cmd+S to save — one keystroke, deterministic result, instant muscle memory.

Current Workarounds

  • chat:cycleMode — works but is sequential and unpredictable
  • Clicking the mode indicator in VS Code — breaks keyboard flow
  • Setting claudeCode.initialPermissionMode in VS Code settings — only affects startup, not runtime switching

None of these solve the core problem of fast, deterministic, keyboard-driven mode switching during a session.

Additional Context

This would also benefit accessibility — users who rely on keyboard navigation shouldn't need to reach for the mouse to select a specific mode.

View original on GitHub ↗

This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗