job-auto-apply について
job-auto-applyは、求職検索から応募書類の準備、提出までを管理するClaudeスキルです。求人の選定と調査、個別の履歴書作成、応募状況の追跡に加え、手動レビューまたは自動提出を設定できます。
主な機能
- 01求人検索と応募条件の確認
- 02企業・求人の調査記録
- 03履歴書とカバーレターの調整
- 04ATSと文書形式のチェック
- 05応募状況と提出の追跡
- 06手動レビュー・自動モード
活用シーン
- 01日次目標に沿った求人の検索と選別
- 02求人に合わせた応募書類の準備
- 03ブラウザー提出前の応募内容確認
- 04提出済み・保留中の応募の追跡
MCP 対応
求人検索やブラウザーでの応募手順にPlaywright MCPを利用できます。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ liruihan000/ claude-job-auto-apply --skill job-auto-applyインストール後、Claude Code で/job-auto-applyを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
README.md.gitignoreSETUP.mdconfig.example.jsonpackage.jsonpackage-lock.jsonats-handlers/generic.mdjobvite.mdindeed.mdlever.mdashby.mdgreenhouse.mdsap.mdoracle.mdtaleo.mdworkday.mdevals/test-bootstrap.shtest-config-change.mdtest-tailoring.mdreferences/filing-guide.mdcover-letter-guide.mdresume-format-spec.mduser-profile.example.mdselection-strategy.mdtemplate-guide.mdtailoring-guide.mdsearch-guide.mdscripts/ats_score.jscreate_cover_letter.jsbootstrap.js詳細
求人の自動応募
設定:起動時に
node ${CLAUDE_SKILL_DIR}/scripts/bootstrap.jsを実行して、すべての実行時パラメーターを読み込みます。 以下のconfig.*が接頭辞に付いた値は、すべてconfig.jsonの値です。bootstrap.jsがready: falseを返した場合は、${CLAUDE_SKILL_DIR}/SETUP.mdを読み込み、セットアップをユーザーに案内します。 Playwright インスタンスごとのツール:browser_snapshot、browser_navigate、browser_click、browser_type、browser_fill_form、browser_select_option、browser_file_upload、browser_press_key、browser_evaluate、browser_take_screenshot、browser_wait_for、browser_tabs、browser_hover
ステージ -1:起動時の自動チェック(必須)
このスキルが呼び出されるたびに、次の手順を実行します。
- ユーザーの意図を確認:
- ユーザーが求人について質問したり、「相談する」「分析する」「レビューする」「確認する」と言ったりした場合は、相談モード(後述)に入ります。
- ユーザーが特定の求人 URL または職種について「応募する」「提出する」「投」と言った場合は、単一応募モードに入ります。その求人についてフェーズ 1 の調査手順(求人情報の取得、キーワードの抽出、企業の調査、フォルダーの作成)を実行し、その求人だけを対象にフェーズ 2 → フェーズ 2.5 → フェーズ 3 に直接進みます。
- それ以外の場合は、自動応募フローを続行します。
node ${CLAUDE_SKILL_DIR}/scripts/bootstrap.jsを実行し、設定を読み込んで準備状況を確認します。ready: falseの場合は、${CLAUDE_SKILL_DIR}/SETUP.mdを読み込み、不足項目の対応をユーザーに案内します。どのフェーズにも進まないでください。回避策や代替ツールを試さないでください。- ディレクトリと TRACKER.md は bootstrap.js によって自動作成されます。
applications/TRACKER.mdを読み込みます。- 今日の日付が記載された
Submitted列の項目数を数え、today_submittedに設定します。 - 資料の準備ができている ⬜ 未提出の項目を一覧表示します。
- 「本日:X/{config.daily_target} 件を提出済み、Y 件が保留中」と報告します。
today_submitted >= config.daily_targetの場合は、完了を報告して停止します。- それ以外の場合は、自動応募パイプラインに直ちに進みます。
自律性:config.automation.manual_review: false の場合は完全に自律して動作し、ユーザーに確認を求めず、ループの途中で停止しません。true の場合は、次に進む前にフェーズ間で一時停止し、ユーザーの確認を求めます。
相談モード
自動応募ではなく、特定の求人について相談したい場合:
- 求人情報を読み込みます(WebFetch、Playwright、またはユーザーが提供したテキストを使用)。
- 職務要件、技術スタック、チーム、企業情報を分析します。
uploaded-resumes/内のユーザーの履歴書とuser-profile.mdを比較します。- 適合性の評価、メリットとデメリット、履歴書の方針、質問事項についてユーザーと相談します。
- 自動応募パイプラインには進まないでください。 ユーザーが応募すると言うか、相談を終了するまで会話を続けます。
- ユーザーが「応募する」または「提出する」と言った場合は、TRACKER.md に追加し、この求人だけを対象にフェーズ 2 へ進みます。
自動応募パイプライン
フェーズ 1:検索とリサーチ
pending + today_submitted >= config.daily_target になるまで求人を探します。
${CLAUDE_SKILL_DIR}/references/search-guide.md に従い、config.search.platforms を並行して検索します。
求人の検索には、Playwright MCP、WebSearch、または WebFetch を使用できます。
${CLAUDE_SKILL_DIR}/references/selection-strategy.md に従って絞り込み、重複を除外します。
候補となる求人ごとに、次の求人に進む前にすべての手順を完了してください。
-
JD の全文を取得します(まだ TRACKER には追加しません)。
-
${CLAUDE_SKILL_DIR}/references/selection-strategy.mdのフィルターをすべて適用します。特に、スポンサーシップと市民権に関する確認を行います。求人がいずれかのフィルターに通らない場合は、完全にスキップし、フォルダーを作成せず、TRACKER に追加しないでください。 -
求人がすべてのフィルターに通った場合に限り、次に進む前に以下をすべて完了します。 a. TRACKER.md に ⬜ NOT SUBMITTED として行を追加します。 b.
applications/YYYY-MM-DD_Company_Role/フォルダーを作成します。 c. JD の全文を{APP_FOLDER}/jd.mdに保存します。 d. JD のキーワードを抽出し、{APP_FOLDER}/jd-keywords.jsonに保存します(形式:{"required_skills":[], "preferred_skills":[], "keywords":[]})。 e. 企業の About/Mission ページを見つけて読み、概要を{APP_FOLDER}/notes.mdに保存します(業界、製品、規模、事業段階、企業文化、JD URL を記載)。 f.{APP_FOLDER}/STATUS.mdに⬜ NOT SUBMITTEDと記入します。フェーズ 1 で求人の処理が完了したとみなされるのは、次の 6 つがすべて揃った場合のみです:TRACKER の行、フォルダー、jd.md、jd-keywords.json、notes.md、STATUS.md。途中までの完了は未完了として扱います。
確認チェックポイント(config.automation.manual_review: true の場合):
見つかった求人の一覧(企業、職種、プラットフォーム、URL)をユーザーに提示します。続行する求人をユーザーが確認するまで待ちます。却下された求人は TRACKER.md とそのフォルダーから削除します。
フェーズ 1.5:ネットワークスキャン(任意 — Playwright プロファイルで LinkedIn にログインしている必要があります)
TRACKER.md で ⬜ ステータスの各企業について、次の手順を実行します。
- LinkedIn に移動します:
linkedin.com/search/results/people/?keywords={COMPANY}&network=%5B%22F%22%5D(1 次のつながりに絞り込みます) - その企業のつながりが見つかった場合は、その人の名前と役職を TRACKER.md の該当求人の Notes 列に追加します(例:「🤝 John Doe - SWE @ Company」)。
- つながりがある求人の優先度を上げます。
LinkedIn にログインしていない場合、またはアクセスがブロックされた場合は、このフェーズをスキップします。1 社あたり 30 秒以上かけないでください。
フェーズ 2:準備(履歴書とカバーレターのみ)
STATUS.md に ⬜ NOT SUBMITTED と記載され、フォルダーに jd.md が含まれる各求人について作業します。リサーチはすでに完了しているため、ローカルファイルのみを読み込み、Web リクエストは不要です。
{APP_FOLDER}/jd.mdを読みます — JD の全文{APP_FOLDER}/jd-keywords.jsonを読みます — 抽出済みキーワード{APP_FOLDER}/notes.mdを読みます — 企業情報${CLAUDE_SKILL_DIR}/references/template-guide.mdに従い、uploaded-resumes/からテンプレートを選択します。- 個人情報(連絡先、就労資格、EEO)について
user-profile.mdを読みます。 ${CLAUDE_SKILL_DIR}/references/tailoring-guide.mdに従って履歴書を求人に合わせます。${CLAUDE_SKILL_DIR}/references/cover-letter-guide.mdに従ってカバーレターを作成します(config.prepare.cover_letter_requiredの場合)。- DOCX と PDF を生成します。
STATUS.mdに📁 PREPARED — NOT SUBMITTEDと記入します。
サブエージェントを使って並行処理できます(ブラウザーは不要です)。以下の Prepare Subagent Prompt Template を使用してください。
すべての Prepare サブエージェントの完了後 — TRACKER.md を同期します:
applications/*/STATUS.md をすべて確認します。📁 PREPARED または ✅ SUBMITTED のステータスが記載された各フォルダーについて、対応する TRACKER.md の行にもそのステータスが反映されていることを確認します。
フェーズ 2.5:自動レビュー(必須 — 常に実行)
すべての資料の準備が整ったら、メインエージェントが各応募書類をレビューします。次のチェックを実行します。
- 内容:
${CLAUDE_SKILL_DIR}/references/tailoring-guide.mdの同じルールを適用し、準拠していることを確認します。 - 形式:生成された PDF を読み、表示上の問題がないか確認します — 余分な Markdown 文字(
*、**、#)、書式の崩れ、文字化け、セクションの欠落。 - ページ適合性:1 ページちょうどであることを確認します — はみ出しがなく、短すぎないこと。
- AI 文章検出 + ATS キーワードスコア:
node ${CLAUDE_SKILL_DIR}/scripts/ats_score.js {APP_FOLDER}/resume.md {APP_FOLDER}/jd-keywords.jsonを実行します。(jd-keywords.jsonはフェーズ 1 ですでに作成済みです — 再生成しないでください。)結果を確認します。ats_score < 60→ 不足しているキーワードを履歴書に自然に追加し、再生成しますai_phrases_found→ 指摘された表現を、提示された代替表現に置き換えますai_patterns_found→ 該当する文を書き直します
- ATS 解析チェック:
node ${CLAUDE_SKILL_DIR}/scripts/ats_parse_check.js {APP_FOLDER}/resume.pdfを実行します。結果を確認します。status: FAIL→ エラー(セクションの欠落、不適切な書式)を修正し、再生成しますstatus: WARN→ 警告を確認し、可能であれば修正します
見つかった問題は自動修正し、変更があれば DOCX + PDF を再生成します。
レビューチェックポイント(config.automation.manual_review: true の場合):
自動レビューの後、準備した各応募書類の概要と、見つかった問題および修正した問題をユーザーに提示します。どの応募書類を提出するか、ユーザーの確認を待ちます。却下されたものは TRACKER.md で ❌ SKIPPED として記録します。
フェーズ 3:提出
config.automation.manual_review に応じて、2 つのモードがあります:
手動レビュー モード(manual_review: true)— 並列サブエージェント、ユーザーが手動で提出
サブエージェントは引き続き N 個の Playwright インスタンスで並列に実行します。各サブエージェントの作業はレビュー画面で終了し、ユーザーがブラウザーで手動提出します。
サブエージェントの動作(manual_review: true):
1. Navigate to job URL (opens a new tab in the assigned Playwright browser instance)
2. Fill all forms and upload tailored resume as normal
3. Navigate to the final review/confirmation page — do NOT click Submit
4. Take screenshot → {APP_FOLDER}/review-screenshot.png
5. Return "REVIEW_READY: {COMPANY} — {ROLE} | screenshot: {APP_FOLDER}/review-screenshot.png"
(Task is complete — browser tab stays open at the review page)
メインエージェントの動作(manual_review: true):
active_subagents = 0
WHILE today_submitted < config.daily_target OR active_subagents > 0:
// Dispatch up to N subagents (N = config.submit.parallel_instances)
WHILE active_subagents < N AND more jobs with 📁 PREPARED:
Launch next subagent (run_in_background: true, mode=REVIEW_ONLY)
active_subagents++
// Handle incoming results (non-blocking — process as they arrive)
When a subagent returns REVIEW_READY:
active_subagents--
Show user: "✋ {COMPANY} — {ROLE} ready. Screenshot: {APP_FOLDER}/review-screenshot.png
Submit in browser → reply 'submitted {COMPANY}' | 'skip {COMPANY}' | 'stop'"
When user replies:
"submitted {COMPANY}" → update TRACKER.md ✅, today_submitted++
"skip {COMPANY}" → update TRACKER.md ❌ SKIPPED
"stop" → drain active subagents then exit loop
END WHILE
自律モード(manual_review: false)— 並列サブエージェント
WHILE today_submitted < config.daily_target:
1. Pick up to N jobs whose STATUS.md contains `📁 PREPARED` (N = config.submit.parallel_instances)
2. Launch N subagents (run_in_background: true), each assigned a unique Playwright prefix
3. Wait for ALL subagents in this batch to complete
4. For EACH completed subagent — immediately update TRACKER.md:
SUCCESS → change Status to ✅ SUBMITTED, fill Submitted date column, today_submitted++
FAILED → change Status to ❌ SKIPPED, add reason to Notes column
Do NOT batch these updates — update one row at a time as each result comes in.
5. After updating TRACKER.md, verify the row was written correctly by re-reading it.
6. If more pending → repeat. If none → back to Phase 1.
END WHILE
TRACKER.md の更新ルール:TRACKER.md の管理はメインエージェントが担当します。各結果の直後に更新し、まとめて更新したり、更新を飛ばしたりしないでください。
フェーズ 4:振り返り(日次目標の達成後、またはセッション終了時)
サブエージェントの返答メッセージに FRICTION: の行があるか確認します。
- 新しい ATS + friction → 回避策を記載した
${CLAUDE_SKILL_DIR}/ats-handlers/{platform}.mdを作成します - 既知の ATS + friction → 修正内容を既存のハンドラーに箇条書きで 1 項目追加します
- friction の行なし → スキップし、更新は不要です
サブエージェント準備用プロンプトテンプレート
{variables} を置き換え、Agent ツールに渡します。
Prepare application materials for {COMPANY} — {ROLE}.
**Application folder**: {APP_FOLDER}
Start from the research already saved in {APP_FOLDER}. You may do additional web research if needed (e.g. deeper company info, product details for cover letter).
**Input files (already exist in {APP_FOLDER}):**
- `jd.md` — full job description text
- `jd-keywords.json` — extracted JD keywords
- `notes.md` — company info (industry, product, size, culture)
**Steps:**
1. Read `{APP_FOLDER}/jd.md`, `{APP_FOLDER}/jd-keywords.json`, `{APP_FOLDER}/notes.md`
**JD completeness check**: If `jd.md` is missing, empty, or clearly truncated (< 300 words, no responsibilities/requirements section), re-fetch the full JD from the URL in `notes.md` and overwrite `jd.md` and `jd-keywords.json`.
2. Select the best matching template from `uploaded-resumes/` per `${CLAUDE_SKILL_DIR}/references/template-guide.md` — read its full content for experience/skills
3. Read `user-profile.md` for personal info (contact, work auth, EEO)
4. Tailor resume per `${CLAUDE_SKILL_DIR}/references/tailoring-guide.md`
**Format**: follow `${CLAUDE_SKILL_DIR}/references/resume-format-spec.md` exactly. `create_resume.js` enforces this automatically.
5. Write `resume-config.json` (structured data for DOCX generation)
6. Generate DOCX: `node ${CLAUDE_SKILL_DIR}/scripts/create_resume.js {APP_FOLDER}/resume-config.json {APP_FOLDER}/resume.docx`
7. Generate PDF: `libreoffice --headless --convert-to pdf --outdir {APP_FOLDER} {APP_FOLDER}/resume.docx`
8. **Page check**: Read the generated PDF and verify exactly 1 page. If not, reduce bullets per role (min 1) and regenerate. Repeat until exactly 1 full page.
9. If `config.prepare.cover_letter_required`: write `cover-letter-config.json`, generate cover_letter.docx + PDF — reference specific company details from notes.md
10. Write `STATUS.md` as `📁 PREPARED — NOT SUBMITTED`
11. Do NOT submit anything — only prepare materials
12. Do NOT fabricate experience — only use info from the resume template
13. Return "PREPARED: {COMPANY} — {ROLE}" when done
サブエージェント提出用プロンプトテンプレート
{variables} を置き換え、Agent ツールに渡します。
Submit application to {COMPANY} — {ROLE}.
**Mode:** {SUBMIT_MODE} (either "AUTO_SUBMIT" or "REVIEW_ONLY")
**Goal:**
- AUTO_SUBMIT: Fill all forms, upload resume, and click Submit.
- REVIEW_ONLY: Fill all forms, upload resume, navigate to review/confirmation page — do NOT click Submit. Take screenshot and return "REVIEW_READY".
**Tools:** ONLY use `{PLAYWRIGHT_PREFIX}*` tools. Never use other playwright instances.
**Data sources:**
- `user-profile.md` — personal info, contact, work auth, EEO defaults
- `secrets.md` — credentials for login/registration
- Resume: {RESUME_PATH}
- Cover letter: {COVER_LETTER_PATH} (if exists)
- Additional documents: {ADDITIONAL_DOCS}
- ATS strategies: `${CLAUDE_SKILL_DIR}/ats-handlers/` (read matching platform file if recognized)
**Approach:** Observe the page at each step, decide what to do next. Every ATS is different — adapt to what you see rather than following a fixed sequence. General flow: navigate → find apply button → fill forms → upload files → review → submit. But let the page guide you.
**Constraints:**
- Auto-agree all terms/cookies/eSignatures (if config.automation.auto_agree_terms)
- Auto-register accounts if needed (if config.automation.auto_register_accounts)
- Fill ALL required fields — never leave a field empty or on "Select..."
- **Resume upload**: ALWAYS upload {RESUME_PATH} — never use a previously saved resume from the ATS profile, even if one is already shown. Actively replace it.
- Screening questions: authorized=Yes, sponsorship=Yes (+explanation), 18+=Yes, background=Yes, previously worked=No. Check for follow-up fields after each answer.
- Experience/Education dates must match the tailored resume exactly — never guess
- Before submitting: verify all required fields are filled
- Screenshot before submit → {APP_FOLDER}/review-screenshot.png (if config.submit.screenshot_review)
- Screenshot after submit → {APP_FOLDER}/confirmation-screenshot.png (if config.submit.screenshot_confirmation)
- If stuck on any interaction for >config.submit.max_retries_per_form retries, skip and report why
**Output:**
- AUTO_SUBMIT: Write {APP_FOLDER}/STATUS.md as ✅ SUBMITTED. Return "SUCCESS" or "FAILED: [reason]"
- REVIEW_ONLY: Take screenshot → {APP_FOLDER}/review-screenshot.png. Do NOT write STATUS.md. Return "REVIEW_READY: {COMPANY} — {ROLE}"
- If friction encountered, append: "FRICTION: [what happened] → [what worked]"
参照資料
- 求人検索:
${CLAUDE_SKILL_DIR}/references/search-guide.md— プラットフォームの方法、重複排除 - 求人選定:
${CLAUDE_SKILL_DIR}/references/selection-strategy.md— フィルター、優先順位付け - 履歴書の調整:
${CLAUDE_SKILL_DIR}/references/tailoring-guide.md— 8 段階のチェックリスト - 履歴書の書式:
${CLAUDE_SKILL_DIR}/references/resume-format-spec.md— Times New Roman、黒の見出し、2 行の会社名形式、箇条書きのスキル - カバーレター:
${CLAUDE_SKILL_DIR}/references/cover-letter-guide.md— 構成、ルール - テンプレート選定:
${CLAUDE_SKILL_DIR}/references/template-guide.md— JD に応じたテンプレート - ファイル整理と追跡:
${CLAUDE_SKILL_DIR}/references/filing-guide.md— フォルダー構成、TRACKER 形式 - ユーザープロフィール:
user-profile.md— 個人情報、連絡先、就労資格、EEO - 認証情報:
secrets.md— ATS ログイン、登録、Google Sign-In
主なルール
- ブラウザツールのルール:
- 求人検索:WebSearch、WebFetch、Playwright はすべて使用できます。
- Web ページを操作するすべての処理(フォームへの入力、クリック、アップロード、送信、ログイン、登録):Playwright MCP(
mcp__playwright*)のみを使用してください。 BrowserMCP、Claude-in-Chrome、その他のブラウザツールは決して使用しないでください。 - Playwright が利用できない場合は、停止して SETUP を実行してください — 代替のブラウザツールを試してはいけません。
- 応募書類は毎回個別に調整してください。 テンプレートをそのまま送信してはいけません。
- 経験を決して捏造しないでください —
uploaded-resumes/内の履歴書テンプレートに記載された情報のみを使用してください。 - 送信前の検証 — 送信ボタンをクリックする前に、JS ですべての必須フィールドを確認してください。
- エラー発生時:
config.submit.max_retries_per_formで指定された回数まで再試行し、その後はスキップして理由を記録してください。 - 1日の目標を達成するまで、決して停止しないでください。
- ユーザーの言語に合わせてください(
config.preferences.response_languageを参照)。 - 自動更新:ユーザーから新しい検索プラットフォーム、ATS ハンドラー、または設定の変更を求められた場合は、該当ファイル(
config.json、${CLAUDE_SKILL_DIR}/references/search-guide.md、${CLAUDE_SKILL_DIR}/ats-handlers/*.md)をすぐに更新してください — ユーザーに手動での編集を求めてはいけません。