network-scan について
LinkedInの連絡先がいる企業に、プロフィールや希望条件に合う求人があるか調べる求職スキルです。採用ページのURLをキャッシュして次回以降の確認に使い、求人と連絡先情報を記録します。
主な機能
- 01連絡先を選び企業を抽出
- 02採用ページURLのキャッシュ
- 03希望条件に基づく求人検索
- 04求人の適合度を評価
- 05求人と結果の記録
活用シーン
- 01人脈のある企業の求人確認
- 02紹介につながる求人の発見
- 03毎週の求人確認を効率化
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ infrasity-labs/ dev-gtm-claude-skills --skill network-scanインストール後、Claude Code で/network-scanを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/browser-setup.mddata-directory.mdfit-scoring.mdprerequisites.mdpriority-hierarchy.mdscripts/evaluate-company.mdresolve-careers.md詳細
ネットワークスキャンスキル
優先順位:競合を解決する方法については、
references/priority-hierarchy.mdを参照してください。
知り合いがいる企業で、自分に合った職種を募集しているか積極的に確認します。初回実行時に、企業の採用ページ URL のキャッシュを作成します。2 回目以降はキャッシュを再利用するため、毎週の確認をすばやく行えます。
ファイル構成
scripts/
resolve-careers.md # Subagent for resolving a batch of company careers URLs
evaluate-company.md # Subagent for scanning a batch of companies' open roles
ユーザーデータ(~/.proficiently/ に保存):
~/.proficiently/
resume/ # Your resume PDF/DOCX
preferences.md # Job matching rules
profile.md # Work history from interview
linkedin-contacts.csv # LinkedIn contacts export
company-careers.json # Cached company careers URLs
network-scan-history.md # Running log of scan results
jobs/ # Per-job application folders
ワークフロー
ステップ 0:前提条件を確認する
データディレクトリを特定し、references/prerequisites.md に従って前提条件を確認します。履歴書、希望条件、linkedin-contacts.csv がすべて必要です。
後のステップで使用するため、次のファイルを読み込みます。
DATA_DIR/preferences.md(希望職種、必須条件、譲れない条件、あれば望ましい条件)DATA_DIR/resume/*(候補者のプロフィール)DATA_DIR/profile.md(職歴が記載されている場合)
ステップ 1:連絡先を選択し、企業を抽出する
$ARGUMENTS を解析します。
- 数値の場合(例:
50):連絡先の上限として使用します allの場合:すべての連絡先を使用します(200 件を超える場合は時間がかかる可能性があることをユーザーに警告します)- 空または未指定の場合:デフォルトで 25 件とします
~/.proficiently/linkedin-contacts.csv を読み込みます。「Connected On」の降順(最も新しいものが先)で並べ替えます。上限に基づき、先頭から N 件の連絡先を選択します。
選択した連絡先から重複のない企業名を抽出します。名前が空または空白のみの企業はスキップします。
企業ごとに連絡先をまとめ、次のルックアップを作成します。
{
"Google": [{"name": "Jane Smith", "position": "PM Director", "url": "https://linkedin.com/in/janesmith"}, ...],
"Stripe": [{"name": "John Doe", "position": "Eng Manager", "url": "https://linkedin.com/in/johndoe"}]
}
ユーザーに次のように報告します:「Y 件の連絡先から X 社を見つけました。採用ページを確認しています……」
ステップ 2:採用ページを特定する(並列処理)
~/.proficiently/company-careers.json が存在する場合は読み込みます(キャッシュ)。存在しない場合は、空のオブジェクトから開始します。
企業を次の 3 グループに分けます。
- キャッシュ済み(新しい):
last_checkedが過去 7 日以内 - そのまま使用し、作業は不要です - キャッシュ済み(古い):
last_checkedが 7 日より前 - 再確認が必要です - キャッシュなし:キャッシュに存在しない、または
typeが"not_found"でキャッシュが古い - 全項目の特定が必要です
次のように報告します:「X 社はキャッシュから取得し、Y 社は特定が必要です……」
サブエージェントによる並列特定:
特定が必要な企業(古いもの+キャッシュなし)をすべて取得し、10 社ずつのバッチに分割します。Task ツール(subagent_type: "general-purpose")を使用して、バッチごとに 1 つのサブエージェントを起動します。すべてのバッチを並列で実行します。
各サブエージェントには、次の情報を渡します。
- 特定対象の企業名をまとめたバッチ
scripts/resolve-careers.mdの指示
各サブエージェントは WebSearch(ブラウザーは使用しない)を使って採用ページを検索します。
- 検索:「
"[Company Name]" careers jobs site:[company domain if known]」 - 検索結果から、採用ページまたは求人ページの URL を特定します
- URL の種類を分類します。
"direct"- 企業独自の採用ページ(例:careers.google.com)"greenhouse"- Greenhouse ATS(boards.greenhouse.io/company または company.greenhouse.io)"lever"- Lever ATS(jobs.lever.co/company)"workday"- Workday ATS(company.wd5.myworkdayjobs.com)"other_ats"- その他の ATS プラットフォーム(Ashby、BambooHR など)"not_found"- 採用ページが見つからない(careers_urlを null に設定)
- バッチの結果を返します
すべてのサブエージェントから結果を収集し、キャッシュに統合します。~/.proficiently/company-careers.json に保存します。形式:
{
"Company Name": {
"careers_url": "https://careers.example.com",
"type": "direct",
"last_checked": "YYYY-MM-DD",
"last_found_roles": 0
}
}
進捗を次のように報告します:「新たに X 件の採用ページを特定し、Y 件をキャッシュから取得しました。Z 件は見つかりませんでした。」
ステップ 3:条件に合う求人を検索する(並列処理)
有効な careers_url を持つ企業をすべて対象にします(not_found と ignored の項目はスキップします)。企業を 5 社ずつのバッチに分割します。
Task ツール(subagent_type: "general-purpose")を使ってサブエージェントを並列で起動します。ブラウザーに過剰な負荷をかけないよう、最大 5 つのサブエージェントで、すべてのバッチを並列処理します。
各サブエージェントに渡す内容:
- 企業のバッチ(名前、careers_url、ATS の種類、ネットワーク上の連絡先)
- 候補者のプロフィール概要(履歴書から)
- 希望条件(対象職種、必須条件、避ける条件、あると望ましい条件)
scripts/evaluate-company.mdの指示
各サブエージェントは、次の手順を実行します。
- 独自のブラウザータブを作成します(
tabs_context_mcpの後にtabs_create_mcpを実行します) - バッチ内の各企業について、次の処理を行います。
a. 採用ページに移動します
b. 対象職種とキーワードに一致する職種を検索、または閲覧します
c. ATS ページでは、プラットフォームの検索/フィルター機能を使います。
- Greenhouse:検索ボックスまたは部門フィルター
- Lever:検索バーまたはチームフィルター
- Workday:キーワード検索フィールド
- 直接掲載/その他:ページを閲覧し、検索機能があれば使用して、掲載中の職種を確認します d. 求人情報から職種名、勤務地、URL を抽出します e. 各求人情報を適合度の基準に沿って評価します(High/Medium/Low/Skip) f. 適合度が High と Medium の求人のみ返します
- バッチ全体の結果を返します
適合度の評価基準: 標準定義については references/fit-scoring.md を参照してください。
すべてのサブエージェントから結果を収集します。スキャンした各企業について、キャッシュ内の last_found_roles の件数を更新します。
サブエージェントが失敗またはタイムアウトした場合は、処理中だった企業を記録して続行します。再試行はしないでください。ユーザーは次回、それらの企業を指定して再実行できます。
ステップ 4:結果を保存する
company-careers.json を更新します:
スキャンしたすべての企業について、last_checked と last_found_roles を更新します。
~/.proficiently/network-scan-history.md に追記します:
ファイルが存在しない場合は、次の内容で作成します。
# Network Scan History
This file tracks all network scans run by the `/network-scan` skill.
---
次に、以下を追記します。
## YYYY-MM-DD - Network Scan (N contacts, M companies)
| Company | Contact | Role Found | Fit | URL |
|---------|---------|------------|-----|-----|
| Google | Jane Smith (PM Director) | Sr. Product Manager | High | https://... |
| Stripe | John Doe (Eng Manager) | No matching roles | - | - |
一致した企業と一致しなかった企業の両方を、すべて表に記載します。
適合度が High の求人情報を全文保存します:
適合度が High の求人ごとに、求人掲載 URL に移動し、標準フォーマットで求人情報全文を ~/.proficiently/jobs/[company-slug]-[YYYY-MM-DD]/posting.md に保存します。
# [Job Title] - [Company Name]
**Company**: [Company]
**Location**: [Location]
**Salary**: [Salary or N/A]
**Type**: [Type]
**Source**: network-scan
**Date Found**: YYYY-MM-DD
**Network Contact**: [Contact Name] ([Position]) - [LinkedIn URL]
## About the Role
[Description]
## Key Requirements
- [requirement]
## Direct Careers Page
- [URL]
## Fit Assessment
**Rating**: [High/Medium]
**Why**: [explanation]
ステップ 5:結果を提示する
適合度ごとに一致した求人をまとめ、知人からの紹介につながる連絡先情報を添えて提示します。
## Network Scan Results - YYYY-MM-DD
Scanned N companies from M contacts.
### Matches Found
#### 1. Senior Product Manager at Google
- **Fit**: High
- **Your contact**: Jane Smith (PM Director) - [LinkedIn](url)
- **Location**: Mountain View, CA
- **Apply**: https://careers.google.com/jobs/...
- **Why**: [brief match reason]
#### 2. Strategy Lead at Stripe
- **Fit**: Medium
- **Your contact**: John Doe (Eng Manager) - [LinkedIn](url)
- **Location**: Remote
- **Apply**: https://stripe.com/jobs/...
- **Why**: [brief match reason]
### Companies Checked (No Matches)
Google (3 open roles, none matching), Stripe (0 open roles), ...
### Companies Without Careers Pages
Acme Corp, Small Startup LLC, ...
すべての企業で一致する求人が見つからなかった場合:
## Network Scan Results - YYYY-MM-DD
Scanned N companies from M contacts. No matching roles found this time.
### Companies Checked
[List with role counts]
### Companies Without Careers Pages
[List]
Try again next week, or expand your contact window.
ステップ 6:フィードバックから学習する
結果を確認した後、ユーザーからフィードバックがあった場合:
- 「[company] をスキップ」:その企業の company-careers.json の項目に
"ignored": trueを追加します。今後のスキャンでは、その企業はスキップされます。 - 採用 URL の訂正:キャッシュの項目を正しい URL と種類で更新します。
- 希望条件の変更:
~/.proficiently/preferences.mdを適宜更新します(例:「fintech をあると望ましい条件に追加」、「暗号資産関連の企業は対象外」)。
回答形式
ユーザーに提示する出力は、次のセクションで構成します。
- ネットワーク上の求人候補 — 適合度が High/Medium の求人を、企業名、職種、適合度、連絡先の名前、応募 URL とともに列挙します
- 確認した企業 — 一致する求人がなかった企業と、採用ページがなかった企業の概要
- 次のステップ — 有力な求人に合わせた履歴書の調整とカバーレターの作成を提案します