본문으로 건너뛰기
cccskills
무료GitHub에 공개한국어 소개

freehire-search

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.

연동 도구LinkedIn

실행 점수 미검증

설치 방법 보기

이럴 때 유용합니다

  • 유럽연합의 원격 React 공고 검색
  • 독일의 새 DevOps 공고 검색
  • Go 또는 Rust 공고를 한 번에 검색
  • 공유받은 freehire 공고의 상세 내용 확인

한국어 소개

할 수 있는 일

freehire.me에 모인 여러 국가의 소프트웨어, 데이터, 엔지니어링 공고를 검색합니다. 국가, 도시, 원격 근무 여부, 경력 수준, 직종 범주, 기술, 게시 시기로 범위를 좁힙니다. JSON 검색 결과에 모집 내용 전문이 포함되어 공고마다 상세 내용을 다시 가져오지 않고 조건을 확인합니다. OR로 여러 후보를 함께 검색하거나 title:로 공고 제목만 검색합니다.

이럴 때 유용합니다

해외 기술직이나 원격 공고를 찾거나 여러 기술 스택을 후보로 일자리를 비교할 때 유용합니다. 공유받은 공고와 검색에서 사라진 모집 종료 공고도 식별자나 freehire URL로 상세 내용을 확인합니다.

사용 예시

  • “유럽연합에서 원격 근무가 가능한 React 공고를 찾아 주세요.”
  • “독일에서 최근 14일간 게시된 DevOps 공고를 보여 주세요.”
  • “Go 또는 Rust를 사용하는 일자리를 한 번에 검색해 주세요.”

주의 사항

실행에는 bun이 필요하며 인증이나 API 키는 필요하지 않습니다. 기술직 중심의 필터이므로 비기술직을 폭넓게 찾는 용도에는 적합하지 않습니다. 외부 서비스에는 공식적인 가동 보장이 없습니다. 지역 정보가 확인되지 않은 공고는 지역 필터를 적용하면 결과에서 제외될 수 있습니다.

이 소개문은 공개된 SKILL.md를 바탕으로 AI(OpenAI Codex)가 작성했습니다. 정확한 사양은 아래 원문을 확인하세요.

문서 점검

AI가 SKILL.md의 내용에서 주의가 필요한 작업과 도입 전제를 확인했습니다. 점수는 실제로 실행한 결과(실행 검증)만으로 매깁니다.

안전성전송·삭제·명령 실행 등을 명시하고 있는가
A양호인증 없는 공개 API 읽기와 외부 서비스 의존성, 장애 발생 시 동작이 명시되어 있습니다.
도입의 용이성필요한 도구나 API 키가 적고 적혀 있는가
B일부 부족bun만 필요하고 인증은 불필요하다고 명시되어 있지만 bun 설치 절차는 없습니다.

점수에는 넣지 않았습니다. 2026년 10월 24일 기준으로 AI(OpenAI Codex)가 판정했습니다. 참고용이므로 설치 전에 원문도 확인해 주세요.

평가가 다르다고 생각되면 재검토를 요청하기

어느 항목이 왜 다르다고 생각하는지 적어 주세요. 로그인은 필요 없습니다. SKILL.md와 대조해 평가를 다시 만들고 이곳에 반영합니다.

이 양식은 reCAPTCHA로 보호되며 Google 개인정보처리방침 및 서비스 약관이 적용됩니다.

포함된 파일(19)

  • SKILL.md13.3 KB
  • cli/package.json612 B
  • cli/README.md4.4 KB
  • cli/src/cli.ts13.2 KB
  • cli/src/commands/detail.ts2.3 KB
  • cli/src/commands/search.ts8.1 KB
  • cli/src/helpers.ts12.0 KB
  • cli/tests/cli-flag-validation.test.ts8.4 KB
  • cli/tests/commands.test.ts9.2 KB
  • cli/tests/detail-flags.test.ts2.6 KB
  • cli/tests/helpers.ts1.0 KB
  • cli/tests/parsing.test.ts7.8 KB
  • cli/tests/region-value-warning.test.ts6.0 KB
  • cli/tests/remote-mode.test.ts3.3 KB
  • cli/tests/request-timeout.test.ts957 B
  • cli/tests/required-search-values.test.ts3.1 KB
  • cli/tests/retry-backoff.test.ts5.2 KB
  • cli/tsconfig.json305 B
  • url-reference.md7.2 KB

SKILL.md(원문)

설치하기 전에 에이전트에게 전달되는 지시 내용을 확인할 수 있습니다.

freehire Search Skill

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.

⚠️ Scope: tech-focused

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.

ℹ️ Hosted-service dependency (best-effort, no SLA)

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.

When to use this skill

  • Search for tech job openings by keyword, in a given region/country or remotely — each result comes back with its full description, no per-hit follow-up needed
  • Filter by seniority, category, skills, or recency (posted within N days)
  • Look one freehire posting up by its slug (including a closed one)

Commands

Search job listings

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.
  • A leading 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=100000

Location is a facet, not free text. Unlike linkedin-search's --location, freehire filters geography through the structured --region/--country/--city facets. Discover the live values for a market at /api/v1/jobs/facets (append ?q=<role> to scope it) — never invent facet values.

Fetch full job detail

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.

Usage examples

# 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

Output formats

FormatBest for
jsonDefault — programmatic use; the only format carrying each hit's description
tableQuick human-readable scanning
plainReading 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.

Partial data

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:

  • A missing region/country means "not resolved", not "not applicable" — filtering on --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.
  • There is a dedicated facet value for the unresolved bucket: --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".

Notes

  • Data is from freehire.me's public API — no credentials required. Only per-user tracking (apply/save) needs a key, and this skill deliberately does not touch it: it is search + detail only.
  • 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.
  • Facet values are controlled vocabularies. Use /api/v1/jobs/facets to see the live values (with counts) for a query before filtering.
  • The API retries 429/5xx with exponential backoff; an unreachable API exits non-zero with a clear message (best-effort service, see the dependency note above).
  • 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.

리뷰

아직 리뷰가 없습니다. 사용해 본 소감을 남겨 주세요.

댓글

로그인 없이 쓸 수 있습니다. 사용 후기, 질문, 작동하지 않은 환경 등을 편하게 남겨 주세요.

아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.

보내면 바로 공개됩니다. 이메일 주소나 전화번호 같은 개인 정보는 쓰지 마세요. URL은 2개까지입니다.

0 / 1,000자

이 양식은 reCAPTCHA로 보호되며 Google 개인정보처리방침 및 서비스 약관이 적용됩니다.

같은 저장소의 스킬

job-application-assistant

무료요약 있음

채용 공고와 경력의 적합도를 평가하고 기업을 조사해 지원처에 맞는 CV와 커버레터를 작성합니다. 면접 답변과 질문을 준비하고 지원 기록과 공고 원문도 저장합니다.

  • 채용 공고와 경력의 적합도 평가
  • 지원처별 CV와 커버레터 작성
  • 면접 답변과 기업에 물을 질문 준비
ai-job-search-dev/ai-job-search6.4만2026년 10월 21일 업데이트

jobbank-search

무료요약 있음

덴마크의 대졸자와 전문 인력 대상 채용을 지역, 업종, 전공, 근무 형태로 검색합니다. 신입 연수, 박사 과정, 박사후연구원 모집의 상세 내용과 지원 마감일을 확인합니다.

  • 신입 졸업자 대상 연수 채용 검색
  • 박사 과정과 박사후연구원 모집 검색
  • 완전 원격 소프트웨어 일자리 검색
ai-job-search-dev/ai-job-search6.4만2026년 10월 21일 업데이트

jobdanmark-search

무료요약 있음

Jobdanmark.dk의 공개 데이터에서 덴마크 채용 공고를 직종, 지역, 고용 형태로 검색합니다. 업무 내용과 지원 마감일을 확인하고 직종별 공고 수를 비교합니다.

  • 코펜하겐의 IT 채용 공고 검색
  • Aarhus의 학생 대상 일자리 검색
  • 업무 내용과 지원 마감일 확인
ai-job-search-dev/ai-job-search6.4만2026년 10월 21일 업데이트

jobindex-search

무료요약 있음

Jobindex.dk에서 직종, 기술, 기업명, 도시명으로 덴마크 채용 공고를 검색합니다. 게시 시기로 범위를 좁히고 모집 내용, 지원 기한과 지원 링크를 확인합니다.

  • 최근 7일간 게시된 Python 공고 검색
  • 코펜하겐의 데이터 엔지니어 공고 검색
  • 그래픽 디자이너 채용 공고 비교
ai-job-search-dev/ai-job-search6.4만2026년 10월 21일 업데이트

jobnet-search

무료요약 있음

덴마크 공식 채용 사이트 Jobnet.dk에서 직종, 지역, 근무 시간으로 일자리를 찾습니다. 모집 내용과 지원 마감일, 연락처, 지원 링크까지 확인합니다.

  • 무기계약 정규 시간제 간호사 채용 검색
  • 통근 가능한 거리의 정보 기술 직무 검색
  • 지원 마감일이 가까운 채용 공고 확인
ai-job-search-dev/ai-job-search6.4만2026년 10월 21일 업데이트

linkedin-search

무료요약 있음

LinkedIn 공개 채용 공고를 국가, 도시, 직종으로 검색하고 게시 시기나 근무 방식으로 좁힙니다. 공고 ID나 URL로 모집 요강 전문과 고용 형태도 확인합니다.

  • 원하는 국가나 도시의 채용 공고 검색
  • 원격 또는 하이브리드 근무 공고 검색
  • 새로 게시된 채용 공고 확인
ai-job-search-dev/ai-job-search6.4만2026년 10월 21일 업데이트

ai-job-search-dev의 스킬 모두 보기

이 스킬의 문제 신고