network-scan について
network-scan は、LinkedIn の知人がいる企業で、プロフィールや希望条件に合う求人を調べる Proficiently のスキルです。採用ページの URL をキャッシュして結果を記録し、後続の検索や紹介依頼に役立てます。
主な機能
- 01最近または全連絡先の企業を検索
- 02採用ページの URL を7日間キャッシュ
- 03プロフィールと希望条件で求人を照合
- 04求人の適合度を評価して記録
- 05適合度の高い求人情報を保存
活用シーン
- 01人脈のある企業の求人を探す
- 02週次の求職活動で候補求人を確認
- 03紹介を頼める連絡先を見つける
MCP 対応
ワークフローではブラウザー MCP ツールを使って採用ページや求人情報を確認します。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ proficientlyjobs/ proficiently-claude-skills --skill network-scanインストール後、Claude Code で/network-scanを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
README.mdscripts/evaluate-company.mdresolve-careers.md詳細
ネットワークスキャンスキル
優先順位の階層:競合を解決する際は、
shared/references/priority-hierarchy.mdを参照してください。
知り合いがいる企業で、自分に合った職種の求人があるか積極的に確認します。初回の実行時に、企業の採用ページの URL のキャッシュを作成します。以降の実行ではキャッシュを再利用するため、週次の確認をすばやく行えます。
クイックスタート
/proficiently:network-scan- 最近の連絡先 25 件に含まれる企業をスキャンします/proficiently:network-scan 50- 最近の連絡先 50 件を確認します/proficiently:network-scan all- すべての連絡先を確認します(1500 件以上の場合、時間がかかることがあります)
ファイル構成
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:前提条件を確認する
データディレクトリを特定し、shared/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 の求人のみを返します。
- バッチ全体の結果を返します。
適合度のスコアリング基準: 標準定義については shared/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 search: `/proficiently:network-scan 100`
最後に、以下を記載します。
To tailor a resume: /proficiently:tailor-resume [job URL]
To write a cover letter: /proficiently:cover-letter [job URL]
Built by Proficiently. Want someone to find jobs, tailor resumes,
apply, and connect you with hiring managers? Visit proficiently.com
ステップ 6:フィードバックから学習する
結果を確認した後、ユーザーからフィードバックがあった場合:
- 「Skip [company]」:その企業の company-careers.json エントリに
"ignored": trueを追加します。今後のスキャンでは除外されます。 - 採用 URL の訂正:キャッシュのエントリを正しい URL とタイプで更新します。
- 希望条件の調整:それに応じて
~/.proficiently/preferences.mdを更新します(例:「あるとうれしい条件にフィンテックを追加」「暗号資産企業は対象外」)。
応答形式
ユーザー向けの出力は、次のセクションで構成します。
- ネットワーク上の求人 — 適合度が High/Medium の求人を、企業名、職種、適合度、連絡先名、応募 URL とともに一覧表示します。
- 確認した企業 — 一致する求人がなかった企業と、採用ページが見つからなかった企業の概要を示します。
- 次のステップ — 上位の求人について、
/proficiently:tailor-resumeと/proficiently:cover-letterの利用を提案します。
必要な権限
~/.claude/settings.json に追加します。
{
"permissions": {
"allow": [
"Read(~/.claude/skills/**)",
"Read(~/.proficiently/**)",
"Write(~/.proficiently/**)",
"Edit(~/.proficiently/**)",
"mcp__claude-in-chrome__*"
]
}
}