1464 字
7 分鐘
Claude Code Channels 實測:接上 Discord 後遇到的幾件事

Claude Code Channels 是最近剛出的功能,讓你可以透過 Discord 直接跟 Claude 互動——在 Discord 傳訊息,Claude Code 在背景處理,完成後直接在同一個頻道回覆。比起只是被動接收通知,這更像是把 Claude 變成一個隨時待命的遠端助理。

這篇是實際測試的記錄,設定過程中遇到幾個值得說明的狀況。

先把 Discord Bot 接上去#

Discord Bot 的建立流程,Darrell 這篇寫得很完整,建議直接參照:Claude Code 支援 Channels 功能,接上 Discord 和 Telegram。大致流程是在 Discord Developer Portal 建立 Application,取得 Bot Token,開啟必要的 Intent,安裝 Claude Code 的 Discord plugin,最後配對帳號。

設定完之後,用這個指令啟動:

Terminal window
claude --channels plugin:discord@claude-plugins-official

接下來是這篇想說的——設定完之後遇到的幾個狀況

狀況一:權限確認卡住回應#

Claude Code 預設每次執行操作都會跳出確認提示,這在終端機裡還好,但接上 Discord 之後就很麻煩——你在 Discord 傳訊息,Claude 在背景跑,根本沒辦法互動式確認,回應就這樣卡死了。

解法是啟動時帶上權限參數。有幾個選擇:

最直接的是 --dangerously-skip-permissions,跳過所有確認。名字裡就有 dangerously——代表 Claude 可以在沒有任何攔截的情況下執行任意操作,包括刪除檔案、修改設定等。在受控的個人環境裡還好,但如果開放給不特定的人使用就要謹慎:

Terminal window
claude --channels plugin:discord@claude-plugins-official --dangerously-skip-permissions

或者用 --permission-mode 指定模式,彈性稍高:

Terminal window
# 只自動接受編輯操作
claude --channels plugin:discord@claude-plugins-official --permission-mode acceptEdits
# 跳過所有權限確認
claude --channels plugin:discord@claude-plugins-official --permission-mode bypassPermissions

如果想細控哪些工具可以直接執行,可以用 --allowedTools

Terminal window
claude --channels plugin:discord@claude-plugins-official --allowedTools "Bash,Edit,Read,Write"

日常跑 Discord bot 這種情境,通常直接用 bypassPermissions--dangerously-skip-permissions 最省事。

狀況二:終端機輸出不等於 Discord 收到#

Discord MCP plugin 接收到訊息後,Claude 必須呼叫 reply 工具,把 chat_id 帶回去,Discord 才會收到回覆。這裡有個很容易忽略的地方:你在終端機看到的輸出,Discord 那邊是看不到的。這兩個是完全獨立的輸出管道,直接在終端機說是沒有用的。

狀況三:同時開兩個 Session 會怎樣#

好奇測試了一下同時開兩個 Claude Code session 連同一個 Discord bot 的狀況:兩個 session 都收到了同一則訊息,而且各自回覆了不同的內容。Discord 頻道裡就出現了兩則來自同一個 bot 的回應,內容不一樣。

這不算壞事,但在實際使用上很難預期哪個 session 的回覆才是你要的。如果兩個 session 有各自的工作範圍,這樣反而會造成混亂。要讓不同 session 真正獨立,目前的做法是建立兩個不同的 Discord bot,各自配對各自的 session。啟動時用環境變數 DISCORD_STATE_DIR 指向不同的目錄,讓兩個 bot 的狀態完全分開:

Terminal window
# Session A
DISCORD_STATE_DIR=~/.claude/channels/discord-a claude --channels plugin:discord@claude-plugins-official
# Session B
DISCORD_STATE_DIR=~/.claude/channels/discord-b claude --channels plugin:discord@claude-plugins-official

搭配不同的 DISCORD_BOT_TOKEN,兩個 session 就能各自獨立運作。DISCORD_BOT_TOKEN 是官方 README 記載的環境變數,Shell 環境設定的優先級高於 /discord:configure 寫入的 .env 檔案,所以直接在啟動指令前帶上就能覆蓋:

Terminal window
DISCORD_STATE_DIR=~/.claude/channels/discord-a DISCORD_BOT_TOKEN=你的TokenA claude --channels plugin:discord@claude-plugins-official

要注意的是,Discord 的配對設定是全域的,存在 ~/.claude/channels/discord/access.json,跟從哪個目錄啟動無關。換了目錄啟動,Discord 還是能用、還是能回覆你,不需要重新配對。

狀況四:記憶系統跟啟動目錄綁定#

會跟目錄綁定的不是 Discord,而是記憶系統。不同路徑啟動的 session,memory 是完全分開的。

記憶路徑的規則是把啟動目錄的 / 換成 -,放在 ~/.claude/projects/ 下。例如從 /Users/username 啟動,記憶就存在:

~/.claude/projects/-Users-username/memory/

還有一個要注意的地方:就算你在同一個 session 裡叫 Claude 去處理其他專案的檔案,記憶還是只存在這個 session 的路徑下,不會自動切換。如果想讓不同專案有各自獨立的記憶,就要從那個專案目錄開一個新的 session。

所以切換目錄前,建議先把這個 session 的重要內容手動存進 memory 檔案,不然換過去就找不回來了。

狀況五:重開機後要手動重啟#

Channels 沒有自動重連機制,官方文件說「always-on 需要自己維護背景 process 或持久 terminal」。每次重開機都要手動重跑一次啟動指令。技術上可以搭配 tmux 或 macOS LaunchAgent 做到自動啟動,但後者設定複雜,我自己是選擇接受每次重開機手動重跑指令。

常見問題#

Q: 換了工作目錄啟動,Discord 還能用嗎?需要重新配對嗎?#

不需要。Discord 的配對設定是全域的,存在 ~/.claude/channels/discord/access.json,跟從哪個目錄啟動無關。會跟目錄綁定的只有記憶系統和 CLAUDE.md 的指令。

Q: 為什麼 Discord 沒有收到 Claude 的回覆?#

最常見的原因是 Claude 只在終端機輸出,沒有呼叫 reply 工具。終端機輸出和 Discord 是完全獨立的管道,必須透過工具才能讓 Discord 收到訊息。

Q: 可以讓兩個不同的 session 各自對應一個 Discord bot 嗎?#

可以,但需要建立兩個不同的 Discord bot,分別用 DISCORD_STATE_DIRDISCORD_BOT_TOKEN 環境變數指定各自的設定,讓兩個 bot 的狀態完全隔離。

Q: Mac 重開機後 Channels 會自動恢復嗎?#

不會。官方文件說明:always-on 需要自己維護背景 process 或持久 terminal,沒有內建機制。

參考資料#

Claude Code Channels 實測:接上 Discord 後遇到的幾件事
https://laplusda.com/posts/claude-code-discord-channels-notes/
作者
Zero
發佈於
2026-03-21
許可協議
CC BY-NC-SA 4.0
這篇文章有幫助嗎?

回報錯字、失效連結,或告訴我你想看的延伸主題。