<?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>Forem: member_0af6418a</title>
    <description>The latest articles on Forem by member_0af6418a (@member_0af6418a).</description>
    <link>https://forem.com/member_0af6418a</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3922814%2F8702938f-4a0f-4d34-8727-f7d838c522d5.png</url>
      <title>Forem: member_0af6418a</title>
      <link>https://forem.com/member_0af6418a</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/member_0af6418a"/>
    <language>en</language>
    <item>
      <title>Codex + Tencent LKEAP 401: It Was Not the Key</title>
      <dc:creator>member_0af6418a</dc:creator>
      <pubDate>Mon, 18 May 2026 14:00:03 +0000</pubDate>
      <link>https://forem.com/member_0af6418a/codex-tencent-lkeap-401-it-was-not-the-key-3i35</link>
      <guid>https://forem.com/member_0af6418a/codex-tencent-lkeap-401-it-was-not-the-key-3i35</guid>
      <description>&lt;p&gt;I ran into a failure that looked like an authentication problem at first:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;unexpected status 401 Unauthorized
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The setup was Codex against Tencent Cloud LKEAP Token Plan, using an OpenAI-compatible Chat Completions endpoint.&lt;/p&gt;

&lt;p&gt;The important clue was not the &lt;code&gt;401&lt;/code&gt;. It was the final URL:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://api.lkeap.cloud.tencent.com/plan/v3/chat/completions/responses
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That URL shape is already wrong.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq4dldh5d4ghd52p043ir.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq4dldh5d4ghd52p043ir.png" alt="Codex LKEAP protocol path debugging cover" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The config that caused it
&lt;/h2&gt;

&lt;p&gt;The provider entry looked roughly like this:&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="nn"&gt;[model_providers.custom]&lt;/span&gt;
&lt;span class="py"&gt;name&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"custom"&lt;/span&gt;
&lt;span class="py"&gt;wire_api&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"responses"&lt;/span&gt;
&lt;span class="py"&gt;requires_openai_auth&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
&lt;span class="py"&gt;base_url&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"https://api.lkeap.cloud.tencent.com/plan/v3/chat/completions"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The mistake is subtle.&lt;/p&gt;

&lt;p&gt;The Tencent endpoint in this setup is Chat Completions-style:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/plan/v3/chat/completions
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;But newer Codex expects a Responses API-style provider when &lt;code&gt;wire_api = "responses"&lt;/code&gt; is used. So Codex appended &lt;code&gt;/responses&lt;/code&gt; to a base URL that already ended in &lt;code&gt;/chat/completions&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;That produced:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/plan/v3/chat/completions/responses
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb4dtec9f9srgd3gk1bx6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb4dtec9f9srgd3gk1bx6.png" alt="The broken URL revealed the root cause" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;At that point, rotating the API key is unlikely to help. The request is already going to the wrong protocol path.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why not switch Codex back to Chat Completions?
&lt;/h2&gt;

&lt;p&gt;That was the next thing I checked.&lt;/p&gt;

&lt;p&gt;The newer Codex configuration rejects &lt;code&gt;wire_api = "chat"&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;invalid configuration: `wire_api = "chat"` is no longer supported.
How to fix: set `wire_api = "responses"` in your provider config.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;So this is not just a missing slash or a bad base URL. It is a protocol mismatch:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Codex wants to speak Responses API.&lt;/li&gt;
&lt;li&gt;The LKEAP endpoint I was using speaks Chat Completions.&lt;/li&gt;
&lt;li&gt;"OpenAI-compatible" does not automatically mean "compatible with every OpenAI client mode."&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That last point is the real lesson.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd1p93qkjtdrdc9dlfvsa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd1p93qkjtdrdc9dlfvsa.png" alt="Responses API and Chat Completions are different protocol shapes" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  My debugging order now
&lt;/h2&gt;

&lt;p&gt;For this class of issue, I would check things in this order:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Inspect the final request URL.&lt;/li&gt;
&lt;li&gt;Confirm the client's wire protocol.&lt;/li&gt;
&lt;li&gt;Confirm the upstream endpoint shape.&lt;/li&gt;
&lt;li&gt;Only then spend time on keys and permissions.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If the URL contains patterns like these, stop and look at path composition first:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/chat/completions/responses
/v1/v1
/responses/chat/completions
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The status code may be a symptom. The URL shape is often the evidence.&lt;/p&gt;

&lt;h2&gt;
  
  
  Workaround: local protocol adapter
&lt;/h2&gt;

&lt;p&gt;The workaround I tested toward was a small local Node.js proxy.&lt;/p&gt;

&lt;p&gt;Codex calls a local Responses-shaped endpoint:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;http://127.0.0.1:15722/v1/responses
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The local proxy converts that into a Chat Completions request and forwards it to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://api.lkeap.cloud.tencent.com/plan/v3/chat/completions
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The Codex config then points to the local proxy:&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="py"&gt;model_provider&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"tencent_lkeap_proxy"&lt;/span&gt;
&lt;span class="py"&gt;model&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"glm-5.1"&lt;/span&gt;
&lt;span class="py"&gt;disable_response_storage&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;

&lt;span class="nn"&gt;[model_providers.tencent_lkeap_proxy]&lt;/span&gt;
&lt;span class="py"&gt;name&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"Tencent LKEAP via local Responses proxy"&lt;/span&gt;
&lt;span class="py"&gt;wire_api&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"responses"&lt;/span&gt;
&lt;span class="py"&gt;base_url&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"http://127.0.0.1:15722/v1"&lt;/span&gt;
&lt;span class="py"&gt;requires_openai_auth&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
&lt;span class="py"&gt;env_key&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"OPENAI_API_KEY"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The real Tencent key stays in the proxy process environment:&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="nv"&gt;$&lt;/span&gt;&lt;span class="nn"&gt;env&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nv"&gt;TENCENT_LKEAP_API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"REDACTED"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nv"&gt;$&lt;/span&gt;&lt;span class="nn"&gt;env&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nv"&gt;TENCENT_LKEAP_MODEL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"glm-5.1"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;node&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;tools\codex-responses-to-chat-proxy.mjs&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Codex still expects an OpenAI auth variable for this provider shape, so I used a local dummy value:&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="nv"&gt;$&lt;/span&gt;&lt;span class="nn"&gt;env&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nv"&gt;OPENAI_API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"local-proxy-dummy"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The proxy ignores that dummy value and uses &lt;code&gt;TENCENT_LKEAP_API_KEY&lt;/code&gt; upstream.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6js438mg8hwx4x29868k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6js438mg8hwx4x29868k.png" alt="Use a local proxy to translate Responses requests to Chat Completions" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Boundary
&lt;/h2&gt;

&lt;p&gt;I would not describe this as a complete drop-in replacement.&lt;/p&gt;

&lt;p&gt;What was verified in the original debugging record:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the failure path was identified&lt;/li&gt;
&lt;li&gt;the local proxy script was created&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;node --check&lt;/code&gt; passed&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Still to verify:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;full end-to-end smoke test with a real LKEAP key&lt;/li&gt;
&lt;li&gt;streaming behavior under longer tasks&lt;/li&gt;
&lt;li&gt;Codex tool-call traffic&lt;/li&gt;
&lt;li&gt;cancellation, timeout, and error mapping&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That distinction matters. A protocol adapter can be useful, but it should be treated as an adapter to harden, not as magic compatibility.&lt;/p&gt;

&lt;p&gt;The practical takeaway:&lt;/p&gt;

&lt;p&gt;When an AI coding tool fails against an "OpenAI-compatible" endpoint, do not ask only whether the key is valid. Ask whether the client and server are actually speaking the same API shape.&lt;/p&gt;

&lt;p&gt;Original version:&lt;br&gt;
&lt;a href="https://kunpeng-ai.com/en/blog/codex-lkeap-protocol-path-debugging/" rel="noopener noreferrer"&gt;https://kunpeng-ai.com/en/blog/codex-lkeap-protocol-path-debugging/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>opensource</category>
      <category>github</category>
    </item>
    <item>
      <title>Can Claude Code Still Use DeepSeek? A Windows Test with cc-switch</title>
      <dc:creator>member_0af6418a</dc:creator>
      <pubDate>Fri, 15 May 2026 13:35:06 +0000</pubDate>
      <link>https://forem.com/member_0af6418a/can-claude-code-still-use-deepseek-a-windows-test-with-cc-switch-2ahl</link>
      <guid>https://forem.com/member_0af6418a/can-claude-code-still-use-deepseek-a-windows-test-with-cc-switch-2ahl</guid>
      <description>&lt;p&gt;A lot of older third-party Claude model routes have become unreliable. I tested a narrower path on Windows: Claude Code through &lt;code&gt;cc-switch&lt;/code&gt; to DeepSeek.&lt;/p&gt;

&lt;p&gt;Important boundary first: &lt;code&gt;cc-switch&lt;/code&gt; is not a Claude jailbreak, and it is not a universal adapter for every coding agent. It mainly helps with the Claude Code provider route. Codex cannot use this path directly.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr7to1itq7tl4nujj0eem.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr7to1itq7tl4nujj0eem.png" alt="Claude Code + DeepSeek tested" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What cc-switch actually solves
&lt;/h2&gt;

&lt;p&gt;It reduces manual config drift.&lt;/p&gt;

&lt;p&gt;Instead of hand-editing model name, base URL, and API key every time, you keep them as named providers and switch between them.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fizcypr6v9awh3k0pg4du.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fizcypr6v9awh3k0pg4du.png" alt="Install cc-switch" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The package I used:&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;npm&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="nt"&gt;-g&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="nx"&gt;adithya-13/cc-switch&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Windows traps
&lt;/h2&gt;

&lt;p&gt;Two details mattered in my test.&lt;/p&gt;

&lt;p&gt;First, PowerShell may block the npm-generated &lt;code&gt;.ps1&lt;/code&gt; shim. When that happens, try:&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;cmd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;/c&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;cc-switch&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Second, do not save the provider JSON config with a BOM. I hit a JSON parsing failure that disappeared after saving the config as UTF-8 without BOM.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxdjydnarz7mtqalajqlz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxdjydnarz7mtqalajqlz.png" alt="Windows traps" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Verification
&lt;/h2&gt;

&lt;p&gt;I would not call the route ready until:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Active: DeepSeek
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;is visible, and the doctor check passes.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhyjrm53g242zohz6ts3b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhyjrm53g242zohz6ts3b.png" alt="Active DeepSeek verification" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Only then did I restart Claude Code and test a small task.&lt;/p&gt;

&lt;h2&gt;
  
  
  Takeaway
&lt;/h2&gt;

&lt;p&gt;This path is useful if you already use Claude Code and want a cleaner DeepSeek provider setup on Windows.&lt;/p&gt;

&lt;p&gt;It is not a general solution for every agent. The practical value is narrower: make the provider state visible, avoid hand-edited config drift, and keep Windows shell/encoding issues from masquerading as model failures.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>opensource</category>
      <category>github</category>
    </item>
    <item>
      <title>Windows agents keep freezing: lessons from an OpenClaw merge and a Hermes maintainer reply</title>
      <dc:creator>member_0af6418a</dc:creator>
      <pubDate>Wed, 13 May 2026 14:11:49 +0000</pubDate>
      <link>https://forem.com/member_0af6418a/windows-agents-keep-freezing-lessons-from-an-openclaw-merge-and-a-hermes-maintainer-reply-5hm4</link>
      <guid>https://forem.com/member_0af6418a/windows-agents-keep-freezing-lessons-from-an-openclaw-merge-and-a-hermes-maintainer-reply-5hm4</guid>
      <description>&lt;p&gt;Windows is a hard place to run long-lived AI coding agents.&lt;/p&gt;

&lt;p&gt;The failure mode is often quiet. A terminal window may still be open. A process may still exist. But halfway through a task, the gateway stops responding, memory search breaks, or a background service silently exits.&lt;/p&gt;

&lt;p&gt;This post summarizes two concrete trails from recent work:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;OpenClaw merged a fix for a transient Windows file-lock problem in memory index swaps.&lt;/li&gt;
&lt;li&gt;Hermes did not merge our Windows gateway helper PR, but a maintainer clarified how this work fits into a broader Windows support plan.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  OpenClaw: transient file locks during memory index swaps
&lt;/h2&gt;

&lt;p&gt;PR:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/openclaw/openclaw/pull/76024" rel="noopener noreferrer"&gt;https://github.com/openclaw/openclaw/pull/76024&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;During memory reindexing, OpenClaw swaps SQLite index files. On Windows, &lt;code&gt;fs.rename&lt;/code&gt; can fail when a file is briefly held by the system, antivirus software, an indexer, or another process.&lt;/p&gt;

&lt;p&gt;The errors can look like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;EBUSY
EPERM
EACCES
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;From the user side, the symptom may be vague: memory search fails, or an agent task gets stuck.&lt;/p&gt;

&lt;p&gt;The merged fix is intentionally narrow. It adds bounded retries around the atomic index swap path. It does not rewrite the memory system or turn every failure into a retry.&lt;/p&gt;

&lt;p&gt;That is the kind of stability work that tends to matter in real agent use.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cleanup paths matter too
&lt;/h2&gt;

&lt;p&gt;Related OpenClaw trail:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/openclaw/openclaw/pull/59137" rel="noopener noreferrer"&gt;https://github.com/openclaw/openclaw/pull/59137&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This was not our original PR. We contributed a focused follow-up around cleanup ordering: close the temporary database before trying to remove temporary SQLite files.&lt;/p&gt;

&lt;p&gt;On Windows, that detail matters. If the file handle is still open, the cleanup path can fail even if the main logic is correct.&lt;/p&gt;

&lt;h2&gt;
  
  
  Hermes: gateway lifecycle on Windows
&lt;/h2&gt;

&lt;p&gt;PR:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/NousResearch/hermes-agent/pull/15846" rel="noopener noreferrer"&gt;https://github.com/NousResearch/hermes-agent/pull/15846&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The Hermes proposal focused on a safer Windows gateway lifecycle:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;start through a user-level Scheduled Task;&lt;/li&gt;
&lt;li&gt;avoid relying on a visible PowerShell or CMD window;&lt;/li&gt;
&lt;li&gt;track runtime state;&lt;/li&gt;
&lt;li&gt;keep logs;&lt;/li&gt;
&lt;li&gt;provide best-effort restart behavior.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The PR was closed and not merged.&lt;/p&gt;

&lt;p&gt;The maintainer response was still useful: Hermes needs a consolidated Windows design rather than a set of piecemeal native-Windows PRs. The work was catalogued into the internal Windows support plan and may inform a later consolidated PR.&lt;/p&gt;

&lt;h2&gt;
  
  
  The lesson: do not trust the window
&lt;/h2&gt;

&lt;p&gt;A visible terminal window is not a health check.&lt;/p&gt;

&lt;p&gt;For Windows agents, the boring pieces matter:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;background startup;&lt;/li&gt;
&lt;li&gt;health checks;&lt;/li&gt;
&lt;li&gt;logs;&lt;/li&gt;
&lt;li&gt;bounded retries;&lt;/li&gt;
&lt;li&gt;rollback paths;&lt;/li&gt;
&lt;li&gt;small upgrade tests before using a new version for real work.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;AI-agent demos usually focus on model behavior. Real usage eventually runs into process lifecycle, file locks, environment inheritance, and recovery.&lt;/p&gt;

&lt;p&gt;Those are not side issues. They decide whether the agent can keep working.&lt;/p&gt;

&lt;p&gt;The canonical version with the image cards and evidence trail is here:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://kunpeng-ai.com/en/blog/openclaw-hermes-windows-agent-stability-evidence-trail/" rel="noopener noreferrer"&gt;https://kunpeng-ai.com/en/blog/openclaw-hermes-windows-agent-stability-evidence-trail/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>github</category>
      <category>ai</category>
      <category>programming</category>
    </item>
    <item>
      <title>DeepSeek TUI on Windows: A Practical Look at a Terminal-Native Coding Agent</title>
      <dc:creator>member_0af6418a</dc:creator>
      <pubDate>Mon, 11 May 2026 03:35:30 +0000</pubDate>
      <link>https://forem.com/member_0af6418a/deepseek-tui-on-windows-a-practical-look-at-a-terminal-native-coding-agent-3odj</link>
      <guid>https://forem.com/member_0af6418a/deepseek-tui-on-windows-a-practical-look-at-a-terminal-native-coding-agent-3odj</guid>
      <description>&lt;p&gt;DeepSeek TUI is an open-source terminal-native coding agent for DeepSeek models.&lt;/p&gt;

&lt;p&gt;Project:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/Hmbown/DeepSeek-TUI" rel="noopener noreferrer"&gt;https://github.com/Hmbown/DeepSeek-TUI&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;At first glance, it is tempting to describe it as "DeepSeek's Claude Code-like tool." That comparison is useful, but only up to a point.&lt;/p&gt;

&lt;p&gt;The more interesting point is this: DeepSeek TUI is not just a terminal chat interface. It is trying to bring the model closer to the actual engineering workspace, where files, shell commands, Git diffs, diagnostics, tool calls, and recovery workflows all matter.&lt;/p&gt;

&lt;p&gt;I tested it on Windows and ran into one practical issue: the tool installed correctly, but the traditional PowerShell window flickered when launching the TUI. Switching to Windows Terminal fixed the problem.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Short Version
&lt;/h2&gt;

&lt;p&gt;DeepSeek TUI is worth watching because it combines several capabilities that a serious coding agent needs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;file reading, search, and editing;&lt;/li&gt;
&lt;li&gt;shell command execution;&lt;/li&gt;
&lt;li&gt;Git context and diffs;&lt;/li&gt;
&lt;li&gt;MCP integration;&lt;/li&gt;
&lt;li&gt;LSP diagnostics;&lt;/li&gt;
&lt;li&gt;session resume;&lt;/li&gt;
&lt;li&gt;workspace snapshots and rollback;&lt;/li&gt;
&lt;li&gt;sub-agent workflows;&lt;/li&gt;
&lt;li&gt;token, cache, and cost visibility.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That makes it closer to an engineering tool than a simple Q&amp;amp;A interface.&lt;/p&gt;

&lt;p&gt;The Windows caveat is also straightforward: if the TUI flickers or fails to render correctly in a legacy console, try Windows Terminal before assuming the install or API key is broken.&lt;/p&gt;

&lt;h2&gt;
  
  
  What DeepSeek TUI Is
&lt;/h2&gt;

&lt;p&gt;The official quickstart is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; deepseek-tui
deepseek &lt;span class="nt"&gt;--version&lt;/span&gt;
deepseek &lt;span class="nt"&gt;--model&lt;/span&gt; auto
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;On first launch, DeepSeek TUI prompts for a DeepSeek API key. You can also configure it ahead of time:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;deepseek auth &lt;span class="nb"&gt;set&lt;/span&gt; &lt;span class="nt"&gt;--provider&lt;/span&gt; deepseek
deepseek auth status
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The project also documents other installation paths, including Scoop on Windows, Cargo, GitHub releases, and Docker images.&lt;/p&gt;

&lt;h2&gt;
  
  
  My Windows Test: Installed, Then Flickered
&lt;/h2&gt;

&lt;p&gt;The installation itself was uneventful:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Install the package globally.&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;deepseek&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Configure the API key.&lt;/li&gt;
&lt;li&gt;Launch the TUI again.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The problem appeared after that. In the traditional PowerShell window, the interface kept flickering and did not enter a stable usable state.&lt;/p&gt;

&lt;p&gt;This is the kind of issue that is easy to misdiagnose. The first instinct is to reinstall the package, rotate the API key, or assume the npm package is broken.&lt;/p&gt;

&lt;p&gt;In this case, the more likely cause was terminal rendering compatibility.&lt;/p&gt;

&lt;p&gt;Modern TUI tools depend on terminal behavior such as ANSI control sequences, cursor refresh, keyboard events, pane rendering, clipboard handling, and sometimes mouse interaction. Legacy console environments can be less reliable here than Windows Terminal.&lt;/p&gt;

&lt;p&gt;After switching to Windows Terminal, DeepSeek TUI launched normally.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why This Category Matters
&lt;/h2&gt;

&lt;h3&gt;
  
  
  It moves the model into the workspace
&lt;/h3&gt;

&lt;p&gt;In a web chat workflow, the model is far away from the project.&lt;/p&gt;

&lt;p&gt;You copy code into the chat. You paste errors back. You run commands manually. You summarize diffs. You decide which files matter.&lt;/p&gt;

&lt;p&gt;A terminal-native coding agent changes that boundary. It can inspect the workspace, read files, run commands, review diffs, and continue from real project state.&lt;/p&gt;

&lt;h3&gt;
  
  
  Code generation is not enough
&lt;/h3&gt;

&lt;p&gt;A coding agent should not only write code. It should help answer operational engineering questions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Which files are involved?&lt;/li&gt;
&lt;li&gt;What changed?&lt;/li&gt;
&lt;li&gt;Did tests or checks run?&lt;/li&gt;
&lt;li&gt;What does the Git diff show?&lt;/li&gt;
&lt;li&gt;Can the workspace be recovered if the change is wrong?&lt;/li&gt;
&lt;li&gt;Are diagnostics fed back into the next repair step?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;DeepSeek TUI's file operations, shell tools, Git context, session recovery, workspace snapshots, and LSP diagnostics all point in that direction.&lt;/p&gt;

&lt;h3&gt;
  
  
  MCP expands the tool boundary
&lt;/h3&gt;

&lt;p&gt;DeepSeek TUI supports MCP. Its documentation describes both directions: it can load MCP servers from &lt;code&gt;~/.deepseek/mcp.json&lt;/code&gt;, and it can also run as an MCP server.&lt;/p&gt;

&lt;p&gt;That matters because real engineering work is not limited to local files. Teams often need databases, browsers, internal docs, issue trackers, deployment systems, or private utilities.&lt;/p&gt;

&lt;h3&gt;
  
  
  LSP diagnostics help close the loop
&lt;/h3&gt;

&lt;p&gt;Generating code is only the first step.&lt;/p&gt;

&lt;p&gt;A developer still needs type errors, lint results, compiler output, and test failures to flow back into the next edit.&lt;/p&gt;

&lt;p&gt;DeepSeek TUI's LSP diagnostic support is important because it helps the agent enter a repair loop: edit, inspect diagnostics, fix, and verify again.&lt;/p&gt;

&lt;h2&gt;
  
  
  Practical Windows Recommendations
&lt;/h2&gt;

&lt;p&gt;If you are testing DeepSeek TUI on Windows, I would start with this sequence:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Install Node.js.&lt;/li&gt;
&lt;li&gt;Install Windows Terminal.&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;npm install -g deepseek-tui&lt;/code&gt; inside Windows Terminal.&lt;/li&gt;
&lt;li&gt;Check the install with &lt;code&gt;deepseek --version&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Launch with &lt;code&gt;deepseek --model auto&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Configure the API key when prompted.&lt;/li&gt;
&lt;li&gt;If the interface flickers, switch terminals before reinstalling.&lt;/li&gt;
&lt;li&gt;Start in a disposable test project.&lt;/li&gt;
&lt;li&gt;Review Git diff and command output after each task.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Final Take
&lt;/h2&gt;

&lt;p&gt;DeepSeek TUI is not just a chat wrapper. It is an open-source attempt to make DeepSeek useful inside a terminal-native engineering workflow.&lt;/p&gt;

&lt;p&gt;Its combination of files, shell, Git, MCP, LSP diagnostics, session recovery, snapshots, sub-agents, and operating modes gives it the shape of a real coding agent.&lt;/p&gt;

&lt;p&gt;The project is still moving quickly, so the experience will vary by platform and terminal. My Windows issue was real, but not severe: Windows Terminal solved it.&lt;/p&gt;

&lt;p&gt;For developers watching the open-source coding-agent space, DeepSeek TUI is worth testing.&lt;/p&gt;

&lt;p&gt;Original version:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://kunpeng-ai.com/en/blog/deepseek-tui-windows-terminal-coding-agent/" rel="noopener noreferrer"&gt;https://kunpeng-ai.com/en/blog/deepseek-tui-windows-terminal-coding-agent/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Project:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/Hmbown/DeepSeek-TUI" rel="noopener noreferrer"&gt;https://github.com/Hmbown/DeepSeek-TUI&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Related workflow thinking:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/kunpeng-ai-lab/agent-collaboration-sop" rel="noopener noreferrer"&gt;https://github.com/kunpeng-ai-lab/agent-collaboration-sop&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>programming</category>
      <category>github</category>
    </item>
  </channel>
</rss>
