Token导航 LogoToken导航

Agent Skill · 研究检索

linkedin-search(链接搜索)

linkedin-search 用于查找、检索和筛选相关信息,适合在 OpenClaw 中需要根据关键词、任务场景或来源线索快速定位候选结果时使用。可结合来源仓库、安装命令和原始 README 继续核验具体用法。安装前建议确认权限范围、维护状态,以及是否会触发联网、命令执行或文件读写。

linkedin-search 是研究检索类 Agent Skill,可用宿主为 OpenClaw,通过ClawHub获取,权限为操作浏览器;许可证为 MIT-0,第三方扫描有提醒项,按安装量在研究检索类的 73,675 个 Skill 里排第 47,712。

总安装 722周安装 31GitHub Stars 公开资料未说明下载 253核验 2026-05-01

安装说明

本站只整理中文说明,不托管安装包,也不代用户安装。
GitHub
许可证
MIT-0
版本
1.0.0

安装方式

通过对话安装

复制提示词发给支持本地命令或 Skills 的 AI 助手,先确认命令和权限,再让它执行。

请帮我安装这个 Agent Skill:linkedin-search(链接搜索)
来源仓库:https://github.com/qianjunye/linkedin-search
安装命令:
openclaw skills install linkedin-search
安装前请先检查当前环境是否支持对应 CLI,并向我确认将要执行的命令、安装目录、联网范围和文件读写权限;确认后再执行。

命令行安装

复制命令到本机终端执行。该命令会通过 OpenClaw 从第三方来源获取 Skill;本站只展示命令,不托管安装包,也不自动执行。

ClawHubOpenClaw
openclaw skills install linkedin-search

这个 Skill 是做什么的

研究检索类 Skill 主要解决「找资料、核对事实、把来源整理清楚」的问题,通常会让助手先检索再总结。

在 LinkedIn 中搜索与用户定义的角色、位置和标准相匹配的候选人,对要求进行分类,并保存个人资料以避免重复。

上手步骤

4 步
  1. 1

    确认自己的宿主工具

    公开资料标注支持 OpenClaw;先确认自己用的是其中之一,再按对应工具的 Skills 目录放置。

  2. 2

    拿到安装命令

    可以直接复制的命令是 openclaw skills install linkedin-search;命令里的占位符换成自己的路径或密钥再执行。

  3. 3

    安装后重启宿主

    命令执行完要完全退出宿主工具再打开,让新装的 Skill 被重新扫描到,否则列表里可能看不到。

  4. 4

    按最小权限试用

    它需要操作浏览器,先在测试目录或测试账号里跑,确认没问题再放到正式项目。

常见问题

6 条

linkedin-search 怎么安装?

在终端执行 openclaw skills install linkedin-search。装完完全退出宿主工具再打开,让它重新扫描本地 Skill。

linkedin-search 支持哪些 AI 工具?

公开资料标注支持 OpenClaw。其他工具只要能读取本地 Skill 目录,一般也能手动放进去,但要自己确认触发方式是否一致。

linkedin-search 需要什么权限?

权限级别是操作浏览器。该 Skill 可能涉及浏览器控制能力,使用时可能读取或操作网页内容,需要在受控环境中确认权限边界。

linkedin-search 是免费的吗?

来源标注的许可证是 MIT-0。本站不代收任何费用,也不托管安装包;能否商用、要不要署名,以许可证原文为准。

linkedin-search 用的人多吗?

公开数据是累计安装 722 次,近一周安装 31 次,下载 253 次。这些数字来自第三方目录统计,只能当作热度参考,不代表质量或安全性。

linkedin-search 安全吗?

第三方扫描有提醒项,说明存在需要人工确认的行为。安装前请打开源码看清它读了什么、联网到哪里。

值得选的地方和要先想清楚的地方

值得选的地方

  • 专注 OpenClaw 一种宿主,触发方式和使用习惯不用来回切换。
  • 许可证明确为 MIT-0,商用和分发边界好判断。

先想清楚的地方

  • 第三方扫描存在提醒项或未通过项,需要人工逐条确认。
  • 第三方目录整理,版本更新和行为细节以来源仓库为准。

适不适合你

更适合

  • 已经在用 OpenClaw,想直接扩展它能力的人。
  • 需要处理研究检索类任务、又不想每次都手写提示词的人。

不太适合

  • 需要厂商级技术支持和 SLA 的生产系统。

研究检索类 Skill 对比

6 个同类
Skill总安装GitHub 星权限许可证扫描
find-skills

寻找技能 · Codex、Claude

31,199,81316,486操作浏览器MIT有提醒
self-improving-agent

自我改进 Agent · OpenClaw

16,464,0023,396接触敏感数据MIT-0通过
soultrace

灵魂追踪 · Codex、Claude

7,588,94412需要联网未明确有提醒
self-improving

自我完善 · OpenClaw

6,829,2841,046需要联网MIT-0通过
microsoft-foundry

微软代工厂 · Codex、Claude

6,614,144764调用外部服务未明确有提醒
linkedin-search

链接搜索 · 本页

722—操作浏览器MIT-0有提醒

按安装量取同分类前几名;数字来自第三方目录统计,只作热度参考,不代表质量结论。

SKILL.md 原文

/linkedin-search — LinkedIn Candidate Search

Automatically search LinkedIn candidates based on user requirements using Chrome DevTools MCP. Saves profiles to ./linkedin-save/{role}/ to prevent duplicate scans.


Phase 0 — Clarify Requirements Before Searching

Before any PRE-CHECK or search begins, ask the user the following questions if their request does not already answer them clearly. Wait for the user's response before proceeding.

0.1 — Target Count

If not specified:

How many candidates are you looking for? (default: 20)

0.2 — Criteria Classification (Hard vs. Soft)

Present the inferred criteria list and ask the user to confirm which are hard requirements and which are soft preferences:

I've identified the following candidate criteria from your request.
Please confirm which are hard requirements (must-have, disqualify if missing)
and which are soft preferences (nice-to-have, lower priority but not disqualifying):

Criteria detected:
  • Cloud experience ≥ X years         → [ Hard / Soft / Remove ]
  • Total experience ≤ Y years         → [ Hard / Soft / Remove ]
  • Presales title clearly stated       → [ Hard / Soft / Remove ]
  • Public cloud experience (AWS/GCP…) → [ Hard / Soft / Remove ]
  • Private cloud experience            → [ Hard / Soft / Remove ]
  • [any other criteria from user]      → [ Hard / Soft / Remove ]

Note: Current location and most-recent-role relevance are always verified on the
profile page and cannot be removed — they are built-in hard constraints.

Hard criteria: candidates failing ANY of these are rated C (flagged, not excluded).
Soft criteria: missing ones lower the match level from A → B but do not disqualify.

Reply with your preferred classification, or type "use defaults" to accept the above.
Why ask: The same criterion (e.g., "cloud experience") can mean a dealbreaker to one hiring manager and a nice-to-have to another. Asking upfront prevents the LLM from applying the wrong threshold during profile analysis.

0.3 — Location Scope

If not specified:

Should the location filter be strict (exact city only) or broad (country-level)?
Example: "Hanoi only" vs. "anywhere in Vietnam"
(default: country-level)

0.4 — Company Target Filter (Optional)

Do you want to target candidates from specific companies?
(e.g., FPT, Viettel, Google, AWS, Oracle — leave blank to skip)

Once all answers are collected, proceed to PRE-CHECK.


Parameter Layering

The user's natural language query must be split into two layers after Phase 0 and before searching begins:

Layer 1: Search Parameters (hard-embedded in query)

These two types of conditions directly determine the Google/LinkedIn search string. Without them, retrieval is impossible.

ParameterDescriptionExample
Job keywordMust appear in the querypresales solution architect
LocationCity or country, must appear in the queryhanoi / vietnam

Built into the search query directly:

site:linkedin.com/in/ ("presales" OR "pre-sales") "cloud" "hanoi"
Important: Layer 1 parameters are search *hooks* — they cast a wide net. They do not guarantee the candidate currently lives in that location or currently holds that type of role. Both must be re-verified on the profile page (see Constraints 1 & 2 in Layer 2 below).

Layer 2: LLM Analysis Parameters (inferred after profile content is retrieved)

These conditions cannot be filtered at the search stage. The LLM reads the profile text and infers each one.

The hard/soft designation for user-defined criteria comes from Phase 0.2. The two location and role constraints below are always Hard.

ParameterHard/SoftInference Method
Cloud experience (≥ N years)Hard (configurable)Sum duration of cloud-related roles
Total experience (≤ N years)Hard (configurable)Infer first job start year → years to today
Presales explicitly statedHard (configurable)Job title contains presales/pre-sales/solution consultant, or bio describes it
Current location matches targetAlways HardRead profile header location — must match target city/country; a past role's location does not count
Most recent role is relevantAlways HardCandidate's latest job must relate to the target role — a keyword match in an older position is not sufficient
Public cloud experienceSoft (default)Role mentions AWS/Azure/GCP/OCI/VNG/Viettel Cloud etc.
Private cloud experienceSoft (default)Role mentions OpenStack/VMware/private deployment/on-premise cloud

LLM Inference Rules:

  • If duration is insufficient to judge, mark unknown; lower match_level to B or C
  • [Constraint 1 — Location re-validation]: The search query embeds the target location to surface profiles — but a profile can appear because the location keyword appeared in an old job entry or a past employer's address. After loading the profile, read the location shown in the profile header (e.g., "Hanoi, Vietnam") as the candidate's *current* location. If it does not match the target, set location_match: false and downgrade match_level one tier (A→B, B→C). If the header location is hidden or empty, mark location_match: unknown and treat as B.
  • [Constraint 2 — Current role relevance]: The search query embeds job keywords — but the matching title may be from years ago while the candidate's current work is completely unrelated. After loading the profile, find the first (most recent) entry in the Experience section. Check whether that role's title or description is relevantly related to the target role. If unrelated, set current_role_relevant: false and downgrade match_level one tier. "Relevant" means same domain (e.g., presales, solution architecture, cloud consulting) — an exact title match is not required, but a pivot to an unrelated field (e.g., now a full-time developer or finance manager) is a fail.
  • All hard criteria met (including Constraints 1 & 2) → A; some met or one unknown → B; URL only or very little content → C
Match level is driven by the user-confirmed hard/soft split from Phase 0.2. If the user reclassified "presales title" as Soft, a candidate without it can still reach A. However, location match and current-role relevance are always Hard and cannot be reclassified to Soft.

Runtime Environment Requirements

All conditions below must be met before execution. Complete PRE-CHECK in order before starting the search. If any condition fails, output the fix instructions and stop.

Condition 1: Chrome Debug Session is Running

Chrome must be running in remote debug mode on port 9222, using a user profile with an active LinkedIn session.

Verification: Call mcp__chrome-devtools__list_pages. If it returns a page list, pass.

If not met:

❌ Chrome debug session not ready

Run the following steps in your terminal:

1. Close all Chrome windows (or force-quit):
   pkill -9 -f "Google Chrome"

2. Copy your login profile (first time only):
   mkdir -p /tmp/chrome_debug_profile
   cp -r ~/Library/Application\ Support/Google/Chrome/Default/{Cookies,"Login Data","Web Data",Preferences,"Local State"} \
     /tmp/chrome_debug_profile/ 2>/dev/null

3. Launch Chrome in debug mode:
   nohup "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" \
     --remote-debugging-port=9222 \
     --user-data-dir="/tmp/chrome_debug_profile" \
     --no-first-run --disable-sync \
     > /tmp/chrome_debug.log 2>&1 &

4. Wait 3 seconds, then re-run /linkedin-search

Condition 2: LinkedIn is Logged In

The browser must have an active LinkedIn session (used to access profiles and internal search).

Verification: Navigate to https://www.linkedin.com/feed/ and run:

() => document.querySelector('.global-nav__me-photo') !== null ||
      document.querySelector('[data-control-name="nav.homepage"]') !== null ||
      !document.URL.includes('/login')

Returns true → pass.

If not met:

❌ LinkedIn not logged in

Please log in to LinkedIn manually in Chrome:
1. Visit https://www.linkedin.com in the already-open Chrome window
2. Complete login (credentials or verification code)
3. Confirm you reach the LinkedIn feed, then re-run /linkedin-search

Condition 3: linkedin-save Directory Exists

./linkedin-save/ must exist in the current working directory.

Verification:

ls ./linkedin-save/ 2>/dev/null || echo "MISSING"

If not met:

❌ linkedin-save directory missing

Auto-creating now... (running mkdir -p ./linkedin-save)
This condition is auto-fixed by the skill — no user action needed.

Condition 4: Correct Working Directory

The skill runs under /Users/junye/project/test-case/linkedin-zp for relative paths to resolve correctly.

Verification:

pwd

If not met:

❌ Working directory mismatch

Current: {actual pwd}
Expected: /Users/junye/project/test-case/linkedin-zp

Please reopen the session in the correct directory, or confirm the actual location of linkedin-save.

PRE-CHECK Execution Order

[0] Clarify requirements (Phase 0)    → wait for user response, then continue
[1] Check Chrome debug session        → fail: output fix, stop
[2] Check LinkedIn login              → fail: output fix, stop
[3] Check/create linkedin-save        → auto-fix
[4] Check working directory           → mismatch: warn (do not force stop)
[5] Parse query → output Layer 1 / Layer 2 breakdown
[6] Load already-scanned URL set      → continue
✅ All passed → begin search

[5] Breakdown output example:

🔍 Search parameter breakdown:

[Layer 1 — Search Query (hard-embedded)]
  Job keywords: presales solution architect / pre-sales / solution consultant
  Location: hanoi, vietnam
  Company filter: FPT, Viettel (if specified)

[Layer 2 — LLM Analysis Conditions (inferred from profile)]
  Always Hard: current location verified on profile page / most recent role relevance
  Hard: cloud experience ≥ 5 years / total experience ≤ 15 years / presales explicitly stated
  Soft: public cloud preferred / private cloud is a bonus

Target candidates: 20
Save directory: ./linkedin-save/presales-architect/
Location scope: country-level (Vietnam)

Execution Steps

All steps below run only after PRE-CHECK (including Phase 0 and parameter breakdown) has fully passed.

STEP 0 — Determine Save Directory, Load Scanned URLs (dedup)

Map job keywords to subdirectory:

Role TypeDirectory
Presales Architect./linkedin-save/presales-architect/
Solution Architect./linkedin-save/solution-architect/
Cloud Sales./linkedin-save/cloud-sales/
Other./linkedin-save/general/

Load already-scanned URLs:

grep -h "^url:" ./linkedin-save/{role_dir}/*.md 2>/dev/null | awk '{print $2}'

STEP 1 — Collect Candidate URLs (Google → LinkedIn internal)

Use Layer 1 parameters (job keywords + location) to build search queries.

Primary: Google site search

Try strategies in order (replace {role} and {location} with actual Layer 1 values):

# A: Exact title
site:linkedin.com/in/ ("presales" OR "pre-sales") "cloud" "{location}"

# B: Extended title variants
site:linkedin.com/in/ "solution architect" "cloud" "presales" "{location}"

# C: Target company filter (if user specified companies in Phase 0.4)
site:linkedin.com/in/ ("presales" OR "solution architect") "cloud" ("FPT" OR "Viettel" OR "VNPT" OR "CMC" OR "AWS" OR "Oracle") "{location}"

Paginate: append &start=10, &start=20 to the URL.

Extract Google results JS:

() => {
  const out = [];
  document.querySelectorAll('h3').forEach(h3 => {
    const block = h3.closest('.g') || h3.closest('[data-hveid]') || h3.closest('[jscontroller]');
    const a = block && block.querySelector('a[href*="linkedin.com/in/"]');
    if (a) out.push({
      url: a.href.split('?')[0].replace(/^https?:\/\/[a-z]+\.linkedin\.com/, 'https://www.linkedin.com'),
      title: h3.innerText,
      snippet: block ? block.innerText.slice(0, 300) : ''
    });
  });
  return out;
}

Fallback: LinkedIn internal search (when Google results are insufficient)

Embed Layer 1 parameters in the URL ({keywords} = job keywords, {geoUrn} = location ID):

https://www.linkedin.com/search/results/people/?keywords={keywords}&geoUrn=%5B%22{geoUrn}%22%5D&origin=FACETED_SEARCH&page=N

Common geoUrns:

  • Vietnam: 104195383
  • Hanoi: 104195383 (country-level, no single-city ID)
  • Ho Chi Minh City: 104195383

Extract LinkedIn search results JS:

async () => {
  const sleep = ms => new Promise(r => setTimeout(r, ms));
  for (let y = 0; y <= 5000; y += 300) { window.scrollTo(0, y); await sleep(150); }
  await sleep(2000);
  return Array.from(document.querySelectorAll('a[href*="/in/"]'))
    .map(a => ({ href: a.href.split('?')[0], text: a.innerText.trim().slice(0, 200) }))
    .filter(l => /linkedin\.com\/in\/[^/]+\/?$/.test(l.href) && l.text.length > 3)
    .filter((v, i, a) => a.findIndex(x => x.href === v.href) === i);
}

STEP 2 — Visit Each Profile (skip already-scanned), LLM Analyzes Layer 2

For each new URL:

  1. navigate_page (allow timeout, continue executing)
  2. Run scroll + extract script to get raw text:
async () => {
  const sleep = ms => new Promise(r => setTimeout(r, ms));
  for (let y = 0; y <= 8000; y += 300) { window.scrollTo(0, y); await sleep(200); }
  await sleep(2000);
  const t = document.body.innerText;
  const ei = t.indexOf('Experience');
  return {
    header: t.slice(0, 2500),
    exp: ei > -1 ? t.slice(ei, Math.min(ei + 4000, t.length)) : '',
    url: location.href.split('?')[0]
  };
}
Note: The extraction script searches for 'Experience' (English). If the profile is in another language, also try '工作经历' (Chinese) as a fallback index key.
  1. LLM analyzes Layer 2 conditions (inferred from header + exp text):
Analyze each criterion below. Mark "unknown" if insufficient data.
Apply the hard/soft classification confirmed by the user in Phase 0.2.

STEP A — Constraint 1: Location re-validation
  Read the location line in the profile header (the line directly under the candidate's name).
  Compare it against the target location.
  → location_match: true / false / unknown

STEP B — Constraint 2: Current role relevance
  Identify the first (topmost) entry in the Experience section — this is the most recent role.
  Check whether its title or description is relevantly related to the target role domain.
  → current_role_relevant: true / false / unknown
  → current_role: "{title} @ {company} ({start}–{end})"

STEP C — User-defined criteria
  - cloud_years: sum duration of roles mentioning AWS/Azure/GCP/OCI/cloud keywords
  - total_years: infer earliest job start year → years to today
  - presales: does job title or bio contain presales/pre-sales/solution consultant?
  - public_cloud: any AWS/Azure/GCP/OCI/public cloud experience?
  - private_cloud: any OpenStack/VMware/private deployment/on-premise experience?

STEP D — match_level
  Start from the highest possible level and downgrade for each failure:
  Base: A
  → If location_match = false or unknown: downgrade one tier
  → If current_role_relevant = false or unknown: downgrade one tier
  → If any Hard user criterion fails or is unknown: downgrade one tier
  → If content is URL-only or nearly empty: set C directly

  Final: A / B / C
  1. Save profile immediately → STEP 3

STEP 3 — Save Profile (URL is mandatory; content is best-effort)

File path: ./linkedin-save/{role_dir}/{linkedin_id}.md linkedin_id = last segment of the URL, e.g., nguyen-the-hung-70725b1b

Minimal format (URL only):

---
name: unknown
url: {full LinkedIn URL}
location: unknown
location_match: unknown
current_role: unknown
current_role_relevant: unknown
cloud_years: unknown
total_years: unknown
public_cloud: unknown
private_cloud: unknown
presales: unknown
match_level: C
scanned_date: {YYYY-MM-DD}
---

Full format (LLM-inferred content):

---
name: Nguyen The Hung
url: https://www.linkedin.com/in/nguyen-the-hung-70725b1b/
location: Hanoi, Vietnam
location_match: true
current_role: Customer Solution Consultant – GCP @ Google (2022–present)
current_role_relevant: true
cloud_years: 8
total_years: 15
public_cloud: true
private_cloud: true
presales: true
match_level: A
scanned_date: 2026-04-28
---

## Summary
{LLM's 2–3 sentence evaluation of Layer 2 criteria, including explicit notes on
location verification and current role relevance}

## Experience
{Work experience text extracted from the page}

STEP 4 — Loop Until Target Met

Count profiles where match_level is A or B:

grep -l "match_level: [AB]" ./linkedin-save/{role_dir}/*.md 2>/dev/null | wc -l

If target not reached, switch search terms and continue (only vary Layer 1 parameters; Layer 2 criteria stay fixed):

  • Job variants: "technical presales" / "pre-sales engineer" / "solution consultant"
  • Location stays the same, but may substitute company names: FPT / Viettel / CMC / VNPT / Noventiq

Output Summary

When complete, output:

## Candidate Summary — {role}, {location}

[Search criteria]  Role: presales solution architect | Location: hanoi
[Analysis criteria] Location verified on profile (Hard) | Current role relevance (Hard)
                    Cloud exp ≥ 5yr (Hard) | Total exp ≤ 15yr (Hard) | Presales stated (Hard) | Public cloud preferred (Soft)

| # | Name | Current Role @ Company | Location | Loc✓ | Role✓ | Cloud Yrs | Presales | Level | Link |
|---|------|------------------------|----------|------|-------|-----------|----------|-------|------|
| 1 | Nguyen The Hung | GCP Consultant @ Google | Hanoi, VN | ✅ | ✅ | 8yr | ✅ | A | [🔗](url) |
| 2 | Tran Van A | Dev Manager @ Bank | HCMC, VN | ❌ | ❌ | 3yr | ❌ | C | [🔗](url) |
...

A: N  |  B: N  |  C: N (needs manual review)
Saved to ./linkedin-save/presales-architect/ (N profiles total)

Notes

  • URL must always be saved: even if the page is completely blank, save the minimal profile with the URL
  • 3rd-degree wall: 3rd-degree connections' experience sections are not visible; LLM infers from header/bio only — mark as C, leave exp empty
  • Navigation timeout: on timeout, continue running the scroll script (page may have partially loaded)
  • Dedup check: before saving, grep to check if the URL already exists — skip if already scanned
  • Rate limiting: natural delay is built in (the scroll script takes ~4 seconds per profile)
  • Layer 1 is non-negotiable: location and job keywords must go into the query — post-hoc LLM filtering alone is not sufficient
  • Hard/soft classification governs match_level: always apply the classification confirmed in Phase 0.2, not the defaults
  • Location re-validation is always required (Constraint 1): the profile header location is ground truth — a past job's city is not the candidate's current location
  • Current role relevance is always required (Constraint 2): check the topmost Experience entry, not the one that matched the search keyword — a presales role from 5 years ago does not make a current developer relevant

平台分布

OpenClaw

77.28%
按下载量换算196

安全审计

VirusTotal

可疑

ClawScan

可疑

Static analysis

通过

权限和风险

操作浏览器

该 Skill 可能涉及浏览器控制能力,使用时可能读取或操作网页内容,需要在受控环境中确认权限边界。

安装前确认

本站仅展示第三方公开信息,不托管安装包,不提供自动安装或运行环境。安装前应自行审查源码、依赖和命令行为。来源安全扫描存在提醒或未通过项,安装前请自行复核。目前只有一个公开来源,建议同时核对源仓库。

继续浏览同类 Skills