From 6a1240648f0873fa6a40cda5404f2aab6d3397fe Mon Sep 17 00:00:00 2001 From: fooSynaptic <2313990450@qq.com> Date: Fri, 10 Jul 2026 03:13:31 +0800 Subject: [PATCH] docs: document freehire-search in README and SETUP (#103) The freehire-search CLI is typechecked in CI but was missing from install instructions, the file tree, and the country-agnostic portal overview. Co-authored-by: fooSynaptic <19420328+fooSynaptic@users.noreply.github.com> --- README.md | 22 ++++++++++++---------- SETUP.md | 8 ++++---- 2 files changed, 16 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index e1140fd..77f4045 100644 --- a/README.md +++ b/README.md @@ -47,7 +47,7 @@ The framework encodes career guidance best practices, including structured evalu - [Claude Code](https://claude.com/claude-code) (CLI) - Python 3.10+ -- [Bun](https://bun.sh) (for Danish job search CLI tools) +- [Bun](https://bun.sh) (for job search CLI tools) - LaTeX distribution with `lualatex` and `xelatex`: [TeX Live](https://tug.org/texlive/), [MacTeX](https://tug.org/mactex/), [TinyTeX](https://yihui.org/tinytex/), or [MiKTeX](https://miktex.org/). The CV compiles with `lualatex` (pdflatex often fails on modern MiKTeX installs with `fontawesome5` font-expansion errors); the cover letter compiles with `xelatex` because `cover.cls` requires `fontspec`. If using a minimal TeX install such as TinyTeX or BasicTeX, install the extra packages listed in [SETUP.md](SETUP.md#minimal-tex-install-tinytexbasictex). - Optional: `pdftotext` from [poppler](https://poppler.freedesktop.org/) (macOS: `brew install poppler`, Debian/Ubuntu: `apt install poppler-utils`, Windows: `choco install poppler`) — used by `/apply`'s ATS parseability check on the compiled CV. If missing, the check degrades gracefully to a visual keyword review. @@ -65,7 +65,7 @@ cd ai-job-search PowerShell: ```powershell -$tools = @("jobbank-search", "jobdanmark-search", "jobindex-search", "jobnet-search", "linkedin-search") +$tools = @("jobbank-search", "jobdanmark-search", "jobindex-search", "jobnet-search", "linkedin-search", "freehire-search") foreach ($tool in $tools) { Set-Location ".agents/skills/$tool/cli" bun install @@ -76,14 +76,12 @@ foreach ($tool in $tools) { Bash / zsh / Git Bash: ```bash -cd .agents/skills/jobbank-search/cli && bun install && cd ../../../.. -cd .agents/skills/jobdanmark-search/cli && bun install && cd ../../../.. -cd .agents/skills/jobindex-search/cli && bun install && cd ../../../.. -cd .agents/skills/jobnet-search/cli && bun install && cd ../../../.. -cd .agents/skills/linkedin-search/cli && bun install && cd ../../../.. +for tool in jobbank-search jobdanmark-search jobindex-search jobnet-search linkedin-search freehire-search; do + cd .agents/skills/$tool/cli && bun install && cd ../../../.. +done ``` -For `linkedin-search` the install is optional: it has zero runtime dependencies and runs with plain `bun`; `bun install` only pulls TypeScript dev types. +For `linkedin-search` and `freehire-search` the install is optional: both have zero runtime dependencies and run with plain `bun`; `bun install` only pulls TypeScript dev types. ### 3. Set up your profile @@ -165,7 +163,8 @@ ai-job-search/ │ ├── jobdanmark-search/ # Jobdanmark.dk (Denmark) │ ├── jobindex-search/ # Jobindex.dk (Denmark) │ ├── jobnet-search/ # Jobnet.dk (Denmark, government portal) -│ └── linkedin-search/ # LinkedIn public job listings (country-agnostic) +│ ├── linkedin-search/ # LinkedIn public job listings (country-agnostic) +│ └── freehire-search/ # freehire.dev tech job aggregator (multi-market, REST API) ├── cv/ │ └── main_example.tex # moderncv LaTeX template ├── cover_letters/ @@ -273,7 +272,10 @@ Give it your local job board's URL. The command investigates the portal (search- Maintaining a fork adapted to your market or language? Add it to the [Community forks & adaptations](https://github.com/MadsLorentzen/ai-job-search/discussions/78) thread so others can find it. -For a **country-agnostic** starting point, the repo also includes **`linkedin-search`** — a job-search skill built on LinkedIn's public, unauthenticated `jobs-guest` endpoints. It is field-agnostic, has **zero runtime dependencies** (runs with just `bun`), and takes the search location as an explicit flag, so it works for any market out of the box (`-l "Berlin, Germany"`, `-l "Mumbai, Maharashtra, India"`, `-l "Remote"`, …). It is intended for **personal use only** — automated access is against LinkedIn's Terms of Service, so keep volume low. See `.agents/skills/linkedin-search/SKILL.md`. +For **country-agnostic** starting points outside Denmark, the repo ships two portal skills alongside the Danish demos: + +- **`linkedin-search`** — built on LinkedIn's public, unauthenticated `jobs-guest` endpoints. Field-agnostic, **zero runtime dependencies** (runs with just `bun`), and takes the search location as an explicit flag, so it works for any market out of the box (`-l "Berlin, Germany"`, `-l "Mumbai, Maharashtra, India"`, `-l "Remote"`, …). Intended for **personal use only** — automated access is against LinkedIn's Terms of Service, so keep volume low. See `.agents/skills/linkedin-search/SKILL.md`. +- **`freehire-search`** — queries the [freehire.dev](https://freehire.dev) aggregator's public REST API (JSON, no API key). Tech-focused (software, data, engineering, DevOps, remote), multi-market via facet flags (`--region`, `--country`, `--remote`), and **zero runtime dependencies**. Unlike the HTML-scraping Danish portals, results come back structured (skills, seniority, category). The backend is MIT-licensed and [self-hostable](https://github.com/strelov1/freehire) — point `FREEHIRE_API_URL` at your own instance if you prefer. See `.agents/skills/freehire-search/SKILL.md`. ### Salary benchmarking diff --git a/SETUP.md b/SETUP.md index deb2cc4..653f2a2 100644 --- a/SETUP.md +++ b/SETUP.md @@ -26,7 +26,7 @@ On Windows, `py --version` is often the most reliable check. If your system expo ### Bun (for job search tools) -The job portal CLIs (four Danish portals plus the country-agnostic LinkedIn tool) are written in TypeScript and run with Bun. +The job portal CLIs (four Danish portals plus the country-agnostic `linkedin-search` and `freehire-search` tools) are written in TypeScript and run with Bun. - macOS/Linux: @@ -122,7 +122,7 @@ Run these from the repository root. - PowerShell: ```powershell -$tools = @("jobbank-search", "jobdanmark-search", "jobindex-search", "jobnet-search", "linkedin-search") +$tools = @("jobbank-search", "jobdanmark-search", "jobindex-search", "jobnet-search", "linkedin-search", "freehire-search") foreach ($tool in $tools) { Set-Location ".agents/skills/$tool/cli" bun install @@ -132,12 +132,12 @@ foreach ($tool in $tools) { - Bash / zsh / Git Bash: ```bash -for tool in jobbank-search jobdanmark-search jobindex-search jobnet-search linkedin-search; do +for tool in jobbank-search jobdanmark-search jobindex-search jobnet-search linkedin-search freehire-search; do cd .agents/skills/$tool/cli && bun install && cd ../../../.. done ``` -For `linkedin-search` the install is optional: it has zero runtime dependencies and runs with plain `bun`; `bun install` only pulls TypeScript dev types. +For `linkedin-search` and `freehire-search` the install is optional: both have zero runtime dependencies and run with plain `bun`; `bun install` only pulls TypeScript dev types. If you're outside Denmark, you can generate an equivalent search skill for your local job board with `/add-portal` — it scaffolds the same CLI structure for any public portal and test-runs a live query before registering. See the "Job search tools" section in the README.