内容
# 忘记雷电穹顶
**跳出雷电穹顶的求职之旅**
两百名候选人进入,只有一人离开——战斗是 LeetCode 题目和 AI 筛选,而不是任何类似工程的事情。忘记雷电穹顶吧。这个工具包可以让你的求职与那些 **不**让你进入穹顶的公司对抗:没有 CoderPad 挑战,没有限时的评估,没有在人类阅读你的名字之前与机器人交谈。
所有操作都在本地运行。你的求职流程存储在你机器上的 SQLite 文件中,你的电子邮件令牌保留在你的机器上,你的个人资料存储在一个 YAML 文件中,该文件从未被提交到仓库。
## 功能
- **职位发现**:通过实际阅读职位发布来验证职位——HTTP 200 不意味着职位是真实的或仍然开放(`skills/job-search-validation/`)
- **挑战过滤**:针对无需白板面试的公司,并跳过 LeetCode 门槛
- **电子邮件跟踪**:同步招聘人员的电子邮件,并将其分类(面试 / Offer / 拒绝)直接到你的本地求职流程中(`mcp-servers/gmail-server/`)
- **申请跟踪**:SQLite 求职流程:已申请,已联系,面试中,Offer 中;谁欠你回复,谁欠你回复(`src/job_cli.py`)
- **求职信**:由 *你的* 个人资料配置驱动——真实的,从不通用的
- **表单解析**:提取申请表单字段,并根据你的个人资料建议答案(`mcp-servers/form-parser/`)
- **代理驱动模式**:每个部分都作为 MCP 服务器公开;指向 Claude 或 GitHub Copilot,它们与你一起运行求职循环
## 快速入门(工程师)
```bash
git clone https://github.com/ethos71/forget-the-thunderdome
cd forget-the-thunderdome
pip install -r src/requirements.txt
cp profile.yaml.example profile.yaml # 填写你的信息和求职意愿
python3 src/job_cli.py dashboard # 你的求职流程(创建 data/job_tracker.db)
python3 src/job_cli.py jobs # 评分职位发布
python3 src/job_cli.py follow-ups # 谁需要提醒
```
电子邮件同步 — Gmail,任意 IMAP 邮箱,或 Microsoft 365 / Outlook(Graph):
```bash
# Gmail(一次性 OAuth 设置:docs/providers/gmail-setup.md)
python3 mcp-servers/gmail-server/gmail_tracker.py --sync --days 30
# 任意 IMAP 邮箱(Fastmail,iCloud,自托管,…)— 设置 FTT_IMAP_* 环境变量,
# 参考 docs/providers/imap-setup.md
python3 mcp-servers/imap-server/imap_tracker.py --sync --days 30
# Microsoft 365 / Outlook 通过 Graph — 设置 FTT_GRAPH_* 环境变量 + 注册 Azure 应用,
# 参考 docs/providers/microsoft-graph-setup.md
python3 mcp-servers/graph-server/graph_tracker.py --sync --days 30
```
所有四个服务器都将招聘人员的邮件分类到同一个本地求职流程中,并且都作为 `--mcp` 标准输入/输出服务器运行。
## 代理模式
该工具包的设计初衷是让 AI 代理驱动,并且每个部分都以两种方式工作。
**通过 CLI** — 在 Claude Code(或具有终端访问权限的 Copilot)中打开此仓库,代理运行循环 — 发现 → 验证(`skills/job-search-validation/`)→ 评分 → 申请 → 跟踪 → 跟进 — 通过调用与您相同的命令。
**通过 MCP** — gmail-server,job-discovery 和 form-parser 模块都作为带有 `--mcp` 标志的标准输入/输出 MCP 服务器运行,因此任何 MCP 客户端都可以将它们连接起来,无需 shell 访问权限:
```bash
python3 mcp-servers/gmail-server/gmail_tracker.py --mcp # 同步和分类电子邮件
python3 mcp-servers/job-discovery/scraper.py --mcp # 发现和评分职位发布
python3 mcp-servers/form-parser/form_parser.py --mcp # 解析表单,建议答案
```
复制 `.mcp.json.example` 到 `.mcp.json`(设置 `YOUR_PROJECT_ROOT`)以将所有三个注册到您的客户端。它们在本地运行,通过标准输入/输出,并共享与 CLI 相同的 `profile.yaml` 和 `data/job_tracker.db` — 您的机器上没有任何新内容离开。 `--mcp` 标志纯粹是附加的;上述 CLI 命令仍然不变。作为 MCP 服务器运行需要 `mcp` 包(`pip install mcp`);纯 CLI 不需要。
## 直接给我应用程序
`launcher/` 中提供了一个带有首次运行个人资料向导的桌面启动器 — 一个窗口化应用程序(无需终端),它写入您的 `profile.yaml` 并使用按钮运行循环:
```bash
python3 launcher/ftt_launcher.py # 打开 GUI(需要显示)
python3 launcher/ftt_launcher.py --check # 无头自检
```
要将双击应用程序交给没有 Python 安装的人员,请使用 PyInstaller 按平台冻结它 — `launcher/build.sh` 执行此操作(参见 `launcher/README.md`)。
## 路线图
已交付(参见上面的章节):gmail/job-discovery/form-parser 的原生 `--mcp` 服务器;**IMAP + Microsoft Graph 电子邮件提供商**;**HTML 仪表盘**(`job_cli.py dashboard --html`);**ICS 日历导出**(`job_cli.py calendar`);**带有首次运行个人资料向导的桌面启动器**。
仍在进行中:
- [ ] 日历:原生 Google / Microsoft OAuth 适配器(ICS 导出今天发货)
- [ ] Microsoft Graph 电子邮件:端到端验证 + 令牌刷新/回退(提供商已搭建;需要 Azure 应用注册来执行)
- [ ] 将启动器打包成签名 per-OS 安装程序(PyInstaller/CI)
## 隐私
- `profile.yaml`,`data/` 和电子邮件令牌从一开始就被 gitignore
- 除了您发送到职位发布板和您自己的电子邮件提供商的请求外,您的机器上没有任何内容离开
- 没有遥测,没有帐户,没有 SaaS
## 许可证
MIT — 参见 [LICENSE](LICENSE)。