Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

9 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

HermePrep

My real, working daily AI job-prep setup β€” a local LLM (via Ollama) generates a fresh DSA problem, CS fundamentals concept, and tailored interview Q&A every morning, scheduled to run automatically. No per-call API costs, nothing sent to third parties (except the optional job-digest agent, which uses Ollama's hosted search, plus DuckDuckGo/YouTube lookups for links/videos).

πŸ“– Read the full write-up: Tired of Doing Job Prep Manually Every Day? I Built Agents That Do It For Me β€” the complete Windows setup walkthrough with screenshots, from installing Ollama to scheduling it with Task Scheduler.

Tested and running on: Windows 11, GTX 1050 (4GB VRAM), phi4-mini via Ollama, Ollama's hosted web search API, and the YouTube Data API for embedded videos.

Want a version you can configure with your own background and choice of LLM provider (including hosted APIs like Groq/Mistral/Gemini, not just Ollama)? See HermePrep β€” Generic Edition β€” the generalized version of this same project.

Inspired by freeCodeCamp's "How to Build and Schedule Local AI Assistants for Daily Tasks".

Screenshots

Tabs :

Main Dashboard

CS Fundamentals :

CS Fundamentals Tab CS Fundamentals Tab

DSA Problem :

DSA Problems Tab DSA Problems Tab DSA Problems Tab DSA Problems Tab DSA Problems Tab

Interview QA :

Interview QA Tab Interview QA Tab

What it does

Every morning, it prepares:

  • A real LeetCode problem (Beginner/Intermediate/Advanced, with hints, three solution tiers, a diagram, and a real LeetCode + YouTube link)
  • A CS fundamentals concept (with a diagram and live further-reading links)
  • A tailored interview Q&A, grounded in my actual projects and past interview questions
  • (Mon & Thu) A digest of fresh job postings matching my target roles

...shown in a clean local web page, with a desktop notification when it's ready.

Features

  • Fully local LLM inference via Ollama β€” no data leaves the machine (except the optional live-search features noted above)
  • One scheduled task, smart daily rotation (each agent declares which weekdays it runs)
  • No-repeat memory β€” every agent tracks what it's already covered
  • Real, curated DSA problems (not AI-invented) with tiered solutions and a Mermaid diagram of the optimal approach
  • Live "Further Reading" links for CS concepts, fetched via DuckDuckGo
  • Voice read-aloud for sample interview answers, with a voice picker
  • A tabbed, dark-themed local web viewer + native popup notification

How it works (architecture)

job-prep-agents/
β”œβ”€β”€ scheduler.py           # loads every agent, runs what's due today, builds the viewer
β”œβ”€β”€ run_scheduler.bat      # Windows Task Scheduler entry point
β”œβ”€β”€ notify.ps1             # native popup notification window
β”œβ”€β”€ .env.example           # copy to .env β€” your model/API-key settings
β”œβ”€β”€ config/
β”‚   └── profile.py         # my real background/projects/target roles
β”œβ”€β”€ outputs/                # generated each run: viewer-YYYY-MM-DD.html + raw .md files
β”œβ”€β”€ history/                # auto-tracked: what's already been covered per agent
└── agents/
    β”œβ”€β”€ _history.py         # shared no-repeat tracking helper
    β”œβ”€β”€ _websearch.py        # shared DuckDuckGo lookup helper (graceful fallback)
    β”œβ”€β”€ dsa_problem.py        # curated real LeetCode problems + tiered solutions
    β”œβ”€β”€ cs_fundamentals.py    # rotating OS/DBMS/CN/OOP/System Design concepts
    β”œβ”€β”€ interview_qa.py       # tailored + generic interview Q&A
    └── job_digest.py         # Mon & Thu: job postings matching my target roles

Every agent is a Python file with a NAME and a run() that returns Markdown. scheduler.py just discovers and runs everything in agents/.

The "calendar" β€” one scheduled task, not four

Each agent declares which weekdays it runs via a SCHEDULE set (0=Monday ... 6=Sunday); no attribute means "every day." dsa_problem, cs_fundamentals, interview_qa run daily; job_digest runs Mon/Thu.

Setup (Windows)

1. Install Ollama and pull a model

ollama pull phi4-mini

VRAM/context-window note: some models default to a huge context window, which can force far more memory allocation than the model's file size suggests β€” sometimes overflowing a small GPU into slow CPU inference. This project caps context via num_ctx=4096 in every agent. If things run slowly, run ollama ps β€” if PROCESSOR isn't close to 100% GPU, the model/context is too big for your VRAM.

2. Clone and set up a virtual environment

git clone <this-repo-url>
cd job-prep-agents
python -m venv .venv
.venv\Scripts\activate
pip install -r requirements.txt

3. Configure your environment

copy .env.example .env

Fill in .env:

  • OLLAMA_MODEL β€” the model you pulled
  • OLLAMA_API_KEY (optional) β€” only needed for job_digest. Get one at https://docs.ollama.com/api/authentication
  • YOUTUBE_API_KEY (optional) β€” enables real embedded videos for DSA problems. Get a free key via Google Cloud Console (enable YouTube Data API v3).

4. Test it manually

python scheduler.py

Watch for [run]/[ok] lines. When it finishes, your browser should auto-open to outputs/viewer-<today>.html, and a popup notification appears.

5. Point run_scheduler.bat at your project

Edit the two paths in run_scheduler.bat (project folder + venv's python.exe), then test:

.\run_scheduler.bat

Check runner.log for the same output as step 4.

6. Schedule it with Windows Task Scheduler

schtasks /Create /SC DAILY /TN "HermePrep" /TR "D:\full\path\to\job-prep-agents\run_scheduler.bat" /ST 10:30 /RL HIGHEST

Verify anytime:

schtasks /Query /TN "HermePrep" /V /FO LIST

Check the Last Result field β€” 0 means success.

Customization guide

Want to change... Edit this file
Background, projects, target roles, past questions config/profile.py
Which DSA problems are covered / their difficulty agents/dsa_problem.py β†’ PROBLEM_BANK
Which CS topics rotate through agents/cs_fundamentals.py β†’ TOPICS
Which interview focus areas show up agents/interview_qa.py β†’ FOCUS_AREAS
Job search queries config/profile.py β†’ JOB_SEARCH_QUERIES
Which days an agent runs that agent's SCHEDULE set
The model / API keys .env
The look of the viewer page scheduler.py β†’ PAGE_STYLE / VIEWER_SCRIPT

Troubleshooting

Scheduler hangs for minutes with no output

Almost always Ollama loading the model into memory for the first time (or after being idle) β€” not actually stuck. Check ollama ps. Set OLLAMA_KEEP_ALIVE=30m in .env so repeated runs stay fast.

ollama ps shows a huge memory size / mostly CPU, not GPU

The model's default context window is likely bigger than your VRAM can hold. This project caps num_ctx=4096 in every agent already.

Batch file errors with garbled paths

The entire path needs to be inside one pair of quotes. Wrong: cd /d C:\"My Folder"\project. Right: cd /d "C:\My Folder\project".

Windows Task Scheduler: task exists but "Last Result" isn't 0

-2147024891 (0x80070005) is "Access Denied" β€” a Task-Scheduler-specific permissions issue, not a script bug (especially if double-clicking the .bat directly works fine). Try recreating the task with /RL HIGHEST, and check Windows Security β†’ Virus & threat protection β†’ Controlled folder access, which sometimes blocks non-interactively-triggered scripts.

Embedded YouTube video shows "Error 153"

That's YouTube's error for "video owner disabled embedding elsewhere." This project uses a clickable thumbnail + link instead of an <iframe>, which works regardless of embed permissions.

Mermaid diagram shows a "bomb icon" / syntax error

Small local models occasionally produce invalid Mermaid syntax. The viewer validates syntax before rendering and shows a clean "Diagram unavailable" message instead.

A note on trust

Small local models still hallucinate β€” spot-check DSA solutions, job postings, and technical explanations before trusting them fully. Treat this as a study nudge and starting point, not gospel.

License

MIT β€” free to use, modify, and redistribute.

About

My real, working daily AI job-prep setup; local LLM generates a fresh DSA problem, CS concept, and tailored interview Q&A every morning, scheduled via Windows Task Scheduler.

Topics

Resources

Stars

Watchers

Forks

Used by

Contributors

Languages