Skip to content

weixijia/jobclaw

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

10 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

JobClaw πŸ¦€

AI-powered job search automation as an OpenClaw skill. Search LinkedIn and Indeed every day. Score results against your profile. Track everything in a local CSV. Zero backend, zero dashboard β€” just you and your data.


What It Does

  • Multi-platform search: LinkedIn + Indeed via python-jobspy
  • Two search modes: coding (ML engineer, data scientist, AI engineer) and noncoding (research, no-leetcode, consulting roles)
  • AI scoring: Jobs scored 0–100 against your skill profile. Only qualified jobs (β‰₯70 by default) are saved.
  • CSV tracker: All jobs saved to jobs.csv with 21 columns β€” no database server needed
  • Smart dedup: Won't add the same company+role or URL twice
  • Daily automation: One cron job, one notification each morning
  • /newjob <url>: Paste any job URL and get an instant score + analysis

Requirements

  • Python 3.10+
  • OpenClaw (for skill integration and notifications)
  • python-jobspy:
    pip install python-jobspy

Installation

Via ClawHub (recommended)

clawhub install jobclaw

Manual

git clone https://github.com/weixijia/jobclaw ~/.npm-global/lib/node_modules/openclaw/skills/jobclaw

Contributing

Pull requests welcome. The CI pipeline auto-publishes to ClawHub on every push to main β€” no manual release step needed.


First Run

Talk to your OpenClaw agent:

"Set up my job search"

The agent walks you through everything conversationally β€” one question at a time:

  1. Your name
  2. Background β€” a sentence about what you do (used for job scoring context)
  3. Key skills β€” e.g. python, pytorch, sql, docker
  4. Target roles β€” e.g. ML engineer, data scientist
  5. Locations β€” e.g. London, UK, Remote, Berlin, DE
  6. Search preferences β€” how recent, minimum score (defaults work fine)
  7. Daily schedule β€” what time to run, timezone
  8. Notifications β€” Telegram bot, OpenClaw channel, or none

At the end, the agent writes ~/Documents/JobClaw/config.json and offers to run the first search immediately. No editing files, no CLI wizard.


Example Config

{
  "user": {
    "name": "Alex",
    "background": "Software engineer with ML experience",
    "skill_keywords": ["python", "pytorch", "machine learning", "deep learning"]
  },
  "search": {
    "locations": ["London, UK", "Remote"],
    "min_score": 70,
    "hours_old": 48,
    "platforms": ["linkedin", "indeed"]
  },
  "notifications": {
    "enabled": true,
    "telegram_bot_token": "your_bot_token",
    "telegram_chat_id": "your_chat_id"
  },
  "schedule": {
    "daily_time": "07:30",
    "weekdays_only": true,
    "timezone": "Europe/London"
  }
}

Another example β€” data science background:

{
  "user": {
    "name": "Sam",
    "background": "Data scientist, fintech experience",
    "skill_keywords": ["pandas", "scikit-learn", "sql", "statistics", "forecasting"]
  },
  "search": {
    "locations": ["New York, NY", "San Francisco, CA", "Remote"],
    "min_score": 65
  }
}

See jobclaw/assets/config.example.json for the full template with all options.


Usage

Chat commands (inside OpenClaw)

Command What happens
run job search Full search (coding + noncoding)
run coding job search ML engineer, AI engineer, data scientist roles
run noncoding job search Research, consulting, no-leetcode roles
/newjob https://... Analyse a specific job posting
show job stats Total, by status, new today
top jobs Top 10 by match score
search for "LLM engineer" in Berlin Custom keyword + location
set up daily search at 8am Configure OpenClaw cron

CLI commands

# Full search
python3 scripts/search.py --mode all

# Coding roles only
python3 scripts/search.py --mode coding

# Research / no-leetcode roles only
python3 scripts/search.py --mode noncoding

# Preview without saving
python3 scripts/search.py --mode all --dry-run

# Custom keyword and location
python3 scripts/search.py --mode coding --keyword "MLOps engineer" --location "Berlin, DE"

# Tracker stats
python3 scripts/tracker.py stats
python3 scripts/tracker.py top

How Scoring Works

  1. Base score: 50
  2. Each matching positive keyword in the job title/description: +5 (capped at 100)
  3. Negative keywords (e.g. "intern", "unpaid"): βˆ’15 each
  4. Keywords in your skill_keywords config are added to the positive list

Coding mode positive keywords: machine learning, deep learning, pytorch, llm, nlp, computer vision, mlops, rlhf, fine-tuning, generative ai …

Noncoding mode positive keywords: healthcare, clinical, research scientist, fintech, fraud, postdoc, product manager, consulting …

Adjust min_score in config (default: 70) for more or fewer results.


Interview Type Classification

JobClaw tags each job with an estimated interview type:

Type Description Typical for
Research Talk Presentation + Q&A, no coding Postdoc, Research Scientist at labs
No Leetcode Behavioural + ML knowledge Startups, many mid-size companies
Case Study Business/ML case + presentation Consulting, pharma, finance
Take-Home 1–3 day ML task Startups
Fair Coding Basic Python + ML discussion Applied scientist roles
Standard Coding LeetCode medium Most tech companies
Heavy Leetcode LeetCode hard Big tech (FAANG)

CSV Schema

~/Documents/JobClaw/data/jobs.csv:

Column Description
company Company name
role Job title
location City, country
work_mode Remote / Hybrid / On-site / Unknown
salary Salary if listed
job_url Link to posting
date_posted When posted (YYYY-MM-DD)
date_found When JobClaw found it
source Daily Search / Manual
match_score 0–100 relevance score
ml_direction e.g. NLP/LLM, Healthcare AI, General ML/AI
seniority Junior / Mid / Senior / Lead
interview_type Research Talk / No Leetcode / Standard Coding / …
status New / Applied / Phone Screen / Offer / Rejected / …
date_applied Fill in when you apply
referral Referral contact
recruiter_contact Recruiter info
followup_date When to follow up
priority High / Medium / Low
notes Source platform, description excerpt
job_category coding / noncoding

Notifications

Option 1: Telegram Bot (standalone, no OpenClaw needed)

  1. Message @BotFather β†’ /newbot β†’ copy the token
  2. Message @userinfobot β†’ copy your chat ID
  3. Add both to config.json under notifications

Test: python3 scripts/notify.py --test

Option 2: OpenClaw channel

  • Set openclaw_channel (e.g. telegram), openclaw_account, and telegram_chat_id
  • Routed through OpenClaw's messaging system

Platform Notes

  • LinkedIn: Best coverage for tech/ML roles; occasionally rate-limited
  • Indeed: Strong UK/EU/US coverage, often surfaces roles not on LinkedIn
  • Both searched simultaneously via python-jobspy

Project Structure

jobclaw/
β”œβ”€β”€ SKILL.md                    # OpenClaw skill definition
β”œβ”€β”€ scripts/
β”‚   β”œβ”€β”€ setup.py                # First-run setup wizard
β”‚   β”œβ”€β”€ search.py               # Search engine (jobspy + scoring)
β”‚   β”œβ”€β”€ tracker.py              # CSV read/write/dedup
β”‚   β”œβ”€β”€ notify.py               # Notifications (OpenClaw / Telegram)
β”‚   └── run_daily.sh            # Daily automation runner
β”œβ”€β”€ references/
β”‚   β”œβ”€β”€ screening_guide.md      # Scoring rules, interview types
β”‚   β”œβ”€β”€ keywords.md             # Keyword lists and search strategy
β”‚   └── commands.md             # All commands reference
└── assets/
    └── config.example.json     # Config template

Roadmap

  • AI-powered JD analysis (Claude) for richer scoring
  • Cover letter generation per job
  • Interview prep mode (/prep <company>)
  • Export to Notion / Airtable
  • More platforms (ZipRecruiter, Google Jobs)
  • jobs.ac.uk scraper for academic roles

Contributions welcome β€” open an issue or PR. The CI pipeline auto-publishes updates to ClawHub on every push to main.


License

MIT β€” see LICENSE


Built with ❀️ and job search anxiety. Powered by python-jobspy and OpenClaw.

About

Your OpenClaw Career Assistant.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors