Mark Ku's Blog

前言:工具開一排,額度到底燒到哪去了

現在寫程式,同時開著 Claude Code、Codex、GitHub Copilot、Cursor 已經很正常。但工具一多,幾個問題就來了:

  • 快撞上限了嗎?通常都是跳警告才知道。
  • 錢花在哪個工具上?每家都有自己的後台,要比就得一個一個開。
  • 哪一台機器燒的?公司筆電、家裡桌機、伺服器上跑的 agent,各燒各的。

Token Monitor 就是在解這件事:一個桌面小視窗,讀你電腦上各家工具留下的紀錄,把用量、花費、剩餘額度全部收在同一個畫面,而且可以多台機器一起看。

Token Monitor 的 GitHub 專案首頁,支援 Windows、macOS、Linux
Token Monitor 的 GitHub 專案首頁,支援 Windows、macOS、Linux

這篇不是翻譯官方文件,是我自己在 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 負責畫面跟同步。

兩種用法:一台機器,或多台一起

這兩種模式先搞懂,後面設定才不會亂:

Loading diagram…

重點只有兩個:

  • 預設就是一台機器的模式,裝完就會動,什麼都不用設。
  • 多台要同步的話,得先挑一個 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),原因有三層:

  1. 「登入時啟動」預設是關的。 ⚙ 裡有一個「Start at login(登入時啟動)」,出廠值是 startAtLogin: false。用官方安裝檔裝的話,自己去把它打開就好。
  2. 從原始碼跑的版本,這個選項根本勾不了。 程式裡寫死了 if (!app.isPackaged) return false,用 npm start 或 npm run dev 跑起來的,勾選框是灰的,旁邊寫著「僅在打包後的版本可用」。所以如果你像我們一樣 fork 回來改,一定要自己打包:跑 npm run dist:win 產出安裝檔、裝起來,再去勾這個選項。
  3. 它是「登入時」啟動,不是「開機時」。 底層用的是 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,瀏覽器直接打開,填網址跟密碼就會動:

自製的 Hub Dashboard:今日、本月、全部、活躍四張卡片,底下是工具排行榜、Token 組成、每日趨勢跟各家方案的剩餘額度
自製的 Hub Dashboard:今日、本月、全部、活躍四張卡片,底下是工具排行榜、Token 組成、每日趨勢跟各家方案的剩餘額度

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

Dashboard 下半部:兩台機器的系統、版本、最後回報時間,以及 28 個工具的追蹤狀態
Dashboard 下半部:兩台機器的系統、版本、最後回報時間,以及 28 個工具的追蹤狀態

這塊其實很實用,一眼就看得出哪台是背景跑的、哪台是有開視窗的、各自最後回報是什麼時候。如果某一台的「最後回報」停在幾小時前,通常就是同步出問題了。

要自己做的話,其實只要三件事:

  1. 做一個填網址跟密碼的表單
  2. 接 /api/stats/stream,有資料就重畫
  3. 把回來的 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 跑在一台機器或 NASSQLite一個檔案、零維護、免裝伺服器,但該有的索引、交易、SQL 查詢都有
多團隊、要長期趨勢、要接 BIPostgreSQL(時序量大再加 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 工具變多之後,用量跟額度散得到處都是。它的做法是讀本機紀錄、不碰內容、要的話可以跨機器同步,這個界線劃得很合理。

三句話收尾:

  1. 自己一台用,裝完就結束了,不用設定。
  2. 多台要同步,記得先點「Connect to a hub」那顆圓點,欄位才會出現。
  3. 想在瀏覽器看,就得自己接 API。 這是它目前最明顯的缺口,但也因為它是開源的、API 開得夠大方,補起來不難。真的想大改,原始碼跟打包指令都在,MIT 授權,隨你改。

最後一句提醒:自己玩跟團隊導入是兩件事。 自己裝就是裝完結束;要讓全團隊用,記得先把「自己的更新通道、資料搬進資料庫、免設定連 Hub」這三件事排進去,順序照前面那張表走就不會亂。

作者

Mark Ku

10 年以上的軟體工程師,做過北美電商與 AI SaaS 訂閱收費系統。閱讀更多

覺得這篇有幫助?

作者做的免費工具、每日 Podcast 與電子報,都在這裡。

Mark Ku · 本文採用 CC BY 4.0 授權,轉載請註明作者並附上原文連結。

留言

訂閱電子報

訂閱後即時收到新文章通知,不錯過任何技術分享。

提交即表示同意接收電子報,隨時可。

站長的公司

Vibe Coding 架構規劃與陪跑

團隊已經用 AI 做出小工具,卻怕壞了沒人修、需求一變就不敢改?226 Network 幫你把程式放進 Git、密碼另外保管、排程搬上固定主機,再補上交接文件與測試。

熱門文章

View all
Mark Ku
··635

Oracle Cloud 永久免費方案 Linux 主機及固定 IP :0 元打造雲端解決方案

Oracle Cloud 永久免費方案 Linux 主機及固定 IP :0 元打造雲端解決方案
Mark Ku
··471

告別 Postman 收費陷阱!開源 Git 原生 API 測試神器 Bruno 實戰指南

告別 Postman 收費陷阱!開源 Git 原生 API 測試神器 Bruno 實戰指南
Mark Ku
··268

一款免費開源類似於 Notion 類知識庫系統 — Outline Wiki 佈署與備份全攻略

一款免費開源類似於 Notion 類知識庫系統 — Outline Wiki 佈署與備份全攻略
Mark Ku
··214

打造高效 API 管理平台:從 0 開始部署 Kong Gateway - Part 1

打造高效 API 管理平台:從 0 開始部署 Kong Gateway - Part 1
Mark Ku
··210

訓練自己的 AI 語音:硬體門檻、開源模型比較與 LoRA 微調

訓練自己的 AI 語音:硬體門檻、開源模型比較與 LoRA 微調
Mark Ku
··209

在 Ubuntu 上設置 Samba 來共享資料夾,讓 Windows 11 用戶可以存取

在 Ubuntu 上設置 Samba 來共享資料夾,讓 Windows 11 用戶可以存取