再也不错过任何一场面试。
AI 驱动的邮件解析,将招聘邮件转为原生提醒事项。
你在找工作。邮箱里塞满了招聘邮件——面试邀请、在线测评、笔试通知、截止日期。重要的邮件被淹没在"投递成功"回执和垃圾邮件里。
你错过了一场面试。 或者记错了时间。或者忘了那个编程测试的截止日期。
OfferCatcher 自动扫描你的邮件,使用 AI 提取招聘事件,再把它们同步到 iPhone/Mac 的原生提醒事项。
📧 邮件到达 → 🤖 AI 解析 → 🔔 提醒创建
没有正则。没有脆弱的模式匹配。智能提取,适配所有邮件格式和语言。
OfferCatcher 故意拆成两层:
- OpenClaw 编排层:负责扫描 Apple Mail、调用 LLM、校验事件 JSON、决定哪些事件需要同步。
- 原生桥接层:负责真正写入提醒事项。
scripts/apple_reminders_bridge.py默认优先走remindctl(Swift + EventKit),只有在本机没有remindctl时才回退到 AppleScript。
这样做是为了避免把后台 node -> 提醒事项.app 的 Automation 权限当成主路径。对 macOS 来说,这条权限链通常不如原生 bridge 稳定。
- 🤖 AI 驱动解析 — LLM 理解任意邮件格式,任意语言
- 🍎 原生苹果集成 — 与 Mail.app 和 Reminders.app 深度集成
- 📱 跨设备同步 — 通过 iCloud 同步到 iPhone、iPad、Mac
- ⚡ 全自动运行 — 一次配置,通过 OpenClaw heartbeat 自动运行
- 🌍 全语言支持 — 中文、英文、日文,统统不在话下
- LINUX DO — 中文开发者社区
# 安装
curl -sSL https://raw.githubusercontent.com/NissonCX/offercatcher/main/install.sh | bash
# 推荐安装原生桥接
brew install steipete/tap/remindctl
remindctl authorize
# 配置
echo 'mail_account: "Gmail"' >> ~/.openclaw/offercatcher.yaml
# 扫描
python3 ~/.openclaw/workspace/skills/offercatcher/scripts/recruiting_sync.py --scan-onlyOpenClaw 会自动解析结果并创建提醒。
- macOS(Apple Mail 和 Reminders 集成)
- Python 3.11+
- 推荐安装
remindctl(brew install steipete/tap/remindctl) - OpenClaw(可选,用于自动化)
# 搜索 skill
openclaw skills search offercatcher
# 安装到工作区
openclaw skills install offercatchercurl -sSL https://raw.githubusercontent.com/NissonCX/offercatcher/main/install.sh | bash安装完成后,建议先授权原生桥接:
remindctl authorizegit clone https://github.com/NissonCX/offercatcher.git
cd offercatcherpython3 scripts/list_mail_sources.py显示 Apple Mail 中配置的所有账号:
[
{"account": "Gmail", "mailbox": "INBOX"},
{"account": "iCloud", "mailbox": "INBOX"}
]创建 ~/.openclaw/offercatcher.yaml:
mail_account: "Gmail" # Apple Mail 账号名
mailbox: "INBOX" # 要扫描的邮箱文件夹
days: 2 # 扫描最近 N 天
max_results: 60 # 最大邮件数python3 scripts/recruiting_sync.py --scan-only输出(JSON 格式,供 OpenClaw LLM 解析):
{
"emails": [
{
"message_id": "12345",
"subject": "面试邀请 - 软件工程师",
"sender": "recruiting@company.com",
"received_at": "2026-04-01 10:00",
"body": "尊敬的候选人,您的面试安排在..."
}
]
}OpenClaw 自动:
- 使用 LLM 解析每封邮件
- 提取公司、事件类型、时间、链接
- 把最终写入交给原生提醒事项桥接层
或手动应用解析结果:
python3 scripts/recruiting_sync.py --apply-events /tmp/events.jsonpython3 scripts/manual_event.py \
--title "Google 面试" \
--due "2026-04-15 14:00" \
--notes "链接: https://meet.google.com/xxx"┌─────────────────┐ ┌─────────────────┐ ┌────────────────────────────┐
│ --scan-only │ ──▶ │ OpenClaw LLM │ ──▶ │ 原生桥接写入提醒事项 │
│ 扫描邮件 │ │ 解析事件 │ │ remindctl / AppleScript │
└─────────────────┘ └─────────────────┘ └────────────────────────────┘
| 正则 | LLM |
|---|---|
| 遇到新格式就挂 | 适配任意格式 |
| 需要公司特定规则 | 适用于任何公司 |
| 需要人工维护 | 零维护 |
| 特定语言 | 全语言支持 |
| 参数 | 默认值 | 说明 |
|---|---|---|
--mail-account |
全部 | Apple Mail 账号名 |
--mailbox |
INBOX | 邮箱文件夹 |
--days |
2 | 扫描最近 N 天 |
--max-results |
60 | 最大邮件数 |
--dry-run |
false | 测试运行,不创建提醒 |
--verbose |
false | 详细日志 |
OFFERCATCHER_MAIL_ACCOUNT="Gmail"
OFFERCATCHER_DAYS=7
OFFERCATCHER_MAX_RESULTS=100
OFFERCATCHER_LOG_LEVEL=DEBUG--apply-events 接受的格式:
{
"events": [
{
"id": "唯一标识",
"company": "阿里巴巴",
"event_type": "interview",
"title": "阿里巴巴面试",
"timing": {"start": "2026-04-15 14:00", "end": "2026-04-15 15:00"},
"role": "软件工程师",
"link": "https://meeting-url"
}
]
}事件类型:interview、ai_interview、written_exam、assessment、authorization、deadline
提醒列表 |
提醒详情 |
offercatcher/
├── scripts/
│ ├── recruiting_sync.py # 主脚本(扫描/应用)
│ ├── apple_reminders_bridge.py # Apple Reminders 桥接
│ ├── manual_event.py # 手动记录事件
│ └── list_mail_sources.py # 列出邮箱账号
├── tests/ # 单元测试
├── SKILL.md # OpenClaw skill 定义
└── README.md # 英文文档
欢迎提交 Pull Request!
用 ❤️ 为求职者打造

