Gemini CLI v0.66 is fixes only, with the keybindings.json keys array now working
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.
Contents
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
keysarray, and what to check when a binding does nothing - Settings placeholders now resolved after
.envfiles load ~/.gitconfigpreserved 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"]
}
]
| Form | What it means |
|---|---|
- prefixed on command | Unbinds the key, defaults included |
A keys array | Binds or unbinds several keys in one entry; the first key is the primary shortcut shown in the UI |
| Modifiers | ctrl, 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.
| PR | What changed |
|---|---|
| #29750 | Settings placeholders are resolved after .env files load |
| #29832 | The user-level ~/.gitconfig is preserved in shell and git environments |
| #29760 | Interactive 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
isAuthenticationErrorare 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
keysarray inkeybindings.jsonworks now; unbind by prefixingcommandwith- - When a binding never fires, check what the terminal sends with
Debug Keystroke Loggingandf12 - Settings placeholders are resolved after
.envfiles load ~/.gitconfigis 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.