Skip to content

utkarshpophli/career-ops

v1.38.0MIT

Open-source AI job search agent: finds openings at the companies you choose, scores each job posting against your CV (1-5, A-H report), tailors your CV and cover letter, preps interviews and tracks applications. Runs locally; you press Submit.

career-ops

Open-source AI job search that runs locally: scan job portals, evaluate listings into a structured A-H report with a 1-5 score, tailor your CV and track your applications. Your CV, reports and tracker are files on your machine.

This is the career-ops plugin for the OpenAI plugin directory, for ChatGPT and Codex. Project home: https://github.com/career-ops-hq/career-ops

How it works

The plugin adds one skill, career-ops. The skill is a router: the modes, scripts and rules it follows live in a career-ops folder on your machine.

On first use the skill looks for an existing career-ops folder: the one named in CAREER_OPS_ROOT, then ./career-ops, then ~/career-ops. If there is none, it asks you before installing one with npx @santifer/career-ops@1.38.0 init. After that, paste a job URL or ask for a mode, for example a portal scan or a tailored CV.

career-ops needs a local executor: it runs in Codex (the CLI, the IDE extension and the app) and in local threads of the ChatGPT desktop app, which is why the listing says Desktop only. In a chat without local execution the skill can explain career-ops, but it cannot run it.

What it runs, sends and fetches

The plugin itself is one Markdown file. It has no hooks, no MCP servers, no apps and no scripts, and it runs nothing until you agree to the install.

The install, only after you say yes:

  • npx downloads the @santifer/career-ops installer from the npm registry.
  • The installer asks the GitHub API for the latest career-ops release and clones it from github.com/career-ops-hq/career-ops into ./career-ops.
  • It runs npm install in that folder. That downloads the Node packages from the npm registry, and Playwright downloads a Chromium browser.

Day to day, career-ops runs Node scripts from that folder:

  • Your files stay local. Your CV, profile, reports and tracker are files in the folder. No account, no telemetry, no backend of ours.
  • The AI model sees what you work on. The job descriptions and the parts of your CV it evaluates go to the model you use in ChatGPT or Codex, as part of the conversation. A few optional scripts call another AI provider (Google Gemini, OpenAI, OpenRouter or a local Ollama) only if you set up that provider's key yourself.
  • Portal scans read public job listings. They fetch listings from the job boards you turn on in portals.yml: applicant tracking systems such as Greenhouse, Ashby, Lever, Workable and SmartRecruiters, and the regional boards in providers/. These requests read listings; they don't send your CV or profile.
  • A browser on your machine. Playwright opens job pages in a headless Chromium to read listings and to check whether a role is still open, and it renders your CV to PDF locally.
  • Update checks. On the first message of a session career-ops asks the GitHub API whether there is a newer release. It updates only when you say yes.
  • Optional local apps. A web UI (npm run ui) listens only on 127.0.0.1; it refuses to open to the network unless you allow that explicitly. A terminal dashboard you build yourself with Go (npm run build:dashboard) compiles on your machine and downloads its Go modules through the Go module proxy.
  • Optional scheduled scans. Only if you install them: web/scripts/install-scan-schedule.sh adds a user-level LaunchAgent (macOS) or one marked crontab line (Linux), and install-scan-schedule.ps1 adds a scheduled task (Windows). Every 15 minutes it runs at most one of the scans you saved in the web UI. uninstall-scan-schedule.sh (or .ps1) removes it.

career-ops can fill application forms and draft answers. It drafts and fills; it never submits. You press Submit.

Privacy and license