<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Rust on KnightLi的博客</title>
        <link>https://knightli.com/zh-tw/tags/rust/</link>
        <description>Recent content in Rust on KnightLi的博客</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh-tw</language>
        <lastBuildDate>Wed, 27 May 2026 13:52:01 +0800</lastBuildDate><atom:link href="https://knightli.com/zh-tw/tags/rust/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>RTK：給 AI 編程代理省 token 的命令列代理工具</title>
        <link>https://knightli.com/zh-tw/2026/05/27/rtk-ai-cli-proxy-token-savings/</link>
        <pubDate>Wed, 27 May 2026 13:52:01 +0800</pubDate>
        
        <guid>https://knightli.com/zh-tw/2026/05/27/rtk-ai-cli-proxy-token-savings/</guid>
        <description>&lt;p&gt;&lt;code&gt;rtk-ai/rtk&lt;/code&gt; 是一個面向 AI 編程代理的命令列代理工具。它的思路很直接：很多 agent 在開發過程中會頻繁呼叫 &lt;code&gt;ls&lt;/code&gt;、&lt;code&gt;cat&lt;/code&gt;、&lt;code&gt;grep&lt;/code&gt;、&lt;code&gt;git status&lt;/code&gt;、&lt;code&gt;git diff&lt;/code&gt;、測試命令和建置命令，而這些命令的原始輸出經常又長又重複。RTK 會在命令輸出進入 LLM 上下文之前先做過濾和壓縮，讓模型看到更短、更有用的結果。&lt;/p&gt;
&lt;p&gt;專案地址：&lt;a class=&#34;link&#34; href=&#34;https://github.com/rtk-ai/rtk&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;rtk-ai/rtk&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;它解決的是什麼問題&#34;&gt;它解決的是什麼問題
&lt;/h2&gt;&lt;p&gt;AI 編程工具真正貴的不只是模型呼叫次數，還有上下文裡被塞進去的無效資訊。&lt;/p&gt;
&lt;p&gt;例如：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;ls -la&lt;/code&gt; 可能輸出大量權限、時間和無關檔案。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;git diff&lt;/code&gt; 可能夾雜很多重複上下文。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pytest&lt;/code&gt;、&lt;code&gt;cargo test&lt;/code&gt;、&lt;code&gt;npm test&lt;/code&gt; 失敗時，最重要的是失敗用例和錯誤堆疊，而不是所有通過項。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;docker ps&lt;/code&gt;、&lt;code&gt;kubectl pods&lt;/code&gt;、&lt;code&gt;aws&lt;/code&gt; 命令往往欄位很多，但 agent 只需要少數關鍵資訊。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;這些輸出如果原樣進入模型上下文，會快速消耗 token。RTK 的目標不是替代這些命令，而是在它們和 AI 編程代理之間加一層「壓縮代理」。&lt;/p&gt;
&lt;h2 id=&#34;rtk-的基本工作方式&#34;&gt;RTK 的基本工作方式
&lt;/h2&gt;&lt;p&gt;RTK README 裡給出的定位是：它會在命令輸出到達 LLM context 之前，對結果做過濾和壓縮。它是一個 Rust 單檔二進位程式，支援大量常見開發命令，並強調低額外開銷。&lt;/p&gt;
&lt;p&gt;它主要做四類處理：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Smart Filtering&lt;/strong&gt;：去掉註解、空白、樣板內容和低價值雜訊。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Grouping&lt;/strong&gt;：把相似項目聚合起來，例如按目錄、錯誤類型或狀態分組。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Truncation&lt;/strong&gt;：保留關鍵上下文，截斷重複或不重要的部分。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Deduplication&lt;/strong&gt;：把重複日誌折疊成更短的計數表達。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;從 agent 的角度看，命令仍然是熟悉的開發命令；變化在於返回給模型的結果更短。&lt;/p&gt;
&lt;h2 id=&#34;支援哪些命令&#34;&gt;支援哪些命令
&lt;/h2&gt;&lt;p&gt;RTK 覆蓋的命令範圍比較偏「日常開發現場」：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;檔案查看：&lt;code&gt;rtk ls&lt;/code&gt;、&lt;code&gt;rtk read&lt;/code&gt;、&lt;code&gt;rtk find&lt;/code&gt;、&lt;code&gt;rtk grep&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Git：&lt;code&gt;rtk git status&lt;/code&gt;、&lt;code&gt;rtk git log&lt;/code&gt;、&lt;code&gt;rtk git diff&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;GitHub CLI：&lt;code&gt;rtk gh pr list&lt;/code&gt;、&lt;code&gt;rtk gh pr view&lt;/code&gt;、&lt;code&gt;rtk gh issue list&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;測試命令：&lt;code&gt;rtk pytest&lt;/code&gt;、&lt;code&gt;rtk go test&lt;/code&gt;、&lt;code&gt;rtk cargo test&lt;/code&gt;、&lt;code&gt;rtk vitest&lt;/code&gt;、&lt;code&gt;rtk playwright test&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;建置和 lint：&lt;code&gt;rtk lint&lt;/code&gt;、&lt;code&gt;rtk tsc&lt;/code&gt;、&lt;code&gt;rtk next build&lt;/code&gt;、&lt;code&gt;rtk cargo clippy&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;容器和雲命令：&lt;code&gt;rtk docker ps&lt;/code&gt;、&lt;code&gt;rtk docker logs&lt;/code&gt;、&lt;code&gt;rtk kubectl pods&lt;/code&gt;、&lt;code&gt;rtk aws sts get-caller-identity&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;資料和日誌：&lt;code&gt;rtk json&lt;/code&gt;、&lt;code&gt;rtk deps&lt;/code&gt;、&lt;code&gt;rtk env&lt;/code&gt;、&lt;code&gt;rtk log&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;這類工具最適合 agent 高頻讀命令輸出的場景。它不負責替你寫程式碼，而是讓 agent 少讀雜訊。&lt;/p&gt;
&lt;h2 id=&#34;安裝和接入方式&#34;&gt;安裝和接入方式
&lt;/h2&gt;&lt;p&gt;README 給了幾種安裝方式。&lt;/p&gt;
&lt;p&gt;Homebrew：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;brew install rtk
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Linux/macOS 快速安裝：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;curl -fsSL https://raw.githubusercontent.com/rtk-ai/rtk/refs/heads/master/install.sh &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; sh
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Cargo：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cargo install --git https://github.com/rtk-ai/rtk
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;安裝後可以先檢查版本和統計資訊：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rtk --version
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rtk gain
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;接入 AI 編程工具時，可以用初始化命令：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rtk init -g
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rtk init -g --gemini
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rtk init -g --codex
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rtk init -g --agent cursor
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rtk init --agent windsurf
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rtk init --agent cline
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;初始化後需要重啟對應的 AI 工具。對於支援 hook 的 agent，Bash 命令會在執行前被重寫，例如把 &lt;code&gt;git status&lt;/code&gt; 變成 &lt;code&gt;rtk git status&lt;/code&gt;，讓 agent 收到壓縮後的輸出。&lt;/p&gt;
&lt;h2 id=&#34;使用時要注意什麼&#34;&gt;使用時要注意什麼
&lt;/h2&gt;&lt;p&gt;RTK 的收益取決於 agent 是否真的透過 shell 命令讀取資訊。&lt;/p&gt;
&lt;p&gt;README 裡特別提醒：像 Claude Code 的內建 &lt;code&gt;Read&lt;/code&gt;、&lt;code&gt;Grep&lt;/code&gt;、&lt;code&gt;Glob&lt;/code&gt; 這類工具不經過 Bash hook，因此不會自動被 RTK 改寫。要讓 RTK 介入，需要使用 shell 命令，例如 &lt;code&gt;cat&lt;/code&gt;、&lt;code&gt;head&lt;/code&gt;、&lt;code&gt;tail&lt;/code&gt;、&lt;code&gt;rg&lt;/code&gt;、&lt;code&gt;grep&lt;/code&gt;、&lt;code&gt;find&lt;/code&gt;，或者直接呼叫 &lt;code&gt;rtk read&lt;/code&gt;、&lt;code&gt;rtk grep&lt;/code&gt;、&lt;code&gt;rtk find&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;這點很關鍵。RTK 不是全域透明地壓縮所有 agent I/O，它更像是 shell 命令層面的代理。&lt;/p&gt;
&lt;p&gt;Windows 使用者也要注意，README 建議不要直接雙擊 &lt;code&gt;rtk.exe&lt;/code&gt;，而是把它放到 PATH 裡，透過 Command Prompt、PowerShell 或 Windows Terminal 使用。它也提到，如果想獲得完整 hook 體驗，WSL 會更自然。&lt;/p&gt;
&lt;h2 id=&#34;適合誰用&#34;&gt;適合誰用
&lt;/h2&gt;&lt;p&gt;RTK 適合三類人：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;重度 AI 編程使用者&lt;/strong&gt;：每天讓 agent 跑很多 &lt;code&gt;git&lt;/code&gt;、&lt;code&gt;rg&lt;/code&gt;、測試和建置命令。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;大倉庫使用者&lt;/strong&gt;：命令輸出動輒幾百行，agent 經常被無關上下文淹沒。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;關心 token 成本和上下文窗口的人&lt;/strong&gt;：希望模型把注意力放在失敗、變更和關鍵檔案上。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;如果你的專案很小，或者 agent 主要透過 IDE 內建工具讀取檔案，RTK 的體感收益可能沒那麼明顯。它真正發力的地方，是命令列輸出又長又頻繁的開發流。&lt;/p&gt;
&lt;h2 id=&#34;我的判斷&#34;&gt;我的判斷
&lt;/h2&gt;&lt;p&gt;RTK 的方向很實用。現在很多 AI 編程工作流都在強調更強的模型、更大的上下文、更長的任務，但開發現場還有一個樸素問題：agent 經常讀了太多沒必要讀的東西。&lt;/p&gt;
&lt;p&gt;把命令輸出先壓縮，再交給模型，能減少 token 消耗，也能降低模型被雜訊帶偏的機率。&lt;/p&gt;
&lt;p&gt;不過它不是魔法開關。要用好 RTK，需要把 agent 的工作方式往 shell 命令靠一靠，並確認目前工具的 hook 是否真的生效。對 Codex、Claude Code、Gemini CLI、Cursor、Windsurf 這類場景來說，它更像一個值得測試的「上下文節流器」：不改變開發命令本身，但讓 agent 讀到更乾淨的結果。&lt;/p&gt;
</description>
        </item>
        <item>
        <title>wx-cli 專案解讀：用命令列查詢本機微信聊天記錄</title>
        <link>https://knightli.com/zh-tw/2026/05/18/wx-cli-wechat-local-data-command-line-tool/</link>
        <pubDate>Mon, 18 May 2026 21:02:21 +0800</pubDate>
        
        <guid>https://knightli.com/zh-tw/2026/05/18/wx-cli-wechat-local-data-command-line-tool/</guid>
        <description>&lt;p&gt;&lt;code&gt;wx-cli&lt;/code&gt; 是一個用 Rust 編寫的本機微信資料命令列工具，目標是在命令列裡查詢自己的微信會話、聊天記錄、聯絡人、群成員、收藏、朋友圈、公眾號文章、附件和統計資訊。&lt;/p&gt;
&lt;p&gt;它不是雲端微信同步服務，也不是聊天機器人。它更像是一個本機唯讀資料檢索層：微信仍然在本機執行，資料仍然留在本機，&lt;code&gt;wx-cli&lt;/code&gt; 負責按需解密、快取和查詢本機資料庫，再把結果以 YAML 或 JSON 形式輸出給人或 Agent 使用。&lt;/p&gt;
&lt;p&gt;這個專案有兩個值得關注的點：一是它把微信本機資料查詢做成了跨平台 CLI；二是它專門考慮了 Claude Code、Cursor、Codex 這類 AI Agent 的使用場景，提供了 &lt;code&gt;SKILL.md&lt;/code&gt; 和帶 &lt;code&gt;meta&lt;/code&gt; 的結構化輸出。&lt;/p&gt;
&lt;h2 id=&#34;wx-cli-能做什麼&#34;&gt;wx-cli 能做什麼
&lt;/h2&gt;&lt;p&gt;按專案 README 的描述，&lt;code&gt;wx-cli&lt;/code&gt; 覆蓋的功能很完整：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;查看最近會話和未讀會話。&lt;/li&gt;
&lt;li&gt;查詢某個聯絡人或群的聊天歷史。&lt;/li&gt;
&lt;li&gt;全庫搜尋關鍵字。&lt;/li&gt;
&lt;li&gt;查看新增訊息。&lt;/li&gt;
&lt;li&gt;查詢聯絡人、群成員和群暱稱。&lt;/li&gt;
&lt;li&gt;查詢收藏。&lt;/li&gt;
&lt;li&gt;查詢朋友圈通知、朋友圈時間線和朋友圈正文。&lt;/li&gt;
&lt;li&gt;查詢公眾號文章推送。&lt;/li&gt;
&lt;li&gt;列出和提取聊天圖片附件。&lt;/li&gt;
&lt;li&gt;做聊天統計。&lt;/li&gt;
&lt;li&gt;匯出聊天記錄為 Markdown 或 JSON。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;這些能力讓它不只是「查聊天記錄」，而是把微信本機資料變成了可搜尋、可統計、可匯出的本機資料庫。&lt;/p&gt;
&lt;h2 id=&#34;為什麼適合-ai-agent&#34;&gt;為什麼適合 AI Agent
&lt;/h2&gt;&lt;p&gt;很多命令列工具只是給人看的，輸出是一段文字。&lt;code&gt;wx-cli&lt;/code&gt; 則明顯考慮了 Agent 讀取。&lt;/p&gt;
&lt;p&gt;README 提到，&lt;code&gt;history&lt;/code&gt;、&lt;code&gt;search&lt;/code&gt;、&lt;code&gt;sessions&lt;/code&gt;、&lt;code&gt;unread&lt;/code&gt;、&lt;code&gt;new-messages&lt;/code&gt;、&lt;code&gt;stats&lt;/code&gt;、&lt;code&gt;attachments&lt;/code&gt; 等命令會附帶 &lt;code&gt;meta&lt;/code&gt; 資訊。&lt;code&gt;meta&lt;/code&gt; 裡包含結果狀態、未知分片、命中資料的最新時間、session 記錄的最新時間等資訊。&lt;/p&gt;
&lt;p&gt;這對 Agent 很有用。因為 AI 不只需要「查到了什麼」，還需要知道「結果新不新」「有沒有可能漏訊息」「是不是需要重新 init」。例如：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;status&lt;/code&gt; 可以提示結果是否 &lt;code&gt;ok&lt;/code&gt; 或 &lt;code&gt;possibly_stale&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;unknown_shards&lt;/code&gt; 可以提示是否存在 daemon 目前沒有 key 的資料庫分片。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;chat_latest_timestamp&lt;/code&gt; 可以告訴 Agent 目前命中資料裡的最新訊息時間。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;session_last_timestamp&lt;/code&gt; 可以幫助判斷本機 session 記錄是否明顯領先於查詢結果。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;這類元資訊可以減少 AI 誤判，讓 Claude Code、Cursor、Codex 這類工具在處理微信資料時更穩。&lt;/p&gt;
&lt;h2 id=&#34;安裝方式&#34;&gt;安裝方式
&lt;/h2&gt;&lt;p&gt;專案推薦透過 npm 全平台安裝：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;npm install -g @jackwener/wx-cli
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;也支援 macOS / Linux 的 curl 安裝：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;curl -fsSL https://raw.githubusercontent.com/jackwener/wx-cli/main/install.sh &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; bash
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Windows 可以在系統管理員 PowerShell 中執行：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-powershell&#34; data-lang=&#34;powershell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;irm &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;https&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;//&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;raw&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;py&#34;&gt;githubusercontent&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;com&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;jackwener&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;wx-cli&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;main&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;install&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;py&#34;&gt;ps1&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;iex
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;如果要從原始碼建置，也可以直接用 Rust：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git clone git@github.com:jackwener/wx-cli.git &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; wx-cli
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cargo build --release
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;建置產物是 &lt;code&gt;target/release/wx&lt;/code&gt;，Windows 下是 &lt;code&gt;wx.exe&lt;/code&gt;。&lt;/p&gt;
&lt;h2 id=&#34;和-agent-skill-的關係&#34;&gt;和 Agent Skill 的關係
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;wx-cli&lt;/code&gt; 還提供了面向 AI Agent 的 Skill。可以透過 skills CLI 一鍵安裝到 Claude Code、Cursor、Codex 等支援 Skills 的環境：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;npx skills add jackwener/wx-cli
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;全域安裝：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;npx skills add jackwener/wx-cli -g
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;安裝後，Agent 會讀取倉庫裡的 &lt;code&gt;SKILL.md&lt;/code&gt;，知道如何安裝、初始化和呼叫 &lt;code&gt;wx-cli&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;這意味著你可以讓 Agent 幫你做一些本機資訊整理任務，例如：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;找某段時間某個群聊裡討論過的關鍵字。&lt;/li&gt;
&lt;li&gt;彙總最近未讀訊息。&lt;/li&gt;
&lt;li&gt;從某個會話裡匯出最近聊天記錄。&lt;/li&gt;
&lt;li&gt;搜尋公眾號文章推送連結。&lt;/li&gt;
&lt;li&gt;分析某個群聊裡的發言統計。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;前提仍然是：這些資料必須是你本機、你自己的微信資料。&lt;/p&gt;
&lt;h2 id=&#34;基本使用方式&#34;&gt;基本使用方式
&lt;/h2&gt;&lt;p&gt;初始化前需要保持微信正在執行。不同平台要求不同。&lt;/p&gt;
&lt;p&gt;Linux 上可以執行：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo wx init
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Windows 上需要用系統管理員 PowerShell：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-powershell&#34; data-lang=&#34;powershell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;wx&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;init&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;macOS 上更複雜。README 說明，預設路徑需要先對 WeChat 做 ad-hoc 簽名，才能掃描程序記憶體；重新簽名後還要清理舊 TCC 授權記錄，否則截圖、視訊通話、麥克風等權限可能出現「看起來已開啟但實際拒絕」的問題。專案文件也提醒，重新簽名會帶來 macOS 頻繁彈出存取其他 App 資料提示的副作用。&lt;/p&gt;
&lt;p&gt;初始化後，可以用下面的命令驗證：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wx sessions
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;能看到最近會話，說明基本鏈路已經可用。daemon 會在首次呼叫時自動啟動。&lt;/p&gt;
&lt;h2 id=&#34;常用命令示例&#34;&gt;常用命令示例
&lt;/h2&gt;&lt;p&gt;查看最近會話：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wx sessions
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;查看未讀會話：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wx unread
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;只看真人未讀，過濾公眾號和摺疊入口：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wx unread --filter private,group
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;查看某個會話最近聊天記錄：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wx &lt;span class=&#34;nb&#34;&gt;history&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;張三&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;拉取更多歷史訊息：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wx &lt;span class=&#34;nb&#34;&gt;history&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;張三&amp;#34;&lt;/span&gt; -n &lt;span class=&#34;m&#34;&gt;2000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;按時間範圍查詢群聊：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wx &lt;span class=&#34;nb&#34;&gt;history&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;AI群&amp;#34;&lt;/span&gt; --since 2026-04-01 --until 2026-04-15
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;全庫搜尋：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wx search &lt;span class=&#34;s2&#34;&gt;&amp;#34;關鍵詞&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;搜尋某個群中的關鍵字：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wx search &lt;span class=&#34;s2&#34;&gt;&amp;#34;會議&amp;#34;&lt;/span&gt; --in &lt;span class=&#34;s2&#34;&gt;&amp;#34;工作群&amp;#34;&lt;/span&gt; --since 2026-01-01
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;匯出聊天記錄：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wx &lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;張三&amp;#34;&lt;/span&gt; --format markdown -o chat.md
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wx &lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;AI群&amp;#34;&lt;/span&gt; --since 2026-01-01 --format json
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;這些命令都比較適合被腳本或 Agent 呼叫，尤其是加上 &lt;code&gt;--json&lt;/code&gt; 後。&lt;/p&gt;
&lt;h2 id=&#34;朋友圈和公眾號文章&#34;&gt;朋友圈和公眾號文章
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;wx-cli&lt;/code&gt; 不只查聊天。&lt;/p&gt;
&lt;p&gt;朋友圈相關命令分成通知和貼文：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wx sns-notifications
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wx sns-feed
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wx sns-search &lt;span class=&#34;s2&#34;&gt;&amp;#34;關鍵詞&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;需要注意，朋友圈資料只覆蓋你本機刷到過的內容。微信客戶端按需下載，沒在本機出現過的資料，工具也不會憑空拿到。&lt;/p&gt;
&lt;p&gt;公眾號文章則透過獨立命令查詢：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wx biz-articles
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wx biz-articles --account &lt;span class=&#34;s2&#34;&gt;&amp;#34;返朴&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wx biz-articles --since 2026-05-01 --until 2026-05-10
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wx biz-articles --json &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; jq &lt;span class=&#34;s1&#34;&gt;&amp;#39;.[].url&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;它會回傳公眾號名稱、標題、URL、摘要、封面、時間等欄位。對做資料整理、文章收集和本機知識庫的人來說，這個功能很實用。&lt;/p&gt;
&lt;h2 id=&#34;附件提取&#34;&gt;附件提取
&lt;/h2&gt;&lt;p&gt;微信聊天裡的圖片附件通常不是直接可讀的普通圖片檔，而是存在 &lt;code&gt;xwechat_files/&amp;lt;wxid&amp;gt;/msg/attach/...&lt;/code&gt; 下的 &lt;code&gt;.dat&lt;/code&gt; 檔案。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;wx-cli&lt;/code&gt; 提供了兩步流程：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wx attachments &lt;span class=&#34;s2&#34;&gt;&amp;#34;張三&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wx attachments &lt;span class=&#34;s2&#34;&gt;&amp;#34;AI群&amp;#34;&lt;/span&gt; --kind image -n &lt;span class=&#34;m&#34;&gt;100&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;先拿到 &lt;code&gt;attachment_id&lt;/code&gt; 後，再提取：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wx extract &amp;lt;attachment_id&amp;gt; -o ~/Desktop/photo.jpg
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;輸出報告裡會帶 &lt;code&gt;md5&lt;/code&gt;、&lt;code&gt;dat_path&lt;/code&gt;、&lt;code&gt;dat_size&lt;/code&gt;、&lt;code&gt;output&lt;/code&gt;、&lt;code&gt;format&lt;/code&gt;、&lt;code&gt;decoder&lt;/code&gt; 等資訊。README 中說明它支援 legacy XOR、V1 fixed-AES、V2 AES + XOR 等解碼檔位，不同平台的 image key 提取方式也不同。&lt;/p&gt;
&lt;p&gt;這部分能力很強，但也更需要謹慎使用：只處理自己的資料，不要把它用於未經授權的資料存取。&lt;/p&gt;
&lt;h2 id=&#34;daemon-架構為什麼重要&#34;&gt;daemon 架構為什麼重要
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;wx-cli&lt;/code&gt; 的效能點在 daemon。&lt;/p&gt;
&lt;p&gt;README 中給出的結構大致是：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wx (CLI) ──Unix socket──▶ wx-daemon (背景程序)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                              │
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    ┌─────────┴──────────┐
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;               DBCache               聯絡人快取
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           (mtime 感知複用)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;daemon 首次解密後，會把資料庫和 mtime 資訊持久化到 &lt;code&gt;~/.wx-cli/cache/&lt;/code&gt;。如果資料庫檔案 mtime 沒變，後續呼叫就可以複用快取，不需要每次重新解密。&lt;/p&gt;
&lt;p&gt;這對命令列查詢和 Agent 循環都很關鍵。Agent 可能會連續查詢多個會話、搜尋多個關鍵字、再做統計和匯出。如果每次都重新掃描和解密，體驗會很差；daemon 快取讓它更接近一個本機查詢服務。&lt;/p&gt;
&lt;h2 id=&#34;原理簡述&#34;&gt;原理簡述
&lt;/h2&gt;&lt;p&gt;專案 README 對原理有直接說明：微信 4.x 使用 SQLCipher 4 加密本機資料庫，WCDB 會在程序記憶體中快取派生後的 raw key。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;wx-cli&lt;/code&gt; 會根據平台使用不同方式掃描微信程序記憶體，匹配 key 模式後提取密鑰，再由 daemon 按需解密和快取資料庫。&lt;/p&gt;
&lt;p&gt;不同平台的底層機制不同：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;macOS 使用 Mach VM API。&lt;/li&gt;
&lt;li&gt;Linux 使用 &lt;code&gt;/proc/&amp;lt;pid&amp;gt;/mem&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;Windows 使用 &lt;code&gt;VirtualQueryEx&lt;/code&gt; 和 &lt;code&gt;ReadProcessMemory&lt;/code&gt;。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;這些能力解釋了為什麼初始化通常需要較高權限，也解釋了為什麼 macOS 上會涉及簽名和隱私授權。&lt;/p&gt;
&lt;h2 id=&#34;使用邊界和風險&#34;&gt;使用邊界和風險
&lt;/h2&gt;&lt;p&gt;這類工具必須先講邊界。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;wx-cli&lt;/code&gt; README 的免責聲明寫得很明確：工具僅用於學習和研究目的，用於解密自己的微信資料，並要求遵守相關法律法規，不得用於未經授權的資料存取。&lt;/p&gt;
&lt;p&gt;實際使用時也建議注意：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;只在自己的電腦、自己的微信帳號上使用。&lt;/li&gt;
&lt;li&gt;不要把匯出的聊天記錄隨意上傳到雲端模型。&lt;/li&gt;
&lt;li&gt;用 Agent 分析聊天記錄時，先確認 API 供應商和資料跨境風險。&lt;/li&gt;
&lt;li&gt;匯出 Markdown / JSON 後要注意檔案權限和備份位置。&lt;/li&gt;
&lt;li&gt;公司或多人裝置上使用前，先確認合規和授權。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;本機工具不等於沒有隱私風險。它減少了資料離開本機的預設路徑，但如果你把輸出交給雲端模型、網盤或第三方腳本，風險又會回來。&lt;/p&gt;
&lt;h2 id=&#34;適合誰使用&#34;&gt;適合誰使用
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;wx-cli&lt;/code&gt; 適合這些場景：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;想在本機快速搜尋自己的微信歷史訊息。&lt;/li&gt;
&lt;li&gt;需要把某個會話匯出為 Markdown 或 JSON。&lt;/li&gt;
&lt;li&gt;想統計某個群聊在一段時間內的發言情況。&lt;/li&gt;
&lt;li&gt;想讓 Claude Code、Cursor、Codex 等 Agent 幫忙整理本機微信資料。&lt;/li&gt;
&lt;li&gt;想把公眾號文章推送連結整理進本機知識庫。&lt;/li&gt;
&lt;li&gt;想研究微信本機資料庫結構和解密流程。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;不太適合這些場景：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;想做雲端微信同步。&lt;/li&gt;
&lt;li&gt;想繞過他人裝置或帳號權限。&lt;/li&gt;
&lt;li&gt;想無腦圖形介面操作，不接觸命令列。&lt;/li&gt;
&lt;li&gt;不願意處理 macOS 權限、Windows 系統管理員權限或 Linux sudo 的使用者。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;小結&#34;&gt;小結
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;wx-cli&lt;/code&gt; 的價值，不只是「命令列查微信聊天記錄」。更準確地說，它把本機微信資料變成了一個可查詢、可匯出、可被 Agent 消費的本機資料源。&lt;/p&gt;
&lt;p&gt;它的 daemon 架構解決了反覆解密和查詢效能問題；&lt;code&gt;meta&lt;/code&gt; wrapper 讓 AI Agent 更容易判斷結果是否新鮮；&lt;code&gt;SKILL.md&lt;/code&gt; 則把安裝和使用方式交給 Claude Code、Cursor、Codex 這類工具理解。&lt;/p&gt;
&lt;p&gt;如果你經常需要從微信裡找資訊、整理群聊、匯出記錄或建構個人資料庫，&lt;code&gt;wx-cli&lt;/code&gt; 很值得關注。但使用它時也要始終記住一條底線：只處理自己的資料，並且謹慎管理匯出結果。&lt;/p&gt;
&lt;h2 id=&#34;參考資料&#34;&gt;參考資料
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/jackwener/wx-cli&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;jackwener/wx-cli GitHub 倉庫&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        <item>
        <title>DeepSeek-TUI：在終端裡執行 DeepSeek 編程 Agent</title>
        <link>https://knightli.com/zh-tw/2026/05/08/deepseek-tui-terminal-coding-agent/</link>
        <pubDate>Fri, 08 May 2026 13:41:15 +0800</pubDate>
        
        <guid>https://knightli.com/zh-tw/2026/05/08/deepseek-tui-terminal-coding-agent/</guid>
        <description>&lt;p&gt;DeepSeek-TUI 是一個執行在終端裡的 AI 編程 Agent。它圍繞 DeepSeek V4 模型設計，透過 &lt;code&gt;deepseek&lt;/code&gt; 命令啟動，可以在 TUI 介面裡讀寫檔案、執行 shell 命令、搜尋網頁、管理 git、呼叫 MCP server，並支援子 Agent 協作。&lt;/p&gt;
&lt;p&gt;它比普通聊天 CLI 更像一個終端工作台。它不只是把問題發給模型，而是把看程式碼、改檔案、跑命令、檢查診斷、保存會話、恢復狀態整合在一起。&lt;/p&gt;
&lt;p&gt;專案主要使用 Rust 編寫，授權為 MIT。GitHub 描述是「Coding agent for DeepSeek models that runs in your terminal」。&lt;/p&gt;
&lt;h2 id=&#34;適合誰&#34;&gt;適合誰
&lt;/h2&gt;&lt;p&gt;DeepSeek-TUI 適合喜歡終端工作流，並想用 DeepSeek 模型處理本地開發任務的開發者。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;用 DeepSeek 做程式碼修改和專案分析。&lt;/li&gt;
&lt;li&gt;不想打開完整 IDE。&lt;/li&gt;
&lt;li&gt;希望 AI 工具能讀寫本地 workspace。&lt;/li&gt;
&lt;li&gt;需要 Plan、Agent、YOLO 模式。&lt;/li&gt;
&lt;li&gt;想保存會話、恢復長任務、回滾改動。&lt;/li&gt;
&lt;li&gt;想接入 MCP、LSP 診斷、HTTP/SSE runtime API 和 skills。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果只是簡單問答，Web 端或輕量 CLI 已足夠。DeepSeek-TUI 更適合把模型放進本地開發流程。&lt;/p&gt;
&lt;h2 id=&#34;安裝方式&#34;&gt;安裝方式
&lt;/h2&gt;&lt;p&gt;npm：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;npm install -g deepseek-tui
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;deepseek --version
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;deepseek --model auto
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;npm 包是安裝器和 wrapper，會下載預編譯 Rust 二進位，要求 Node.js &lt;code&gt;&amp;gt;=18&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;Cargo：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cargo install deepseek-tui-cli --locked
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cargo install deepseek-tui --locked
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Homebrew：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;brew tap Hmbown/deepseek-tui
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;brew install deepseek-tui
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;也可以從 GitHub Releases 下載 Linux x64/ARM64、macOS x64/ARM64、Windows x64 的預編譯版本。&lt;/p&gt;
&lt;p&gt;Docker：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;docker run --rm -it &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  -e DEEPSEEK_API_KEY &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  -v &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$PWD&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;:/workspace&amp;#34;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  ghcr.io/hmbown/deepseek-tui:latest
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id=&#34;配置-api-key&#34;&gt;配置 API Key
&lt;/h2&gt;&lt;p&gt;首次啟動會提示輸入 DeepSeek API key，並保存到：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;~/.deepseek/config.toml
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;也可以手動配置：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;deepseek auth &lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; --provider deepseek
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;deepseek auth status
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;或使用環境變數：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;DEEPSEEK_API_KEY&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;YOUR_KEY&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;deepseek
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;檢查環境：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;deepseek doctor
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;清除已保存的 key：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;deepseek auth clear --provider deepseek
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id=&#34;auto-mode&#34;&gt;Auto mode
&lt;/h2&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;deepseek --model auto
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;TUI 中也可使用：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/model auto
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Auto mode 同時選擇模型和 thinking：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;模型：&lt;code&gt;deepseek-v4-flash&lt;/code&gt; 或 &lt;code&gt;deepseek-v4-pro&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Thinking：&lt;code&gt;off&lt;/code&gt;、&lt;code&gt;high&lt;/code&gt; 或 &lt;code&gt;max&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;真正請求前，TUI 會做一次小型路由呼叫，分析最新請求和上下文，再決定本輪模型和思考級別。&lt;code&gt;auto&lt;/code&gt; 是本地功能，上游 API 收到的是具體模型和設定。&lt;/p&gt;
&lt;p&gt;需要基準測試、成本上限或固定行為時，建議直接指定模型。&lt;/p&gt;
&lt;h2 id=&#34;三種模式&#34;&gt;三種模式
&lt;/h2&gt;&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;模式&lt;/th&gt;
          &lt;th&gt;用途&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;Plan&lt;/td&gt;
          &lt;td&gt;只讀探索和計畫&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Agent&lt;/td&gt;
          &lt;td&gt;預設互動模式，工具呼叫有 approval gate&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;YOLO&lt;/td&gt;
          &lt;td&gt;在可信 workspace 中自動批准工具&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Plan 適合分析，Agent 適合日常編程，YOLO 風險最高，只適合可信分支或測試目錄。&lt;/p&gt;
&lt;h2 id=&#34;工具能力&#34;&gt;工具能力
&lt;/h2&gt;&lt;p&gt;DeepSeek-TUI 支援檔案讀寫、apply patch、shell、git、web search/browse、子 Agent、MCP、LSP 診斷、會話恢復、工作區回滾、持久化任務隊列、HTTP/SSE runtime API 和 skills。&lt;/p&gt;
&lt;p&gt;LSP 診斷可把 rust-analyzer、pyright、typescript-language-server、gopls、clangd 等錯誤回饋給模型。工作區回滾使用 side-git 快照，提供 &lt;code&gt;/restore&lt;/code&gt; 和 &lt;code&gt;revert_turn&lt;/code&gt;，但正常 git 提交習慣仍然重要。&lt;/p&gt;
&lt;h2 id=&#34;常用命令&#34;&gt;常用命令
&lt;/h2&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;15
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;16
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;17
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;18
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;19
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;deepseek
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;deepseek &lt;span class=&#34;s2&#34;&gt;&amp;#34;explain this function&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;deepseek --model deepseek-v4-flash &lt;span class=&#34;s2&#34;&gt;&amp;#34;summarize&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;deepseek --model auto &lt;span class=&#34;s2&#34;&gt;&amp;#34;fix this bug&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;deepseek --yolo
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;deepseek auth &lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; --provider deepseek
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;deepseek doctor
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;deepseek doctor --json
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;deepseek models
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;deepseek sessions
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;deepseek resume --last
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;deepseek resume &amp;lt;SESSION_ID&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;deepseek fork &amp;lt;SESSION_ID&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;deepseek serve --http
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;deepseek serve --acp
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;deepseek pr &amp;lt;N&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;deepseek mcp list
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;deepseek mcp validate
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;deepseek update
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id=&#34;zed-和-acp&#34;&gt;Zed 和 ACP
&lt;/h2&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;#34;agent_servers&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;#34;DeepSeek&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nt&#34;&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;custom&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nt&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;deepseek&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nt&#34;&gt;&amp;#34;args&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;serve&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;--acp&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nt&#34;&gt;&amp;#34;env&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;目前 ACP 支援新會話和 prompt response，但工具驅動編輯和 checkpoint replay 尚未透過 ACP 暴露。&lt;/p&gt;
&lt;h2 id=&#34;配置和-provider&#34;&gt;配置和 provider
&lt;/h2&gt;&lt;p&gt;使用者配置：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;~/.deepseek/config.toml
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;專案 overlay：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;workspace&amp;gt;/.deepseek/config.toml
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;code&gt;api_key&lt;/code&gt;、&lt;code&gt;base_url&lt;/code&gt;、&lt;code&gt;provider&lt;/code&gt;、&lt;code&gt;mcp_config_path&lt;/code&gt; 等敏感欄位不能放入專案 overlay。&lt;/p&gt;
&lt;p&gt;OpenAI-compatible 示例：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;deepseek auth &lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; --provider openai --api-key &lt;span class=&#34;s2&#34;&gt;&amp;#34;YOUR_OPENAI_COMPATIBLE_API_KEY&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;OPENAI_BASE_URL&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;https://openai-compatible.example/v4&amp;#34;&lt;/span&gt; deepseek --provider openai --model glm-5
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Ollama：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ollama pull deepseek-coder:1.3b
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;deepseek --provider ollama --model deepseek-coder:1.3b
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id=&#34;小結&#34;&gt;小結
&lt;/h2&gt;&lt;p&gt;DeepSeek-TUI 是一個完整的終端 AI 編程 Agent，把 DeepSeek V4、TUI、工具呼叫、LSP 診斷、會話恢復、回滾、MCP 和 skills 放進同一套 Rust 工具鏈。它不一定最輕，但適合把 AI 從聊天推進到可執行的本地開發流程。&lt;/p&gt;
&lt;h2 id=&#34;參考資料&#34;&gt;參考資料
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/Hmbown/DeepSeek-TUI&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;DeepSeek-TUI GitHub 倉庫&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://deepseek-tui.com/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;DeepSeek-TUI 官網&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.npmjs.com/package/deepseek-tui&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;DeepSeek-TUI npm 包&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://platform.deepseek.com/api_keys&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;DeepSeek API Keys&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        <item>
        <title>sudo 和 sudo-rs 有什麼差異：Rust 版本 sudo 會改變什麼</title>
        <link>https://knightli.com/zh-tw/2026/05/01/sudo-vs-sudo-rs-rust-linux-command/</link>
        <pubDate>Fri, 01 May 2026 19:27:08 +0800</pubDate>
        
        <guid>https://knightli.com/zh-tw/2026/05/01/sudo-vs-sudo-rs-rust-linux-command/</guid>
        <description>&lt;p&gt;&lt;code&gt;sudo&lt;/code&gt; 是 Linux 使用者最熟悉的命令之一。
它讓普通使用者在授權範圍內臨時以更高權限執行命令，例如安裝軟體、修改系統設定或重啟服務。&lt;/p&gt;
&lt;p&gt;最近 &lt;code&gt;sudo-rs&lt;/code&gt; 受到更多關注，原因是 Ubuntu 25.10 開始預設使用 Rust 實現的 &lt;code&gt;sudo-rs&lt;/code&gt; 來替代傳統 sudo。
對普通使用者來說，表面上仍然輸入 &lt;code&gt;sudo&lt;/code&gt;。
真正變化在系統底層：執行的可能已經是 Rust 版本的 sudo。&lt;/p&gt;
&lt;p&gt;這件事容易引發兩個問題：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;傳統 sudo 出什麼問題了嗎？&lt;/li&gt;
&lt;li&gt;sudo-rs 會不會影響日常使用和伺服器設定？&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;簡單結論是：普通桌面使用者基本不用擔心；如果你維護伺服器、寫過複雜 sudoers 規則，或者依賴特殊 sudo 行為，就需要認真測試。&lt;/p&gt;
&lt;h2 id=&#34;sudo-rs-是什麼&#34;&gt;sudo-rs 是什麼
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;sudo-rs&lt;/code&gt; 是用 Rust 編寫的 sudo / su 實現。
它的目標不是創造一個完全不同的新命令，而是重新實現傳統 sudo 的主要功能，同時利用 Rust 的記憶體安全特性降低常見安全風險。&lt;/p&gt;
&lt;p&gt;傳統 sudo 主要由 C 語言編寫，歷史很長，功能也很完整。
這種成熟度帶來穩定性，也帶來維護負擔。
很多程式碼來自很早的 Unix/Linux 使用場景，後來又疊加了大量相容邏輯、擴充和邊界處理。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;sudo-rs&lt;/code&gt; 選擇重新實現，是為了獲得幾個好處：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;借助 Rust 減少記憶體安全問題；&lt;/li&gt;
&lt;li&gt;用更現代的程式碼結構降低維護難度；&lt;/li&gt;
&lt;li&gt;去掉部分歷史功能和高風險預設行為；&lt;/li&gt;
&lt;li&gt;吸引熟悉 Rust 的新貢獻者參與維護；&lt;/li&gt;
&lt;li&gt;為未來權限提升工具提供更容易稽核的基礎。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;不過，&lt;code&gt;sudo-rs&lt;/code&gt; 不是傳統 sudo 的 100% 相容替代品。
它仍在發展中，一些傳統功能暫時沒有實現，另一些功能可能不會再實現。&lt;/p&gt;
&lt;h2 id=&#34;普通使用者會感覺到什麼變化&#34;&gt;普通使用者會感覺到什麼變化
&lt;/h2&gt;&lt;p&gt;對普通使用者來說，變化很少。&lt;/p&gt;
&lt;p&gt;你仍然這樣使用：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt update
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;或者：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo systemctl restart nginx
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;在 Ubuntu 25.10 中，&lt;code&gt;sudo&lt;/code&gt; 會指向 &lt;code&gt;sudo-rs&lt;/code&gt;。
使用者輸入的命令不需要改成 &lt;code&gt;sudo-rs&lt;/code&gt;，腳本裡常見的 &lt;code&gt;sudo&lt;/code&gt; 也不會因為命令名變化而立刻失效。&lt;/p&gt;
&lt;p&gt;比較容易看到的變化是密碼輸入回饋。
&lt;code&gt;sudo-rs&lt;/code&gt; 預設會在輸入密碼時顯示星號。
傳統 sudo 也可以透過設定實現類似效果，但很多發行版預設是不顯示任何字元。&lt;/p&gt;
&lt;p&gt;另外，部分錯誤資訊和警告資訊的文字可能不同。
例如密碼錯誤、權限不足、設定不相容時，提示內容可能和以前不完全一樣。
這對人類使用者影響不大，但如果某些腳本依賴解析 sudo 的錯誤輸出，就需要檢查。&lt;/p&gt;
&lt;h2 id=&#34;管理員需要關注哪些差異&#34;&gt;管理員需要關注哪些差異
&lt;/h2&gt;&lt;p&gt;真正需要注意的是系統管理員和進階使用者。&lt;/p&gt;
&lt;p&gt;傳統 sudo 的生態很大，不少伺服器會有複雜的 sudoers 設定。
這些設定可能包含命令參數匹配、環境變數控制、日誌、郵件通知、PAM 行為和不同主機組策略。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;sudo-rs&lt;/code&gt; 目前和傳統 sudo 存在一些差異。
例如，原文提到 &lt;code&gt;sudo-rs&lt;/code&gt; 不包含傳統 sudo 的 sendmail 支援。
過去有些環境會透過 sendmail 發送 sudo 使用通知，這類設定遷移時就需要換方案。&lt;/p&gt;
&lt;p&gt;認證方面，&lt;code&gt;sudo-rs&lt;/code&gt; 使用 PAM。
這意味著資源限制、umask 等行為應更多透過 PAM 設定，而不是完全依賴 sudoers 文件。
如果你過去在 sudoers 裡處理了很多細節，切換前要確認這些規則是否仍然生效。&lt;/p&gt;
&lt;p&gt;還有一個重要變化是命令參數位置的萬用字元支援。
&lt;code&gt;sudo-rs&lt;/code&gt; 不支援在命令參數位置使用萬用字元，以避免 sudoers 文件中常見的設定錯誤。
這對安全是好事，但可能影響已有規則。&lt;/p&gt;
&lt;h2 id=&#34;ubuntu-裡怎麼處理-sudo-和-sudo-rs&#34;&gt;Ubuntu 裡怎麼處理 sudo 和 sudo-rs
&lt;/h2&gt;&lt;p&gt;從 Ubuntu 25.10 開始，系統預設使用 &lt;code&gt;sudo-rs&lt;/code&gt;。
使用者繼續輸入 &lt;code&gt;sudo&lt;/code&gt;，底層會執行 Rust 實現。&lt;/p&gt;
&lt;p&gt;傳統 sudo 並沒有馬上消失。
在 Ubuntu 的過渡設計中，經典 sudo 仍然以 &lt;code&gt;sudo-ws&lt;/code&gt; 的形式保留。
如果確實需要傳統實現，可以使用 &lt;code&gt;sudo-ws&lt;/code&gt;，或者透過 alternatives 機制切換預設 sudo。&lt;/p&gt;
&lt;p&gt;切換命令類似這樣：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo update-alternatives --config sudo
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;不過，不建議普通使用者主動切回傳統 sudo。
如果你沒有自訂 sudoers，也沒有依賴特殊行為，繼續使用發行版預設選擇更省心。&lt;/p&gt;
&lt;p&gt;如果你想在舊版本 Ubuntu 上測試，&lt;code&gt;sudo-rs&lt;/code&gt; 從 Ubuntu 24.04 開始已經可以從 universe 倉庫獲得。
其他發行版也可能提供對應套件，但命令名稱和整合方式不一定相同。&lt;/p&gt;
&lt;h2 id=&#34;sudo-rs-為什麼選擇-rust&#34;&gt;sudo-rs 為什麼選擇 Rust
&lt;/h2&gt;&lt;p&gt;sudo 是高權限工具。
一旦這類工具出現漏洞，後果可能比普通命令嚴重得多。
歷史上，sudo 也出現過多個權限提升漏洞。&lt;/p&gt;
&lt;p&gt;Rust 的優勢在於記憶體安全。
它透過所有權、借用檢查和型別系統，減少懸空指標、越界存取、use-after-free 等常見問題。
這不能保證程式絕對安全，但可以減少 C/C++ 專案裡很常見的一類漏洞。&lt;/p&gt;
&lt;p&gt;對 sudo 這種長期執行在安全敏感位置的工具來說，用更安全的語言重寫有現實意義。
它不只是「為了 Rust 而 Rust」，而是試圖降低維護和稽核成本。&lt;/p&gt;
&lt;p&gt;當然，語言不能解決全部安全問題。
權限檢查邏輯、設定解析、PAM 互動、環境變數處理、日誌和使用者體驗，仍然需要嚴謹設計和長期測試。&lt;/p&gt;
&lt;h2 id=&#34;sudo-rs-不是唯一選擇&#34;&gt;sudo-rs 不是唯一選擇
&lt;/h2&gt;&lt;p&gt;sudo 生態裡本來就有其他替代品。&lt;/p&gt;
&lt;p&gt;比較常見的是 &lt;code&gt;doas&lt;/code&gt;。
它來自 OpenBSD，設計更簡單，設定也更小。
一些使用者喜歡它，是因為它沒有 sudo 那麼複雜。&lt;/p&gt;
&lt;p&gt;還有一些 Rust 或 systemd 相關的替代方案，例如 RootAsRole、systemd 的 &lt;code&gt;run0&lt;/code&gt; 等。
不過這些工具的目標和適用場景並不完全相同。&lt;/p&gt;
&lt;p&gt;對大多數 Linux 發行版來說，sudo 仍然是預設選擇。
&lt;code&gt;sudo-rs&lt;/code&gt; 的意義在於，它嘗試在保持使用者習慣的同時，把底層實現換成更現代的程式碼基礎。&lt;/p&gt;
&lt;h2 id=&#34;遷移前應該檢查什麼&#34;&gt;遷移前應該檢查什麼
&lt;/h2&gt;&lt;p&gt;如果你只是個人桌面使用者，可以跟隨發行版預設設定。&lt;/p&gt;
&lt;p&gt;如果你維護伺服器或工作站，建議檢查這些內容：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;是否有複雜的 &lt;code&gt;/etc/sudoers&lt;/code&gt; 或 &lt;code&gt;/etc/sudoers.d/&lt;/code&gt; 規則；&lt;/li&gt;
&lt;li&gt;是否使用了命令參數萬用字元；&lt;/li&gt;
&lt;li&gt;是否依賴 sudo 的郵件通知；&lt;/li&gt;
&lt;li&gt;是否有腳本解析 sudo 的錯誤輸出；&lt;/li&gt;
&lt;li&gt;是否透過 sudoers 控制 umask、資源限制或環境變數；&lt;/li&gt;
&lt;li&gt;是否有 LDAP、PAM、SSSD 等認證整合；&lt;/li&gt;
&lt;li&gt;是否有自動化部署腳本預設假設傳統 sudo 行為。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;可以先在測試機上驗證：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo -l
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;再執行關鍵維護命令，確認權限、環境變數和日誌行為都符合預期。&lt;/p&gt;
&lt;h2 id=&#34;是否應該主動切換到-sudo-rs&#34;&gt;是否應該主動切換到 sudo-rs
&lt;/h2&gt;&lt;p&gt;如果發行版已經預設切換，普通使用者可以直接接受。
如果你使用的是伺服器或生產環境，不建議只為了嘗鮮手動替換。&lt;/p&gt;
&lt;p&gt;更穩妥的做法是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;在測試環境安裝 &lt;code&gt;sudo-rs&lt;/code&gt;；&lt;/li&gt;
&lt;li&gt;對照現有 sudoers 設定逐項驗證；&lt;/li&gt;
&lt;li&gt;檢查 PAM、日誌、稽核和自動化腳本；&lt;/li&gt;
&lt;li&gt;確認回滾方式；&lt;/li&gt;
&lt;li&gt;等發行版給出穩定整合後再遷移。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;這類工具處在權限鏈路上，不適合用「能執行幾個命令」來判斷是否安全。
真正要驗證的是邊界條件和異常情況。&lt;/p&gt;
&lt;h2 id=&#34;小結&#34;&gt;小結
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;sudo-rs&lt;/code&gt; 是傳統 sudo 的 Rust 實現，目標是用更現代、更安全的程式碼基礎承接 sudo 的核心功能。
Ubuntu 25.10 預設啟用它，說明主流發行版已經開始認真推動這條路線。&lt;/p&gt;
&lt;p&gt;對普通使用者來說，變化很小。
你仍然輸入 &lt;code&gt;sudo&lt;/code&gt;，只是底層實現可能變成了 &lt;code&gt;sudo-rs&lt;/code&gt;。
最多會注意到密碼輸入顯示星號，或者錯誤提示文字略有變化。&lt;/p&gt;
&lt;p&gt;對系統管理員來說，重點是相容性。
如果系統裡有複雜 sudoers 規則、sendmail 通知、PAM 整合、參數萬用字元或依賴 sudo 輸出的腳本，就應該在升級前測試。&lt;/p&gt;
&lt;p&gt;Rust 重寫不是萬靈丹，但對 sudo 這種安全敏感工具來說，減少記憶體安全風險、降低維護複雜度，是值得認真考慮的方向。&lt;/p&gt;
&lt;p&gt;參考來源：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://itsfoss.com/sudo-vs-sudo-rs/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;It&amp;rsquo;s FOSS：sudo vs sudo-rs: What You Need to Know&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/trifectatechfoundation/sudo-rs&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;sudo-rs GitHub 專案&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        
    </channel>
</rss>
