Skip to content

How JobCtrl Compares

JobCtrl, Career-Ops, JobOps, and AI Job Search address the same broad problem through four different operating models. Across the capabilities reviewed here, JobCtrl is the only option that combines a supported graphical product, durable workflows, deterministic source-to-claim grounding gates, and guarded submission paths. The competitor snapshots were last reverified on 2026-08-12. JobCtrl's reviewed snapshot was advanced on 2026-08-15 during conflict resolution to incorporate the shipped missing-salary intelligence shown below. The snapshot method pins every open-source claim to an immutable commit.

Four operating models

Files + coding CLIs

Career-Ops

Web UI: opt-in alpha

Human-readable Markdown, YAML, and TSV files drive modes run through several AI coding CLIs.

  • A terminal dashboard is established; the optional Next.js UI remains alpha.
  • Freshness, company exclusions, spend tiers, and a candidate fact gate now strengthen the file-first workflow.
  • Application autofill stops before the user clicks Submit.

Gap versus JobCtrl: the operator experience remains file- and CLI-first, the optional web UI is alpha, and interrupted work has no durable workflow engine.

Open the evidence matrix →

Self-hosted web application

JobOps

Supported web UI

A React and Express application backed by SQLite, packaged for Docker self-hosting with an optional hosted service.

  • Searches multiple boards, scores roles, tailors structured resumes, renders PDFs, and tracks applications.
  • High-confidence Gmail matches update the timeline automatically; uncertain matches go to review.
  • Applications remain manual, and running pipelines do not survive a server restart.

Gap versus JobCtrl: no deterministic candidate source-to-claim gate, durable workflow history, or exact-approval submission path was evidenced in the reviewed snapshot.

Open the evidence matrix →

Claude Code workflow

AI Job Search

Generated HTML dashboard

Claude Code commands and skills coordinate local utilities and a LaTeX-first application workflow.

  • The drafter-reviewer path produces CV, cover-letter, and PDF artifacts.
  • Optional Gmail and Notion sync commands extend its local tracker.
  • Submission remains a user handoff after document preparation.

Gap versus JobCtrl: no stateful graphical product, browser-form assistance, or checkpointed apply recovery was evidenced in the reviewed snapshot.

Open the evidence matrix →

At a glance

Selected differences between the four reviewed job-search tools
CapabilityJobCtrlCareer-OpsJobOpsAI Job Search
Primary surfaceWeb app + local API/worker; supporting CLIFiles + AI coding CLIs; terminal dashboardSelf-hosted web app + local API and SQLiteClaude Code commands/skills + local utilities
Graphical UISupported product surfacePartial: optional Next.js alphaSupported product surfacePartial: generated offline HTML dashboard
Tailored documentsResume, cover letter, HTML, and PDFCV/HTML/PDF and cover letterStructured resume tailoring and PDFLaTeX CV, cover letter, and PDF
Submission boundaryDry run + guarded browser/Gmail paths; approval on by defaultForm autofill; the user clicks SubmitPrepared materials; the user applies manuallyReviewed documents; the user submits
Interrupted workTemporal history, retries, and stable workflow identitiesFile integrity + resumable batch flags; no workflow enginePersisted run records; active run state is in memoryNo checkpointed apply resumption evidenced
Application-level cost controlDaily estimated-spend ceilingSpend tiers, batch pre-screen/cap, dry run, and resume controlsHosted action quotas; no self-hosted spend ceiling evidencedToken-efficiency instructions; no app-level budget evidenced

The compact view highlights operating-model differences. The full evidence matrix preserves the qualifications, issue evidence, and source links behind every row.

What changed since 2026-07-20

All three previously reviewed projects moved materially, and JobOps now belongs in the main matrix as a closer graphical alternative. These are changes between exact Git snapshots, not deductions from mutable marketing pages.

ProjectVerified additionsEffect on this comparison
JobCtrlAcross 246 commits, it activated the exact-v8 data model through a sealed v7 transition, added canonical job identity, repeat-application prevention, reviewed learning recommendations and tailoring-policy rollback, more durable preparation recovery, richer workflow cancellation/progress, browser-profile selection, and automatic lineage-preserving compensation benchmarks.The supported graphical, auditability, durable-recovery, and missing-salary intelligence assessments are stronger. The product still requires Apple-silicon macOS for its public bundled installation.
Career-OpsAcross 413 commits, it expanded to 74 provider modules, added outcome archives, follow-up and reply tooling, offer-stage support, application-email drafts, more languages, context-budget controls, and a fact gate that now covers selected employers, titles, tools, and metric-like claims.Discovery and post-application support are substantially stronger. Grounding remains Partial because the gate still does not prove every generated claim, and full faithfulness plus final rendered keyword coverage remain open.
JobOpsThe newly added 2026-08-12 snapshot provides a supported React/Express UI, multi-board discovery, AI scoring, structured resume tailoring, PDF generation, a Gmail outcome inbox, and Docker self-hosting.JobOps is the closest reviewed graphical alternative. It narrows JobCtrl's UI advantage, but its active pipeline state is process-local, candidate grounding is prompt-based, and its AGPLv3 distribution carries the additional Commons Clause restriction.
AI Job SearchAcross 76 commits, it added work-authorization and language gates, optional application-form artifacts, posting archives, follow-up drafting, portal-health safeguards, custom-portal hardening, and release-aware fork update tooling.Evaluation and post-application continuity are stronger. The generated-dashboard, manual-submission, interruption-recovery, and application-level cost-control assessments do not change.

Adjacent market watch

JobSync also moved materially across 178 commits, adding automated discovery, resume review and job-match tools, cover-letter generation, and an in-product agent chat. It remains on the adjacent watchlist because its primary product is a self-hosted application tracker and career assistant rather than the same guarded, durable end-to-end execution model. Commercial tools are excluded from this source-level delta because they do not expose equivalent immutable code snapshots.

JobCtrl's UI is part of the product

JobCtrl's web app is the supported operator surface, not an optional viewer. It can start work, edit and approve materials, show requirement-level evidence, and follow durable runs as server-side changes arrive.

JobCtrl dashboard showing pipeline progress, job counts, source health, and apply runs

All screenshots use synthetic sample data. Open the Product Tour for the complete Profile → Discovery → Pipeline → Jobs → Apply Review → Runs workflow, including job-detail evidence and resume editing.

Appendix: evidence-backed capability matrix

CapabilityJobCtrlCareer-OpsJobOpsAI Job Search
Primary experiencePresent. A local product composed of a React client, TypeScript API, Python worker, Temporal workflows, and a supporting CLI. See Runtime & Processes.Present. A file-first system whose Markdown modes run through several AI coding CLIs. Agent-driven modes remain the broadest path, with standalone scripts for scanning, evaluation, tailoring, PDF generation, and tracking. ArchitecturePresent. A React/Vite client and Express API backed by SQLite, packaged for Docker self-hosting and also offered as a hosted instance. ArchitecturePresent, intentionally narrow. A Claude Code command-and-skill framework with Python/Bun utilities and LaTeX output. PDF/LaTeX remains the verified first-class document path. Source
Graphical user interfacePresent — supported product surface. The React/Vite SPA is the main control plane, not an optional viewer. It provides Profile, Discovery, Pipelines, Dashboard, Jobs and job-detail audit, Apply Review with rich-text resume editing, Runs, Artifacts, Evidence, Analytics, Outreach, Preferences, and Debug views, with API mutations and SSE-driven refresh. See the screenshot-backed Product Tour and Frontend Architecture.Partial — alpha. The established UI is a Go terminal dashboard. The optional Next.js web UI reads and writes the same local files, but its own README remains alpha and an open defect can resolve a tracker row to the wrong report (issue #1623). Alpha READMEPresent — supported product surface. The primary Orchestrator UI manages discovery, tailoring, PDFs, application states, notes, and post-application handoff. OrchestratorPartial — generated report. /html-report creates a self-contained offline HTML dashboard with stat cards, charts, and a filterable application table. It is regenerated output rather than a stateful application surface. Command
Job discoveryPresent. Configured sources feed a durable discovery and preparation pipeline; optional scheduling is off until enabled, and manual browser capture is also supported. See Pipeline Operations and Daily Workflow.Present. A zero-token scanner reads open, no-auth ATS and board sources through 74 provider modules, with liveness, freshness, deduplication, health, and blacklist controls. Providers, scannerPresent. The application searches LinkedIn, Indeed, Glassdoor, and more than ten other boards, then imports results into its pipeline. Supported boardsPresent. /scrape searches and deduplicates through market-specific portal skills; shipped portals are Denmark-centered, with broader Freehire and LinkedIn starting points plus a custom-portal generator. Source
Missing-salary intelligencePresent — auditable numeric range. JobCtrl preserves employer-posted, direct-market, and extrapolated benchmarks as separate authorities. Discover automatically refreshes missing or seven-day-old role-family, level, and country slices. A missing country can use official price levels and evidence-weighted same-company cross-country ratios; the UI exposes the exact anchor, inputs, raw factor, freshness, confidence, and review bounds. See Compensation Evidence.No automatic missing-range estimate. Career-Ops performs bounded salary research during evaluation, but if the posting lacks an advertised number it explicitly collapses the compensation output and skips detailed market rows; machine state records advertised_comp as null rather than substituting research. Evaluation boundary, machine-summary ruleAdvertised values only. Its job record stores crawler-provided salary text and JobSpy range fields; deduplication retains the first non-null values, but the snapshot does not evidence automatic benchmark discovery or geographic extrapolation. Job fields, merge behaviorBYO data only. Its optional salary lookup reads a user-supplied dataset and the apply workflow skips salary benchmarking when none is configured; the reviewed snapshot does not evidence automatic missing-range discovery or geographic extrapolation. Salary benchmark tool
Fit evaluationPresent. An LLM-produced 1–10 fit score is governed by a versioned rubric; the stored result includes criteria, requirement-level evidence, gaps, blockers, confidence, and model/prompt trace metadata. See Scoring.Present. The AI produces a structured 1–5 evaluation; the per-job workflow maps requirements to exact CV lines, records gaps, and saves the result as a report. Scoring, evaluationPresent. The AI produces a 0–100 suitability score and reason from the candidate profile, listing, and configurable scoring instructions; job-fact corrections require exact listing evidence. Scoring prompt, fact reviewPresent. The AI scores technical skills, experience, behavioral fit, and career alignment with fixed weights, while location, language, and work authorization can act as gates; strengths and gaps accompany the score. Source
Tailored documentsPresent. JobCtrl generates reviewable resume, cover-letter, HTML, and PDF artifacts for a selected job. See Tailoring Contract.Present. Career-Ops generates tailored CV/HTML/PDF, cover-letter, and application-email drafts through agent-driven modes or standalone paths, with custom templates supported. FeaturesPresent. JobOps tailors a structured resume's headline, summary, skills, and selected projects, then renders a PDF through its configured local or Reactive Resume path. Prompt, tailoring transformPresent. /apply drafts a LaTeX CV and cover letter, sends both through a second-agent review, and compiles and inspects both PDFs; custom templates can be registered. Source
Grounding and output validationPresent. Resume bullets carry source provenance; deterministic fabrication and claim-grounding gates can reject a candidate; keyword coverage is checked against rendered output. See Tailoring Contract.Partial, strengthened. A zero-LLM gap check separates supported requirements from genuine gaps, and a hard pre-PDF gate rejects selected employer, title, tool, and metric-like claims absent from configured sources. It remains narrower than full source-to-claim faithfulness, and rendered keyword coverage is not fail-closed (issues #1411 and #1285). Fact gatePartial. The tailoring prompt says not to invent experience and constrains project selection to stored projects, but the snapshot does not evidence a deterministic source-to-claim validator or per-claim provenance for generated candidate text. Tailoring prompt, project selectionPartial, strengthened. The drafter and reviewer audit dates, roles, metrics, and claims against profile sources, while the compiled PDF's ATS text and truthful requirement coverage are checked. These remain agent instructions and document checks rather than a deterministic source-to-claim provenance gate. Workflow
Local data and external processingPresent. The database, configuration, generated files, logs, and browser state are local. Selected workflows send necessary content to configured LLMs, job sources, Gmail, CAPTCHA, Maps, or telemetry services. Local data is not encrypted. See Data, Privacy & Safety and What Leaves Your Machine.Present. Human-readable Markdown/YAML/TSV files are canonical and SQLite is a derived index; no hosted account is required. AI content goes to the provider chosen through the user's CLI, and local-model paths are available. ArchitecturePresent, with hosted and integration paths. Self-hosted state uses local SQLite and generated files. Configured LLMs, job boards, Gmail, optional Reactive Resume, anonymous analytics, or the optional hosted service can cross that boundary. Architecture, service and analytics disclosuresPresent, with optional publishing. Profile sources, generated LaTeX/PDFs, a CSV tracker, and application archives live in the user's fork. /notion-sync publishes selected tracker metadata; /gmail-sync reads Gmail and proposes local changes after review. Commands
Application assistance and submission boundaryPresent. The browser path runs transport-locked rehearsals and leaves final browser submit to the user. The owned Gmail path can send only an exact-approved recipient/attachment candidate, with submit intent recorded immediately before the send. See Approval And Control Gates.Present. The apply assistant can fill supported ATS fields, but the user reviews the form and clicks Submit; the project states that it never submits, sends, or clicks on the user's behalf. BoundaryPartial. JobOps prepares tailored materials and opens the application target, but states that the user applies manually; no form-filling or owned submission path was evidenced. SourcePartial. /apply prepares reviewed CV and cover-letter files, then hands submission to the user; browser-form filling or submission is not evidenced. Source
Post-application and coachingPresent. JobCtrl records outcomes and supports grounded, stored interview preparation in Beta, contact research, outreach drafts, and follow-up reminders; it is not a live interview assistant and does not send outreach. See Daily Workflow and Responsible Use Boundaries.Present, expanded. Outcome archives, follow-up and reply tooling, interview preparation, company and compensation analysis, contact research, offer-stage support, and negotiation scripts are shipped. The broader closed learning loop remains open (issue #1724). Outcome mode, featuresPresent. Gmail messages are matched to jobs; high-confidence matches update timelines automatically, while uncertain matches enter a review queue. Tracking InboxPresent. /outcome archives results and feeds calibration; /interview prepares for stages; /upskill creates a gap plan; /gmail-sync proposes status changes for approval. Commands
Interruption and recoveryPresent. Long-running work uses Temporal histories, retries, heartbeats, and stable workflow identities; ambiguous owned-send results park for human verification instead of risking a duplicate. See Runtime & Processes and Browser Final Submit Is Not Delegated.Partial. Canonical files, integrity tools, locks, and resumable batch flags preserve some progress, but there is no durable workflow engine. Architecture, batch recoveryPartial. Run records and job states persist in SQLite, but active, paused, and cancellation state is process-local; the source explicitly says a server restart kills a running or paused pipeline. Pipeline stateNot evidenced. Commands write final artifacts, sync state, and outcome history, but the snapshot does not document checkpointed resumption or durable retry for an interrupted /apply run. Workflow
LLM cost controlsPresent. A configurable daily estimated-spend ceiling runs a preflight before spendful workflows and exposes the estimate in health status; it is not provider billing truth. See Daily LLM Spend Ceiling.Partial, expanded. Users can choose hosted or local models, select spend tiers, pre-screen batches, cap/dry-run/resume work, and compress lower-priority context. There is still no application-wide dollar ledger or ceiling. Budget guide, context budgetPartial. Hosted instances can enforce monthly action quotas, but no self-hosted estimated-spend ledger or ceiling was evidenced. Hosted quotasNot evidenced. The workflow includes token-efficiency instructions but no application-level budget or spend ledger. Source
Source licenseOpen source. AGPL-3.0-only.Open source. MIT.Source available with an additional restriction. The repository combines AGPLv3 with the Commons Clause, which restricts selling the software or a service whose value derives substantially from it. License.Open source. MIT.

Snapshot and delta method

Repository claims were rechecked against default-branch source and documentation at these immutable commits:

ProjectPrevious reviewed snapshotReviewed snapshotReviewed on
JobCtrl446056bb4063e12026-08-15
Career-Ops16367ad03fc92b2026-08-12
JobOpsNot previously includedc834c652026-08-12
AI Job Searchfaa4799670d30a2026-08-12

The dates above are per-project review dates, not claims that every upstream default branch was current on the other projects' review dates. A feature counts as present only when its reviewed snapshot contains an implemented command, product surface, runtime path, or documented generated artifact. Open issues qualify limitations; they do not count as shipped roadmap features. Commercial tools remain outside the snapshot matrix because they do not expose equivalent immutable source evidence.