Skip to main content

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.

  1. Go to https://opencode.ai/zen and sign up.
  2. Once logged in, create an API key from the dashboard.
  3. Copy it into .env as MODEL_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.

  1. Go to https://openwebninja.com and sign up.
  2. Subscribe to the jsearch API plan (free tier: 200 requests/month).
  3. Copy your API key into .env as JOB_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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

laburator-0.1.0.tar.gz (15.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

laburator-0.1.0-py3-none-any.whl (22.7 kB view details)

Uploaded Python 3

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

Hashes for laburator-0.1.0.tar.gz
Algorithm Hash digest
SHA256 19d11053e63f7dc2bdc744118be6e9c4dd83b0f5641d8204a540c636761f533d
MD5 15e423bd27baf12dd2fd17a80780ad22
BLAKE2b-256 299f04bb07d3380ff6c4b647f728411ef35d41f77bc5b6c23e6bd28870ff5279

See more details on using hashes here.

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

Hashes for laburator-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 a78a1fc6e6b187d6cff494fb95dac2914c5f31eb2ac63a58443e6dce2e65007b
MD5 426f3da62ca617e51220fe4769fa6183
BLAKE2b-256 d57115cdcabf43fb7ce4dd0c5f909873a16ede333265250e4260ffe72cce8d3a

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page