Communitygithub.com

ShuchangZhang/job-application-tracker

一個以本地優先的工作申請追蹤工具,支援自然語言更新與視覺化的桑基圖儀表板。

job-application-tracker 是什麼?

這個技能提供了一個完整的本地端工作申請追蹤系統,讓使用者可以透過自然語言直接更新申請進度,而無需手動操作複雜的資料表。其核心特色在於採用「本地優先」的策略,所有資料都儲存在使用者指定的目錄中,不依賴任何雲端服務,確保資料隱私與自主權。技能支援多種平台(macOS、Linux、Windows),並透過一系列 Python 腳本(board_locator.py、data_store.py)來安全地管理看板(board)的定位、資料的快照、衝突偵測與原子性寫入。視覺化方面則提供一個無依賴的桑基圖儀表板,能直觀地呈現申請從投遞、面試到錄取或拒絕的整體流程。此外,技能還內建了嚴謹的資料處理規則,例如不直接修改原始資料檔、使用樂觀鎖定避免並發編輯衝突,並且要求使用者明確的許可才能建立新看板,這些設計都保障了資料的完整性與操作的安全性。

相容平台~Claude Code~Codex CLI~Cursor
npx skills add ShuchangZhang/job-application-tracker

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

工作申請追蹤器

將一個本機、可攜帶的工作看板作為應用程式紀錄的單一事實來源。讓使用者自然對話;解析正確的看板,保留既有資訊,並套用確定性、無衝突的變更。

語言政策

保持技能實作、代理程式指示、參考文件、腳本、架構、註解與測試使用英文。將英文名稱與定義視為標準。

對使用者的介面可以進行在地化。README.md 與 assets/dashboard-* 前端檔案目前包含中文與英文。儲存階段與批次的中立語言代碼,使顯示語言永遠不會改變底層含義。

必要參考文件

僅閱讀目前操作所需的參考文件:

先解析看板

將選定的目錄標記為 BOARD_DIR。

在 macOS/Linux 上使用 python3。在 Windows 上,將以下指令中的 python3 替換為 py -3(如果可用),否則使用 python。

  1. 如果使用者提供路徑,檢查該路徑:

    python3 <skill-dir>/scripts/board_locator.py inspect --board-dir <path>
    

    如果它包含有效的舊版 data.json 但缺少標記檔,說明將新增一個可攜帶、非敏感的識別檔案,然後執行:

    python3 <skill-dir>/scripts/board_locator.py mark --board-dir <path>
    
  2. 否則,探索已標記的看板:

    python3 <skill-dir>/scripts/board_locator.py discover
    
  3. 嚴格解讀探索結果:

    • 退出碼 0:使用該單一有效看板,並回報其路徑與紀錄數量。
    • 退出碼 4:要求提供現有路徑或明確許可來建立新看板。
    • 退出碼 5:顯示所有候選看板,並要求使用者選擇。

永遠不要根據修改時間、紀錄數量或猜測來選擇。永遠不要因為探索失敗就建立看板。永遠不要在使用者的家目錄中儲存全域絕對路徑的註冊表。

安全資料工作流程

對於每次讀取或寫入:

  1. 解析 BOARD_DIR。

  2. 當日期影響操作時,取得真實的當前日期:在 macOS/Linux 上執行 date +%Y-%m-%d,或在 Windows PowerShell 上執行 (Get-Date).ToString('yyyy-MM-dd')。

  3. 建立快照:

    python3 <skill-dir>/scripts/data_store.py snapshot \
      --data <BOARD_DIR/data.json>
    
  4. 保留回傳的 boardTitle、可選的 lang、可選的 stageLevels、所有紀錄、所有未知但有效的紀錄欄位,以及回傳的 ETag。

  5. 對於寫入操作,建立一個候選 JSON 檔案並安全地取代:

    python3 <skill-dir>/scripts/data_store.py replace \
      --data <BOARD_DIR/data.json> \
      --input <candidate.json> \
      --expected-etag <etag>
    
  6. 將退出碼 3 視為並行編輯衝突。取得新的快照,僅重新套用使用者請求的變更,然後重試。永遠不要強制寫入過時的資料。

  7. 僅在工具成功後確認操作成功。

永遠不要直接寫入 data.json。永遠不要在沒有使用者明確確認的情況下載入教學範例,或將其視為真實的申請。永遠不要在僅進行資料操作時修改已部署的引擎檔案。

核心操作

記錄或更新申請

  1. 閱讀 references/data-model.md。
  2. 根據公司與職位比對現有紀錄。如果目標不明確,請使用者選擇。
  3. 對於新紀錄,需要公司與職位。針對遺漏的選擇性詳細資料(管道、申請入口、城市與招募批次)詢問一次,然後等待使用者回答或明確要求跳過,再進行儲存。
  4. 在 records 的開頭插入新紀錄,使新申請預設顯示在最前面。更新紀錄時,保留其在陣列中的現有位置。
  5. 對於現有紀錄,僅變更使用者提到的欄位。
  6. 透過附加事件來推進進度;永遠不要維護一個獨立的狀態欄位。
  7. 對於未見過的自訂階段,保留其確切文字並新增 stageLevels 規則。使用使用者要求的放置位置;否則預設放置在緊鄰 k_hr 之前的一個不同層級。
  8. 除非使用者明確要求寫入內容,否則保持 note 為空。
  9. 使用安全資料工作流程,並回報確切被變更的紀錄與事件。

永遠不要虛構公司、職位、日期、管道、地點、薪資、結果或面試輪次。

顯示文字進度摘要

  1. 閱讀 references/data-model.md。
  2. 建立安全快照,但不修改資料。
  3. 首先將今日起至未來七天的符合條件的日期提醒事項列出。
  4. 將紀錄分組為:進行中、已錄取、已結束、尚未申請。
  5. 識別停滯的進行中紀錄與即將到來的里程碑。
  6. 以一個具體的下一步行動作為結尾。

除非使用者明確要求,否則不要重建 HTML。

開啟或重建視覺化看板

  1. 閱讀 references/deployment.md 與 references/board-ui.md。
  2. 在觸碰引擎檔案之前,先解析並驗證現有看板。
  3. 一般情況下,告訴使用者啟動看板並開啟 http://127.0.0.1:8770/。
  4. 僅在引擎檔案缺失,或使用者明確要求重建或更新引擎時,才重新複製前端引擎組。
  5. 保留 data.json 與所有備份檔。

安裝或啟用

閱讀 references/deployment.md 並遵循其「先探索」的工作流程。技能的安裝與新看板的建立是兩個不同的動作。建立看板需要使用者的明確意圖。

嚴格規則

  1. 僅使用已解析、已標記的 BOARD_DIR。
  2. 不要無聲地建立替代看板。
  3. 不要遞迴掃描使用者的家目錄。
  4. 不要儲存全域路徑註冊表。
  5. 對每個代理程式端的資料寫入操作都使用 data_store.py。
  6. 保留未提及的資料與現有欄位。
  7. 除非明確要求,否則保持 note 為空。
  8. 使用來自 references/data-model.md 的中立階段與批次代碼。
  9. 使用真實的當前日期;不要依賴心算日期。
  10. 如果無法取得檔案寫入權限,解釋確切的步驟,且永遠不要聲稱寫入成功。
  11. 除非使用者同時明確要求,否則不要將資料修改與引擎重建合併。
  12. 在部署或更新引擎檔案時,不要覆蓋 data.json、.data.backup.*.json 或 .job-tracker-board.json。

捆綁資源

  • scripts/board_locator.py:識別、標記並安全探索看板目錄。
  • scripts/data_store.py:快照、驗證、衝突檢查、原子性取代與備份資料。
  • assets/dashboard-template.html、dashboard.css 與 dashboard-*.js:在地化、無依賴的儀表板模組。
  • assets/server.py:僅限迴圈回送的本機伺服器與經過驗證的資料 API。
  • assets/start.command / assets/stop.command:macOS 啟動器。
  • assets/start-board.bat / assets/stop-board.bat 以及對應的 PowerShell 輔助腳本:附帶健康檢查與診斷日誌的 Windows 啟動器。
  • assets/data.json:僅供明確請求的新看板使用的空白種子檔案。
  • tools/:確定性的桑基圖交叉迴歸工具。

相關技能