Commands #
Full CLI reference for every raven subcommand. Run ./raven <command> --help anytime for flags.
Pages in this section #
- setup
raven setup #
First-time installation and config seeding.
raven setupInstalls npm dependencies (root +
jobs/) and creates:.envfrom.env.exampleconfig/portals.ymlfrom exampleconfig/profile.ymlfrom exampleconfig/outreach.ymlfrom examplefiles/resume.mdfrom example
Safe to re-run — existing files are not overwritten.
- discover
raven discover #
Unified job search across ATS APIs, board feeds, and optional local index.
Architecture: How discovery works — tiers, reverse ATS scan, WebSearch status.
Usage #
raven discover [options] raven discover --q "backend engineer" --loc Remote --since 7 raven discover --sources boards --since 7 raven discover --jsonBehavior #
- Not open-web search — fetches public JSON APIs and board feeds (see how it works)
- Loads title/location filters from
config/portals.ymlby default - CLI flags (
--q,--loc, …) extend config filters - Runs tiers in parallel
- Deduplicates by canonical job URL
- Auto-saves results to
data/jobs.json(unless--no-save) - Prints
Next: raven draft --max 25when complete
Flags #
Flag Description Default --q "keywords"Title must match (comma-separated) from portals.yml--not "words"Title must not contain from portals.yml--loc Remote,EULocation allow-list from portals.yml--noloc "X"Location block-list from portals.yml--home "City"Location always-allow — --since NPostings from last N days 7--sourcesats,boards,index,hiringcafeats,boards,index--atsSubset of ATS platforms all 12 --limit NMax companies per ATS 150--max NMax total results 1000--save PATHCustom save path data/jobs.json--no-saveSkip writing JSON — --jsonMachine-readable stdout — --streamNDJSON stream (for tooling) — --verboseExtra tier/child logs — --quietSummary only — --no-logDisable data/logs/file— Output JSON shape #
{ "count": 42, "rawMatches": 120, "deduped": 78, "offers": [ { "url": "https://…", "company": "Acme", "title": "Backend Engineer", "location": "Remote", "postedAt": "2026-07-04", "ats": "greenhouse", "source": "greenhouse-full" } ], "savedAt": "2026-07-04T08:47:54.000Z" }Tips #
- Always set title filters in
portals.yml— empty filters match every job - Use
--sources boardsfor quick tests (~3s vs ~1min full scan) - Run
raven sync-jobsbefore using--sources index
See Job sources for platform details.
- draft
raven draft #
Generate tailored application drafts from discovered jobs.
Usage #
raven draft --max 25 raven draft --input data/jobs.json --max 25 raven draft --q "backend engineer" --since 7 --max 20 raven draft --geminiInput sources #
Method Command Latest discover (default) raven draft→ readsdata/jobs.jsonExplicit file raven draft --input data/jobs.jsonInline discover + draft raven draft --q "engineer" --since 7Output files #
File Purpose drafts/outreach-YYYY-MM-DD.csvSpreadsheet — review, edit, send drafts/outreach-YYYY-MM-DD.mdHuman-readable review drafts/outreach-YYYY-MM-DD.xlsxOptional ( --xlsx)CSV columns #
Column Description application_typeemailorformapplication_labelHuman label contact_emailFor email rows (often blank — fill manually) subjectEmail subject or form title bodyEmail body or short form guide company,title,job_urlJob metadata jd_keywordsTerms extracted from job title action_wordsSuggested verbs for this role tailored_bulletsResume bullets matched to JD form_stepsFull ATS guide (form jobs) links_blockYour portfolio/GitHub/LinkedIn line ai_draftyes,no, orfallbackdisclaimerReview-before-submit reminder Flags #
Flag Description --input PATHJobs JSON (default: data/jobs.json)--max NMax drafts to generate --geminiAI-polish email drafts (needs GEMINI_API_KEY)--guess-emailSuggest careers@from apply URL domain--refresh-resumeRe-parse resume (ignore cache) --xlsxAlso write Excel --no-markdownSkip .mdreview file--output PATHCustom output base path Application types #
Form (
application_type: form) #Greenhouse, Lever, Ashby, Workday, and similar ATS listings. Raven generates step-by-step guides with your links and tailored bullets — not sendable email.
- send
raven send #
Send outreach emails from a CSV or XLSX file via Gmail or Outlook.
Prerequisites #
raven auth-gmail # or auth-outlookConfigure in
.env:SENDER_NAME=Your Name SENDER_EMAIL=you@example.com GOOGLE_CLIENT_ID=… GOOGLE_CLIENT_SECRET=… GMAIL_REFRESH_TOKEN=…Usage #
raven send --input drafts/outreach-2026-07-04.csv --dry-run raven send --input drafts/outreach-2026-07-04.csv --delay 60 --limit 20 raven send --provider outlook --input contacts.xlsxRequired CSV columns #
Column Description contact_emailRecipient (or email)subjectEmail subject bodyPlain-text body Extra columns (company, job_url, etc.) are ignored by the sender.
- sync-jobs
raven sync-jobs #
Download openjobdata daily deltas into a local SQLite index.
Usage #
raven sync-jobs raven sync-jobs --days 3What it does #
- Syncs companies registry from HuggingFace bucket
- Downloads recent daily parquet deltas
- Upserts into
data/jobs.db - Exports ATS company slug lists to
data/cache/ats-companies/
Environment #
If you get HTTP 401:
# .env HF_TOKEN=hf_xxxxxxxxAfter sync #
raven discover --sources index --q "engineer" raven query --q "ML engineer" --since 7Flags #
Flag Description --days NNumber of daily deltas to fetch --fullFull backfill (slow) --no-export-atsSkip ATS slug export See openjobdata for details.
- scan-ats
raven scan-ats #
Live ATS reverse scan only (without board feeds or index).
raven scan-ats --q "software engineer" --since 7 raven scan-ats --ats greenhouse,lever,ashby --json raven scan-ats --use-portals --dry-runUses filters from CLI flags or
--use-portalsto readconfig/portals.ymldirectly.Platforms: Greenhouse, Lever, Ashby, Workday, Rippling, Workable, BambooHR, SmartRecruiters, Recruitee, Pinpoint, Teamtailor, Personio.
For unified search, prefer
raven discover --sources ats.- scan-boards
raven scan-boards #
Board feed scan only (RemoteOK, Remotive, Arbeitnow, Landing.jobs).
raven scan-boards --q "software engineer" raven scan-boards --q engineer --loc Remote --jsonFaster than full ATS walk — good for remote-first roles.
For unified search, prefer
raven discover --sources boards.- query
raven query #
Search the local openjobdata SQLite index.
raven query --q "software engineer" --since 7 raven query --q "designer" --ats greenhouse,lever --jsonRequires
data/jobs.dbfromraven sync-jobs.Same filter semantics as discover (
--q,--not,--loc,--since,--ats,--max).- auth-gmail / auth-outlook
OAuth setup #
One-time OAuth for email sending.
Gmail #
# Set in .env first: # GOOGLE_CLIENT_ID= # GOOGLE_CLIENT_SECRET= raven auth-gmailSaves
GMAIL_REFRESH_TOKENto.env.Outlook #
# Set in .env first: # MS_CLIENT_ID= # MS_CLIENT_SECRET= raven auth-outlookSaves refresh token to
.env.Send #
raven send --provider gmail --input drafts/outreach.csv --dry-run raven send --provider outlook --input drafts/outreach.csvSee Environment variables for all
.envkeys.
Command map #
| Command | Purpose |
|---|---|
raven setup | First-time install and config seeding |
raven discover | Unified job search (ATS + boards + index) |
raven draft | Tailored application drafts from jobs |
raven send | Send outreach emails from CSV/XLSX |
raven sync-jobs | Download openjobdata into local SQLite |
raven scan-ats | Live ATS scan only |
raven scan-boards | Board feed scan only |
raven query | Search local jobs.db index |
raven auth-gmail | One-time Gmail OAuth |
raven auth-outlook | One-time Outlook OAuth |
Typical workflow #
./raven setup
./raven discover --q "software engineer" --since 7
./raven draft --max 25
./raven send --input drafts/outreach-2026-07-04.csv --dry-run
Logging flags (all job commands) #
| Flag | Effect |
|---|---|
| (default) | Live progress + log file in data/logs/ |
--verbose | Extra detail per source |
--quiet | One-line summary |
--no-log | Disable log file |
Start with discover →