AI-powered job search assistant with RAG-based resume-JD matching, automated application pipeline, and status tracking. Use when the user wants to search for...
---
name: ai-job-hunter-pro
description: AI-powered job search assistant with RAG-based resume-JD matching, automated application pipeline, and status tracking. Use when the user wants to search for jobs matching their resume, auto-apply to positions, track application status, generate tailored cover letters, or analyze their job search funnel. Trigger phrases include "find jobs for me", "match my resume to jobs", "auto-apply", "track my applications", "job search report", "optimize my resume for this job".
metadata:
openclaw:
emoji: "🎯"
requires:
bins: ["python3"]
---
# AI Job Hunter Pro
Intelligent job search assistant with RAG-based semantic matching, automated applications, and data-driven tracking.
## Setup (first-time only)
Run the setup script to install dependencies and initialize the vector database:
```bash
cd {SKILL_DIR}
pip install -r scripts/requirements.txt
python3 scripts/setup_rag.py --init
```
Then create your profile:
```bash
cp assets/profile_template.json ~/job_profile.json
# Edit ~/job_profile.json with your info
```
Import your resume (PDF or DOCX):
```bash
python3 scripts/rag_engine.py --import-resume ~/path/to/resume.pdf
```
## Core Workflows
### Workflow 1: Smart Job Search (RAG Matching)
When user says "find jobs for me" or "match my resume":
1. Load user profile from `~/job_profile.json`
2. Run RAG matching engine:
```bash
python3 {SKILL_DIR}/scripts/rag_engine.py \
--mode search \
--platforms linkedin,boss \
--min-score 0.75 \
--max-results 20
```
3. Present results sorted by match score
4. For each job, show: title, company, match score, top matching skills, missing skills
5. Ask user which jobs to apply to, or auto-apply if configured
### Workflow 2: Auto-Apply Pipeline
When user says "apply to these jobs" or "auto-apply":
1. For each selected job:
```bash
python3 {SKILL_DIR}/scripts/apply_pipeline.py \
--job-id <id> \
--mode dry-run \
--generate-cover-letter \
--optimize-ats
```
2. In dry-run mode: show generated cover letter and ATS-optimized resume highlights for review
3. After user confirms, switch to `--mode submit`
4. Log result to tracker database
### Workflow 3: Application Tracking
When user says "track my applications" or "job search report":
```bash
python3 {SKILL_DIR}/scripts/tracker.py --report daily
```
Status flow: Discovered → Applied → Screening → Interview → Offer / Rejected
### Workflow 4: Feedback Loop
When user says "I like this job" or "not interested":
```bash
python3 {SKILL_DIR}/scripts/rag_engine.py \
--mode feedback \
--job-id <id> \
--signal like|dislike
```
This adjusts the RAG query vectors to improve future recommendations.
## Rules
- Always start in dry-run mode. Never submit applications without explicit user confirmation.
- Respect platform rate limits: max 20 applications per day across all platforms.
- Never misrepresent the user's qualifications in cover letters or applications.
- Store all data locally. Never send resume data to external services other than the job platforms themselves.
- When a platform returns an error or blocks access, report it clearly and suggest manual fallback.
- Always show the match score and reasoning before applying.
## Configuration
User config lives at `~/job_profile.json`. Skill config in OpenClaw:
```json
{
"skills": {
"ai-job-hunter-pro": {
"enabled": true,
"profile_path": "~/job_profile.json",
"default_platforms": ["linkedin", "boss"],
"max_daily_applications": 20,
"min_match_score": 0.75,
"require_confirmation": true,
"dry_run": true
}
}
}
```
don't have the plugin yet? install it then click "run inline in claude" again.
added explicit inputs with API/env var guidance, expanded procedure steps with detailed input/output contracts, formalized decision points for auth failures/rate limits/edge cases, and strengthened output contract with file locations and data schema.
intelligent job search assistant with RAG-based semantic matching, automated applications, and data-driven tracking.
use this skill when you want to search for jobs matching your resume, auto-apply to positions, track application status, generate tailored cover letters, or analyze your job search funnel. the skill combines semantic resume-to-job matching with an automated application pipeline and application tracking. trigger it with phrases like "find jobs for me", "match my resume to jobs", "auto-apply", "track my applications", "job search report", or "optimize my resume for this job".
local files and config:
~/job_profile.json (contains target roles, skills, location, salary expectations, platforms to search)external connections:
LINKEDIN_API_KEY and LINKEDIN_API_SECRET env vars. scopes: r_liteprofile, r_emailaddress, r_basicprofile. rate limit: 100 requests/hour per app.{PLATFORM}_API_KEY. typical rate limits: 50-200 requests/hour depending on platform.OPENAI_API_KEY env var if using cloud model). fallback to local template if key missing.runtime requirements:
scripts/requirements.txt (includes RAG framework, web scraping, sqlite3, pdf parsing)install dependencies:
{SKILL_DIR} pathpip install -r scripts/requirements.txtinitialize RAG vector database:
python3 scripts/setup_rag.py --init~/.job_hunter/vector_db/create user profile:
cp assets/profile_template.json ~/job_profile.json~/job_profile.json with target roles, skills, location, salary floor, preferred platforms~/job_profile.jsonimport resume into RAG:
python3 scripts/rag_engine.py --import-resume ~/path/to/resume.pdfload user profile:
~/job_profile.jsonexecute RAG search:
python3 scripts/rag_engine.py --mode search --platforms linkedin,boss --min-score 0.75 --max-results 20present results to user:
user selects jobs to apply to:
validate selected jobs:
enter dry-run mode for each job:
python3 scripts/apply_pipeline.py --job-id <id> --mode dry-run --generate-cover-letter --optimize-atsshow user review screen:
handle user edits (if requested):
submit application (if confirmed):
python3 scripts/apply_pipeline.py --job-id <id> --mode submit --cover-letter "<text>" --resume-highlights "<text>"log to tracker database:
python3 scripts/tracker.py --log-application --job-id <id> --status "applied" --timestamp <iso_timestamp> --cover_letter_used "<text>"respect rate limits:
request tracking report:
python3 scripts/tracker.py --report <type>generate summary:
~/.job_hunter/reports/job_search_<date>.jsonuser provides signal:
python3 scripts/rag_engine.py --mode feedback --job-id <id> --signal like|dislikeupdate user preferences (optional):
if user requests dry-run vs. submit:
--mode dry-run and present cover letter + resume for review.--mode submit.--mode dry-run before allowing submit.if API authentication fails (LinkedIn, job board, or OpenAI):
LINKEDIN_API_KEY env var is missing, skip LinkedIn search and only search BOSS and other configured platforms.OPENAI_API_KEY is missing, fall back to local template-based cover letter generation (less personalized).python3 scripts/setup_rag.py --auth <platform>.if job board returns rate limit error (429 or similar):
~/.job_hunter/queue_pending.json for later retry.if RAG match score below threshold but user insists:
if resume was never imported:
~/.job_hunter/vector_db/resume_embeddings.pkl does not exist, halt and instruct user to run setup step 4 (import resume).if job already applied to:
if network timeout or platform downtime:
if job listing has no salary data:
if result set is empty:
success outputs:
smart job search (workflow 1): JSON file at ~/.job_hunter/search_results_<timestamp>.json containing array of job objects. each object has: job_id (string), title (string), company (string), url (string), match_score (float 0-1), matched_skills (array of strings), missing_skills (array of strings), salary_range (string or null). minimum 1 job, maximum 20 jobs (or user-specified limit).
auto-apply pipeline (workflow 2): for each applied job, append record to ~/.job_hunter/applications.json with fields: job_id, title, company, applied_at (ISO timestamp), cover_letter_used (text), ats_highlights (array), status ("applied"), url. also print to stdout: "applied to [count] job(s). see ~/.job_hunter/applications.json for details."
application tracking (workflow 3): JSON report saved to ~/.job_hunter/reports/job_search_<date>.json containing: total_applied (int), stage_breakdown (object with keys discovered/applied/screening/interview/offer/rejected, values are counts), response_rate (float 0-1), funnel_conversion (object mapping stage transitions to %), days_in_stage (object mapping stage to average days), export_date (ISO timestamp). also print summary table to stdout.
feedback loop (workflow 4): confirmation message "feedback recorded for job [job_id]. RAG vectors updated." RAG query weights are updated in vector DB (no separate file output needed).
error cases: all errors logged to ~/.job_hunter/errors.log with timestamp and error message. user also sees error printed to stdout.
the skill worked if:
credits: original author not declared in source material. enriched per implexa quality standards.