An AI-powered job application framework built on Claude Code. Paste any job posting from any board in any country, and get a tailored CV and cover letter — all from your terminal.
Most job search tools are either glorified spreadsheets or black-box resume builders. This framework is different:
- Your profile is the source of truth. Claude reads your actual experience and writing style before generating anything. It never fabricates skills or experience.
- Drafter-reviewer pipeline. Every application goes through an AI review step that catches generic language, unsupported claims, and weak openings before you send anything.
- Works anywhere. Paste a job URL (or drop a PDF of the job description) from any board in any country — Seek, LinkedIn, Indeed, Glassdoor, or anything else .
/applyhandles the rest. - Minimal setup. Python + pip. Output is
.docx— the format recruiters and ATS systems often expect. - Runs inside Claude Code. Three slash commands handle the entire workflow. No web app, no SaaS subscription.
# 1. Clone the repo
git clone https://github.com/Kev0Bui/hirebot.git
cd hirebot
# 2. Install dependencies
pip3 install -r requirements.txt
# 3. Start Claude Code and run setup
claude
# Then inside the Claude session:
/setupAfter setup, paste any job URL into /apply to generate a tailored application.
┌─────────────────────────────────────────────────────┐
│ Claude Code CLI │
│ │
│ /setup /apply /scrape │
│ Onboarding CV + cover letter Job search │
│ interview generation via Adzuna AU │
│ (optional) │
├──────────┬───────────┬──────────────┬────────────────┤
│ profile/ │ config.yaml│ .agents/ │ outputs/ │
│ │ │ skills/ │ cv/ │
│ 01-candidate.md │ adzuna-search│ cover_letters/ │
│ 02-behavioural.md │ job-evaluator│ │
│ 03-writing-style.md │ │ │
│ 04-interview-prep.md │ │ │
├──────────┴───────────┴──────────────┴────────────────┤
│ job_tracker.csv │
└─────────────────────────────────────────────────────┘
Runs a conversational interview to build your professional profile. Claude asks about your experience, skills, writing style, and behavioural examples, then saves everything to the profile/ files. Run this once to get started, or again any time you want to update your profile. The more information you provide, the better.
The core workflow. Accepts a job URL or pasted description from any job board, then:
- Parses the job posting
- Evaluates fit against your profile (scored rubric)
- Drafts a tailored CV and cover letter (.docx)
- Reviews both documents through a critical hiring manager lens
- Applies feedback and saves final versions
- Presents a verification checklist
Searches the Adzuna AU API for jobs matching your config. Displays results as a ranked list with fit scores. Pick a number to apply, or paste a URL to start an application.
This command is for the Australian market only. It requires free API credentials from developer.adzuna.com. If you're not in Australia, skip
/scrapeand use/applydirectly with job URLs or pasted descriptions from your local job boards.
To set up /scrape:
# Add Adzuna credentials to .env (free from developer.adzuna.com)
echo 'ADZUNA_APP_ID=your-app-id' >> .env
echo 'ADZUNA_APP_KEY=your-app-key' >> .env- Python 3.10+ — python.org
- Claude Code — Installation guide
- Adzuna API key (free, optional, AU only) — developer.adzuna.com — only required for
/scrape
| Path | Purpose |
|---|---|
config.example.yaml |
Template config — copied to config.yaml by /setup |
config.yaml |
Your personal config (gitignored, created by /setup) |
profile/01-candidate.md |
Professional profile — experience, skills, education |
profile/02-behavioural.md |
STAR-format examples for interviews and cover letters |
profile/03-writing-style.md |
Tone, structure, and language preferences |
profile/04-interview-prep.md |
Interview questions, company research, salary notes |
.agents/skills/adzuna-search/ |
Adzuna API integration script (AU only) |
.agents/skills/job-evaluator/ |
Job fit evaluation rubric |
.claude/commands/setup.md |
/setup slash command definition |
.claude/commands/scrape.md |
/scrape slash command definition (AU only) |
.claude/commands/apply.md |
/apply slash command definition |
outputs/cv/ |
Generated CVs (.docx) |
outputs/cover_letters/ |
Generated cover letters (.docx) |
job_tracker.csv |
Application tracking spreadsheet |
CLAUDE.md |
Instructions for Claude Code |
Contributions are welcome! Here's how to get involved:
Each job board lives under .agents/skills/ as its own directory. To add one:
- Create
.agents/skills/your-board-name/ - Add a search script (Python) that reads from
config.yamland outputs results in the same format as the Adzuna script - Add a
README.mdexplaining how to get API credentials (if needed) and how the script works - Update the
/scrapecommand to support the new source
- Fork the repo and create a feature branch
- Keep changes focused — one feature or fix per PR
- Test your changes with a real Claude Code session if possible
- Submit a pull request with a clear description of what you changed and why
- Seek scraper — Browser-based scraping via Playwright for Seek.com.au listings
- LinkedIn manual paste helper — Structured workflow for jobs found on LinkedIn
- Interview scheduler — Track interview dates and prep in the tracker
- Multiple candidate profiles — Support switching between profiles for different role types
- Application analytics — Track response rates, time-to-response, and fit score accuracy
- Inspired by ai-job-search by Mads Lorentzen
- Built on Claude Code by Anthropic
- Job data provided by Adzuna