
jobsmart
A terminal-native career command centre that turns a CV into a targeted job pipeline.
Why this exists
Job hunting is opaque, manual, and generic. Every board returns the same blob of weakly-tagged listings; tools that promise to help want you to upload your CV to their servers and pay a subscription to read what they think of it. The brief was the opposite: a single binary that runs in your terminal, owns the loop end-to-end, and writes every artefact to a folder you can `git diff`.
The proof point
A CV is enough to derive *boolean* candidate criteria — assertions the system can match against any job description without an opinion of what a “good” candidate looks like. Pair that with a two-engine pipeline (cheap broad discovery, expensive narrow assessment) and per-job markdown artefacts, and the same pattern is the right shape for any internal “LLM-as-judge” workflow inside an enterprise.
How it works
jobsmart is a single Rust binary with a slash-command REPL. There is no server, no background daemon, no broker — `rustyline` handles line editing and history, `shell-words` does shell-style argument parsing, and one big match statement in `repl/dispatch.rs` routes each command into a thin orchestrator. The dependency direction is strictly downward: commands call into domain, storage, AI, and discovery — never the other way around.
`/profile build --cv <path>` extracts boolean criteria from the user’s CV — eight assertions across five categories (identity, domain, capability, technology, role level) plus two search angles with target titles and negative terms. Those JSON files feed every downstream stage: discovery uses them to filter, scoring uses them to weight, assessment uses them to grade. The system has no built-in opinion of merit; it inherits the user’s.
Each project tree gets its own `.jobsmart/` (auto-created on `/init`, git-style walk-up from `cwd`) with a SQLite database and an `applications/<slug>/` folder. Per-job artefacts — `job.md`, `fit-analysis.md`, `brutal-assessment.md`, `resume-tailored.md`, `cover-letter.md` — are written as plain markdown. Every `--llm` flow has a deterministic fallback so the system is usable offline, and the global workspace at `~/.jobsmart/` holds the API key and CV once for every workspace to share.
Architecture
What an architect can take from it
- 01Criteria-as-data beats hand-written rules. Boolean assertions with evidence and negative terms are auditable, swappable, and make the system honestly multi-tenant.
- 02Two-engine pipelines — cheap broad discovery + expensive narrow verdict — are the right shape for any “LLM-as-judge” workflow. Run the cheap engine often; run the expensive engine on the shortlist.
- 03Deterministic fallbacks aren’t a nicety; they are the contract that lets you ship AI features without provider outages becoming product outages.