Gemini CLI v0.67.0 opens VS Code diffs from inside Docker and gVisor sandboxes

1 hour ago

Gemini CLI v0.67.0 connects to VS Code from inside Docker, Podman and gVisor sandboxes, adds a gemini models command, and fixes YOLO-mode prompts, Escape and headless cancellation, spending-cap errors, read-only files, long-session HTTP 400s, Claude Code hook migration and wide-character terminals. https://github.com/google-gemini/gemini-cli/releases/tag/v0.67.0 https://github.com/google-gemini/gemini-cli/compare/v0.66.0...v0.67.0 https://github.com/google-gemini/gemini-cli/blob/v0.67.0/docs/ide-integration/index.md

Ask about this presentation

Chapters

  1. 0:00IDE integration inside container sandboxes
  2. 0:15The companion’s token stays on the host
  3. 0:27Start the companion extension before the sandbox
  4. 0:38gemini models lists the models you can pick
  5. 0:5101: Fewer prompts, real stops
  6. 0:53YOLO mode stops asking about flags from your own commands
  7. 1:10Escape now stops the agent
  8. 1:20Headless runs stop on SIGINT and SIGTERM
  9. 1:34A spending cap error now says it’s a spending cap
  10. 1:4702: Files, sessions and hooks
  11. 1:50Relative paths follow the file open in your IDE
  12. 2:00Read-only files are refused again
  13. 2:13Long tool sessions stop failing with HTTP 400
  14. 2:26Migrated Claude Code hooks keep their timeouts
  15. 2:3703: Terminals
  16. 2:38Wide-border terminals stop stacking copies of the UI
  17. 2:52Termux search, CRLF diffs and Thai text get fixed
  18. 3:04Upgrade if you run Gemini CLI in a sandbox
Show transcript
  1. Gemini CLI can now reach VS Code from inside a container sandbox. Under Docker, Podman or gVisor, IDE status says connected, and edits open as diffs in your editor.

    Slide text
    Gemini CLI

    Gemini CLI v0.67.0 opens VS Code diffs from inside Docker and gVisor sandboxes

    $ GEMINI_SANDBOX=runsc gemini > /ide status 🟢 Connected
    docs/ide-integration/index.md · #29858
  2. The companion extension’s token never enters the container. Gemini CLI on the host relays the calls over docker exec, and only diffs for files in your workspace get through.

    Slide text
    > ide in the sandbox 2026-11-04
    sandbox → openDiff /etc/passwd Refusing to open '/etc/passwd' from inside the sandbox: it is outside the IDE workspace
    packages/cli/src/utils/ideBridge.ts · #29858
  3. The bridge starts with the sandbox, so the companion extension must already be running, and the image needs node. LXC sandboxes and Windows hosts don’t get the bridge yet.

    Slide text
    > ide in the sandbox 2026-11-04
    ✓ node in the sandbox image (the default image has it) ✗ LXC and LXD sandboxes ✗ Windows hosts, left for a follow-up
    docs/ide-integration/index.md · #29858
  4. Gemini CLI adds a gemini models command and a --list-models flag. The JSON output gives each model’s ID, name and token limits, with no sign-in logs, ready for jq.

    Slide text
    > new command 2026-11-04
    $ gemini models -o json | jq . modelId · displayName · description contextLimits: inputTokens · outputTokens
    packages/cli/src/commands/models.ts · #29880
  5. Fewer prompts, and cancels that stop.

    Slide text
    > fewer prompts, real stops 2026-11-04
    01
    Fewer prompts, real stops
  6. In YOLO mode, flags from the output of Gemini CLI’s own shell commands kept asking for confirmation. Now they pass, and one approval lasts the session. Flags from web results and MCP output still ask.

    Slide text
    > fewer prompts, real stops 2026-11-04
    ✓ flags in the output of pwd, git diff, a test runner ✓ one approval covers the session ✗ flags from web_fetch, web_search and MCP still ask
    packages/core/src/utils/untrustedContextTracker.ts · #29833
  7. Pressing Escape mid-turn printed request cancelled, and then the agent ran git status anyway. Now cancelling ends the turn, and queued tool calls are dropped.

    Slide text
    > fewer prompts, real stops 2026-11-04
    ℹ Request cancelled. Shell git status Shell git worktree list
    packages/cli/src/ui/hooks/useGeminiStream.ts · #29868
  8. In Docker, CI or a script, Gemini CLI ignored termination signals and could still run queued shell tools. Now a signal aborts the run, with exit code 130.

    Slide text
    > fewer prompts, real stops 2026-11-04
    Docker · CI · scripts · subshells ✓ queued tool calls are dropped ✓ exits with code 130
    packages/cli/src/nonInteractiveCli.ts · #29849
  9. A project at its AI Studio spending cap got retried like a rate limit, under a high demand message. Now Gemini CLI stops and shows the real message, with the link to raise the cap.

    Slide text
    > fewer prompts, real stops 2026-11-04
    We are currently experiencing high demand. Your project has exceeded its monthly spending cap. Please go to AI Studio at ai.studio/spend to manage your project spend cap…
    packages/core/src/utils/googleQuotaErrors.ts · #29961
  10. Files, sessions and hooks.

    Slide text
    > files, sessions and hooks 2026-11-04
    02
    Files, sessions and hooks
  11. In a multi-root VS Code workspace, a relative path could write into a sibling repository. Now it resolves against the workspace or git repository of your active file.

    Slide text
    > files, sessions and hooks 2026-11-04
    multi-root or parent-folder workspace: writes landed in a sibling repo resolved against the active file’s workspace or nested git repo
    packages/core/src/utils/pathCorrector.ts · #29838
  12. A recent switch to atomic writes let Gemini CLI replace read-only files and split hard links. Writes now check permissions first, and hard-linked files are edited in place.

    Slide text
    > files, sessions and hooks 2026-11-04
    0444 files overwritten, hard links split EACCES on a read-only file hard-linked files written in place
    packages/core/src/services/fileSystemService.ts · #29749
  13. After a session’s first tool call, the Gemini API could reject the next request with a 400 error for a missing thought signature. Every earlier function call turn now carries one.

    Slide text
    > files, sessions and hooks 2026-11-04
    400 INVALID_ARGUMENT Function call is missing a thought_signature in functionCall parts
    packages/core/src/core/geminiChat.ts · #29828
  14. Claude Code sets hook timeouts in seconds and Gemini CLI reads milliseconds, so migrating turned thirty seconds into thirty milliseconds. Migration now converts the units.

    Slide text
    > files, sessions and hooks 2026-11-04
    before: timeout: 30 written as 30 ms
    now: converted to 30,000 ms
    packages/cli/src/commands/hooks/migrate.ts · #29899
  15. Terminals.

    Slide text
    > terminals 2026-11-04
    03
    Terminals
  16. On terminals that draw ambiguous-width characters wide, borders wrapped, and every keypress left a copy of the dialog in scrollback. Gemini CLI now measures the width at startup.

    Slide text
    > terminals 2026-11-04
    Terminal.app “ambiguous characters are wide” GNOME Terminal Wide · screen cjkwidth on ✓ width measured at startup, UI redraws in place
    ui/utils/terminalCapabilityManager.ts · #29905
  17. On Android, Termux’s own ripgrep now works for search. Edits to files with Windows line endings show a short diff, and Thai and Lao text stays inside the prompt box.

    Slide text
    > terminals 2026-11-04
    ✓ Termux: ripgrep from pkg install is trusted ✓ CRLF files: the diff shows the changed lines ✓ Thai and Lao SARA AM: two columns wide
    paths.ts · diff-utils.ts · textUtils.ts · #29884 #29966 #29883
  18. If you run Gemini CLI in a Docker or gVisor sandbox from VS Code, I’d install this today, because diffs finally open in your editor. The rest of the fixes are in the release notes on GitHub.

    Slide text
    Gemini CLI

    Sandbox plus VS Code? Install this one.

    Everything else: Gemini CLI v0.67.0 release notes on GitHub

    github.com/google-gemini/gemini-cli · releases

What happened in AI today, in your inbox

One short email each evening. Read it and you’re caught up.

Built with ❤️ in New York