freehire 职位搜索技能
通过 freehire.me 公共聚合 API 搜索多国技术职位,无需任何密钥或登录,直接在本地运行。
代码仅通过公开无鉴权的 GET 请求读取 freehire.me API,零运行时依赖,Bash 权限限定为单一 CLI 路径,无凭据处理、无写操作、无隐蔽数据流;错误路径清晰、可降级,还提供 FREEHIRE_API_URL 可替换数据源。扣分:行为是外部网络请求,依赖第三方托管服务(无 SLA),静态审查无法验证服务端行为,无显式回滚/隔离机制。
CLI 代码自洽,参数校验严格(拒绝未知 flag、拒绝小数/0 的数值),错误统一输出 stderr JSON 且退出码 1;仓库附带离线 mock 测试套件覆盖 flag 校验、搜索/详情路径与 404/网络失败分支,CI 声明运行 typecheck 与 mock 测试。扣分:静态审查未执行,测试经由截断的 CI 文件不能完全确认对本 skill 生效;真实 API 行为(429 重试、agent 端点)未经独立复现。
触发词明确、范围边界清晰(限定技术类职位,并诚实声明非技术覆盖不成熟),输入/输出/部分数据语义均有文档。扣分:无中文支持说明;核心功能完全依赖海外服务 freehire.me,在中国大陆的可达性未声明、无镜像保障,属于环境适配的实质风险。
SKILL.md 分层清晰(范围、依赖、命令、示例、输出格式、部分数据语义),有 README、package.、版本号 1.0.0、MIT 许可;自我依赖风险(best-effort 无 SLA)如实披露。扣分:无独立 CHANGELOG,维护责任与更新路径依赖仓库整体治理而非本 skill 明确声明,发布者身份未经验证。
宣称的核心任务(跨市场技术职位搜索、单帖详情)路径完整、输出结构化且可直接使用,相对手工浏览有明确边际价值,并针对 agent 上下文做了 token 成本优化(--no-description)。扣分:静态审查未执行,无第三方代表性输出验证;有效性依赖一个无 SLA 的个人托管服务的持续可用。
仓库包含可审计的一手材料:源码、离线 mock 测试、CI 工作流、明确标注的验证日期注释(如 2026-08-19 的 live API 行为)。扣分:静态模式无法独立复现结论,无多种独立证据来源交叉印证,作者对 API 行为的'已验证'声明仅可采信为作者陈述。
- 核心功能完全依赖海外托管服务 freehire.me(个人项目、无 SLA),中国大陆可达性未声明,服务中断时该数据源即不可用。
- 本评分仅为静态源码审查,未执行任何代码;live API 行为(429 重试、agent 端点、include_description 参数)均基于作者陈述。
- 非技术类职位覆盖尚不成熟,触发应限定于技术/工程类职位,否则过滤结果不可靠。
- 免费职位搜索结果来自聚合抓取,职位信息可能不完整或过期(文档已披露 region/country 可能无法解析),使用前应核对原始招聘页。
- 发布者未经验证;CLI 对外发起网络请求,请自行确认所在网络环境对其可达。
这个 Skill 能做什么,适合哪些场景?
freehire-search 是 ai-job-search 仓库中的一个职位门户搜索技能,通过 freehire.me 的公共 JSON API 查询实时技术类职位(软件、数据、工程、DevOps、远程等)。freehire.me 将约 50 个 ATS 平台的职位聚合为统一结构,因此技能返回的是带有技能、级别、地区等结构化字段的结果,而非从网页解析的文本。该技能零运行时依赖,仅需 Bun 即可运行,支持按地区、国家、级别、技能等分面过滤。其后端本身是 MIT 协议的开源项目,可通过环境变量切换到自托管实例。
运行一个 Bun CLI,调用 freehire.me 的 /api/v1/agent/jobs/search 和职位详情接口。search 命令支持关键词搜索及分面过滤(--region、--country、--city、--seniority、--category、--skill、--remote、--jobage 等),每次搜索结果直接携带完整职位描述,无需逐条跟进请求;detail 命令按 slug 或 URL 查询单个职位(包括已关闭的职位)。输出支持 、table、plain 三种格式,错误以结构化 JSON 写入 stderr 并以非零码退出。API 对 429/5xx 自动做指数退避重试。
- 求职者想在多个国家/市场同时搜索远程开发者职位,一次搜索即可拿到每条职位的完整描述
- 用户想按级别(如 senior)、类别(如 devops)、技能(如 go、kubernetes)精确筛选技术职位
- 已有某个职位的 freehire slug 或链接,想查其完整详情,包括已从搜索中下线的关闭职位
- fork 了 ai-job-search 的用户希望 /scrape 工作流接入一个免登录、无 API key 的国际市场职位源
- 注重隐私的用户想把 API 指向自托管的 freehire 实例(FREEHIRE_API_URL 环境变量一行切换)
这个 Skill 有哪些优点和局限?
- 零运行时依赖,仅需 Bun,无需 API key 或任何认证
- 搜索结果直接携带完整职位描述,一次请求替代 1+N 次抓取
- 结构化 JSON 输出(技能、级别、类别、地区分面),而非网页解析文本
- 国家无关:通过 --region/--country 分面适配任意市场
- 后端开源且可自托管,FREEHIRE_API_URL 一行切换;API 不可达时优雅降级,不破坏外围工作流
- 依赖第三方托管服务 freehire.me,为个人项目、无正式 SLA,可能宕机
- 分面过滤(技能、类别、级别)面向技术职位调优,不适合通用(非技术)求职覆盖
- 分面数据可能不完整:地区/国家未解析的职位会被 --region 过滤静默排除
- 自托管完整、持续更新的镜像(数百万职位)资源开销大
- 搜索技能本身不管理申请记录;申请跟踪等能力属于仓库中的其他技能
如何安装这个 Skill?
本技能是 MadsLorentzen/ai-job-search 仓库(MIT 协议)的一部分,路径为 .agents/skills/freehire-search/。先 fork 并克隆仓库:gh repo fork MadsLorentzen/ai-job-search --clone。由于本技能零运行时依赖,bun install 是可选的(仅拉取 TypeScript 开发类型);若要统一安装:cd .agents/skills/freehire-search/cli && bun install。需要在机器上安装 Bun(https://bun.sh)。仓库整体还需要 Claude Code CLI。
如何使用这个 Skill?
在仓库根目录运行,例如:bun run .agents/skills/freehire-search/cli/src/cli.ts search -q "backend engineer" --seniority senior --limit 10 --format table。其他示例:--remote remote --region eu 过滤欧盟远程职位;--category devops --country DE --jobage 14 过滤德国近 14 天 DevOps 职位;detail golang-zensar-2bxu6dxm 查询单个职位。分面取值可访问 https://freehire.me/api/v1/jobs/facets 查询实时词汇表,不要凭空编造。在 Claude Code 中,该技能由 /scrape 工作流按触发词(如 "find a tech job"、"remote developer jobs")调用。
这个 Skill 与同类方案有什么区别?
仓库将其定位为 linkedin-search 的国家无关替代或补充:linkedin-search 基于 LinkedIn 公开未认证接口、按自由文本位置过滤但仅限个人使用;freehire-search 基于聚合器的公共 REST API,返回结构化分面结果且条款上更干净。与仓库中四个丹麦 HTML 抓取门户(Jobindex、Jobnet 等)不同,本技能不解析 HTML。