CLI job-search assistant powered by LangGraph
Project description
Laburator
CLI job-search assistant powered by LangGraph. Fetches job listings via API, processes them through an LLM, and generates tailored CVs, cover letters, and interview questions for each position.
Installation
# Clone the repo
git clone <repo-url>
cd laburator
# Install with pip (editable, recommended)
pip install -e .
# Or with uv
uv pip install -e .
# Verify it works
laburator --help
Setup
Copy .env.example to .env and fill in your API keys:
cp .env.example .env
API Keys
Laburator requires two API keys. Both go in the .env file.
OpenCode Zen (LLM)
Used to generate CVs, cover letters, analysis, etc.
- Go to https://opencode.ai/zen and sign up.
- Once logged in, create an API key from the dashboard.
- Copy it into
.envasMODEL_API_KEY.
The endpoint and model are preconfigured in .env.example:
MODEL_API_KEY=sk-...
MODEL_API_ENDPOINT=https://opencode.ai/zen/v1
MODEL_NAME=deepseek-v4-flash-free
jsearch API (job search)
Used to fetch live job listings.
- Go to https://openwebninja.com and sign up.
- Subscribe to the jsearch API plan (free tier: 200 requests/month).
- Copy your API key into
.envasJOB_SEARCH_API_KEY:
JOB_SEARCH_API_KEY=ak_...
CV
Create your own cv.md at the project root with your personal experience, skills, and education. This is used by the LLM to tailor CVs, cover letters, and interview questions for each job.
A sample is provided as reference:
cp cv.md.example cv.md # then edit it with your own data
The CV supports any markdown content — sections like Summary, Experience, Education, Skills, and Languages are all parsed and passed as context to every skill.
LLM Wiki (optional)
If you have reference knowledge — technical notes, company background, industry research — you can place .md files in ~/Proyectos/llmwiki/wiki/ (or the path configured as LLMWIKI_DIR in .env). These files are loaded and injected into every skill prompt as supplementary context, giving the LLM more relevant background to work with.
Skills (custom prompts)
Skills are markdown files containing the system prompt for each LLM call. Built-in skills ship with the package:
| File | Generates |
|---|---|
jobsynthesis.md |
Job analysis |
createcv.md |
Tailored CV |
presentationletter.md |
Cover letter |
interviewquestions.md |
Interview Q&A |
To customise a skill, create ~/.config/laburator/skills/<name>.md with the same filename — it will take precedence over the built-in. For example:
mkdir -p ~/.config/laburator/skills
# Override the CV prompt
cp src/laburator/skills/createcv.md ~/.config/laburator/skills/
# Now edit ~/.config/laburator/skills/createcv.md to your liking
Every skill call receives the job listing (JSON), your CV, and the wiki knowledge base as context automatically.
Output
Results are saved under ~/.local/share/laburator/output/, organized by date:
~/.local/share/laburator/output/
├── cache/ # cached job listings (JSON)
│ └── python-developer/
│ └── jobs.json
└── 2026-06-19/ # one folder per run date
├── ait-python-developer/ # one folder per job
│ ├── job.md # job analysis (skills, summary)
│ ├── cv.md # tailored CV
│ ├── presentation.md # cover letter
│ └── interview.md # interview questions
├── randstad-usa-senior-full-stack-python-developer/
│ └── ...
└── ...
Files appear in real time as each skill completes — you don't have to wait for the full pipeline to finish.
Usage
# Search for jobs (fetch-only, no LLM calls)
laburator search "python developer" --pages 1 --remote
# Run the full pipeline: fetch + LLM analysis + output files
laburator synth "python developer" --pages 1 --remote
# List cached searches
laburator list
# Run a single skill on a cached job
laburator run <job-id> --skill createcv
# Show configuration
laburator config
Verification
Run laburator config to confirm both keys are loaded (they'll be partially masked in the output).
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file laburator-0.1.0.tar.gz.
File metadata
- Download URL: laburator-0.1.0.tar.gz
- Upload date:
- Size: 15.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.8.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
19d11053e63f7dc2bdc744118be6e9c4dd83b0f5641d8204a540c636761f533d
|
|
| MD5 |
15e423bd27baf12dd2fd17a80780ad22
|
|
| BLAKE2b-256 |
299f04bb07d3380ff6c4b647f728411ef35d41f77bc5b6c23e6bd28870ff5279
|
File details
Details for the file laburator-0.1.0-py3-none-any.whl.
File metadata
- Download URL: laburator-0.1.0-py3-none-any.whl
- Upload date:
- Size: 22.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.8.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a78a1fc6e6b187d6cff494fb95dac2914c5f31eb2ac63a58443e6dce2e65007b
|
|
| MD5 |
426f3da62ca617e51220fe4769fa6183
|
|
| BLAKE2b-256 |
d57115cdcabf43fb7ce4dd0c5f909873a16ede333265250e4260ffe72cce8d3a
|