Gemini CLI v0.66 is fixes only, with the keybindings.json keys array now working

Gemini CLI Published:

All 26 entries in v0.66.0 are fixes and chores. The keys array in keybindings.json, settings placeholders resolved after .env, and ~/.gitconfig preserved in git environments.

Verified on Nov 4, 2026 Verified with Gemini CLI v0.66.0 These tools change quickly. Please also check the latest official documentation. How articles are researched and verified
Contents
  1. The keys array in keybindings.json now works
  2. Fixes around .env and the git environment
  3. MCP and authentication fixes
  4. The rest, and a Gemini 4 banner
  5. Summary

Gemini CLI v0.66.0 adds no features. All 26 entries under "What's Changed" are fixes, refactors or release chores.

One of them is the kind worth knowing about, though: a setting the documentation already describes was not actually working. The keys array in keybindings.json works as of this release.

KEY POINT

What this article covers

  • How to write the keys array, and what to check when a binding does nothing
  • Settings placeholders now resolved after .env files load
  • ~/.gitconfig preserved in shell and git environments

The keys array in keybindings.json now works

The fix is PR #29773. Key bindings live in your home gemini directory, typically ~/.gemini/keybindings.json. It is a JSON array in a schema close to VS Code's, with a command and either a key or a keys array per entry.

[
  {
    "command": "edit.clear",
    "key": "cmd+l"
  },
  {
    "command": "-app.toggleYolo",
    "key": "ctrl+y"
  },
  {
    "command": "-input.newline",
    "keys": ["alt+enter", "ctrl+enter", "shift+enter", "ctrl+j"]
  },
  {
    "command": "input.newline",
    "keys": ["enter", "shift+enter"]
  }
]
FormWhat it means
- prefixed on commandUnbinds the key, defaults included
A keys arrayBinds or unbinds several keys in one entry; the first key is the primary shortcut shown in the UI
Modifiersctrl, shift, alt (opt / option), cmd (meta)

When a binding never fires, suspect the terminal

The documentation notes that terminals often translate complex combinations into special characters, losing the modifier information on the way. Its example is shift+5 arriving as %, where "you must bind to the literal character % as bindings to shift+5 will never fire." To see exactly what is sent, enable Debug Keystroke Logging and press f12 to open the debug log console.

Matching is explicit: a binding for ctrl+f fires on ctrl+f only, not ctrl+shift+f or alt+ctrl+f. And because the same key can be bound to different commands in different contexts, adding a binding does not unbind the key from anything else. To remove the old one, add a separate - prefixed entry.

Fixes around .env and the git environment

Three fixes concern the order configuration is loaded in.

PRWhat changed
#29750Settings placeholders are resolved after .env files load
#29832The user-level ~/.gitconfig is preserved in shell and git environments
#29760Interactive credential and SSH prompts are disabled in getSafeGitEnv

The first matters if your settings file references a value defined in .env. Resolving before the load leaves the reference empty.

A related documented setting is advanced.ignoreLocalEnv (default false), which controls whether generic .env files in the project directory are ignored — the lever to reach for when a project's .env should not be read at all.

The third matters for unattended runs. When git asks for a credential or an SSH passphrase interactively, nobody is there to answer and the run hangs. Disabling those prompts makes it fail instead.

MCP and authentication fixes

  • MCP OAuth supports private network endpoints (PR #29844), on an opt-in basis — relevant when the MCP server lives inside your network
  • False positives in isAuthenticationError are prevented (PR #29835), where non-authentication failures were classified as authentication errors
  • Update verification tightened (PR #29757): the active binary is checked after an update, so a PATH-shadowed older binary is no longer reported as a successful update

For MCP configuration generally, see Setting up MCP servers in Gemini CLI.

The rest, and a Gemini 4 banner

The visible addition is a banner saying Gemini CLI is not optimized for Gemini 4 (PR #29774).

On rendering: synchronized output with isolated spinner rendering, debug console height calculation and flickering, right-hand border bleed in scrollable tool containers, preserved terminal scrollback during viewport refreshes, and rounding before unit selection in formatDuration.

Also: openDiff now formats and quotes Windows diff command arguments, SKILL.md frontmatter parsing handles single-line descriptions, slash-command conflict dedupe resets when conflicts reappear, and the bootstrap parent forwards termination signals to its child process.

For the previous release, see Gemini CLI v0.65 enforces read-only settings in untrusted folders.

Summary

  • v0.66.0 adds no features; all 26 "What's Changed" entries are fixes, refactors or release chores
  • The keys array in keybindings.json works now; unbind by prefixing command with -
  • When a binding never fires, check what the terminal sends with Debug Keystroke Logging and f12
  • Settings placeholders are resolved after .env files load
  • ~/.gitconfig is preserved, and git's interactive prompts are disabled

FAQ

Does v0.66.0 add any features?
No. All 26 entries under What's Changed are fixes, refactors or release chores.
Where does keybindings.json go?
In your home gemini directory, typically ~/.gemini/keybindings.json. It is a JSON array, VS Code style, with a command and a key (or keys) per entry.
My binding does nothing. Why?
The terminal may be translating the combination into a different character. The docs give shift+5 arriving as %, in which case you must bind the literal character. Enable Debug Keystroke Logging and press F12 to see what is sent.

Primary sources

This article was drafted by AI from official documentation and reviewed by the site operator before publishing. Found a mistake? Let us know via the contact page.