<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: aicoding-guide</title>
    <description>The latest articles on DEV Community by aicoding-guide (@aicoding-guide).</description>
    <link>https://dev.to/aicoding-guide</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4119600%2F36237543-8d98-41c3-b6a3-c8202a09085f.png</url>
      <title>DEV Community: aicoding-guide</title>
      <link>https://dev.to/aicoding-guide</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/aicoding-guide"/>
    <language>en</language>
    <item>
      <title>Codex CLI v0.166 adds codex queue --resume and codex doctor --network-only</title>
      <dc:creator>aicoding-guide</dc:creator>
      <pubDate>Sun, 01 Nov 2026 19:15:17 +0000</pubDate>
      <link>https://dev.to/aicoding-guide/codex-cli-v0166-adds-codex-queue-resume-and-codex-doctor-network-only-5ae0</link>
      <guid>https://dev.to/aicoding-guide/codex-cli-v0166-adds-codex-queue-resume-and-codex-doctor-network-only-5ae0</guid>
      <description>&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://aicoding-guide.com/en/posts/codex-update-0-166/" rel="noopener noreferrer"&gt;https://aicoding-guide.com&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Codex CLI v0.166.0 ships six features and seven fixes. Two matter day to day: &lt;strong&gt;&lt;code&gt;codex queue --resume&lt;/code&gt;&lt;/strong&gt; and &lt;strong&gt;&lt;code&gt;codex doctor --network-only&lt;/code&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Both are flags on existing commands, so knowing what each command already does is the quickest way to see what changed.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Key point&lt;/strong&gt;&lt;br&gt;
What this article covers&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How &lt;code&gt;codex queue&lt;/code&gt; works and the situation &lt;code&gt;--resume&lt;/code&gt; fixes&lt;/li&gt;
&lt;li&gt;What &lt;code&gt;codex doctor&lt;/code&gt; checks, and what &lt;code&gt;--network-only&lt;/code&gt; narrows it to&lt;/li&gt;
&lt;li&gt;Approval settings and token accounting now surviving resume and fork&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  codex queue --resume resumes the thread
&lt;/h2&gt;

&lt;p&gt;The release notes read: "Added &lt;code&gt;codex queue --resume&lt;/code&gt; to resume unloaded threads after queueing a message."&lt;/p&gt;

&lt;p&gt;&lt;code&gt;codex queue&lt;/code&gt; itself is documented: it queues a text message for an existing session.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;codex queue &lt;span class="nt"&gt;--thread&lt;/span&gt; &amp;lt;SESSION_ID&amp;gt; &lt;span class="nt"&gt;--message&lt;/span&gt; &lt;span class="s2"&gt;"Run the remaining checks"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Option&lt;/th&gt;
&lt;th&gt;Detail&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;--thread&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;A UUID or an exact session name; use a UUID when sessions share a name&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;--message&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;The text to queue&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Others&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;--remote&lt;/code&gt; and &lt;code&gt;--remote-auth-token-env&lt;/code&gt; are accepted; image attachments are not&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Previously, queueing a message to a thread that was not loaded left it waiting. With &lt;code&gt;--resume&lt;/code&gt;, queueing and resuming happen in one step — useful when a script or CI job adds work to an existing session.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;--resume is not in the commands documentation&lt;/strong&gt;&lt;br&gt;
As of 2026-11-02, the flags documented for &lt;code&gt;codex queue&lt;/code&gt; are &lt;code&gt;--thread&lt;/code&gt;, &lt;code&gt;--message&lt;/code&gt;, &lt;code&gt;--remote&lt;/code&gt; and &lt;code&gt;--remote-auth-token-env&lt;/code&gt;. There is no entry for &lt;code&gt;--resume&lt;/code&gt;; it appears only in the release notes.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  codex doctor --network-only narrows the report
&lt;/h2&gt;

&lt;p&gt;The other addition: "Added &lt;code&gt;codex doctor --network-only&lt;/code&gt; for focused configuration, connectivity, and WebSocket diagnostics."&lt;/p&gt;

&lt;p&gt;&lt;code&gt;codex doctor&lt;/code&gt; is the diagnostic command to run before filing a support issue or while investigating a broken installation. The documentation describes its scope as "installation, configuration, authentication, runtime, Git, terminal, app-server, and thread inventory health".&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# The full report&lt;/span&gt;
codex doctor

&lt;span class="c"&gt;# Narrowed to configuration, connectivity and WebSocket&lt;/span&gt;
codex doctor &lt;span class="nt"&gt;--network-only&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The full report includes the thread inventory, so it takes a while. When the symptom is clearly network-side — connections failing behind a proxy, WebSockets dropping — &lt;code&gt;--network-only&lt;/code&gt; is the faster path.&lt;/p&gt;

&lt;p&gt;This flag could not be confirmed in the documentation either: &lt;code&gt;codex doctor&lt;/code&gt;'s option table is rendered dynamically on that page, so individual flags are not readable from the Markdown.&lt;/p&gt;

&lt;p&gt;For the network proxy settings themselves, see &lt;a href="https://aicoding-guide.com/en/posts/codex-approval-sandbox/" rel="noopener noreferrer"&gt;Combining approval_policy and sandbox_mode in Codex&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Transcript handling and the other features
&lt;/h2&gt;

&lt;p&gt;The remaining four are display and interaction changes.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Addition&lt;/th&gt;
&lt;th&gt;What it does&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Transcript selection&lt;/td&gt;
&lt;td&gt;Keyboard-driven, with word, line and page motions, integrated search, and configurable shortcuts&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Markdown rendering&lt;/td&gt;
&lt;td&gt;Made consistent in async questions, choices, answers and transcript replies&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPT-6.1 Terra&lt;/td&gt;
&lt;td&gt;Added to the bundled, Vertex AI and Amazon Bedrock model catalogs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Safety-block explanations&lt;/td&gt;
&lt;td&gt;Clearer reasons in the TUI, with selectable safer follow-up prompts&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;GPT-6.1 Terra reached the bundled catalog in v0.165.0; v0.166.0 adds it to the Vertex AI and Amazon Bedrock catalogs. That follows v0.165.0 making Vertex AI a built-in provider via &lt;code&gt;model_provider = "gcp"&lt;/code&gt; — see &lt;a href="https://aicoding-guide.com/en/posts/codex-update-0-165/" rel="noopener noreferrer"&gt;Codex CLI v0.165 makes Vertex AI a built-in provider&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Fixes around resume and fork
&lt;/h2&gt;

&lt;p&gt;Two of the seven fixes concern resuming and forking sessions.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Approval and permission settings persist&lt;/strong&gt;: "Preserved acknowledged approval and permission settings when resuming or forking threads."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reasoning-token accounting persists&lt;/strong&gt;: "Preserved reasoning-token accounting across resume and fork to avoid premature compaction."&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The second has the clearer practical effect. When the accounting reset, a resumed session could be judged to have met the compaction threshold while it actually had room left, so context was lost earlier than it needed to be.&lt;/p&gt;

&lt;p&gt;Also fixed: spawned descendant threads are restored when their parent is unarchived, app-server thread startup and shutdown races are resolved with completed runtimes released promptly, and TUI reconnection recovery now handles offline &lt;code&gt;/quit&lt;/code&gt; and &lt;code&gt;/exit&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;codex queue --resume&lt;/code&gt; queues a message and resumes an unloaded thread in one step&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;codex queue&lt;/code&gt; takes a UUID or exact session name in &lt;code&gt;--thread&lt;/code&gt; and does not support image attachments&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;codex doctor --network-only&lt;/code&gt; narrows diagnostics to configuration, connectivity and WebSocket&lt;/li&gt;
&lt;li&gt;Approval settings and reasoning-token accounting now survive resume and fork&lt;/li&gt;
&lt;li&gt;Neither &lt;code&gt;--resume&lt;/code&gt; nor &lt;code&gt;--network-only&lt;/code&gt; could be confirmed in the official commands documentation&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>codex</category>
      <category>codexcli</category>
      <category>updates</category>
      <category>codexdoctor</category>
    </item>
    <item>
      <title>This week in Claude Code, Codex and Gemini CLI (week of November 1, 2026)</title>
      <dc:creator>aicoding-guide</dc:creator>
      <pubDate>Sat, 31 Oct 2026 19:08:39 +0000</pubDate>
      <link>https://dev.to/aicoding-guide/this-week-in-claude-code-codex-and-gemini-cli-week-of-november-1-2026-15pn</link>
      <guid>https://dev.to/aicoding-guide/this-week-in-claude-code-codex-and-gemini-cli-week-of-november-1-2026-15pn</guid>
      <description>&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://aicoding-guide.com/en/posts/weekly-2026-11-01/" rel="noopener noreferrer"&gt;https://aicoding-guide.com&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This week has a &lt;strong&gt;deadline in it&lt;/strong&gt;. Fast mode for Opus 4.8 is deprecated as of 2026-10-30 and &lt;strong&gt;removed on 2026-11-30&lt;/strong&gt;. The CHANGELOG is specific that after removal, fast mode requests on Opus 4.8 return an error and do not fall back to standard Opus 4.8.&lt;/p&gt;

&lt;p&gt;On the feature side, idle compaction spread to VS Code and the desktop app — two weeks after it arrived, terminal-only.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Key point&lt;/strong&gt;&lt;br&gt;
This week in brief&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fast mode on Opus 4.8 is removed on November 30; move to Opus 5.5 to keep the speedup&lt;/li&gt;
&lt;li&gt;Idle compaction was added to VS Code and the desktop app's Code tab&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;permissions.blockWritesOutsideWorkingDirectories&lt;/code&gt; was added&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Claude Code
&lt;/h2&gt;

&lt;p&gt;Four releases: 2.1.311, 2.1.312, 2.1.314 and 2.1.316.&lt;/p&gt;

&lt;h3&gt;
  
  
  A deprecation with a date (2.1.316)
&lt;/h3&gt;

&lt;p&gt;The CHANGELOG reads: "Deprecated fast mode for Opus 4.8 as of October 30, 2026; it will be removed on November 30, 2026. After removal, fast mode requests on Opus 4.8 return an error and do not fall back to standard Opus 4.8. Migrate to Opus 5.5 to keep the speedup."&lt;/p&gt;

&lt;p&gt;If a script or settings file assumes fast mode, move it to Opus 5.5 during November. After removal it does not quietly get slower — it errors.&lt;/p&gt;

&lt;h3&gt;
  
  
  Confining writes to the working directories (2.1.314)
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Setting&lt;/th&gt;
&lt;th&gt;What it does&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;permissions.blockWritesOutsideWorkingDirectories&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Write, Edit and NotebookEdit refuse paths outside the working directories in every permission mode&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;It pairs with &lt;code&gt;permissions.blockReadsOutsideWorkingDirectories&lt;/code&gt; on the read side. With both set, the reach of the file tools no longer depends on the permission mode.&lt;/p&gt;

&lt;h3&gt;
  
  
  Idle compaction spread (2.1.314)
&lt;/h3&gt;

&lt;p&gt;"Added idle compaction to VS Code and Claude Desktop's Code tab: a 200K+ token conversation left idle is summarized, and the summary is used on your next message if the prompt cache has expired."&lt;/p&gt;

&lt;p&gt;What landed in the terminal in 2.1.299 reached VS Code and the desktop Code tab two weeks later. For the conditions and how to turn it off, see &lt;a href="https://aicoding-guide.com/en/posts/claude-code-autocompact-window/" rel="noopener noreferrer"&gt;Making Claude Code compact earlier, or never&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  New environment variables (2.1.316)
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Variable&lt;/th&gt;
&lt;th&gt;What it does&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;CLAUDE_CODE_DISABLE_ULTRATHINK&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Turns the &lt;code&gt;ultrathink&lt;/code&gt; keyword off&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;CLAUDE_CODE_SUBAGENT_EFFORT&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Sets the effort subagents run at when nothing else names one, instead of inheriting the session's&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Telemetry and permissions (2.1.312, 2.1.316)
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;claude_code.safety_event stopped being sent after a week&lt;/strong&gt;&lt;br&gt;
The &lt;code&gt;claude_code.safety_event&lt;/code&gt; OpenTelemetry event added in v2.1.307 was withdrawn in v2.1.312: "Changed Claude Code to stop sending the &lt;code&gt;claude_code.safety_event&lt;/code&gt; OpenTelemetry event." We covered it in last week's digest; it lasted a week. A dashboard built on that event needs rebuilding.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;On security, &lt;code&gt;--restricted&lt;/code&gt; sessions could upload files from outside the working directories when a Read allow rule covered them; that is fixed. Separately, for Team and Enterprise logins, server-managed settings fetched from Anthropic's API now apply without an approval prompt, and a stored copy that doesn't verify is refused.&lt;/p&gt;

&lt;h3&gt;
  
  
  Easy ones to miss
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Sessions failing turn after turn with "Invalid effort level" where an admin caps a model's effort are fixed: Claude Code lowers the effort, retries, and says which level it uses (2.1.314)&lt;/li&gt;
&lt;li&gt;A &lt;code&gt;PreCompact&lt;/code&gt; hook with very large output could make compaction fail or repeat; &lt;strong&gt;each hook's output is now cut at 10,000 characters&lt;/strong&gt; (2.1.314)&lt;/li&gt;
&lt;li&gt;Claude could overwrite a very large &lt;code&gt;CLAUDE.md&lt;/code&gt;, rules file or @-included file after seeing only its start; Write now asks Claude to read it all or edit in place (2.1.312)&lt;/li&gt;
&lt;li&gt;Standard-context sessions that stopped with "Usage credits required for 1M context" past 200K tokens now compact and continue (2.1.311)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;SubagentStop&lt;/code&gt; hooks were firing about twice a minute per running subagent instead of once at the end (2.1.311)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Codex
&lt;/h2&gt;

&lt;p&gt;v0.165.0 brought the Vertex AI provider and memories by default; see &lt;a href="https://aicoding-guide.com/en/posts/codex-update-0-165/" rel="noopener noreferrer"&gt;Codex CLI v0.165&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;v0.166.0 adds six features.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Addition&lt;/th&gt;
&lt;th&gt;What it does&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;codex queue --resume&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Resumes unloaded threads after queueing a message&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;codex doctor --network-only&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Runs focused configuration, connectivity and WebSocket diagnostics&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Transcript selection&lt;/td&gt;
&lt;td&gt;Keyboard-driven, with word, line and page motions, search and configurable shortcuts&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPT-6.1 Terra&lt;/td&gt;
&lt;td&gt;Added to the bundled, Vertex AI and Amazon Bedrock model catalogs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Safety-block explanations&lt;/td&gt;
&lt;td&gt;Clearer reasons in the TUI, with selectable safer follow-up prompts&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Two fixes stand out, both about resuming: acknowledged approval and permission settings are now preserved when resuming or forking threads, and reasoning-token accounting is preserved across resume and fork to avoid premature compaction.&lt;/p&gt;

&lt;h2&gt;
  
  
  Gemini CLI
&lt;/h2&gt;

&lt;p&gt;v0.66.0 is 26 entries of fixes and chores with no features. The configuration-related ones:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Settings placeholders are now resolved after &lt;code&gt;.env&lt;/code&gt; files are loaded&lt;/li&gt;
&lt;li&gt;The user-level &lt;code&gt;~/.gitconfig&lt;/code&gt; is preserved in shell and git environments&lt;/li&gt;
&lt;li&gt;Interactive credential and SSH prompts are disabled in &lt;code&gt;getSafeGitEnv&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;MCP OAuth flows support opt-in private network endpoints&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;keybindings.json&lt;/code&gt; supports a &lt;code&gt;keys&lt;/code&gt; array&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A banner was also added saying Gemini CLI is not optimized for Gemini 4. For the previous release, see &lt;a href="https://aicoding-guide.com/en/posts/gemini-cli-update-0-65/" rel="noopener noreferrer"&gt;Gemini CLI v0.65 enforces read-only settings in untrusted folders&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to check now
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;If you use fast mode on Opus 4.8, move to Opus 5.5 before November 30&lt;/li&gt;
&lt;li&gt;Rebuild any telemetry that relied on &lt;code&gt;claude_code.safety_event&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Note that idle compaction now runs in VS Code and the desktop app too&lt;/li&gt;
&lt;li&gt;Set &lt;code&gt;permissions.blockWritesOutsideWorkingDirectories&lt;/code&gt; if you want writes confined&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Fast mode on Opus 4.8 is removed on 2026-11-30 and will error, with no fallback&lt;/li&gt;
&lt;li&gt;Idle compaction was added to VS Code and the desktop app's Code tab&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;permissions.blockWritesOutsideWorkingDirectories&lt;/code&gt; confines writes in every permission mode&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;claude_code.safety_event&lt;/code&gt; stopped being sent a week after it was added&lt;/li&gt;
&lt;li&gt;Codex 0.166.0 adds &lt;code&gt;codex queue --resume&lt;/code&gt; and &lt;code&gt;codex doctor --network-only&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>weeklydigest</category>
      <category>updates</category>
      <category>claudecode</category>
      <category>codex</category>
    </item>
    <item>
      <title>Codex CLI v0.165 makes Vertex AI a built-in provider and turns memories on by default</title>
      <dc:creator>aicoding-guide</dc:creator>
      <pubDate>Thu, 29 Oct 2026 19:19:07 +0000</pubDate>
      <link>https://dev.to/aicoding-guide/codex-cli-v0165-makes-vertex-ai-a-built-in-provider-and-turns-memories-on-by-default-403k</link>
      <guid>https://dev.to/aicoding-guide/codex-cli-v0165-makes-vertex-ai-a-built-in-provider-and-turns-memories-on-by-default-403k</guid>
      <description>&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://aicoding-guide.com/en/posts/codex-update-0-165/" rel="noopener noreferrer"&gt;https://aicoding-guide.com&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Codex CLI v0.165.0 brings six features and six fixes. Two of them touch configuration: a &lt;strong&gt;built-in Vertex AI provider&lt;/strong&gt; and &lt;strong&gt;memories on by default&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;For both, the release notes are ahead of the official configuration reference. Check the behaviour on your own machine before relying on either.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Key point&lt;/strong&gt;&lt;br&gt;
What this article covers&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The Vertex AI provider configured with &lt;code&gt;model_provider = "gcp"&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Why the release notes and the configuration reference disagree about memories&lt;/li&gt;
&lt;li&gt;Changing reasoning effort partway through a conversation&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Vertex AI is now a built-in provider
&lt;/h2&gt;

&lt;p&gt;The release notes read: "Added a built-in Google Cloud Vertex AI provider, configured with &lt;code&gt;model_provider = "gcp"&lt;/code&gt;." Using Vertex AI previously meant writing your own &lt;code&gt;model_providers&lt;/code&gt; entry; now it is treated as built in.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;gcp is not in the configuration reference yet&lt;/strong&gt;&lt;br&gt;
As of 2026-10-30, the reference lists only three built-in provider IDs: "Built-in provider IDs (&lt;code&gt;openai&lt;/code&gt;, &lt;code&gt;ollama&lt;/code&gt;, and &lt;code&gt;lmstudio&lt;/code&gt;) are reserved and cannot be overridden." There is no mention of &lt;code&gt;gcp&lt;/code&gt; or Vertex AI. The ID appears only in the release notes.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Where you write the setting matters. The configuration reference states that &lt;code&gt;model_provider&lt;/code&gt; and &lt;code&gt;model_providers&lt;/code&gt; are &lt;strong&gt;ignored in a project-local &lt;code&gt;.codex/config.toml&lt;/code&gt;&lt;/strong&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight toml"&gt;&lt;code&gt;&lt;span class="c"&gt;# Put this in ~/.codex/config.toml; a project-local copy is ignored&lt;/span&gt;
&lt;span class="n"&gt;model_provider&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;"gcp"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The ignored keys include &lt;code&gt;openai_base_url&lt;/code&gt;, &lt;code&gt;chatgpt_base_url&lt;/code&gt;, &lt;code&gt;model_provider&lt;/code&gt;, &lt;code&gt;model_providers&lt;/code&gt;, &lt;code&gt;notify&lt;/code&gt;, &lt;code&gt;profile&lt;/code&gt;, &lt;code&gt;profiles&lt;/code&gt; and &lt;code&gt;otel&lt;/code&gt;. Provider, notification and telemetry keys belong in user-level config. For defining a custom provider, the fields are &lt;code&gt;model_providers.&amp;lt;id&amp;gt;.name&lt;/code&gt;, &lt;code&gt;.base_url&lt;/code&gt;, &lt;code&gt;.env_key&lt;/code&gt; and others, covered in &lt;a href="https://aicoding-guide.com/en/posts/codex-config-toml/" rel="noopener noreferrer"&gt;Configuring Codex with config.toml&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;GPT-6.1 Terra was also added to the model catalogs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Memories are on by default for fresh profiles
&lt;/h2&gt;

&lt;p&gt;The release notes read: "Enabled memory v2 by default for fresh profiles and added support for importing external-agent memories into it."&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;The two sources disagree on the default&lt;/strong&gt;&lt;br&gt;
The configuration reference still describes &lt;code&gt;features.memories&lt;/code&gt; as "Enable Memories (off by default)" (checked 2026-10-30). The term "memory v2" does not appear in the memories documentation at all. Since the documents do not settle which applies, check the actual state with &lt;code&gt;/memories&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The mechanism itself is documented.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Aspect&lt;/th&gt;
&lt;th&gt;Detail&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Storage&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;~/.codex/memories/&lt;/code&gt;, holding summaries, durable entries, recent inputs and evidence&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;When they are written&lt;/td&gt;
&lt;td&gt;In the background once a chat has been idle long enough, not at the end of every chat&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;What is skipped&lt;/td&gt;
&lt;td&gt;Active and short-lived sessions; secrets are redacted from generated memory fields&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Throttling&lt;/td&gt;
&lt;td&gt;A background pass is skipped when your rate-limit remaining percentage is below the configured threshold&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Per-chat control&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;/memories&lt;/code&gt; chooses whether the chat can use existing memories and whether it feeds future ones&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The documentation is also explicit about the limits of relying on them: "Keep required team guidance in &lt;code&gt;AGENTS.md&lt;/code&gt; or checked-in documentation. Treat memories as a helpful recall layer, not as the only source for rules that must always apply."&lt;/p&gt;

&lt;p&gt;On the files themselves, it says "Treat these files as generated state" — fine to inspect when troubleshooting or before sharing your Codex home directory, but not a control surface to edit by hand.&lt;/p&gt;

&lt;h2&gt;
  
  
  Reasoning effort can change mid-conversation
&lt;/h2&gt;

&lt;p&gt;Another entry reads: "Enabled reasoning effort changes during a conversation by default for supported models." On models that support it, you can change the depth after a conversation has started.&lt;/p&gt;

&lt;p&gt;Switching through &lt;code&gt;/model&lt;/code&gt; already existed; what changed is that mid-conversation changes are enabled by default. For the values and the ways to set them, see &lt;a href="https://aicoding-guide.com/en/posts/codex-reasoning-effort/" rel="noopener noreferrer"&gt;How to change reasoning effort in Codex CLI&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The session picker also gained a repository filter, and the agent command center now groups by directory, which makes sessions easier to find across linked worktrees.&lt;/p&gt;

&lt;h2&gt;
  
  
  Security and the other fixes
&lt;/h2&gt;

&lt;p&gt;There are six fixes. The security one reads: "Closed a marketplace URL validation gap that could allow Git to connect to a different host than the one checked against allowed patterns."&lt;/p&gt;

&lt;p&gt;The remaining fixes that change behaviour:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fresh TUI sessions now honour the server's default approval reviewer when no explicit override is given&lt;/li&gt;
&lt;li&gt;TUI preferences stay editable and immediately applicable when execution settings are invalid&lt;/li&gt;
&lt;li&gt;Queued agent messages no longer restart work after an interrupt or a switch to Plan mode&lt;/li&gt;
&lt;li&gt;When a provider reports that a model was not found, Codex stops retrying and preserves the error message&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For the previous release, see &lt;a href="https://aicoding-guide.com/en/posts/codex-update-0-164/" rel="noopener noreferrer"&gt;Codex CLI v0.164 adds /presets and inline /permissions arguments&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;A built-in Vertex AI provider is configured with &lt;code&gt;model_provider = "gcp"&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;gcp&lt;/code&gt; could not be confirmed in the configuration reference, which still lists only &lt;code&gt;openai&lt;/code&gt;, &lt;code&gt;ollama&lt;/code&gt; and &lt;code&gt;lmstudio&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;model_provider&lt;/code&gt; is ignored in a project-local &lt;code&gt;.codex/config.toml&lt;/code&gt;; put it in user-level config&lt;/li&gt;
&lt;li&gt;Memories are said to be on by default for fresh profiles, while the reference still says off by default&lt;/li&gt;
&lt;li&gt;A marketplace URL validation gap that could redirect Git to another host was closed&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>codex</category>
      <category>codexcli</category>
      <category>updates</category>
      <category>vertexai</category>
    </item>
    <item>
      <title>Claude Code vs Cursor compared on pricing, permission settings and rule files</title>
      <dc:creator>aicoding-guide</dc:creator>
      <pubDate>Tue, 27 Oct 2026 19:19:33 +0000</pubDate>
      <link>https://dev.to/aicoding-guide/claude-code-vs-cursor-compared-on-pricing-permission-settings-and-rule-files-50eo</link>
      <guid>https://dev.to/aicoding-guide/claude-code-vs-cursor-compared-on-pricing-permission-settings-and-rule-files-50eo</guid>
      <description>&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://aicoding-guide.com/en/posts/claude-code-vs-cursor/" rel="noopener noreferrer"&gt;https://aicoding-guide.com&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Claude Code and Cursor are both coding agents. Cursor is known as an editor, but it now ships a CLI too, so using it from a terminal looks much like using Claude Code.&lt;/p&gt;

&lt;p&gt;What changed in 2026 is &lt;strong&gt;what your subscription includes&lt;/strong&gt;. Cursor is sold as part of the X Subscription, and what comes with it is Grok and Composer. Using Claude's models costs extra. That is the single biggest factor in choosing between them.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Key point&lt;/strong&gt;&lt;br&gt;
What this article covers&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The models each subscription actually includes&lt;/li&gt;
&lt;li&gt;Similar permission syntax, but different places you can put settings&lt;/li&gt;
&lt;li&gt;How the project rule files differ&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  At a glance
&lt;/h2&gt;

&lt;p&gt;Verified against the official documentation as of 2026-10-28.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Claude Code&lt;/th&gt;
&lt;th&gt;Cursor&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Surfaces&lt;/td&gt;
&lt;td&gt;CLI, VS Code extension, desktop app&lt;/td&gt;
&lt;td&gt;Editor, CLI, cloud agents&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Models included&lt;/td&gt;
&lt;td&gt;Claude models&lt;/td&gt;
&lt;td&gt;Cursor models (Grok 4.7 / 4.6 / 4.5, Composer 2.5)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Third-party models&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;td&gt;Not included; Premium and above pay API list price from prepaid credit&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Usage unit&lt;/td&gt;
&lt;td&gt;Rolling five-hour session window&lt;/td&gt;
&lt;td&gt;A pool that refreshes weekly&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Permission syntax&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;Bash(...)&lt;/code&gt;, &lt;code&gt;Read(...)&lt;/code&gt;, &lt;code&gt;Edit(...)&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;Shell(...)&lt;/code&gt;, &lt;code&gt;Read(...)&lt;/code&gt;, &lt;code&gt;Write(...)&lt;/code&gt;, &lt;code&gt;WebFetch(...)&lt;/code&gt;, &lt;code&gt;Mcp(...)&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Config file&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;settings.json&lt;/code&gt;, five scopes&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;cli-config.json&lt;/code&gt; (global) and &lt;code&gt;cli.json&lt;/code&gt; (project)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Rule file&lt;/td&gt;
&lt;td&gt;&lt;code&gt;CLAUDE.md&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Four kinds, including &lt;code&gt;.mdc&lt;/code&gt; files in &lt;code&gt;.cursor/rules&lt;/code&gt; and &lt;code&gt;AGENTS.md&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  The subscriptions include different models
&lt;/h2&gt;

&lt;p&gt;The documentation opens with it: "Cursor is sold as part of The X Subscription, one subscription for Grok, Cursor, and X." Paid plans come with a weekly pool of usage for Cursor's models, and &lt;strong&gt;third-party models are not included&lt;/strong&gt;.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Cursor plan&lt;/th&gt;
&lt;th&gt;Monthly&lt;/th&gt;
&lt;th&gt;Annual&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Free&lt;/td&gt;
&lt;td&gt;$0&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Plus&lt;/td&gt;
&lt;td&gt;$8&lt;/td&gt;
&lt;td&gt;$80&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Premium&lt;/td&gt;
&lt;td&gt;$30&lt;/td&gt;
&lt;td&gt;$300&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Super&lt;/td&gt;
&lt;td&gt;$100&lt;/td&gt;
&lt;td&gt;$1,000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ultra&lt;/td&gt;
&lt;td&gt;$200&lt;/td&gt;
&lt;td&gt;$2,000&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Teams is $30, $100 or $200 per seat, and Enterprise is custom. Prices exclude tax.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Plus is the tier to read carefully.&lt;/strong&gt; The documentation says it runs Cursor's own models at fixed settings: Fast off, effort medium, and Grok 4.7 on the 256k context window. No Auto, Cloud Agents, Automations, Bugbot, Origin, third-party models, or your own API keys.&lt;/p&gt;

&lt;p&gt;On the Claude side, Free is $0, Pro is $20 billed monthly or $17/mo billed annually ($200 up front), and Max starts at $100 for 5x or 20x Pro's usage. &lt;strong&gt;Claude Code is included in Pro and Max, and is not available on Free.&lt;/strong&gt; Limits "reset on a rolling five-hour session window".&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;The same money buys different things&lt;/strong&gt;&lt;br&gt;
At $8 against $20, Cursor Plus looks like the cheaper option. But Plus runs Grok and Composer, not Claude. Running Claude's models through Cursor needs Premium or above &lt;em&gt;plus&lt;/em&gt; prepaid credit, which reverses the comparison. The reliable question is not which is cheaper but which subscription contains the model you want to use.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The documentation also calls Pro, Pro+, Ultra, Start, and Teams Standard and Premium "legacy Cursor plans". Note that Ultra appears in both the current and the legacy lists, so the names overlap.&lt;/p&gt;

&lt;h2&gt;
  
  
  The permission syntax is similar
&lt;/h2&gt;

&lt;p&gt;Cursor CLI's permission tokens look a lot like Claude Code's. You list them under &lt;code&gt;permissions.allow&lt;/code&gt; and &lt;code&gt;permissions.deny&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"permissions"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"allow"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="s2"&gt;"Shell(git)"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="s2"&gt;"Read(src/**/*.ts)"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="s2"&gt;"Write(package.json)"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="s2"&gt;"WebFetch(docs.github.com)"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="s2"&gt;"Mcp(datadog:*)"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"deny"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="s2"&gt;"Shell(rm)"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="s2"&gt;"Read(.env*)"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="s2"&gt;"Write(**/*.key)"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Shell is &lt;code&gt;Shell&lt;/code&gt; rather than &lt;code&gt;Bash&lt;/code&gt;, and edits are &lt;code&gt;Write&lt;/code&gt; rather than &lt;code&gt;Edit&lt;/code&gt;. For MCP, Claude Code writes &lt;code&gt;mcp__&amp;lt;server&amp;gt;__&amp;lt;tool&amp;gt;&lt;/code&gt; while Cursor writes &lt;code&gt;Mcp(server:tool)&lt;/code&gt;. Keeping &lt;code&gt;.env&lt;/code&gt; out of reach works the same way in both. For the Claude Code syntax, see &lt;a href="https://aicoding-guide.com/en/posts/claude-code-settings-json-permissions/" rel="noopener noreferrer"&gt;Claude Code permissions in settings.json&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The real difference is &lt;strong&gt;where settings can live&lt;/strong&gt;. Cursor CLI reads &lt;code&gt;~/.cursor/cli-config.json&lt;/code&gt; globally and &lt;code&gt;&amp;lt;project&amp;gt;/.cursor/cli.json&lt;/code&gt; per project, but the documentation states: "Only permissions can be configured at the project level. All other CLI settings must be set globally."&lt;/p&gt;

&lt;p&gt;So in Cursor, permissions are the only thing a project can vary. That is a different design from Claude Code, where five scopes from managed settings down to user settings can override nearly any key.&lt;/p&gt;

&lt;h2&gt;
  
  
  Rule file conventions
&lt;/h2&gt;

&lt;p&gt;Cursor has four kinds of rules.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Kind&lt;/th&gt;
&lt;th&gt;Where it lives&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Project Rules&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;.mdc&lt;/code&gt; files in &lt;code&gt;.cursor/rules&lt;/code&gt;, version-controlled&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;User Rules&lt;/td&gt;
&lt;td&gt;Global to your Cursor environment&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Team Rules&lt;/td&gt;
&lt;td&gt;Managed from the dashboard, on Team and Enterprise plans&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AGENTS.md&lt;/td&gt;
&lt;td&gt;Markdown instructions, a simpler alternative to &lt;code&gt;.cursor/rules&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The extension is the trap in Project Rules. The documentation says "A plain &lt;code&gt;.md&lt;/code&gt; file in &lt;code&gt;.cursor/rules&lt;/code&gt; is ignored by the rules system because it has no frontmatter to specify &lt;code&gt;description&lt;/code&gt;, &lt;code&gt;globs&lt;/code&gt;, and &lt;code&gt;alwaysApply&lt;/code&gt;." Use &lt;code&gt;.mdc&lt;/code&gt;, or use &lt;code&gt;AGENTS.md&lt;/code&gt; instead.&lt;/p&gt;

&lt;p&gt;Claude Code uses &lt;code&gt;CLAUDE.md&lt;/code&gt;. Because Cursor reads &lt;code&gt;AGENTS.md&lt;/code&gt;, the tidiest arrangement for using both is to keep the shared content in &lt;code&gt;AGENTS.md&lt;/code&gt; and reference it from &lt;code&gt;CLAUDE.md&lt;/code&gt;. Codex reads &lt;code&gt;AGENTS.md&lt;/code&gt; too, which makes this pay off across all three.&lt;/p&gt;

&lt;h2&gt;
  
  
  Choosing between them
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Situation&lt;/th&gt;
&lt;th&gt;The better fit&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;You mainly want Claude's models&lt;/td&gt;
&lt;td&gt;Claude Code&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;You want completions while writing in the editor&lt;/td&gt;
&lt;td&gt;Cursor&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;You want settings to vary per project&lt;/td&gt;
&lt;td&gt;Claude Code, where more than permissions is per-project&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;You are happy on Grok and Composer and want a cheap start&lt;/td&gt;
&lt;td&gt;Cursor Plus&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;You are wiring it into CI&lt;/td&gt;
&lt;td&gt;Either; both have a CLI, so follow your existing subscription&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Model quality is left out deliberately, since it changes with each release. For the same comparison against other tools, see &lt;a href="https://aicoding-guide.com/en/posts/codex-vs-claude-code/" rel="noopener noreferrer"&gt;Codex vs Claude Code&lt;/a&gt; and &lt;a href="https://aicoding-guide.com/en/posts/gemini-cli-vs-claude-code/" rel="noopener noreferrer"&gt;Gemini CLI vs Claude Code&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Cursor is sold inside the X Subscription and includes Grok 4.7 / 4.6 / 4.5 and Composer 2.5&lt;/li&gt;
&lt;li&gt;Third-party models are not included; Premium and above pay API list price from prepaid credit, and Plus cannot use them&lt;/li&gt;
&lt;li&gt;Claude Code comes with Pro ($20/mo) and Max (from $100), and is not on Free&lt;/li&gt;
&lt;li&gt;The permission syntax is close, but Cursor can only vary permissions per project&lt;/li&gt;
&lt;li&gt;A plain &lt;code&gt;.md&lt;/code&gt; in &lt;code&gt;.cursor/rules&lt;/code&gt; is ignored; use &lt;code&gt;.mdc&lt;/code&gt; or &lt;code&gt;AGENTS.md&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>claudecode</category>
      <category>cursor</category>
      <category>comparison</category>
      <category>pricing</category>
    </item>
    <item>
      <title>Codex CLI v0.164 adds /presets and inline /permissions arguments for permission profiles</title>
      <dc:creator>aicoding-guide</dc:creator>
      <pubDate>Sun, 25 Oct 2026 19:17:04 +0000</pubDate>
      <link>https://dev.to/aicoding-guide/codex-cli-v0164-adds-presets-and-inline-permissions-arguments-for-permission-profiles-4deb</link>
      <guid>https://dev.to/aicoding-guide/codex-cli-v0164-adds-presets-and-inline-permissions-arguments-for-permission-profiles-4deb</guid>
      <description>&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://aicoding-guide.com/en/posts/codex-update-0-164/" rel="noopener noreferrer"&gt;https://aicoding-guide.com&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Codex CLI v0.164.0 is the first release in a while with several genuine features. The two that matter are &lt;strong&gt;&lt;code&gt;/presets&lt;/code&gt;&lt;/strong&gt; and &lt;strong&gt;inline &lt;code&gt;/permissions&lt;/code&gt; arguments&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The second is more than a typing shortcut. Behind it sits &lt;strong&gt;permission profiles&lt;/strong&gt;, a beta mechanism that does not combine with the older &lt;code&gt;sandbox_mode&lt;/code&gt; settings. Configure both without knowing that, and one of them is silently ignored.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Key point&lt;/strong&gt;&lt;br&gt;
What this article covers&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What the ten &lt;code&gt;/presets&lt;/code&gt; slots hold&lt;/li&gt;
&lt;li&gt;How the permission profiles that &lt;code&gt;/permissions&lt;/code&gt; selects are built&lt;/li&gt;
&lt;li&gt;Why permission profiles and &lt;code&gt;sandbox_mode&lt;/code&gt; cannot be used together&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Ten preset slots for prompts
&lt;/h2&gt;

&lt;p&gt;The release notes read: "Save reusable prompts and slash commands in ten numbered &lt;code&gt;/presets&lt;/code&gt; slots, with a keyboard menu for quick access."&lt;/p&gt;

&lt;p&gt;Reusable prompts and slash commands go into ten numbered slots, recalled from a keyboard menu. It gives the standing instructions you retype every session somewhere to live.&lt;/p&gt;

&lt;p&gt;The other input-side addition is arguments for &lt;code&gt;/model&lt;/code&gt; and &lt;code&gt;/permissions&lt;/code&gt;: "Set model, reasoning effort, speed, and permission profiles directly with inline &lt;code&gt;/model&lt;/code&gt; and &lt;code&gt;/permissions&lt;/code&gt; arguments." Instead of opening a menu and choosing, you pass the value on the command.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;/presets and /permissions are not in the official list&lt;/strong&gt;&lt;br&gt;
As of 2026-10-26, the official slash command list (28 entries) has no row for &lt;code&gt;/presets&lt;/code&gt; or &lt;code&gt;/permissions&lt;/code&gt;. That page does say "Available commands vary based on your environment and access", so availability may vary, but neither could be confirmed in the documentation. Nor is there any statement of where the preset slots are stored.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  The permission profiles behind /permissions
&lt;/h2&gt;

&lt;p&gt;The &lt;strong&gt;permission profiles&lt;/strong&gt; that &lt;code&gt;/permissions&lt;/code&gt; selects are a beta feature with their own documentation page: "A profile is a named policy that combines filesystem rules, which define what commands can read or write, with network rules, which define which destinations commands can reach."&lt;/p&gt;

&lt;p&gt;Three profiles are built in.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Profile&lt;/th&gt;
&lt;th&gt;What it does&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;:read-only&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Keeps local command execution read-only&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;:workspace&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Allows writes inside the active workspace roots and system temp directories&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;:danger-full-access&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Removes local sandbox restrictions; only when that breadth is intended&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Define your own under &lt;code&gt;[permissions.&amp;lt;name&amp;gt;]&lt;/code&gt; and select it with the top-level &lt;code&gt;default_permissions&lt;/code&gt; key.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight toml"&gt;&lt;code&gt;&lt;span class="n"&gt;default_permissions&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;"project-edit"&lt;/span&gt;

&lt;span class="k"&gt;[&lt;/span&gt;&lt;span class="n"&gt;features&lt;/span&gt;&lt;span class="k"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;network_proxy&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;

&lt;span class="k"&gt;[&lt;/span&gt;&lt;span class="n"&gt;permissions&lt;/span&gt;&lt;span class="k"&gt;.&lt;/span&gt;&lt;span class="n"&gt;project-edit&lt;/span&gt;&lt;span class="k"&gt;.&lt;/span&gt;&lt;span class="n"&gt;workspace_roots&lt;/span&gt;&lt;span class="k"&gt;]&lt;/span&gt;
&lt;span class="s"&gt;"~/code/app"&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;
&lt;span class="s"&gt;"~/code/shared-lib"&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;

&lt;span class="k"&gt;[&lt;/span&gt;&lt;span class="n"&gt;permissions&lt;/span&gt;&lt;span class="k"&gt;.&lt;/span&gt;&lt;span class="n"&gt;project-edit&lt;/span&gt;&lt;span class="k"&gt;.&lt;/span&gt;&lt;span class="n"&gt;filesystem&lt;/span&gt;&lt;span class="k"&gt;]&lt;/span&gt;
&lt;span class="s"&gt;":minimal"&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;"read"&lt;/span&gt;

&lt;span class="k"&gt;[&lt;/span&gt;&lt;span class="n"&gt;permissions&lt;/span&gt;&lt;span class="k"&gt;.&lt;/span&gt;&lt;span class="n"&gt;project-edit&lt;/span&gt;&lt;span class="k"&gt;.&lt;/span&gt;&lt;span class="n"&gt;filesystem&lt;/span&gt;&lt;span class="k"&gt;.&lt;/span&gt;&lt;span class="s"&gt;":workspace_roots"&lt;/span&gt;&lt;span class="k"&gt;]&lt;/span&gt;
&lt;span class="s"&gt;"."&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;"write"&lt;/span&gt;
&lt;span class="s"&gt;".devcontainer"&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;"read"&lt;/span&gt;
&lt;span class="s"&gt;"**/*.env"&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;"deny"&lt;/span&gt;

&lt;span class="k"&gt;[&lt;/span&gt;&lt;span class="n"&gt;permissions&lt;/span&gt;&lt;span class="k"&gt;.&lt;/span&gt;&lt;span class="n"&gt;project-edit&lt;/span&gt;&lt;span class="k"&gt;.&lt;/span&gt;&lt;span class="n"&gt;network&lt;/span&gt;&lt;span class="k"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;enabled&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;

&lt;span class="k"&gt;[&lt;/span&gt;&lt;span class="n"&gt;permissions&lt;/span&gt;&lt;span class="k"&gt;.&lt;/span&gt;&lt;span class="n"&gt;project-edit&lt;/span&gt;&lt;span class="k"&gt;.&lt;/span&gt;&lt;span class="n"&gt;network&lt;/span&gt;&lt;span class="k"&gt;.&lt;/span&gt;&lt;span class="n"&gt;domains&lt;/span&gt;&lt;span class="k"&gt;]&lt;/span&gt;
&lt;span class="s"&gt;"api.openai.com"&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;"allow"&lt;/span&gt;
&lt;span class="s"&gt;"*.github.com"&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;"allow"&lt;/span&gt;
&lt;span class="s"&gt;"tracking.example.com"&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;"deny"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;**/*.env&lt;/code&gt; deny line is the practically useful part: writes stay allowed inside the workspace while environment files are carved out.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;network.enabled = true alone does not enforce domain rules&lt;/strong&gt;&lt;br&gt;
The documentation states: "A profile's &lt;code&gt;network.enabled = true&lt;/code&gt; permits command network access, but it does not start the network proxy." To have the domain rules enforced, also set &lt;code&gt;features.network_proxy = true&lt;/code&gt; in &lt;code&gt;config.toml&lt;/code&gt;. Without an active proxy, those domain rules do not restrict direct network access.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Permission profiles and sandbox_mode do not mix
&lt;/h2&gt;

&lt;p&gt;This is the part that catches people migrating. The documentation is explicit: "Permission profiles do not compose with the older sandbox settings. Configure either &lt;code&gt;default_permissions&lt;/code&gt; and &lt;code&gt;[permissions]&lt;/code&gt;, or &lt;code&gt;sandbox_mode&lt;/code&gt; / &lt;code&gt;sandbox_workspace_write&lt;/code&gt;, but not both."&lt;/p&gt;

&lt;p&gt;The resolution falls entirely to one side. If &lt;code&gt;sandbox_mode&lt;/code&gt; appears &lt;strong&gt;anywhere in a loaded config file&lt;/strong&gt;, if you pass &lt;code&gt;--sandbox&lt;/code&gt;, or if the selected config profile sets &lt;code&gt;sandbox_mode&lt;/code&gt;, Codex uses the older sandbox settings rather than &lt;code&gt;default_permissions&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;So a &lt;code&gt;sandbox_mode&lt;/code&gt; line left over in &lt;code&gt;~/.codex/config.toml&lt;/code&gt; silently voids a permission profile you just wrote. Remove the old settings first. For the older model, see &lt;a href="https://aicoding-guide.com/en/posts/codex-approval-sandbox/" rel="noopener noreferrer"&gt;Combining approval_policy and sandbox_mode in Codex&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Credential masking and the other fixes
&lt;/h2&gt;

&lt;p&gt;Two security changes landed. One is "Mask credentials during supported remote Bash commands and Zsh snapshot sessions", which covers custom provider credentials too. The other is "Hardened sandbox checks for case-variant metadata paths on macOS and replaceable symlinks used to locate executables."&lt;/p&gt;

&lt;p&gt;Three fixes stand out:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A failed compaction no longer leaves partial summaries in conversation history&lt;/li&gt;
&lt;li&gt;Resuming a session now finds compressed histories and restores saved thread settings&lt;/li&gt;
&lt;li&gt;Windows HTTPS and WebSocket connections handle proxy authentication challenges with the signed-in user's credentials&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Beyond those, enterprise MCP connections can authenticate through Codex account grants or a dedicated sign-in, and the Amazon Bedrock setup wizard is now on by default. For the previous release, see &lt;a href="https://aicoding-guide.com/en/posts/codex-update-0-163/" rel="noopener noreferrer"&gt;Codex CLI v0.163 turns Daybreak back on by default&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;/presets&lt;/code&gt; stores reusable prompts and slash commands in ten numbered slots&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/model&lt;/code&gt; and &lt;code&gt;/permissions&lt;/code&gt; now accept their settings as inline arguments&lt;/li&gt;
&lt;li&gt;The permission profiles &lt;code&gt;/permissions&lt;/code&gt; selects are beta; the built-ins are &lt;code&gt;:read-only&lt;/code&gt;, &lt;code&gt;:workspace&lt;/code&gt; and &lt;code&gt;:danger-full-access&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Permission profiles do not combine with &lt;code&gt;sandbox_mode&lt;/code&gt;; a leftover &lt;code&gt;sandbox_mode&lt;/code&gt; wins&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/presets&lt;/code&gt; and &lt;code&gt;/permissions&lt;/code&gt; could not be confirmed in the official slash command list&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>codex</category>
      <category>codexcli</category>
      <category>updates</category>
      <category>permissionprofiles</category>
    </item>
    <item>
      <title>This week in Claude Code, Codex and Gemini CLI (week of October 25, 2026)</title>
      <dc:creator>aicoding-guide</dc:creator>
      <pubDate>Sat, 24 Oct 2026 19:08:18 +0000</pubDate>
      <link>https://dev.to/aicoding-guide/this-week-in-claude-code-codex-and-gemini-cli-week-of-october-25-2026-1jjf</link>
      <guid>https://dev.to/aicoding-guide/this-week-in-claude-code-codex-and-gemini-cli-week-of-october-25-2026-1jjf</guid>
      <description>&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://aicoding-guide.com/en/posts/weekly-2026-10-25/" rel="noopener noreferrer"&gt;https://aicoding-guide.com&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This was a &lt;strong&gt;security fix week&lt;/strong&gt;. Claude Code 2.1.309 carries more than ten fixes for routes around the sandbox and the permission checks. Codex 0.164.0 hardened its own sandbox checks and added credential masking.&lt;/p&gt;

&lt;p&gt;Codex also shipped features. &lt;code&gt;/presets&lt;/code&gt; stores prompts and slash commands in ten slots, and &lt;code&gt;/model&lt;/code&gt; and &lt;code&gt;/permissions&lt;/code&gt; now take their settings as arguments.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Key point&lt;/strong&gt;&lt;br&gt;
This week in brief&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Claude Code 2.1.309 concentrates fixes for sandbox and permission-check bypasses&lt;/li&gt;
&lt;li&gt;Codex 0.164.0 adds &lt;code&gt;/presets&lt;/code&gt; and masks credentials in remote Bash&lt;/li&gt;
&lt;li&gt;Claude Code gained the &lt;code&gt;claude_code.safety_event&lt;/code&gt; OpenTelemetry event&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Claude Code
&lt;/h2&gt;

&lt;p&gt;Eight releases this week, 2.1.303 through 2.1.310.&lt;/p&gt;

&lt;h3&gt;
  
  
  Sandbox and permission bypasses (2.1.309)
&lt;/h3&gt;

&lt;p&gt;This release is lopsided: it is largely a list of routes that worked when they should not have.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Route&lt;/th&gt;
&lt;th&gt;What was wrong&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Shell startup files&lt;/td&gt;
&lt;td&gt;On macOS and Linux, every sandboxed Bash command ran the shell's startup files &lt;strong&gt;outside&lt;/strong&gt; the sandbox first&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Symbolic links&lt;/td&gt;
&lt;td&gt;macOS &lt;code&gt;denyWrite&lt;/code&gt; glob patterns did not apply at a path's real location when the pattern's folder was reached through a symlink&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MCP config file&lt;/td&gt;
&lt;td&gt;Sandboxed commands and auto-accepted edits could modify the config passed with &lt;code&gt;--mcp-config&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Redirects&lt;/td&gt;
&lt;td&gt;The Bash permission check trusted a variable set by a command whose redirect can fail to open&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Compound commands&lt;/td&gt;
&lt;td&gt;A &lt;code&gt;cd&lt;/code&gt; that was wrapped or prefixed before a git command did not prompt, as a plain &lt;code&gt;cd&lt;/code&gt; does&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Deny rules&lt;/td&gt;
&lt;td&gt;An &lt;code&gt;Edit(path)&lt;/code&gt; deny rule did not block a Bash redirect to that path in some commands holding a subshell&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Worktree isolation&lt;/td&gt;
&lt;td&gt;Locale-prefixed commands, and some zsh arithmetic commands, passed the isolation guard&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;On Windows, PowerShell permission checks were auto-approving some &lt;code&gt;Set-Location&lt;/code&gt; and &lt;code&gt;cd&lt;/code&gt; commands that carry extra arguments. 2.1.310 adds another: with Git Bash missing, &lt;code&gt;PreToolUse&lt;/code&gt; and &lt;code&gt;PermissionRequest&lt;/code&gt; hooks let a tool call through when the hook's command was only quoted strings.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Upgrade if you depend on deny rules or the sandbox&lt;/strong&gt;&lt;br&gt;
These are "configured but not actually enforced" fixes. If your setup assumes &lt;code&gt;.env&lt;/code&gt; cannot be read or writes are confined, move to 2.1.310 and then review the rules themselves. &lt;a href="https://aicoding-guide.com/en/posts/claude-code-settings-json-permissions/" rel="noopener noreferrer"&gt;Claude Code permissions in settings.json&lt;/a&gt; covers the syntax.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Telemetry and settings (2.1.305, 2.1.307)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;claude_code.safety_event&lt;/code&gt;&lt;/strong&gt;: a new OpenTelemetry event for each tool call that a permission rule, auto mode, a safety check, a hook or the sandbox stopped, prompted on, or sent back&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;sandbox.allowNestedUserNamespaces&lt;/code&gt;&lt;/strong&gt;: lets sandboxed commands on Linux create user namespaces, for Chromium and rootless podman. The CHANGELOG also states plainly that this lets them get around the sandbox's file protections&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;CLAUDE_CODE_RETRY_WATCHDOG_USAGE_LIMIT_RECHECK_MS&lt;/code&gt;&lt;/strong&gt;: unattended retry mode now notices a usage limit lifted before its reset&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Easy ones to miss (2.1.304, 2.1.310)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;CLAUDE_CODE_AUTO_COMPACT_WINDOW=200k&lt;/code&gt; silently set a 100K window. The variable now accepts &lt;code&gt;k&lt;/code&gt; and &lt;code&gt;M&lt;/code&gt; suffixes and warns when a value is out of range&lt;/li&gt;
&lt;li&gt;A very large &lt;code&gt;cleanupPeriodDays&lt;/code&gt; made background cleanup delete some recent files, such as pasted images&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;claude --worktree&lt;/code&gt; removed the worktree and its branch without asking at exit when HEAD was detached or on another branch, which could lose commits&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Codex
&lt;/h2&gt;

&lt;p&gt;v0.164.0 is a feature release.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Addition&lt;/th&gt;
&lt;th&gt;What it does&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/presets&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Saves reusable prompts and slash commands in ten numbered slots, recalled from a keyboard menu&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;/model&lt;/code&gt; and &lt;code&gt;/permissions&lt;/code&gt; arguments&lt;/td&gt;
&lt;td&gt;Set model, reasoning effort, speed and permissions inline as arguments&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Image preview&lt;/td&gt;
&lt;td&gt;Shows viewed and generated images in the fullscreen transcript on Kitty or Sixel terminals&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Enterprise MCP auth&lt;/td&gt;
&lt;td&gt;Authenticates through Codex account grants or a dedicated sign-in, including OAuth clients that need secrets&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Credential masking&lt;/td&gt;
&lt;td&gt;Masks credentials in remote Bash commands and zsh snapshot sessions, custom provider credentials included&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bedrock setup&lt;/td&gt;
&lt;td&gt;The Amazon Bedrock setup wizard is now on by default&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;On the security side, sandbox checks were hardened for case-variant metadata paths on macOS and for replaceable symlinks used to find executables — the same direction as Claude Code's symlink fixes this week.&lt;/p&gt;

&lt;p&gt;Among the fixes, two stand out: a failed compaction no longer leaves a partial summary in history, and Windows HTTPS and WebSocket connections now handle proxy authentication with the signed-in user's Negotiate or NTLM credentials. For the previous release, see &lt;a href="https://aicoding-guide.com/en/posts/codex-update-0-163/" rel="noopener noreferrer"&gt;Codex CLI v0.163 turns Daybreak back on by default&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Gemini CLI
&lt;/h2&gt;

&lt;p&gt;v0.65.0 (October 20) had one feature among 27 entries, the &lt;code&gt;otlpHeaders&lt;/code&gt; telemetry setting. The change that matters more in practice is that workspace settings in an untrusted folder are now enforced as read-only. See &lt;a href="https://aicoding-guide.com/en/posts/gemini-cli-update-0-65/" rel="noopener noreferrer"&gt;Gemini CLI v0.65 enforces read-only settings in untrusted folders&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to check now
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Move Claude Code to 2.1.310, first if you rely on the sandbox or on deny rules&lt;/li&gt;
&lt;li&gt;Check whether &lt;code&gt;cleanupPeriodDays&lt;/code&gt; is set to an extreme value&lt;/li&gt;
&lt;li&gt;If you wrote a suffixed value such as &lt;code&gt;200k&lt;/code&gt; for &lt;code&gt;CLAUDE_CODE_AUTO_COMPACT_WINDOW&lt;/code&gt;, confirm it is the window you meant&lt;/li&gt;
&lt;li&gt;Upgrade Codex to 0.164.0 if you use its sandbox&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Claude Code 2.1.309 fixes more than ten ways around the sandbox and the permission checks&lt;/li&gt;
&lt;li&gt;Sandboxed commands were running the shell's startup files outside the sandbox first&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;claude_code.safety_event&lt;/code&gt; makes blocked and prompted tool calls measurable&lt;/li&gt;
&lt;li&gt;Codex 0.164.0 adds &lt;code&gt;/presets&lt;/code&gt;, inline &lt;code&gt;/model&lt;/code&gt; and &lt;code&gt;/permissions&lt;/code&gt; arguments, and credential masking&lt;/li&gt;
&lt;li&gt;Gemini CLI v0.65.0 enforces untrusted folder settings and adds &lt;code&gt;otlpHeaders&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>weeklydigest</category>
      <category>updates</category>
      <category>claudecode</category>
      <category>codex</category>
    </item>
    <item>
      <title>Gemini CLI v0.65 enforces read-only settings in untrusted folders and adds OTLP headers</title>
      <dc:creator>aicoding-guide</dc:creator>
      <pubDate>Thu, 22 Oct 2026 19:17:52 +0000</pubDate>
      <link>https://dev.to/aicoding-guide/gemini-cli-v065-enforces-read-only-settings-in-untrusted-folders-and-adds-otlp-headers-50p2</link>
      <guid>https://dev.to/aicoding-guide/gemini-cli-v065-enforces-read-only-settings-in-untrusted-folders-and-adds-otlp-headers-50p2</guid>
      <description>&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://aicoding-guide.com/en/posts/gemini-cli-update-0-65/" rel="noopener noreferrer"&gt;https://aicoding-guide.com&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Gemini CLI v0.65.0 carries 27 changes, but &lt;strong&gt;only one is a feature&lt;/strong&gt;: the telemetry OTLP exporter now accepts custom headers. The rest is 25 fixes and one performance change.&lt;/p&gt;

&lt;p&gt;As in the previous release, &lt;strong&gt;untrusted folder handling&lt;/strong&gt; and &lt;strong&gt;&lt;code&gt;@&lt;/code&gt; references&lt;/strong&gt; both got attention. Those are the same two areas v0.64.0 touched, so this is the second release in a row working on them.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Key point&lt;/strong&gt;&lt;br&gt;
What this article covers&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Workspace settings in an untrusted folder are now enforced as read-only&lt;/li&gt;
&lt;li&gt;How to write &lt;code&gt;otlpHeaders&lt;/code&gt;, the release's only new feature&lt;/li&gt;
&lt;li&gt;Fixes around session resume, OAuth and &lt;code&gt;@&lt;/code&gt; references&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Untrusted folder settings are enforced as read-only
&lt;/h2&gt;

&lt;p&gt;PR #29583 makes workspace settings read-only in a folder you have not trusted.&lt;/p&gt;

&lt;p&gt;Folder trust exists to stop an unvetted project from loading its own configuration. Per the documentation, an untrusted folder does not load &lt;code&gt;.gemini/settings.json&lt;/code&gt; or &lt;code&gt;.env&lt;/code&gt;, cannot install or update extensions, disables tool auto-acceptance, and does not connect to MCP servers.&lt;/p&gt;

&lt;p&gt;v0.64.0 fixed headless mode treating an untrusted folder as trusted. This release continues that work by closing the write side. If your CI depends on the feature, v0.65.0 is the version that has both. For the previous release, see &lt;a href="https://aicoding-guide.com/en/posts/gemini-cli-update-0-64/" rel="noopener noreferrer"&gt;Gemini CLI v0.64 fixes the CPU hang on @ inside code&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Relatedly, PR #29672 removes false positives from the untrusted command flag and compound loop checks — the case where the check erred so far toward caution that ordinary commands were caught by it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The only new feature is custom OTLP headers
&lt;/h2&gt;

&lt;p&gt;PR #29641 adds &lt;code&gt;otlpHeaders&lt;/code&gt; to the telemetry settings, so you can attach arbitrary headers to OTLP exporter requests. That is what you need when the collector you send to requires an authentication header.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"telemetry"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"enabled"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"target"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"local"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"otlpEndpoint"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"http://localhost:4317"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"otlpProtocol"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"grpc"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"otlpHeaders"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"x-api-key"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"your-key"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The documentation's settings table defines it as:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Setting&lt;/th&gt;
&lt;th&gt;Environment variable&lt;/th&gt;
&lt;th&gt;Values&lt;/th&gt;
&lt;th&gt;Default&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;otlpHeaders&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;GEMINI_TELEMETRY_OTLP_HEADERS&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;JSON or &lt;code&gt;key=value&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;none&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Because the environment variable works too, a CI job can pass the key from its own secret store instead of a settings file.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;A key written into the header stays in the settings file&lt;/strong&gt;&lt;br&gt;
Putting an API key directly in &lt;code&gt;otlpHeaders&lt;/code&gt; leaves it in &lt;code&gt;.gemini/settings.json&lt;/code&gt;. If you commit that file, pass the value through &lt;code&gt;GEMINI_TELEMETRY_OTLP_HEADERS&lt;/code&gt; instead.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Session resume and authentication fixes
&lt;/h2&gt;

&lt;p&gt;Six fixes address losing work or failing to sign in.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;PR&lt;/th&gt;
&lt;th&gt;What it fixes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;#29584&lt;/td&gt;
&lt;td&gt;A resumed session's history being deleted on a quick exit (Issue #29198)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;#29618&lt;/td&gt;
&lt;td&gt;Duplicate tool response turns when resuming a session&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;#29728&lt;/td&gt;
&lt;td&gt;Session poisoning on a rapid Ctrl-C interruption&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;#29655&lt;/td&gt;
&lt;td&gt;Infinite verification and OAuth retry loops&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;#29643&lt;/td&gt;
&lt;td&gt;Cached credentials now cleared when Google login is re-selected&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;#29616&lt;/td&gt;
&lt;td&gt;OAuth callback &lt;code&gt;iss&lt;/code&gt; validation aligned with RFC 9207 metadata&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;code&gt;#29584&lt;/code&gt; and &lt;code&gt;#29728&lt;/code&gt; are the kind of bug that costs you work. If you routinely resume long sessions, they are the reason to upgrade.&lt;/p&gt;

&lt;h2&gt;
  
  
  @ references and ignore-file performance
&lt;/h2&gt;

&lt;p&gt;PR #29617 stops the eager recursive file reading that &lt;code&gt;@&lt;/code&gt; references triggered, so pointing at a directory with &lt;code&gt;@src/&lt;/code&gt; no longer pulls in its contents unconditionally.&lt;/p&gt;

&lt;p&gt;v0.64.0 fixed the CPU hang on code containing &lt;code&gt;@&lt;/code&gt;, so &lt;code&gt;@&lt;/code&gt; handling has now been worked on in two consecutive releases.&lt;/p&gt;

&lt;p&gt;On performance, PR #29582 optimises ignore filtering and enables subtree pruning (Issue #29077), which helps when file discovery is slow in a large repository.&lt;/p&gt;

&lt;p&gt;Also fixed: the Enter key hanging in interactive mode (PR #29476, Issue #23297), one extension failing the allowlist check preventing the others from loading (PR #29720), and unnecessary terminal clears when expanding with &lt;code&gt;Ctrl+O&lt;/code&gt; (PR #29640). For MCP configuration, see &lt;a href="https://aicoding-guide.com/en/posts/gemini-cli-mcp/" rel="noopener noreferrer"&gt;Setting up MCP servers in Gemini CLI&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Of 27 entries in v0.65.0, one is a feature, one is performance, and 25 are fixes and release work&lt;/li&gt;
&lt;li&gt;Workspace settings in an untrusted folder are now enforced as read-only&lt;/li&gt;
&lt;li&gt;The feature is &lt;code&gt;telemetry.otlpHeaders&lt;/code&gt;, also settable via &lt;code&gt;GEMINI_TELEMETRY_OTLP_HEADERS&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Resumed session history loss and session poisoning on rapid Ctrl-C are fixed&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;@&lt;/code&gt; references no longer read recursively ahead of time, continuing v0.64's &lt;code&gt;@&lt;/code&gt; work&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>gemini</category>
      <category>updates</category>
      <category>foldertrust</category>
      <category>opentelemetry</category>
    </item>
    <item>
      <title>Gemini CLI v0.64 fixes the CPU hang on @ inside code and headless folder trust</title>
      <dc:creator>aicoding-guide</dc:creator>
      <pubDate>Tue, 20 Oct 2026 19:18:57 +0000</pubDate>
      <link>https://dev.to/aicoding-guide/gemini-cli-v064-fixes-the-cpu-hang-on-inside-code-and-headless-folder-trust-3n8d</link>
      <guid>https://dev.to/aicoding-guide/gemini-cli-v064-fixes-the-cpu-hang-on-inside-code-and-headless-folder-trust-3n8d</guid>
      <description>&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://aicoding-guide.com/en/posts/gemini-cli-update-0-64/" rel="noopener noreferrer"&gt;https://aicoding-guide.com&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Gemini CLI v0.64.0 adds no features. All 17 entries under "What's Changed" are fixes, refactors or release chores.&lt;/p&gt;

&lt;p&gt;Two of them matter a great deal, though: a hang where &lt;strong&gt;piping code containing &lt;code&gt;@&lt;/code&gt; into &lt;code&gt;-p&lt;/code&gt; pins the CPU at 100%&lt;/strong&gt;, and a headless mode that &lt;strong&gt;treated untrusted folders as trusted&lt;/strong&gt;. If the first sounds familiar, that alone is a reason to upgrade.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Key point&lt;/strong&gt;&lt;br&gt;
What this article covers&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Why input like &lt;code&gt;@scope/pkg&lt;/code&gt; hung the CLI, and the workaround that worked&lt;/li&gt;
&lt;li&gt;How headless folder trust diverged from the actual trust decision&lt;/li&gt;
&lt;li&gt;File writes and state persistence becoming atomic&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Piping code with @ pinned the CPU at 100%
&lt;/h2&gt;

&lt;p&gt;The fix is PR #29557 (Issue #29434). The symptom: piping code into &lt;code&gt;-p&lt;/code&gt; on stdin made the CLI stop before it sent anything to the model. In the reporter's words, "The node process sits at ~100% CPU (state RN) indefinitely."&lt;/p&gt;

&lt;p&gt;The trigger is input where an &lt;code&gt;@&lt;/code&gt;-prefixed token is immediately followed by a double quote, with more quoted strings after it. In practice that means a scoped npm import.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@scope/pkg&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;y&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;./local&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The symptoms were:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Aspect&lt;/th&gt;
&lt;th&gt;Behaviour&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Output&lt;/td&gt;
&lt;td&gt;Nothing at all, not even an error&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;--output-format stream-json&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Only the &lt;code&gt;init&lt;/code&gt; event appears, then it stops&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Signals&lt;/td&gt;
&lt;td&gt;SIGINT and SIGTERM are ignored; only SIGKILL stops it&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Versions reproduced&lt;/td&gt;
&lt;td&gt;The reporter names v0.59.0 and v0.60.0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The reporter attributes the cause to the &lt;code&gt;@&lt;/code&gt;-path regex matching across multiple quoted spans, so the result falls back to a glob whose large brace expansion minimatch then processes synchronously. That is the reporter's analysis; the fix itself is described only as stopping the CPU hang and quote swallowing caused by &lt;code&gt;@&lt;/code&gt; inside code.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;A workaround if you cannot upgrade yet&lt;/strong&gt;&lt;br&gt;
The reporter writes that escaping every &lt;code&gt;@&lt;/code&gt; in the piped text avoids the hang. If a CI job pipes source code into &lt;code&gt;gemini -p&lt;/code&gt;, add that preprocessing step until you can upgrade.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Headless treated untrusted folders as trusted
&lt;/h2&gt;

&lt;p&gt;This is PR #29528 (Issue #29031). In headless mode (&lt;code&gt;-p&lt;/code&gt;), the internal folder trust handling always passed the state through as trusted. The result was a mismatch: the warning said the folder was untrusted while the application-level check said it was trusted.&lt;/p&gt;

&lt;p&gt;Folder trust exists to stop a project you have not vetted from loading its own configuration. According to the documentation, an untrusted folder disables all of the following:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The project's &lt;code&gt;.gemini/settings.json&lt;/code&gt; is not loaded&lt;/li&gt;
&lt;li&gt;The project's &lt;code&gt;.env&lt;/code&gt; files are not loaded&lt;/li&gt;
&lt;li&gt;Extensions cannot be installed, updated or uninstalled&lt;/li&gt;
&lt;li&gt;Tool auto-acceptance is disabled, so every tool prompts&lt;/li&gt;
&lt;li&gt;Automatic memory loading from directories in local settings is disabled&lt;/li&gt;
&lt;li&gt;MCP servers are not connected&lt;/li&gt;
&lt;li&gt;Custom &lt;code&gt;.toml&lt;/code&gt; commands are not loaded, both project and user ones&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;So while the mismatch lasted, an untrusted folder's settings, hooks and MCP servers could still take effect in a headless run. If your CI relies on this feature, that is a reason to upgrade.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;The docs disagree on the default&lt;/strong&gt;&lt;br&gt;
The settings table gives &lt;code&gt;security.folderTrust.enabled&lt;/code&gt; a default of &lt;code&gt;true&lt;/code&gt;. The Trusted Folders page says "The Trusted Folders feature is &lt;strong&gt;disabled by default&lt;/strong&gt;." Both live on &lt;code&gt;main&lt;/code&gt; in the same repository (checked 2026-10-21). Open &lt;code&gt;/permissions&lt;/code&gt; to see which applies in your own setup.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;To turn it on explicitly:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"security"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"folderTrust"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"enabled"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Decisions are stored in &lt;code&gt;~/.gemini/trustedFolders.json&lt;/code&gt;. Running headless against an untrusted folder exits with &lt;code&gt;FatalUntrustedWorkspaceError&lt;/code&gt;, so a CI job that must proceed uses the &lt;code&gt;--skip-trust&lt;/code&gt; flag or &lt;code&gt;GEMINI_CLI_TRUST_WORKSPACE=true&lt;/code&gt;. For MCP configuration, see &lt;a href="https://aicoding-guide.com/en/posts/gemini-cli-mcp/" rel="noopener noreferrer"&gt;Setting up MCP servers in Gemini CLI&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Writes and state persistence became atomic
&lt;/h2&gt;

&lt;p&gt;Three fixes address data corruption:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Fix&lt;/th&gt;
&lt;th&gt;What changed&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;PR #29499&lt;/td&gt;
&lt;td&gt;File tool operations are serialised and writes are atomic&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PR #29558&lt;/td&gt;
&lt;td&gt;State persistence is atomic, with recovery from a backup when the state is corrupt&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PR #29568&lt;/td&gt;
&lt;td&gt;Conversation recording uses append-only delta patching with bounded history windowing&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;These cover parallel file operations clobbering each other, and a state file left corrupt when the process dies mid-save. They matter most in long-running sessions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Windows and interaction fixes
&lt;/h2&gt;

&lt;p&gt;Four more that show up in daily use:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Windows ConPTY now forwards the IME cursor position&lt;/strong&gt; (PR #29560), fixing misplaced cursors while composing text in an IME&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ctrl+C emergency abort now reaches the cancellation handler&lt;/strong&gt; during active operations (PR #29586)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;@file:line&lt;/code&gt; references and a ghost-text wrap hang&lt;/strong&gt; are fixed (PR #29581)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Enter and Spacebar reliably confirm selection list options&lt;/strong&gt; (PR #29502)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Beyond those, updating an extension on Windows now retries directory removal through file-locking errors (PR #29540), scroll position is preserved (PR #29520), and ACP resolves sessions by exact ID (PR #29580). For the previous release, see &lt;a href="https://aicoding-guide.com/en/posts/gemini-cli-update-0-63/" rel="noopener noreferrer"&gt;Gemini CLI v0.63 fixes the diff cannot spawn error&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;v0.64.0 adds no features; all 17 "What's Changed" entries are fixes, refactors or release chores&lt;/li&gt;
&lt;li&gt;Piping code containing &lt;code&gt;@scope/pkg&lt;/code&gt; into &lt;code&gt;-p&lt;/code&gt; no longer pins the CPU at 100%, a state only SIGKILL could end&lt;/li&gt;
&lt;li&gt;Headless mode no longer treats an untrusted folder as trusted&lt;/li&gt;
&lt;li&gt;File writes and state persistence are atomic, with backup recovery for corrupt state&lt;/li&gt;
&lt;li&gt;The official docs give &lt;code&gt;security.folderTrust.enabled&lt;/code&gt; both a &lt;code&gt;true&lt;/code&gt; default and "disabled by default"&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>gemini</category>
      <category>updates</category>
      <category>foldertrust</category>
      <category>headless</category>
    </item>
    <item>
      <title>Codex CLI v0.163 turns Daybreak back on by default and makes /config searchable</title>
      <dc:creator>aicoding-guide</dc:creator>
      <pubDate>Sun, 18 Oct 2026 19:19:07 +0000</pubDate>
      <link>https://dev.to/aicoding-guide/codex-cli-v0163-turns-daybreak-back-on-by-default-and-makes-config-searchable-3kag</link>
      <guid>https://dev.to/aicoding-guide/codex-cli-v0163-turns-daybreak-back-on-by-default-and-makes-config-searchable-3kag</guid>
      <description>&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://aicoding-guide.com/en/posts/codex-update-0-163/" rel="noopener noreferrer"&gt;https://aicoding-guide.com&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Codex CLI v0.163.0 reverses a change that shipped five days earlier: &lt;strong&gt;Daybreak is on by default again&lt;/strong&gt;. Alongside it come a searchable settings panel, mid-turn steering, and three security fixes in the network proxy.&lt;/p&gt;

&lt;p&gt;Two things are worth acting on. If you had explicitly disabled Daybreak, check its current state. If you restrict network access in the sandbox, upgrade to 0.163.0.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Key point&lt;/strong&gt;&lt;br&gt;
What this article covers&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Daybreak is the default again for eligible accounts&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/config&lt;/code&gt; searches across categories, and you can steer a response mid-turn&lt;/li&gt;
&lt;li&gt;The three fixes that landed in the network proxy&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Daybreak is the default again
&lt;/h2&gt;

&lt;p&gt;The release notes say "Daybreak is enabled by default for eligible accounts." In v0.161.0 it required &lt;code&gt;--enable cli_daybreak&lt;/code&gt; or &lt;code&gt;features.cli_daybreak=true&lt;/code&gt;, and &lt;code&gt;daybreak=true&lt;/code&gt; alone was not enough. That requirement lasted five days.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight toml"&gt;&lt;code&gt;&lt;span class="c"&gt;# What v0.161.0 and v0.162.0 required&lt;/span&gt;
&lt;span class="nn"&gt;[features]&lt;/span&gt;
&lt;span class="py"&gt;cli_daybreak&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;From v0.163.0, an eligible account does not need this. &lt;code&gt;codex exec&lt;/code&gt; can also use Daybreak with an OpenAI API key now.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Do not treat this setting as settled&lt;/strong&gt;&lt;br&gt;
The same setting has moved twice in five days, and the release notes do not define what makes an account "eligible". If &lt;code&gt;cli_daybreak&lt;/code&gt; is written into a runbook or a shared &lt;code&gt;config.toml&lt;/code&gt;, verify the real behaviour after upgrading. &lt;a href="https://aicoding-guide.com/en/posts/codex-update-0-161/" rel="noopener noreferrer"&gt;What changed in Codex CLI v0.161 and v0.162&lt;/a&gt; covers how it worked before.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  /config and mid-turn control
&lt;/h2&gt;

&lt;p&gt;How you find settings, and what happens when you interrupt, both changed.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Change&lt;/th&gt;
&lt;th&gt;What it does&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/config&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Searches preferences across categories. Supported changes apply in place, and ones needing a restart are marked as such&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Follow-ups mid-response&lt;/td&gt;
&lt;td&gt;Send a follow-up while Codex is responding to steer it immediately&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Interrupting a turn&lt;/td&gt;
&lt;td&gt;Also stops running Code Mode cells and nested tool calls&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Leader key in &lt;code&gt;/keymap&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;The default is &lt;code&gt;Ctrl+X&lt;/code&gt;. Voice mute moved to &lt;code&gt;F9&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/daemon&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Restarts a managed background server, warning about work that may be interrupted&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/side&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;A temporary side chat. It persists across thread switches, and prompt answers go back to the originating thread&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Parallel read-only tools&lt;/td&gt;
&lt;td&gt;Independent reads such as skills, memories and conversation history run in parallel&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;/config, /keymap and /daemon are not in the official list&lt;/strong&gt;&lt;br&gt;
As of 2026-10-19 the official slash command reference has no entry for &lt;code&gt;/config&lt;/code&gt;, &lt;code&gt;/keymap&lt;/code&gt; or &lt;code&gt;/daemon&lt;/code&gt;. They appear only in the release notes. The reference does list &lt;code&gt;/approve&lt;/code&gt;, &lt;code&gt;/compact&lt;/code&gt;, &lt;code&gt;/model&lt;/code&gt;, &lt;code&gt;/plan&lt;/code&gt;, &lt;code&gt;/review&lt;/code&gt;, &lt;code&gt;/side&lt;/code&gt;, &lt;code&gt;/status&lt;/code&gt; and &lt;code&gt;/worktree&lt;/code&gt;, among others, and describes &lt;code&gt;/side&lt;/code&gt; as "Start a temporary side chat without interrupting the main chat."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  The network proxy and the sandbox
&lt;/h2&gt;

&lt;p&gt;Three security fixes landed:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The network proxy now checks permission &lt;strong&gt;before a DNS lookup&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;It rejects duplicate &lt;code&gt;Host&lt;/code&gt; headers&lt;/li&gt;
&lt;li&gt;Credential aliases can no longer bypass the inspection hooks&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The first matters most in practice. Previously name resolution could run ahead of the permission decision, so even a connection you blocked could leak to your DNS server which host was about to be contacted. Resuming a saved thread now also restores its permission and network approvals.&lt;/p&gt;

&lt;p&gt;On the documentation side, the Linux sandbox section was updated. The official sandboxing page says that on Linux and WSL2 you install &lt;code&gt;bubblewrap&lt;/code&gt; with your package manager first, that Codex uses the first &lt;code&gt;bwrap&lt;/code&gt; executable it finds on &lt;code&gt;PATH&lt;/code&gt;, and that without one it falls back to a bundled helper which "requires support for unprivileged user namespace creation". Codex shows a startup warning when &lt;code&gt;bwrap&lt;/code&gt; is missing or the helper cannot create the namespace.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Glossary&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;bubblewrap (bwrap)&lt;/strong&gt;: a Linux sandboxing tool that isolates processes using namespaces without needing privileges. Codex uses it to limit where commands can write and what they can reach over the network.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The release notes say the Linux sandbox documentation now also explains seccomp, but as of 2026-10-19 no mention of seccomp could be found on the official sandboxing page. For how approvals and the sandbox interact, see &lt;a href="https://aicoding-guide.com/en/posts/codex-approval-sandbox/" rel="noopener noreferrer"&gt;Combining approval_policy and sandbox_mode in Codex&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  The bundled zsh is gone
&lt;/h2&gt;

&lt;p&gt;Codex no longer bundles a patched &lt;code&gt;zsh&lt;/code&gt; and uses its standard shell executor instead. Configurations that use the retired shell flags get a migration notice.&lt;/p&gt;

&lt;p&gt;The names of those flags could not be confirmed in the official configuration reference, so if the notice appears, follow what the message itself says. For the structure of the configuration file as a whole, see &lt;a href="https://aicoding-guide.com/en/posts/codex-config-toml/" rel="noopener noreferrer"&gt;Configuring Codex with config.toml&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Two smaller items: the Linux and macOS release binaries are smaller because symbols are stripped from the packaged copies, and &lt;code&gt;codex exec&lt;/code&gt; no longer repeats file diffs after unrelated commands. Clipboard paste handling on Windows and WSL was also fixed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;v0.163.0 makes Daybreak the default for eligible accounts; &lt;code&gt;cli_daybreak&lt;/code&gt; is no longer needed&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/config&lt;/code&gt; searches settings across categories and marks changes that need a restart&lt;/li&gt;
&lt;li&gt;You can send a follow-up mid-response, and interrupting also stops Code Mode cells&lt;/li&gt;
&lt;li&gt;The network proxy checks permission before a DNS lookup and rejects duplicate &lt;code&gt;Host&lt;/code&gt; headers&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/config&lt;/code&gt;, &lt;code&gt;/keymap&lt;/code&gt;, &lt;code&gt;/daemon&lt;/code&gt; and the retired shell flag names could not be confirmed in the official docs&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>codex</category>
      <category>codexcli</category>
      <category>updates</category>
      <category>daybreak</category>
    </item>
    <item>
      <title>This week in Claude Code, Codex and Gemini CLI (week of October 18, 2026)</title>
      <dc:creator>aicoding-guide</dc:creator>
      <pubDate>Sat, 17 Oct 2026 19:13:13 +0000</pubDate>
      <link>https://dev.to/aicoding-guide/this-week-in-claude-code-codex-and-gemini-cli-week-of-october-18-2026-e6d</link>
      <guid>https://dev.to/aicoding-guide/this-week-in-claude-code-codex-and-gemini-cli-week-of-october-18-2026-e6d</guid>
      <description>&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://aicoding-guide.com/en/posts/weekly-2026-10-18/" rel="noopener noreferrer"&gt;https://aicoding-guide.com&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The change with the widest reach this week is &lt;strong&gt;idle compaction&lt;/strong&gt; in Claude Code. Leave a long conversation sitting and it now gets summarised on its own.&lt;/p&gt;

&lt;p&gt;On the Codex side, &lt;strong&gt;Daybreak is enabled by default again&lt;/strong&gt; — a setting that only became an explicit opt-in five days earlier in v0.161.0. It has flipped twice in under a week.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Key point&lt;/strong&gt;&lt;br&gt;
This week in brief&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Claude Code compacts idle conversations automatically (&lt;code&gt;idleCompaction&lt;/code&gt; turns it off)&lt;/li&gt;
&lt;li&gt;Codex 0.163.0 made Daybreak the default for eligible accounts again&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;CLAUDE_CODE_DISABLE_FILE_MENTIONS&lt;/code&gt; and &lt;code&gt;CLAUDE_CODE_AUTO_MODE_MODEL&lt;/code&gt; were added&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Claude Code
&lt;/h2&gt;

&lt;p&gt;Four releases this week, 2.1.299 through 2.1.302.&lt;/p&gt;

&lt;h3&gt;
  
  
  Idle compaction arrived (2.1.299, 2.1.302)
&lt;/h3&gt;

&lt;p&gt;The CHANGELOG wording is: "Added idle compaction in the terminal: a 200K+ token conversation left idle for about 54 minutes is compacted before its one-hour prompt cache expires, so your next message doesn't reprocess it all."&lt;/p&gt;

&lt;p&gt;The motivation is cost. Leave a conversation above 200K tokens idle for roughly 54 minutes and it is summarised before the one-hour prompt cache expires, so your next message does not pay to reprocess everything. The prompt caching documentation also notes that Claude Code may compact when idle, and that &lt;code&gt;idleCompaction&lt;/code&gt; disables it.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Setting&lt;/th&gt;
&lt;th&gt;What it does&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;"idleCompaction": false&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Turns off automatic idle compaction (v2.1.290+)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;CLAUDE_CODE_IDLE_COMPACT_MIN_TOKENS&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Changes the 200K token threshold (v2.1.290+)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;Idle compaction&lt;/code&gt; row in &lt;code&gt;/config&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Toggles it from the UI (added in v2.1.302)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Know what compaction drops before you leave it on&lt;/strong&gt;&lt;br&gt;
Compaction replaces the conversation layer with a summary. &lt;code&gt;CLAUDE.md&lt;/code&gt; itself is re-read from disk, but the contents of files that Claude read because &lt;code&gt;CLAUDE.md&lt;/code&gt; told it to are folded into the summary. &lt;a href="https://aicoding-guide.com/en/posts/claude-code-context-compact/" rel="noopener noreferrer"&gt;Context management with /compact and /clear&lt;/a&gt; covers the difference. If your workflow depends on what is in the window, turn it off.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  New environment variables (2.1.299, 2.1.301, 2.1.302)
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Variable&lt;/th&gt;
&lt;th&gt;What it does&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;CLAUDE_CODE_DISABLE_FILE_MENTIONS&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Claude gets the &lt;strong&gt;paths&lt;/strong&gt; of &lt;code&gt;@&lt;/code&gt; file mentions rather than their contents, and reads them with its own file tools&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;CLAUDE_CODE_AUTO_MODE_MODEL&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Chooses the model the client-side auto mode classifier uses. It does not change server-side auto mode&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;CLAUDE_CODE_RETRY_WATCHDOG_MAX_USAGE_LIMIT_WAIT_MS&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;In unattended retry mode, exits instead of waiting out a usage limit whose reset is too far off&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;code&gt;CLAUDE_CODE_DISABLE_FILE_MENTIONS&lt;/code&gt; is the useful one if &lt;code&gt;@&lt;/code&gt;-mentioning a large file keeps filling your context in one shot.&lt;/p&gt;

&lt;h3&gt;
  
  
  Security fixes (2.1.301, 2.1.302)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;The Read tool loaded an image file of any size — or a pipe or device named like an image — entirely into memory. Image sources over &lt;strong&gt;128 MB are now refused&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Quitting removed a worktree made by a &lt;code&gt;WorktreeCreate&lt;/code&gt; hook without asking, even when it might hold unpushed commits&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Telemetry
&lt;/h3&gt;

&lt;p&gt;The OpenTelemetry &lt;code&gt;api_request&lt;/code&gt; event now splits cache writes by lifetime with &lt;code&gt;cache_creation_5m_tokens&lt;/code&gt; and &lt;code&gt;cache_creation_1h_tokens&lt;/code&gt;. The &lt;code&gt;tool_decision&lt;/code&gt; event gained &lt;code&gt;classifier_verdict&lt;/code&gt;, &lt;code&gt;permission_mode&lt;/code&gt; and &lt;code&gt;classifier_category&lt;/code&gt;, so you can tell an auto mode classifier decision apart from one made by a permission rule.&lt;/p&gt;

&lt;h2&gt;
  
  
  Codex
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Daybreak is the default again (0.163.0)
&lt;/h3&gt;

&lt;p&gt;The release notes say "Daybreak is enabled by default for eligible accounts." In v0.161.0 it required &lt;code&gt;--enable cli_daybreak&lt;/code&gt; or &lt;code&gt;features.cli_daybreak=true&lt;/code&gt;, and &lt;code&gt;daybreak=true&lt;/code&gt; alone was not enough (&lt;a href="https://aicoding-guide.com/en/posts/codex-update-0-161/" rel="noopener noreferrer"&gt;What changed in Codex CLI v0.161 and v0.162&lt;/a&gt;). Five days and a reversal later, this is not a setting to treat as settled.&lt;/p&gt;

&lt;h3&gt;
  
  
  /config and steering (0.163.0)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;/config&lt;/code&gt;&lt;/strong&gt;: search preferences across categories, change supported ones in place, and see which changes need a restart&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Follow-ups mid-response&lt;/strong&gt;: send a follow-up while Codex is responding to steer it immediately. Interrupting a turn also stops running Code Mode cells and nested tool calls&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Leader key in &lt;code&gt;/keymap&lt;/code&gt;&lt;/strong&gt;: the default is &lt;code&gt;Ctrl+X&lt;/code&gt;. Voice mute moved to &lt;code&gt;F9&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Parallel read-only tools&lt;/strong&gt;: independent reads such as skills, memories and conversation history now run in parallel&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Network and sandbox (0.163.0)
&lt;/h3&gt;

&lt;p&gt;Three proxy fixes landed: the network proxy now &lt;strong&gt;checks permission before a DNS lookup&lt;/strong&gt;, rejects duplicate &lt;code&gt;Host&lt;/code&gt; headers, and prevents credential aliases from bypassing inspection hooks. Resuming a saved thread now restores its permission and network approvals too.&lt;/p&gt;

&lt;p&gt;One operational change: Codex no longer bundles a patched &lt;code&gt;zsh&lt;/code&gt; and uses its standard shell executor instead. Configurations using the retired shell flags get a migration notice.&lt;/p&gt;

&lt;h2&gt;
  
  
  Gemini CLI
&lt;/h2&gt;

&lt;p&gt;v0.64.0 is fixes only. The notable ones: a CPU hang and swallowed quotes when &lt;code&gt;@&lt;/code&gt; appears in code, file tool operations serialised with atomic writes, and atomic state persistence with recovery from a backup when the file is corrupt. On Windows, ConPTY now forwards the IME cursor position.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to check now
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Decide how you feel about idle compaction. If you do not want conversations summarised unprompted, turn it off in &lt;code&gt;/config&lt;/code&gt; or with &lt;code&gt;"idleCompaction": false&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;If you had explicitly disabled Daybreak in Codex, check its current state — the default moved&lt;/li&gt;
&lt;li&gt;Upgrade Claude Code to 2.1.302 or later if the Read tool image issue matters to you&lt;/li&gt;
&lt;li&gt;Upgrade Codex to 0.163.0 if you restrict network access in the sandbox, for the pre-DNS permission check&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Claude Code now compacts idle conversations: 200K+ tokens left for about 54 minutes&lt;/li&gt;
&lt;li&gt;Turn it off with &lt;code&gt;"idleCompaction": false&lt;/code&gt;, tune it with &lt;code&gt;CLAUDE_CODE_IDLE_COMPACT_MIN_TOKENS&lt;/code&gt;, toggle it in &lt;code&gt;/config&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;CLAUDE_CODE_DISABLE_FILE_MENTIONS&lt;/code&gt; passes &lt;code&gt;@&lt;/code&gt; mentions as paths instead of contents&lt;/li&gt;
&lt;li&gt;Codex 0.163.0 made Daybreak the default again for eligible accounts, reversing v0.161.0&lt;/li&gt;
&lt;li&gt;Gemini CLI v0.64.0 is fixes only&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>weeklydigest</category>
      <category>updates</category>
      <category>claudecode</category>
      <category>codex</category>
    </item>
    <item>
      <title>Claude Code on Windows, native or WSL, and what trips people up</title>
      <dc:creator>aicoding-guide</dc:creator>
      <pubDate>Fri, 16 Oct 2026 19:22:28 +0000</pubDate>
      <link>https://dev.to/aicoding-guide/claude-code-on-windows-native-or-wsl-and-what-trips-people-up-3em3</link>
      <guid>https://dev.to/aicoding-guide/claude-code-on-windows-native-or-wsl-and-what-trips-people-up-3em3</guid>
      <description>&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://aicoding-guide.com/en/posts/claude-code-windows-setup/" rel="noopener noreferrer"&gt;https://aicoding-guide.com&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Claude Code started out aimed at macOS and Linux, with Windows users pointed at WSL. There is now a &lt;strong&gt;native Windows build&lt;/strong&gt; you can run straight from PowerShell. Which one to choose comes down to one question: &lt;strong&gt;do you need sandboxing?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This article compares the two, gives the install steps for each, and collects the things that actually trip people up.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Key point&lt;/strong&gt;&lt;br&gt;
What you will learn&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Native versus WSL, and the sandboxing difference that decides it&lt;/li&gt;
&lt;li&gt;Install steps for each, and whether Git for Windows matters&lt;/li&gt;
&lt;li&gt;The gotchas: hooks, paths, encoding and line endings&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Native versus WSL 2
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Native Windows&lt;/th&gt;
&lt;th&gt;WSL 2&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Runs on&lt;/td&gt;
&lt;td&gt;Windows directly&lt;/td&gt;
&lt;td&gt;Linux inside WSL (Ubuntu, etc.)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Requires&lt;/td&gt;
&lt;td&gt;Nothing; Git for Windows is optional&lt;/td&gt;
&lt;td&gt;WSL 2 enabled&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sandboxing&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Not supported&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Supported&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Shell tool&lt;/td&gt;
&lt;td&gt;Git Bash when Git for Windows is installed, otherwise the PowerShell tool&lt;/td&gt;
&lt;td&gt;bash / zsh&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Where projects live&lt;/td&gt;
&lt;td&gt;Windows drives (&lt;code&gt;C:\...&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;Inside WSL (&lt;code&gt;/home/...&lt;/code&gt;) is recommended&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Linux tooling such as Docker&lt;/td&gt;
&lt;td&gt;Needs a Windows build&lt;/td&gt;
&lt;td&gt;Linux builds work as-is&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Suits&lt;/td&gt;
&lt;td&gt;Windows-native development (.NET, Node)&lt;/td&gt;
&lt;td&gt;Linux toolchains, or sandboxed command execution&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;WSL 1 is the third option, for when WSL 2 is unavailable; like native Windows, it does not support sandboxing.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Touching Windows files from WSL is slow&lt;/strong&gt;&lt;br&gt;
Working on a project under &lt;code&gt;/mnt/c/...&lt;/code&gt; from WSL makes file I/O dramatically slower. If you choose WSL, keep the project inside WSL, under &lt;code&gt;~/projects/&lt;/code&gt; for example.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Installing the native build
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Git for Windows (optional)
&lt;/h3&gt;

&lt;p&gt;The documentation calls Git for Windows optional. With it, Git Bash backs the &lt;a href="https://code.claude.com/docs/en/tools-reference" rel="noopener noreferrer"&gt;Bash tool&lt;/a&gt;; without it, Claude Code runs shell commands through the PowerShell tool. If your hooks and scripts assume bash, install it. The defaults from &lt;a href="https://git-scm.com/download/win" rel="noopener noreferrer"&gt;Git for Windows&lt;/a&gt; are fine.&lt;/p&gt;

&lt;p&gt;With Git for Windows installed, the PowerShell tool is available alongside Bash: on by default for claude.ai and Console accounts, and enabled with &lt;code&gt;CLAUDE_CODE_USE_POWERSHELL_TOOL=1&lt;/code&gt; in Amazon Bedrock, Google Cloud's Agent Platform and Microsoft Foundry sessions. Set it to &lt;code&gt;0&lt;/code&gt; to turn the tool off.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Install Claude Code
&lt;/h3&gt;

&lt;p&gt;Open PowerShell and run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;irm&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;https://claude.ai/install.ps1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;iex&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In CMD the command is different — your prompt shows &lt;code&gt;PS C:\&lt;/code&gt; in PowerShell and &lt;code&gt;C:\&lt;/code&gt; without the &lt;code&gt;PS&lt;/code&gt; in CMD:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="nb"&gt;curl&lt;/span&gt; &lt;span class="na"&gt;-fsSL &lt;/span&gt;&lt;span class="kd"&gt;https&lt;/span&gt;://claude.ai/install.cmd &lt;span class="na"&gt;-o &lt;/span&gt;&lt;span class="kd"&gt;install&lt;/span&gt;.cmd &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="kd"&gt;install&lt;/span&gt;.cmd &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;del&lt;/span&gt; &lt;span class="kd"&gt;install&lt;/span&gt;.cmd
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;WinGet works too, but a WinGet install does not auto-update, so run &lt;code&gt;winget upgrade Anthropic.ClaudeCode&lt;/code&gt; periodically:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;winget&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;install&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Anthropic.ClaudeCode&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The npm package is another option and needs Node.js 22 or later. You do not need to run the installer as Administrator.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Start it and check
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;cd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;C:\path\to\project&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;claude&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The first run prompts you to log in. &lt;code&gt;claude doctor&lt;/code&gt; reports installation health and settings-file validation errors without starting a session.&lt;/p&gt;

&lt;p&gt;If Claude Code cannot find Git Bash, point at it in your settings file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"env"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"CLAUDE_CODE_GIT_BASH_PATH"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"C:&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;Program Files&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;Git&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;bin&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;bash.exe"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Installing in WSL
&lt;/h2&gt;

&lt;p&gt;Sandboxed command execution requires WSL 2; WSL 1 does not support it.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Run &lt;code&gt;wsl --install&lt;/code&gt; in an elevated PowerShell and restart. Ubuntu is installed by default.&lt;/li&gt;
&lt;li&gt;Open the Ubuntu terminal and install Node.js if you plan to use the npm package (nvm is the easy route).&lt;/li&gt;
&lt;li&gt;Install with the Linux command — you run it inside the WSL terminal, not from PowerShell or CMD:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://claude.ai/install.sh | bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For VS Code, install the WSL extension, open a folder inside WSL, and install the Claude Code extension into WSL.&lt;/p&gt;

&lt;h2&gt;
  
  
  What trips people up
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Hooks and scripts run through Git Bash
&lt;/h3&gt;

&lt;p&gt;With Git for Windows installed, the Bash tool uses Git Bash, so PowerShell cmdlets are not available directly. Invoke PowerShell explicitly instead:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"hooks"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"PostToolUse"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"matcher"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Edit|Write"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"hooks"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"powershell -NoProfile -File .claude/hooks/format.ps1"&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For hook basics, see &lt;a href="https://aicoding-guide.com/en/posts/claude-code-hooks-lint-format/" rel="noopener noreferrer"&gt;Run lint and format on save with Claude Code hooks&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Writing paths
&lt;/h3&gt;

&lt;p&gt;In permission patterns and &lt;code&gt;CLAUDE.md&lt;/code&gt;, forward slashes (&lt;code&gt;src/**&lt;/code&gt;) work on Windows too. Avoid backslashes, which need escaping inside JSON.&lt;/p&gt;

&lt;h3&gt;
  
  
  Encoding
&lt;/h3&gt;

&lt;p&gt;If command output comes back garbled, set PowerShell's output encoding to UTF-8:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;]::&lt;/span&gt;&lt;span class="n"&gt;OutputEncoding&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;System.Text.Encoding&lt;/span&gt;&lt;span class="p"&gt;]::&lt;/span&gt;&lt;span class="n"&gt;UTF8&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Line endings
&lt;/h3&gt;

&lt;p&gt;A &lt;code&gt;CLAUDE.md&lt;/code&gt; or hook script saved with CRLF by a Windows editor can fail under Git Bash when a stray &lt;code&gt;\r&lt;/code&gt; ends up in the script. Set &lt;code&gt;*.sh text eol=lf&lt;/code&gt; in &lt;code&gt;.gitattributes&lt;/code&gt; and save scripts with LF.&lt;/p&gt;

&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Install natively from PowerShell with &lt;code&gt;irm https://claude.ai/install.ps1 | iex&lt;/code&gt;; Git for Windows is optional, and without it the PowerShell tool runs commands&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sandboxing means WSL 2.&lt;/strong&gt; Native Windows and WSL 1 do not support it. Keep projects inside WSL when you go that route&lt;/li&gt;
&lt;li&gt;Write hooks and scripts for Git Bash, and keep line endings at LF&lt;/li&gt;
&lt;li&gt;Fix garbled output with UTF-8 output encoding, and use forward slashes in paths&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>claudecode</category>
      <category>windows</category>
      <category>wsl</category>
      <category>setup</category>
    </item>
    <item>
      <title>Run Claude Code in GitHub Actions with claude-code-action</title>
      <dc:creator>aicoding-guide</dc:creator>
      <pubDate>Fri, 16 Oct 2026 19:22:27 +0000</pubDate>
      <link>https://dev.to/aicoding-guide/run-claude-code-in-github-actions-with-claude-code-action-323o</link>
      <guid>https://dev.to/aicoding-guide/run-claude-code-in-github-actions-with-claude-code-action-323o</guid>
      <description>&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://aicoding-guide.com/en/posts/claude-code-github-actions/" rel="noopener noreferrer"&gt;https://aicoding-guide.com&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Comment "&lt;a class="mentioned-user" href="https://dev.to/claude"&gt;@claude&lt;/a&gt; fix this bug" on an issue and have Claude Code implement the fix and open a pull request. Have a review appear automatically when a PR opens. Both come from the official &lt;strong&gt;claude-code-action&lt;/strong&gt;, configured with workflow files in your repository.&lt;/p&gt;

&lt;p&gt;This article covers setup, the two basic configurations — mention response and automated review — and how to limit permissions and cost.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Key point&lt;/strong&gt;&lt;br&gt;
What you will learn&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Setting up with &lt;code&gt;/install-github-app&lt;/code&gt;, and which authentication secret to use&lt;/li&gt;
&lt;li&gt;The workflow that responds to &lt;code&gt;@claude&lt;/code&gt; mentions&lt;/li&gt;
&lt;li&gt;The automated review workflow, who can trigger runs, and how to cap cost&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Setting up
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Run &lt;code&gt;/install-github-app&lt;/code&gt; from Claude Code inside the repository. It installs the Claude GitHub App, sets up the authentication secret, and pushes a branch with the workflow files, opening a pull request for you to create. You need admin access to the repository, and the GitHub CLI installed and authenticated with &lt;code&gt;gh auth login&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Register the authentication secret. Use &lt;code&gt;ANTHROPIC_API_KEY&lt;/code&gt; for a Claude API key from the Claude Console, or &lt;code&gt;CLAUDE_CODE_OAUTH_TOKEN&lt;/code&gt; for a subscription token generated with &lt;code&gt;claude setup-token&lt;/code&gt;. In the workflow, pass them to &lt;code&gt;anthropic_api_key&lt;/code&gt; and &lt;code&gt;claude_code_oauth_token&lt;/code&gt; respectively.&lt;/li&gt;
&lt;li&gt;Create and merge the pull request. &lt;code&gt;@claude&lt;/code&gt; then works in the repository.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;code&gt;/install-github-app&lt;/code&gt; only works with github.com repositories; on a gitlab.com or bitbucket.org remote it prints a notice and exits. For manual setup, install the &lt;a href="https://github.com/apps/claude" rel="noopener noreferrer"&gt;Claude GitHub App&lt;/a&gt; yourself, add the secret, and copy &lt;code&gt;examples/claude.yml&lt;/code&gt; into &lt;code&gt;.github/workflows/&lt;/code&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Glossary&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;The GitHub App and &lt;code&gt;GITHUB_TOKEN&lt;/code&gt;&lt;/strong&gt;: by default the action authenticates as the Claude GitHub App. If you pass &lt;code&gt;github_token: ${{ secrets.GITHUB_TOKEN }}&lt;/code&gt; instead, GitHub won't trigger workflows on the commits Claude makes — the documented fix for "CI not running on Claude's commits" is to remove that line.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Configuration 1: respond to &lt;a class="mentioned-user" href="https://dev.to/claude"&gt;@claude&lt;/a&gt; mentions
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Claude Code&lt;/span&gt;
&lt;span class="na"&gt;on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;issue_comment&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;types&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;created&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
  &lt;span class="na"&gt;pull_request_review_comment&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;types&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;created&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;

&lt;span class="na"&gt;jobs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;claude&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;if&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;contains(github.event.comment.body, '@claude')&lt;/span&gt;
    &lt;span class="na"&gt;runs-on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ubuntu-latest&lt;/span&gt;
    &lt;span class="na"&gt;permissions&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;contents&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;write&lt;/span&gt;
      &lt;span class="na"&gt;pull-requests&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;write&lt;/span&gt;
      &lt;span class="na"&gt;issues&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;write&lt;/span&gt;
      &lt;span class="na"&gt;id-token&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;write&lt;/span&gt;
      &lt;span class="na"&gt;actions&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;read&lt;/span&gt;
    &lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/checkout@v6&lt;/span&gt;
        &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;fetch-depth&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;anthropics/claude-code-action@v1&lt;/span&gt;
        &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;anthropic_api_key&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${{ secrets.ANTHROPIC_API_KEY }}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;id-token: write&lt;/code&gt; is required for the action's default GitHub App authentication, and &lt;code&gt;actions: read&lt;/code&gt; lets Claude read CI results on PRs. With no &lt;code&gt;prompt&lt;/code&gt; input, the action runs in &lt;strong&gt;interactive mode&lt;/strong&gt; and waits for the trigger phrase — &lt;code&gt;@claude&lt;/code&gt; by default, changeable with &lt;code&gt;trigger_phrase&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Requests that work well:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;On an issue: "&lt;a class="mentioned-user" href="https://dev.to/claude"&gt;@claude&lt;/a&gt; reproduce this and open a PR with a fix"&lt;/li&gt;
&lt;li&gt;On a review comment: "&lt;a class="mentioned-user" href="https://dev.to/claude"&gt;@claude&lt;/a&gt; add error handling to this function"&lt;/li&gt;
&lt;li&gt;On a PR: "&lt;a class="mentioned-user" href="https://dev.to/claude"&gt;@claude&lt;/a&gt; add tests for what this change affects"&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Configuration 2: review automatically when a PR opens
&lt;/h2&gt;

&lt;p&gt;Supplying a &lt;code&gt;prompt&lt;/code&gt; input puts the action in &lt;strong&gt;automation mode&lt;/strong&gt;, which runs without waiting for a mention. The configuration the documentation now shows calls the &lt;code&gt;code-review&lt;/code&gt; plugin's skill rather than a free-text prompt:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Code Review&lt;/span&gt;
&lt;span class="na"&gt;on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;pull_request&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;types&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;opened&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;synchronize&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;ready_for_review&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;reopened&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;

&lt;span class="na"&gt;jobs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;review&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;runs-on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ubuntu-latest&lt;/span&gt;
    &lt;span class="na"&gt;permissions&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;contents&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;read&lt;/span&gt;
      &lt;span class="na"&gt;pull-requests&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;read&lt;/span&gt;
      &lt;span class="na"&gt;issues&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;read&lt;/span&gt;
      &lt;span class="na"&gt;id-token&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;write&lt;/span&gt;
    &lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/checkout@v6&lt;/span&gt;
        &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;fetch-depth&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;anthropics/claude-code-action@v1&lt;/span&gt;
        &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;anthropic_api_key&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${{ secrets.ANTHROPIC_API_KEY }}&lt;/span&gt;
          &lt;span class="na"&gt;plugin_marketplaces&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://github.com/anthropics/claude-code.git"&lt;/span&gt;
          &lt;span class="na"&gt;plugins&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;code-review@claude-code-plugins"&lt;/span&gt;
          &lt;span class="na"&gt;prompt&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;/code-review:code-review&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;--comment&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;${{&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;github.repository&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;}}/pull/${{&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;github.event.pull_request.number&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;}}"&lt;/span&gt;
          &lt;span class="na"&gt;claude_args&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;--allowedTools&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;"mcp__github_inline_comment__create_inline_comment"'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Without --comment, nothing is posted&lt;/strong&gt;&lt;br&gt;
In automation mode, "By default, results appear in the workflow run log rather than a comment." &lt;code&gt;--comment&lt;/code&gt; is what makes Claude post on the pull request. Keep the &lt;code&gt;claude_args&lt;/code&gt; line too: even though the skill's own &lt;code&gt;allowed-tools&lt;/code&gt; frontmatter names the same tool, the action starts the inline-comment MCP server only when &lt;code&gt;--allowedTools&lt;/code&gt; in &lt;code&gt;claude_args&lt;/code&gt; names it.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;With a free-text &lt;code&gt;prompt&lt;/code&gt; you have to grant the tools yourself: "For a plain-text prompt, Claude has no shell or GitHub API access until you grant the tools the prompt needs" — through &lt;code&gt;--allowedTools&lt;/code&gt; in &lt;code&gt;claude_args&lt;/code&gt;, or a &lt;code&gt;permissions.allow&lt;/code&gt; rule in the &lt;code&gt;settings&lt;/code&gt; input.&lt;/p&gt;

&lt;p&gt;Claude skips draft and closed pull requests, ones it judges not to need review, and ones that already carry a comment from Claude.&lt;/p&gt;

&lt;h2&gt;
  
  
  Limiting permissions and cost
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Goal&lt;/th&gt;
&lt;th&gt;How&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Keep outsiders from triggering runs&lt;/td&gt;
&lt;td&gt;Already checked by the action (see below). Narrow further with an &lt;code&gt;if:&lt;/code&gt; on &lt;code&gt;github.event.comment.author_association&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Minimize write access&lt;/td&gt;
&lt;td&gt;Give the review workflow &lt;code&gt;contents: read&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Restrict the tools&lt;/td&gt;
&lt;td&gt;Pass &lt;code&gt;--allowedTools&lt;/code&gt; in &lt;code&gt;claude_args&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cap the work per run&lt;/td&gt;
&lt;td&gt;Pass &lt;code&gt;--max-turns&lt;/code&gt;, and set a workflow-level timeout&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Enforce your project's rules&lt;/td&gt;
&lt;td&gt;Put them in the repository's &lt;code&gt;CLAUDE.md&lt;/code&gt;, which the action reads&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Glossary&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Who can trigger a run is checked by the action itself&lt;/strong&gt;: two checks run before Claude starts, and the run fails if either rejects it. &lt;strong&gt;Write access&lt;/strong&gt; — on issue and pull request events the triggering user must have write access to the repository; to allow specific users without it, set &lt;code&gt;allowed_non_write_users&lt;/code&gt; and pass your own &lt;code&gt;github_token&lt;/code&gt;. &lt;strong&gt;Human actor&lt;/strong&gt; — a bot actor is rejected unless listed in &lt;code&gt;allowed_bots&lt;/code&gt;, which keeps bots from triggering Claude in a loop. That check also applies to scheduled runs, which GitHub attributes to a repository user.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Secrets and pull requests from forks&lt;/strong&gt;&lt;br&gt;
On public repositories, GitHub withholds secrets from runs triggered by fork pull requests, so a review workflow runs only on pull requests from branches in the same repository. Before reaching for &lt;code&gt;pull_request_target&lt;/code&gt; to change that, understand that it runs the fork's code with your secrets available.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  How this relates to CLAUDE.md
&lt;/h2&gt;

&lt;p&gt;Claude inside the action reads the repository's &lt;code&gt;CLAUDE.md&lt;/code&gt; the same as it does locally — the documentation lists "Define project standards in CLAUDE.md" as a best practice, and notes that Claude reads it on every run, so keeping it concise also keeps cost down. Review criteria and prohibitions belong there rather than in the workflow's &lt;code&gt;prompt&lt;/code&gt;, so you maintain one copy (&lt;a href="https://aicoding-guide.com/en/posts/claude-md-how-to-write/" rel="noopener noreferrer"&gt;How to write CLAUDE.md&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;For a lighter setup that calls &lt;code&gt;claude -p&lt;/code&gt; directly instead of using the official action, see &lt;a href="https://aicoding-guide.com/en/posts/claude-code-headless-ci/" rel="noopener noreferrer"&gt;Run Claude Code headless in CI&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;/install-github-app&lt;/code&gt; installs the app and workflows; register &lt;code&gt;ANTHROPIC_API_KEY&lt;/code&gt; or &lt;code&gt;CLAUDE_CODE_OAUTH_TOKEN&lt;/code&gt; as the secret&lt;/li&gt;
&lt;li&gt;No &lt;code&gt;prompt&lt;/code&gt; means interactive mode and the &lt;code&gt;@claude&lt;/code&gt; trigger; a &lt;code&gt;prompt&lt;/code&gt; means automation mode&lt;/li&gt;
&lt;li&gt;In automation mode results go to the run log unless you pass &lt;code&gt;--comment&lt;/code&gt; and name the inline-comment tool in &lt;code&gt;claude_args&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Write access and a human-actor check already gate who can trigger runs; &lt;code&gt;allowed_bots&lt;/code&gt; and &lt;code&gt;allowed_non_write_users&lt;/code&gt; adjust them&lt;/li&gt;
&lt;li&gt;Keep review criteria in &lt;code&gt;CLAUDE.md&lt;/code&gt;, and cap cost with &lt;code&gt;--max-turns&lt;/code&gt;, a smaller model, and workflow timeouts&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>claudecode</category>
      <category>githubactions</category>
      <category>ci</category>
      <category>automation</category>
    </item>
  </channel>
</rss>
