LinkedIn 职位搜索技能
无需登录、无需 API 密钥、零运行时依赖,只靠 Bun 就能在任何国家或远程市场直接搜索 LinkedIn 公开职位列表。
技能权限限定为单一Bash命令运行自带CLI,无凭据、无密钥、无写盘副作用;数据流披露清晰(公开jobs-guest端点),并反复明示'个人使用、勿商用'。扣分点:自动化抓取违反LinkedIn服务条款,这是实质性合规红线,只能靠用户自律缓解,无任何技术强制或回滚机制;发布者身份未经验证。
源码自洽:参数校验严格(拒绝未知flag、小数、0值、冲突flag),错误以结构化JSON写stderr并返回退出码1;附带网络无关的回归测试(cli-flag-validation.test.ts)且CI的cli-checks矩阵会自动发现并运行该CLI的bun test与typecheck,构成可核查的第三方执行证据,故可超过静态上限。扣分点:核心HTML解析路径(parseJobCards/parseJobDetail)无fixture测试,正则解析对LinkedIn标记漂移天然脆弱,未在静态审查中复现关键路径。
触发描述精确(明确触发短语、location必填、任何国家/远程场景),边界与非适用范围(个人使用)有声明。扣分点:核心功能完全依赖linkedin.com实时可达,对中国大陆网络环境存在可达性风险;未声明对LinkedIn页面结构变更的容错边界。
SKILL.md与CLI README分层清晰、含示例、flags表、错误约定与ToS警示;版本号1.0.0、MIT许可证明确。扣分点:无changelog与显式维护责任声明;ToS风险使该技能的长期可用性存疑,文档未说明端点失效时的更新路径。
若LinkedIn guest端点可用,输出(/table/plain)格式明确、可直接使用;README称作者本人用该工作流成功求职。扣分点:静态审查无法验证实际搜索结果质量;LinkedIn常对无凭据访问限流/封禁,输出完整性与长期可用性证据有限,相对替代方案(官方API、招聘网站)的边际价值未经验证。
有可审计的一手材料(完整源码、网络无关测试套件、CI工作流),且CI会实际运行该技能的测试,覆盖优于纯营销声明,达到静态上限。扣分点:无对核心解析与真实输出格式的独立复现证据;宣称的'verified against live guest pages'无法核实。
- 该技能通过自动化访问LinkedIn公开页面,违反LinkedIn服务条款;仅限低频个人使用,勿用于商业或批量抓取,账号/IP可能被限制。
- 核心功能依赖linkedin.com实时可达,中国大陆网络环境下可能无法使用。
- HTML解析基于正则,LinkedIn页面结构变更可能导致结果缺失或错误,且无对应的fixture测试覆盖解析路径。
- 发布者身份未经FollowSkills验证,属未知而非可疑;使用前请自行审阅源码。
这个 Skill 能做什么,适合哪些场景?
这是 ai-job-search 仓库中的一个职位门户搜索技能,位于 .agents/skills/linkedin-search/。它通过 LinkedIn 未鉴权的公开 jobs-guest 接口抓取职位数据,只要用户显式提供地点,就能在全球任意市场开箱即用。支持按关键词、发布时间(天甚至分钟级)、办公方式(远程/混合/坐班)过滤,还能拉取单个职位的完整描述。由于自动化访问违反 LinkedIn 服务条款,该项目明确限定为个人、低频使用。
运行一个 Bun CLI,调用 LinkedIn 公开的 jobs-guest 接口:search 子命令按必填的 --location(如 "Berlin, Germany" 或 "Remote")加可选的 --query、--jobage、--jobage-minutes、--remote、--page、--limit 过滤职位,每页固定 10 条,输出 /table/plain 三种格式;detail 子命令接受职位 ID、jobs/view URL 或 urn:li:jobPosting URN,返回完整描述、资历级别、雇佣类型、职能和行业。遇到 429/5xx 会指数退避重试,错误以 JSON 写入 stderr 并以退出码 1 结束。
- 正在求职的工程师想查近 30 天班加罗尔的数据工程师岗位,用 --jobage 30 配合 table 格式快速浏览
- 远程办公者想看全远程职位流,用 -l "Remote" 拉取结果
- 求职者看到某个 LinkedIn 职位链接,用 detail 命令抓取完整描述用于后续简历定制
- 希望捕捉刚发布职位的人用 --jobage-minutes 30 只看半小时内的新岗位
这个 Skill 有哪些优点和局限?
- 零运行时依赖,只需 Bun,无需 bun install 即可运行
- 无需 LinkedIn 账号、登录或 API 密钥
- 国家无关:同一套命令在任意市场只需更换 --location
- 支持分钟级的新鲜度过滤和远程/混合/坐班过滤
- 提供 /table/plain 三种输出,便于程序化使用或人工浏览
- 自动化访问违反 LinkedIn 服务条款,仅限个人低频使用,不可商用或批量采集
- 依赖未鉴权公开接口,LinkedIn 可能随时改版或加强限流导致失效
- 每页固定 10 条,无鉴权意味着数据范围受限于公开访客视图
- SKILL.md 未提及自动化测试套件或长期维护承诺
如何安装这个 Skill?
先按仓库说明 fork 并克隆 MadsLorentzen/ai-job-search。该技能零运行时依赖,只需安装 Bun(https://bun.sh);README 指出对其运行 bun install 是可选的,仅拉取 TypeScript 开发类型。该技能设计为在 Claude Code 等智能体中通过其 SKILL.md 被触发使用。
如何使用这个 Skill?
在装有 Bun 的终端或智能体环境中运行,例如:搜索班加罗尔近 30 天数据工程师岗位:bun run .agents/skills/linkedin-search/cli/src/cli.ts search -q "data engineer" -l "Bengaluru, Karnataka, India" --jobage 30 --format table。查详情:detail 4426311357 --format plain(也可传完整职位 URL 或 URN)。地点必须显式传入,触发短语包括 find a job、job search、remote jobs 等。
这个 Skill 与同类方案有什么区别?
同仓库还提供 freehire-search 技能,它调用 freehire.me 的公开 REST API,返回结构化结果(技能、资历、类别)且同样零依赖;相比之下 linkedin-search 是 HTML 解析、字段更原始,但覆盖面是 LinkedIn 全球职位库。在丹麦市场另有 Jobindex、Jobnet 等门户技能作为本地化替代。