- Node.js >= 20
- An Anthropic API key (https://console.anthropic.com)
cd /Users/clarkfan/OfferAgent
# 1) deps already installed via `npm install`
# 2) set your API key
cp .env.example .env
# then edit .env and paste your sk-ant-... key
# 3) initialize SQLite DB
npm run init-dbnode bin/match.js --jd ./examples/jd-sample-vp-growth.txt
# → outputs ./out/match-report.mdnode bin/cover.js \
--jd ./examples/jd-sample-vp-growth.txt \
--company "群核科技" \
--role "VP Growth" \
--lang zh
# → outputs ./out/cover-群核科技-VP-Growth-zh.mdFor an English version:
node bin/cover.js \
--jd ./out/jd-vercel-headofapac.txt \
--company "Vercel" \
--role "Head of APAC GTM" \
--lang ennode bin/crawl.js --url "https://example.com/jobs/12345"
# → outputs ./out/jd-<company>-<title>.json + .txt
⚠️ For platforms requiring login (BOSS, LinkedIn jobs, Liepin executive search), copy-paste the JD into a.txtfile instead — we don't bypass auth walls.
node bin/prep.js --company "群核科技" --role "VP Growth"
# → outputs ./out/prep-群核科技.md
# (includes: company brief, 30 likely Qs+A frameworks, 5 reverse Qs,
# 100-day plan, salary negotiation strategy)- Open
target-companies/list.md— pick 3 S/A-tier companies - For each: find a real JD link or paste JD text
- Run
match.js→ reject anything < 70 score - For passing JDs: run
cover.js
- Polish the generated cover letters — make them feel human
- Send via the appropriate channel (LinkedIn / email / WeChat)
- Log in
outreach-tracker/tracker.md(or viainit-db+ a query)
- Check responses, schedule follow-ups
- For interview invites: run
prep.js24h before
- Review
outreach-trackerstats — what's working? - Update
target-companies/list.mdwith new finds - Reach out to 5 new headhunters from
headhunter-net/list.md
OfferAgent/
├── bin/ # CLI scripts
│ ├── match.js # JD ↔ CV scoring
│ ├── cover.js # cover letter generator
│ ├── crawl.js # JD URL → structured data
│ ├── prep.js # interview prep
│ ├── init-db.js # SQLite schema setup
│ └── cli.js # unified entry (placeholder)
├── cv/ # master CVs (CN + EN)
├── target-companies/ # 100+ scored target list
├── cover-letter-gen/ # templates + generated outputs
├── outreach-tracker/ # CRM (Markdown + SQLite)
├── interview-prep/ # playbook + generated briefs
├── headhunter-net/ # executive recruiter contacts
├── examples/ # sample JDs for testing
├── data/ # SQLite database (gitignored)
├── out/ # generated artifacts (gitignored)
├── README.md # project overview
├── USAGE.md # this file
└── package.json
- CV polish iteratively: After 5 applications, see which CV bullets get
reactions. Update
cv/范大勇-CV-V2-CN.mdand re-run match scoring. - Cover letters are 70 % of the value: A great cover letter on a decent CV beats a great CV with a generic cover letter.
- Track everything: If you don't log it, you can't improve it.
- Don't spam: 5 great applications/day > 50 spam applications/day.