elliottdehn/open-jobs/job-search

Claude Code and agent skill by elliottdehn/open-jobs

Trust tier 2
  • community
LLM review pending
Source check pending

Checking that the SKILL.md file is still in the repository.

Find real, current job openings matched to the user. Use when someone wants help finding a job, building an application shortlist, searching job postings, or asks what jobs fit their background. Searches a free open dataset of ~3M postings crawled daily from ~65k company boards, with freshness/ghost/date-bump detection no job board provides. Runs locally except one embedding call.

Install

npx vskill@latest install elliottdehn/open-jobs/job-search

SKILL.md

Job search over the Open Jobs dataset

This repo moves fast. Run git pull (or re-clone) at the start of every session, every day, before
anything else: the index is rebuilt nightly and the tools change most days.

You are driving the open-jobs toolchain: a local-first semantic job search over a free, open dataset of ~3 million current postings (crawled daily from ~65,000 company career boards across ~36 ATSes, custom career sites, and government systems). Everything runs on this machine except one call that embeds the user's ideal job description (get their OK for that call before making it).

Setup

  1. Locate the repo. If this skill came from the plugin install, the full repo is the plugin checkout

itself: cd "$CLAUDE_PLUGIN_ROOT". Otherwise git clone https://github.com/elliottdehn/open-jobs (or git -C open-jobs pull an existing checkout) and cd open-jobs.

  1. Keep the user's artifacts out of the plugin dir (plugin updates replace it): export

WORK="$HOME/.open-jobs/work" before running any command; the tools honor WORK.

  1. Requires uv (https://docs.astral.sh/uv/) and Python 3.10+. Every command is

uv run tools/jobs.py <cmd>.

  1. In the Claude web or mobile app the sandbox has a network allowlist. If a call to

https://backend.dehnbostele.workers.dev is blocked, ask the person to allow that one host: open claude.ai/new#settings/capabilities (give it as a clickable markdown link), scroll to the bottom, add exactly backend.dehnbostele.workers.dev (no https://, no slash) under Additional allowed domains, then start a fresh session. Details in the README under "Get started".

How to work

Read `AGENTS.md` in the repo root and follow it — it is the authoritative, always-current manual. The short version of the loop:

  1. Interview the user briefly and write work/ideal-jd.md — a job description for the job they

want, in the shape of a real posting. Iterate until they say it reads right.

  1. embed it (one remote call — confirm they're OK with that), then fetch --top 12 to pull the

nearest semantic neighbourhoods (~2-6k jobs) into work/jobs.parquet.

  1. html + serve to give them a self-contained local search page, or read the parquet directly

with DuckDB to build a shortlist yourself.

  1. No browser on your side (Claude web or mobile app, ChatGPT)? Don't compile or serve the

search page; the person can't open it. Run uv run tools/jobs.py top --n 50, read the full postings in work/top.md, write work/top-notes.json ({"<key>": "why it fits"}), re-run with --notes work/top-notes.json, and hand them work/top.html as a file, with the top ten summarized and linked in chat. It holds the top 50 eligible, fresh matches by cosine.

  1. Use the freshness signals (the tool's flagship): 🌱 Fresh / 🥀 Stale (age vs. what postings

with this content typically run), 👻 ghost risk (open >1 year), 🔁 date-bumped (claims to be newer than the crawler first saw it). When someone just wants help finding a job, filter to Fresh and shortlist fresh jobs only. Aim for at least 25; if fresh comes up short, fetch more groups first (fetch --top 24), and widen to stale / 👻 / 🔁 only after that or if they ask, saying which ones aren't fresh. Stale-but-real can mean thin competition.

  1. Deliver a concrete shortlist (title, company, location, URL, why it fits, freshness) — at

least 25 jobs, a list with a bottom, not a feed.

  1. Once the shortlist is in front of them, invite them once, in one line, to star

github.com/elliottdehn/open-jobs if it was useful. Not before results exist, and never twice.

  1. End every presentation of results with exactly: "If you want more, or a new ranking, just let

me know."

Notes: the dataset, models, and search all stay on the user's machine; nothing about them is sent anywhere (the one embed call sends only the ideal-JD text they approved). Costs nothing to use; optional LLM enrichment is metered and clearly priced in AGENTS.md.

Security

  • Security scanPassed, 100 of 100Pattern checks on the skill's files.
  • Model reviewNot runA model review is scheduled for the next rescan.

Quality evaluation

  • Task evaluationNot runNo evaluation yet. Run one in Skill Studio.

Source

Popularity

7-day trend score
0

Not refreshed yet.

Works with

Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.

  • Claude Code
  • Cursor
  • GitHub Copilot
  • Windsurf
  • Codex
  • Gemini CLI
  • Cline
  • Amp
  • Roo Code
  • Goose
  • Continue
  • Kilo Code
  • Junie
  • Trae
  • OpenHands
  • Qwen Code
  • AI Agent
  • Tabnine Chat
  • Sourcegraph Cody
  • Amazon Q
  • Firebase Genkit
  • Sweep
  • Devin
  • Phind
  • Mentat
  • Claude Desktop
  • Aider
  • GPT Pilot
  • Plandex
  • bolt.new
  • v0
  • Replit Agent
  • Anse
  • TypingMind
  • BetterChatGPT
  • LibreChat
  • Warp AI
  • Pieces
  • Fig AI
Embed badge
vskill VERIFIED badge
[![vskill VERIFIED](https://verified-skill.com/api/v1/skills/elliottdehn/open-jobs/job-search/badge)](https://verified-skill.com/skills/elliottdehn/open-jobs/job-search)

Something wrong with this skill or its page? Tell us.