mcpField
N
network-scan

network-scan

github.com/proficientlyjobs生产力439116 次安装33 周前更新
代码仓库

关于 network-scan

network-scan 是 Proficiently 的一项技能,用于检查 LinkedIn 联系人所在公司是否有符合个人资料和偏好的职位。它会缓存招聘页面网址并记录结果,便于后续扫描和寻找内推联系人。

主要功能

  1. 01扫描近期或全部联系人的公司
  2. 02缓存招聘页面网址七天
  3. 03按个人资料和偏好匹配职位
  4. 04评估并记录匹配职位
  5. 05保存高匹配度职位信息

适用场景

  1. 01查找人脉所在公司的职位空缺
  2. 02在每周求职前查看匹配职位
  3. 03寻找可能提供内推的联系人

MCP 相关

工作流使用浏览器 MCP 工具访问招聘页面和职位信息。

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/proficientlyjobs/proficiently-claude-skills --skill network-scan

安装后在 Claude Code 中输入/network-scan确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

README.md
scripts/
evaluate-company.md
resolve-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 存在(即缓存),则加载该文件;如果不存在,则从空对象开始。

将公司分为三组:

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

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

使用子 Agent 并行解析:

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

每个子 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")启动并行子 Agent。并行运行所有批次(最多同时运行 5 个子 Agent,以免让浏览器不堪重负)。

每个子 Agent 会收到:

  • 一批公司(名称、careers_url、ATS 类型、联系人)
  • 候选人简介(来自简历)
  • 偏好(目标职位、必备条件、不可接受条件、加分项)
  • scripts/evaluate-company.md 中的说明

每个子 Agent:

  1. 创建自己的浏览器标签页(tabs_context_mcp,然后 tabs_create_mcp)
  2. 对其批次中的每家公司: a. 打开招聘页面 b. 搜索或浏览符合目标职位和关键词的岗位 c. 对于 ATS 页面,使用平台的搜索或筛选功能:
    • Greenhouse:搜索框或部门筛选器
    • Lever:搜索栏或团队筛选器
    • Workday:关键词搜索字段
    • 直接招聘/其他:浏览页面,使用任何搜索功能,扫描列出的职位 d. 提取职位信息:职位名称、地点、URL e. 根据匹配标准对每个职位进行评分(高/中/低/跳过) f. 仅返回高匹配和中匹配职位
  3. 返回整个批次的结果

**匹配评分标准:**请参阅 shared/references/fit-scoring.md 中的标准定义。

收集所有子 Agent 的结果。更新缓存中每家已扫描公司的 last_found_roles 计数。

如果子 Agent 失败或超时,记录其正在处理的公司,然后继续。不要重试——用户下次可以重新运行扫描这些公司。

第 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 | - | - |

在表格中列出所有已扫描的公司(包括匹配和不匹配的公司)。

保存高匹配职位的完整招聘信息: 对于每个高匹配职位,打开招聘信息 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 步:根据反馈调整

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

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

响应格式

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

  1. 人脉匹配职位——列出高/中匹配职位,包括公司、职位、匹配评级、联系人姓名和申请 URL
  2. 已查看的公司——汇总没有匹配职位的公司,以及没有招聘页面的公司
  3. 后续步骤——建议针对最匹配的职位使用 /proficiently:tailor-resume 和 /proficiently:cover-letter

所需权限

在 ~/.claude/settings.json 中添加:

{
  "permissions": {
    "allow": [
      "Read(~/.claude/skills/**)",
      "Read(~/.proficiently/**)",
      "Write(~/.proficiently/**)",
      "Edit(~/.proficiently/**)",
      "mcp__claude-in-chrome__*"
    ]
  }
}

评论

支持 Markdown