CareerOS v1.0.0
CareerOS v1.0.0
An AI-powered, deterministic job discovery and recommendation engine.
Deterministic where possible, AI only where reasoning adds value.
This is the definitive v1.0.0 — hardened through a full production audit
(P2.8) after the initial public commit, with discovery now permanently
frozen on evidence.
Highlights
- End-to-end daily pipeline: discover → normalize → dedupe → constraints →
AI gate → evaluate → two-tier threshold → resume/cover artifacts → daily
report → Google Sheets — driven from your host coding CLI (Claude Code,
Codex, Gemini CLI, etc.), zero server, zero database. - Discovery (frozen default): queries both Fantastic Jobs endpoints —
active-ats(career sites/ATS) andactive-jb(+LinkedIn/YC/Wellfound) —
every run, splitting the record budget 50/50 rather than doubling it.
Backed by a full 107-job production acceptance audit: the two sources
score a statistically equal ~8% ≥4.0 rate but are 92% disjoint, so
querying both roughly doubles interview-worthy jobs found at the same
quota cost. A single endpoint remains selectable via config. - Quota guard: recommends a daily discovery limit from your plan/quota/
goal, warns before exhaustion, and never silently overrides your
configured limit — fully config-driven, no hardcoded numbers. - Two-tier selection: jobs scoring ≥ threshold (default 4.0) get the
full pipeline (resume, cover, report, Drive, Sheet row); jobs in the
Consider band (default 3.5–3.9) get a Sheet row with score + a concise
reason only — no AI artifacts, no Drive cost — so near-misses stay
visible for free. - Profile-driven segmented discovery — one query per work-mode tier instead
of a single broad fetch. - Cache-everything AI stages, fingerprinted on job content + profile version
- prompt version — an unchanged re-run costs zero tokens.
- Optional Google Drive backup of shortlisted artifacts, additive and off
by default. New step-by-step setup guide:docs/google-setup.md. - 204 tests, including a parity test proving the REST and legacy-actor
providers map identical raw data to an identicalJobshape, and a
regression suite for the two-tier selection, quota guard, and Sheets
schema-migration logic.
What changed in the P2.8 hardening pass
- Fixed a real Sheets bug: dedup and row-writes now key columns by header
name, not position, with additive self-healing migration for sheets
created under an older column layout (dedup was silently broken on drift). - Fixed the day-level summary re-deriving Apply/Consider from raw evals
independently of the actual selection — it now renders the same
partitioned lists the pipeline already computed, so the report can never
disagree with what's in your Sheet. - Fixed the quota guard crashing
discoveron a non-ISO--datelabel. - Removed dead code found during the audit (an unused selection function,
unused helper constants) and corrected several stale docs.
Installation
pip install -e .
See the README for Quickstart and provider setup.
Advanced configuration
The default REST provider supports two interchangeable transports for the
same Fantastic Jobs dataset: the direct API
(developer.fantastic.jobs) or RapidAPI's
"Active Jobs DB" listing — pick whichever fits your pricing/free-tier needs
via config.api.transport. Discovery endpoint (both/active-ats/
active-jb) and the quota guard's plan/limit are also configurable — see
careeros/providers/README.md and templates/config.example.yaml.
Discovery is now frozen
No further discovery changes (endpoint, query strategy, provider set) unless
a production issue is found. Future work moves to P3 (outcome tracking) and
the v1.1 onboarding/Drive+PDF overhaul.