Metadata-Version: 2.4
Name: openhunt-cli
Version: 0.2.0
Summary: CLI tool for automating job seeker actions on hh.ru
Author: Mikhail
Author-email: Mikhail <tarminik@gmail.com>
License-Expression: MIT
Requires-Dist: textual>=3.0
Requires-Dist: playwright>=1.50
Requires-Dist: click>=8.0
Requires-Dist: tomli-w>=1.0
Requires-Dist: openai>=1.0
Requires-Python: >=3.12
Description-Content-Type: text/markdown

# openhunt

CLI-инструмент для автоматизации поиска работы на hh.ru.

## Возможности

- Автоматические отклики на вакансии (по поисковому запросу или из рекомендаций)
- Гибкая стратегия сопроводительных писем (шаблон, LLM-генерация, авто)
- Сохранение поисковых запросов для повторного использования
- Сохранение сессии — авторизация один раз, дальше всё работает автоматически

### В планах

- Автоматическое заполнение анкет работодателей
- Общение с работодателями в чатах
- TUI-интерфейс
- Система памяти — openhunt учится на ваших ответах и со временем работает автономно

## Установка

Требуется Python 3.12+.

```bash
uv tool install openhunt-cli
```

Или через pipx / pip:

```bash
pipx install openhunt-cli
# или
pip install openhunt-cli
```

Браузер Chromium установится автоматически при первом запуске.

## Использование

### Авторизация

При первом запуске нужно авторизоваться на hh.ru. Откроется браузер — введите номер телефона, решите капчу и введите код из SMS:

```bash
openhunt login
```

Сессия сохраняется между запусками. Повторный логин нужен только когда сессия истечёт.

### Настройка резюме

Сохраните ID резюме один раз (ID можно найти в URL вашего резюме на hh.ru):

```bash
openhunt resume set <id>
```

После этого `--resume` можно не указывать — сохранённое резюме используется автоматически.

### Отклики на вакансии

```bash
# По поисковому запросу
openhunt apply --query "python developer"

# С использованием языка запросов hh.ru
openhunt apply --query "NAME:(python OR golang) AND NOT стажёр"

# Из рекомендованных вакансий (на основе вашего резюме)
openhunt apply --recommended

# Ограничить количество откликов (по умолчанию 10)
openhunt apply --query "backend python" --limit 20

# По сохранённому запросу
openhunt apply --saved backend

# Пробный запуск — показать вакансии без отправки откликов
openhunt apply --query "backend python" --dry-run

# Переопределить резюме для конкретного запуска
openhunt apply --resume <другой_id> --query "frontend react"
```

Автоматически пропускаются:
- Вакансии, на которые вы уже откликались
- Вакансии с обязательной анкетой

Подробнее о языке поисковых запросов hh.ru: https://hh.ru/article/25295

### Сопроводительное письмо

#### Стратегия

Управляйте тем, когда и как отправляется сопроводительное письмо:

```bash
# Через флаг (на один запуск)
openhunt apply --query "python" --letter auto

# Сохранить стратегию (на все запуски)
openhunt letter strategy auto
```

Доступные стратегии:

| Стратегия | Необязательное письмо | Обязательное письмо | Токены LLM |
|-----------|----------------------|---------------------|------------|
| `off` | Пропустить | Шаблон | 0 |
| `template` | Шаблон | Шаблон | 0 |
| `llm` | LLM-генерация | LLM-генерация | Много |
| `auto` | Пропустить | LLM если настроен, иначе шаблон | Мало |

По умолчанию: `llm` если LLM настроен, `template` если нет.

`auto` — оптимальный баланс: экономит токены на необязательных письмах, но генерирует персональное письмо когда работодатель его требует.

#### Шаблон

```bash
# Посмотреть текущий шаблон
openhunt letter show

# Задать свой
openhunt letter set "Здравствуйте! Буду рад обсудить вакансию."

# Вернуть стандартный
openhunt letter reset
```

#### LLM-генерация

Для генерации персональных писем через LLM:

```bash
openhunt llm setup --provider openrouter --api-key <ключ> --model <модель>
```

Поддерживаются OpenRouter и кастомные OpenAI-совместимые провайдеры. После настройки LLM автоматически генерирует письма на основе описания вакансии.

### Поднятие резюме

Поднимает все резюме в поиске (доступно раз в 4 часа):

```bash
openhunt resume raise
```

### Сохранённые запросы

Сложные запросы можно сохранить и использовать по имени:

```bash
# Сохранить запрос
openhunt query save backend "NAME:(python OR golang) AND NOT стажёр"

# Список сохранённых запросов
openhunt query list

# Удалить запрос
openhunt query delete backend
```

## Разработка

```bash
git clone https://github.com/tarminik/openhunt.git
cd openhunt
uv sync
uv run openhunt --help
```

## Лицензия

MIT
