jobforge

module
v0.7.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 19, 2026 License: MIT

README

JobForge

A Windows-first Go CLI for running a real job search end to end - without surrendering control of any account or letting a tool send an application on your behalf.

JobForge pulls listings from public ATS APIs, ranks them against your profile with an LLM, drafts outreach through a multi-agent pipeline, schedules interviews on your Google Calendar, and watches your inbox for replies. Every state change passes a human approval gate.

What it does

  • Aggregates real jobs. Greenhouse, Lever, Ashby, SmartRecruiters, Workable, Recruitee, and RSS from public endpoints, plus opt-in scraper connectors for LinkedIn, Indeed, Glassdoor, and Handshake (optional CloakBrowser for fewer blocks). Scrapers never log in, bypass CAPTCHA, or submit applications.
  • Ranks them. jobforge feed scores each posting 0-100 against your profile + active resume via your configured LLM, with a one-sentence rationale per job.
  • Drafts outreach. A researcher -> writer -> reviewer agent pipeline produces a cover-letter-style draft. You see it, edit it, and gate on y/n/e before anything saves.
  • Tracks the lifecycle. Add interviews and application deadlines to Google Calendar (OAuth Desktop client). Poll an IMAP inbox for confirmations, interview invites, rejections, and offers - JobForge classifies each via LLM and proposes status updates one by one.
  • Stays out of the way otherwise. Bare jobforge drops into an interactive REPL with a live / palette (like Claude Code's). Plain English works too: type what you want and the LLM resolves it to a command, which you confirm before it runs.

Install

Pre-built binaries for Windows / Linux / macOS on amd64 / arm64.

Windows:

iwr https://raw.githubusercontent.com/0xcryptj/jobforge/master/install.ps1 -useb | iex

Linux + macOS:

curl -fsSL https://raw.githubusercontent.com/0xcryptj/jobforge/master/install.sh | bash

Both installers download the matching binary from the latest GitHub release, put it on your PATH (%LOCALAPPDATA%\Programs\jobforge on Windows; /usr/local/bin on Unix, override with PREFIX=...), and install scraper dependencies by default: Python 3.10+ (Windows: via winget if needed) and CloakBrowser (pip install + ~200MB Chromium download). Skip that step with $env:JOBFORGE_SKIP_SCRAPER_DEPS = '1' (Windows) or JOBFORGE_SKIP_SCRAPER_DEPS=1 (Unix).

Other paths (go install, winget, scoop, direct download, build from source): see USAGE.md -> Install.

Quickstart

# one-time setup: profile, CloakBrowser scrapers, LLM, default boards, optional import
jobforge onboard

# or step by step:
jobforge init
jobforge profile setup
jobforge sources seed
jobforge jobs import --all

# discover jobs (scrapers fill URLs — no manual entry)
jobforge sources add-scrapers
jobforge jobs sync

# rank them against your profile + resume
jobforge feed

# draft outreach for the top match (id from `jobs list`)
jobforge apply --llm <id>

# (after `calendar auth`) schedule an interview
jobforge calendar add-interview <id> --when "2025-06-10 14:00" --duration 45m

# poll the inbox for replies and propose status updates
jobforge inbox poll

# or just type `jobforge` for the interactive REPL
jobforge

See USAGE.md for the full command reference, OAuth and IMAP setup, source configuration, scraper caveats, troubleshooting, and the data-on-disk layout.

Scrapers and CloakBrowser

LinkedIn, Indeed, Glassdoor, and Handshake imports use a headless browser (chromedp). By default JobForge picks CloakBrowser when its Chromium binary is installed (stealth fingerprints, fewer blocks); otherwise it falls back to system Chrome.

jobforge onboard              # installs CloakBrowser when you opt in
jobforge scraper setup        # scraper-only wizard
jobforge doctor               # verify profile, LLM, and browser readiness

Optional config.json (scraper.engine: auto, cloak, chrome, or cdp). Details: USAGE.md -> Scraper sources.

Scrapers remain read-only, opt-in, and fragile (HTML changes, rate limits, host ToS). CloakBrowser improves fingerprinting; it does not solve CAPTCHAs or replace proxies for aggressive anti-bot sites.

Privacy posture

JobForge is built around an explicit promise:

It never submits an application on your behalf, never sends a message from your account, and never marks remote state as read or modified behind your back.

Concretely: the apply flow saves a .txt you copy and send yourself. IMAP reads use BodyPeek so the server never sees Seen flags. Google Calendar gets only the calendar.events scope. Every state change - locally on disk, on your calendar, or in your job tracker - runs through a default-deny [Y/n] gate.

Secrets stay local: the Google refresh token and the IMAP password each live in their own file under %APPDATA%\jobforge with restrictive permissions, never logged or transmitted anywhere except the corresponding service.

Job importing supports public source connectors plus explicit opt-in scrapers for LinkedIn, Indeed, Glassdoor, and Handshake. Scrapers are read-only search result importers: no credentials, no CAPTCHA bypass, no form filling, and no application submission.

Status

v0.6. Builds and tests green on Go 1.26+ across Windows, Linux, and macOS. Public source paths (Greenhouse / Lever / Ashby / SmartRecruiters / Workable / Recruitee / RSS) are the stable import surface; LinkedIn / Indeed / Glassdoor / Handshake scrapers are opt-in and fragile. Use jobforge onboard or jobforge scraper setup for guided CloakBrowser installation.

License

MIT — see LICENSE.

Directories

Path Synopsis
cmd
jobforge command
internal
agents
Package agents defines the multi-agent pipeline that turns a raw job posting into a human-approvable application draft.
Package agents defines the multi-agent pipeline that turns a raw job posting into a human-approvable application draft.
approval
Package approval implements JobForge's human-in-the-loop gate.
Package approval implements JobForge's human-in-the-loop gate.
calendar
Package calendar wraps Google Calendar event creation behind a small interface so the rest of JobForge stays vendor-agnostic.
Package calendar wraps Google Calendar event creation behind a small interface so the rest of JobForge stays vendor-agnostic.
cli
Package cli wires subcommands to the underlying packages.
Package cli wires subcommands to the underlying packages.
config
Package config resolves and manages JobForge's on-disk locations.
Package config resolves and manages JobForge's on-disk locations.
inbox
Package inbox watches an IMAP mailbox for job-application updates (confirmations, interview invites, rejections, offers) and proposes status changes the user confirms before they land.
Package inbox watches an IMAP mailbox for job-application updates (confirmations, interview invites, rejections, offers) and proposes status changes the user confirms before they land.
intelligence
Package intelligence extracts lightweight skill and role signals from resumes and job descriptions.
Package intelligence extracts lightweight skill and role signals from resumes and job descriptions.
job
Package job defines the job-posting data model that the rest of the system reads, writes, and operates on.
Package job defines the job-posting data model that the rest of the system reads, writes, and operates on.
llm
Package llm is the provider-agnostic LLM abstraction the writer agent calls into.
Package llm is the provider-agnostic LLM abstraction the writer agent calls into.
profile
Package profile holds the user's personal job-search profile: who they are, what they want, and what they'll let the agents say on their behalf.
Package profile holds the user's personal job-search profile: who they are, what they want, and what they'll let the agents say on their behalf.
resume
Package resume defines the imported-resume data model.
Package resume defines the imported-resume data model.
source
Package source defines public job source configuration.
Package source defines public job source configuration.
sources
Package sources imports jobs from configured public job sources.
Package sources imports jobs from configured public job sources.
sources/scraper
Package scraper drives headless Chrome (via chromedp) to pull job listings from sites that don't expose an official API.
Package scraper drives headless Chrome (via chromedp) to pull job listings from sites that don't expose an official API.
storage
Package storage persists JobForge state as plain JSON files.
Package storage persists JobForge state as plain JSON files.
ui
Package ui provides small terminal output helpers with an optional baby-blue color theme.
Package ui provides small terminal output helpers with an optional baby-blue color theme.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL