Jobbank Search Skill
Search live Danish job listings from Akademikernes Jobbank locally, with keyword and multi-dimensional filtering for academic and highly educated positions in Denmark.
Positive: least privilege (allowed-tools only runs this skill's own CLI via bun), no credentials, no sensitive-data handling, data flow (jobbank.dk RSS/HTML) plus Cloudflare blocking and WebSearch fallback are disclosed; structured errors on stderr. Deducted: browser User-Agent spoofing of automated requests (honestly disclosed but still bot-detection circumvention), no per-request user confirmation, rollback/isolation rests on the host framework rather than the skill.
Positive: high self-consistency — SKILL.md, README and source agree; the error contract has offline contract tests and flag-validation tests (including regressions for a historically silent flag-drop), and CI genuinely runs typecheck and bun test. Deducted: tests cover only error paths, no mock tests for the search/detail main paths; no protection against RSS description format drift or HTML title regex breakage; real-world operability unverifiable statically, so capped at 10.
Positive: triggers, inputs, filter code tables, output formats and non-fit boundaries (RSS 100-item cap, region-code locations) are all explicit; semantic trigger precision is good. Deducted: the trigger-phrase list is overly broad (generic terms like studiejob or freelance job may false-trigger); Danish market only; no Chinese support (consistent with its Danish-portal scope, not a hard flaw); mainland-China reachability unstated.
Positive: well-layered docs (SKILL.md → README → code tables → implementation notes), MIT license, version 1.0.0, install steps given. Deducted: no changelog, maintenance responsibility visible only at repo level, publisher unverified; path inconsistency — SKILL.md cites skills/jobbank-search/cli/README.md while the file lives under .agents/skills/; pinned @bunli/core 0.9.1 is a young dependency with uncertain ecosystem maturity.
Positive: JSON/table/plain output shapes are explicit, field tables complete, examples plentiful; meta.total and deadline normalization add marginal value over manual browsing. Deducted: static review cannot verify live fetching; the 100-item RSS hard cap with no pagination limits core value; meta.total relies on a fragile HTML title regex. Calibration caps effectiveness at 7; evidence is limited, so 6.
Positive: auditable primary material — source, code tables and parsing rules all public; tests and a real CI workflow exist and cover this CLI. Deducted: tests do not cover the network key paths of search/detail (CI explicitly excludes live smoke tests), no independent third-party execution evidence, and response examples cannot be statically confirmed, hence 4, not above 5.
- Static review only; no code was executed, and the live fetch behavior of search/detail was not independently reproduced.
- The CLI spoofs a browser User-Agent to get past Cloudflare; the portal may block it and this may conflict with the portal's terms of use — verify compliance yourself.
- RSS returns at most 100 items with no pagination; meta.total depends on a fragile HTML title regex that may break if the portal changes.
- Denmark-focused, documented only in English/Danish; mainland-China reachability of jobbank.dk is unverified.
- SKILL.md cites a README path (skills/...) that differs from the actual location (.agents/skills/...); use the real path.
- @bunli/core is pinned at 0.9.1, a young dependency; lock it and review transitive dependencies.
What does this skill do, and when should you use it?
This is a Danish-market job search skill inside the ai-job-search repository, located at .agents/skills/jobbank-search/. It searches Akademikernes Jobbank (jobbank.dk) via the RSS feed (max 100 results per query) and fetches full job details by parsing the embedded Schema.org JobPosting JSON-LD on job pages. Filters cover keyword, job type, region, work function, industry, education, remote status, suitability, company, and posting date. The skill ships disabled (opt-in) since it is a Danish demo portal, so it makes sense mainly if your market is Denmark; on Cloudflare blocks it falls back to WebSearch. The parent repo is MIT-licensed and meant to be forked and self-owned.
Runs a Bun CLI with two commands: search queries the RSS feed with repeatable flags --key, --type (full-time, graduate/trainee, Ph.d./postdoc, part-time, etc.), --location (region codes like Storkøbenhavn, Østjylland), --work-area (IT, Data & Analyse...), --industry, --education, --remote, --suitable-for, --company, --since, --limit, and outputs /table/plain; meta.total reports the true count. detail <id> fetches the job page and extracts the JSON-LD JobPosting block for the full description, deadline, and company info. Errors go to stderr as JSON with exit code 1. If jobbank.dk blocks automated requests with Cloudflare protection, the skill reports the portal as unavailable and uses WebSearch as a fallback instead of retrying.
- A highly educated candidate job-hunting in Denmark who wants keyword- and region-based search of academic or professional roles on jobbank.dk
- New graduates looking for graduate/trainee positions
- PhD holders or postdocs scanning Danish research-sector Ph.d. and postdoc openings
- Remote workers filtering fully or partially remote Danish IT and data-analysis roles
- A candidate checking what positions a specific company currently has open on jobbank.dk
- Internationally backgrounded applicants browsing roles flagged as suitable for international candidates
What are this skill's strengths and limitations?
- MIT-licensed and fork-ownable; data comes from jobbank.dk's public RSS feed and pages
- Rich, mostly repeatable filter flags: region codes, industry codes, education fields, remote status, posting date
- Structured output (/table/plain) with meta.total preserving the true count for programmatic use
- Explicit degradation policy for Cloudflare blocks: report unavailable and fall back to WebSearch rather than retrying
- Denmark-only and single-portal (jobbank.dk); other markets need the repo's /add-portal generator or a sibling skill
- No RSS pagination; capped at 100 results per request
- Useless whenever Cloudflare blocks automated access — the only path then is generic web search
- Locations use numeric region codes rather than city names, requiring the README lookup table
How do you install this skill?
1) Fork and clone: gh repo fork MadsLorentzen/ai-job-search --clone. 2) Install CLI dependencies: cd .agents/skills/jobbank-search/cli && bun install. 3) The skill ships with enabled: false (Danish demo portal, opt-in); /setup enables it when your market is Denmark, or set enabled to true in SKILL.md yourself. Prerequisites: Claude Code CLI and Bun (the README also lists Python 3.10+ and LaTeX, but those serve other parts of the repo).
How do you use this skill?
In Claude Code, mention triggers like jobbank or jobs in Denmark. Search example: bun run .agents/skills/jobbank-search/cli/src/cli.ts search --key "data scientist" --location 2 --format table. Detail example: ... detail 1234567 --format plain. Recommended flow: search first to get job IDs, then detail for the full description. Filter codes are documented in skills/jobbank-search/cli/README.md. Note the RSS cap of 100 results per query with no pagination.
How does this skill compare with similar options?
The same repository ships sibling Danish portal skills (Jobindex, Jobnet, Jobdanmark) plus country-agnostic linkedin-search and freehire-search; this skill targets Akademikernes Jobbank specifically. For markets outside Denmark, the README points to /add-portal to scaffold an equivalent skill for your local job board.