專案筆記

remotetools 部署教學:從零架起手機遠端 Claude Code,含 Windows 服務化

2026-08-08 #教學#Claude Code#Telegram#Discord#Windows#NSSM

系列最後一篇,實戰部署 remotetools:申請 bot、填設定、跑起來、鎖白名單,最後用 NSSM 包成 Windows 服務讓它開機自動執行。(前情提要:專案介紹底層邏輯

前置需求

  • Windows(其他平台也能跑,但防睡眠的 keep_awake.py 只在 Windows 生效)
  • Python 3.10+
  • 已安裝、PATH 找得到的 claude CLI,且登入完成
  • Telegram bot token Discord bot token(下面說怎麼拿)

先把 repo 抓下來:

1
git clone https://github.com/murmur-wu/claude_RemoteForWindows.git C:\claude\remotetools

也可以從 GitHub Releases 下載打包好的 zip——每次 release 會附 -telegram-discord-services 三種部署包,不想裝 git 的話直接解壓即可。

路線一:Telegram

1. 申請 bot token

在 Telegram 找 @BotFather,送出 /newbot,照指示取名,拿到一串 token。

2. 設定 .env

1
2
3
cd C:\claude\remotetools\telegram
copy .env.example .env
notepad .env

至少填這幾項:

1
2
3
4
TELEGRAM_BOT_TOKEN=123456:ABC-DEF...
ALLOWED_CHAT_IDS= # 先留空,等下用 log 拿自己的 id
PROJECTS=blog:C:\claude\projects\murmurpaper;work:C:\Web\MyProject
DEFAULT_PROJECT=blog

PROJECTS 就是 bot 可以操作的 working directory 清單,格式是 名稱:路徑、分號分隔。

3. 啟動 + 鎖白名單

1
.\start.ps1

第一次跑會自動建 .venv 並安裝套件。啟動後對 bot 傳任意訊息,console 會印:

1
rejected message from chat_id=987654321 (not whitelisted)

這就是白名單 fail-closed 的設計:名單空著時拒絕所有人。把那個數字填進 .envALLOWED_CHAT_IDS,重啟,完成。

路線二:Discord

Discord 流程類似,但多兩個必做設定,漏掉的話 bot「連得上但完全沒反應」:

  1. Developer Portal 建立 Application → Bot → 拿 token
  2. Bot → Privileged Gateway Intents → 打開 MESSAGE CONTENT INTENT——不開的話 message.content 永遠是空字串,bot 看不到任何訊息內容
  3. OAuth2 → URL Generator:Scopes 勾 bot,Permissions 勾 Send Messages + Read Message History,用產生的 URL 把 bot 邀進你的伺服器(或直接 DM 它)
1
2
3
4
cd C:\claude\remotetools\discord
copy .env.example .env
# 填 DISCORD_BOT_TOKEN、PROJECTS、DEFAULT_PROJECT
.\start.ps1

白名單用的是 user id(ALLOWED_USER_IDS):Discord 設定 → Advanced → 開 Developer Mode → 對自己頭像右鍵 Copy User ID;或跟 Telegram 一樣先留空、看 rejection log。

安全檢查清單

上線前過一遍:

  • ALLOWED_CHAT_IDS / ALLOWED_USER_IDS 已填,只有自己的 id
  • PERMISSION_MODE 理解過取捨:bypassPermissions(推薦,全放行、信任押在白名單)或 auto(受 ~/.claude/settings.json 的 allow/deny 表管制)。defaultacceptEdits 會讓 bot 卡死等一個沒人能回答的權限詢問
  • DAILY_MESSAGE_LIMIT(預設 100)和 RATE_LIMIT_PER_MINUTE(預設 6)沒有關掉——它們保護的是你自己的 Claude Max 配額
  • .env(含 token)和 state/sessions.json 不會進版控(repo 已 gitignore,備份時記得加密)

服務化:開機自動跑

start.ps1 開著 PowerShell 視窗跑當然可以,但關掉視窗 bot 就死了。services/ 資料夾提供用 NSSM 包成 Windows 服務的腳本。

安裝步驟

  1. nssm.cc/download 下載 win64 zip,把 nssm.exe 丟進 services\
  2. 確認兩個 bot 都各自跑過一次 start.ps1.venv.env 要先就位)
  3. 以系統管理員身分開 PowerShell:
1
2
3
cd C:\claude\remotetools\services
.\install-service.ps1 # 兩個都裝
.\install-service.ps1 -Bot telegram # 或只裝其一

安裝時會跳出 Get-Credential 視窗——必須輸入你登入 Windows 的帳號密碼,不能用預設的 LocalSystem。原因:claude CLI 的認證存在 %USERPROFILE%\.claude\,SYSTEM 帳號的 profile 裡根本沒有這份認證,服務起得來但 claude 一律失敗。

裝完之後

註冊出兩個服務:ClaudeRemoteTelegramClaudeRemoteDiscord,特性:

  • 開機自動啟動
  • crash 後 5 秒自動重啟
  • stdout/stderr 寫到 services\logs\<bot>.{out,err}.log,10MB 自動 rotate

日常操作:

1
2
3
4
Get-Service ClaudeRemote*                                  # 看狀態
Restart-Service ClaudeRemoteTelegram # 改 .env 後要重啟才生效
Get-Content services\logs\telegram.out.log -Tail 50 -Wait # 追 log
.\uninstall-service.ps1 # 移除服務

常見坑

症狀 原因
Discord bot 在線但不回應 MESSAGE CONTENT INTENT 沒開,或在 guild channel 沒 @mention 它
每次任務都卡住不動 PERMISSION_MODE 用了 default/acceptEdits,claude 在等沒人能回答的權限詢問
服務啟動但 claude 一直失敗 服務裝成 LocalSystem 了,重裝並輸入自己的 Windows 帳密
改了 .env 沒生效 服務模式要 Restart-Service
bot 回「已達今日上限」 DAILY_MESSAGE_LIMIT 觸發——這是配額保護正常運作,隔天自動重置

到這裡整套系統就完成了:手機傳訊息 → 家裡電腦的 Claude Code 動起來 → 結果回到手機,電腦睡不著、bot 死了自己爬起來。系列三篇到此結束,回顧:專案介紹底層邏輯

留言
分享