Upload your resume, pick a lane, and let a team of AI agents find roles, write tailored cover letters, fill simple application forms, and draft outreach emails — so you can focus on the parts that actually need you.
Applying to internships means hours of repetitive grunt work — searching boards, finding the right people, writing near-identical cover letters, and filling the same fields over and over. Job Hunter Crew automates the boring parts using a team of coordinated AI agents.
You upload your resume once, tell it how many roles you want and what kind, and the agents handle three different application pathways — each in the way that actually works for that path.
🎥 Demo: add your screen recording / GIF here
The agents behave differently depending on the kind of opportunity, because a startup form, a professor's inbox, and a Workday portal each need a different approach.
| Lane | What the agents do |
|---|---|
| 🚀 Early-stage startups | Find roles, write a tailored cover letter, and use Playwright to fill simple application forms — then leave them open for you to review and submit. If a form can't be filled, you get the direct link. |
| 🎓 Research under professors | Find relevant professors, compile their research areas into a file, and use the Gmail API to create draft outreach emails (with source links to verify). Drafts only — never sent. You review and send. |
| 🏢 Big tech companies | These are protected by CAPTCHAs and logins (which exist precisely to stop bots), so the agents find the role and hand you the direct application link to fill manually. |
Everything the agents do is collected into a single report.md you can download after each run.
The system is built on CrewAI, which orchestrates multiple specialized agents that pass work down an assembly line.
┌─────────────────────────────────────────────┐
│ Web UI (FastAPI + HTML) │
│ pick a lane · upload resume · launch │
└───────────────────────┬─────────────────────┘
│
build_crew(lane)
│
┌────────────────────────▼────────────────────────┐
│ THE CREW │
│ │
│ 🔎 Scout ──► ✍️ Scribe ──► (lane-specific) │
│ finds roles writes letters, │
│ & contacts fills forms / drafts emails │
└──────────────────────────────────────────────────┘
│
┌──────────────────┼──────────────────┐
▼ ▼ ▼
Playwright Gmail API report.md
(fill forms) (create drafts) (combined output)
- A Scout agent searches the web (via Serper) and gathers roles, links, professor emails, or contacts.
- A Scribe agent uses your resume to write tailored letters/emails, then takes the right action for the lane — filling a form, creating a Gmail draft, or logging a link.
- Tasks run sequentially, with each agent's output passed as context to the next.
| Tool | Role |
|---|---|
| CrewAI | Multi-agent orchestration — defining agents, tasks, and how they coordinate |
| Groq | LLM inference (Llama 3.3 70B) — fast and free-tier friendly |
| Serper | Web search API for finding roles and professors |
| FastAPI | Backend server + REST API powering the web UI |
| Playwright | Browser automation for filling application forms |
| Gmail API | Creating draft outreach emails (OAuth2) |
| Vanilla HTML/CSS/JS | A custom, lightweight frontend |
job_hunter_crew/
├── config/
│ ├── agents.yaml # WHO each agent is (role, goal, backstory)
│ └── tasks.yaml # WHAT each agent does
├── frontend/
│ └── index.html # the web UI (lane picker, pipeline, results)
├── src/
│ ├── tools/
│ │ ├── gmail_tool.py # creates Gmail drafts (never sends)
│ │ ├── autofill_tool.py # Playwright form-filler
│ │ └── report_tool.py # writes the combined report
│ ├── crew.py # the orchestrator — builds the crew per lane
│ ├── server.py # FastAPI backend
│ └── main.py # optional command-line entry point
├── output/ # generated report.md + form screenshots
├── .env.example # template for your keys (copy to .env)
├── requirements.txt
└── README.md
git clone https://github.com/<your-username>/job-hunter-crew.git
cd job-hunter-crew
python -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
pip install -r requirements.txt
playwright install chromium # downloads the browser for form-fillingCopy the template and fill in your own values:
cp .env.example .envThen edit .env:
GROQ_API_KEY=your_groq_key_here # free at console.groq.com
SERPER_API_KEY=your_serper_key_here # free at serper.dev
MODEL=groq/llama-3.3-70b-versatile
FULL_NAME=Your Name
EMAIL=your.email@gmail.com
PHONE=+910000000000
RESUME_PATH=./your_resume.pdfDrop your resume PDF into the project folder and point RESUME_PATH at it.
To create email drafts, you need a Google OAuth client:
- In Google Cloud Console, create a project and enable the Gmail API.
- Under OAuth consent screen, add your own email as a Test user.
- Create an OAuth Client ID of type Desktop app, download the JSON, rename it to
credentials.json, and place it in the project root.
The first time you run the research lane, a browser opens asking you to approve draft access — approve it, and a token.json is created automatically.
python src/server.pyOpen http://localhost:8000, pick a lane, set how many roles, and hit Launch.
- Choose a lane — Startup jobs, Research interns, or Big companies.
- Confirm your resume (it's auto-detected, or drag a new one in).
- Type what you're after — e.g.
remote ML intern in Indiaorcomputer vision research intern. - Set how many roles and click Launch agents.
- Watch the agent pipeline light up, then download
report.mdwith all the results. For the research lane, check your Gmail Drafts.
This project is honest about what it can and can't do:
- Form filling works on simple forms (basic fields + file upload). Sites with logins, CAPTCHAs, or complex multi-step flows will fill partially or not at all — by design, the tool does not bypass bot-protection.
- It never auto-submits. Forms are filled and left open for you to review and submit, so you stay in control.
- Emails are drafts only. The Gmail integration creates drafts — it never sends. Always verify a professor's email against the source link before sending, as web-sourced emails can occasionally be outdated.
- Output quality depends on the LLM tier. On Groq's free tier, token limits can interrupt longer runs and reduce email quality. A paid tier removes this.
💡 Biggest lesson from building this: AI agents are powerful, but knowing what not to automate (OTPs, CAPTCHAs, hitting "send") matters as much as what you can.
This project is licensed under the MIT License — see the LICENSE file for details.
Built with ❤️ and a lot of debugging, using CrewAI.
If you're building agent systems — or know a team that is — I'd love to connect!