Skip to content

🇺🇸 English · 🇧🇷 Português

Configuration

config.yaml lives in MOONLIGHTER_HOME (default ~/.moonlighter/); uvx moonlighter init writes a minimal one. This page covers the keys the guides mention. The full, commented surface is config.example.yaml in the repo. Relative paths in any key resolve under MOONLIGHTER_HOME; an absolute or ~-prefixed path is used as given. An unknown key or a wrong-typed value is rejected at startup, with the key named, rather than silently ignored.

Top-level keys

Key Default What it does
llm_backend cli cli shells out to the Claude Code CLI (your Claude subscription); api uses the Anthropic SDK and needs ANTHROPIC_API_KEY, read from the environment or else from ~/.config/anthropic/api.env
score_threshold 6.5 Jobs scoring below it are archived after a scan
title_blocklist [] Title substrings (case-insensitive) discarded before any LLM call
answer_bank_max_age_days 90 Days after its last submission that a banked answer stops being replayed; null disables expiry — see Answer bank
portal_max_age_days 30 Age at which portal-feed jobs (RemoteOK, Remotive, WeWorkRemotely, HN Who's Hiring, Gupy), which can't be checked at their source, are archived; 0 disables it

cv

Key Default What it does
cv.default cv.pdf The resume prepare_application names for the form's file-upload question
cv.by_company {} A different resume per company, matched case-insensitively by company name
cv.pool cv-pool.yaml The curated bullet pool; the tailored CV turns on when this file exists
cv.template_dir cv-templates Holds cv-template.en.tex and, optionally, cv-template.pt.tex
cv.generated_dir cv-generated Where each job's tailored CV is cached, one directory per job id

email

Only for Gmail tracking.

Key Default What it does
email.address none The Gmail address you apply with; tracking aliases (you+ref@gmail.com) are minted from it, and the sync needs it
email.credentials_path gmail-client.json The OAuth client file from Google Cloud Console
email.token_path gmail-token.json Where setup_email saves (and overwrites) the token
email.lookback_days 30 How many days back the sync reads, read or unread
email.mark_processed false true labels processed mail in Gmail; by default deduplication stays in a local table
email.processed_label moonlighter/processed The label used when mark_processed is on
email.archive_ref_matched false Archive replies matched by alias that advanced an application
email.archive_all_classified false Also archive fuzzy and uncertain classified mail; unrelated mail is never touched
email.interview_stages [] Stage names a classified reply can set; the example file lists four, and a sync adds new stages the classifier proposes for the length of that run

Labelling and archiving need the gmail.modify scope; setup_email asks you to consent again if your token is read-only.

← Back to the README