Skip to content
Deterministic where possible. AI only where it reasons.

An AI-powered, deterministic job discovery engine.

CareerOS finds jobs, scores them against your real experience, and writes the results into a Google Sheet you open every morning. Not an application bot.

terminal
$ git clone https://github.com/vbkatarnaware/careeros
$ pip install -e .
$ careeros start # build your profile, once
$ careeros daily # discover, score, and fill your Sheet
careeros daily — 7 parallel gate batches, live
Real output from a real run: seven background agents reasoning over one job each in parallel — including catching an embedded prompt-injection attempt in a job posting and ignoring it, unprompted.

Why CareerOS exists

Most AI job tools fail in one of two ways.

They spam applications with generic resumes. Or they burn expensive AI calls evaluating and writing long reports for every job they find — most of which you will never apply to.

CareerOS is built around one rule: use deterministic code wherever possible, and AI only where reasoning genuinely adds value. The KPI is simple — more interviews, for the least amount of AI and compute cost. A day with zero interview-worthy jobs is a legitimate outcome, never a reason to lower the bar.

The pipeline

Cheap, deterministic filtering first. Expensive reasoning last.

Each stage reads one file and writes the next. A job is only shown a model once it has survived every step that costs nothing.

Explore each stage
01 Deterministic

Discover

Query every enabled provider with one segmented search per work-mode tier, then merge the results.

02 Deterministic

Constraints

Hard-reject on the two objective deal-breakers — location and salary — before a single token is spent.

03 AI reasoning

AI Gate

A cheap, batched keep/drop triage against your headline and targets. Biased to keep — recall over precision.

04 AI reasoning

Evaluate

The one real reasoning step. Scores each surviving job against the rubric and writes structured JSON only — no long report.

05 Deterministic

Threshold

Partition evaluated jobs into two tiers and re-check the hard constraints as a backstop.

06 Output

Application Package

Draft answers to a form's real questions, render a zero-cost daily report from the eval JSON, and append a row per job to your Google Sheet.

Selector, not writer

Two files. Everything else is a derivation.

Everything CareerOS generates traces back to exactly two files: your profile.yaml — your facts, written once — and each job's evaluation JSON, its fit judgment, written once by the evaluate stage.

A resume never invents a bullet. A cover letter never claims something not in your profile.

profile.yaml Source of truth

Your verbatim experience, targets, and constraints. Generated once via careeros start, edited rarely.

derives, never re-derives
resume.md + cover.md, written live
A deterministic check refuses to cache a resume whose lines don't verbatim-match your profile — this is that write, unedited. The daily report and application answers derive the same way.

Not a mockup

Watch it actually run.

Real terminal output from a real careeros daily run — unedited, including where the pipeline pushes back.

gate stage — 7 parallel agents
Seven background agents dispatched at once, each reasoning through its own batch of jobs — with live token and time counters, not a progress bar.
apply stage — a dead listing
Egnyte's posting had expired. Per the apply prompt's rule, CareerOS won't invent answers for a listing that no longer exists — it flags it and moves on.

What makes it different

Architecture decisions you can read end to end.

A deterministic pipeline

Discovery, dedupe, constraints, thresholding, and the daily report are plain Python. Zero tokens spent before a job earns them.

AI only where it reasons

Two model calls that need judgment: a cheap keep/drop gate, and one real evaluation per job that survives it. Nothing else.

Two sources of truth

Your profile facts and each job's evaluation are written once. Every resume, cover letter, and report is a derivation, never a re-derivation.

Everything is cached

Each AI output is fingerprinted by job, profile version, and prompt version. Re-run a day with nothing changed and it costs zero calls.

CLI-agnostic by construction

The host coding agent is both runtime and model. Runs under Claude Code, Codex, Gemini CLI, or OpenCode without changing a line.

No server, no database

The filesystem is the message bus. Every stage reads one JSON file and writes another, so every run is inspectable and resumable.

Open source, MIT-licensed, and honest about what it does.

Read the code, run it locally, and see every decision for yourself.