apply について
ブラウザー自動化で Greenhouse、Lever、Workday の応募フォームを入力するスキルです。応募書類と回答案を用意し、送信前に明示的な確認を求めます。
主な機能
- 01Greenhouse、Lever、Workday のフォーム入力
- 02求人に合わせた履歴書の調整
- 03必要な場合のカバーレター作成
- 04回答案の提示とフォーム入力
- 05応募状況の記録
活用シーン
- 01求人応募の準備とフォーム入力
- 02保存済みの応募者情報や回答の再利用
- 03送信前の応募内容の確認
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ infrasity-labs/ dev-gtm-claude-skills --skill applyインストール後、Claude Code で/applyを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/ats-patterns.mdbrowser-setup.mddata-directory.mdprerequisites.mdpriority-hierarchy.mdscripts/fill-page.md詳細
スキルを適用する
優先順位:競合の解決については、
references/priority-hierarchy.mdを参照してください。
ブラウザー自動化を使用して、Greenhouse、Lever、Workdayの応募フォームに入力します。
ファイル構成
scripts/
fill-page.md # Form-filling subagent prompt
データディレクトリ
references/data-directory.mdに従ってデータディレクトリを解決します。
ワークフロー
ステップ 0:前提条件を確認する
データディレクトリを解決してから、references/prerequisites.mdに従って前提条件を確認します。履歴書ファイルは必須です。DATA_DIR/application-data.mdが存在する場合は読み込みます(存在しない場合はステップ 2で作成します)。
ステップ 1:応募先の求人を特定する
$ARGUMENTSを解析します。
URLの場合:
DATA_DIR/jobs/に一致する求人フォルダーがあるか確認します(フォルダー名の会社スラッグまたはURLで照合)。見つかった場合は、そのフォルダーからposting.md、resume.md、cover-letter.mdを読み込みます。- 一致するものがない場合は、
references/browser-setup.mdに従ってブラウザーを設定し、求人情報を取得して、DATA_DIR/jobs/[company-slug]-[date]/posting.mdに新しいフォルダーを作成して保存します。
「last」または空の場合:
DATA_DIR/jobs/内で最も最近更新された求人フォルダーを探します- そのフォルダーの
posting.md、resume.md、cover-letter.mdを読み込みます - どの求人への応募か、ユーザーに確認します
「current」の場合:
- ナビゲーションをスキップし、現在のブラウザータブをそのまま使用します
- 可能であれば、タブのURLを保存済みの求人フォルダーと照合して、関連情報を読み込みます
読み込んだ内容を報告します。
Applying to [Role] at [Company].
ステップ 2:応募データを作成/読み込む
DATA_DIR/application-data.mdが存在する場合は、読み込んで値を取得します。
存在しない場合:
- 履歴書から取得できる情報(氏名、メールアドレス、電話番号、LinkedIn、所在地)を抽出します
- 抽出したデータをユーザーに提示します。不足している情報(就労資格、ビザのスポンサーシップ、EEOに関する希望)を確認し、入力するよう依頼します(EEOの項目はすべて、デフォルトで「自己識別を辞退」に設定します)
- 次の形式を使用して
DATA_DIR/application-data.mdに保存します。
# Application Data
## Personal Information
- First Name: ...
- Last Name: ...
- Email: ...
- Phone: ...
- City: ...
- Country: United States
## Online Profiles
- LinkedIn: ...
- GitHub: ...
- Portfolio: ...
## Standard Answers
- How did you hear about us: Job Board
- Previously worked at this company: No
- Authorized to work in the US: Yes
- Requires visa sponsorship: No
## EEO / Voluntary Disclosures
- Gender: Decline to self-identify
- Race/Ethnicity: Decline to self-identify
- Veteran status: I am not a veteran
- Disability: I don't wish to answer
ステップ 3:応募フォームに移動して必要事項を確認する
references/browser-setup.md(tabs_context → tabs_create → navigate)に従ってブラウザーを設定します。
$ARGUMENTSが「current」の場合:ナビゲーションをスキップします。tabs_context_mcpを呼び出してアクティブなタブを取得します。
それ以外の場合は、URLのパターンからATSの種類を特定し(references/ats-patterns.mdを参照)、次の手順に従って移動します。
Lever(jobs.lever.co/...):
- 求人情報のURLの末尾に
/applyを追加して移動するか、求人情報に移動して「APPLY FOR THIS JOB」をクリックします
Greenhouse(boards.greenhouse.io/...またはgrnhse_iframeを含むページ):
- 求人情報のURLに移動します
javascript_toolを使用してiframeトークンを抽出します。const iframe = document.getElementById('grnhse_iframe'); const url = new URL(iframe.src); JSON.stringify({ boardToken: url.searchParams.get('for'), jobToken: url.searchParams.get('token') });- 直接フォームのURLに移動します:
https://job-boards.greenhouse.io/embed/job_app?for={boardToken}&token={jobToken}
Workday(*.myworkdayjobs.com/...):
- 求人情報に移動し、「Apply Now」をクリックします。
- Autofill/Manualのオプションがあるランディングページが表示された場合は、「Apply Manually」をクリックします。
- 認証画面が表示された場合は、ユーザーにサインインするよう伝え、準備ができたら「continue」と伝えるよう依頼してください。アカウントの作成は禁止されている操作です。認証はユーザー自身が行う必要があります。
不明なATS:
- URLに移動して、スクリーンショットを撮ります
- フォームの特定を試みます。判別できない場合は、ユーザーに伝えて案内を求めます
フォームを確認します。 応募フォームが表示されたら、簡単に確認し(read_page(filter="interactive")を使用するか、Workdayの場合はスクロールします)、次の点を把握します。
- フォームに履歴書/CVのアップロード欄はありますか?
- カバーレターのアップロード欄またはテキスト欄はありますか?
- 特別な対応が必要な、通常とは異なる必須項目はありますか?
必要事項を記録します。これらの情報をもとに、ステップ 4で作成する応募書類を決定します。
Step 4: 不足している資料を作成する
入力作業を始める前にすべてを準備し、ユーザーの作業を最小限に抑えることが目的です。
必ず履歴書を応募先に合わせて調整してください。 この求人について、DATA_DIR/jobs/[job-folder]/resume.md が存在するか確認します。
- 存在する場合:履歴書はすでにこの職種向けに調整されています。スキップします。
- 存在しない場合:履歴書調整スキルをインラインで実行します。
skills/tailor-resume/SKILL.mdのワークフローに従い、読み込み済みの求人情報、元の履歴書、職務経歴プロフィールを使って、応募先に合わせた履歴書を作成します。求人フォルダーに保存し、続行する前にユーザーに提示して簡単に確認してもらいます。
フォームで必要な場合にのみカバーレターを作成してください。 ステップ 3 で調査した結果、フォームにカバーレター欄があった場合:
DATA_DIR/jobs/[job-folder]/cover-letter.mdが存在するか確認します- 存在する場合:作成済みです。スキップします。
- 存在しない場合:カバーレター作成スキルをインラインで実行します。
skills/cover-letter/SKILL.mdのワークフローに従い、求人情報、調整済みの履歴書、プロフィールを使います。求人フォルダーに保存し、簡単に確認してもらうためユーザーに提示します。
フォームにカバーレター欄がない場合は、カバーレターの作成を完全にスキップします。
作成したものをユーザーに伝えます。
Prepared for [Role] at [Company]:
- Tailored resume: [generated / already existed]
- Cover letter: [generated / already existed / not required by form]
Ready to fill the application. Proceeding...
Step 5: すべてのフィールドを確認する
入力を始める前にフォーム全体を確認し、すべてのフィールドを特定します。このステップではフィールドに入力しないでください。読み取りのみ行います。
Lever/Greenhouse(単一ページのフォーム)の場合:
read_page(tabId, filter="interactive")を呼び出して、すべてのフィールドを一度に取得します
Workday(複数ステップのウィザード)の場合:
- 現在のページを上から下へスクロールし、各ビューポート位置で
read_pageを呼び出して確認します - すべてのフィールドのラベル、種類、必須かどうかを記録します
- 注:ウィザードの各ページには、ページに進んだ時点で確認します(ステップ 7 を参照)
見つかった各フィールドについて、次の内容を記録します。
- フィールドラベル
- フィールドの種類(テキスト、ドロップダウン、ラジオボタン、チェックボックス、ファイルアップロード)
- 必須かどうか
- 後で入力するための要素参照
Step 6: 回答を提案して承認を得る
次の優先順位に従って、すべてのフィールドに対する回答案を作成します。
- 応募データ — 以下のフィールド対応付けリファレンスに従って、
application-data.mdから照合します - 妥当なデフォルト — 応募データにない一般的なフィールドには、次の値を使用します。
- 法的な氏名(名/姓)→ 通常の氏名(名/姓)と同じ
- 電子署名 → フルネーム
- 仲裁/規約への同意 → 同意(ユーザーへの注記を付ける)
- 面接プロセスへの同意 → 同意
- AI による文字起こしへの同意 → 同意
- 契約社員/短期雇用に関する質問 → 「いいえ」(応募データに別の記載がある場合を除く)
- カスタム回答 —
application-data.mdの「Custom Answers」セクションを確認し、以前に保存された回答を使用します - 最善の推測 — それ以外のフィールドについて、フィールドラベルと求人の内容に基づいて妥当な回答を作成します
- 判断できない — 本当に曖昧で、妥当なデフォルトもない場合に限ります
ユーザーには、まとめた内容を一度に提示します。
Here's my plan for the [Company] application:
**Auto-fill from your data:**
- First Name: Jane
- Last Name: Doe
- Email: [email protected]
- Phone: 555-0123
- LinkedIn: https://linkedin.com/in/janedoe
...
**Proposed answers (please review):**
- Legal First Name: Jane (same as first name)
- Electronic signature: Jane Doe
- Arbitration agreement: Accept
- Contract work: No
- [Any other non-obvious fields]: [proposed answer]
**Needs your input:**
- [Only truly ambiguous fields, if any]
**Manual upload needed:**
- Resume: [file path]
- Cover letter: [file path] (if applicable)
Approve and I'll fill everything in. Or tell me what to change.
重要な原則:質問は一度、入力も一度。 フィールドごとに質問して作業を中断しないでください。ユーザーとのやり取りは、この一度の承認(およびステップ 8 の最終送信確認)のみとします。
ユーザーが承認した後(修正があれば反映したうえで)、新しい回答を DATA_DIR/application-data.md の「Custom Answers」セクションに保存し、今後の応募で再利用できるようにします。
Step 7: フォームに入力する
承認後、すべてを一度に入力します。
サブエージェントに委任します。 scripts/fill-page.md を呼び出し、以下を渡します。
- ATS の種類(lever/greenhouse/workday/unknown)
- 承認済みのフィールド→値のマッピング(応募データだけでなく、すべての回答)
- タブ ID
- 履歴書とカバーレターのアップロード用ファイルパス
サブエージェントが現在のページのすべてのフィールドに入力し、入力済みの内容と残りの項目を返します。
複数ページのフォームの場合(Workday):
- 現在のページに入力 → 「Save and Continue」をクリックします
- 検証エラーがある場合:エラーを読み、フィールドを修正して再試行します
- 新しいページでフィールドを確認し(Step 5 のロジック)、承認済みの回答と照合して入力し、次へ進みます
- 確認ページに到達するまで繰り返します
ファイルのアップロード処理:
MCP ツールでアップロードできるのは、upload_image を使った画像のみです。PDF/DOCX 形式の履歴書やカバーレターをアップロードする場合は、ファイルパスをユーザーに伝え、手動でアップロードするよう依頼してください。これは既知の制限です。ユーザーが確認中にアップロードできるよう、Step 6 の概要にパスを含めてください。
Step 8: 送信前に確認する
確認ページに到達したとき、または単一ページのフォームのすべてのフィールドに入力したとき:
- スクリーンショットを撮ります
- すべて正しく表示されていることを確認します
- 送信前に、ユーザーに明示的な確認を求めてください — ブラウザー自動化ルールにより、これは必須の明示的な許可を得る操作です
ユーザーが確認するまで、送信/送信するボタンをクリックしないでください。
Step 9: 応募を記録する
送信後(またはユーザーが送信しないことを決めた場合):
DATA_DIR/jobs/[company-slug]-[date]/applied.md を作成します:
# Application Log
- **Date**: YYYY-MM-DD
- **ATS**: Greenhouse/Lever/Workday
- **Status**: Submitted / Draft (not submitted)
- **Notes**: [any relevant notes]
DATA_DIR/job-history.md を更新します — 該当する求人の項目を見つけ、応募状況と日付を追記します。
ユーザーに提示します:
Applied to [Role] at [Company] on [date].
Files saved to: DATA_DIR/jobs/[folder]/
フィールド照合リファレンス
フォームのフィールドラベル(大文字と小文字を区別せず、あいまい一致)を応募データと照合します:
| ラベルのパターン | データソース | 入力方法 |
|---|---|---|
first name | Personal.FirstName | form_input / type |
last name | Personal.LastName | form_input / type |
full name | Personal.FirstName + LastName | form_input / type |
email | Personal.Email | form_input / type |
phone | Personal.Phone | form_input / type |
city, location, current location | Personal.City | form_input / type / combobox |
country | Personal.Country | ドロップダウン選択 |
linkedin | Profiles.LinkedIn | form_input / type |
github | Profiles.GitHub | form_input / type |
portfolio, website | Profiles.Portfolio | form_input / type |
resume, cv | ファイルアップロード:履歴書 PDF | ファイルアップロード |
cover letter | ファイルアップロード:カバーレター | ファイルアップロード |
how did you hear | StandardAnswers.HowHeard | ドロップダウン:「Job Board」 |
previously worked | StandardAnswers.PreviouslyWorked | ラジオボタン/チェックボックス:「No」 |
authorized to work, work authorization | StandardAnswers.WorkAuth | ラジオボタン/ドロップダウン |
sponsorship | StandardAnswers.Sponsorship | ラジオボタン/ドロップダウン |
gender | EEO.Gender | ドロップダウン:「Decline」 |
race, ethnicity | EEO.Race | ドロップダウン:「Decline」 |
veteran | EEO.Veteran | ドロップダウン/ラジオボタン:回答拒否の選択肢 |
disability | EEO.Disability | ドロップダウン/ラジオボタン:回答拒否の選択肢 |
認識できないフィールド:必須かどうかを確認します。必須の場合はユーザーに尋ねます。任意の場合はスキップします。ユーザーの回答は、再利用できるよう DATA_DIR/application-data.md の「Custom Answers」に保存します。
ATS 固有の操作に関する注意事項
Lever:form_input は、値またはテキストを指定すると、ドロップダウンを含むすべてのフィールドタイプで直接機能します。
Greenhouse:直接フォームの URL(iframe の外部)に移動すると、form_input は値を指定して機能します。
Workday:
read_page(filter="interactive")は、ビューポート内に表示されている要素のみを返します。上から下までスクロールし、スクロール位置ごとにread_pageを呼び出す必要があります。- ラジオボタンは
read_pageから返されません。findツールを使うか、座標を指定してcomputerでクリックしてください。 - ドロップダウンはポップアップパネルを開く
button要素です。ボタンをクリックし、findまたはread_pageで選択肢を特定してから、その選択肢をクリックしてください。階層型ドロップダウン(「どのようにして知りましたか」など)の場合は、ポップアップ内の Search テキストボックスで検索してください。
回答形式
ユーザー向けの出力は、次のセクションで構成してください。
- 応募状況 — 入力した内容、スキップした内容、送信の確認
- 保存したファイル — 保存した応募ログのパス
- 次のステップ — カバーレターがない場合はその作成を提案するか、次の求人検索を提案します