hh-ru-apply: hh.ru application automation
hh-ru-apply
A Node.js and Playwright script suite that searches hh.ru vacancies, scores them with an LLM, drafts cover letters and opens the application in a browser
High risk
We rate an entry high when the tool writes to external systems, handles money, production databases or secrets, or runs arbitrary commands. The CLI installs it only with your consent.
Why this level
- The hh-apply-chat flow can automatically send an application and a message to the employer unless --dry-run or --no-submit is passed
- Bulk application automation, per the README's own warning, can lead to hh.ru account restrictions
Install
Manual install
git clone https://github.com/jacintacaryophyllaceous404/hh-ru-apply && cd hh-ru-apply && npm install && npx playwright install chromium && cp .env.example .envLocal install, option A from the README.
This is third-party code. Review the repository files before installing.
What it does
The tool drives a real Chromium browser via Playwright with a saved profile so you don't log in again. npm run vacancies searches by keywords from a file, npm run harvest scores each one through an LLM via OpenRouter across three scores (vacancy relevance, CV match, and an overall score) and queues the results locally. A web dashboard at localhost:3849 shows the queue, generates and lets you edit a cover letter, and can launch the application right from the UI. There are two apply flows: hh-fill-letter inserts the letter into the vacancy page's application form and deliberately does not press submit, waiting for a manual check, while hh-apply-chat sends the application with the letter through the employer chat and can submit automatically unless --dry-run or --no-submit is passed. A separate flow scans vacancies from Telegram channels via a bot.
Who it is for. For job seekers applying to many hh.ru vacancies who want an agent to filter out irrelevant ones and draft cover letters, while staying in control of when applications actually go out.
Good fit when
- You need to filter a large stream of hh.ru vacancies by resume match before applying
- You want cover letter drafts in your own style based on examples
- You're willing to keep a browser open and manually confirm before each application goes out
Not a fit when
- You're not willing to risk your hh.ru account being limited: the README explicitly warns that bulk application automation may violate the service's rules
- You need an official API instead of driving a real browser: Playwright selectors break when hh.ru changes its markup
- You need fully unattended submission with no letter review: the form-based flow deliberately does not submit on its own
Example request
Collect today's python backend vacancies, score them against my resume, and draft cover letters, I'll submit the applications myselfLimitations
Both the README and SKILL.md explicitly warn: bulk application automation may violate hh.ru's rules and lead to account restrictions, use at your own risk. CAPTCHA and other protections may appear, so a manual login step is built in. The hh-apply-chat flow can submit an application automatically unless --dry-run or --no-submit is passed. The Playwright selectors for the form and chat are tied to hh.ru's current markup and need manual updates via codegen when it changes.
How to disable. Stop the dashboard and containers (docker compose down) and delete the local project folder along with the saved Chromium profile in data/session.
Security check
- The hh-apply-chat flow can automatically send an application and a message to the employer unless --dry-run or --no-submit is passed
- Bulk application automation, per the README's own warning, can lead to hh.ru account restrictions
README in short
The Russian README openly warns about the risk of violating hh.ru's rules and getting the account restricted through bulk automation. It describes eight npm commands: session-saving login, vacancy search, LLM scoring, the dashboard, Telegram scanning, two application flows, and selector generation. It covers setting up search keywords, a resume, a letter template and environment variables for OpenRouter and the Telegram bot, plus the project structure and a Docker Compose setup. MIT license.
FAQ
Does the tool submit applications without me?
The form flow (hh-fill-letter) only inserts the letter and waits for a manual check, while the chat flow (hh-apply-chat) can submit automatically unless you pass --dry-run or --no-submit.
What if hh.ru changes its vacancy page layout?
The Playwright selectors will stop finding elements; regenerate them with npm run codegen-hh and update lib/hh-response-selectors.mjs and lib/hh-chat-selectors.mjs.
Related
A self-hosted knowledge base with block-level references and a built-in MCP server for connecting AI agents to your notes
A CLI for every Google Workspace API with JSON output and agent skills: Drive, Gmail, Calendar, Sheets and more
Local search over Markdown notes, docs and meeting transcripts: keywords, semantic search and reranking, with an MCP server
A task manager for AI-driven development: breaks a PRD into dependent tasks and guides the agent through them via MCP or CLI