Drafting

Drafting #

Turn discovered jobs into tailored application drafts — email copy for direct outreach, or step-by-step guides for ATS forms (Greenhouse, Lever, Ashby, Workday, etc.).

Pages in this section #

Resume parsing

Resume parsing #

Raven parses your resume from config/profile.ymlresume.path and caches structured bullets and skills.

Supported formats #

FormatNotes
.mdBest — use ## Experience with - bullet lines
.txtBullet lines + optional Skills: line
.pdfRequires pdf-parse (installed via raven setup)

Markdown structure #

# Your Name

## Experience

### Company A — Role Title
- Built X using Y, achieving Z
- Led migration of ...

### Company B — Role Title
- Shipped feature that ...

## Skills

JavaScript, TypeScript, Node.js, React, PostgreSQL

Parsing rules #

  • Sections detected by ## Heading (H2)
  • Bullets under ## Experience (including ### subheadings) are extracted
  • Skills from ## Skills section or comma-separated line
  • highlights and skills in profile.yml override parser output when set

Cache #

Parsed output is cached at data/cache/resume-parsed.json for speed.

JD tailoring

Job description tailoring #

For each job, Raven extracts keywords from the title and matches your resume bullets to produce tailored application content.

Output columns #

ColumnMeaning
jd_keywordsTerms extracted from job title (e.g. backend, python, remote)
action_wordsSuggested verbs for this role type
tailored_bulletsTop resume bullets ranked by relevance to the JD

How matching works #

  1. Keyword extraction — splits title on common separators, filters stop words
  2. Bullet scoring — each resume bullet scored by keyword overlap with title
  3. Action words — role-type heuristics (backend → “architected”, “scaled”; ML → “trained”, “deployed”)
  4. Top Nresume.max_bullets from profile (default 5)

Example #

Job title: Senior Backend Engineer — Node.js

ATS form guides

ATS form guides #

When a job’s apply URL points to an ATS (Greenhouse, Lever, Ashby, Workday, etc.), Raven generates a form application guide instead of an email.

Application types #

TypeDetected whenRaven output
emailDirect email outreach possibleSubject + body
formApply URL on known ATS domainStep-by-step form_steps

Form rows are not sent via raven send. Open the markdown review or CSV form_steps column and follow the guide in your browser.

Gemini plugin

Gemini draft plugin #

Optional AI polish for email drafts via Google’s Gemini API.

Setup #

  1. Get an API key from Google AI Studio
  2. Add to .env:
GEMINI_API_KEY=your_key_here
  1. Enable in profile (optional):
draft:
  gemini:
    enabled: true
    model: "gemini-2.0-flash"

Usage #

raven draft --input data/jobs.json --gemini --max 10

Or one-shot discover + draft:

raven draft --q "backend engineer" --gemini --max 5

What Gemini does #

  • Rewrites email subject and body for clarity and tone
  • Preserves factual content from your resume bullets
  • Does not fabricate experience — works from parsed resume + JD keywords

What Gemini does not do #

  • Form application guides (ATS rows stay template-based)
  • Verify email addresses
  • Auto-send — you must review and run raven send yourself

Disclaimer #

Every draft includes:

What you get #

OutputContents
drafts/outreach-YYYY-MM-DD.csvAll columns — send-ready spreadsheet
drafts/outreach-YYYY-MM-DD.mdHuman-readable review of every draft

Key CSV columns #

ColumnMeaning
application_typeemail or form
jd_keywordsTerms extracted from the job title
action_wordsSuggested verbs for this role
tailored_bulletsResume bullets matched to the job
form_stepsFull ATS guide (form jobs only)
disclaimerReminder to review before submitting

Quick start #

./raven discover --q "backend engineer" --since 7
./raven draft --max 25
open drafts/outreach-*.md

Optional: add GEMINI_API_KEY to .env and pass --gemini for AI-polished email drafts.

Important: Review every draft yourself. Form rows are not sent via raven send.

Start with Resume parsing →