jobfishing-ai

mcp
Security Audit
Pass
Health Pass
  • License — License: MIT
  • Description — Repository has a description
  • Active repo — Last push 0 days ago
  • Community trust — 25 GitHub stars
Code Pass
  • Code scan — Scanned 12 files during light audit, no dangerous patterns found
Permissions Pass
  • Permissions — No dangerous permissions requested

No AI report is available for this listing yet.

SUMMARY

Open-source skills and MCP tools that let Claude Code or Codex find, score and apply to jobs, with a local dashboard. By jobfishing (jobfish.ing), formerly JobMatchFlow.

README.md

jobfishing AI Skills

jobfishing (jobfish.ing, formerly JobMatchFlow) is a free AI job search and CV matching service for Switzerland, Luxembourg, Germany and the Netherlands. This repository is its open-source part: tools that let your own AI agent run the search for any country. (The name is a pun on fishing for jobs; it has nothing to do with jobs in the fishing industry. More: jobfish.ing/about.)

Open-source Claude Code and Codex tools that let an AI agent run your job search: find jobs, score them against your CV and profile, recommend the best, and, with a jobfishing account, apply through your own visible Chrome, tailor resumes and cover letters, track outcomes, and prep you for interviews.

Two ways in, and they work together:

  • No account, fully local. Crawl jobs for any market (Hong Kong, UK, US...) into a SQLite database on your machine (listing first, then the text of the jobs worth it, gently, since there is no proxy), have your agent score many at once, and get ranked recommendations on a small local dashboard. Nothing leaves your computer except the job searches.
  • With a jobfishing account. jobfishing already crawls Switzerland, Luxembourg, Frankfurt, Munich, Stuttgart, Amsterdam and Rotterdam, scores them for you, and keeps your profile, resumes, saved answers and application status. Your agent reads and writes that data only through the bundled MCP server, and only touches Gmail, Outlook Web and job boards through your own already-logged-in Chrome, never a hidden or headless browser. Your local jobs and the jobfishing list are ranked together on one scale.

How to use it

Everything below is a sentence you paste into Codex or Claude Code. You never run jobfishing yourself.

What it can do

You want to... Say something like Needs a jobfishing account? One-time setup
Find jobs in any market and rank them "Use $jobfishing-rank to find data engineer jobs in Hong Kong from the last 3 days" No None
See and manage them on a page "Open the jobfishing dashboard" No None
Score against your full profile (asked for automatically when you are signed in) Yes Fill in your profile in the app
Keep the best ones in the app "Save the top 10 to my jobfishing account" Yes Sign in once
Tailor a CV and cover letter "Use $jobfishing-tailor for the Acme data engineer job" Yes Install LaTeX once ($jobfishing-materials-setup does it with you)
A quick cover letter only "Use $jobfishing-cover-letter-fast for the Acme job" Yes None
Apply, and read your inbox "Use $jobfishing-apply to go through my Saved jobs" Yes Your agent's Chrome connection (below)
See what is working "Use $jobfishing-insights on my applications" Yes None
Prepare for an interview "Use $jobfishing-interview for my Acme interview" Yes None

A first run, step by step

Paste these in order, one message each.

  1. Crawl. "Use $jobfishing-rank. Crawl data engineer, data platform engineer and analytics engineer jobs in Hong Kong, posted in the last 3 days." It fetches the listings in seconds. LinkedIn jobs arrive as titles only; Indeed jobs arrive complete.
  2. Fetch the job texts. "From the titles, pick the LinkedIn jobs worth scoring (skip irrelevant ones and duplicates) and fetch their text." It fetches a few at a time on purpose. If LinkedIn starts limiting your connection, it stops and tells you to wait a few minutes. jobfishing's own job list (Switzerland, Luxembourg, Frankfurt, Munich, Stuttgart, Amsterdam, Rotterdam) is not limited that way.
  3. Score. "Score the jobs that have their text. Use my jobfishing profile if I'm signed in, otherwise my CV at C:\path\to\cv.pdf." Many jobs are scored at once. The profile jobfishing keeps is more complete than a single CV; a CV works too.
  4. Look at the results. "Open the jobfishing dashboard." The Recommended tab ranks your local jobs and, when you are signed in, your jobfishing jobs, on one scale. Click a job for the score breakdown and the posting.
  5. Keep the good ones. In the dashboard click Save to jobfishing..., tick the jobs, and paste the prompt it gives you into your agent. They appear in your jobfishing Saved list with their scores, private to you.
  6. Start the next batch clean. When you have finished with this batch, click Clear all jobs in the dashboard. It asks first. The jobs disappear from the page; the rows stay in the database file but stay hidden. Then go back to step 1.
  7. Go from found to applied (needs a jobfishing account): "Use $jobfishing-tailor for the top job in my Saved list", then "Use $jobfishing-apply to apply to my Saved jobs" and "Use $jobfishing-apply to check my inbox and update my application statuses".

The dashboard also shows ready-made prompts at the right moments: one when jobs are waiting to be scored, one after a crawl when some jobs have only a title, and one for saving.

What you need to set up, and what you do not

You do not follow an install guide, unzip anything, or install Python. The one-line install does everything, and uv fetches whatever the tools need.

  • LaTeX, only for tailored CVs. Say "Use $jobfishing-materials-setup". It checks your machine, and if there is no LaTeX it walks you through installing one (TinyTeX or MiKTeX) and tests it with the bundled templates. Do it once per computer. Cover letters from $jobfishing-cover-letter-fast are Word files and need nothing.
  • A Chrome connection, only for applying and reading your inbox. In Codex use the ChatGPT Chrome integration; in Claude Code run /chrome and approve Claude in Chrome. jobfishing drives your own, visible, already-logged-in Chrome and never a hidden browser.
  • Your profile in the app, only to improve scores. Without one, scoring uses your CV.
  • Your local jobs live in ~/.jobfishing/ (on Windows %USERPROFILE%\.jobfishing\).

Which guide do I need?

For most people the answer is none. If the one-line install finished and $jobfishing-rank answers, you have everything in this README and nothing to set up twice.

The two long guides are a companion for the parts that need more hand-holding. Open the one for your agent: Claude Code or Codex.

Your situation Open Section
The one-line install worked and you only find, score, save and recommend jobs Nothing
You want to apply through your own Chrome or have it read your inbox, for the first time The guide Connecting to Chrome, the day-to-day project, the first configuration check and the first trial submission (sections 4 to 8)
You want to turn on direct submission and run application rounds every day The guide Sections 9 to 14, then the daily routine in section 16
You want tailored CVs and already have LaTeX, or want it somewhere specific The guide Section 7 (Optional: shared LaTeX environment). For a normal install just say $jobfishing-materials-setup
The one-line install cannot run on your computer (locked-down machine, no way to run a script from the internet), or you prefer to install it as a plugin The guide Section 3 (Manual installation)
Something is not working: a skill is not recognized, the tools will not start, Chrome will not connect, an upload fails The guide Section 15 (Frequently asked questions)
You want to see every rule the apply skill follows (filenames, cache rules, email order, end-of-round summary) The guide Sections 10 to 14 and the quick reference in section 17

Tip: you do not have to read a guide front to back. Find your row, open that section only.

Skills

Skill What it does
jobfishing-setup Gets the tools running: checks for uv (which brings its own Python), installs it with your permission, and verifies the connection.
jobfishing-rank Interviews you about job-search preferences, then finds and ranks jobs: from your jobfishing list, from a local crawl of any market (no account needed, many jobs scored at once), or both on one scale. Shortlists qualified jobfishing matches into Saved when you ask.
jobfishing-apply Runs application sessions: setup checks, inbox sync, ATS/email submission, and reconciling outcomes — using jobfishing's MCP data and your visible Chrome.
jobfishing-apply-fast Leaner sibling of jobfishing-apply for a quick one-job or small-batch pass: picks one resume for the whole pulse, leans on ATS resume-parse autofill, drafts and self-reviews the cover letter inline instead of dispatching a reviewer, and still stops before the final submit.
jobfishing-tailor Produces a truthful, tailored CV and cover letter for one job, with multi-stage review, local LaTeX rendering, verification, and upload back to jobfishing.
jobfishing-cover-letter-fast Just need a Cover Letter, not a full application? Generates one truthful, job-specific Cover Letter as a local Word file in one fast pass, and uploads it to jobfishing only on request.
jobfishing-materials-setup Checks, installs, or repairs the shared local LaTeX toolchain that tailored-materials rendering depends on.
jobfishing-insights Read-only analysis of your application funnel, stage timing, targeting patterns, and outcomes from existing jobfishing data.
jobfishing-interview Prepares you for an interview from the exact snapshot jobfishing submitted — the real resume, cover letter, and notes the employer received.

Each skill is scoped narrowly on purpose: the agent should reach for exactly one of these when asked, not improvise a workflow of its own.

Guides

Full first-connection and day-to-day usage walkthroughs:

Install

One line, in a terminal. It sets jobfishing up for Claude Code and Codex, whichever you have, and needs no Python, no pip and no git.

macOS / Linux

curl -fsSL https://jobfish.ing/install | sh

Windows (PowerShell)

irm https://jobfish.ing/install.ps1 | iex

Then restart your agent and say: find me jobs. Finding and ranking jobs needs no jobfishing account. Please read the Disclaimer and data section first: it is short, and it says what runs on your computer and what leaves it.

What the script does, and nothing else: installs uv if it is missing (uv brings its own Python), downloads this repo's plugins/jobfishing, and then runs jobfishing install, which

  • registers the MCP server with Claude Code (claude mcp add --scope user), and copies the skills to ~/.claude/skills;
  • registers the MCP server with Codex (a [mcp_servers.jobfishing] table in ~/.codex/config.toml), and copies the skills to ~/.agents/skills.

It only configures the agents it finds on the machine; if you install an agent later, run the line again (it is safe to repeat). Read the scripts first if you like: install.sh, install.ps1.

Updates are automatic. Each time your agent starts jobfishing, uv checks GitHub for a newer version and fetches it, and the skills copied by the installer are refreshed to match. A new version is therefore live the next time you restart your agent (once or twice at most). Nothing to run.

To force an update now, or to uninstall:

uvx --refresh --from "https://github.com/leoqingyu/jobfishing-ai/archive/refs/heads/main.zip#subdirectory=plugins/jobfishing" jobfishing install     # update now
uvx --from "https://github.com/leoqingyu/jobfishing-ai/archive/refs/heads/main.zip#subdirectory=plugins/jobfishing" jobfishing uninstall            # remove

Your local jobs and scores live in ~/.jobfishing/; delete that folder to clear them.

Alternative: install as a plugin

This repo is also a Claude Code plugin marketplace and a Codex plugin source, rooted at plugins/jobfishing. You need uv installed first.

Claude Code

/plugin marketplace add leoqingyu/jobfishing-ai
/plugin install jobfishing

Codex

Point Codex at plugins/jobfishing per its plugin-source instructions; the manifest lives at plugins/jobfishing/.codex-plugin/plugin.json.

Use one method or the other, not both, or you will see two copies of the skills. Both share one local MCP server and one LaTeX environment for tailored materials, so jobfishing-materials-setup only needs to run once per machine.

Disclaimer and data

jobfishing is open source (MIT) and comes as is, without warranty of any kind. This section says plainly what it does on your computer and what leaves it. It is not legal advice.

Crawling is done from your own computer and is your responsibility.

  • crawl_jobs and fetch_descriptions send ordinary web requests to LinkedIn and Indeed from your connection, with no proxy. Those sites' terms restrict automated access, and they may limit or block your connection. You are responsible for how you use this and for following the terms of any site you access. Keep searches modest: a few titles and places per run, not hundreds. If LinkedIn starts limiting you, stop and wait; the tools stop on their own and say so.
  • jobfishing's own job list is crawled by jobfishing with its own infrastructure; using it does not run anything from your connection.

Scores and recommendations are a rough guide, not advice.

  • Local scores come from judgments your own AI agent makes, combined by a fixed formula. Different models judge differently, and a posting may be misread. Use them to sort, then read the posting yourself. Nothing here predicts whether you will be hired.
  • Everything the agent writes for you (tailored CVs, cover letters, form answers) is generated. Read it before it is sent. You are responsible for what you submit and for its being true.

Applying and reading your inbox are your decisions.

  • The application skills drive your own, visible Chrome, with your logins. Review what they do, especially before a final submit, and for any site or mailbox you would not want automated.

What stays on your computer, and what leaves it

  • Crawled jobs and scores are stored locally in ~/.jobfishing/ (on Windows %USERPROFILE%\.jobfishing\). The dashboard runs only on your machine (127.0.0.1). There is no telemetry or usage tracking in the local tools.
  • The job texts and CV or profile your agent reads go to whichever AI provider your agent uses (OpenAI, Anthropic, ...), under that provider's terms. jobfishing does not control that.
  • Without a jobfishing account, the only other network traffic is your searches to LinkedIn and Indeed, and fetching updates (below).
  • Signed in to jobfishing: the tools talk to app.jobfish.ing. They read your profile, jobs, resumes and application tracking, and write what you ask them to: saved jobs with their scores, cover letters and resumes, application status. A job you save from a local crawl is private to your account. One sign-in covers both the main site and, for users who have it, the VIP site (use_site("vip"); the default is the main site). The sign-in token is kept in ~/.jobfishing/agent_token, readable only by you on macOS and Linux. You can revoke it from the app.
  • Imported jobs are scored from the extraction and judgments your agent supplies; jobfishing does not run a model on them.

The tools update themselves. When your agent starts them, uv checks this repository for a newer version and fetches it, so the code that runs on your computer is whatever is on the main branch at that moment. Read the code if you want to know what it does; it is all here. To stop using it, run the uninstall command above and delete ~/.jobfishing/.

Questions or concerns: [email protected].

Contributing

This plugin is young and the skills are opinionated first drafts. Issues and pull requests are welcome — better prompts, edge cases the skills miss, additional guides, or support for other hosts.

License

MIT — see LICENSE.

Reviews (0)

No results found