portals.yml #
config/portals.yml controls what jobs Raven considers relevant when you run raven discover without explicit --q / --loc flags.
How discover uses it #
When you run bare raven discover:
- Raven loads
config/portals.yml(or path fromRAVEN_PORTALSin.env) - Title keywords from
title_filter.positivebecome--qfilters - Negative keywords become
--notfilters - Location rules from
location_filterbecome--loc/--noloc
CLI flags override portals config when provided:
# Uses portals.yml filters
raven discover
# Ignores portals title filter — uses CLI only
raven discover --q "backend engineer" --loc Remote
Minimal example #
title_filter:
positive:
- "software engineer"
- "backend"
- "developer"
- "intern"
negative:
- "nurse"
- "sales"
- "Junior"
location_filter:
allow:
- "Remote"
- "India"
block:
- "On-site only"
Title filter semantics #
- At least one positive keyword must match the job title (case-insensitive substring)
- Zero negative keywords may match
- Empty
positivelist = match all titles (use negatives to exclude)
Location filter semantics #
Applied in order:
- Empty location on job → pass
- Any
always_allowkeyword → pass - Any
blockkeyword → reject allowempty → passallownon-empty → must match at least one keyword
Optional filters #
| Block | Purpose |
|---|---|
salary_filter | Min/max annual compensation (when structured data exists) |
content_filter | Match job description text (positive/negative keywords) |
trust_filter | Annotate jobs with trust score (never drops jobs) |
scan_history | Re-check URLs after N days |
See config/portals.example.yml for full documentation and examples.
Job boards #
Board feeds used by raven discover --sources boards:
job_boards:
- name: RemoteOK
provider: remoteok
enabled: true
- name: Remotive
provider: remotive
enabled: true
Tracked companies #
The tracked_companies section is used by legacy career-ops scan flows. Raven’s discover --sources ats uses live ATS APIs with company slug lists from openjobdata or bundled caches — not this list directly.
Tips #
- Too many unrelated jobs? Add negatives (
nurse,clinical,retail) - Too few jobs? Broaden positives or remove overly specific negatives
- Wrong geography? Tighten
location_filter.blockandallow - Debug filters: Run with
--verboseand checkdata/logs/discover-*.log