人在外面,突然想到「啊,那個專案的 README 要加一段」——掏出手機,傳個訊息給 bot,家裡電腦上的 Claude Code 就自動改好、commit 完。這就是 remotetools 在做的事。
這是系列文的第一篇,先講這個專案是什麼、能做什麼;之後兩篇分別深入底層邏輯和部署教學。
它解決什麼問題
Claude Code 是跑在終端機裡的 AI coding agent,能讀寫檔案、跑指令、操作 git。但它只活在你的電腦上——人不在電腦前就用不了。
remotetools 把這個能力延伸到手機上:跑一個常駐的 Telegram 或 Discord bot,把你傳的訊息丟進本機的 claude CLI,再把回應切片傳回手機。
1 | 你 (📱) ──訊息──▶ Telegram / Discord ──polling──▶ bot.py ──subprocess──▶ claude --print |
重點特性:
- 對話有記憶:每段對話對應一個持續存活的 Claude session,用
--resume接續脈絡,不是每句話都從零開始。 - 多專案切換:
.env裡定義多個 project(就是 working directory),用指令隨時切換 bot 要操作哪個 repo。 - 即時進度:Claude 跑任務的過程中,bot 會每兩秒更新一則訊息,顯示它正在呼叫哪些工具(讀檔、跑指令…),不是傻等到跑完。
- 配額保護:內建每分鐘與每日訊息上限,防止失控迴圈半小時燒光 Claude Max 的五小時配額。
支援平台
| 平台 | SDK | 訊息上限 | 指令前綴 |
|---|---|---|---|
| Telegram | python-telegram-bot 21.9 |
4000 字 | / |
| Discord | discord.py 2.4.0 |
1900 字 | ! |
兩個平台是各自獨立的 Python app,各有自己的 .venv 和 .env,可以只跑一個或同時跑。有趣的設計決策是:兩邊有四個 byte-identical 的共用模組,但刻意不抽成共用 package——這個取捨在下一篇會細講。
指令一覽
| Telegram | Discord | 說明 |
|---|---|---|
/status |
!status |
session id、當前專案、今日用量、成本 |
/projects |
!projects |
列出所有定義的專案 |
/project <name> |
!project <name> |
切換 working directory(清空 session) |
/cancel |
!cancel |
殺掉正在執行的 claude 請求 |
/reset |
!reset |
下一則訊息開新對話 |
/retry |
!retry |
同 prompt 開全新 session 重跑 |
/model [name] |
!model |
查看或切換模型(opus / sonnet / haiku) |
不帶前綴的純訊息就是直接送給 Claude 的 prompt。
安全模型:一句話總結
這個 bot 等於把「在你電腦上執行任意動作的能力」開放到網路上,所以安全設計是 fail-closed 的:
- 白名單是唯一的信任邊界——
ALLOWED_CHAT_IDS/ALLOWED_USER_IDS留空時 bot 拒絕所有人,永遠不要為了方便測試關掉它。 - 權限模式只有兩種能用——bot 沒有 stdin,Claude 問「可以執行嗎?」沒人能回答,所以互動式權限模式會直接卡死。推薦
bypassPermissions(全放行,信任完全押在白名單上)。 - 用量上限不是防別人,是防自己——自動化呼叫比人手快得多,預設每日 100 則、每分鐘 6 則。
留言