OpenHire · 哨兵 について
OpenHire は求職者向けの MCP 求人検索サービスです。雇用主自身の採用ページや ATS の求人を索引化し、雇用主の元の掲載日から求人の経過日数を示します。レジュメ照合はローカルで行い、応募を代行せず、マッチ度と新しさで順位付けします。
主な機能
- 01雇用主発の求人を検索
- 02元の掲載日と掲載日数を表示
- 03マッチ度と新しさで順位付け
- 04レジュメをアップロードせずローカル照合
- 05雇用主の応募ページへリンク
- 06MCP と CLI で求人検索
活用シーン
- 01地域、スキル、職種で求人を検索
- 02古い求人や長期掲載の求人を除外
- 03特定企業の新着求人を追跡
- 04CLI で索引を更新して求人を検索
MCP 対応
MCP サーバーとして、掲載日、掲載日数、雇用主の応募リンクを含む検索結果をアシスタントに提供します。公開索引を取得し、照合はローカルで実行します。プロトコルにレジュメ欄はなく、応募も送信しません。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
8掲載時のツール一覧 · 今日に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| limit | integer | いいえ | |
| title | any | いいえ | |
| offset | integer | いいえ | |
| remote | any | いいえ | |
| skills | any | いいえ | |
| company | any | いいえ | |
| currency | any | いいえ | |
| location | any | いいえ | |
| min_salary | any | いいえ | |
| role_family | any | いいえ | |
| remote_scope | any | いいえ | |
| required_skills | any | いいえ | |
| collapse_role_group | boolean | いいえ | |
| require_stated_salary | boolean | いいえ |
詳細
翻訳後に原文が更新されています。最新の内容は原文をご確認ください。
OpenHire · 开聘
AI アシスタントに求人探しを任せるレーダー — 求人は企業の公式サイトから、掲載期間も確認でき、履歴書がサーバーに送信されることはありません。 AI アシスタントに求人探しを任せるレーダー —— 一次情報の求人、掲載期間のスコア、履歴書が当社のサーバーを経由することはありません。
実際のターミナル出力 — PyPI からインストールし、公開インデックスをダウンロードして検索します。アカウントも登録も不要です。
ここにある数字はすべて検証できます。 掲載期間レポート (企業ごとの中央値を、企業名付きで毎月公開) · numbers.json (引用するすべての数値の出典。更新のたびに再生成) · レポートの生データ。 引用するすべての数字は検証できます:求人掲載期間の月次レポート · numbers.json
貴社がここに掲載されていて、貴社自身が掲載したものではない場合は? 貴社の採用ページで求人情報が公開されているため、このインデックスに掲載されています。 求人が掲載されている期間は測定できますが、その理由は分かりません。長期間掲載されている求人は、判断ではなく、問いかけです。貴社のテナントを申請 — いつまでも無料です — して、ご自身の言葉で理由を説明することも、削除を依頼することもできます。ご依頼があれば、議論せずに削除します。 貴社が収録されていて、貴社から登録したものではない場合は?こちらから申請できます。無料で、ご自身の言葉で説明することも、削除を直接依頼することもできます。
三つの原則 · OpenHireが決してしないこと
- 履歴書は保存しません · 履歴書は一切不要です。 履歴書はお使いのコンピューターに残ります。ネットワークを通るのは、ご自身で生成した匿名のフィンガープリントと求人 ID だけです。プロトコルに履歴書のフィールドはなく、余分な
resume引数は拒否されることを CI テストで固定しています。 履歴書はお使いのコンピューターに残ります。ネットワークを通るのは、クライアントが生成した匿名のフィンガープリントと求人 ID だけです。プロトコルに履歴書のフィールドはなく、追加のresume引数は拒否されることを CI でテストしています。 - 応募を代行しません · 応募は決して代行しません。 雇用主自身の応募ページに案内するだけで、どの ATS にも応募を送信しません。フォームの確認でさえ、私たちのテストでは通常の GET を一度行うだけで、それ以上はしません。 雇用主自身の応募ページに案内するだけで、どの ATS にも応募を送信しません。私たちのテストでも、フォームに通常の GET リクエストを一度行うだけで終了します。
- 追跡しません · 追跡は一切ありません。 アナリティクスも、閲覧数の集計も、テレメトリーもありません。サーバーに保存するのは匿名の認可レコード(フィンガープリント + 求人 ID)だけで、利用者が誰なのかを示す情報はありません。インデックス自体はお使いのコンピューター上で動作します。 アナリティクスも、閲覧数の集計も、テレメトリーもありません。サーバーに保存するのは匿名の認可レコード(フィンガープリント + 求人 ID)だけで、利用者が誰なのかを示す情報はありません。インデックス自体はお使いのコンピューター上で動作します。
この三つに加えて、同じく厳守する原則がもう一つあります。順位は買えません。 順位は(一致度、新しさ)の純粋関数です。下記の三つのプライバシー上のレッドラインをご覧ください。 この三つに加えて、同じく厳守する原則がもう一つあります。ランキングは買えません。ランキングは(一致度、新しさ)の純粋関数です。下記の三つのプライバシー上のレッドラインをご覧ください。
エージェントが実際に見るもの
アシスタントに、自然な言葉で質問します。アシスタントが search_jobs を呼び出すと、返されるすべての行に雇用主の実際の掲載日が含まれているため、推測ではなく、掲載から時間が経っているかどうかをエージェントが判断できます。
あなた: まだ実際に募集している、シニアの Python 職はありますか?古い求人は除外してください。
// one row from search_jobs — trimmed to the fields that matter here
{
"title": "Senior Python Engineer",
"company": "MongoDB",
"datePosted": "2026-03-31", // from the employer's ATS, not a board's refreshed label
"days_open": 166,
"ghost_score": 0.61, // pure f(relist_count, datePosted) — frozen by a test
"apply_channel":"https://boards.greenhouse.io/…", // straight to the employer
"verified_at": "2026-09-02T09:47:10Z"
}
アシスタント: この求人は掲載から166日経過しており、ghost_score は0.61です。優先度を下げたほうがよさそうです。 代わりに、過去3週間以内に掲載された求人を4件ご紹介します……
ghost_score は求人が掲載されてからどれくらい経過したかを示すもので、雇用主が今も採用する意向があるかどうかを示すものではありません。掲載期間が長い求人は、単に「採用が難しい」だけの場合もあります。結論ではなく、確認する理由として扱ってください。
あらゆる MCP 対応アシスタント(Claude、豆包 Doubao、DeepSeek(Cherry Studio や Chatbox などの MCP クライアント経由)、Cursor、腾讯 WorkBuddy、TRAE、Windsurf、Cline、コネクター経由の ChatGPT)を、AI/インフラ、自動運転、エンボディド AI の求人を探す専用レーダーに変える MCP サーバーです。米国、ヨーロッパ、中国の143社の採用サイトや公開 ATS API(Greenhouse/Lever/Ashby/北森 Beisen/Moka、および Li Auto などの雇用主が直接運営する採用サイト)から求人情報を取得します(Waymo、Figure、Zoox、さらに Unitree、XPeng、UBTECH、Mech-Mind など)。 アカウント不要。登録不要。履歴書のアップロード不要。これからもずっと不要です。
求人サイトにはできないことが3つあります。
- 各求人が実際にどれくらい掲載されているかを表示します。 各求人には、雇用主のシステムから取得できる場合は雇用主の実際の掲載日に基づいて算出した
ghost_scoreが付きます。実際の掲載日が取得できない場合は、このインデックスで初めて確認した日を使い、date_signalでその旨を示します。求人サイトが表示する「2日前」は、ATS 上では300日前の情報かもしれません。 - 口約束ではなく、仕組みによるプライバシー保護。 プロトコルに履歴書の入力欄はありません。誰かが追加すると CI テストが失敗し、ビルドが止まります。マッチングはお使いのマシン上で実行され、サーバーに送信されるのは匿名のフィンガープリントだけです。
- お金で順位を変えられないランキング。 順序は(マッチ度、新しさ)だけで決まる、変更不可の純粋関数です。スポンサー枠も入札もありません。その仕様はテストによって固定されています。
これは「哨兵 / Sentinel」のリファレンス実装です。プロトコル仕様の全文は
design_handoff_openhire_v01/README.md を参照してください。
クイックスタート — 1分以内
インストールも、クロールが終わるのを待つ必要もありません。 お使いの MCP クライアントの設定に、以下を追加してください。
{ "mcpServers": { "openhire": { "command": "uvx", "args": ["openhire@latest", "serve"] } } }
あとはアシスタントに求人について尋ねるだけです。これで設定は完了です。サーバーは初回起動時に約30 MBの公開インデックスをバックグラウンドで自動ダウンロードするため、アシスタントとの会話中に数分ほどで検索結果が表示されるようになります。アカウントも登録も履歴書のアップロードも不要です。
必要なのは uv(uvx が付属します)だけです。uv がない状態で上記の設定を使うと、「server failed to start」と表示されるだけで起動に失敗するため、先にインストールしてください。
curl -LsSf https://astral.sh/uv/install.sh | sh # macOS / Linux
irm https://astral.sh/uv/install.ps1 | iex # Windows PowerShell
Claude Desktop なら、これすら不要です。openhire-0.8.7.mcpb をダウンロードし、ダブルクリックしてください。ターミナルも Python も uv も必要ありません。
Cursor なら、ワンクリックでインストールできます(ただし、引き続き uv を PATH に設定する必要があります)。
クライアントごとの設定パスと、uvx を使う場合と一度だけインストールする場合の違いについては、以下の**対応クライアント**を参照してください。
ターミナルを使いたい場合 CLI から同じインデックスを利用できます。
pipx install openhire # keeps it isolated and puts `ohp` on your PATH
ohp bootstrap # 143 employers · ~17k live postings · no account
ohp search --required-skills rust,k8s --remote --role-family engineering
ohp search --currency CNY --role-family engineering # e.g. CN 智驾 / robotics roles
ohp bootstrap は公開スナップショット(約30 MB、アカウント不要)をダウンロードしてから、増分クロールを1回実行し、verified_at を更新して掲載終了した求人を検出します。時間がかかるのはクロールです。初回のインデックスでは雇用主ごとに1行ずつ処理するため、20分以上かかることがあります。スナップショットの取得後はクロールを中断できます。インデックスはすでに利用可能ですが、確認日は今日ではなく、直近の週次更新時点になります。上記の MCP を使う方法では、これらの作業は不要です。serve がバックグラウンドでスナップショットを自動取得します。
対応クライアント
すべてのクライアントで同じ MCP エントリを使用します。以下の設定はすべての MCP クライアントで動作し、パッケージを必要に応じて取得します。ただし、先に uv をインストールしておく必要があります。
MCP は初めてですか?以下の設定の前に、2 つの簡単な方法をご紹介します。 Claude Desktop:
openhire-0.8.7.mcpbをダウンロードして ダブルクリックします。ターミナルも Python も不要です。 Cursor —(
uvのインストールが必要です)。 腾讯 WorkBuddy / Cursor / Claude Code / TRAE — または、エージェントに次のように伝えます:「MCP サーバー github.com/gzchenhao/openhire をインストールしてください。uvがなければ先にインストールし、MCP 設定にuvx openhire@latest serveを追加して、変更したファイルを教えてください。」 豆包(豆包工作) — カスタムコネクターではコマンドではなく HTTP アドレスを指定します。マシン上でohp serve --transport streamable-http --port 8000を実行し、http://127.0.0.1:8000/mcpをカスタムコネクターとして追加します(「Works with」の豆包の項目を参照)。 DeepSeek — DeepSeek アプリには MCP の設定欄がありません。MCP クライアント(Cherry Studio、Chatbox、Cline、WorkBuddy、TRAE)内で DeepSeek を使用し、そのクライアントに以下の設定を指定してください。
前提条件: uvx は uv に含まれています。これがないと、以下の設定はクライアントに「server failed to start」と表示されるだけで失敗します。先に uv をインストールしてください:
curl -LsSf https://astral.sh/uv/install.sh | sh # macOS / Linux
irm https://astral.sh/uv/install.ps1 | iex # Windows PowerShell
{ "mcpServers": { "openhire": { "command": "uvx", "args": ["openhire@latest", "serve"] } } }
初回起動時に、約 30 MB のインデックスがバックグラウンドでダウンロードされます。数分以内に検索できるようになります。
お困りですか?
ohp doctorを実行してください。 チャット画面からはすべて同じように見える 3 つの問題(uvがない、インデックスがまだない、サーバーは設定済みだが有効になっていない)を確認し、見つかったすべてのクライアント設定を読み込みます。ターミナルで実行することが重要です。クライアントがサーバーを起動していなければ、クライアント内で何を出力しても、こちらには届きません。設定の編集が最後の手順とは限りません。 新たに追加したサーバーのツールを読み込む前に、有効化または信頼する操作が必要なクライアントがいくつかあります。設定は保存されていてもサーバーは起動せず、アシスタントがツールを認識していないように見えるだけです。検索しても何も起きない場合は、クライアントの MCP/コネクターパネルを開き、openhire が一覧にあり、かつオンになっていることを確認してください。(Claude Desktop では完全に終了して再度開く必要があります。Cursor と Windsurf は再読み込み時に反映されます。一部のクライアントではサーバーごとの切り替えボタンが表示されます。) 設定を変更しただけでは完了とは限りません:一部のクライアントでは、ツールを読み込むために設定画面でこのサーバーを手動で「信頼/有効化」する必要があります。設定があるのに、アシスタントがこれらのツールをまったく認識していない場合は、この設定を確認してください。
uvx を使うと毎回かかるコスト。 uvx は起動のたびにパッケージを解決します。キャッシュが温まっていても、呼び出しごとに 7~8 秒かかることが計測されています。MCP セッションを開始するたび、また CLI コマンドを実行するたびに時間がかかります。その代わり、インストールを管理する必要はありません。最初に一度だけ時間をかける方法を選ぶ場合は、次のようにします:
pipx install openhire # then use "command": "ohp", "args": ["serve"] — process-start latency
@latest を指定すると、予告なくツールの構成が変わる可能性もあります。固定したい場合は、次のようにバージョンを指定してください:"args": ["openhire==0.8.7", "serve"]。
インデックスが空の場合、サーバーは初回実行時に公開求人スナップショットを自動でダウンロードするため、ohp bootstrap は省略可能です。pipx install openhire を実行した場合は、"command": "ohp" も使用できます。
Claude Desktop — %APPDATA%\Claude\claude_desktop_config.json(macOS:~/Library/Application Support/Claude/)。編集後は終了して再度開きます:
{ "mcpServers": { "openhire": { "command": "ohp", "args": ["serve"] } } }
Cursor — ~/.cursor/mcp.json(またはプロジェクトの .cursor/mcp.json):
{ "mcpServers": { "openhire": { "command": "uvx", "args": ["openhire", "serve"] } } }
Windsurf — ~/.codeium/windsurf/mcp_config.json:
{ "mcpServers": { "openhire": { "command": "uvx", "args": ["openhire", "serve"] } } }
Claude Code — このリポジトリはプラグインマーケットプレイスでもあるため、Claude Code 内で 2 つのコマンドを実行するだけでセットアップできます(引き続き uv が PATH 上にある必要があります):
/plugin marketplace add gzchenhao/openhire
/plugin install openhire@openhire
Cursor プラグイン/Agent Plugins — このリポジトリには .cursor-plugin/plugin.json と、ベンダーに依存しない plugin.json + mcp.json(agent-plugins.org)が含まれているため、Agent Plugins を読み込むクライアントなら、リポジトリの URL からインストールできます。
TRAE(字节) — ワンクリックインポートリンク(TRAE は追加する前に設定の確認を求めます):
TraeCode 国内版 ·
TRAE international。
または、上記の uvx 設定を手動で TRAE の MCP 設定に貼り付けてください。
腾讯 WorkBuddy — ~/.workbuddy/mcp.json に、同じ mcpServers 形式で設定します。WorkBuddy は起動時にファイルを読み込むため、編集後にアプリを終了して再起動してください(または、アプリの「専門家・スキル・コネクター → カスタムコネクター」ボタンからサーバーを追加してください)。手動で記述したエントリーは、それまでは一覧に表示されません。マシンに uv がない場合は、Python ≥ 3.11 の任意の環境に pip install openhire でインストールし、その環境の ohp 実行ファイルを "args": ["serve"] とともに command に指定してください。
豆包 · 豆包工作(字节) — 豆包の「スキル・コネクター・パートナー → 新規作成 → カスタムコネクターを新規作成」では HTTP アドレスのみ受け付け、コマンドラインは受け付けません。まず、ローカルマシンで HTTP エンドポイントを起動します:
pipx install openhire
ohp serve --transport streamable-http --port 8000 # 本机 http://127.0.0.1:8000/mcp
次に、豆包でカスタムコネクターを新規作成します。転送タイプは HTTP、サーバー URL は http://127.0.0.1:8000/mcp、Headers は空欄のままにして、保存後にスイッチをオンにします。
インデックス、指紋、マッチングはすべてご自身のコンピューター上で行われ、豆包はローカルポート経由で呼び出すだけです。
(2026-10-12 に豆包工作で動作確認済みです。コネクターを新規作成した後、「openhire で香港の求人を検索して」と尋ねるだけで結果が表示されます。)
DeepSeek — DeepSeek 自体のアプリには MCP の設定項目がありません。DeepSeek を MCP 対応クライアント(Cherry Studio、Chatbox、Cline、腾讯 WorkBuddy、TRAE など)でモデルとして使用し、上記の uvx 設定をそのクライアントの MCP 設定に入力してください。Cherry Studio の場合は「設定 → MCP サーバー → 追加 → タイプ STDIO、コマンド uvx、引数 openhire@latest serve」です。
初回起動時に公開スナップショット(求人/企業のみ、約 30 MB)をダウンロードします。少しお待ちください。 後で更新するには、
ohp bootstrap --forceまたはohp ingestを実行します。Microsoft Store 版 Claude Desktop を Windows で使用する場合、設定ファイルは…\Packages\<Claude package>\LocalCache\Roaming\Claude\にあります。ホスト型/リモート:
ohp serve --transport streamable-http --host 0.0.0.0 --port 8000を実行すると、http://host:8000/mcpが公開されます(--transport sseも使用できます)。Dockerfileが含まれています。お使いのネットワークから GitHub にアクセスできない場合(プロキシのない中国本土、一部のサンドボックスなど): スナップショットは GitHub Release のアセットです。ダウンロードは再開・再試行されるようになりましたが、ブロックされたホストには引き続きアクセスできません。信頼できるミラー、または別のマシンを使って
openhire-index.db.gzを取得し、ohp bootstrap --snapshot-url <url-or-local-path>を実行するか、サーバーのenvにOPENHIRE_SNAPSHOT_URLを設定して自動ダウンロードに使用してください。ohp bootstrap --freshを実行するとスナップショットを完全にスキップし、各雇用主の ATS をクロールします(20 分以上かかります。GitHub へのアクセスは不要です)。ダウンロード失敗でインデックスが空になった場合、結果が「一致なし」のように見えるのではなく、ツールの結果にその旨が表示されます(bootstrap_error)。 中国国内のネットワークから GitHub にアクセスできない場合:信頼できるミラーからスナップショットを取得してohp bootstrap --snapshot-url <アドレスまたはローカルファイル>を実行するか、MCP 設定のenvにOPENHIRE_SNAPSHOT_URLを設定してください。ohp bootstrap --freshは GitHub を経由せずに直接クロールします。
できること
| ツール | 提供する内容 |
|---|---|
search_jobs | ライブインデックスを厳密に絞り込みます。各結果には verified_at、datePosted、days_open、ghost_score、remote_scope、eligible_regions、apply_channel が含まれます。required_skills(すべて必須)、role_family、remote_scope、min_salary + currency、company、location(二言語の都市名エイリアス:香港 = Hong Kong、广州 で 天河区 まで検索可能)、title(求人タイトル内の単語。例:招聘 / recruit。HR、財務などの職種ではスキルタグ名を使わずに絞り込めます)で絞り込みます。 |
watch_intent | 継続的な検索条件を一度登録すれば、次に確認したときに新たに一致した求人を取得できます。ターミナルを閉じた後も有効です。営業職やソリューション職が対象外になるよう、required_skills / role_family / location / title を指定できます。 |
check_watches | 前回の確認以降に新たに一致した求人を取得します(クライアント側からの取得。stdio にはプッシュ機能がありません)。 |
authorize_application | 求人ごとに一度、明示的な確認を行います。承認を記録し、雇用主自身の応募 URL を返します。応募はご自身で行います。履歴書を受け取ることはできません。 |
get_company_info | 雇用主 1 社の匿名化された信頼性シグナルを集約します(ghost_score_avg、active_jobs、index_built_at)。候補者のデータは一切含まれません。 |
check_employer | 雇用主 1 社に関する事実を、情報源と時刻とともに確認します。雇用主独自のシステムがインデックスに含まれているか、ドメインの登録期間(RDAP)、サイトの履歴(Wayback)、ホームページに掲載された ICP 登録情報、貼り付けた求人情報に詐欺の危険信号があるか、そしてご自身の天眼查キー(TIANYANCHA_API_KEY。こちらのキーは使いません)を使った企業登記情報を確認できます。スコアではなくチェックリストを提供します。 |
read_board | 雇用主の採用ページ URL から、公開求人一覧をリアルタイムで読み込みます(Greenhouse、Lever、Ashby、Moka、北森、Workable、SmartRecruiters。業種を問わず、インデックス済みかどうかも問いません)。求人一覧独自の日付、直接応募リンク、location / title フィルターを利用できます。何も保存せず、閉鎖されたポータルは理由とともに拒否します。 |
任意の完全ローカル機能:ohp init --scan <dir> は、ご自身のリポジトリからスキルフィンガープリントを生成します。履歴書を書く必要はありません。コードがマシンの外に出ることはなく、匿名化されたベクトルのみが送信されます。
雇用主の方へ:テナントの掲載情報を申請する
このインデックスに貴社が掲載されている場合、その情報は貴社自身の公開 ATS から取得したものです。取得にあたって問い合わせはしていません。問い合わせる必要がなかったからです。一方で、募集が継続的な人材プールなのか、古い求人要件なのか、あるいは実際にどれくらいの速さで返信しているのかなど、貴社側の事情はわかりません。
掲載情報を申請 (中文表单)。 無料で、企業の身元確認(GitHub 組織への所属、または企業ドメインからの返信)によって認証します。支払いによる認証は一切ありません。3 営業日以内に回答します。申請後に有料のフォローアップを行うことは一切なく、提出された証明は認証にのみ使用し、それ以外には使用しません。
GitHub アカウントをお持ちでない場合は、件名に「Employer claim」と貴社名を記載して [email protected] にメールでご連絡ください。企業ドメインから送信していただければ、身元確認の第一段階となります(申請には十分ですが、自己申告の求人一覧は企業登記簿、ICP 登録情報、公表されている電話番号への折り返し確認でも照合します)。または、代理でフォームを提出してもらうこともできます。確認するのは企業であり、申請者ではないためです。 没有 GitHub 账号?直接发邮件到 [email protected],用贵公司企业邮箱发出来即完成身份核验。
ATS を利用していない場合、または飛書招聘を利用している場合、求人情報はまだインデックスに掲載されていないため、申請できるものはありません。インデックスが読み取るのは雇用主自身のシステムだけです。ランキングに影響しない、無料の読み取り専用の登録方法が 3 つあります。最も簡単な方法なら、IT 担当者は不要です。スプレッドシートに記入して、企業ドメインからメールで送信してください(企業登記簿、ICP 登録情報、ドメインの使用開始時期を確認し、貴社ウェブサイトに掲載されている電話番号に電話します)。各求人には employer_self_reported のマークが付き、date_signal: self_reported が設定されます。シートを再送信しない場合、90 日後に期限切れになります。もう 2 つの方法は、飛書の読み取り専用スコープ(hire:site:readonly、hire:site_job_post:readonly)を許可する方法と、貴社の採用ページに機械可読な求人情報(schema.org の JobPosting JSON-LD または静的 JSON ファイル)を掲載する方法です。申請フォームには、どの方法が適しているかを記入する欄があり、雇用主向けページで 3 つの方法をすべて説明しています。
没有招聘系统或用飞书招聘?最简单的一条:填一张岗位表,用企业邮箱发给我们,不需要 IT 人员;另外两条是飞书只读授权和官网机器可读岗位页,都写在认领表单和雇主页里。
申請すると、次のことができます。
- 指定した求人の横に、貴社のものとして明記したコメントを掲載できます。 求人が掲載されてからどれくらい経過しているかはわかりますが、その理由はわかりません。継続的な人材プール、本当に採用が難しい求人、放置された求人は、外部からは同じように見えます。その違いを見分けられるのは貴社だけです。
- 特定の職種に
evergreen/hard to fill/closedのステータスを設定できます。ATS が引き続き求人を掲載している場合、closedの求人も表示されたままになります。貴社のサイトが返す情報を隠すことはありません。ただし、貴社の申告に基づいてクローズ済みと表示するため、ほかの人が応募することはありません。 - ATS の日付欄が「求人要件の作成日」を意味し、「公開日」ではない場合に修正できます。この読み違いによってすべての求人が何年も前のものに見えてしまいますが、これは貴社の責任ではありません。
- 後から掲載する求人も含め、すべての求人に
response_sla_daysを設定できます。 - 貴社に
claimed: trueと申請日が設定されます。
申請しても、ランキングは上がりません。また、ghost_score が下がることもありません。並び順は(マッチ度、鮮度)のみに基づく固定の純粋関数で、スコアは(再掲載回数、掲載期間)のみに基づく純粋関数です。テストで両方を固定し、申請処理がどちらにも触れないことを検証しています。コメントはスコアの横に表示され、その理由を説明します。誰かが金銭を払って得た低いスコアを黙って表示するよりも、高いスコアと貴社からの説明を併せて表示したいと考えています。
掲載情報をすべて削除するよう申請していただいても問題ありません。その場合、こちらから異議を唱えることはありません。
認証済みの申請内容は、非公開のデータベースではなくリポジトリ内の src/openhire/seed/claims.py に保存されます。そのため、各申請はレビュー可能な差分として確認できます。週次の再構築時にも、申請内容をひっそり削除せず、再適用します。
最新状態を保つ
インデックスは週次で更新されるため、検索結果が最大7日遅れることがあります。ユーザーが特定の雇用主について今すぐ行動しようとしていて、今日の最新情報が必要な場合は、次のようにします。
ohp refresh unitree # ~1 minute · at most one crawl per employer per 6 hours
MCP 経由では、これは refresh_index ツールです。次の3つのルールは、推奨事項ではなく組み込みの制約です。
- 呼び出し1回につき雇用主は1社です。 全件クロールには20分以上かかるため、これほど待てるクライアントはいません。曖昧な語(
robot→ 11件の候補)は候補リストとともに拒否され、複数の候補に対して処理が実行されることはありません。 - 雇用主ごとに6時間のスロットリングが適用され、ネットワーク呼び出しの前に確認されます。そのため、間隔が短すぎるリクエストは ATS に負荷をかけず、エラーの代わりに
last_refreshed_atを返します。 - 推測目的やループで呼び出すためのものではありません。 呼び出しのたびに、誰か他の組織の公開エンドポイントにアクセスします。
最後の点が、設計上の制約そのものです。私たち自身のクロールは、管理下で週次バッチとして実行しています。一方、呼び出し元に更新を任せると、「私たちのユーザー」が私たちに代わって「他の組織の」エンドポイントにアクセスすることになります。スロットリングによって、その境界を維持するためにリソースを使い果たさずに済みます。
3つの日付の読み方
各行には、異なる3つの問いに答えるタイムスタンプがあります。併せて読むことで、募集が放置されているのか、現在も担当者が管理しているのかを見分けられます。
| フィールド | 答える問い |
|---|---|
verified_at | 前回確認したとき、雇用主の ATS はこの情報をまだ返しましたか? |
datePosted / days_open | どれくらいの期間、募集が公開されていますか? ghost_score はこの期間を基に古さを評価します。雇用主のシステムが日付を報告する場合は雇用主自身の日付、それ以外の場合はこのインデックスが最初に募集を確認した日です。行には date_signal: "not_reported_by_ats" も含まれます(Li Auto のファーストパーティミラーは日付を報告しません)。そのため、下限として読み取ってください |
updated_at / days_since_update | 雇用主が最後に募集情報を更新したのはいつですか? ATS が日付を報告しない場合は null です(Ashby、Lever、Beisen は報告せず、Greenhouse と Moka は報告します)。null は「不明」と読み取り、「放置されている」と判断しないでください |
ghost_score = 1.0 だけでは、結論を出せません。公開から367日が経過し、その間更新されていない募集は放置されているように見えます。一方、公開から327日が経過していても、13日前に更新されていれば、継続的に管理されている常設求人のように見えます。ATS が実際に最終更新日を報告する募集のうち、ghost_score >= 0.99 の募集の67%は、過去30日以内に雇用主によって更新されていました(2026-09-19時点で測定。docs/numbers.json の pct_ghost_hi_touched_within_30d に最新の数値があり、更新のたびに再生成されます)。
ghost_reason には、どの入力値がスコアの根拠になったかが記載されます(「age only: open 367d, never relisted」)。
これらの数値はいずれも、雇用主の意図を示すものではありません。募集期間が長いのは、採用が難しいためかもしれません。結論ではなく、問い合わせるきっかけとして数値を活用してください。
この雇用主は、うたっているとおりの企業でしょうか?
check_employer(CLI:ohp check-company 宇树 --domain unitree.com --jd posting.txt)はチェックリストを返します。各項目には、情報源と確認時刻に加えて、verified/not_verified/unavailable/not_applicable/pending_user のいずれかが示されます。雇用主独自のシステムがインデックスに登録されているか、またそこに何が表示されているか、ドメインの登録日、Waybackで最も古いキャプチャ、ホームページ上のICP 备案号、貼り付けた求人情報(または job_id を指定した場合は、このインデックスが保持する求人情報)にある採用詐欺の危険信号を確認します。これにより、アシスタントはテキストをコピーせずに、見つけたばかりの職種を確認できます。企業登記情報(成立日期、经营状态、参保人数)の取得には費用がかかります。ご自身のマシンに TIANYANCHA_API_KEY を設定すれば、お使いの天眼查アカウントでツールが情報を取得します。または、ツールが提示する無料の手動確認リンクをご利用ください。香港または海外の雇用主の場合、香港の Companies Registry e-Services 検索、HK Police Scameter(電話番号、URL、または受取口座を警察の詐欺データベースと照合します)、OpenCorporates を利用します。また、OFAC SDN リストと統合制裁リストに対して企業名を照合します。これらは毎日ご自身のマシンにダウンロードされ、ローカルで照合されます。登録されていることだけではほとんど証明にならないためです。Prince Group の香港企業は、制裁対象になった当日も登記されていました。あえて合計点も判定も設けていません。ドメインが新しいことや ICP の記録がないことは、判断材料として考慮すべき事実であり、断定ではありません。unavailable の項目には、情報源にアクセスしたものの記録がなかったのか、それとも今回の問い合わせではアクセスできなかったのか(reason: network)が示されます。実行できなかった確認から、雇用主について何かが分かるわけではないためです。
インデックスにない雇用主
read_board(CLI:ohp read-board https://jobs.ashbyhq.com/uipath --location "Hong Kong")は、雇用主がインデックスに登録されているかどうかや業種を問わず、すでにアダプターが対応しているベンダー上に求人ボードがある限り、雇用主1社の公開求人ボードをリアルタイムで読み取ります。対応ベンダーは Greenhouse、Lever、Ashby、Moka、北森、Workable、SmartRecruiters です。アシスタントに採用ページのURLを貼り付けると、求人ボードに掲載された求人情報とその求人ボード独自の掲載日、報告されている場合は days_open(それ以外の場合は date_signal: not_reported_by_ats)、雇用主自身のテナントにある応募への直接リンク、説明文の抜粋が返されます。繰り返し観察する必要があるため、スキル、ghost_score、再掲載履歴、ウォッチ機能には対応せず、データも保存しません。Feishu Hire ポータル、Workday、SuccessFactors、LinkedIn、求人サイトは、アクセス制御または他者のサイトにあたるため、理由とともに拒否されます。このインデックスが、別の方法でアクセスしようとすることはありません。サーバープロセスごとに、1つの求人ボードにつき15分間に1回だけリアルタイムで読み取ります。再度読み取る場合は、メモリ上の情報を返します。求人ボードをウォッチすることもできます。board_url(および location/title)を指定して watch_intent を実行すると、check_watches は取得のたびに求人ボードをリアルタイムで読み取り、前回の取得以降に表示された求人と消えた求人を報告します。
特定の雇用主について調べる
search_jobs(company=...) は、ユーザーが実際に入力したものを受け取ります。ID(unitree)でも、どちらの言語で入力した名前の一部(宇树、Unitree、XPeng)でも指定できます。このインデックスに登録されていない企業名の場合、フィルターなしの検索結果ではなく、企業名を含む空の結果オブジェクトが返されます。
ohp search --company 宇树 --role-family engineering
ohp search --company waymo --distinct # one row per role, not one per city
--distinct(MCP では collapse_role_group)を指定すると、role_group ごとに1行にまとめ、role_group_size を追加します。ページの約20%は、同じ職種を都市ごとに1回ずつ掲載したものです。各都市の行にはそれぞれ独自の job_id と apply_channel があり、勤務地やビザに関する制約に影響するため、折りたたみは任意です。
5 つのプロトコルフィールド
すべての掲載情報は、有効な schema.org/JobPosting であり、次の項目が加わります。
verified_at— 雇用主のサイトで掲載中であることを最後に確認した日時source—employer_site | ats_public_api(求人掲示板は含みません)ghost_score— 実際の掲載日を基準に経過期間を算出した、掲載の活動状況を示す 0~1 のシグナル(数値が低いほど新しい掲載です)。これはノイズを除外するための指標であり、非難を意味するものではありません。長期間掲載されている求人は、通年採用の人材プールや採用プロセスに時間のかかる求人であることも多く、このスコアを使うことで、エージェントが活動の少ないノイズの順位を下げられるだけです。response_sla_days— 雇用主が自ら確約した返信までの日数です。ほとんどすべての行で null ですが、この null には意味があります。雇用主がテナントを申請した場合にのみ設定されます。返信を原理的に観測できないため、推測も推定もしません。応募リンクは雇用主のサイトに直接つながり、このサーバーには一切アクセスしません。null は「このテナントを申請した雇用主がいない」という意味であり、「情報が欠落している」や「返信が遅い」という意味ではありません。 雇用主の方はこちらから申請 — 無料で、企業の身元情報によって確認され、支払いによる確認は行いません。確認済みバッジ、掲載状況を訂正する権限(たとえば、通年採用の人材プールが不当に古い掲載として評価されている場合)、およびこのフィールドを利用できます。順位が上がるわけではありません。順位付けは (match, freshness) のみに基づく変更不能な純粋関数であり、そのシグネチャはテストで固定されています。apply_channel— 常に雇用主自身の応募 URL で、特定の求人に直接リンクします
プライバシーポリシー
簡単に言うと、プロトコルに履歴書のフィールドはなく、マッチングはお使いのマシン上で実行されます。また、サーバーに保存されるユーザー起点の値は、クライアントが生成する匿名のフィンガープリントだけです。アナリティクス、テレメトリー、サードパーティへの共有はありません。ポリシー全文: docs/PRIVACY.md。
プライバシーモデル
| 履歴書/PII のアップロード | 一切ありません — マッチングはローカルで実行されます。履歴書がサーバーを経由することはなく、保存されることもありません |
| サーバーに見える情報 | クライアントが生成する匿名のフィンガープリント 1 つとハードフィルター |
| リポジトリのスキャン | ローカルのみ · 個人プロジェクト · 明示的な同意が必要 · いつでもオプトアウト可能 |
| 求人情報のソース | ファーストパーティのみ:雇用主の採用ページと公開 ATS API(Greenhouse / Lever / Ashby) |
初回実行時のデータ — スナップショットと最新データ
ohp bootstrap(デフォルト)は、小さな公開インデックスのスナップショット(GitHub Release
アセット — companies と jobs のみ、ユーザーデータは一切なし)をダウンロードし、その後、verified_at と掲載終了状況を更新するために差分クロールを 1 回実行します。--fresh を指定するとスナップショットを使わず、無料のオフラインヒューリスティック抽出器を使って、公開 ATS をゼロからクロールします。どちらの場合も、アカウントも PII も不要です。
意外に思われる点が 2 つあります。
- 差分クロールは遅く、進捗も表示されません。 インデックスが空の状態では、出力なしで 20 分以上かかることがあります。停止しているのではなく、処理中です。データだけが必要な場合は、
ohp serveを使うとクロールを完全にスキップできます。サーバーは初回起動時にスナップショットをダウンロードし、数秒で応答を開始します。 - スナップショットの URL は意図的に
v0.1.0タグに固定されています。 古く見えますが、古くありません。このアセットはスケジュールされたワークフローによって毎週月曜日に上書きされるため、URL は常に最新のデータを指す安定したアドレスです。最新のタグに固定すると、リリースのたびにすべてのクライアントが動作しなくなります。
このプロジェクトが決して破らない 3 つのルール
- 履歴書はお使いのマシンから外に出ません。サーバーを経由することも、保存されることもありません。
- 順位付けは販売しません。
f(match_quality, freshness)のみを使う、変更不能な純粋関数です。 - 雇用主が支払うのは、承認済みで実現した成果に対してのみです。求人の露出に対する支払いはありません。(v0.1 では請求機能自体がありません。)
これらのルールは CI(tests/test_privacy.py、tests/test_ranking.py、
tests/test_snapshot.py)によって適用されています。
開発
python -m venv .venv && . .venv/Scripts/activate # Windows
pip install -e ".[dev]"
pytest # privacy red lines + ranking + snapshot must be green
OPENHIRE_DATABASE_URL=postgresql+psycopg://… を設定すると、デフォルトのローカル SQLite ファイル(~/.openhire/openhire.db)の代わりに Postgres を使って実行できます。
ロードマップ
- v0.2 – v0.3(リリース済み) — 中国のATSアダプター(北森 Beisen + Moka) · 毎週自動更新される
公開スナップショット ·
ghost_scoreパブリックベータ · 米国/EU/中国の143社 - 次の予定 — 企業による申請と認証済みバッジ — 企業は、こちらから今すぐ申請を予約できます。企業アイデンティティを確認するGitHub issueを通じて申請します(現在は無料。バッジと掲載状況の管理機能は次にリリース予定) · 応答SLAの適用(7日後に自動掲載停止) · 適合性を示す匿名化済みの証明 — 応募に添付される、匿名かつ候補者が許可したマッチング概要(スキルの重複のみを記載し、個人を特定する情報は含めません。履歴書がサーバーを経由することもありません)
- v1.0 — AIが読み取り可能な求人情報向けの、オープンでベンダー中立なスキーマ拡張
よくある質問
求人データはどこから取得していますか?
143社の雇用主が公開しているATS API(Greenhouse、Lever、Ashby、北森 Beisen、Moka、Workable、SmartRecruiters、およびLi Autoなどの雇用主が直接運営する採用サイト)から直接取得しています。いずれも採用ページを支えるのと同じエンドポイントです。サードパーティの求人掲示板は利用していません。source は
常に ats_public_api で、verified_at には各求人が現在も公開中であることを最後に確認した日時が記録されます。
公開インデックスは毎週自動更新されるため、新たに ohp bootstrap を実行すると最新のデータから開始できます。
ghost_score はなぜ信頼できるのですか?
これは純粋でオープン、購入によって変えられない関数です。実際のATS掲載日からの経過時間に基づいて、min(1, 0.15·relist_count + staleness) で算出します。クロール日ではなく、実際の掲載日を基準にしています。計算式は pipeline/ghost_score.py にあり、ユニットテスト済みで、入力として金銭を一切受け取りません(レッドライン #2)。長期間掲載され、何度も再掲載された求人ほどスコアが高くなります。クライアント側でいつでも再順位付けできます。悪意の指標ではなく、シグナル対ノイズ比としてご覧ください。スコアの高い求人の多くは、正当な通年採用の人材プールです。掲載状況を正確に反映したい雇用主は、自社テナントを申請できます(ロードマップを参照)。
私の履歴書は本当にサーバーを経由しないのですか?
経由しません。プロトコルには履歴書が一切含まれていません。authorize_application には履歴書/ファイルのパラメーターがなく(構造上、受け付けることはできません)、マッチングはお使いのマシン上で実行されます。サーバーを経由するのは、クライアントが生成する #a3f9-k2p7-x8q1 のような匿名のフィンガープリントだけです。このことは tests/test_privacy.py によって保証されており、公開スナップショットにはユーザーデータが一切含まれません(tests/test_snapshot.py)。
中国に対応していますか?
はい。これが OpenHire の大きな特長です。北森 Beisen(<tenant>.zhiye.com)と
Moka(app.mokahr.com)を利用する雇用主をインデックス化しています。宇树 Unitree、小鹏 XPeng、优必选 UBTECH、梅卡曼德 Mech-Mind、速腾聚创 RoboSense、元戎启行 DeepRoute、星海图 Galaxea、傅利叶 Fourier、普渡 Puduなど、自動運転/ロボティクス/エンボディドAI分野の20社以上に対応しています。月給として公開されている給与については、本来の期間を salary_period に保持するため、給与下限によって中国の求人が気付かないうちに除外されることはありません。
飞书招聘(Feishu Hire)には対応しておらず、今後も対応する予定はありません。求人一覧のリクエストにはByteDanceの _signature による署名が必要で、さらにCAPTCHA SDKによる制限があるため、求人情報を公開データとして読み取れません。ボット対策を回避することはありません。
企業を追加してもらうにはどうすればよいですか?
Company inclusion request issueを作成し、タイトルに企業名とそのATS URLを記載してください。これが最適な貢献方法です。コードを書ける方は src/openhire/seed/candidates.py に企業のスラッグとATSベンダー/テナントを追加して、PRを作成してください。シーダーはテナントをライブAPIで検証します。
ライセンス
MIT © OpenHire Protocol · PRを歓迎します。
コードを書かないディープテック分野のヘッドハンターが、Claude Codeとペアプログラミングして開発しました。誤りも含めた完全な受け入れレポートは reports/ をご覧ください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。