An AI-powered job search agent that uses ExaAI for intelligent web search and Memori for contextual memory. Built with LangChain for agent orchestration and Streamlit for the user interface.
- 🔍 Smart Job Search: Uses ExaAI to search across multiple job sites (LinkedIn, Indeed, Glassdoor, Monster, etc.)
- 🎯 Flexible Filters: Search by job title, location, and work style (Remote/Hybrid/Onsite)
- 📊 Configurable Results: Choose how many job listings to display (1-20, default: 5)
- 🔗 Direct Links: Click through directly to job postings to apply
- 🧠 Memory: Ask questions about your previous job searches using Memori-powered contextual memory
- 💼 Detailed Listings: View job descriptions, company names, locations, and salary information when available
- 📄 Resume Upload: Upload your resume to get personalized job recommendations and resume improvement suggestions
- 🎯 Resume Matching: Ask which jobs you're best suited for based on your resume
- ✏️ Resume Improvement: Get suggestions on what to add to your resume for specific job positions
- Python 3.11 or higher
- uv package manager (fast Python package installer)
- ExaAI API key (Get one here)
- Nebius API key (Get one here)
If you don't have uv installed, install it with:
curl -LsSf https://astral.sh/uv/install.sh | shOr using pip:
pip install uvgit clone https://github.com/Arindam200/awesome-ai-apps/brand-reputation-monitor.git
cd memory_agents/job_search_agentUsing uv (recommended - much faster):
uv syncThis will:
- Create a virtual environment automatically
- Install all dependencies from
pyproject.toml - Make the project ready to run
Create a .env file in this directory:
EXA_API_KEY=your_exa_api_key_here
NEBIUS_API_KEY=your_nebius_api_key_hereActivate the virtual environment and run Streamlit:
# Activate the virtual environment (created by uv)
source .venv/bin/activate # On macOS/Linux
# or
.venv\Scripts\activate # On Windows
# Run the app
streamlit run app.pyOr using uv directly:
uv run streamlit run app.pyThe app will open in your browser. You can:
- Enter API Keys: Add your API keys in the sidebar (or use the
.envfile) - Upload Resume (optional): Go to the Resume tab to upload your resume for personalized matching
- Search Jobs: Go to the Job Search tab and:
- Enter Job Title (required)
- Enter Location (optional)
- Select Work Style (Any/Remote/Hybrid/Onsite)
- Choose Number of Jobs (1-20, default: 5)
- Click Search Jobs
- View Results: Browse job listings with direct links to apply
- Ask Questions: Go to the Memory tab to:
- Ask about previous searches
- Get job matching recommendations (if resume uploaded)
- Get resume improvement suggestions for specific jobs
- Query Building: The app builds a search query from your inputs (job title, location, work style)
- ExaAI Search: Uses ExaAI to search across job board domains with intelligent semantic search
- Result Processing: Extracts job details (title, company, location, description, salary) using LLM
- Display: Shows results in an organized format with clickable links
- Memory Storage: Stores search results and job descriptions in Memori for future reference
- Uses Memori to store:
- Search history and conversations
- Resume information (if uploaded)
- Individual job descriptions for matching
- Ask questions like:
- "What jobs did I search for?"
- "Which job am I best suited for with my resume?"
- "What can I add to my resume to make it fit for Software Engineer at Google?"
- "What companies did I find for software engineer positions?"
- The memory system uses contextual embeddings to find relevant past searches and resume data
When you upload your resume:
- Resume details are extracted and stored in Memori
- Job descriptions are stored individually for matching
- You can ask personalized questions about:
- Job fit based on your skills
- Resume improvements for specific positions
- Skills gaps for target roles
job_search_agent/
├── app.py # Streamlit interface
├── workflow.py # LangChain and ExaAI integration
├── resume_parser.py # Resume parsing and extraction
├── pyproject.toml # Project dependencies (uv format)
├── README.md # This file
├── .streamlit/ # Streamlit configuration
│ └── config.toml # Theme settings
├── assets/ # Logo images
│ ├── Memori_Logo.png
│ └── exa_logo.png
└── memori.db # Memori database (created automatically)
See the main repository LICENSE file.
Contributions are welcome! Please feel free to submit a Pull Request.
Made with ❤️ by Studio1 Team