Files
gemini-cli/docs/changelogs/preview.md

26 KiB

Preview release: Release v0.27.0-preview.0

Released: January 27, 2026

Our preview release includes the latest, new, and experimental features. This release may not be as stable as our latest weekly release.

To install the preview release:

npm install -g @google/gemini-cli@preview

Highlights

  • Event-Driven Architecture: The tool execution scheduler is now event-driven, improving performance and reliability.
  • System Prompt Override: Now supports dynamic variable substitution.
  • Rewind Command: The /rewind command has been implemented.
  • Linux Clipboard: Image pasting capabilities for Wayland and X11 on Linux.

What's Changed

  • remove fireAgent and beforeAgent hook by @ishaanxgupta in #16919
  • Remove unused modelHooks and toolHooks by @ved015 in #17115
  • feat(cli): sanitize ANSI escape sequences in non-interactive output by @sehoon38 in #17172
  • Update Attempt text to Retry when showing the retry happening to the … by @sehoon38 in #17178
  • chore(skills): update pr-creator skill workflow by @sehoon38 in #17180
  • feat(cli): implement event-driven tool execution scheduler by @abhipatel12 in #17078
  • chore(release): bump version to 0.27.0-nightly.20260121.97aac696f by @gemini-cli-robot in #17181
  • Remove other rewind reference in docs by @chrstnb in #17149
  • feat(skills): add code-reviewer skill by @sehoon38 in #17187
  • feat(plan): Extend Shift+Tab Mode Cycling to include Plan Mode by @Adib234 in #17177
  • feat(plan): refactor TestRig and eval helper to support configurable approval modes by @jerop in #17171
  • feat(workflows): support recursive workstream labeling and new IDs by @bdmorgan in #17207
  • Run evals for all models. by @gundermanc in #17123
  • fix(github): improve label-workstream-rollup efficiency with GraphQL by @bdmorgan in #17217
  • Docs: Update changelogs for v.0.25.0 and v0.26.0-preview.0 releases. by @g-samroberts in #17215
  • Migrate beforeTool and afterTool hooks to hookSystem by @ved015 in #17204
  • fix(github): improve label-workstream-rollup efficiency and fix bugs by @bdmorgan in #17219
  • feat(cli): improve skill enablement/disablement verbiage by @NTaylorMullen in #17192
  • fix(admin): Ensure CLI commands run in non-interactive mode by @skeshive in #17218
  • feat(core): support dynamic variable substitution in system prompt override by @NTaylorMullen in #17042
  • fix(core,cli): enable recursive directory access for by @galz10 in #17094
  • Docs: Marking for experimental features by @jkcinouye in #16760
  • Support command/ctrl/alt backspace correctly by @scidomino in #17175
  • feat(plan): add approval mode instructions to system prompt by @jerop in #17151
  • feat(core): enable disableLLMCorrection by default by @SandyTao520 in #17223
  • Remove unused slug from sidebar by @chrstnb in #17229
  • drain stdin on exit by @scidomino in #17241
  • refactor(cli): decouple UI from live tool execution via ToolActionsContext by @abhipatel12 in #17183
  • fix(core): update token count and telemetry on /chat resume history load by @psinha40898 in #16279
  • fix: /policy to display policies according to mode by @ishaanxgupta in #16772
  • fix(core): simplify replace tool error message by @SandyTao520 in #17246
  • feat(cli): consolidate shell inactivity and redirection monitoring by @NTaylorMullen in #17086
  • fix(scheduler): prevent stale tool re-publication and fix stuck UI state by @abhipatel12 in #17227
  • feat(config): default enableEventDrivenScheduler to true by @abhipatel12 in #17211
  • feat(hooks): enable hooks system by default by @abhipatel12 in #17247
  • feat(core): Enable AgentRegistry to track all discovered subagents by @SandyTao520 in #17253
  • feat(core): Have subagents use a JSON schema type for input. by @joshualitt in #17152
  • feat: replace large text pastes with [Pasted Text: X lines] placeholder by @jackwotherspoon in #16422
  • security(hooks): Wrap hook-injected context in distinct XML tags by @yunaseoul in #17237
  • Enable the ability to queue specific nightly eval tests by @gundermanc in #17262
  • docs(hooks): comprehensive update of hook documentation and specs by @abhipatel12 in #16816
  • refactor: improve large text paste placeholder by @jacob314 in #17269
  • feat: implement /rewind command by @Adib234 in #15720
  • Feature/jetbrains ide detection by @SoLoHiC in #16243
  • docs: update typo in mcp-server.md file by @schifferl in #17099
  • Sanitize command names and descriptions by @ehedlund in #17228
  • fix(auth): don't crash when initial auth fails by @skeshive in #17308
  • Added image pasting capabilities for Wayland and X11 on Linux by @devr0306 in #17144
  • feat: add AskUser tool schema by @jackwotherspoon in #16988
  • fix cli settings: resolve layout jitter in settings bar by @Mag1ck in #16256
  • fix: show whitespace changes in edit tool diffs by @Ujjiyara in #17213
  • Remove redundant calls setting linuxClipboardTool. getUserLinuxClipboardTool() now handles the caching internally by @jacob314 in #17320
  • ci: allow failure in evals-nightly run step by @gundermanc in #17319
  • feat(cli): Add state management and plumbing for agent configuration dialog by @SandyTao520 in #17259
  • bug: fix ide-client connection to ide-companion when inside docker via ssh/devcontainer by @kapsner in #15049
  • Emit correct newline type return by @scidomino in #17331
  • New skill: docs-writer by @g-samroberts in #17268
  • fix(core): Resolve AbortSignal MaxListenersExceededWarning (#5950) by @spencer426 in #16735
  • Disable tips after 10 runs by @Adib234 in #17101
  • Fix so rewind starts at the bottom and loadHistory refreshes static content. by @jacob314 in #17335
  • feat(core): Remove legacy settings. by @joshualitt in #17244
  • feat(plan): add 'communicate' tool kind by @jerop in #17341
  • feat(routing): A/B Test Numerical Complexity Scoring for Gemini 3 by @mattKorwel in #16041
  • feat(plan): update UI Theme for Plan Mode by @Adib234 in #17243
  • fix(ui): stabilize rendering during terminal resize in alternate buffer by @lkk214 in #15783
  • feat(cli): add /agents config command and improve agent discovery by @SandyTao520 in #17342
  • feat(mcp): add enable/disable commands for MCP servers (#11057) by @jasmeetsb in #16299
  • fix(cli)!: Default to interactive mode for positional arguments by @ishaanxgupta in #16329
  • Fix issue #17080 by @jacob314 in #17100
  • feat(core): Refresh agents after loading an extension. by @joshualitt in #17355
  • fix(cli): include source in policy rule display by @allenhutchison in #17358
  • fix: remove obsolete CloudCode PerDay quota and 120s terminal threshold by @gsquared94 in #17236
  • Refactor subagent delegation to be one tool per agent by @gundermanc in #17346
  • fix(core): Include MCP server name in OAuth message by @jerop in #17351
  • Fix pr-triage.sh script to update pull requests with tags "help wanted" and "maintainer only" by @jacob314 in #17324
  • feat(plan): implement simple workflow for planning in main agent by @jerop in #17326
  • fix: exit with non-zero code when esbuild is missing by @yuvrajangadsingh in #16967
  • fix: ensure @docs/cli/custom-commands.md UI message ordering and test by @medic-code in #12038
  • fix(core): add alternative command names for Antigravity editor detec… by @BaeSeokJae in #16829
  • Refactor: Migrate CLI appEvents to Core coreEvents by @Adib234 in #15737
  • fix(core): await MCP initialization in non-interactive mode by @Ratish1 in #17390
  • Fix modifyOtherKeys enablement on unsupported terminals by @seekskyworld in #16714
  • fix(core): gracefully handle disk full errors in chat recording by @godwiniheuwa in #17305
  • fix(oauth): update oauth to use 127.0.0.1 instead of localhost by @skeshive in #17388
  • fix(core): use RFC 9728 compliant path-based OAuth protected resource discovery by @vrv in #15756
  • Update Code Wiki README badge by @PatoBeltran in #15229
  • Add conda installation instructions for Gemini CLI by @ishaanxgupta in #16921
  • chore(refactor): extract BaseSettingsDialog component by @SandyTao520 in #17369
  • fix(cli): preserve input text when declining tool approval (#15624) by @ManojINaik in #15659
  • chore: upgrade dep: diff 7.0.0-> 8.0.3 by @scidomino in #17403
  • feat: add AskUserDialog for UI component of AskUser tool by @jackwotherspoon in #17344
  • feat(ui): display user tier in about command by @sehoon38 in #17400
  • feat: add clearContext to AfterAgent hooks by @jackwotherspoon in #16574
  • fix(cli): change image paste location to global temp directory (#17396) by @devr0306 in #17396
  • Fix line endings issue with Notice file by @scidomino in #17417
  • feat(plan): implement persistent approvalMode setting by @Adib234 in #17350
  • feat(ui): Move keyboard handling into BaseSettingsDialog by @SandyTao520 in #17404
  • Allow prompt queueing during MCP initialization by @Adib234 in #17395
  • feat: implement AgentConfigDialog for /agents config command by @SandyTao520 in #17370
  • fix(agents): default to all tools when tool list is omitted in subagents by @gundermanc in #17422
  • feat(cli): Moves tool confirmations to a queue UX by @abhipatel12 in #17276
  • fix(core): hide user tier name by @sehoon38 in #17418
  • feat: Enforce unified folder trust for /directory add by @galz10 in #17359
  • migrate fireToolNotificationHook to hookSystem by @ved015 in #17398
  • Clean up dead code by @scidomino in #17443
  • feat(workflow): add stale pull request closer with linked-issue enforcement by @bdmorgan in #17449
  • feat(workflow): expand stale-exempt labels to include help wanted and Public Roadmap by @bdmorgan in #17459
  • chore(workflow): remove redundant label-enforcer workflow by @bdmorgan in #17460
  • Resolves the confusing error message `ripgrep exited with code null that occurs when a search operation is cancelled or aborted by @maximmasiutin in #14267
  • fix: detect pnpm/pnpx in ~/.local by @rwakulszowa in #15254
  • docs: Add instructions for MacPorts and uninstall instructions for Homebrew by @breun in #17412
  • docs(hooks): clarify mandatory 'type' field and update hook schema documentation by @abhipatel12 in #17499
  • Improve error messages on failed onboarding by @gsquared94 in #17357
  • Follow up to "enableInteractiveShell for external tooling relying on a2a server" by @DavidAPierce in #17130
  • Fix/issue 17070 by @alih552 in #17242
  • fix(core): handle URI-encoded workspace paths in IdeClient by @dong-jun-shin in #17476
  • feat(cli): add quick clear input shortcuts in vim mode by @harshanadim in #17470
  • feat(core): optimize shell tool llmContent output format by @SandyTao520 in #17538
  • Fix bug in detecting already added paths. by @jacob314 in #17430
  • feat(scheduler): support multi-scheduler tool aggregation and nested call IDs by @abhipatel12 in #17429
  • feat(agents): implement first-run experience for project-level sub-agents by @gundermanc in #17266
  • Update extensions docs by @chrstnb in #16093
  • Docs: Refactor left nav on the website by @jkcinouye in #17558
  • fix(core): stream grep/ripgrep output to prevent OOM by @adamfweidman in #17146
  • feat(plan): add persistent plan file storage by @jerop in #17563
  • feat(agents): migrate subagents to event-driven scheduler by @abhipatel12 in #17567
  • Fix extensions config error by @chrstnb in #17580
  • fix(plan): remove subagent invocation from plan mode by @jerop in #17593
  • feat(ui): add solid background color option for input prompt by @jacob314 in #16563
  • feat(plan): refresh system prompt when approval mode changes (Shift+Tab) by @jerop in #17585
  • feat(cli): add global setting to disable UI spinners by @galz10 in #17234
  • fix(security): enforce strict policy directory permissions by @yunaseoul in #17353
  • test(core): fix tests in windows by @scidomino in #17592
  • feat(mcp/extensions): Allow users to selectively enable/disable MCP servers included in an extension( Issue #11057 & #17402) by @jasmeetsb in #17434
  • Always map mac keys, even on other platforms by @scidomino in #17618
  • Ctrl-O by @jacob314 in #17617
  • feat(plan): update cycling order of approval modes by @Adib234 in #17622
  • fix(cli): restore 'Modify with editor' option in external terminals by @abhipatel12 in #17621
  • Slash command for helping in debugging by @gundermanc in #17609
  • feat: add double-click to expand/collapse large paste placeholders by @jackwotherspoon in #17471
  • refactor(cli): migrate non-interactive flow to event-driven scheduler by @abhipatel12 in #17572
  • fix: loadcodeassist eligible tiers getting ignored for unlicensed users (regression) by @gsquared94 in #17581
  • chore(core): delete legacy nonInteractiveToolExecutor by @abhipatel12 in #17573
  • feat(core): enforce server prefixes for MCP tools in agent definitions by @abhipatel12 in #17574
  • feat (mcp): Refresh MCP prompts on list changed notification by @MrLesk in #14863
  • feat(ui): pretty JSON rendering tool outputs by @medic-code in #9767
  • Fix iterm alternate buffer mode issue rendering backgrounds by @jacob314 in #17634
  • feat(cli): add gemini extensions list --output-format=json by @AkihiroSuda in #14479
  • fix(extensions): add .gitignore to extension templates by @godwiniheuwa in #17293
  • paste transform followup by @jacob314 in #17624
  • refactor: rename formatMemoryUsage to formatBytes by @Nubebuster in #14997
  • chore: remove extra top margin from /hooks and /extensions by @jackwotherspoon in #17663
  • feat(cli): add oncall command for issue triage by @sehoon38 in #17661
  • Fix sidebar issue for extensions link by @chrstnb in #17668
  • Change formatting to prevent UI redressing attacks by @scidomino in #17611
  • Fix cluster of bugs in the settings dialog. by @jacob314 in #17628
  • Update sidebar to resolve site build issues by @chrstnb in #17674
  • fix(admin): fix a few bugs related to admin controls by @skeshive in #17590
  • revert bad changes to tests by @scidomino in #17673
  • feat(cli): show candidate issue state reason and duplicate status in triage by @sehoon38 in #17676
  • Fix missing slash commands when Gemini CLI is in a project with a package.json that doesn't follow semantic versioning by @Adib234 in #17561
  • feat(core): Model family-specific system prompts by @joshualitt in #17614
  • Sub-agents documentation. by @gundermanc in #16639
  • feat: wire up AskUserTool with dialog by @jackwotherspoon in #17411
  • Load extension settings for hooks, agents, skills by @chrstnb in #17245
  • Fix issue where Gemini CLI can make changes when simply asked a question by @gundermanc in #17608
  • Update docs-writer skill for editing and add style guide for reference. by @g-samroberts in #17669
  • fix(ux): have user message display a short path for pasted images by @devr0306 in #17613
  • feat(plan): enable AskUser tool in Plan mode for clarifying questions by @jerop in #17694
  • GEMINI.md polish by @jacob314 in #17680
  • refactor(core): centralize path validation and allow temp dir access for tools by @NTaylorMullen in #17185
  • feat(skills): promote Agent Skills to stable by @abhipatel12 in #17693
  • refactor(cli): keyboard handling and AskUserDialog by @jacob314 in #17414
  • docs: Add Experimental Remote Agent Docs by @adamfweidman in #17697
  • revert: promote Agent Skills to stable (#17693) by @abhipatel12 in #17712
  • feat(ux) Expandable (ctrl-O) and scrollable approvals in alternate buffer mode. by @jacob314 in #17640
  • feat(skills): promote skills settings to stable by @abhipatel12 in #17713
  • fix(cli): Preserve settings dialog focus when searching by @SandyTao520 in #17701
  • feat(ui): add terminal cursor support by @jacob314 in #17711
  • docs(skills): remove experimental labels and update tutorials by @abhipatel12 in #17714
  • docs: remove 'experimental' syntax for hooks in docs by @abhipatel12 in #17660
  • Add support for an additional exclusion file besides .gitignore and .geminiignore by @alisa-alisa in #16487
  • feat: add review-frontend-and-fix command by @galz10 in #17707

Full changelog: https://github.com/google-gemini/gemini-cli/compare/v0.26.0-preview.5...v0.27.0-preview.0