根据候选人的经历评估职位匹配度,定制简历和求职信,记录已起草的申请,并准备能结合雇主要求说明相关经历的面试回答。
- 判断职位与经历的匹配度
- 按职位定制申请材料
- 准备面试回答和提问
通过 freehire.me 搜索多个国家的软件、数据和技术岗位,可按技能、资历、地点、发布时间和远程条件筛选,并查看完整职位描述或指定职位详情。
Use this skill to search live software / tech / data / engineering job listings across many countries and markets (and remote) via the freehire.me aggregator's public API, or to look up a specific posting. It aggregates roles from ~50 ATS platforms into one schema, so a single skill covers many markets — but its faceted filtering (skills, category, seniority) is tuned tech-first, so scope triggers to technical roles. Trigger phrases: find a tech job, software job search, developer jobs, engineering vacancies, data/ML jobs, DevOps roles, remote developer jobs, "are there any <tech role> jobs in <place>", look up this freehire job posting.
实测评分 未实测
查看安装方法通过 freehire.me 搜索多个国家的技术岗位,包括软件、数据、机器学习和 DevOps 等职位。可以按关键词、技能、资历、国家或城市、工作方式以及发布时间筛选。搜索结果可用 JSON 格式查看,并包含完整招聘内容,便于了解工作职责和任职要求。也可以通过网址或职位标识查询某个职位的详情。
适合比较海外技术岗位或远程职位。可以用表格查看候选职位,也可以先进行不显示职位描述的搜索,缩小范围后再阅读完整内容。若要查看已保存的链接,或搜索结果中已不再出现的已关闭职位,也可以使用此技能。
运行需要 bun 和网络连接,无需认证或 API 密钥。职位范围以技术岗位为主。此技能依赖第三方 API,服务没有可用性保证。若职位无法判定所属地区,添加地区筛选时可能会将其排除,因此有时需要调整搜索范围。此技能用于搜索职位和获取详情。
本介绍由 AI(OpenAI Codex)根据公开的 SKILL.md 撰写。准确的规格请查看下方原文。
AI 根据 SKILL.md 的内容检查了需要注意的操作和使用前提。评分只依据实际运行的结果(实测对比)。
不计入评分。 由 AI(OpenAI Codex)于 2026年10月24日 评估。仅供参考,安装前请同时查看原文。
安装前可以查看交给 AI 代理的指令内容。
Search live job listings from the freehire.me job
aggregator — an open-source IT job board that normalizes postings from ~50 ATS
platforms across many countries into one schema. No authentication, no API key,
and zero runtime dependencies — it runs with just bun. The market is chosen
per query via facet flags (--region, --country), so the same skill works for a
forker in any market out of the box.
This is a country-agnostic worked example of the repo's job-portal-skill pattern, like
linkedin-search. Unlike the HTML-scraping portals, it queries freehire's public JSON API, so results are structured (skills, seniority, region facets) rather than parsed from markup.
freehire's corpus already includes some non-tech postings (it crawls whole company career pages), but its faceted filtering — skills, categories, and seniority dictionaries — is tuned tech-first today, so this skill scopes its triggers to software / data / engineering / tech roles, where the filtering is strong. Non-tech coverage exists but is still maturing; don't rely on this skill for general (non-technical) job coverage yet.
This skill depends on a third-party hosted service, freehire.me. Reads are
public and unauthenticated — the same zero-signup bar as linkedin-search.
freehire.me is a personal project but actively maintained; it runs on a best-effort basis (no formal SLA). If the API is unreachable, the CLI fails gracefully — a non-zero exit with a clear error message — so an outage degrades this source rather than breaking the surrounding workflow.
Self-hosting / swappable base URL. The freehire backend is a separate
MIT-licensed repo — strelov1/freehire
(Go + PostgreSQL + Meilisearch) — that stands up with one command via Docker
Compose (make up → API on :8080, same /api/v1/... paths). The skill honors a
base-URL env var, FREEHIRE_API_URL (default https://freehire.me), so pointing
it at a local instance is a one-line change:
FREEHIRE_API_URL=http://localhost:8080 bun run .agents/skills/freehire-search/cli/src/cli.ts search -q "go"
Caveat: standing up the API is light, but keeping a full, continuously-fresh mirror (millions of postings across ~50 platforms) is resource-heavy — a self-hoster would either crawl a scoped subset of sources or point the env var back at the hosted API.
bun run .agents/skills/freehire-search/cli/src/cli.ts search [-q "<keywords>"] [facet flags]
Key flags:
--query <text> / -q <text> — keyword search (title, skill, role). Full-text; optional.
Supports OR and title: (see "Query operators" below).--jobage <days> — posted within N days (maps to posted_within_days).--page <n> — 1-indexed page. Default 1.--limit <n> / -n <n> — results per page (API limit). Default 25.--format json|table|plain — default json.--description-format markdown|text|html — how each result's full description is
rendered. Default markdown, which keeps the posting's headings and requirement
lists intact. json output only.Query operators. -q understands two operators; the CLI passes the text through
unchanged and the API parses it:
OR between alternatives returns jobs matching any of them, e.g.
-q "golang OR rust". Uppercase only: a lowercase or is an ordinary search
word. Plain space-separated words are not a union (-q "golang rust" returns
fewer jobs than -q golang alone), so use OR for synonyms and alternative stacks
instead of running one search per keyword. At most 5 alternatives; a 6th is
rejected with an error. An OR inside double quotes is literal text.title: restricts that alternative to the job title, e.g.
-q "title:staff engineer" skips postings that merely mention the words in their
description. It applies per alternative, so repeat it on each one:
-q "title:staff engineer OR title:principal engineer". It only counts at the start
of an alternative; title: in the middle is searched as text. Quotes work inside it:
-q 'title:"staff engineer"' matches the phrase.Facet flags, --jobage, --page and --limit apply to the combined result: every
alternative is filtered the same way, and a job matching several alternatives
appears once.
Search results already carry the full description. This skill queries freehire's
agent search endpoint, which replaces the index's truncated preview with each
posting's complete text, so a search of 20 roles is 1 request rather than 1 + 20.
Do not loop detail over search hits to read their descriptions — reach for
detail only to look one posting up by slug (e.g. from the tracker, or a posting
already closed and therefore absent from search). Full descriptions are verbose:
keep --limit modest, and pre-filter on title/company before reading bodies -
or pass --no-description for a cheap discovery pass that keeps every other
field and drops the bodies entirely (fetch a shortlisted job's body with
detail, or re-run the search without the flag).
Facet filters (values come from freehire's controlled vocabularies; comma-separate for OR within a facet):
--region <codes> - macro-region: global, eu, uk, north_america, latam, apac, mena, africa, cis. --region eu,uk. eu does not include the UK; add uk for Europe as a whole. For a single country use --country instead - us is a country code, not a region, and --region us matches nothing. --region, --country and --city form one OR-group, so --country us alone scopes to the US. Use none to match jobs whose region could not be resolved (see "Partial data" below).--country <codes> — ISO-3166 alpha-2, e.g. --country DE,GB--city <names> — city name(s), e.g. --city Berlin--seniority <levels> — junior, middle, senior, staff, principal, lead, …--category <cats> — backend, frontend, fullstack, devops, ml_ai, qa, …--skill <names> — canonical skill(s), e.g. --skill go,kubernetes--company <slug> — company slug (from a result's company_slug)--remote <mode> — remote | hybrid | onsite (work_mode facet). A bare --remote means remote. Comma-separate for OR (remote,hybrid; on-site normalises to onsite). An unknown item exits 1 with BAD_ARG.--facet <key=value> — any other facet param (repeatable), e.g. --facet salary_min=100000Location is a facet, not free text. Unlike
linkedin-search's--location, freehire filters geography through the structured--region/--country/--cityfacets. Discover the live values for a market at/api/v1/jobs/facets(append?q=<role>to scope it) — never invent facet values.
bun run .agents/skills/freehire-search/cli/src/cli.ts detail <slug|url> [--format json|plain]
slug is the id from a search result (e.g. golang-zensar-2bxu6dxm). You may
also pass a full https://freehire.me/jobs/<slug> URL. A URL on any other host - including the employer apply link a search result's url field carries - is rejected with BAD_ID before any request. Returns the full (HTML-stripped)
description, skills, region/country, and — when the posting is enriched — seniority,
category, employment type, and salary. salary keeps its period when freehire records
one (INR 300000–300000/year, INR 12000/month); compare pay only in one period.
Use it for a posting you already have a slug for — a tracked application, a shared
link, or a closed posting search no longer lists. Re-fetching a hit that search
just returned only re-reads a description you already have.
# Senior backend roles, table view
bun run .agents/skills/freehire-search/cli/src/cli.ts search -q "backend engineer" --seniority senior --limit 10 --format table
# Go or Rust roles, one search (OR must be uppercase)
bun run .agents/skills/freehire-search/cli/src/cli.ts search -q "golang OR rust" --remote remote --format table
# Staff or principal titles only, not postings that mention them in passing
bun run .agents/skills/freehire-search/cli/src/cli.ts search -q "title:staff engineer OR title:principal engineer" --format table
# Remote React roles in the EU
bun run .agents/skills/freehire-search/cli/src/cli.ts search -q "react" --remote remote --region eu --format table
# DevOps roles in Germany posted in the last 14 days
bun run .agents/skills/freehire-search/cli/src/cli.ts search --category devops --country DE --jobage 14 --format table
# ML/AI roles anywhere, fully remote
bun run .agents/skills/freehire-search/cli/src/cli.ts search -q "machine learning" --category ml_ai --remote remote --format table
# Descriptions as plain text instead of Markdown
bun run .agents/skills/freehire-search/cli/src/cli.ts search -q "platform engineer" --limit 5 --description-format text
# Full details for a specific job
bun run .agents/skills/freehire-search/cli/src/cli.ts detail golang-zensar-2bxu6dxm --format plain
| Format | Best for |
|---|---|
json | Default — programmatic use; the only format carrying each hit's description |
table | Quick human-readable scanning |
plain | Reading a single job's full detail (detail command) |
Search JSON is { "meta": { "count", "page", "total" }, "results": [...] }; each
result carries at least id (the freehire slug), title, company, location,
date, url, and description (missing values are null). table and plain
omit the description — it would swamp a scannable list. All errors are written to
stderr as { "error": "...", "code": "..." } and the process exits with code 1.
One diagnostic is not an error: a --region (or --facet regions=) value outside the
documented vocabulary - us is a country code, not a region - prints
{ "warning": "...", "code": "REGION_VALUE_UNKNOWN" } on stderr after the results,
and the process still exits 0 with stdout a valid JSON document.
Facets are derived per-posting and can be incomplete — geography especially.
A job may resolve its work_mode (e.g. remote) but leave its region or
country undetermined when the source's location text is ambiguous (freehire's
dictionaries never guess). So:
--region eu silently drops jobs whose region wasn't resolved,
even if they are in fact EU. Widen or drop the facet if you need those back.--region none
matches jobs with no resolved region — useful to sweep up remote roles that
never pinned a geography. It ORs with real regions, e.g. --region eu,none.result.regions / countries / cities may be empty arrays for the same
reason; treat empty as unknown, not as "none of the above".id in search results is the freehire public_slug — pass it as-is to detail.date is the posting date as YYYY-MM-DD (the date part of the API's posted_at timestamp, the shape every portal CLI emits); it may be null for undated postings./api/v1/jobs/facets to see the
live values (with counts) for a query before filtering.search calls /api/v1/agent/jobs/search (public, like the rest); --no-description
calls the lighter /api/v1/jobs/search, which serves no full bodies. A self-hosted
instance older than that endpoint answers 404, and the CLI reports it as an error
naming the endpoint — never as an empty result set.还没有评价。欢迎分享你的使用感受。
无需登录即可发表。欢迎分享使用感受、提问,或说明在哪些环境下无法运行。
还没有评论。来写第一条吧。
根据候选人的经历评估职位匹配度,定制简历和求职信,记录已起草的申请,并准备能结合雇主要求说明相关经历的面试回答。
搜索丹麦面向大学毕业生和专业人才的岗位,按地区、行业、专业及工作方式筛选,查找毕业生培训、博士和博士后机会,并查看详情及申请截止日期。
按职位、地区和雇佣类型筛选丹麦招聘信息,查看工作内容与申请截止日期,并从Jobdanmark.dk公开数据中获取职位列表和分类数量。
Find Danish job listings on Jobindex.dk using job titles, skills, companies, or city names. Filter by posting age, sort by relevance or date, and retrieve full descriptions, employment conditions, deadlines, and application links.
中文简介正在准备中。当前显示英语简介。
在丹麦官方招聘网站 Jobnet.dk 搜索职位,可按职业、地区、工作时长和雇用期限筛选,并查询完整职位描述、雇主联系人、申请截止日期及申请链接。
按国家、城市和职位搜索LinkedIn公开招聘信息,按发布时间或办公方式筛选,并通过职位编号或网址获取完整职位说明、职级、用工类型等详情。