Jobnet-Search: Danish Official Job Portal Skill
Query the Jobnet.dk public API directly to search Denmark's official government job portal — 21,000+ live listings, no account or key required.
Read-only access to a public API with no credentials, no writes, no external side effects; ships disabled by default (enabled: false, opt-in); allowed-tools scoped to a single CLI invocation; detail explicitly passes incrementViews=false to avoid polluting view counts; SECURITY.md states the threat model. Deducted for: a spoofed Mozilla User-Agent, unverified publisher identity, no independent isolation/rollback mechanism, and runtime trust in an external API's data flow.
Code is self-consistent: zod validation, an UNKNOWN_FLAG guard against silently discarded filters, 1900-01-01 sentinel-date normalization, exponential-backoff retries, JSON stderr error codes, and a 404 fallback for external ads. Deducted for: no committed test files visible for this CLI (CI runs bun test only when present), and static review cannot verify key-path reproduction, so capped below the executed anchor of 10+.
SKILL.md declares an extensive trigger-phrase list, clear scenarios (Danish job search), and boundaries (English suggestions may return empty, do not combine region and postal-code, detail 404 fallback) — high semantic trigger precision. Deducted for: full dependence on overseas jobnet.dk reachability with no statement on mainland-China network availability, and a deliberately narrow Danish-market scope.
Well-layered documentation (progressive disclosure in SKILL.md plus a detailed CLI README with endpoints, response shapes, error handling), MIT license, versioning, and known-limitation notes all present; maintenance path (SECURITY.md, CI) visible. Deducted for: no changelog, version mismatch (SKILL.md 1.0.0 vs cli.ts internal 0.1.0), and no committed test suite evidencing maintenance quality.
The search→detail workflow, three output formats, worked examples, and pagination guidance plausibly cover real job-search retrieval needs and beat manually browsing the portal. Deducted for: static review only — no execution evidence of directly usable output, and the 21,000+ jobs claim is unverified; capped at 7 per static calibration.
Response shapes, endpoints, and error codes are documented and mutually consistent with the code; CI includes typechecks and security guards. Deducted for: no committed tests for this skill, no third-party execution evidence, and documented sample responses being author claims only; capped below 5 per static calibration.
- The skill depends entirely on overseas reachability of jobnet.dk with no stated mainland-China network availability — verify connectivity before use.
- The CLI sends a spoofed Mozilla User-Agent to a government portal API, which may conflict with the portal's usage expectations; assess compliance risk yourself.
- The skill ships disabled (opt-in) and targets the Danish job market only; English terms may return empty suggestions.
- Static review executed nothing: no committed test suite was seen for the jobnet-search CLI, so key-path reliability is independently unverified.
- SKILL.md version (1.0.0) and the internal cli.ts version (0.1.0) disagree; treat the actual code as authoritative when updating.
What does this skill do, and when should you use it?
One of nine skills bundled in the ai-job-search repository, this skill connects to Jobnet.dk, Denmark's official government job portal operated by STAR (Styrelsen for Arbejdsmarked og Rekruttering). It runs a Bun-based CLI against a public REST API, supporting filters by keyword, region, postal-code radius, full/part time, and permanent/temporary duration, plus precise filtering via ESCO occupation categories. The skill ships disabled (opt-in) and targets the Danish employment market. CV tailoring, cover letters, and interview prep belong to sibling skills in the repo and are not part of this one. MIT licensed.
Runs bun run .agents/skills/jobnet-search/cli/src/cli.ts against the public jobnet.dk/bff REST API (automatically adding the required x-csrf: 1 header). Four subcommands: search filters listings by keyword, region, postal-code radius, work hours, duration, and occupation categories; detail <jobAdId> returns the full job description, contact persons, application deadline, and direct application URL; occupations discovers ESCO occupation identifiers; suggestions returns Danish job-title autocomplete. Output in , table, or plain format; errors go to stderr as JSON with exit code 1.
- A job seeker in Denmark searching official listings by keyword, such as sygeplejerske (nurse) or ingenioer (engineer)
- Location-bound applicants finding jobs near a postal code within a radius, e.g. 30 km around Aarhus 8000
- Candidates targeting public sector, healthcare, IT, or education roles who need precise ESCO occupation filtering
- Applicants facing deadlines who sort by --order ApplicationDate to see earliest deadlines first
- Developers building automated job pipelines who pass jobAdIds between commands using output
What are this skill's strengths and limitations?
- Credential-free access to live data from Denmark's official government job portal, ~21,000+ active jobs at any time
- Rich filtering: region, postal-code radius, work hours, employment duration, ESCO occupation categories, multiple sort orders
- No API key needed; the CSRF header is handled automatically
- Selectable /table/plain output formats suit both human review and programmatic pipelines
- Denmark-only; no direct value for other markets (the repo's /add-portal can generate skills for other portals, but that is not part of this skill)
- Disabled by default; requires manual enabling or /setup
- suggestions is tuned for Danish job titles — English queries may return empty results
- search results omit the HTML job description; a separate detail call is required
- Relies on an unofficial public API (jobnet.dk/bff) that could change; the source does not mention any test suite coverage
How do you install this skill?
The skill lives in the ai-job-search repo at .agents/skills/jobnet-search/. Clone the repo: gh repo fork MadsLorentzen/ai-job-search --clone, then install CLI dependencies: cd .agents/skills/jobnet-search/cli && bun install. Prerequisites: Claude Code (or another compatible agent tool) and Bun. Note the skill ships with enabled: false (Danish demo portal, opt-in); enable it via the repo's /setup command (when your market is Denmark) or by setting enabled to true in the frontmatter yourself.
How do you use this skill?
In Claude Code, mention any Danish job-search topic to trigger it (trigger phrases include jobnet, jobnet.dk, danish jobs, ledige stilling, and many more in English and Danish), or run the CLI directly. Examples: Copenhagen-area jobs with bun run .agents/skills/jobnet-search/cli/src/cli.ts search --region HovedstadenOgBornholm --format table; add --search-string "sygeplejerske" --work-hours FullTime --duration Permanent for permanent full-time nurse roles. Recommended workflow: discover the right Danish term or ESCO ID with suggestions/occupations first, run search to get jobAdIds, then detail <jobAdId> for the full posting. Do not combine --region and --postal-code in one query.
How does this skill compare with similar options?
Within the same repo, sibling Danish portal skills include jobindex-search (Jobindex.dk), jobbank-search (Akademikernes Jobbank), and jobdanmark-search (Jobdanmark.dk), plus the cross-border linkedin-search and freehire-search. For Danish public-sector jobs Jobnet is the official source; for international or tech roles, linkedin-search or freehire-search fit better.