Skip to content

Latest commit

Β 

History

51 Commits

Folders and files

NameName
Last commit message
Last commit date
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

HireLens Banner

License: MIT Rust Edition Build Tests Offline Status


[ πŸ‡¬πŸ‡§ English Β |Β  πŸ‡«πŸ‡· Lire en FranΓ§ais ]


⚠️ This project is under active development. Expect breaking changes.

What is HireLens?

HireLens is a production-grade CLI tool that analyzes CVs against job descriptions using ATS scoring and AI assistance β€” and produces optimized CVs without hallucinations.

The core principle: LLMs only return structured JSON. Rust validates every adaptation and renders the final CV. No AI-invented skills. No fabricated experience. Ever.


✨ Features

Feature Description
🎯 ATS Scoring HashSet-based skill matching with a normalized 0–100 score
πŸ€– Multi-Provider LLM OpenAI, Ollama, LM Studio β€” switch with one flag
πŸ”’ Anti-Hallucination Every adapted skill and bullet is validated against the original CV
πŸ“΄ Offline Mode Full audit and adaptation without any LLM call
πŸ’Ύ Smart Cache SHA-256 hashed LLM responses stored in .cache/
πŸ” Privacy-First Local-only mode with Ollama or LM Studio
πŸ“„ Clean Export Markdown output rendered by Rust templates; optional PDF via Pandoc
πŸ“Š JSON Output Machine-readable --json flag for CI/CD pipelines

πŸ— Architecture

src/
β”œβ”€β”€ cli/        # clap-based commands: audit, adapt, build
β”œβ”€β”€ llm/        # LLM trait + OpenAI / Ollama / LM Studio providers
β”œβ”€β”€ core/       # ATS scoring, skill extraction, validation, pipeline
β”œβ”€β”€ parser/     # Markdown + YAML frontmatter CV parser
β”œβ”€β”€ export/     # Rust template renderer + Pandoc PDF bridge
└── utils/      # Config loader (TOML + env), SHA-256 cache

Pipeline:

CV (Markdown+YAML) ──► Parse ──► Extract skills (LLM β†’ JSON)
                                        β”‚
Job description ────► Parse ──► ATS Score (Rust)
                                        β”‚
                              Generate adaptation (LLM β†’ JSON)
                                        β”‚
                              Validate (no new skills allowed) ◄── REJECT if hallucinated
                                        β”‚
                              Render final CV (Rust template)
                                        β”‚
                              Markdown / PDF output

πŸš€ Installation

Prerequisites: Rust toolchain 1.75+

git clone https://github.com/Rwanbt/HireLens.git
cd HireLens
cargo build --release
# Binary: ./target/release/hirelens

Add to your PATH:

# Linux / macOS
export PATH="$PATH:$(pwd)/target/release"

# Windows (PowerShell)
$env:PATH += ";$(pwd)\target\release"

πŸ“– Usage

audit β€” ATS analysis

# Human-readable report (offline, no LLM needed)
hirelens audit examples/cv.md examples/job.txt --offline

# JSON output for CI/CD
hirelens audit examples/cv.md examples/job.txt --offline --json

# Fail if score is below threshold
hirelens audit examples/cv.md examples/job.txt --offline --min-score 70

Example output:

ATS audit

Score: 63/100
Skill match: 62%

Matched skills: docker, kubernetes, postgresql, rust, tokio
Missing skills: ci/cd, llm, rest

adapt β€” Optimized CV generation

# Adapt with offline extraction
hirelens adapt examples/cv.md examples/job.txt --offline --output optimized-cv.md

# Show diff between original and adapted CV
hirelens adapt examples/cv.md examples/job.txt --offline --diff --min-score 60

# Use a cloud LLM
hirelens adapt examples/cv.md examples/job.txt --provider openai --output optimized-cv.md

build β€” Clean CV rendering

# Render to Markdown
hirelens build examples/cv.md --output cv.md

# Render to PDF (requires Pandoc)
hirelens build examples/cv.md --output cv.pdf --pdf

gui β€” Graphical interface

hirelens gui

serve β€” Local web server

hirelens serve                   # Start on http://localhost:8080
hirelens serve --port 3000       # Custom port
hirelens serve --open            # Open browser automatically

Single-page app (dark theme) with audit + adaptation. Useful for quick ad-hoc use without launching the full GUI.


πŸ€– LLM Providers

Provider Flag Default URL Auth
OpenAI --provider openai https://api.openai.com/v1 OPENAI_API_KEY env var
Ollama --provider ollama http://localhost:11434 None
LM Studio --provider lmstudio http://localhost:1234/v1 None
Gemini GUI only https://generativelanguage.googleapis.com OAuth2 PKCE (βš™οΈ Settings panel)
# OpenAI
export OPENAI_API_KEY="sk-..."
hirelens audit cv.md job.txt --provider openai

# Ollama (requires Ollama running locally)
hirelens audit cv.md job.txt --provider ollama

# LM Studio (requires LM Studio server running)
hirelens audit cv.md job.txt --provider lmstudio

βš™οΈ Configuration

Copy the example config and edit:

cp hirelens.example.toml hirelens.toml
# hirelens.toml
provider = "ollama"       # default provider
offline = false           # privacy-first offline mode
cache = true              # cache LLM responses
cache_dir = ".cache"
timeout_seconds = 60

[openai]
model = "gpt-4o-mini"
base_url = "https://api.openai.com/v1"

[ollama]
model = "llama3.1"
base_url = "http://localhost:11434"

[lmstudio]
model = "local-model"
base_url = "http://localhost:1234/v1"

Environment variable overrides:

Variable Description
OPENAI_API_KEY OpenAI API key
OPENAI_MODEL Override OpenAI model
OLLAMA_MODEL Override Ollama model
OLLAMA_BASE_URL Override Ollama URL
LMSTUDIO_MODEL Override LM Studio model
LMSTUDIO_BASE_URL Override LM Studio URL
HIRELENS_CONFIG Path to custom config file

πŸ”’ Anti-Hallucination System

HireLens enforces strict rules at every stage:

  1. JSON-only LLM output β€” the model is constrained to return structured JSON, never free-form text
  2. Skill whitelist β€” every skill in the adapted output must exist in the original CV
  3. Bullet validation β€” every adapted bullet must be traceable to an original bullet
  4. Rust rendering β€” the final CV text is assembled by Rust templates, not by the LLM
  5. Diff visibility β€” --diff flag exposes every change between original and adapted output
Original CV skills: [Rust, Docker, Kubernetes, PostgreSQL]
LLM proposes:       [Rust, Docker, Kubernetes, PostgreSQL, Go]  ← REJECTED
Validated output:   [Rust, Docker, Kubernetes, PostgreSQL]      βœ“

πŸ§ͺ Tests

cargo test
# 28 tests passed β€” cli, llm, core, parser, export, utils

πŸ“‹ CV Format

HireLens expects a Markdown file with a YAML frontmatter block:

---
name: Jane Doe
headline: Senior Backend Engineer
summary: Systems engineer focused on reliable distributed systems.
skills:
  - Rust
  - Docker
  - Kubernetes
experience:
  - id: exp-1
    company: Acme Corp
    role: Backend Engineer
    start: "2020"
    end: Present
    bullets:
      - Built microservices with Rust and Tokio.
education:
  - institution: MIT
    degree: B.S. Computer Science
    year: "2018"
---

πŸ“„ License

MIT β€” Β© 2026 HireLens


About

Hybrid AI-powered CV optimization engine with strict anti-hallucination validation

Resources

Contributing

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages