Job Hunter
name: job-hunter
by danielvivek2006 · published 2026-03-22
$ claw add gh:danielvivek2006/danielvivek2006-job-hunter-whatsapp---
name: job-hunter
description: "Automated job search, JD parsing, resume customization, and application tracking pipeline. Use when: user wants to find jobs, set up automated job searches, parse job descriptions, customize/tailor resumes for specific roles, track job applications, or get job hunt updates via WhatsApp/messaging. Supports free job APIs (LinkedIn guest, Jobicy, RemoteOK, Remotive, Adzuna, JSearch/RapidAPI). Triggers on: find jobs, job search, customize resume, tailor resume for [company], track applications, job hunt, apply to [company], show jobs, job status, set up job alerts."
---
# Job Hunter
Automated job search pipeline with JD parsing, resume tailoring, and application tracking.
Setup
1. Initialize Project
Create the project structure in the workspace:
job-hunter/
├── config.json # User profile, target roles, API config
├── api_keys.json # API credentials (gitignored)
├── resumes/
│ ├── base_resume.md # User's master resume (text)
│ └── [company]_[role].md # Customized per job
├── jobs/
│ └── tracked_jobs.json # All discovered jobs + status2. Gather User Profile
Ask the user for (store in `config.json`):
3. Configure APIs
See [references/apis.md](references/apis.md) for full API documentation.
**Free, no auth required:**
**Free, API key required (ask user to register):**
Store keys in `api_keys.json` with rate limits:
{
"adzuna": { "app_id": "...", "app_key": "...", "daily_budget": 4 },
"rapidapi": { "key": "...", "daily_budget": 2 }
}Core Workflows
Job Finding
1. Query all configured APIs (see [references/apis.md](references/apis.md))
2. For each result, check against `tracked_jobs.json` — skip duplicates (match by URL or title+company)
3. **Read the actual JD** for each new job — extract real data only:
- Required skills/technologies (from JD text, not assumed)
- Years of experience required (from JD text)
- Salary (only if posted in listing)
- Location and remote policy
4. Calculate match score (0-100) by comparing user's actual skills against JD requirements
5. Assign location tier based on user's priority config
6. Add to `tracked_jobs.json`
**Critical rule: Never hallucinate or assume JD data. If the JD can't be fetched, mark fields as "not fetched" and note it.**
Salary estimates: Only use JSearch estimated-salary API endpoint. Label clearly as "market estimate" vs "posted salary".
JD Parsing
Extract from actual job posting text:
- title, company, location
- required_skills[] (from JD)
- experience_years (from JD)
- salary (only if stated)
- tech_stack[] (from JD)
- nice_to_have[] (from JD)
- apply_urlResume Customization
When user says "customize resume for [company]":
1. Read the base resume from `resumes/base_resume.md`
2. Read the parsed JD for that job from `tracked_jobs.json`
3. Reorder and reframe existing experience to match JD requirements
4. Emphasize matching skills, use language from the JD
5. **Never add skills, experience, or achievements the user doesn't have**
6. **Never inflate numbers or add hallucinated data**
7. Save to `resumes/[company]_[role].md`
Application Tracking
Track status in `tracked_jobs.json`:
new → parsed → customized → applied → screening → interviewing → offer/rejectedEach entry:
{
"id": "unique",
"source": "linkedin|jobicy|remoteok|adzuna|jsearch",
"title": "from API",
"company": "from API",
"location": "from API",
"location_tier": 1,
"match_score": 85,
"salary": "only if posted",
"tech_stack": ["from actual JD"],
"experience_required": "from actual JD",
"apply_url": "url",
"status": "new",
"found_date": "YYYY-MM-DD",
"notes": ""
}Automation
Cron Jobs
Set up two cron jobs:
1. **Job Finder** — Daily at user's preferred time (default 9 AM local):
- Query all APIs, parse new JDs, update tracker
- `sessionTarget: "isolated"`, `delivery: "announce"`
2. **Status Update** — Daily at user's preferred time (default 11 AM local):
- Read tracker, compile summary, send to user's messaging channel
- `sessionTarget: "isolated"`, `delivery: "announce"`
WhatsApp/Messaging Format
Format updates for mobile readability (40-50 chars per line). Group jobs by:
1. 🌐 Remote (user's country)
2. 🌍 Remote (international)
3. 🏠 Office (by city, user's priority order)
Per job card:
━━━━━━━━━━━━━━━━━━
🏢 *Company Name*
📋 Role Title
📅 X+ yrs (from JD)
💰 Salary (if posted)
🛠 Tech: from actual JD
📍 Location
🎯 Match: X% — reason**Only show data from actual JD. Mark unfetched JDs with ⚠️.**
Interactive Commands
Users can ask anytime:
More tools from the same signal band
Order food/drinks (点餐) on an Android device paired as an OpenClaw node. Uses in-app menu and cart; add goods, view cart, submit order (demo, no real payment).
Sign plugins, rotate agent credentials without losing identity, and publicly attest to plugin behavior with verifiable claims and authenticated transfers.
The philosophical layer for AI agents. Maps behavior to Spinoza's 48 affects, calculates persistence scores, and generates geometric self-reports. Give your...