skills/job-eval/SKILL.md
Parallel batch processing — evaluate 10-100+ job offers simultaneously via claude -p workers with state tracking, retry logic, and resumability.
npx skillsauth add khetansarvesh/ai_skills_repo job-evalInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Process multiple job offers in parallel. Each worker runs a full A-G evaluation independently. The orchestrator tracks state, handles retries, and merges results into the application tracker.
Each worker produces a report + tracker entry. The orchestrator manages the coordination.
claude CLI installed and authenticatedNotion (fetch via python3 scripts/notion/page_reader.py resume) and Notion (fetch via python3 scripts/notion/page_reader.py projects) populatedbatch-data/batch-input.tsv or use --from-notion to pull "Scanned" jobs)Workers apply two automatic disqualification filters before the expensive A-G evaluation. If either triggers, the job is immediately scored 0, marked "Discarded" in Notion, and the worker stops early.
| Filter | Disqualify (score 0) | Pass | |--------|---------------------|------| | Non-US Location | Explicitly non-US locations (London UK, Berlin Germany, Toronto Canada, etc.), "Remote (EU only)", "Remote (EMEA)", "Remote (APAC)" | US cities/states, "Remote", "Remote (US)", "Hybrid" with US city, ambiguous/missing location | | Security Clearance / US Citizenship | Active clearance required (TS, TS/SCI, Secret, Top Secret, DoD), ability to obtain clearance, "US citizenship required", "Must be a US citizen", "US Person" per ITAR/EAR | "Authorized to work in US" (F-1 OPT satisfies), "Sponsorship available", "US Person preferred" (soft) |
completed, score = 0Discarded, score = 0"disqualified": true and "disqualification_reason": "{reason}"# Pull "Scanned" jobs from Notion and evaluate in parallel
bash skills/job-eval/batch-runner.sh --from-notion --parallel 4
# Preview what would be processed (no execution)
bash skills/job-eval/batch-runner.sh --from-notion --dry-run
# Evaluate all offers in batch-input.tsv (manual input)
bash skills/job-eval/batch-runner.sh
# Evaluate 4 offers in parallel
bash skills/job-eval/batch-runner.sh --parallel 4
# Retry only failed offers
bash skills/job-eval/batch-runner.sh --retry-failed --parallel 2
# Start from offer #10, max 3 retries each
bash skills/job-eval/batch-runner.sh --start-from 10 --max-retries 3
# Skip tracker entries for low-scoring offers
bash skills/job-eval/batch-runner.sh --min-score 3.5 --parallel 4
| Argument | Default | Description |
|----------|---------|-------------|
| --parallel N | 1 | Number of concurrent workers |
| --dry-run | false | Preview without executing |
| --from-notion | false | Query Notion for "Scanned" jobs and generate batch-input.tsv |
| --retry-failed | false | Only retry previously failed offers |
| --start-from N | 0 | Skip offers with ID < N |
| --max-retries N | 2 | Max retry attempts per offer |
| --min-score N | 0 (off) | Skip tracker/report for scores below N |
Location: skills/job-eval/batch-data/batch-input.tsv
id url source notes page_id
1 https://job-boards.greenhouse.io/anthropic/jobs/123 Greenhouse
2 https://jobs.ashbyhq.com/openai/abc Ashby high priority
3 https://jobs.lever.co/scaleai/xyz Notion Scale AI — ML Engineer 34598a5a-ae72-xxxx-xxxx-xxxxxxxxxxxx
Columns:
id — sequential integer (1, 2, 3...)url — full job posting URLsource — where it came from (Greenhouse, Ashby, Lever, Notion, etc.)notes — optional metadatapage_id — Notion page ID (optional; auto-populated by --from-notion)How to populate:
--from-notion flag — auto-generates from "Scanned" jobspage_id empty)batch-data/batch-runner.pid with process IDbatch-data/batch-state.tsv if missingFor each pending offer:
Reserve report number (sequential, 3-digit zero-padded)
↓
Resolve placeholders in batch-prompt.md ({{URL}}, {{REPORT_NUM}}, {{DATE}}, {{ID}})
↓
Launch: claude -p --dangerously-skip-permissions --append-system-prompt-file resolved-prompt.md "Process offer..."
↓
Worker produces: report to Notion (via db_applications.py) + JSON stdout
↓
Orchestrator extracts score from JSON, updates state
With --parallel N:
After all workers finish:
job-eval — 2026-04-15
━━━━━━━━━━━━━━━━━━━━━━━━━━
Total: 50
Completed: 47
Failed: 2
Skipped: 1 (below min-score)
Average: 3.9/5
→ Run job-cv-tailor on high-scoring offers
Location: skills/job-eval/batch-data/batch-state.tsv
id url status started_at completed_at report_num score error retries
1 https://... completed 2026-04-15T10:30:00Z 2026-04-15T10:45:00Z 001 4.3 - 0
2 https://... failed 2026-04-15T10:46:00Z 2026-04-15T10:50:00Z 002 - Timeout 1
3 https://... pending - - - - - 0
pending → processing → completed (score > 0, full A-G evaluation)
→ completed (score 0, disqualified — skipped A-G evaluation)
→ failed (retry with --retry-failed)
→ skipped (score below --min-score)
completed → skipped on re-run (already done)failed + retries >= max-retries → skipped permanentlyfailed + retries < max-retries → retried with --retry-failedprocessing (stale — PID dead) → auto-recovered as pendingIf the batch is interrupted (Ctrl+C, crash, laptop dies):
batch-state.tsvcompleted offersfailed offers (if retries < max)pending offersNothing is lost. Reports and tracker entries from completed workers are already on disk.
skills/job-eval/batch-data/logs/{report_num}-{id}.log| Scenario | What happens |
|----------|-------------|
| URL inaccessible | Worker fails → marked failed, continue with others |
| JD behind login wall | Worker can't extract JD → fails → flag for manual paste |
| Worker crashes | Marked failed → retry with --retry-failed |
| Orchestrator dies | Re-run → skips completed, continues pending |
| Score below min | Marked skipped → no report/tracker entry |
| All workers fail | Summary shows 0 completed → investigate logs |
skills/job-eval/
├── SKILL.md # This file
├── batch-runner.sh # Orchestrator script
├── batch-prompt.md # Self-contained worker prompt
└── batch-data/ # Runtime data
├── batch-input.tsv # URLs to process (user populates)
├── batch-state.tsv # State tracking (auto-created)
└── logs/ # Worker execution logs
skills/job-scan/
└── portals.yml # Scan config (companies + title filters)
batch-prompt.mddocumentation
Translate visa application documents (images) to English and create a bilingual PDF with original and translation
development
A comprehensive verification system for Claude Code sessions.
development
Use this skill when writing new features, fixing bugs, or refactoring code. Enforces test-driven development with 80%+ coverage including unit, integration, and E2E tests.
tools
SwiftUI architecture patterns, state management with @Observable, view composition, navigation, performance optimization, and modern iOS/macOS UI best practices.