Configuration
Three files, one precedence rule: config/local.yaml overrides config/settings.yaml ,
key by key. The Settings page writes local.yaml; never edit settings.yaml for personal
values. config/skills.yaml is the active scoring profile (see Role presets ).
Environment: JOBSCOUT_PORT runs a second instance (no scheduler); ADZUNA_APP_ID /
ADZUNA_APP_KEY can replace the keys in local.yaml; MAX_THINKING_TOKENS is set by
fit.py per call.
home
Key
Default
Meaning
city
Austin
your metro; postings matching city_terms → class home
city_terms
[austin, travis county]
lowercase substrings that mean the metro
state, state_code
Texas, TX
state name and code → class home_state
state_terms
DFW/Houston/SA metro cities
other metros in the state → home_state
filters
Key
Default
Meaning
max_age_days
45
drop aggregator postings older than this (when the age is known)
max_age_days_boards
60
same for direct boards; also hides older rows from the Inbox
keep_home_state
true
keep onsite jobs elsewhere in your state
keep_us_other_cities
false
keep onsite jobs in other US cities
keep_remote_global
false
keep remote jobs without a clear US signal
refresh
Key
Default
Meaning
at
"06:00, 11:00, 18:00, 23:00"
clock times (PC-local); "" = off
every_hours
0
interval fallback when at is empty
board_workers
8
parallel board fetches
adzuna
Key
Default
Meaning
enabled
true
skip Adzuna entirely when false
app_id, app_key
""
from developer.adzuna.com (free)
country
us
queries
12 role queries
each costs (locations + 1) calls per refresh
locations
home city + state metros
sweep locations
distance_km
60
companies, company_sweep_titles, company_sweep_days
12 category-3 employers
per-company title sweeps
max_days_old, results_per_page, pages_per_query
30, 50, 1
keep pages_per_query low on the free tier
fit
Key
Default
Meaning
enabled
true
score gated new jobs after every refresh
model
claude-haiku-4-5
the scorer
profile_model
claude-sonnet-5
rewrites fit-profile.md from feedback
thinking
full
full / small / off (~90 / 45 / 30 s per batch of 10)
batch
10
jobs per call
parallel
2
concurrent calls
gate_min_score
60
keyword score a job needs before the model looks at it
max_per_run
300
cap per start / refresh
auto_profile_after
5
pending feedback items that trigger a profile update (0 = manual)
timeout_min
8
per call
description_chars
1800
description excerpt sent per job
resume
Key
Default
Meaning
output_dir
resume/output
<Company>/<Role-slug>/<jobId>/
file_name
Tailored_Resume.docx
your resume file name; cover letters use the same stem
claude_cmd
claude
or a full path
model
claude-fable-5-1
both phases
timeout_min
10
per phase
batch_max
50
jobs per Tailor click
parallel
2
concurrent runs (1-3)
apply
Key
Default
Meaning
auto_plan
false
plan automatically when a resume becomes ready
mode
prefill
default per plan; unattended submits approved exact matches
unattended_enabled
true
master switch
allowed_ats
greenhouse, ashby, lever
eligible for unattended (Lever is captcha-locked to prefill anyway)
profile
resume/profile.yaml
max_per_run
5
forms per /apply-queue run
pause_seconds
20
between forms
window
06:00-06:30
prefill window used by a scheduled task
notify
Key
Default
Meaning
enabled
false
discord_webhook_url
""
local.yaml only
min_score
50
max_items
15
lines per message
loc_classes
home, home_state, remote_us
server
port: 8765. The server binds 127.0.0.1 and ::1.
config/skills.yaml
Sections: preset, relevance (title_terms, desc_rescue_groups, min_groups,
search_terms), view, role_titles, title_blockers, title_penalties, seniority_bonus,
skills (cap_points, groups), freshness_bonus, source_points, location_points,
experience_bonus, flags, fit_profile_default. Details in Scoring and fit .
config/companies.yaml, watchlist.yaml
companies: [{name, ats, slug}] and companies: [{name, careers, platform, austin}] +
boards: (manual search links). Both are appended by the Companies page.