proficientlyjobs/proficiently-claude-skills/network-scan
- community
Checking that the SKILL.md file is still in the repository.
Scan your LinkedIn contacts' companies for matching job openings
Install
npx vskill@latest install proficientlyjobs/proficiently-claude-skills/network-scanSKILL.md
Network Scan Skill
Priority hierarchy: Seeshared/references/priority-hierarchy.mdfor conflict resolution.
Proactively check whether companies where you know someone are hiring for roles that match you. First run builds a cache of company careers page URLs. Subsequent runs reuse the cache, making weekly checks fast.
Quick Start
/proficiently:network-scan- Scan companies from your 25 most recent contacts/proficiently:network-scan 50- Check the 50 most recent contacts/proficiently:network-scan all- Check all contacts (can be slow with 1500+)
File Structure
User data (stored at ~/.proficiently/):
Workflow
Step 0: Check Prerequisites
Resolve the data directory, then check prerequisites per shared/references/prerequisites.md. Resume, preferences, and linkedin-contacts.csv are all required.
Load these files for use in later steps:
DATA_DIR/preferences.md(target roles, must-haves, dealbreakers, nice-to-haves)DATA_DIR/resume/*(candidate profile)DATA_DIR/profile.md(work history, if it exists)
Step 1: Select Contacts & Extract Companies
Parse $ARGUMENTS:
- If a number (e.g.,
50): use that as the contact limit - If
all: use all contacts (warn user this may be slow if > 200) - If empty/missing: default to 25
Read ~/.proficiently/linkedin-contacts.csv. Sort by "Connected On" descending (most recent first). Take the first N contacts based on the limit.
Extract unique company names from the selected contacts. Skip companies with empty or blank names.
Group contacts by company into a lookup:
Report to user: "Found X unique companies from Y contacts. Checking careers pages..."
Step 2: Resolve Careers Pages (Parallelized)
Load ~/.proficiently/company-careers.json if it exists (the cache). If it doesn't exist, start with an empty object.
Split companies into three groups:
- Cached (fresh):
last_checkedwithin last 7 days - use as-is, no work needed - Cached (stale):
last_checkedolder than 7 days - needs re-verification - Uncached: not in cache, or
typeis"not_found"and stale - needs full resolution
Report: "X companies from cache, Y need resolution..."
Parallel resolution using subagents:
Take all companies needing resolution (stale + uncached) and split them into batches of 10. Spawn one subagent per batch using the Task tool (subagent_type: "general-purpose"). Run all batches in parallel.
Each subagent receives:
- A batch of company names to resolve
- Instructions from
scripts/resolve-careers.md
Each subagent uses WebSearch (NOT the browser) to find careers pages:
- Search:
"[Company Name]" careers jobs site:[company domain if known] - From the search results, identify the careers/jobs page URL
- Classify the URL type:
"direct"- company's own careers page (e.g., careers.google.com)"greenhouse"- Greenhouse ATS (boards.greenhouse.io/company or company.greenhouse.io)"lever"- Lever ATS (jobs.lever.co/company)"workday"- Workday ATS (company.wd5.myworkdayjobs.com)"other_ats"- other ATS platforms (Ashby, BambooHR, etc.)"not_found"- no careers page could be found (setcareers_urlto null)
- Return results for the batch
Collect results from all subagents and merge into the cache. Save ~/.proficiently/company-careers.json. Format:
Report progress: "Resolved X new careers pages, Y from cache, Z not found."
Step 3: Scan for Matching Jobs (Parallelized)
Take all companies with a valid careers_url (skip not_found and ignored entries). Split them into batches of 5 companies each.
Spawn parallel subagents using the Task tool (subagent_type: "general-purpose"). Run all batches in parallel (up to 5 concurrent subagents to avoid overwhelming the browser).
Each subagent receives:
- A batch of companies (name, careers_url, ATS type, network contacts)
- Candidate profile summary (from resume)
- Preferences (target roles, must-haves, dealbreakers, nice-to-haves)
- Instructions from
scripts/evaluate-company.md
Each subagent:
- Creates its own browser tab (
tabs_context_mcpthentabs_create_mcp) - For each company in its batch:
a. Navigate to the careers page b. Search/browse for roles matching target roles and keywords c. For ATS pages, use platform search/filter functionality:
- Greenhouse: search box or department filters
- Lever: search bar or team filter
- Workday: keyword search field
- Direct/other: browse the page, use any search, scan listed roles
d. Extract listings: title, location, URL e. Score each listing (High/Medium/Low/Skip per fit criteria) f. Return only High and Medium fits
- Returns results for its entire batch
Fit scoring criteria: See shared/references/fit-scoring.md for the canonical definitions.
Collect results from all subagents. Update last_found_roles count in the cache for each company scanned.
If a subagent fails or times out, log the companies it was processing and move on. Do not retry - the user can re-run with those companies next time.
Step 4: Save Results
Update company-careers.json: Update last_checked and last_found_roles for every company that was scanned.
Append to `~/.proficiently/network-scan-history.md`:
If the file doesn't exist, create it with:
Then append:
Include all companies scanned (both matches and non-matches) in the table.
Save full postings for High-fit matches: For each High-fit match, navigate to the job posting URL and save the full posting to ~/.proficiently/jobs/[company-slug]-[YYYY-MM-DD]/posting.md using the standard format:
Step 5: Present Results
Show matches grouped by fit, with contact info for warm introductions:
If no matches were found across all companies:
End with:
Step 6: Learn from Feedback
If the user provides feedback after seeing results:
- "Skip [company]": Add
"ignored": trueto that company's entry in company-careers.json. Future scans will skip it. - Corrects a careers URL: Update the cache entry with the correct URL and type.
- Adjusts preferences: Update
~/.proficiently/preferences.mdaccordingly (e.g., "add fintech to nice-to-haves", "no crypto companies").
Response Format
Structure user-facing output with these sections:
- Network Matches — list of High/Medium fits with company, role, fit rating, contact name, and apply URL
- Companies Checked — summary of companies with no matches and companies without careers pages
- Next Steps — suggest
/proficiently:tailor-resumeand/proficiently:cover-letterfor top matches
Permissions Required
Add to ~/.claude/settings.json:
Security
- Security scanPassed, 95 of 100Pattern checks on the skill's files.
- Model reviewPassed
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingskills/network-scan/SKILL.md
Popularity
- Repository stars
- 78
- Repository forks
- 10
- 7-day trend score
- 22
Stars and forks are for the whole GitHub repository, not this skill alone. Refreshed 27 Mar 2026, 7 months ago.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/proficientlyjobs/proficiently-claude-skills/network-scan)