内容
center">
< <source media="(prefers-color-scheme: dark)" srcset="app/static/JobSquire-Logo-DarkTheme.png">
<source media="(prefers-color-scheme: light)" srcset="app/static/JobSquire-Logo-LightTheme.png">
<img src="app/static/JobSquire-Logo-DarkTheme.png" alt="JobSquire" width="500">
</picture>
</p>
# JobSquire
[](LICENSE.md)
[](https://www.python.org/)
[](https://github.com/dellipse/job-squire/pkgs/container/job-squire)
一款自主托管、适用于两人的求职助手,基于Flask + SQLite构建,封装为单个Docker镜像,可运行为三个容器。它不仅**自动寻找**新工作机会,还能**跟踪**从初步联系到录用的申请过程。Claude集成了三种方式:手动复制粘贴、直接Anthropic API调用或实时MCP连接器。
> **双用户设计。** 该应用为两个可信账户而设计:一个管理员(操作员)和一个用户(求职者)。没有公开注册功能,也不适用于多租户使用。请将其置于TLS和反向代理后面。
**完整文档位于 [`docs/`](docs/README.md):** 架构、代码参考、配置、部署手册、MCP连接器和故障排除。
---
## 功能特点
**自动搜索工作** 按可配置的时间表(默认:周一至周五 8am, 1pm, 5pm,搜索地点当地时间)在多个职位板上运行。直接来源可在设置 → 来源中选择 — 无需单独设置API密钥:Dice(无需密钥)、Jobicy(无需密钥)、ZipRecruiter、Google Jobs via SerpApi(免费层,250次搜索/月)、Adzuna、Jooble、USAJOBS和The Muse。Google Jobs聚合了Indeed、LinkedIn和数其他职位板。新增后,会进行重复保存到Job Squire当有新内容时,会向求职者发送摘要。
**申请跟踪**完整的招聘流程:
保存 > 已申请 >筛选 > 面试 > 最终面试 > Offer > 已录用`
以及终端状态已拒绝`、`已撤回`、`已失联`、`已放弃`。
其他跟踪功能:面试总结(提问、自我评分、笔记)、每个职位的后续提醒、招聘人员人日志与提交跟踪、每个职位的附件、时间戳活动日志和CSV导出AI集成** 有三种路径,均可在设置 → AI中配置:
- **手动** -- 导出JSON,在任何Claude中分析,粘贴结果。无需设置。
- **自动功能** -- 配置一个或多个AI提供商(Google Gemini、Groq、OpenRouter、Ollama、Mistral、OpenAI、Anthropic等);应用直接调用它们,按需调度。实现搜索后自动分类、每日后续草稿和每周策略审查。Gemini、Groq和OpenRouter的免费层足以满足典型使用。
- **MCP连接器** -- 将Job S为自定义连接器。任何具有MCP能力的代理都可以:Claude Pro(通过OAuth,无需API密钥)、Hermes Agent(静态密钥,本地代理循环)或OpenClaw(自托管网关,用于通过Telegram、WhatsApp等聊天应用访问)。
自动功能和MCP连接器是独立的切换开关 -- 两者可以同时激活。
---
## 安装
**Linux和macOS — 使用安装脚本(推荐):**
```bash
curl -fsSL https://raw.githubusercontent.com/dellipse/job-squire/main/install.sh -o install.sh
bash install.sh
```
脚本检测Docker或Podman(如果两者则安装),生成密钥,提示输入密码,然后启动所有三个容器。在运行之前下载脚本,而不是直接将curl管道传输到bash -- 脚本需要交互式终端进行密码提示。
要撤销已完成的安装:`bash uninstall.sh` 从安装目录。脚本在删除任何内容之前会询问,并清理已创建的确切内容。
**平台特定指南** (手动设置、Windows或原生Python):
| 平台 | 指南 |
|---|---|
| Linux | [docs/install/linux.md](docs/install/linux.md) |
| macOS | [docs/install/macos.md](docs/install/macos.md) |
| Windows | [docs/install/windowsdocs/install/windows.md下面的手动快速入门假设已在Linux上安装Docker。
---
## 先决条件
- Docker + Docker Compose(v2)
- 用于TLS终止的反向代理(SWAG / nginx)。组合文件还支持本地测试的直接主机端口模式。
- 一个或多个职位来源的免费API密钥(推荐Adzuna + Jooble作为起始对)
- 可选:免费的商API密钥(Gemini、GroqRouter等)或Anthropic API密钥用于API模式;用于MCP模式的Claude Pro
---
## 快速入门
```bash
# 1. 克隆仓库
git clone https://github.com/dellipse/job-squirecd job-squire
# 2. 创建数据复制环境变量模板
mkdir -p data
cp examples/.env.example data/.env 3. 填写在任意编辑器中打开data/.env)
# 生成SECRET_KEY:
python3 -c "import secrets; print(secrets.token_hex(32))"
# 设置:SECRET_KEY,ADMIN_PASSWORD(避免在密码中使用$)
# 仅在需要第二个账户时设置USER_PASSWORD
# 4. 启动所有三个容器
docker compose up -d
# 5. 确认启动
docker compose logs -f job-squire # gunicorn 启动,账户已初始化
docker compose logs -f job-squire-worker # "scheduler up ..."
docker compose logs -f job-squire-mcp # uvicorn 在 :9000
```
Web应用可在 `http://localhost:8080` 访问。使用设置的密码以 `admin` 身份登录## 配置
配置分为两**环境变量** 存放在 `data/.env` 中,由所有三个容器在启动时加载。唯一必需的变量是 `SECRET_KEY` 和 `ADMIN_PASSWORD`。有关完整参考,请参见 [`docs/configuration.md`](docs/configuration.md)。
关键变量:
| 变量 | 用途 |
|---|---|
| `SECRET_KEY` | 签署会话并派生用于存储的所有机密的Fernet加密密钥。更改它会使已保存的API密钥和密码失效。 |
| `ADMIN_PASSWORD` | 管理员账户的密码。避免使用 `$` 字符(转义为 `)。 |
|_PASSWORD` | 可选。创建第二个求职者以仅使用管理员。 |
| `SESSION_COOKIE_SECURE` | 在WAG后面为 `;在纯开发中为 `false`。 |
| `PUBLIC_URL` | 用于通知电子邮件的基本URL(例如 `https://squire.yourdomain.com`)。 |
| `PUBLIC_MCP_URL` | MCP连接器的基本URL(启用MCP模式)。 |
| `SCHEEKDAY_H 在工作日运行搜索的时间(默认为 `8,13,17`)。 |
| `INGEST_API_KEY` | 启用 `POST /api/ingest` 端点。留空以禁用。 |
**应用内设置** 在首次登录后在设置页面输入并存储在数据库中加密:职位来源API密钥、SMTP凭证、Anthropic API密钥、搜索目标(职位名称、位置、半径)和候选人资料。
---
## 在SWAG后面默认的docker-compose文件在 `127.0.0.1:8080` 上发布Web应用,在 `127.0.0.1:9000` 上发布MCP服务器。任何反都可以通过这些端口访问与SWAG的Docker网络**:
```bash
# 创建共享网络
docker network create swag
# 在docker-compose.yml中:注释掉`ports`块,取消注释`networks`块
# 复制示例代理配置文件
cp/job-squire.subdomainpath/to/swag/config/nginx/proxy-confs examples/nginx/mcp-sdomain.conf /pathag/config/nginx/profs/
docker compose up -d
docker exec swt && docker exec swag nginx -s reload `squire.<yourdomain>` 和 `mcp-squire.<yourdomain>` 指向主机AG会自动颁发Let's Encrypt证书。有关完整的参见 [`docs/deploymentdocs/deployment.md)。
上运行多个实例(例如,每个求职者一个实例),请参见 [`docs/multi-instance.md`](docs/multi-instance.md)。
---
## 本地开发(无Docker)bash
python -venv && source .venv/bin/activate
pip install -r requirements.txt
export SECRET_KEY=dev \
ADMIN_PASSWORD=devpass \
USER_PASSWORD=devpass \
DATA_DIR=./data \
SESSION_COOKIE_SECURE=false
python w # http://localhost:8000
```
---
启用自动搜索
并打开 ** 来源**。添加至少一个提供商的API密钥(zuna +作为起始对)。勾选“使用此来源”并保存。
2. 在 **搜索** 选项卡中,设置目标职位名称和地点。地点必须为 `城市, 省`(例如 `奥斯汀, TX`)。
3. 在 **电子邮件** 选项卡中,配置SMTP以便求职者电子邮件。
4.立即运行搜索** 进行测试。新职位将出现在保存` 状态---
## AI工作流
### 申请工具包
打开任意职位并点击 **申请工具包**。下载生成的Markdown文件(其中包含候选人资料、职位发布和完整分步提示),并将其粘贴到Claude中。Claude运行适应性评估,调查公司和薪水,进行ATS关键词检查,然后返回量身定制的简历、求职信、申请和后续电子问题和LinkedIn外联。
在模式下,Claude工具包保存回自动设置后续提醒。
### 流水线分析
**AI分析** 选项卡显示最多三个选项 — 所有选项都可以:
- **手动** -- 始终可用。复制提供的提示,附加JSON导出,粘贴结构化JSON结果。
- **立即分析** -- 在启用自动功能时显示。按顺序调用已配置的AI提供商并一步应用结果。为Anthropic提供思考模式。
- **在Claude中打开** -- 在激活MCP连接器时显示。Cl实时流水线并写入分析。AI选项卡还显示五个例行提示(晨间简报、职位分类、工具包队列、稿、每周审查Claude的使用。
### MCP连接器设置
1. 确保在 `data/.env` 中设置了 `PUBLIC_MCP_URL=https://mcp-squire.<domain并且 `job-squire-mcp` 容器正在运行。
2. 在 **设置 → AI → MCP连接器** 中,启用连接器并记录连接器URL。
**ClaudeOAuth):**aude中,前往设置 → 连接器 → 添加自定义连接器。粘贴URL,给予与设置的确切名称,并**在Claude中打开** 按钮将中。不需要Anthropic API密钥。
Agent或其他工具密钥):** 点击API密钥** AI → MCP。配置工具 `PUBLIC_MCP 发送 `Authorization:>`。自动功能切换和MCP连接器的 — 两者启用。
MCP了23个用于。有关完整列表,请参见 [`docs/mector.md`](docs/mcp-connector.md)。
---
## 备份
所有内容都位于主机(默认为 `./quire/data`):SQLite上传文件和候选人资料。
```tar czf job-backup-$(date +%F).tgz -C ./job-squire/data .
## 重置密码
在 `data/.env` 中设置新值,添加 `RESET_UIDS_AND_PWDS_ON_START=true`,重启(`docker compose up -d`),确认登录,然后删除标志并再次重启。
---
##
```
job app/
__init__.py 应用工厂、数据库初始化、跨进程、初始化
models.py 所有模型
main.py 所有UI + API路由
auth.py/注销蓝图
ai.py AI逻辑:荷、API自动分类、后续草稿、每周审查
mcp_server.py 远程MCP服务器(OAuth 2.0/PKCE,23个工具)
worker.py APScheduler进程
providers.py 职位板适配器:Dice、ZipRecruiter、Google Jobs(SerpApi)、Adzuna、Jooble、USAJOBS、The Muse、Jobicy
search.py 搜索编排重、摄入、冷却期、电子邮件触发器
notify.py SMTP电子邮件:搜索后续摘要、每周 prompts.py 所有五个例行程序的Claude提示模板
.py WTForms crypto.py 存储机密的Fernet加密
timezones.py “城市,州”到IANA时区查找程序
extensions.py 共享的Flask扩展单例
templates/ Jinja2 static/ CSS和JS(每个文件一个;无内联JS执行CSP)
wsgi.py
Dockerfile
docker-compose.yml
requirements.txt
examples/
.env.example data/.env模板
nginx/ 示例SWAG/nginx代理配置文件
docs/ 完整文档
```
---
## 致谢
特别感谢C. Andrews,他的求职JobSquire的和试验场。本应用的功能和AI例行程序都源于实际使用 — 以及某位愿意成为第一个试验品的人的耐心。这份礼物送给你。
---
##
[AGPL-3.0](LICENSE.md)