vasu-devs/JustHireMe
GitHub: vasu-devs/JustHireMe
JustHireMe 是一个本地优先、开源的AI求职工作台,帮助用户爬取职位、透明地评估匹配度并自动生成定制申请材料。
Stars: 1956 | Forks: 313
JustHireMe
本地优先的 AI 求职智能工具:用于筛选更合适的职位、评估匹配度并生成量身定制的申请材料。
功能简介 · 工作流程 · 架构 · 快速入门 · 标准流程 · Agent 技能 + MCP · 贡献指南 · 路线图
## Star 历史Kuzu"] A --> C["Skill + Project Vectors
LanceDB"] D["Scraper Sources"] --> E["Normalized Leads"] E --> F["Lead Quality Gate"] F --> G["Ranker + Evaluator"] B --> G C --> G G --> H["Lead Pipeline"] H --> I["Customizer"] I --> J["Resume PDF"] I --> K["Cover Letter PDF"] I --> L["Outreach Drafts"] ``` ``` flowchart TD S["Source Adapter"] --> N["Normalize Lead"] N --> Q{"Quality Gate"} Q -- "Reject" --> R["Filtered with reason"] Q -- "Accept" --> C["Local CRM"] C --> E["Fit Evaluation"] E --> U["User Review"] Q:::gate R:::reject C:::store E:::score classDef gate fill:#e0f2fe,stroke:#0284c7,color:#0f172a classDef reject fill:#fee2e2,stroke:#dc2626,color:#0f172a classDef store fill:#dcfce7,stroke:#16a34a,color:#0f172a classDef score fill:#fef3c7,stroke:#d97706,color:#0f172a ``` ## 功能简介
从多种来源爬取从 ATS/公司招聘板、RSS 订阅源、Hacker News、GitHub 类来源、Reddit/社区来源、API 以及自定义配置目标收集职位信息。 |
拒绝低质量线索在保存线索前应用确定性质量门槛。过滤掉过时、信息不足、仅面向资深人员、无偿、垃圾或缺乏上下文的信息。 |
透明地评估匹配度对角色对齐度、技术栈覆盖、项目证据、资历匹配度、地点约束、红旗标志、来源信号以及语义个人资料相似度进行评分。 |
生成定制化材料包为任何领域(不仅限于软件)的职位生成简历 PDF、求职信 PDF、创始人消息、LinkedIn 备注、冷邮件、关键词覆盖总结以及所选项目说明。 |
Port + API Token"] end subgraph Backend["Python Backend Sidecar"] API["FastAPI + WebSockets"] Scrapers["Scraper Agents"] Gate["Lead Quality Gate"] Ranker["Ranker / Evaluator"] Customizer["Document + Outreach Generator"] end subgraph LocalData["Local Data Layer"] SQLite["SQLite CRM"] Kuzu["Kuzu Profile Graph"] LanceDB["LanceDB Vectors"] Files["Generated PDFs"] end UI --> Bridge --> API API --> Scrapers --> Gate --> SQLite API --> Ranker Ranker --> Kuzu Ranker --> LanceDB API --> Customizer --> Files API --> SQLite ``` | 领域 | 技术 | | --- | --- | | 桌面壳 | Tauri 2(自动更新、浅色/深色/系统主题) | | 前端 | React 19, TypeScript, Vite, Tailwind CSS | | 后端 API | Python 3.13, FastAPI, WebSockets | | 本地 CRM | SQLite | | 个人资料图 | Kuzu | | 向量存储 | LanceDB | | 嵌入 | 本地 ONNX 模型(`all-MiniLM-L6-v2`)——无需 API 密钥 | | 匹配 | 确定性评分、本地语义搜索、可选的 LLM 评估 | | 文档 | Markdown/PDF 渲染 | | 实验实验室 | Playwright 浏览器自动化 | | 打包 | 精简 Tauri 安装程序 + 首次运行运行时包(Windows / macOS / Linux) | **首次运行运行时包。** 为了保持安装程序较小(约 100 MB,而非约 450-700 MB),重型运行时(Playwright 浏览器、向量库和 ONNX 嵌入模型)不捆绑到安装程序中。应用在首次运行时下载一次,验证后缓存。该包具有内容版本控制,因此常规的应用更新会重用缓存的包,而不会重新下载。 更多详情:[docs/ARCHITECTURE.md](docs/ARCHITECTURE.md) ## 仓库地图 ``` JustHireMe/ |-- src/ React frontend workbench | |-- api/ HTTP/WebSocket API clients and types | |-- features/ Apply, dashboard, graph, pipeline, profile, settings | |-- shared/ Components, hooks, context, utilities | `-- main.tsx Frontend entrypoint |-- backend/ Python FastAPI sidecar | |-- api/ Main app, routers, auth, scheduler, WebSockets | |-- core/ Config, logging, version, telemetry, shared types | |-- contracts/ Service and data contracts | |-- data/ SQLite repositories, graph/vector helpers, migrations | |-- discovery/ Lead discovery, quality gate, source adapters | |-- generation/ Resume, cover letter, and outreach generators | |-- ranking/ Fit scoring, criteria, semantic/evaluator logic | |-- services/ Domain service apps and routers | `-- tests/ Backend unit, integration, and regression tests |-- src-tauri/ Tauri Rust shell | `-- resources/ Bundled sidecar/runtime resources generated for packages |-- website/ Public website |-- docs/ Architecture, source adapter, release docs |-- scripts/ Build scripts |-- skills/ Agent skill instructions `-- .github/ CI, issue templates, PR template ``` ## 快速入门 ### 安装桌面应用 如果你不是开发者,只想运行 JustHireMe,请使用此路径。打开最新的 [GitHub Release](https://github.com/vasu-devs/JustHireMe/releases/latest) 并获取你平台的资源。 | 平台 | 下载 | 备注 | | --- | --- | --- | | Windows | `JustHireMe_*_x64-setup.exe` | 如果遇到 SmartScreen 提示,请点击 **更多信息** -> **仍然运行** | | macOS(Apple Silicon) | `JustHireMe_*_aarch64.dmg` | 尚未公证:如果 macOS 提示应用已损坏/未验证,请在 **系统设置 -> 隐私与安全性 -> 仍要打开** 中允许 | | Linux(Debian/Ubuntu) | `JustHireMe_*_amd64.deb` | 使用 `sudo dpkg -i` 安装文件 | | Linux(便携版) | `JustHireMe_*_amd64.AppImage` | `chmod +x` 然后运行 | **首次启动会下载运行时包。** 首次打开应用时,会通过 HTTPS 获取运行时(浏览器 + 向量库 + 嵌入模型)并缓存;这是一次性下载。之后,应用准备好离线运行,常规更新不会重新下载。 应用会自动从最新的 GitHub 版本更新自身。发布说明包含 SHA256 校验和,每个安装程序均由 GitHub Actions 从发布标签构建,因此发布的二进制文件与仓库源代码一致。 ### 要求 | 工具 | 版本 | | --- | --- | | Node.js | 推荐 24;CI 使用 Node 24 | | Python | 3.13+ | | Rust | stable | | uv | 最新稳定版 | | Git | 任何现代版本 | 可选: - Ollama 用于本地模型实验 - Playwright 浏览器依赖仅用于实验性自动化工作 ### 快速前端预览 如果只想检查 UI、设计方向或前端代码,请使用此路径。 ``` git clone https://github.com/vasu-devs/JustHireMe.git cd JustHireMe npm ci npm run dev ``` 这将仅启动 Vite 前端。需要后端支持的工作流可能会显示空状态、模拟状态或不可用状态,具体取决于界面。 ### 完整桌面设置 如果你需要 Tauri 壳和 Python 后端侧车,请使用此路径。 ``` git clone https://github.com/vasu-devs/JustHireMe.git cd JustHireMe npm ci cd backend uv sync --dev cd .. ``` 然后运行: ``` npm run tauri dev ``` Tauri 壳会启动前端并启动 Python 后端侧车/开发进程。 仅当处理公共网站或运行完整本地检查组时,才需要安装网站依赖: ``` cd website npm ci cd .. ``` ### 提交 Issue 前 - 检查错误是否属于支持的核心行为还是实验性自动化。 - 从日志或截图中移除 API 密钥、cookies、简历、本地数据库和生成的私有文档。 - 对于来源请求,请提供公开示例 URL 和预期的规范化字段。 - 对于排名错误,请提供预期的评分行为以及经过清理的职位/个人资料片段。 ## 开发命令 | 任务 | 命令 | | --- | --- | | 安装前端依赖 | `npm ci` | | 安装后端依赖 | `cd backend && uv sync --dev` | | 安装网站依赖 | `cd website && npm ci` | | 前端开发服务器 | `npm run dev` | | 网站开发服务器 | `cd website && npm run dev` | | 桌面开发应用 | `npm run tauri dev` | | 版本一致性检查 | `npm run version:check` | | TypeScript 检查 | `npm run typecheck` | | 前端测试 | `npm test` | | 前端构建 | `npm run build` | | 后端测试 | `cd backend && uv run python -m pytest tests -q` | | 后端回归冒烟 | `cd backend && uv run python -m pytest tests/test_regressions.py tests/test_api.py::TestAuthGate` | | Rust 测试 | `cd src-tauri && cargo test --lib` | | Rust 检查 | `cd src-tauri && cargo check` | | 网站构建 | `cd website && npm run build` | | 所有本地检查 | `npm run check` | | 构建侧车 | `npm run build:sidecar` | | 构建前端、网站和 Rust 检查 | `npm run build:all` | | 快速发布冒烟 | `npm run release:smoke` | | 发布前检查 | `npm run release:preflight` | | Windows 安装程序包预演(需要更新器签名环境) | `npm run release:windows` | | Linux 软件包 | `npm run release:linux` | | macOS 软件包 | `npm run release:macos` | `npm run check` 会运行版本检查、前端类型检查、前端测试、前端构建、网站构建、后端测试、Rust 测试和 Rust 检查。请先运行 `npm ci`、`cd backend && uv sync --dev` 和 `cd website && npm ci`,以确保每个环节都有其依赖。 在 Windows PowerShell 中,如果 `npm.ps1` 垫片被执行策略阻止,请使用 `npm.cmd` 代替 `npm`。如果你的 shell 不支持 `&&`,请将 `cd` 命令和后续命令作为独立行运行。 ## 标准流程 对于日常开发和拉取请求,请使用此工作流程: 1. 从锁定文件同步:`npm ci`,如果涉及网站或完整检查套件,还需 `cd backend && uv sync --dev` 和 `cd website && npm ci`。 2. 保持更改范围集中。核心产品工作应保留本地优先存储、可解释的排名和人工审核的生成。浏览器自动化保持实验性和可选性。 3. 针对你更改的领域运行针对性检查,然后在可行的情况下,在提交 PR 前运行 `npm run check`。 4. 为行为更改添加或更新测试。对于排名、来源、API、存储和生成相关的更改,请使用后端回归测试。 5. 每当设置、命令发布行为、面向用户的工作流、源适配器契约或隐私期望发生变化时,更新文档。 6. 不要提交 `.env`、API 密钥、cookies、令牌、私有简历、本地数据库、图/向量存储、生成的 PDF、应用数据或生成的侧车二进制文件。 对于维护者构建,请使用此发布流程: 1. 使用 `npm run version:bump -- X.Y.Z` 更新所有版本化的文件。 2. 通过 `npm run check:all`、`npm run lint`、`npm run test:coverage`、`npm run release:smoke` 和 `npm run smoke:windows-update` 运行本地验证。 3. 推送 `vX.Y.Z` 标签,让 GitHub Actions 构建、签名、验证更新器元数据、冒烟测试 Windows 安装程序、生成校验和并从 CI 发布发布资源。 4. 在检查下载的 CI 资源文件夹时,使用 `npm run release:verify-updater -- release-assets vX.Y.Z` 验证生成的更新器制品。 详细的发布检查清单存放在 [docs/MAINTAINER_RELEASE_CHECKLIST.md](docs/MAINTAINER_RELEASE_CHECKLIST.md)、[docs/windows-release.md](docs/windows-release.md) 和 [docs/PRODUCTION_RELEASE_ROADMAP.md](docs/PRODUCTION_RELEASE_ROADMAP.md) 中。 ## Agent 技能和 MCP JustHireMe 包含两个可重用的 agent 接口: - 一个 agent 中立的技能文件,位于 `skills/justhireme/SKILL.md` - 一个轻量级的 stdio MCP 服务器,位于 `backend/mcp_server.py` 该技能是带有 YAML 前置元数据的纯 Markdown 文件。它旨在用于任何能够加载本地指令的 AI 编码助手,包括 Claude、Codex、IDE agents 和自定义 agent 运行器。它告诉 agent 如何在此仓库中安全工作:保留本地优先行为、保持排名可解释、将浏览器自动化视为实验性、并使用现有的后端/前端模式。 ### 使用技能 将你的 agent 或助手指向: ``` skills/justhireme/SKILL.md ``` 如果你的 agent 期望技能位于单独的目录中,请将 `skills/justhireme` 文件夹复制或符号链接到该工具的技能/指令位置。该技能不依赖于 Codex 特定的 API 运行时。 ### 使用 MCP 服务器 首先安装后端依赖: ``` cd backend uv sync --dev cd .. ``` 在 Windows 上从仓库根目录启动 MCP 服务器: ``` backend\.venv\Scripts\python.exe backend\mcp_server.py ``` 在 macOS/Linux 上启动: ``` backend/.venv/bin/python backend/mcp_server.py ``` MCP 服务器暴露以下工具: | 工具 | 用途 | | --- | --- | | `score_job_fit` | 根据候选人 JSON 个人资料对原始职位发布进行评分 | | `evaluate_lead_quality` | 对规范化的线索运行确定性质量门槛 | | `extract_lead_intel` | 从线索文本中提取公司、地点、预算、紧急程度、技术栈和信号质量 | MCP 客户端配置示例: ``` { "mcpServers": { "justhireme": { "command": "/absolute/path/to/JustHireMe/backend/.venv/bin/python", "args": ["/absolute/path/to/JustHireMe/backend/mcp_server.py"], "cwd": "/absolute/path/to/JustHireMe" } } } ``` 在 Windows 上,使用虚拟环境解释器 `backend\\.venv\\Scripts\\python.exe`。更多详情:[docs/MCP.md](docs/MCP.md) ## 核心概念 ### 源适配器 源适配器将外部职位源转换为规范化的线索字典。 实现位于 `backend/discovery/sources/`。 ``` flowchart LR A["Raw Source"] --> B["Adapter"] B --> C["Normalized Lead"] C --> D["Quality Gate"] D --> E["Local CRM"] ``` 阅读:[docs/source-adapters.md](docs/source-adapters.md) ### 质量门槛 质量门槛位于 `backend/discovery/quality_gate.py`。 它检查: | 信号 | 示例 | | --- | --- | | URL 存在 | 拒绝没有来源/申请 URL 的行 | | 发布深度 | 惩罚信息不足的爬取片段 | | 新鲜度 | 惩罚过时的职位 | | 资历级别 | 在面向初学者的订阅源中拒绝仅面向资深人员的职位 | | 红旗标志 | 惩罚无偿、仅提成、无预算、需做家庭作业或曝光类的帖子 | | 公司/上下文 | 惩罚缺少公司或来源上下文不清晰的条目 | ### 排名 排名结合了: - 来源信号 - 线索质量评分 - 确定性匹配准则 - 资历上限 - 项目和经验证据 - 可选的 LLM 辅助评估 - 语义匹配(当向量可用时) - 反馈学习 ### 向量匹配 ``` flowchart LR Resume["Resume / Profile"] --> Graph["Kuzu Graph"] Resume --> Embed["Embeddings"] Embed --> Vectors["LanceDB"] Job["Job Description"] --> Query["Semantic Query"] Query --> Vectors Vectors --> Fit["Semantic Fit Signal"] Graph --> Fit ``` ### 定制器 对于优质线索,定制器生成: | 输出 | 用途 | | --- | --- | | 量身定制的简历 PDF | 针对特定职位的简历包 | | 求职信 PDF | 针对性的申请叙述 | | 创始人消息 | 简短直接的联络内容 | | LinkedIn 备注 | 简洁的连接/消息草稿 | | 冷邮件 | 较长的联络草稿 | | 关键词覆盖 | 显示生成的包覆盖了哪些关键词 | | 所选项目 | 解释使用了哪些个人资料证据 | ## 配置和隐私 设置可在桌面应用内部配置。对于 v1 版本,API 密钥存储在本地应用设置中。 本地数据可能包括: | 数据 | 本地存储 | | --- | --- | | 个人资料图 | 是 | | 向量表 | 是 | | 线索 CRM | 是 | | 生成的 PDF | 是 | | 设置 | 是 | | 活动历史 | 是 | 请勿分享包含 API 密钥、cookies、私有简历或个人数据的屏幕截图、日志、本地应用数据、问题附件或数据库文件。 计划改进: - 基于操作系统钥匙串的 API 密钥存储 ## 发布版本 每个版本都通过 GitHub Actions 从单个 `v*` 标签构建并发布适用于 **Windows、macOS 和 Linux** 的安装程序——绝不会从维护者工作站上传。管道构建每个平台的侧车和 Tauri 安装程序,运行自动更新冒烟测试,生成 SHA256 校验和并发布资源。Windows 和 macOS 构建尚未进行代码签名/公证,因此操作系统在首次启动时可能会发出警告(请参见上方的安装表);代码签名和 macOS 公证是下一个打包里程碑。 ``` npm run release:smoke npm run smoke:windows-update ``` 仅在需要有意进行本地包预演且 Tauri 更新器签名变量可用时使用 `npm run release:windows`。当你明确测试特定平台路径时,使用 `npm run release:linux` 或 `npm run release:macos` 进行平台特定的本地包构建。 发布冒烟测试和打包详情:[docs/windows-release.md](docs/windows-release.md)、[docs/MAINTAINER_RELEASE_CHECKLIST.md](docs/MAINTAINER_RELEASE_CHECKLIST.md) 和 [docs/PRODUCTION_RELEASE_ROADMAP.md](docs/PRODUCTION_RELEASE_ROADMAP.md)。 ## 贡献指南 最佳的初次贡献路径是爬取器/来源质量控制。
适合初学者的 Issue添加解析器测试用例、改进文档、优化 UI 文案或添加小的来源规则。 |
来源贡献者添加 ATS/公司招聘板适配器,包含规范化的线索字段和质量门槛测试。 |
排名贡献者改进评分区间、资历处理、语义降级以及反馈学习。 |
标签:AI, CNCF毕业项目, DNS解析, Python, star-history, Tauri, 人工智能, 匹配度排名, 工作台, 开源项目, 招聘, 数据隐私, 无后门, 本地优先, 本地推理, 桌面应用, 求职, 特征检测, 用户模式Hook绕过, 申请材料生成, 简历匹配, 职业发展, 职位推荐, 职位爬取, 自动化代码审查, 自动化求职