@google/gemini-cli-core 0.66.0-preview.0 → 0.67.0-nightly.20261022.g09d81bf11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/dist/docs/changelogs/index.md +19 -0
  2. package/dist/docs/changelogs/latest.md +91 -60
  3. package/dist/docs/changelogs/preview.md +86 -90
  4. package/dist/docs/cli/sandbox.md +24 -0
  5. package/dist/docs/ide-integration/index.md +30 -6
  6. package/dist/google-gemini-cli-core-0.67.0-nightly.20261020.gb041de017.tgz +0 -0
  7. package/dist/src/agents/registry.js +43 -40
  8. package/dist/src/agents/registry.js.map +1 -1
  9. package/dist/src/agents/registry.test.js +81 -0
  10. package/dist/src/agents/registry.test.js.map +1 -1
  11. package/dist/src/config/config.js +3 -0
  12. package/dist/src/config/config.js.map +1 -1
  13. package/dist/src/config/config.test.js +12 -0
  14. package/dist/src/config/config.test.js.map +1 -1
  15. package/dist/src/generated/git-commit.d.ts +2 -2
  16. package/dist/src/generated/git-commit.js +2 -2
  17. package/dist/src/generated/git-commit.js.map +1 -1
  18. package/dist/src/ide/ide-client.js +5 -5
  19. package/dist/src/ide/ide-client.js.map +1 -1
  20. package/dist/src/ide/ide-client.sandbox.test.d.ts +6 -0
  21. package/dist/src/ide/ide-client.sandbox.test.js +283 -0
  22. package/dist/src/ide/ide-client.sandbox.test.js.map +1 -0
  23. package/dist/src/ide/ide-connection-utils.d.ts +11 -0
  24. package/dist/src/ide/ide-connection-utils.js +18 -1
  25. package/dist/src/ide/ide-connection-utils.js.map +1 -1
  26. package/dist/src/ide/ideContext.d.ts +5 -0
  27. package/dist/src/ide/ideContext.js +25 -0
  28. package/dist/src/ide/ideContext.js.map +1 -1
  29. package/dist/src/ide/ideContext.test.js +77 -1
  30. package/dist/src/ide/ideContext.test.js.map +1 -1
  31. package/dist/src/index.d.ts +2 -0
  32. package/dist/src/index.js +2 -0
  33. package/dist/src/index.js.map +1 -1
  34. package/dist/src/services/fileSystemService.atomic.test.js +34 -0
  35. package/dist/src/services/fileSystemService.atomic.test.js.map +1 -1
  36. package/dist/src/services/fileSystemService.d.ts +9 -1
  37. package/dist/src/services/fileSystemService.js +44 -5
  38. package/dist/src/services/fileSystemService.js.map +1 -1
  39. package/dist/src/services/fileSystemService.test.js +62 -0
  40. package/dist/src/services/fileSystemService.test.js.map +1 -1
  41. package/dist/src/tools/shell.d.ts +6 -0
  42. package/dist/src/tools/shell.js +54 -11
  43. package/dist/src/tools/shell.js.map +1 -1
  44. package/dist/src/tools/shell.test.js +88 -1
  45. package/dist/src/tools/shell.test.js.map +1 -1
  46. package/dist/src/tools/write-file.test.js +25 -0
  47. package/dist/src/tools/write-file.test.js.map +1 -1
  48. package/dist/src/utils/customHeaderUtils.js +2 -2
  49. package/dist/src/utils/customHeaderUtils.js.map +1 -1
  50. package/dist/src/utils/customHeaderUtils.test.js +25 -0
  51. package/dist/src/utils/customHeaderUtils.test.js.map +1 -1
  52. package/dist/src/utils/textUtils.d.ts +2 -1
  53. package/dist/src/utils/textUtils.js +5 -2
  54. package/dist/src/utils/textUtils.js.map +1 -1
  55. package/dist/src/utils/textUtils.test.js +8 -0
  56. package/dist/src/utils/textUtils.test.js.map +1 -1
  57. package/dist/src/utils/untrustedContextTracker.d.ts +43 -1
  58. package/dist/src/utils/untrustedContextTracker.js +167 -16
  59. package/dist/src/utils/untrustedContextTracker.js.map +1 -1
  60. package/dist/src/utils/untrustedContextTracker.test.js +202 -2
  61. package/dist/src/utils/untrustedContextTracker.test.js.map +1 -1
  62. package/dist/tsconfig.tsbuildinfo +1 -1
  63. package/package.json +1 -1
@@ -18,6 +18,25 @@ on GitHub.
18
18
  | [Preview](preview.md) | Experimental features ready for early feedback. |
19
19
  | [Stable](latest.md) | Stable, recommended for general use. |
20
20
 
21
+ ## Announcements: v0.65.0 - 2026-10-20
22
+
23
+ - **Custom Telemetry Headers:** Added support for configuring custom OTLP
24
+ headers in telemetry configuration
25
+ ([#29641](https://github.com/google-gemini/gemini-cli/pull/29641) by
26
+ @jesussamuel-byte).
27
+ - **Filesystem & Traversal Performance:** Optimized ignore pattern filtering
28
+ with subtree pruning and deferred recursive file reads for directory
29
+ references ([#29582](https://github.com/google-gemini/gemini-cli/pull/29582)
30
+ by @amelidev, [#29617](https://github.com/google-gemini/gemini-cli/pull/29617)
31
+ by @jvargassanchez-dot).
32
+ - **Workspace Security & Session Resilience:** Enforced read-only workspace
33
+ settings in untrusted folders, resolved infinite OAuth retry loops, and
34
+ prevented session poisoning on rapid Ctrl+C interruptions
35
+ ([#29583](https://github.com/google-gemini/gemini-cli/pull/29583) by
36
+ @jvargassanchez-dot,
37
+ [#29655](https://github.com/google-gemini/gemini-cli/pull/29655) by
38
+ @villahernandez-coder).
39
+
21
40
  ## Announcements: v0.64.0 - 2026-10-13
22
41
 
23
42
  - **Atomic Operations & State Persistence:** Serialized file tool operations
@@ -1,6 +1,6 @@
1
- # Latest stable release: v0.64.0
1
+ # Latest stable release: v0.65.0
2
2
 
3
- Released: October 13, 2026
3
+ Released: October 20, 2026
4
4
 
5
5
  For most users, our latest stable release is the recommended release. Install
6
6
  the latest stable version with:
@@ -11,72 +11,103 @@ npm install -g @google/gemini-cli
11
11
 
12
12
  ## Highlights
13
13
 
14
- - **Atomic File Operations & State Recovery:** Serialized file tool operations
15
- with atomic writes and introduced atomic CLI state persistence with automatic
16
- recovery from backup on corruption.
17
- - **Chat Recording Optimization:** Implemented append-only delta patching and
18
- bounded history windowing in ChatRecordingService to optimize memory and disk
19
- efficiency during long-running sessions.
20
- - **CLI Input & Reference Resolution:** Added support for resolving `@file:line`
21
- references, resolved CPU hangs and quote swallowing on `@` symbols within code
22
- blocks, and prevented ghost text wrap hangs.
23
- - **Terminal UI & Interaction Stability:** Ensured Ctrl+C emergency aborts
24
- reliably reach active cancellation handlers, made selection list confirmation
25
- with Enter and Spacebar dependable, preserved scroll positions, and fixed
26
- Windows ConPTY IME cursor forwarding.
14
+ - **Custom Telemetry Headers:** Added support for configuring custom OTLP
15
+ headers in telemetry settings, enabling authentication and header
16
+ customization for OpenTelemetry collectors.
17
+ - **File System Performance & Traversal:** Optimized ignore pattern filtering
18
+ with subtree pruning to accelerate directory scanning, deferred recursive file
19
+ reads for `@<directory>` references, and improved empty file handling across
20
+ multi-byte encodings.
21
+ - **Session Resilience & State Integrity:** Prevented session poisoning during
22
+ rapid Ctrl+C interruptions, preserved resumed session history on quick exits,
23
+ and eliminated duplicate tool response turns upon resuming sessions.
24
+ - **Authentication & Workspace Security:** Enforced read-only workspace settings
25
+ in untrusted folders, aligned OAuth callback parameter validation with RFC
26
+ 9207 metadata, and resolved infinite authentication retry loops.
27
+ - **Terminal UI & Interactive Stability:** Resolved interactive mode hangs on
28
+ Enter keypresses, prevented unnecessary terminal clears and scroll resets when
29
+ expanding output with Ctrl+O, and restored debounced static UI refreshes on
30
+ terminal width changes.
27
31
 
28
32
  ## What's Changed
29
33
 
30
- - refactor(a2a-server): implement V1 to V2 settings migration logic by
34
+ - fix(cli): enforce read-only workspace settings in untrusted folders by
31
35
  @jvargassanchez-dot in
32
- [#29450](https://github.com/google-gemini/gemini-cli/pull/29450)
33
- - fix(acp): bridge PromptResponse.usage and emit usage_update notifications
34
- (#29389) by @elberthc-byte in
35
- [#29549](https://github.com/google-gemini/gemini-cli/pull/29549)
36
- - Changelog for v0.63.0-preview.0 by @gemini-cli-robot in
37
- [#29565](https://github.com/google-gemini/gemini-cli/pull/29565)
38
- - fix(cli): propagate resolved folder trust state in headless mode (#29031) by
39
- @amelidev in [#29528](https://github.com/google-gemini/gemini-cli/pull/29528)
40
- - chore(release): bump version to 0.64.0-nightly.20260929.gd75234cae by
36
+ [#29583](https://github.com/google-gemini/gemini-cli/pull/29583)
37
+ - fix(core): avoid duplicate tool response turns when resuming sessions by
38
+ @diegogodinezr in
39
+ [#29618](https://github.com/google-gemini/gemini-cli/pull/29618)
40
+ - fix(core): prevent deletion of resumed session history on quick exit (#29198)
41
+ by @villahernandez-coder in
42
+ [#29584](https://github.com/google-gemini/gemini-cli/pull/29584)
43
+ - Changelog for v0.64.0-preview.0 by @gemini-cli-robot in
44
+ [#29656](https://github.com/google-gemini/gemini-cli/pull/29656)
45
+ - Changelog for v0.63.0 by @gemini-cli-robot in
46
+ [#29659](https://github.com/google-gemini/gemini-cli/pull/29659)
47
+ - fix(core): align OAuth callback iss parameter validation with RFC 9207
48
+ metadata by @luisfelipe-alt in
49
+ [#29616](https://github.com/google-gemini/gemini-cli/pull/29616)
50
+ - fix(cli): prevent unnecessary terminal clears and scroll resets when expanding
51
+ with Ctrl+O by @jesussamuel-byte in
52
+ [#29640](https://github.com/google-gemini/gemini-cli/pull/29640)
53
+ - chore(release): bump version to 0.65.0-nightly.20261006.gfb972b2f8 by
41
54
  @gemini-cli-robot in
42
- [#29567](https://github.com/google-gemini/gemini-cli/pull/29567)
43
- - fix(cli): prevent CPU hang and quote swallowing on @ within code (#29434) by
44
- @elberthc-byte in
45
- [#29557](https://github.com/google-gemini/gemini-cli/pull/29557)
46
- - fix(core): serialize file tool operations and make writes atomic (#29078) by
55
+ [#29657](https://github.com/google-gemini/gemini-cli/pull/29657)
56
+ - fix(ci): add missing loop in unassign-inactive-assignees workflow by
57
+ @ugorla-dev in
58
+ [#29609](https://github.com/google-gemini/gemini-cli/pull/29609)
59
+ - fix(core): enforce terminal user turn invariant and normalize request contents
60
+ by @luisfelipe-alt in
61
+ [#29612](https://github.com/google-gemini/gemini-cli/pull/29612)
62
+ - `feat(telemetry): support custom OTLP headers in telemetry configuration` by
63
+ @jesussamuel-byte in
64
+ [#29641](https://github.com/google-gemini/gemini-cli/pull/29641)
65
+ - fix(auth): prevent infinite verification and OAuth retry loops by
66
+ @villahernandez-coder in
67
+ [#29655](https://github.com/google-gemini/gemini-cli/pull/29655)
68
+ - fix(cli): handle JSON parse and response stream errors in fetchJson by
69
+ @jesussamuel-byte in
70
+ [#29658](https://github.com/google-gemini/gemini-cli/pull/29658)
71
+ - fix(core): preserve line terminators in truncateString by @diegogodinezr in
72
+ [#29673](https://github.com/google-gemini/gemini-cli/pull/29673)
73
+ - fix(vscode-ide-companion): make IdeServer.stop() resolve while MCP sessions
74
+ are open by @elberthc-byte in
75
+ [#29674](https://github.com/google-gemini/gemini-cli/pull/29674)
76
+ - fix(core): retain ask_user question text in the tool result display by
47
77
  @elberthc-byte in
48
- [#29499](https://github.com/google-gemini/gemini-cli/pull/29499)
49
- - fix(core): implement append-only delta patching and bounded history windowing
50
- in ChatRecordingService by @jvargassanchez-dot in
51
- [#29568](https://github.com/google-gemini/gemini-cli/pull/29568)
52
- - fix(cli): persist state atomically and recover from backup on corruption by
78
+ [#29677](https://github.com/google-gemini/gemini-cli/pull/29677)
79
+ - fix(core): eliminate false positives on untrusted command flags and compound
80
+ loops by @DavidAPierce in
81
+ [#29672](https://github.com/google-gemini/gemini-cli/pull/29672)
82
+ - fix(cli): clear cached credentials when re-selecting Google login by
53
83
  @urielefrenvirtusa in
54
- [#29558](https://github.com/google-gemini/gemini-cli/pull/29558)
55
- - fix(cli): ensure Ctrl+C emergency abort reaches cancellation handler during
56
- active operations by @urielefrenvirtusa in
57
- [#29586](https://github.com/google-gemini/gemini-cli/pull/29586)
58
- - fix(cli): resolve @file:line references and prevent ghost text wrap hang by
84
+ [#29643](https://github.com/google-gemini/gemini-cli/pull/29643)
85
+ - fix(cli): resolve hang on Enter keypress in interactive mode (#23297) by
86
+ @elberthc-byte in
87
+ [#29476](https://github.com/google-gemini/gemini-cli/pull/29476)
88
+ - perf(core): optimize ignore filtering and enable subtree pruning (#29077) by
89
+ @amelidev in [#29582](https://github.com/google-gemini/gemini-cli/pull/29582)
90
+ - fix(a2a-server): isolate tool rejection to active call in sequential batches
91
+ by @jvargassanchez-dot in
92
+ [#29683](https://github.com/google-gemini/gemini-cli/pull/29683)
93
+ - fix(cli): skip eager recursive file reading for @<directory> references by
94
+ @jvargassanchez-dot in
95
+ [#29617](https://github.com/google-gemini/gemini-cli/pull/29617)
96
+ - fix(cli): keep loading other extensions when one fails the allowlist check by
59
97
  @jesussamuel-byte in
60
- [#29581](https://github.com/google-gemini/gemini-cli/pull/29581)
61
- - fix(ui): ensure Windows ConPTY forwards IME cursor position by
98
+ [#29720](https://github.com/google-gemini/gemini-cli/pull/29720)
99
+ - fix(cli): correct reverse search highlight index for expanding unicode
100
+ characters by @diegogodinezr in
101
+ [#29699](https://github.com/google-gemini/gemini-cli/pull/29699)
102
+ - fix(core): treat whitespace-only UTF-16 and UTF-32 files as empty by
62
103
  @jesussamuel-byte in
63
- [#29560](https://github.com/google-gemini/gemini-cli/pull/29560)
64
- - fix(cli): retry directory removal on Windows locking errors during extension
65
- updates by @jesussamuel-byte in
66
- [#29540](https://github.com/google-gemini/gemini-cli/pull/29540)
67
- - fix(acp): resolve session by exact id and handle listener cleanup on session
68
- failure by @diegogodinezr in
69
- [#29580](https://github.com/google-gemini/gemini-cli/pull/29580)
70
- - fix(cli): preserve scroll position and partition pending height budget by
71
- @luisfelipe-alt in
72
- [#29520](https://github.com/google-gemini/gemini-cli/pull/29520)
73
- - fix(cli): ensure Enter and Spacebar reliably confirm selection list options by
74
- @ugorla-dev in
75
- [#29502](https://github.com/google-gemini/gemini-cli/pull/29502)
76
- - fix(patch): cherry-pick 2ce1a69 to release/v0.64.0-preview.0-pr-29672 to patch
77
- version v0.64.0-preview.0 and create version 0.64.0-preview.1 by
78
- @gemini-cli-robot in
79
- [#29696](https://github.com/google-gemini/gemini-cli/pull/29696)
104
+ [#29722](https://github.com/google-gemini/gemini-cli/pull/29722)
105
+ - fix(cli): restore debounced static UI refresh on terminal width changes by
106
+ @jvargassanchez-dot in
107
+ [#29644](https://github.com/google-gemini/gemini-cli/pull/29644)
108
+ - fix(cli): prevent session poisoning on rapid Ctrl-C interruption by
109
+ @villahernandez-coder in
110
+ [#29728](https://github.com/google-gemini/gemini-cli/pull/29728)
80
111
 
81
112
  **Full Changelog**:
82
- https://github.com/google-gemini/gemini-cli/compare/v0.63.0...v0.64.0
113
+ https://github.com/google-gemini/gemini-cli/compare/v0.64.0...v0.65.0
@@ -1,6 +1,6 @@
1
- # Preview release: v0.65.0-preview.0
1
+ # Preview release: v0.66.0-preview.0
2
2
 
3
- Released: October 13, 2026
3
+ Released: October 20, 2026
4
4
 
5
5
  Our preview release includes the latest, new, and experimental features. This
6
6
  release may not be as stable as our [latest weekly release](latest.md).
@@ -13,103 +13,99 @@ npm install -g @google/gemini-cli@preview
13
13
 
14
14
  ## Highlights
15
15
 
16
- - **Custom Telemetry Headers**: Added support for configuring custom OTLP
17
- headers in telemetry settings, enabling authentication and header
18
- customization for OpenTelemetry collectors.
19
- - **File System Performance & Traversal**: Optimized ignore pattern filtering
20
- with subtree pruning to accelerate directory scanning, deferred recursive file
21
- reads for `@<directory>` references, and improved empty file handling across
22
- multi-byte encodings.
23
- - **Session Resilience & State Integrity**: Prevented session poisoning during
24
- rapid Ctrl+C interruptions, preserved resumed session history on quick exits,
25
- and eliminated duplicate tool response turns upon resuming sessions.
26
- - **Authentication & Workspace Security**: Enforced read-only workspace settings
27
- in untrusted directories, aligned OAuth callback parameter validation with RFC
28
- 9207 metadata, and resolved infinite authentication retry loops.
29
- - **Terminal UI & Interactive Stability**: Resolved interactive mode hangs on
30
- Enter keypresses, prevented unnecessary terminal clears and scroll resets when
31
- expanding output with Ctrl+O, and restored debounced static UI refreshes on
32
- terminal width changes.
16
+ - **Terminal UI & Output Synchronization**: Implemented synchronized terminal
17
+ output and isolated spinner rendering to prevent flickering, preserved
18
+ terminal scrollback during viewport refreshes, corrected debug console height
19
+ calculations, and eliminated right-hand border bleed in scrollable tool
20
+ containers.
21
+ - **Tool Execution & Scheduler Architecture**: Refactored the tool execution
22
+ flow to emit tool call groups directly from the scheduler, removing UI
23
+ lookahead logic and simplifying execution scheduling.
24
+ - **Shell & Git Environment Integrity**: Preserved user-level `~/.gitconfig`
25
+ settings across shell and Git environments, disabled interactive credential
26
+ and SSH prompts to prevent hangs in automated environments, and forwarded
27
+ termination signals from bootstrap parent processes.
28
+ - **Configuration & Keybindings Flexibility**: Added support for a `keys` array
29
+ in `keybindings.json`, ensured settings placeholders resolve correctly after
30
+ loading `.env` files, and improved CLI self-update verification against PATH
31
+ shadowing.
32
+ - **Networking & MCP Security**: Supported opt-in private network endpoints for
33
+ MCP OAuth flows and prevented false positive matches in authentication error
34
+ handling.
33
35
 
34
36
  ## What's Changed
35
37
 
36
- - fix(cli): enforce read-only workspace settings in untrusted folders by
37
- @jvargassanchez-dot in
38
- [#29583](https://github.com/google-gemini/gemini-cli/pull/29583)
39
- - fix(core): avoid duplicate tool response turns when resuming sessions by
40
- @diegogodinezr in
41
- [#29618](https://github.com/google-gemini/gemini-cli/pull/29618)
42
- - fix(core): prevent deletion of resumed session history on quick exit (#29198)
43
- by @villahernandez-coder in
44
- [#29584](https://github.com/google-gemini/gemini-cli/pull/29584)
45
- - Changelog for v0.64.0-preview.0 by @gemini-cli-robot in
46
- [#29656](https://github.com/google-gemini/gemini-cli/pull/29656)
47
- - Changelog for v0.63.0 by @gemini-cli-robot in
48
- [#29659](https://github.com/google-gemini/gemini-cli/pull/29659)
49
- - fix(core): align OAuth callback iss parameter validation with RFC 9207
50
- metadata by @luisfelipe-alt in
51
- [#29616](https://github.com/google-gemini/gemini-cli/pull/29616)
52
- - fix(cli): prevent unnecessary terminal clears and scroll resets when expanding
53
- with Ctrl+O by @jesussamuel-byte in
54
- [#29640](https://github.com/google-gemini/gemini-cli/pull/29640)
55
- - chore(release): bump version to 0.65.0-nightly.20261006.gfb972b2f8 by
38
+ - Update ROADMAP.md to no longer reference outdated 2025 roadmap by
39
+ @DavidAPierce in
40
+ [#29723](https://github.com/google-gemini/gemini-cli/pull/29723)
41
+ - Changelog for v0.65.0-preview.0 by @gemini-cli-robot in
42
+ [#29739](https://github.com/google-gemini/gemini-cli/pull/29739)
43
+ - chore(release): bump version to 0.66.0-nightly.20261013.g204db94ae by
56
44
  @gemini-cli-robot in
57
- [#29657](https://github.com/google-gemini/gemini-cli/pull/29657)
58
- - fix(ci): add missing loop in unassign-inactive-assignees workflow by
45
+ [#29740](https://github.com/google-gemini/gemini-cli/pull/29740)
46
+ - Changelog for v0.64.0 by @gemini-cli-robot in
47
+ [#29741](https://github.com/google-gemini/gemini-cli/pull/29741)
48
+ - fix(ui): implement synchronized output and isolate spinner rendering by
49
+ @diegogodinezr in
50
+ [#29725](https://github.com/google-gemini/gemini-cli/pull/29725)
51
+ - fix(ui): fix debug console height calculation and terminalBuffer flickering by
59
52
  @ugorla-dev in
60
- [#29609](https://github.com/google-gemini/gemini-cli/pull/29609)
61
- - fix(core): enforce terminal user turn invariant and normalize request contents
62
- by @luisfelipe-alt in
63
- [#29612](https://github.com/google-gemini/gemini-cli/pull/29612)
64
- - `feat(telemetry): support custom OTLP headers in telemetry configuration` by
65
- @jesussamuel-byte in
66
- [#29641](https://github.com/google-gemini/gemini-cli/pull/29641)
67
- - fix(auth): prevent infinite verification and OAuth retry loops by
53
+ [#29695](https://github.com/google-gemini/gemini-cli/pull/29695)
54
+ - fix(cli): prevent right-hand border bleed in scrollable tool containers by
68
55
  @villahernandez-coder in
69
- [#29655](https://github.com/google-gemini/gemini-cli/pull/29655)
70
- - fix(cli): handle JSON parse and response stream errors in fetchJson by
71
- @jesussamuel-byte in
72
- [#29658](https://github.com/google-gemini/gemini-cli/pull/29658)
73
- - fix(core): preserve line terminators in truncateString by @diegogodinezr in
74
- [#29673](https://github.com/google-gemini/gemini-cli/pull/29673)
75
- - fix(vscode-ide-companion): make IdeServer.stop() resolve while MCP sessions
76
- are open by @elberthc-byte in
77
- [#29674](https://github.com/google-gemini/gemini-cli/pull/29674)
78
- - fix(core): retain ask_user question text in the tool result display by
79
- @elberthc-byte in
80
- [#29677](https://github.com/google-gemini/gemini-cli/pull/29677)
81
- - fix(core): eliminate false positives on untrusted command flags and compound
82
- loops by @DavidAPierce in
83
- [#29672](https://github.com/google-gemini/gemini-cli/pull/29672)
84
- - fix(cli): clear cached credentials when re-selecting Google login by
85
- @urielefrenvirtusa in
86
- [#29643](https://github.com/google-gemini/gemini-cli/pull/29643)
87
- - fix(cli): resolve hang on Enter keypress in interactive mode (#23297) by
56
+ [#29742](https://github.com/google-gemini/gemini-cli/pull/29742)
57
+ - refactor(core,cli): emit tool call groups from the scheduler and drop the UI
58
+ lookahead by @jesussamuel-byte in
59
+ [#29736](https://github.com/google-gemini/gemini-cli/pull/29736)
60
+ - fix(core): format and quote Windows diff command arguments in openDiff by
61
+ @jvargassanchez-dot in
62
+ [#29753](https://github.com/google-gemini/gemini-cli/pull/29753)
63
+ - fix(cli): round before selecting units in formatDuration by @diegogodinezr in
64
+ [#29766](https://github.com/google-gemini/gemini-cli/pull/29766)
65
+ - fix(core): disable interactive credential and SSH prompts in getSafeGitEnv by
66
+ @villahernandez-coder in
67
+ [#29760](https://github.com/google-gemini/gemini-cli/pull/29760)
68
+ - fix(cli): resolve settings placeholders after loading .env files by
88
69
  @elberthc-byte in
89
- [#29476](https://github.com/google-gemini/gemini-cli/pull/29476)
90
- - perf(core): optimize ignore filtering and enable subtree pruning (#29077) by
91
- @amelidev in [#29582](https://github.com/google-gemini/gemini-cli/pull/29582)
92
- - fix(a2a-server): isolate tool rejection to active call in sequential batches
93
- by @jvargassanchez-dot in
94
- [#29683](https://github.com/google-gemini/gemini-cli/pull/29683)
95
- - fix(cli): skip eager recursive file reading for @<directory> references by
70
+ [#29750](https://github.com/google-gemini/gemini-cli/pull/29750)
71
+ - fix(core): harden SKILL.md frontmatter parsing for single-line descriptions by
72
+ @jesussamuel-byte in
73
+ [#29769](https://github.com/google-gemini/gemini-cli/pull/29769)
74
+ - Add Banner about Gemini CLI not being optimized for Gemini 4 by @srithreepo in
75
+ [#29774](https://github.com/google-gemini/gemini-cli/pull/29774)
76
+ - Update README to remove obsolete content by @srithreepo in
77
+ [#29775](https://github.com/google-gemini/gemini-cli/pull/29775)
78
+ - fix(ci): remove unsupported members permission in unassign-inactive-assignees
79
+ workflow by @ugorla-dev in
80
+ [#29770](https://github.com/google-gemini/gemini-cli/pull/29770)
81
+ - fix(cli): reset slash-command conflict dedupe when conflicts reappear by
96
82
  @jvargassanchez-dot in
97
- [#29617](https://github.com/google-gemini/gemini-cli/pull/29617)
98
- - fix(cli): keep loading other extensions when one fails the allowlist check by
83
+ [#29768](https://github.com/google-gemini/gemini-cli/pull/29768)
84
+ - fix(cli): verify active binary update to prevent PATH shadowing false success
85
+ by @urielefrenvirtusa in
86
+ [#29757](https://github.com/google-gemini/gemini-cli/pull/29757)
87
+ - fix(cli): support 'keys' array in keybindings.json by @urielefrenvirtusa in
88
+ [#29773](https://github.com/google-gemini/gemini-cli/pull/29773)
89
+ - fix(cli): forward termination signals from bootstrap parent to child process
90
+ by @villahernandez-coder in
91
+ [#29790](https://github.com/google-gemini/gemini-cli/pull/29790)
92
+ - fix(ui): preserve terminal scrollback during viewport refreshes by
93
+ @diegogodinezr in
94
+ [#29792](https://github.com/google-gemini/gemini-cli/pull/29792)
95
+ - fix(cli): decode streamed Node HTTP activity chunks with StringDecoder by
99
96
  @jesussamuel-byte in
100
- [#29720](https://github.com/google-gemini/gemini-cli/pull/29720)
101
- - fix(cli): correct reverse search highlight index for expanding unicode
102
- characters by @diegogodinezr in
103
- [#29699](https://github.com/google-gemini/gemini-cli/pull/29699)
104
- - fix(core): treat whitespace-only UTF-16 and UTF-32 files as empty by
97
+ [#29827](https://github.com/google-gemini/gemini-cli/pull/29827)
98
+ - chore: migrate gsutil usage to gcloud storage by @gurusai-voleti in
99
+ [#29839](https://github.com/google-gemini/gemini-cli/pull/29839)
100
+ - fix(core): preserve user-level ~/.gitconfig in shell and git environments by
105
101
  @jesussamuel-byte in
106
- [#29722](https://github.com/google-gemini/gemini-cli/pull/29722)
107
- - fix(cli): restore debounced static UI refresh on terminal width changes by
108
- @jvargassanchez-dot in
109
- [#29644](https://github.com/google-gemini/gemini-cli/pull/29644)
110
- - fix(cli): prevent session poisoning on rapid Ctrl-C interruption by
111
- @villahernandez-coder in
112
- [#29728](https://github.com/google-gemini/gemini-cli/pull/29728)
102
+ [#29832](https://github.com/google-gemini/gemini-cli/pull/29832)
103
+ - fix(core): prevent false positive matches in isAuthenticationError by
104
+ @urielefrenvirtusa in
105
+ [#29835](https://github.com/google-gemini/gemini-cli/pull/29835)
106
+ - fix(core): support opt-in private network endpoints for MCP OAuth flows by
107
+ @luisfelipe-alt in
108
+ [#29844](https://github.com/google-gemini/gemini-cli/pull/29844)
113
109
 
114
110
  **Full Changelog**:
115
- https://github.com/google-gemini/gemini-cli/compare/v0.64.0-preview.1...v0.65.0-preview.0
111
+ https://github.com/google-gemini/gemini-cli/compare/v0.65.0-preview.0...v0.66.0-preview.0
@@ -118,6 +118,14 @@ mount your local project folder and operate within `/Users/you/project` inside
118
118
  the container. This allows the AI to seamlessly read and modify your project
119
119
  files while remaining isolated from the rest of your system.
120
120
 
121
+ **How it works (IDE integration):**
122
+
123
+ When you start Gemini CLI from your IDE's integrated terminal, the host process
124
+ bridges the IDE companion connection into the container over `docker exec` (or
125
+ `podman exec`). The companion's port and authentication token stay on the host;
126
+ only the IDE calls that Gemini CLI needs are relayed. For details, see
127
+ [Using with sandboxing](../ide-integration/index.md#using-with-sandboxing).
128
+
121
129
  **Quick setup:**
122
130
 
123
131
  To enable Docker sandboxing, run Gemini CLI with the sandbox flag and specify
@@ -220,6 +228,14 @@ To set up runsc:
220
228
  2. Configure the Docker daemon to use the runsc runtime.
221
229
  3. Verify the installation.
222
230
 
231
+ gVisor gives the container its own user-space network stack, so services bound
232
+ to your host's loopback interface aren't reachable from inside the sandbox, even
233
+ with `--network host`. Gemini CLI's IDE integration doesn't rely on container
234
+ networking: the host process bridges the connection over `docker exec` (see
235
+ [Using with sandboxing](../ide-integration/index.md#using-with-sandboxing)). If
236
+ you configure the `runsc` runtime with `--network=none`, the sandboxed CLI has
237
+ no external network access at all and can't reach the Gemini API.
238
+
223
239
  ### 5. LXC/LXD (Linux only, experimental)
224
240
 
225
241
  Full-system container sandboxing using LXC/LXD. Unlike Docker/Podman, LXC
@@ -437,6 +453,14 @@ $env:SANDBOX_SET_UID_GID="false" # Disable UID/GID mapping
437
453
  - Check sandbox profile allows network.
438
454
  - Verify proxy configuration.
439
455
 
456
+ **IDE integration doesn't connect**
457
+
458
+ - Inside a container sandbox, the connection is bridged by the host process when
459
+ the sandbox starts. Make sure the IDE companion extension is running, then
460
+ restart Gemini CLI from the IDE's integrated terminal.
461
+ - Run with `DEBUG=1` and look for `[IdeBridge]` messages. See
462
+ [Using with sandboxing](../ide-integration/index.md#using-with-sandboxing).
463
+
440
464
  ### Debug mode
441
465
 
442
466
  ```bash
@@ -214,12 +214,22 @@ If you are using Gemini CLI within a sandbox, be aware of the following:
214
214
  - **On macOS:** The IDE integration requires network access to communicate with
215
215
  the IDE companion extension. You must use a Seatbelt profile that allows
216
216
  network access.
217
- - **In a Docker container:** If you run Gemini CLI inside a Docker (or Podman)
218
- container, the IDE integration can still connect to the VS Code extension
219
- running on your host machine. The CLI is configured to automatically find the
220
- IDE server on `host.docker.internal`. No special configuration is usually
221
- required, but you may need to ensure your Docker networking setup allows
222
- connections from the container to the host.
217
+ - **In a container sandbox (Docker, Podman, or gVisor/runsc):** IDE integration
218
+ works, but not over the network. The companion extension's server listens only
219
+ on your host's loopback interface and requires an authentication token that is
220
+ never passed into the container. Instead, Gemini CLI on the host bridges the
221
+ connection for you: it connects to the extension itself and relays the IDE
222
+ calls into the container over `docker exec` (or `podman exec`), using a Unix
223
+ socket inside the container. The bridge doesn't depend on container
224
+ networking, so it also works with gVisor's isolated network stack. Only
225
+ `openDiff` and `closeDiff` for files inside your IDE workspace, and the IDE
226
+ context updates, are relayed. For the bridge to be set up, the extension must
227
+ be running when you start Gemini CLI, and the sandbox image must provide
228
+ `node` (the default image does).
229
+ - **In a dev container or Remote - SSH session:** IDE integration connects
230
+ directly, because the extension host and Gemini CLI share the same loopback
231
+ interface.
232
+ - **With LXC/LXD:** IDE integration isn't available from inside an LXC sandbox.
223
233
 
224
234
  ## Troubleshooting
225
235
 
@@ -240,6 +250,20 @@ If you are using Gemini CLI within a sandbox, be aware of the following:
240
250
  2. Open a new terminal window in your IDE to ensure it picks up the correct
241
251
  environment.
242
252
 
253
+ - **Message:**
254
+ `🔴 Disconnected: Failed to connect to IDE companion extension in [IDE Name]. Gemini CLI is running inside a sandbox: make sure the extension is installed and running in your IDE, then restart Gemini CLI so the sandbox can bridge the connection.`
255
+
256
+ - **Cause:** Gemini CLI is running inside a container sandbox and the host
257
+ couldn't bridge the connection, usually because the extension wasn't running
258
+ when the sandbox started.
259
+ - **Solution:**
260
+ 1. Make sure the **Gemini CLI Companion** extension is enabled and shows as
261
+ running in your IDE.
262
+ 2. Quit Gemini CLI and start it again from the IDE's integrated terminal.
263
+ The bridge is set up when the sandbox starts.
264
+ 3. If the problem continues, start Gemini CLI with `DEBUG=1` and look for
265
+ `[IdeBridge]` messages before the UI appears.
266
+
243
267
  - **Message:**
244
268
  `🔴 Disconnected: IDE connection error. The connection was lost unexpectedly. Please try reconnecting by running /ide enable`
245
269
  - **Cause:** The connection to the IDE companion was lost.
@@ -133,51 +133,54 @@ export class AgentRegistry {
133
133
  }
134
134
  this.loadBuiltInAgents();
135
135
  // Load project-level agents: .gemini/agents/ (relative to Project Root)
136
- const folderTrustEnabled = this.config.getFolderTrust();
137
- const isTrustedFolder = this.config.isTrustedFolder();
138
- if (!folderTrustEnabled || isTrustedFolder) {
139
- const projectAgentsDir = this.config.storage.getProjectAgentsDir();
140
- const projectAgents = await loadAgentsFromDirectory(projectAgentsDir);
141
- for (const error of projectAgents.errors) {
142
- const msg = `Agent loading error: ${error.message}`;
143
- errors?.push(msg);
144
- coreEvents.emitFeedback('error', msg);
145
- }
146
- const ackService = this.config.getAcknowledgedAgentsService();
147
- const projectRoot = this.config.getProjectRoot();
148
- const unacknowledgedAgents = [];
149
- const agentsToRegister = [];
150
- for (const agent of projectAgents.agents) {
151
- this.ensureRemoteAgentHash(agent);
152
- if (!agent.metadata?.hash) {
153
- agentsToRegister.push(agent);
154
- continue;
136
+ // Skip if the workspace is the user's home directory to avoid loading global agents twice
137
+ if (!this.config.storage.isWorkspaceHomeDir()) {
138
+ const folderTrustEnabled = this.config.getFolderTrust();
139
+ const isTrustedFolder = this.config.isTrustedFolder();
140
+ if (!folderTrustEnabled || isTrustedFolder) {
141
+ const projectAgentsDir = this.config.storage.getProjectAgentsDir();
142
+ const projectAgents = await loadAgentsFromDirectory(projectAgentsDir);
143
+ for (const error of projectAgents.errors) {
144
+ const msg = `Agent loading error: ${error.message}`;
145
+ errors?.push(msg);
146
+ coreEvents.emitFeedback('error', msg);
155
147
  }
156
- const isAcknowledged = await ackService.isAcknowledged(projectRoot, agent.name, agent.metadata.hash);
157
- if (isAcknowledged) {
158
- agentsToRegister.push(agent);
148
+ const ackService = this.config.getAcknowledgedAgentsService();
149
+ const projectRoot = this.config.getProjectRoot();
150
+ const unacknowledgedAgents = [];
151
+ const agentsToRegister = [];
152
+ for (const agent of projectAgents.agents) {
153
+ this.ensureRemoteAgentHash(agent);
154
+ if (!agent.metadata?.hash) {
155
+ agentsToRegister.push(agent);
156
+ continue;
157
+ }
158
+ const isAcknowledged = await ackService.isAcknowledged(projectRoot, agent.name, agent.metadata.hash);
159
+ if (isAcknowledged) {
160
+ agentsToRegister.push(agent);
161
+ }
162
+ else {
163
+ unacknowledgedAgents.push(agent);
164
+ }
159
165
  }
160
- else {
161
- unacknowledgedAgents.push(agent);
166
+ if (unacknowledgedAgents.length > 0) {
167
+ coreEvents.emitAgentsDiscovered(unacknowledgedAgents);
162
168
  }
169
+ await Promise.allSettled(agentsToRegister.map(async (agent) => {
170
+ try {
171
+ await this.registerAgent(agent, errors);
172
+ }
173
+ catch (e) {
174
+ const msg = `Error registering project agent "${agent.name}": ${e instanceof Error ? e.message : String(e)}`;
175
+ debugLogger.warn(`[AgentRegistry] ${msg}`, e);
176
+ errors?.push(msg);
177
+ coreEvents.emitFeedback('error', msg);
178
+ }
179
+ }));
163
180
  }
164
- if (unacknowledgedAgents.length > 0) {
165
- coreEvents.emitAgentsDiscovered(unacknowledgedAgents);
181
+ else {
182
+ coreEvents.emitFeedback('info', 'Skipping project agents due to untrusted folder. To enable, ensure that the project root is trusted.');
166
183
  }
167
- await Promise.allSettled(agentsToRegister.map(async (agent) => {
168
- try {
169
- await this.registerAgent(agent, errors);
170
- }
171
- catch (e) {
172
- const msg = `Error registering project agent "${agent.name}": ${e instanceof Error ? e.message : String(e)}`;
173
- debugLogger.warn(`[AgentRegistry] ${msg}`, e);
174
- errors?.push(msg);
175
- coreEvents.emitFeedback('error', msg);
176
- }
177
- }));
178
- }
179
- else {
180
- coreEvents.emitFeedback('info', 'Skipping project agents due to untrusted folder. To enable, ensure that the project root is trusted.');
181
184
  }
182
185
  // Load user-level agents: ~/.gemini/agents/
183
186
  const userAgentsDir = Storage.getUserAgentsDir();