Communitygithub.com

ShuchangZhang/求職応募管理ツール

ローカルファーストな求職応募管理ツール。自然言語での更新とビジュアルなSankeyダッシュボードを提供します。

求職応募管理ツール とは?

このスキルは、ローカル環境で動作するポータブルな求職応募管理ツールです。ユーザーが自然言語で応募状況を更新できるよう設計されており、ボードの自動解決、競合のない安全なデータ書き込み、ビジュアルなSankeyダッシュボード表示を特徴とします。macOS、Linux、Windows に対応し、Python スクリプト群によってデータのスナップショット、検証、競合チェック、アトミックな置換を実現します。OpenAI Codex、Claude Code、Cursor などの AI エージェント環境で利用可能で、ユーザーは「○○社の面接を予約した」と話すだけで自動的に記録が更新されます。また、`stageLevels` によるカスタムステージ管理、`lang` による多言語対応、`note` フィールドの明示的な使用ルールなど、堅牢なデータモデルを備えています。エンジンファイルの再デプロイとデータ操作は分離されており、誤った上書きを防ぎます。

対応~Claude Code~Codex CLI~Cursor
npx skills add ShuchangZhang/job-application-tracker

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

求職応募管理ツール は何をしますか?

ローカルで動作するポータブルな求職ボードを、応募記録の唯一の情報源として使用します。ユーザーが自然に話すままに処理し、正しいボードを解決し、既存情報を保持し、決定論的で競合のない変更を適用します。

言語ポリシー

スキルの実装、エージェントへの指示、参照情報、スクリプト、スキーマ、コメント、テストは英語で記述してください。英語の名前と定義を正規のものとして扱います。

ユーザー向けの画面はローカライズしても構いません。README.md および assets/dashboard-* フロントエンドファイルは現在中国語と英語を含んでいます。ステージとバッチには言語に依存しないコードを使用し、表示言語が基礎となる意味を変えないようにします。

必要な参照情報

現在の操作に必要な参照情報のみを読んでください:

  • 記録、更新、検証、要約、リマインダーを行う前に references/data-model.md を読む。
  • ボードのインストール、アクティベート、位置特定、移動、修復、起動の前に references/deployment.md を読む。
  • ダッシュボード、ランチャー、ローカルサーバー、可視化ロジックの再構築または変更の前に references/board-ui.md を読む。

最初にボードを解決する

選択されたディレクトリを 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: 有効なボードが1つだけの場合、そのパスとレコード数を報告します。
    • 終了コード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. 今日から7日間の日付付きリマインダーを最初に配置します。
  4. レコードを進行中、オファー済み、終了、未応募にグループ化します。
  5. 古くなった進行中レコードと今後のマイルストーンを特定します。
  6. 1つの具体的な次のアクションで終わります。

ユーザーが明示的に要求しない限り、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/: 決定論的なSankey交差回帰ユーティリティ。

関連スキル