What changed in the major AI coding CLIs?
OpenAI upgraded Codex with plugins enabled by default, npm marketplace plugin sourcing, MCP tool search, system proxy support, Amazon Bedrock support, maximum reasoning effort, remote-control pairing, and clearer plugin management [3547]. Anthropic released an official skill called Frontend Design for Claude Code, which forces Claude to choose an aesthetic direction before generating code, available for multiple frameworks and harnesses [3545]. xAI open-sourced Grok Build, their answer to Claude Code, and five days earlier quietly released an official Claude Code plugin with 8 commands [3543]. A GitHub repo with 26k stars and 4k forks allows Claude Code to be rerouted to free models like DeepSeek and Kimi, reportedly losing Anthropic 20,000 users [3542]. A user built a true-scale atlas of the universe containing 8.4 million real stars in about a week using the AI coding tool Fable [3541]. Claude AI launched Claude for Teachers, offering free premium access to verified K-12 educators in the US with teaching skills and standards-aligned curricula [3537]. Google Gemini CLI received multiple fixes: strip thoughts from scrubbed history turns and resolve thought leakage [3642], preserve escape sequences in string literals for modern models [3641], make ~/.gitconfig read-only in the macOS sandbox [3640], egress cloud run service skeleton [3639], resolve symbolic link directory escape in memory import processor [3638], implement Cloud Run webhook ingestion service [3637], resolve defensive path resolution for at-reference files and fix macOS tests [3636], enforce case-insensitive sensitive path blocklist and vscode hitl [3635], and fix no_proxy test [3634]. Codex removed an obsolete workaround that could interfere with OpenAI Luna Responses Lite requests [3633]. Preserved the composer caret after request updates [3632]. Resynced the timeline correctly after reconnecting [3631]. Loaded more timeline history at once to reduce repeated backfill while scrolling [3630]. Fixed a project picker positioning crash [3629]. Kept permission auto-accept state separate for each server [3628]. Fixed connected project picker positioning when its anchor is still loading [3627]. Fixed spacing between model provider sections in Settings [3626]. fix(core): tolerate AlreadyExists in FSUtil.ensureDir (#36542) [3625]. Hid the drawer close button on Windows where it conflicts with the window chrome [3624]. Stopped subagents from launching nested subagents by default, with a configurable subagent_depth limit when needed [3623]. Home page command palette search can now find and open sessions [3622]. Fixed custom agent selector visibility when custom agents are available [3621]. Fixed startup readiness so WSL server loading is included before the desktop app reports ready [3620]. Improved dangerous-command detection, including more forced rm forms, and provides clearer rejection reasons when commands are denied [3619]. Fixed very large markdown tables stalling rendering or using excessive memory; tables over 200 rows show the first 200 with a "… N more rows" notice [3618]. Fixed truncated stream-json/JSON output and missing result message when piping large responses from claude -p [3617]. Fixed replies typed to a background agent being lost when delivery fails — the text is now saved and delivered when the session restarts [3616]. Fixed fast mode staying off after switching back to a model that supports it — it now restores automatically when enabled in settings [3615]. Added mouse-click support for multi-select menus and "Other" input rows in fullscreen mode [3614]. Added vimInsertModeRemaps setting: map two-key insert-mode sequences like jj to Escape in vim mode [3613]. Added screen reader mode: opt-in plain-text rendering for screen reader users. Run claude --ax-screen-reader, set CLAUDE_AX_SCREEN_READER=1, or add "axScreenReader": true to settings [3612]. Fixed plan approvals without edits being labeled "(edited by user)" and overwriting the plan file with a stale snapshot [3611]. Fixed a hook callback timeout being misreported to the model as a user rejection, which made unattended sessions stop and wait [3610]. Fixed a session crash when a tool's result renderer returned a numeric bigint value or plain text instead of a UI element [3609]. Fixed paste markers leaking into external editors opened from Claude Code, which could appear as stray È/É characters around pasted text [3608]. Fixed a rendered text fragment leaking into crash telemetry when a UI component returned content outside a styled text element [3607]. Fixed the ultracode keyword opt-in firing on non-human-originated input such as webhook payloads and relayed PR comments [3606]. Added a startup warning for Write(path), NotebookEdit(path), and Glob(path) permission rules — use Edit(path) or Read(path) instead [3605]. Added a live elapsed-time counter to the collapsed tool summary line so long-running tool calls visibly tick instead of looking stuck [3604]. Fixed edits that leave the input as "?" being silently swallowed and toggling the shortcuts panel [3603]. Fixed file upload validation: filenames ending in a DOS device suffix (.prn) or trailing dot are now accepted, and files with multiple hard links are refused [3602]. Fixed Claude Code on Vertex and Bedrock attempting the default Opus model at startup and printing a spurious fallback notice when a model is explicitly configured [3601]. Fixed auto mode overriding a PreToolUse hook's ask decision for unsandboxed Bash — a hook ask now floors the decision at a prompt [3600]. Fixed permission previews relayed to chat channels not neutralizing bidirectional-override, zero-width, and look-alike quote characters, so tool inputs cannot visually alter the approval message [3599]. Fixed shell mode (!) not executing commands containing file paths while the path autocomplete popup was open [3598]. Fixed SIGTERM during a running Bash tool orphaning the command's process tree in print/SDK mode; the CLI now aborts the turn, kills the tree, and exits 143 [3597]. Fixed a continue:false hook's halt being dropped when the tool fails or completes mid-stream, and hook infrastructure errors being misreported as user rejections [3596]. Fixed plan mode auto-running file-modifying Bash commands (e.g. touch, rm) without a permission prompt or SDK canUseTool callback [3595]. Added a session-wide limit on WebSearch tool calls (default 200, tunable via CLAUDE_CODE_MAX_WEB_SEARCHES_PER_SESSION) to stop runaway search loops [3594].[55]
OpenAI upgraded Codex with plugins enabled by default, npm marketplace plugin sourcing, MCP tool search, system proxy support, Amazon Bedrock support, maximum reasoning effort, remote-control pairing, and clearer plugin management [3547]. Anthropic released an official skill called Frontend Design for Claude Code, which forces Claude to choose an aesthetic direction before generating code, available for multiple frameworks and harnesses [3545]. xAI open-sourced Grok Build, their answer to Claude Code, and five days earlier quietly released an official Claude Code plugin with 8 commands [3543]. A GitHub repo with 26k stars and 4k forks allows Claude Code to be rerouted to free models like DeepSeek and Kimi, reportedly losing Anthropic 20,000 users [3542]. A user built a true-scale atlas of the universe containing 8.4 million real stars in about a week using the AI coding tool Fable [3541]. Claude AI launched Claude for Teachers, offering free premium access to verified K-12 educators in the US with teaching skills and standards-aligned curricula [3537]. Google Gemini CLI received multiple fixes: strip thoughts from scrubbed history turns and resolve thought leakage [3642], preserve escape sequences in string literals for modern models [3641], make ~/.gitconfig read-only in the macOS sandbox [3640], egress cloud run service skeleton [3639], resolve symbolic link directory escape in memory import processor [3638], implement Cloud Run webhook ingestion service [3637], resolve defensive path resolution for at-reference files and fix macOS tests [3636], enforce case-insensitive sensitive path blocklist and vscode hitl [3635], and fix no_proxy test [3634]. Codex removed an obsolete workaround that could interfere with OpenAI Luna Responses Lite requests [3633]. Preserved the composer caret after request updates [3632]. Resynced the timeline correctly after reconnecting [3631]. Loaded more timeline history at once to reduce repeated backfill while scrolling [3630]. Fixed a project picker positioning crash [3629]. Kept permission auto-accept state separate for each server [3628]. Fixed connected project picker positioning when its anchor is still loading [3627]. Fixed spacing between model provider sections in Settings [3626]. fix(core): tolerate AlreadyExists in FSUtil.ensureDir (#36542) [3625]. Hid the drawer close button on Windows where it conflicts with the window chrome [3624]. Stopped subagents from launching nested subagents by default, with a configurable subagent_depth limit when needed [3623]. Home page command palette search can now find and open sessions [3622]. Fixed custom agent selector visibility when custom agents are available [3621]. Fixed startup readiness so WSL server loading is included before the desktop app reports ready [3620]. Improved dangerous-command detection, including more forced rm forms, and provides clearer rejection reasons when commands are denied [3619]. Fixed very large markdown tables stalling rendering or using excessive memory; tables over 200 rows show the first 200 with a "… N more rows" notice [3618]. Fixed truncated stream-json/JSON output and missing result message when piping large responses from claude -p [3617]. Fixed replies typed to a background agent being lost when delivery fails — the text is now saved and delivered when the session restarts [3616]. Fixed fast mode staying off after switching back to a model that supports it — it now restores automatically when enabled in settings [3615]. Added mouse-click support for multi-select menus and "Other" input rows in fullscreen mode [3614]. Added vimInsertModeRemaps setting: map two-key insert-mode sequences like jj to Escape in vim mode [3613]. Added screen reader mode: opt-in plain-text rendering for screen reader users. Run claude --ax-screen-reader, set CLAUDE_AX_SCREEN_READER=1, or add "axScreenReader": true to settings [3612]. Fixed plan approvals without edits being labeled "(edited by user)" and overwriting the plan file with a stale snapshot [3611]. Fixed a hook callback timeout being misreported to the model as a user rejection, which made unattended sessions stop and wait [3610]. Fixed a session crash when a tool's result renderer returned a numeric bigint value or plain text instead of a UI element [3609]. Fixed paste markers leaking into external editors opened from Claude Code, which could appear as stray È/É characters around pasted text [3608]. Fixed a rendered text fragment leaking into crash telemetry when a UI component returned content outside a styled text element [3607]. Fixed the ultracode keyword opt-in firing on non-human-originated input such as webhook payloads and relayed PR comments [3606]. Added a startup warning for Write(path), NotebookEdit(path), and Glob(path) permission rules — use Edit(path) or Read(path) instead [3605]. Added a live elapsed-time counter to the collapsed tool summary line so long-running tool calls visibly tick instead of looking stuck [3604]. Fixed edits that leave the input as "?" being silently swallowed and toggling the shortcuts panel [3603]. Fixed file upload validation: filenames ending in a DOS device suffix (.prn) or trailing dot are now accepted, and files with multiple hard links are refused [3602]. Fixed Claude Code on Vertex and Bedrock attempting the default Opus model at startup and printing a spurious fallback notice when a model is explicitly configured [3601]. Fixed auto mode overriding a PreToolUse hook's ask decision for unsandboxed Bash — a hook ask now floors the decision at a prompt [3600]. Fixed permission previews relayed to chat channels not neutralizing bidirectional-override, zero-width, and look-alike quote characters, so tool inputs cannot visually alter the approval message [3599]. Fixed shell mode (!) not executing commands containing file paths while the path autocomplete popup was open [3598]. Fixed SIGTERM during a running Bash tool orphaning the command's process tree in print/SDK mode; the CLI now aborts the turn, kills the tree, and exits 143 [3597]. Fixed a continue:false hook's halt being dropped when the tool fails or completes mid-stream, and hook infrastructure errors being misreported as user rejections [3596]. Fixed plan mode auto-running file-modifying Bash commands (e.g. touch, rm) without a permission prompt or SDK canUseTool callback [3595]. Added a session-wide limit on WebSearch tool calls (default 200, tunable via CLAUDE_CODE_MAX_WEB_SEARCHES_PER_SESSION) to stop runaway search loops [3594].
The Codex Tag demo has been rewritten and will be included in the upcoming 0.3.0 release, with a lighter core and better performance for long-running tasks [4004]. Google released Gemma 4 with MTP drafters that predict and verify upcoming words, enabling up to 3X faster local inference [4002]. The OpenAI Codex team stated that their code review AI finds bugs that best engineers could only catch after hours of deep thinking [4000]. Anthropic released an official skill called Frontend Design for Claude Code, forcing aesthetic direction before coding and generating production-ready HTML/CSS/JS/React/Vue [3994]. Claude Code artifacts can now call MCP connectors, enabling dashboards and apps that fetch info and take actions per viewer [3992]. Google Gemini CLI received multiple fixes: strip thoughts from scrubbed history turns and resolve thought leakage [3991], preserve escape sequences in string literals for modern models [3990], make ~/.gitconfig read-only in the macOS sandbox [3989], egress cloud run service skeleton [3988], resolve symbolic link directory escape in memory import processor [3987], implement Cloud Run webhook ingestion service [3986], resolve defensive path resolution for at-reference files and fix macOS tests [3985], enforce case-insensitive sensitive path blocklist and vscode hitl [3984], and fix no_proxy test [3983]. Codex removed an obsolete workaround that could interfere with OpenAI Luna Responses Lite requests [3982]. Preserved the composer caret after request updates [3981]. Resynced the timeline correctly after reconnecting [3980]. Loaded more timeline history at once to reduce repeated backfill while scrolling [3979]. Fixed a project picker positioning crash [3978]. Kept permission auto-accept state separate for each server [3977]. Fixed connected project picker positioning when its anchor is still loading [3976]. Fixed spacing between model provider sections in Settings [3975]. fix(core): tolerate AlreadyExists in FSUtil.ensureDir (#36542) [3974]. Hid the drawer close button on Windows where it conflicts with the window chrome [3973]. Stopped subagents from launching nested subagents by default, with a configurable subagent_depth limit when needed [3972]. Home page command palette search can now find and open sessions [3971]. Fixed custom agent selector visibility when custom agents are available [3970]. Fixed startup readiness so WSL server loading is included before the desktop app reports ready [3969]. Improved dangerous-command detection, including more forced rm forms, and provides clearer rejection reasons when commands are denied [3968]. Fixed very large markdown tables stalling rendering or using excessive memory; tables over 200 rows show the first 200 with a "… N more rows" notice [3967]. Fixed truncated stream-json/JSON output and missing result message when piping large responses from claude -p [3966]. Fixed replies typed to a background agent being lost when delivery fails — the text is now saved and delivered when the session restarts [3965]. Fixed fast mode staying off after switching back to a model that supports it — it now restores automatically when enabled in settings [3964]. Added mouse-click support for multi-select menus and "Other" input rows in fullscreen mode [3963]. Added vimInsertModeRemaps setting: map two-key insert-mode sequences like jj to Escape in vim mode [3962]. Added screen reader mode: opt-in plain-text rendering for screen reader users. Run claude --ax-screen-reader, set CLAUDE_AX_SCREEN_READER=1, or add "axScreenReader": true to settings [3961]. Fixed plan approvals without edits being labeled "(edited by user)" and overwriting the plan file with a stale snapshot [3960]. Fixed a hook callback timeout being misreported to the model as a user rejection, which made unattended sessions stop and wait [3959]. Fixed a session crash when a tool's result renderer returned a numeric bigint value or plain text instead of a UI element [3958]. Fixed paste markers leaking into external editors opened from Claude Code, which could appear as stray È/É characters around pasted text [3957]. Fixed a rendered text fragment leaking into crash telemetry when a UI component returned content outside a styled text element [3956]. Fixed the ultracode keyword opt-in firing on non-human-originated input such as webhook payloads and relayed PR comments [3955]. Added a startup warning for Write(path), NotebookEdit(path), and Glob(path) permission rules — use Edit(path) or Read(path) instead [3954]. Added a live elapsed-time counter to the collapsed tool summary line so long-running tool calls visibly tick instead of looking stuck [3953]. Fixed edits that leave the input as "?" being silently swallowed and toggling the shortcuts panel [3952]. Fixed file upload validation: filenames ending in a DOS device suffix (.prn) or trailing dot are now accepted, and files with multiple hard links are refused [3951]. Fixed Claude Code on Vertex and Bedrock attempting the default Opus model at startup and printing a spurious fallback notice when a model is explicitly configured [3950]. Fixed auto mode overriding a PreToolUse hook's ask decision for unsandboxed Bash — a hook ask now floors the decision at a prompt [3949]. Fixed permission previews relayed to chat channels not neutralizing bidirectional-override, zero-width, and look-alike quote characters, so tool inputs cannot visually alter the approval message [3948]. Fixed shell mode (!) not executing commands containing file paths while the path autocomplete popup was open [3947]. Fixed SIGTERM during a running Bash tool orphaning the command's process tree in print/SDK mode; the CLI now aborts the turn, kills the tree, and exits 143 [3946]. Fixed a continue:false hook's halt being dropped when the tool fails or completes mid-stream, and hook infrastructure errors being misreported as user rejections [3945]. Fixed plan mode auto-running file-modifying Bash commands (e.g. touch, rm) without a permission prompt or SDK canUseTool callback [3944]. Added a session-wide limit on WebSearch tool calls (default 200, tunable via CLAUDE_CODE_MAX_WEB_SEARCHES_PER_SESSION) to stop runaway search loops [3943].
Added new claims: Codex Tag demo rewritten for 0.3.0 release, Google Gemma 4 with MTP drafters, OpenAI Codex code review AI claim, Anthropic Frontend Design skill, Claude Code artifacts MCP connectors, and additional Gemini CLI fixes. Updated previous claims with new IDs and added more Claude Code fixes (e.g., SIGTERM handling, hook fixes, WebSearch limit).