by he-yufeng
LLM-powered toolkit for skill analysis, AI interviews, resume scoring, and job structuring. Automates professional skill taxonomy and interview processes with adaptive difficulty.
# Add to your Claude Code skills
git clone https://github.com/he-yufeng/FindJobs-AgentGuides for using ai agents skills like FindJobs-Agent.
Last scanned: 5/30/2026
{
"issues": [],
"status": "PASSED",
"scannedAt": "2026-05-30T15:31:53.741Z",
"npmAuditRan": true,
"pipAuditRan": false
}See how FindJobs-Agent compares with popular alternatives.
FindJobs-Agent is an open-source ai agents skill for AI coding assistants such as Claude Code, Codex CLI, and ChatGPT, built by he-yufeng. LLM-powered toolkit for skill analysis, AI interviews, resume scoring, and job structuring. Automates professional skill taxonomy and interview processes with adaptive difficulty. It has 242 GitHub stars.
Yes. FindJobs-Agent passed SkillsLLM's automated security scan — a dependency vulnerability audit plus prompt-injection heuristics — with no high-severity issues. You can read the full report in the Security Report section on this page.
Clone the repository with "git clone https://github.com/he-yufeng/FindJobs-Agent" and add it to your Claude Code skills directory (see the Installation section above).
FindJobs-Agent is primarily written in Python. It is open-source under he-yufeng on GitHub, so you can review or fork the full source.
Yes. SkillsLLM lists many other AI Agents skills you can browse and compare side by side. Open the AI Agents category from the badge at the top of this page, or use the Related Skills and comparison links further down to weigh FindJobs-Agent against similar tools.
No comments yet. Be the first to share your thoughts!
30 days in the Featured rail · terms & refunds
⚠️ Third-Party Software Notice
This skill is third-party open-source software developed and hosted independently on GitHub. SkillsLLM is an informational directory and does not control or maintain the underlying repository.
Any security checks, ratings, or warnings displayed by SkillsLLM are automated and limited in scope. They do not constitute a security certification or guarantee that the software is safe, error-free, or free from malicious code, vulnerabilities, compromised dependencies, or prompt-injection risks.
Review the source code, permissions, dependencies, and configuration before installing or running any third-party skill. Use is at your own risk. To the maximum extent permitted by applicable law, SkillsLLM is not liable for losses arising from third-party software.
Automated security scan — not a certification.
English · 中文 · Demo · Quick Start · How It Works · Features
A full-stack job search assistant that crawls postings from major tech companies, analyzes them with LLMs, parses your resume, and runs AI mock interviews — so you can focus on preparing, not sifting through job boards.
No API key? No problem. Demo mode runs the whole app offline:
pip install -e .
FINDJOBS_DEMO=1 python -m findjobs.api_server # backend on :5000, seeds sample jobs on first run
cd FrontEnd && npm install && npm run dev # frontend on :5173
With FINDJOBS_DEMO=1, the server fills an empty jobs.db from data/sample_jobs.json (54 hand-written postings from the companies the crawlers target) and routes every LLM call through demo_llm.py, a deterministic stub that answers from the prompt content and never touches the network, even if a key is configured. Upload the bundled data/sample_resume.pdf on the resume page to walk the full loop: parsing, match scores, a 3-stage mock interview, and the tracking board. While the backend runs in demo mode, a small "Demo" badge shows in the navbar.
Both fixtures can be regenerated with python scripts/seed_demo_data.py and python scripts/make_sample_resume.py.
Four pieces wired into one flow: a crawler pulls postings from company career sites, an LLM reads each one for requirements and skills, your resume gets parsed and scored against them, and any posting can drive an AI mock interview straight off its job description. The React frontend ties it together, so you go from "what's out there" to "let me practice for this one" without leaving the app.

FINDJOBS_DEMO=1 to run the full app offline with seeded sample jobs, a bundled sample resume, and a deterministic stub LLM instead of a paid key.jobs.db; existing CSV data is migrated automatically on first run, with CSV/JSON as fallback. Uploaded resumes and mock-interview transcripts live in the same database, so restarting the API server no longer wipes them.FindJobs-Agent/
├── FrontEnd/ # React frontend
│ ├── src/
│ │ ├── components/ # Page components
│ │ │ ├── JobsPage.tsx # Job browsing
│ │ │ ├── ResumePage.tsx # Resume analysis
│ │ │ └── InterviewPage.tsx # AI interview
│ │ └── App.tsx
│ └── package.json
├── findjobs/ # The package: crawler, matcher, resume, interview, pipeline
│ ├── pipeline.py # Main pipeline; also the `findjobs` CLI entry
│ ├── job_agent.py # LLM job analysis agent
│ ├── api_server.py # Flask API server
│ ├── storage.py # SQLite store: jobs, applications, resumes, interviews (jobs.db)
│ ├── interview_agent.py # AI interview module
│ ├── resume_parser.py # Resume parser
│ └── ... # crawlers, scoring, LLM client, demo stub
├── data/ # Label library + taxonomy + demo fixtures
├── config/ # llm_config.json and deployment configs
├── docs/ # API reference and project notes
├── scripts/ # Helpers: demo seeding, sample resume generator, crawler smoke test
├── tests/ # pytest suite
├── pyproject.toml
└── requirements.txt
git clone https://github.com/he-yufeng/FindJobs-Agent.git
cd FindJobs-Agent
pip install -e .
Create an API_key.md file with your OpenAI API key:
sk-your-api-key-here
python -m findjobs.api_server
cd FrontEnd
npm install
npm run dev
Visit http://localhost:5173 in your browser.
findjobs chains crawl → analyze → score → serve. Run the whole thing, or a single stage:
findjobs # crawl + analyze + build site data
python -m findjobs.job_crawler_v2 -c tencent netease amazon -m 300 # crawl only (--list shows companies)
findjobs --analyze-only --max-jobs 50 # analyze only (for testing)
An optional aggregator source is available via freehire.me, an open IT job board whose public API needs no key. Each result already carries the full markdown JD and the employer's own ATS apply link, so there is no detail page to re-fetch. It stays off by default; flip it on with --freehire, or run it standalone:
findjobs --freehire --freehire-query "backend" # company crawlers + freehire
python -m findjobs.freehire_source -q "ml engineer" --skills python,pytorch --countries us,de -m 100
python -m findjobs.freehire_source --list-facets skills # live filter vocabulary (skill slugs, country codes)
Pluggable job sources. Crawlers, third-party APIs, and local JSON files all enter through one JobSource interface (findjobs/job_source.py): implement name + fetch() returning canonical job dicts, then register_source(...) — no pipeline edits. The pipeline walks the registry (company crawlers by default, freehire when enabled), dedupes across sources, and pipeline.step1_crawl_jobs(sources=[...]) accepts a full replacement list for custom feeds.
A third bundled source, Remotive, widens coverage to general remote jobs (their public API also needs no key). Unlike the aggregator adapters it is a direct JobSource with no subprocess: instantiate it yourself or swap it into the registry:
from findjobs.job_source import register_source
from findjobs.remotive_source import RemotiveSource
register_source(RemotiveSource(search="llm", category="software-dev", limit=100))
# or take the whole pipeline over with a custom list:
# pipeline.step1_crawl_jobs(sources=[RemotiveSource(limit=100)])
Filter vocabularies are read from /api/v1/jobs/facets at runtime instead of being hardcoded.
The crawler registry only lists adapters verified live (--list), all fetched through the public job APIs that each careers site serves to job seekers. No login, no key, no page scraping behind a wall.
Last full verification 2026-10-13 (python scripts/verify_crawlers_v2.py reruns it on demand): six targeted crawlers are live, plus the Remotive remote-jobs source (verified 2026-09-17):
| Source | Endpoint | Notes |
|---|---|---|
| Tencent (腾讯) | careers.tencent.com query API |
up to 400 per pull |
| ByteDance (字节跳动) | jobs.bytedance.com portal API |
moved to the current POST payload; the old GET form is gone |
| NetEase (网易) | public search API | social + campus |
| Amazon | amazon.jobs search API |
global, CN filter supported |
| DJI (大疆) | Moka ATS (apply.careers.dji.com) |
social; responses are AES-encrypted, decrypted locally (pycryptodome) |
| Ctrip (携程) | Moka ATS (app.mokahr.com) |
campus channel; adapter verified healthy, zero openings as of 2026-10 |
| Remotive | remotive.com/api/remote-jobs |
key-less remote-jobs API; full JD (HTML stripped to text) and apply links included |
data/latest_jobs.json holds the latest snapshot: 1,180 postings across these four (refreshed 2026-09-24), committed so the pipeline has real data to chew on without a fresh crawl. data/latest_enriched.jsonl is the same set after LLM analysis (degree, major requirement, scored skill tags, job family), so the site and the matcher work out of the box with zero API spend.
Skill tags only mean "the model found a genuine match in the technical label library": planning/design/operations jobs are never force-labeled, so an empty tag list is a legitimate result that reads as "non-technical role", not missing data.
Alibaba, Meituan and JD stay in the registry as Selenium adapters and want a local Chrome plus webdriver-manager. The other 2023-era adapters (Baidu, Kuaishou, Xiaomi, Bilibili, DiDi, Pinduoduo, Huawei, NIO, XPeng, Li Auto, OPPO, VIVO, SenseTime, MiHoYo, SHEIN, Shopee, KE, Yuanfudao, Zuoyebang, Zhilian, Lagou, Microsoft, Google) all failed the 2026-10-13 verification, mostly