mcpField
N
network-scan

network-scan

github.com/infrasity-labs生産性15073 回インストール18 週間前に更新
リポジトリ

network-scan について

LinkedInの連絡先がいる企業に、プロフィールや希望条件に合う求人があるか調べる求職スキルです。採用ページのURLをキャッシュして次回以降の確認に使い、求人と連絡先情報を記録します。

主な機能

  1. 01連絡先を選び企業を抽出
  2. 02採用ページURLのキャッシュ
  3. 03希望条件に基づく求人検索
  4. 04求人の適合度を評価
  5. 05求人と結果の記録

活用シーン

  1. 01人脈のある企業の求人確認
  2. 02紹介につながる求人の発見
  3. 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.md
data-directory.md
fit-scoring.md
prerequisites.md
priority-hierarchy.md
scripts/
evaluate-company.md
resolve-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(ブラウザーは使用しない)を使って採用ページを検索します。

  1. 検索:「"[Company Name]" careers jobs site:[company domain if known]」
  2. 検索結果から、採用ページまたは求人ページの URL を特定します
  3. 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 に設定)
  4. バッチの結果を返します

すべてのサブエージェントから結果を収集し、キャッシュに統合します。~/.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 の指示

各サブエージェントは、次の手順を実行します。

  1. 独自のブラウザータブを作成します(tabs_context_mcp の後に tabs_create_mcp を実行します)
  2. バッチ内の各企業について、次の処理を行います。 a. 採用ページに移動します b. 対象職種とキーワードに一致する職種を検索、または閲覧します c. ATS ページでは、プラットフォームの検索/フィルター機能を使います。
    • Greenhouse:検索ボックスまたは部門フィルター
    • Lever:検索バーまたはチームフィルター
    • Workday:キーワード検索フィールド
    • 直接掲載/その他:ページを閲覧し、検索機能があれば使用して、掲載中の職種を確認します d. 求人情報から職種名、勤務地、URL を抽出します e. 各求人情報を適合度の基準に沿って評価します(High/Medium/Low/Skip) f. 適合度が High と Medium の求人のみ返します
  3. バッチ全体の結果を返します

適合度の評価基準: 標準定義については 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 をあると望ましい条件に追加」、「暗号資産関連の企業は対象外」)。

回答形式

ユーザーに提示する出力は、次のセクションで構成します。

  1. ネットワーク上の求人候補 — 適合度が High/Medium の求人を、企業名、職種、適合度、連絡先の名前、応募 URL とともに列挙します
  2. 確認した企業 — 一致する求人がなかった企業と、採用ページがなかった企業の概要
  3. 次のステップ — 有力な求人に合わせた履歴書の調整とカバーレターの作成を提案します

コメント