🚀 OfferAgent v0.3.0
Built and dogfooded while hunting my own VP/CMO/CGO role. Sent 30+ real emails today via this system. NDR auto-recovery, email permutation, and a daily macOS LaunchAgent that runs autonomously and survives sleep/wake.
✨ Highlights
🤖 Fully autonomous daily flow
- macOS LaunchAgent fires at 10:00 every day — if Mac is asleep, queue runs immediately on next wake (cron doesn't do this; LaunchAgent does)
- End-to-end script: NDR scan → Scrapling refresh → permutation → batch send → CRM logging
🔍 NDR Auto-Recovery
`bin/check-ndr.js` — scans Gmail bounces from last 24h, marks `failed` in CRM, releases dedupe quota so the daily agent retries with permuted addresses tomorrow.
🧬 Email Permutation Algorithm
`bin/permute-emails.js` — generates every (company × pattern) combination across:
- 17 recruiting patterns: `careers, jobs, talent, talents, recruit, recruiting, hr, hire, hiring, people, ta, join, apply, resume, work, opportunities, zhaopin`
- 19 CXO patterns (opt-in via `--cxo`): `ceo, coo, cto, cmo, cgo, cpo, chro, cfo, founder, founders, leadership, execs, contact, hi, hello, info, bd, partnerships, partners`
- Deduped against `outbound_log`, priority-ordered (careers > talent > recruit > hr > ...)
✉️ Self-Promoting Email Footer
Every email automatically appends:
✉️ This email was sent by OfferAgent — an open-source job-hunt AI Agent I built end-to-end. Repo: github.com/iPythoning/OfferAgent · Itself a live proof I can ship AI Agents in production.
Turns automation into a differentiator.
📦 New Files
```
bin/check-ndr.js — Gmail NDR scanner
bin/permute-emails.js — Pattern permutation
bin/cleanup-drafts.js — Test draft cleanup
bin/cv-to-pdf.js — Markdown CV → PDF
bin/daily-haitou.sh — Daily orchestrator
bin/send-batch.js — Templated batch send
~/Library/LaunchAgents/com.fandayong.offer-agent.daily.plist
```
🔐 Security
- `gmail-sender/credentials.json` and `token.json` blacklisted in `.gitignore`
- LinkedIn cookies in `social-dm/cookies/` blacklisted
- Generic `/credentials.json` / `/token.json` rules
📊 Real Send Stats Today
```
✅ sent : 17 (real Gmail delivery)
❌ failed : 13 (NDR detected, marked for retry)
📝 quota : 30/30 today, resets tomorrow
```
🛠 Setup (one-time)
```bash
git clone https://github.com/iPythoning/OfferAgent
cd OfferAgent
npm install
pip3 install --break-system-packages -r email-finder/requirements.txt
cp .env.example .env # fill in keys
mv ~/Downloads/client_secret_*.json gmail-sender/credentials.json
node bin/init-db.js
node bin/gmail-auth.js
node bin/linkedin-dm.js --login
launchctl load ~/Library/LaunchAgents/com.fandayong.offer-agent.daily.plist
```
📚 Skills Published
- OpenClaw skill registry: `~/clawd/skills/offer-agent/`
- Hermes skill registry: `~/.hermes/skills/career/offer-agent/`
- Both auto-installed via `bash skills/install.sh`
License
MIT — fork freely. PRs welcome.