mcpField
N
network-scan

network-scan

github.com/infrasity-labs生产力15073 次安装18 周前更新
代码仓库

关于 network-scan

这项求职技能会检查 LinkedIn 联系人所在公司是否有符合用户资料和偏好的职位。它缓存招聘页面地址供后续扫描,并记录匹配职位及联系人信息,便于寻求引荐。

主要功能

  1. 01筛选联系人并提取公司
  2. 02缓存招聘页面地址
  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。后续运行会复用缓存,让每周检查更快速。

文件结构

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 存在,则加载它(缓存)。如果不存在,则从空对象开始。

将公司分成三组:

  • 缓存(未过期):last_checked 在过去 7 天内——直接使用,无需处理
  • 缓存(已过期):last_checked 超过 7 天——需要重新验证
  • 未缓存:不在缓存中,或 type 为 "not_found" 且缓存已过期——需要完整解析

报告:"缓存中有 X 家公司,Y 家需要解析……"

使用子 Agent 并行解析:

将所有需要解析的公司(已过期 + 未缓存)分成每批 10 家。使用 Task 工具(subagent_type: "general-purpose")为每批启动一个子 Agent。并行运行所有批次。

每个子 Agent 会收到:

  • 一批待解析的公司名称
  • scripts/resolve-careers.md 中的说明

每个子 Agent 使用 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. 返回该批次的结果

收集所有子 Agent 的结果并合并到缓存中。保存至 ~/.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:根据反馈调整

如果用户在查看结果后提供反馈:

  • “Skip [company]”:在 company-careers.json 中该公司的条目里添加 "ignored": true。后续扫描将跳过该公司。
  • 更正招聘 URL:使用正确的 URL 和类型更新缓存条目。
  • 调整求职偏好:相应更新 ~/.proficiently/preferences.md(例如,“将 fintech 添加到加分项中”“不要加密货币公司”)。

响应格式

面向用户的输出应包含以下部分:

  1. 人脉匹配项 — 列出 High/Medium 匹配项,包括公司、职位、匹配度、联系人姓名和申请 URL
  2. 已检查的公司 — 汇总未找到匹配项的公司,以及没有招聘页面的公司
  3. 后续步骤 — 建议针对最佳匹配项调整简历并撰写求职信

评论

支持 Markdown