A production-ready, autonomous job application automation system powered by AI.
Watch the system in action:
๐ Click to watch the full demo video - See how the system collects jobs from LinkedIn, GitHub, Naukri, YCombinator, and Wellfound, scores them with AI, and generates personalized outreach emails.
- ๐ค Fully Autonomous - Backend automation system (no UI, no manual intervention)
- โฐ Runs Unattended - Schedule via cron for daily/weekly execution
- ๐ง AI-Powered Decisions - APPLY / APPLY_LATER / WATCH / SKIP with reasoning
- ๐ง Personalized Outreach - Auto-generates tailored emails for each job
- ๐ก๏ธ Production-Grade - Survives failures, maintains state, produces audit logs
- ๐ Beautiful Terminal UI - Rich progress bars, tables, and analytics
- โ Not an agent framework experiment
- โ Not a demo or prototype
- โ Not dependent on paid APIs (100% local LLM)
- โ Not a spam machine (intelligent filtering + rate limiting)
- Rule-based first, LLM second - Fast, deterministic logic before expensive inference
- Idempotent by design - Same input โ same output, safe to re-run
- Fail gracefully - One broken source doesn't crash the pipeline
- Auditable - Every decision has a reason, every action is logged
- Modular - Each component is testable, replaceable, inspectable
๐ฅ Collect โ ๐งน Clean โ ๐ Dedupe โ ๐ฏ Enrich โ ๐ Score โ ๐ง Decide โ ๐ง Outreach โ ๐พ Store
| Component | Technology | Purpose |
|---|---|---|
| Language | Python 3.11+ | Core runtime |
| LLM | Ollama (llama3.1:8b) | Local AI inference (no API costs) |
| Storage | CSV + SQLite | Primary + queryable storage |
| Scraping | httpx, BeautifulSoup, Playwright | Job data collection |
| SMTP (Gmail) | Automated outreach | |
| Terminal UI | Rich library | Beautiful CLI experience |
| CLI | Typer | Command-line interface |
| Scheduler | cron | Automated execution |
- LinkedIn - Scrapes new grad & early career positions
- GitHub - Careers page + repos with hiring in README + issues
- Naukri.com - India's largest job portal
- YCombinator - Startup job board
- Wellfound (AngelList) - Startup hiring platform
- GitHub Analysis - Analyzes all 92 repositories with AI insights
- LinkedIn Scraping - Uses Playwright for dynamic content
- Auto-send Hiring Alerts - Detects hiring posts and emails immediately
- CSV Export - Complete job data export for analysis
- Rule-based Scoring - Fast filtering based on experience, tech stack, location
- AI Reasoning - Uses Ollama for complex job description analysis
- Match Scoring - 0-100% compatibility score with detailed reasoning
- Smart Decisions - APPLY (75+), APPLY_LATER (50-74), WATCH (30-49), SKIP (<30)
- All Jobs List - Complete table with company, role, location, score, decision
- Company Breakdown - Top 15 companies with job counts and percentages
- Location Analysis - Top 10 locations with visual bars
- Skills Analysis - Most in-demand (top 15) and least common (bottom 10) skills
- Score Distribution - Excellent/Good/Fair/Poor ranges with counts
- Summary Statistics - Average score, remote jobs, email found, unique companies
- Job Cards with URLs - Every job shows clickable "Apply Now" button
- AI Reasoning - "Why you should apply" for each position
- Match Scores - Color-coded badges (high/medium/low)
- Visual Design - Professional HTML email with gradient headers
- Organized Sections - APPLY jobs first, then other decisions
# 1. Clone the repository
git clone https://github.com/algsoch/job_agentic.git
cd job_agentic
# 2. Install Ollama and pull the model
curl -fsSL https://ollama.com/install.sh | sh
ollama pull llama3.1:8b
# 3. Install Python dependencies
pip install -e .
# 4. Configure environment (create .env file)
cp .env.example .env
# Edit .env with your settings:
# - SMTP credentials (Gmail app password)
# - GitHub token (for 5000 requests/hour)
# - Job search preferences
# - Enabled collectors (linkedin,github,naukri,ycombinator,wellfound)
# 5. Dry run (no emails sent)
python3 cli.py run --dry-run
# 6. Real run (all sources)
python3 cli.py run
# 7. Check CSV output
cat jobs.csv
# 8. View detailed terminal report
# (automatically shown after pipeline completion)job_agentic/
โโโ ๐ฏ core/ # Orchestration & state machine
โ โโโ engine.py # Main pipeline orchestrator
โ โโโ models.py # Data models (Job, Decision, PipelineResult)
โ โโโ state.py # State management & persistence
โโโ ๐ collectors/ # Job scrapers (one per source)
โ โโโ base.py # Abstract collector interface
โ โโโ linkedin.py # LinkedIn job scraper
โ โโโ github.py # GitHub careers + repos + issues
โ โโโ naukri.py # Naukri.com (India) scraper
โ โโโ ycombinator.py # YC job board
โ โโโ wellfound.py # Wellfound/AngelList jobs
โโโ ๐ง intelligence/ # Decision engine
โ โโโ rules.py # Rule-based scoring logic
โ โโโ scorer.py # Job compatibility scoring
โ โโโ decider.py # Final decision maker (APPLY/SKIP/etc)
โโโ ๐จ enrichment/ # Data enrichment & analysis
โ โโโ email_finder.py # Email discovery via Hunter.io/Clearbit
โ โโโ profile_report.py # Deep GitHub + LinkedIn analysis
โ โโโ company_research.py # Company data enrichment
โโโ ๐ง outreach/ # Email automation system
โ โโโ composer.py # Email template & personalization
โ โโโ sender.py # SMTP sending with rate limits
โ โโโ templates/ # Email templates (HTML/text)
โโโ ๐พ storage/ # Persistence layer
โ โโโ csv_store.py # Primary CSV storage
โ โโโ sqlite_store.py # Queryable SQL database
โ โโโ backup.py # Automated daily backups
โโโ ๐ observability/ # Monitoring & debugging
โ โโโ logger.py # Structured logging
โ โโโ metrics.py # Statistics tracking
โ โโโ notifier.py # Email notifications (completion/errors)
โ โโโ circuit_breaker.py # Failure protection
โโโ cli.py # Typer CLI interface + Rich UI
โโโ config.py # Configuration management
โโโ requirements.txt # Python dependencies
โโโ .env.example # Environment variables template
Each job record contains:
| Field | Type | Description |
|---|---|---|
| job_id | str | Unique hash (prevents duplicates) |
| company | str | Company name |
| role | str | Job title |
| source | str | Collection source (linkedin, github, etc) |
| job_url | str | Application link |
| description | str | Job description text |
| location | str | Job location |
| salary_min/max | int | Salary range (if available) |
| str | Hiring manager email | |
| email_confidence | float | Email validity score (0-1) |
| score | int | Match score (0-100) |
| decision | Decision | APPLY/APPLY_LATER/WATCH/SKIP |
| reason | str | AI-generated reasoning |
| status | JobStatus | NEW/ENRICHED/DECIDED/SENT |
| applied_on | datetime | Application timestamp |
| scraped_at | datetime | Collection timestamp |
| updated_at | datetime | Last update timestamp |
score = 0
+ 30 points # Experience match (0-3 years)
+ 20 points # Tech stack match (Python, React, FastAPI, etc)
+ 15 points # Location match (Bengaluru, Remote, etc)
+ 10 points # Company stage match
+ 15 points # Posted recently (within 7 days)
= Total Score (0-100)- Ambiguous job descriptions โ AI analysis
- Cultural fit assessment โ Sentiment analysis
- Email personalization โ Context-aware writing
- Profile matching โ Deep skill comparison
Score >= 75 โ โ
APPLY (Send email immediately)
Score 50-74 โ โฐ APPLY_LATER (Review manually first)
Score 30-49 โ ๐ WATCH (Monitor for changes)
Score < 30 โ โญ๏ธ SKIP (Not a good match)
| Feature | Implementation | Benefit |
|---|---|---|
| Idempotency | Job hash (MD5 of company+role+url) | No duplicate applications |
| Circuit Breakers | Pause failing sources after 3 errors | Prevent cascade failures |
| Retry Logic | Exponential backoff (1s, 2s, 4s, 8s) | Handle transient errors |
| Partial Failures | Continue pipeline if one step fails | Maximize job collection |
| Daily Backups | Automated CSV snapshots to backups/ |
Data loss prevention |
| Rate Limiting | Max 10 emails/hour (Gmail limits) | Avoid spam filters |
| Error Logging | Structured logs with traceback | Easy debugging |
# Run daily at 9 AM
0 9 * * * cd /path/to/job_agentic && /path/to/venv/bin/python3 cli.py run >> /var/log/jobctl.log 2>&1# Weekly summary (Sundays at 10 AM)
0 10 * * 0 cd /path/to/job_agentic && /path/to/venv/bin/python3 cli.py stats --last 7d# Update GitHub/LinkedIn profile every 6 hours
0 */6 * * * cd /path/to/job_agentic && /path/to/venv/bin/python3 cli.py analyze-profileBefore running in production, ensure:
- Ollama Installed -
ollama listshowsllama3.1:8b - Gmail App Password - Created and added to
.env - GitHub Token - Personal access token for 5000 requests/hour
- Environment Variables -
.envfile configured with all settings - Playwright Browser -
playwright install chromium(for LinkedIn) - Test Run Completed -
python3 cli.py run --dry-run(no errors) - Email Sending Tested - Verify emails reach inbox (not spam)
- Cron Job Scheduled - Automated daily execution configured
- Log Rotation Configured - Prevent disk space issues
- Backup Location Verified -
backups/directory accessible - Resume File Present -
resume.pdfin project root
After each run, the system displays:
- All Jobs Table - Complete list with scores and decisions
- Company Breakdown - Top 15 hiring companies with percentages
- Location Analysis - Top 10 locations with visual distribution
- Skills Demand - Most/least in-demand technologies
- Score Distribution - Job quality breakdown (Excellent/Good/Fair/Poor)
- Summary Stats - Avg score, remote jobs, unique companies
jobs_scraped_per_source # Collection efficiency
decision_distribution # APPLY/SKIP ratio
email_send_success_rate # Outreach effectiveness
source_failure_rate # Scraper health
pipeline_execution_time # Performance monitoringlogs/jobctl.log- Main application loglogs/errors.log- Error-only loglogs/email_sent.log- Outreach audit trail
# SMTP Email Configuration
SMTP_HOST=smtp.gmail.com
SMTP_PORT=587
SMTP_USERNAME=your-email@gmail.com
SMTP_PASSWORD=your-app-password
EMAIL_FROM=your-email@gmail.com
EMAIL_FROM_NAME=Your Name
# GitHub API (for 5000 requests/hour)
GITHUB_TOKEN=ghp_your_personal_access_token
# Job Search Preferences
TARGET_ROLES=Software Engineer,Backend Engineer,AI Engineer
TARGET_LOCATIONS=Remote,Bengaluru,San Francisco
MIN_EXPERIENCE=0
MAX_EXPERIENCE=3
REQUIRED_SKILLS=Python,FastAPI,React,LangChain
# Enabled Collectors (comma-separated)
ENABLED_COLLECTORS=linkedin,github,naukri,ycombinator,wellfound
# Profile Information
YOUR_NAME=Vicky Kumar
YOUR_GITHUB=https://github.com/algsoch
YOUR_LINKEDIN=https://www.linkedin.com/in/algsoch/
YOUR_PORTFOLIO=https://ai-engineer-chatbot.onrender.com/
RESUME_PATH=./resume.pdfโญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ
โ ๐ JOB INTELLIGENCE OPERATING SYSTEM โ
โ Autonomous Job Application Agent โ
โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ
๐ COLLECTING JOBS FROM ALL SOURCES
โโ LinkedIn Collector โโโโโโโโโโโโโโโโโโ
โ Found 35 jobs from LinkedIn โ
โ โ Software Engineering, New Grad โ
โ โ Backend Engineer - Early Career โ
โ โ Full Stack Developer (0-2 years) โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โโ GitHub Collector โโโโโโโโโโโโโโโโโโโโ
โ โ Scraping GitHub Careers Page โ
โ โ Searching repos with hiring โ
โ โ Searching GitHub issues โ
โ Found 12 jobs from GitHub โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
๐ Pipeline Complete in 69.1s
โญโ RESULTS โโโโโโโโโโโโโโโโโโโโโโโโโโฎ
โ Jobs Collected: 35 โ
โ Emails Sent: 0 โ
โ Decisions Made: โ
โ โ
APPLY: 15 โ
โ โญ๏ธ SKIP: 20 โ
โ Success Rate: 42.9% โ
โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ
๐ ALL JOBS FOUND (35 total)
โโโโโฌโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโฌโโโโโโโฌโโโโโโโโโโโ
โ # โ Company โ Role โ Location โ Scoreโ Decision โ
โโโโโผโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโผโโโโโโโผโโโโโโโโโโโค
โ 1 โ Stripe โ Software Engineer, New.. โ Bengaluru โ 55 โ โ
APPLY โ
โ 2 โ Notion โ Fullstack Early Career โ Remote โ 45 โ โ
APPLY โ
โ 3 โ Clear โ Backend Engineer โ New York โ 14 โ โญ๏ธ SKIP โ
โโโโโดโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโดโโโโโโโดโโโโโโโโโโโ
๐ข COMPANY BREAKDOWN (Top 15)
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
Stripe 3 jobs (8.6%) โโโโโโโโ
Notion 2 jobs (5.7%) โโโโโ
GitHub 2 jobs (5.7%) โโโโโ
- More Job Sources - Indeed, Glassdoor, Stack Overflow Jobs
- Application Tracking - Monitor responses, interviews, rejections
- A/B Testing - Test different email templates and measure success
- Telegram/Slack Notifications - Real-time alerts for high-priority matches
- ML-Based Scoring - Train model on historical application outcomes
- Resume Tailoring - Auto-generate customized resumes per job
- Interview Prep - AI-generated company/role-specific prep materials
- Salary Negotiation - Data-driven compensation recommendations
MIT License - See LICENSE file for details
Contributions welcome! Please:
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
- ๐ง Email: vickyiitbombay2@gmail.com
- ๐ GitHub: @algsoch
- ๐ผ LinkedIn: algsoch
Built with:
- Ollama - Local LLM inference
- Rich - Beautiful terminal UI
- Playwright - Browser automation
- Typer - CLI framework
"This system should run for 6 months without human intervention, make intelligent decisions, and never embarrass you with spam."
Built for reliability, not novelty. Production-ready, not prototype.
โญ Star this repo if you find it useful!
Made with โค๏ธ by Vicky Kumar
