关于 network-scan
这项求职技能会检查 LinkedIn 联系人所在公司是否有符合用户资料和偏好的职位。它缓存招聘页面地址供后续扫描,并记录匹配职位及联系人信息,便于寻求引荐。
主要功能
- 01筛选联系人并提取公司
- 02缓存招聘页面地址
- 03按偏好扫描职位
- 04评估职位匹配度
- 05记录匹配结果和职位信息
适用场景
- 01查看人脉公司是否有合适职位
- 02寻找可通过熟人引荐的岗位
- 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.mddata-directory.mdfit-scoring.mdprerequisites.mdpriority-hierarchy.mdscripts/evaluate-company.mdresolve-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(而非浏览器)查找招聘页面:
- 搜索:
"[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")启动并行子代理。并行运行所有批次(最多同时运行 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 匹配项
- 返回该批次的结果
匹配评分标准: 规范定义请参阅 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 添加到加分项中”“不要加密货币公司”)。
响应格式
面向用户的输出应包含以下部分:
- 人脉匹配项 — 列出 High/Medium 匹配项,包括公司、职位、匹配度、联系人姓名和申请 URL
- 已检查的公司 — 汇总未找到匹配项的公司,以及没有招聘页面的公司
- 后续步骤 — 建议针对最佳匹配项调整简历并撰写求职信