前言:工具開一排,額度到底燒到哪去了
現在寫程式,同時開著 Claude Code、Codex、GitHub Copilot、Cursor 已經很正常。但工具一多,幾個問題就來了:
- 快撞上限了嗎?通常都是跳警告才知道。
- 錢花在哪個工具上?每家都有自己的後台,要比就得一個一個開。
- 哪一台機器燒的?公司筆電、家裡桌機、伺服器上跑的 agent,各燒各的。
Token Monitor 就是在解這件事:一個桌面小視窗,讀你電腦上各家工具留下的紀錄,把用量、花費、剩餘額度全部收在同一個畫面,而且可以多台機器一起看。

這篇不是翻譯官方文件,是我自己在 Windows 上裝 v0.59.0 實際跑過一輪的紀錄。
先講結論
沒時間讀完的話,看這段就夠了。
✅ 值得裝。 本機用的話裝完就能用,不用設定,不用帳號。
✅ 它是開源的(MIT)。 原始碼完整放在 GitHub 上,程式分成四塊:桌面程式、背景收集器、Hub、Cloudflare Worker,各自獨立。想改哪一塊就只碰那一塊,不用讀懂整包。打包指令也現成(npm run dist:win),改完就能產出自己的安裝檔。所以非常適合自己拿來二次開發。
❌ 它沒有網頁版的 Dashboard。 這是目前最大的缺口。所有畫面都在桌面程式裡,想用瀏覽器開、想掛在大螢幕上、想做一個團隊共用的看板,都得自己做。
好消息是它把資料開得很大方:Hub 有一組完整的 API,資料撈出來自己畫就好,完全不用改到它的原始碼。我們就是這樣接的,後面會講。
⚠ 要讓整個團隊用,還有三個缺口要補。 資料現在存成 JSON 檔(不好查也不好擴充)、每台機器都要手動填 Hub 網址、自己 build 的版本沒有更新通道。這三件事跟功能無關,但決定你養不養得起來,細節在〈如果要正式採用,有三件事要先解決〉。
適不適合你,大概是這樣:
| 你的情況 | 建議 |
|---|---|
| 同時用 3 個以上 AI 工具 | 裝,馬上有感 |
| 有好幾台機器 | 裝,這是它最強的地方 |
| 團隊想要共用看板 | 可以做,但要自己接 API |
| 想要「裝完就有網頁報表」 | 會失望,它不做這件事 |
另外先說清楚我驗證到哪裡,免得你把我的結論放太大:安裝、簽章、預設設定、它讀哪些資料夾、對外連了哪裡,這些我都實際跑過。至於逐行看原始碼、對 Hub 做攻擊測試,我沒做。
它到底在讀什麼
一句話:它不看你的 prompt,也不看你的程式碼,只讀各家工具留在你電腦上的用量紀錄。
像 Claude Code 會把每次對話記在 ~/.claude/projects/,Codex 記在 ~/.codex/,Token Monitor 就是去讀這些檔案,把 token 數加一加、成本算一算。
它抓三種東西:
- 用量:花了多少 token、多少錢、快取命中率
- 額度:各家方案還剩多少、什麼時候重置
- 單次對話明細:某一次對話裡,每則訊息各用了多少
目前支援 37 種以上的工具,常見的 Claude Code、Codex、Copilot、Cursor、Antigravity、OpenCode、Cline 都有。底層解析是用 tokscale 這個 Rust 專案(也是 MIT),Token Monitor 負責畫面跟同步。
兩種用法:一台機器,或多台一起
這兩種模式先搞懂,後面設定才不會亂:
重點只有兩個:
- 預設就是一台機器的模式,裝完就會動,什麼都不用設。
- 多台要同步的話,得先挑一個 Hub,所有機器連同一個。
安裝
到 GitHub Releases 抓 Token-Monitor-Setup-x.x.x.exe(約 113 MB),雙擊一路下一步就好。macOS 用 brew install --cask token-monitor,Linux 抓 .AppImage。
我有順手驗一下數位簽章(Get-AuthenticodeSignature),結果是 Valid,簽署者 SignPath Foundation,跟官方文件寫的一致,代表檔案沒被動過手腳。
裝完之後,設定跟資料會放在 %APPDATA%\Token Monitor\,之後想移除乾淨的話這個資料夾記得一起刪。
裝完之後長怎樣
一開起來,它馬上就開始讀了。從日誌看得出它在盯哪些資料夾:
[collector] Watching C:\Users\<you>\.claude\projects
[collector] Watching C:\Users\<you>\.copilot
[collector] Watching C:\Users\<you>\.gemini\antigravity
幾個觀察:
- 只看你電腦上真的有的工具,沒裝的就不碰。
- 用系統的檔案異動通知,不是傻傻掃整顆硬碟。
- 開機時會自己去 GitHub 看有沒有新版。
預設會追 28 個工具,設定檔在 %APPDATA%\Token Monitor\settings.json。
多台機器同步:Hub URL 藏在哪
這是最多人卡住的地方,先講位置。
桌面程式右下角的 ⚙ 齒輪 → Multi-device Sync(多裝置同步) → 點「Connect to a hub(連接到 Hub)」那顆圓點
要先點那顆圓點,網址跟密碼的欄位才會跑出來。 沒點就只看到幾個選項,很多人以為「怎麼沒有地方填」,就是卡在這。
Hub 有三種選法,挑一個就好,所有機器連同一個:
| 方式 | 適合誰 | 缺點 |
|---|---|---|
| 用其中一台當 Hub | 家裡或公司有一台常開機的電腦 | 那台程式關掉,大家就都不同步了 |
| 裝在 NAS 或伺服器上 | 有常開的機器 | 要下指令,稍微麻煩一點 |
| Cloudflare Worker | 想從手機看、或跨不同網路 | 要有 Cloudflare 帳號 |
最簡單的是第一種:在常開的那台選「Host hub on this device」,它會自己產生一組密碼,然後列出其他機器可以連的網址。其他機器就填那個網址加密碼。
跨網路的話,走 Tailscale 或 ZeroTier 會比開防火牆簡單,也安全得多。
坑:重開機之後,它不會自己跑起來
這個是踩到才發現的。電腦重開機之後 Token Monitor 沒有跟著起來,偏偏那台又是 Hub,結果其他機器全部斷線,Dashboard 上每台的「最後回報」都停在重開機那一刻。
我去翻了原始碼(src/electron/main.js),原因有三層:
- 「登入時啟動」預設是關的。 ⚙ 裡有一個「Start at login(登入時啟動)」,出廠值是
startAtLogin: false。用官方安裝檔裝的話,自己去把它打開就好。 - 從原始碼跑的版本,這個選項根本勾不了。 程式裡寫死了
if (!app.isPackaged) return false,用npm start或npm run dev跑起來的,勾選框是灰的,旁邊寫著「僅在打包後的版本可用」。所以如果你像我們一樣 fork 回來改,一定要自己打包:跑npm run dist:win產出安裝檔、裝起來,再去勾這個選項。 - 它是「登入時」啟動,不是「開機時」。 底層用的是 Electron 的
app.setLoginItemSettings,也就是 Windows 的使用者登入啟動項。電腦開機後停在登入畫面,它就不會跑。Windows Update 半夜自己重開機、隔天又沒人去登入,Hub 就一整天是停的。
依你的用法,這樣處理:
| 你的情況 | 怎麼讓它開機就跑 |
|---|---|
| 官方安裝檔、自己一台用 | ⚙ → 打開「Start at login」,結束 |
fork 回來改、用 npm start 跑 | 先 npm run dist:win 打包並安裝,再打開「Start at login」 |
| Linux 桌面 | 要用 AppImage 版才勾得了,其他格式一樣是灰的 |
| 拿一台 Windows 當 Hub,而且可能沒人登入就重開機 | 不要靠桌面程式當 Hub,改跑獨立的 Hub,掛成「開機時」執行(見下面) |
| Hub 裝在 NAS 或 Linux 伺服器 | 一樣跑獨立的 Hub,包成 systemd 服務或 Docker,官方沒附這一段 |
獨立的 Hub 其實就是原始碼裡的 node src/hub/server.js(npm run hub),不需要開桌面程式。它會讀專案根目錄的 .env,所以密碼放 .env 的 TOKEN_MONITOR_SECRET 就好,不用寫在指令上。注意沒設密碼的話,它只會綁在 localhost,其他機器連不進來,看起來就像「服務有起來但連不上」。
Linux 用 systemd 的話,大概長這樣:
# /etc/systemd/system/token-monitor-hub.service
[Unit]
Description=Token Monitor Hub
After=network-online.target
Wants=network-online.target
[Service]
WorkingDirectory=/opt/token-monitor
ExecStart=/usr/bin/node src/hub/server.js
Restart=always
User=tokenmon
[Install]
WantedBy=multi-user.target
sudo systemctl enable --now token-monitor-hub
Windows 則是開「工作排程器」建一個工作:觸發程序選「電腦啟動時」,勾「不論使用者登入與否均執行」,動作跑 node src\hub\server.js,「開始位置」填 repo 的資料夾(這樣才讀得到 .env)。
最後記得真的重開一次機驗證,而且重開後先不要登入,從另一台打 /api/health 看 Hub 有沒有回應。沒做這一步,你只是「以為」它會自己起來。
它沒有網頁 Dashboard,所以我們自己做了一個
前面提過,這是它最大的缺口。所有畫面都鎖在桌面程式裡。
但 Hub 本身其實開了一組滿完整的 API,資料要多少有多少:
| 網址 | 拿到什麼 |
|---|---|
/api/health | 確認 Hub 活著(這支不用密碼) |
/api/stats | 全部統計:今日、本月、全部,含工具、模型、專案、額度 |
/api/stats/stream | 即時推播,有變動就推給你 |
/api/devices | 每台機器的狀況 |
用密碼的方式很單純,加一個 header 就好:
curl -H "Authorization: Bearer 你的密碼" http://127.0.0.1:17321/api/stats
所以我們就用這組 API,做了一個單一檔案的 dashboard.html,瀏覽器直接打開,填網址跟密碼就會動:

往下捲是每台機器的狀況:

這塊其實很實用,一眼就看得出哪台是背景跑的、哪台是有開視窗的、各自最後回報是什麼時候。如果某一台的「最後回報」停在幾小時前,通常就是同步出問題了。
要自己做的話,其實只要三件事:
- 做一個填網址跟密碼的表單
- 接
/api/stats/stream,有資料就重畫 - 把回來的 JSON 攤平成表格
不難,而且完全不用碰它的原始碼。
如果要正式採用,有三件事要先解決
上面那些都是「自己一個人裝來用」的層次。如果你打算讓整個團隊用,甚至打算 fork 一份自己維護,會遇到三個很現實的缺口。這三件事跟功能無關,是「能不能長期養下去」的問題。
一、資料不要再存在 JSON 檔裡
先看現在的樣子。我這台機器上,程式的資料夾裡是這幾個檔:
%APPDATA%\Token Monitor\
collector-anchor.json 771 KB 收集器的進度紀錄
daily-history-archive.json 49 KB 每日用量的備份
settings.json 13 KB 設定
credentials.json 81 B 憑證
打開 daily-history-archive.json 會看到這種結構:
{
"version": 1,
"days": {
"2025-08-17": {
"observations": {
"[\"kiro\",\"claude_sonnet_4_20250514_v1_0\"]": { }
}
}
}
}
注意那個 key,它把「工具名稱+模型名稱」兩個欄位壓成一個字串塞進去當 key。這是典型的「拿 JSON 當資料庫」,短期最快,長期會痛在四個地方:
- 改一個數字要整份重寫。 想更新今天的用量,得把整個檔讀進記憶體、改完再整份寫回去。檔案越大越慢,寫的中間斷電或程式被關掉,整份都有可能壞掉。
- 想查東西只能自己攤平。 「上個月 Cursor 花了多少」這種問題,沒辦法直接問資料,要先把整包載進來、自己迴圈加總。多一個查詢角度就多寫一段程式。
- 多台一起寫會互相蓋掉。 現在是單機所以還好,但 Hub 一旦同時收好幾台的回報,同一個檔案同時被寫就是在賭。
- 欄位想改版很麻煩。 現在只有
"version": 1這一個線索,改結構就得自己寫轉檔程式,還得處理「舊檔混新檔」的情況。
建議這樣換:
| 規模 | 建議 | 為什麼 |
|---|---|---|
| 自己或小團隊、Hub 跑在一台機器或 NAS | SQLite | 一個檔案、零維護、免裝伺服器,但該有的索引、交易、SQL 查詢都有 |
| 多團隊、要長期趨勢、要接 BI | PostgreSQL(時序量大再加 TimescaleDB) | 多人同時寫、權限分層、備份工具成熟 |
資料表可以簡單分兩層,這樣查得快、又不怕原始資料被算錯:
- 原始事件表:每一筆回報就 append 一列,不修改也不刪除。欄位攤平(日期、機器、工具、模型、token 數、費用),不要再把幾個值黏成一個 key。
- 每日彙總表:用原始事件算出來的每日結果,畫圖跟看板都讀這張。算錯了可以整張重算,反正原始資料還在。
保留策略也一起想好:原始事件留三到六個月,彙總永久保留。這樣檔案不會無限長大,趨勢圖又不會斷。
搬家不用一次到位。實務上最穩的是先雙寫:Hub 同時寫 JSON 跟資料庫,跑一到兩週,每天比對兩邊的數字對不對得上,確認沒問題再把 JSON 那條拔掉。現有的歷史資料寫一支一次性的匯入程式倒進去就好。
怎麼算做完了:能用一句 SQL 回答「某個工具某個月的花費」、寫入不再整檔重寫、schema 有版本與轉檔腳本、備份就是複製一個檔或一份 dump。
二、別讓使用者自己填伺服器網址
現在要連 Hub,使用者得自己開 ⚙、點「Connect to a hub」那顆圓點、再手動貼上網址跟密碼。本文前面就提過,光是「那顆圓點要先點」就卡住不少人。
團隊導入的時候這會變成三個具體的麻煩:
- 新人第一天就卡在設定,還得有人在旁邊教。
- 網址跟密碼用貼的,少一個字元就連不上,而且錯誤訊息通常只說「連不上」。
- Hub 換位置或換密碼,要一台一台重新設定。
由簡單到麻煩,有三種做法可以選,也可以疊著用:
做法一:出貨就帶好預設值。 既然都要自己 build 了,就把 Hub 網址寫進預設設定,使用者裝完直接連上。密碼不要寫死在原始碼裡,讓安裝檔旁邊放一份設定檔,或是從環境變數讀。最省力,適合機器都在自己掌控範圍內。
做法二:區網自動發現。 Hub 在區網廣播自己(mDNS,就是 AirPlay、印表機那套),客戶端一開起來就自己找到,然後跳一句「發現一台 Hub,要連嗎」。使用者只要按一次「好」。好處是 Hub 換 IP 也不用重設,缺點是跨網段就沒用。
做法三:一段式加入碼。 把網址跟憑證打包成一組短碼或 QR Code,使用者貼一次就完成。進階一點的話,讓 Hub 發的是一次性的加入碼,客戶端拿它換一組長期憑證,之後就算加入碼外流也沒用。
安全上有兩件事要一起做,不然只是把門檻換成風險:加入碼要能設有效期、也要能撤銷;每台機器拿到的憑證最好各自獨立,而不是全公司共用一組密碼(現在的 Hub 就是共用一組,這也是為什麼前面建議不要直接對外開埠)。
怎麼算做完了:一台新機器從裝完到看得到資料,兩分鐘內完成,而且過程中不需要看任何文件。
三、自己 build 的版本,要有自己的更新通道
這點最容易被忽略,但不處理的話後面很痛。我去翻了安裝目錄,更新設定寫在這裡:
# %LOCALAPPDATA%\Programs\Token Monitor\resources\app-update.yml
owner: "Javis603"
repo: "token-monitor"
provider: "github"
publisherName:
- "SignPath Foundation"
看得出兩件事:它的更新是去上游的 GitHub Releases 抓,而且會檢查簽章是不是 SignPath Foundation。所以你 fork 之後自己 build,會遇到一個很尷尬的狀況:
- 這個檔不改:你的程式開機會去抓上游的新版,然後把你自己的修改覆蓋掉。
- 這個檔改了、但沒架自己的發佈來源:你的版本從此不會再更新,每次改動都要請大家手動重裝。而且 Windows 的安裝檔是 113 MB,全量下載,沒人會想每週來一次。
要補的東西不多,但一個都不能少:
| 要做的事 | 具體怎麼做 | 不做會怎樣 |
|---|---|---|
| 自己的發佈來源 | 改掉 owner/repo(指向自己的 repo),或改成 provider: generic 指到自架的位置(NAS、S3、Cloudflare R2 都可以) | 抓到上游的版本,改動被蓋掉 |
| 自動打包 | 用 CI:推 tag 就跑 npm run dist:win 並把產物上傳到發佈來源 | 發版靠手動,久了就沒人發 |
| 差分更新 | electron-builder 產的 blockmap 本來就支援,確認發佈時有一起上傳 | 每次都下載 113 MB |
| 程式碼簽章 | Windows 用 EV 憑證或 Azure Trusted Signing,macOS 要 notarize;同時把 publisherName 改成自己的 | SmartScreen/Gatekeeper 會擋,公司環境幾乎裝不起來 |
| 兩條發佈線 | 分 stable 跟 beta,內部先吃 beta | 出問題直接炸到所有人 |
| 能回退 | 保留前一版的安裝檔,並想好怎麼強制降版 | 壞版本上線後只能等你修好 |
順序上建議先把「自己的發佈來源+CI 自動打包」做起來,這兩個做完就已經解決「沒人升級」的問題。簽章看你們的環境有多嚴格,內部機器可以晚一點再補。
怎麼算做完了:改一行程式、推一個 tag,CI 自己產安裝檔,客戶端一天內自動升上去,而且更新只下載有變動的部分。
三件事的優先順序
如果人力有限,我會這樣排:
| 順序 | 要解的問題 | 為什麼排這裡 | 大概的工 |
|---|---|---|---|
| 1 | 自己的更新通道 | 不先做,之後每次改動都要人工重裝,會直接拖垮後面兩件事 | 小,一到兩天 |
| 2 | 資料搬到資料庫 | 越晚搬,要轉的歷史資料越多,Hub 多機同寫的風險也越高 | 中,含雙寫驗證約一到兩週 |
| 3 | 免設定連 Hub | 影響的是導入體驗,前兩件穩了再做也不遲 | 小到中,看選哪種做法 |
覺得卡卡的?先關掉沒在用的工具
有人反應更新頻率調高之後會卡。設定都在 ⚙ 裡面,幾個可以動的:
| 設定 | 預設 | 怎麼調 |
|---|---|---|
| 追蹤的工具 | 全開(28 個) | 先調這個,最有感。沒在用的通通關掉 |
| 畫面更新間隔 | 15 秒 | 這只是重畫畫面,調小效果有限 |
| 歷史資料寫入 | 15 分鐘 | 機器慢的話往上調,不要往下 |
| 專案分類 | 開 | 專案資料夾很多的話,關掉會輕鬆很多 |
| WSL 掃描 | 開 | 沒在用 WSL 就關掉 |
順序很重要:先關掉沒在用的工具,再考慮動時間。 預設 28 個全開,但大部分人真正在用的可能只有三四個。把其他的關掉,比調更新頻率有效多了。
另外一個跟效能無關、但很重要的設定:
Claude Code 預設只留 30 天的對話紀錄,超過就自己清掉了。Token Monitor 有一個「保留已刪除的用量」選項,建議開著,它會把看過的每日用量另外存一份,來源被刪也不影響你看趨勢圖。
但要注意,它只能救裝了之後的資料。裝之前被刪掉的就回不來了。所以如果你想長期看趨勢,越早裝越好。
資安:我檢查了什麼
既然要導入,順手掃一下是合理的。完整稽核我沒做,但基本的幾項跑過了。
看它連去哪裡。 程式跑起來之後我看了它建立的連線,只有兩個地方:GitHub(檢查更新)跟 api.anthropic.com(查 Claude 還剩多少額度)。
沒有開任何對外的埠。 這點滿重要的,只要你沒把它設成 Hub,它就不會在你電腦上開任何服務。
讀的範圍很乾淨。 從日誌看,它盯的都是各家 AI 工具自己的資料夾,沒有掃你的專案原始碼或整個使用者目錄。
官方聲明不送任何統計回去給作者。 加上原始碼公開,這點可以自己查證。
至於我沒做的:沒有逐行看原始碼,沒有驗證下載的程式真的是那份原始碼編出來的,也沒有對 Hub 做攻擊測試。
幾個自己用的時候要注意的:
- 填進去的憑證是存在你電腦上的。 查額度那塊要填 API key 或 cookie,這些會存在
%APPDATA%\Token Monitor\裡面。那台電腦多安全,這些憑證就多安全。 - Hub 密碼是大家共用的。 用「其中一台當 Hub」的方式是純 HTTP,不要直接對外網開埠,走區網或 Tailscale。
- 用 Cloudflare Worker 等於把統計放到網路上。 密碼要夠長。雖然不含對話內容,但你的工作節奏會被看見。
- 專案資料夾名稱會同步出去。 完整路徑跟對話標題不會,但資料夾名稱會。公司專案的命名如果本身就敏感,這點要先想過。
幾個要注意的地方
- 更新很快。 5 天內發了三個版本。修得快是好事,但 Windows 每次都要重下 113 MB。在意流量的話可以關掉自動更新。
- Cursor 偶爾會同步失敗。 我這邊出現過
Cursor API returned status 404,不影響其他工具。Cursor 走的是帳號層級的匯出,本來就會慢幾分鐘。 - 重開機不會自己起來。 「登入時啟動」預設關,從原始碼跑的版本甚至勾不了,要自己打包;當 Hub 的那台更要掛成開機服務,細節見〈坑:重開機之後,它不會自己跑起來〉。
- 只有一台機器的話,同步那塊完全可以不用碰。
- 這篇是 Windows 11 + v0.59.0 的紀錄,版本一直在動,你看到的畫面可能跟我不一樣。
結論
Token Monitor 解的問題很具體:AI 工具變多之後,用量跟額度散得到處都是。它的做法是讀本機紀錄、不碰內容、要的話可以跨機器同步,這個界線劃得很合理。
三句話收尾:
- 自己一台用,裝完就結束了,不用設定。
- 多台要同步,記得先點「Connect to a hub」那顆圓點,欄位才會出現。
- 想在瀏覽器看,就得自己接 API。 這是它目前最明顯的缺口,但也因為它是開源的、API 開得夠大方,補起來不難。真的想大改,原始碼跟打包指令都在,MIT 授權,隨你改。
最後一句提醒:自己玩跟團隊導入是兩件事。 自己裝就是裝完結束;要讓全團隊用,記得先把「自己的更新通道、資料搬進資料庫、免設定連 Hub」這三件事排進去,順序照前面那張表走就不會亂。


























留言