关于 network-scan
network-scan 是 Proficiently 的一项技能,用于检查 LinkedIn 联系人所在公司是否有符合个人资料和偏好的职位。它会缓存招聘页面网址并记录结果,便于后续扫描和寻找内推联系人。
主要功能
- 01扫描近期或全部联系人的公司
- 02缓存招聘页面网址七天
- 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 存在(即缓存),则加载该文件;如果不存在,则从空对象开始。
将公司分为三组:
- 缓存(新鲜):
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(而非浏览器)查找招聘页面:
- 搜索:
"[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)
- 返回该批次的结果
收集所有子 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:
- 创建自己的浏览器标签页(
tabs_context_mcp,然后tabs_create_mcp) - 对其批次中的每家公司:
a. 打开招聘页面
b. 搜索或浏览符合目标职位和关键词的岗位
c. 对于 ATS 页面,使用平台的搜索或筛选功能:
- Greenhouse:搜索框或部门筛选器
- Lever:搜索栏或团队筛选器
- Workday:关键词搜索字段
- 直接招聘/其他:浏览页面,使用任何搜索功能,扫描列出的职位 d. 提取职位信息:职位名称、地点、URL e. 根据匹配标准对每个职位进行评分(高/中/低/跳过) f. 仅返回高匹配和中匹配职位
- 返回整个批次的结果
**匹配评分标准:**请参阅 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(例如,“将金融科技加入加分项”,“不要加密货币公司”)。
响应格式
面向用户的输出应包含以下部分:
- 人脉匹配职位——列出高/中匹配职位,包括公司、职位、匹配评级、联系人姓名和申请 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__*"
]
}
}