feat: AI job filter — score jobs 0-10 with Claude Haiku before applying

- lib/filter.mjs: batch scoring engine (10 jobs/call, Claude Haiku)
- job_filter.mjs: standalone CLI with --dry-run and --stats flags
- Threshold configurable globally + per-search in search_config.json (filter_min_score, default 5)
- Job profiles (gtm/ae) passed as context via settings.filter.job_profiles
- Filtered jobs get status='filtered' with filter_score + filter_reason
- Filter errors pass jobs through (never block applications)
- status.mjs: added 'AI filtered' line to report
This commit is contained in:
2026-03-06 10:01:15 +00:00
parent ff59316abc
commit 9bf904dada
4 changed files with 303 additions and 0 deletions

View File

@@ -111,6 +111,7 @@ function buildStatus() {
queue: {
total: queue.length,
new: byStatus['new'] || 0,
filtered: byStatus['filtered'] || 0,
applied: byStatus['applied'] || 0,
failed: byStatus['failed'] || 0,
needs_answer: byStatus['needs_answer'] || 0,
@@ -209,6 +210,7 @@ function formatReport(s) {
}
lines.push(
` 🚫 AI filtered: ${q.filtered || 0}`,
` ✅ Applied: ${q.applied}`,
` 🔁 Already applied: ${q.already_applied || 0}`,
` 💬 Needs your answer: ${q.needs_answer}`,