README.ru.md
Rama main · réplica de lectura del repositorio original.
<p align="center"><picture><source media="(prefers-color-scheme: dark)" srcset="docs/wordmark-dark.svg"><img src="docs/wordmark-light.svg" alt="career-ops" width="250" height="56"></picture></p>
<p align="center">ИИ-агент с открытым кодом для поиска работы.</p>
<p align="center">
<a href="README.md">English</a> |
<a href="README.es.md">Español</a> |
<a href="README.de.md">Deutsch</a> |
<a href="README.fr.md">Français</a> |
<a href="README.pt-BR.md">Português (Brasil)</a> |
<a href="README.ko-KR.md">한국어</a> |
<a href="README.ja.md">日本語</a> |
<a href="README.cn.md">简体中文</a> |
<a href="README.zh-TW.md">繁體中文</a> |
<a href="README.ua.md">Українська</a> |
<a href="README.ru.md">Русский</a> |
<a href="README.pl.md">Polski</a> |
<a href="README.da.md">Dansk</a> |
<a href="README.ta.md">தமிழ்</a> |
<a href="README.ar.md">العربية</a> |
<a href="README.hi.md">हिन्दी</a> |
<a href="README.tr.md">Türkçe</a> |
<a href="README.vi.md">Tiếng Việt</a> |
<a href="README.id.md">Bahasa Indonesia</a>
</p>
<!-- The non-breaking spaces ( ) and word joiners (⁠) below decide where each line wraps on a phone. Keep them when editing. -->
<p align="center"><a href="https://github.com/santifer"><img src="docs/avatar-santifer.png" width="48" height="48" align="middle" alt="Santiago Fernández de Valderrama Aparicio"></a> Создано <a href="https://github.com/santifer"><strong>@santifer</strong></a> при участии <a href="https://github.com/career-ops-hq/career-ops/blob/main/README.ru.md#builders"><picture><source media="(prefers-color-scheme: dark)" srcset="docs/builders-stack-dark.svg"><img src="docs/builders-stack-light.svg" alt="" height="32" align="middle"></picture></a> <a href="https://github.com/career-ops-hq/career-ops/blob/main/README.ru.md#builders">700+ контрибьюторов</a></p>
<p align="center">
<strong>Месяцы отправки резюме в тишину.</strong><br>
Поэтому я построил фильтр, который был мне нужен.
</p>
<p align="center">
<strong>740 вакансий оценено. 68 откликов. 12 собеседований. 1 оффер.</strong><br>
Я был его первым пользователем. Я получил работу. Потом открыл код.
</p>
<p align="center">
Вставьте вакансию. На вашей машине он скажет, открыта ли она ещё и подходит ли вам.<br>
Он адаптирует ваше резюме и готовит черновики ответов. <strong>Вы нажимаете «Отправить».</strong>
</p>
<p align="center">
<img src="docs/demo.gif" alt="Собственный поиск автора в дашборде career-ops: вакансии с оценками, красный счётчик тех, что помечены «не откликаться», затем полный отчёт об оценке" width="800">
</p>
<p align="center"><sub>Мой собственный поиск, на полпути, с интерфейсом на испанском.</sub></p>
<p align="center">
Компании используют ИИ для фильтрации кандидатов.<br>
<strong>Я дал кандидатам ИИ, чтобы <em>выбирать</em> компании.</strong>
</p>
<p align="center">
Через полгода <strong>я ушёл с этой работы.</strong><br>
Теперь мы строим career-ops, чтобы вы могли получить свою.
</p>
<p align="center"><a href="#ваша-очередь">Попробуйте на одной вакансии ↓</a> · <a href="https://santifer.io/career-ops-system">Прочитайте всю историю →</a></p>
<p align="center"><sub>Не хотите работать в терминале? <a href="https://career-ops.org/waitlist?ref=readme-ru">Запишитесь в лист ожидания веб-версии →</a></sub></p>
<br>
<p align="center"><a href="HIRED.md"><img src="docs/hired-badge.svg" alt="Hired with career-ops: public stories on the record"></a></p>
<p align="center">Люди, пришедшие после меня, записали, как их наняли.</p>
<p align="center">
<a href="HIRED.md"><img src="docs/hired-wall.svg" alt="Истории найма, которые можно открыть и прочитать" width="800"></a>
</p>
<p align="center"><sub>Каждая карточка — публичный issue, который можно открыть. Получили свою работу? <a href="https://github.com/career-ops-hq/career-ops/issues/new?template=i-got-hired.yml">Оставьте свою карточку →</a></sub></p>
<p align="center">⭐ <strong>Если career-ops вам помог, звезда поможет следующему человеку его найти.</strong></p>
<br>
<p align="center">
<a href="https://wired.com.gr/article/to-ai-ergaleio-pou-fernei-epanastasi-ston-tropo-pou-psachnoume-douleia/" rel="noopener noreferrer nofollow"><picture><source media="(prefers-color-scheme: dark)" srcset="docs/press/wired-dark.svg"><img src="docs/press/wired.svg" alt="WIRED" height="32"></picture></a>
<a href="https://www.businessinsider.com/how-i-built-tool-filter-job-listings-landed-head-ai-2026-4" rel="noopener noreferrer nofollow"><picture><source media="(prefers-color-scheme: dark)" srcset="docs/press/business-insider-dark.svg"><img src="docs/press/business-insider.svg" alt="Business Insider" height="32"></picture></a>
</p>
<p align="center">
<a href="https://vercel.com/open-source-program"><img alt="Vercel OSS Program" src="https://vercel.com/oss/program-badge-2026.svg" height="32"></a>
</p>
<p align="center">
<a href="https://trendshift.io/repositories/25195" rel="noopener noreferrer"><img src="https://trendshift.io/api/badge/repositories/25195" alt="GitHub Trending: #1 repository of the day (Trendshift)" width="250" height="55"></a>
<a href="https://www.producthunt.com/products/santifer-io?utm_source=badge-featured&utm_medium=badge" rel="noopener noreferrer"><img src="docs/press/producthunt.svg" alt="Featured on Product Hunt" width="206" height="54"></a>
</p>
## Ваша очередь
Вставьте одну вакансию, на которую собирались откликнуться сегодня вечером. Если в ответ придёт <em>не откликаться</em>, вы только что вернули себе вечер. Если придёт план, вы знаете, что делать дальше.
```bash
npx @santifer/career-ops init
```
<p align="center"><sub>Открытый код. Локально. В том ИИ-CLI, которым вы уже пользуетесь. <a href="docs/RUNNING_ON_A_BUDGET.md">Бесплатные и локальные модели включены.</a></sub></p>
## Вам не обязательно искать в одиночку
Тишина после нажатия «отправить» не про вас. Достаточно людей увидели то же самое, чтобы записать практику в шесть строк:
> Откликаться лучше, но на меньшее. Сигнал важнее объёма. Доказательства важнее ключевых слов. Решает человек. Сначала локально. Достоинство по обе стороны стола.
<p align="center"><a href="https://career-ops.org/manifesto?utm_source=readme"><img src="https://img.shields.io/badge/dynamic/regex?url=https%3A%2F%2Fraw.githubusercontent.com%2Fcareer-ops-hq%2Fcareer-ops%2Fmain%2FSIGNATURES.md&search=n%3A(%5Cd%2B)%5Cs*%24&replace=%241%20signatories&label=THE%20CAREEROPS%20MANIFESTO&color=DD7627&style=for-the-badge&labelColor=2b3137" alt="Манифест CareerOps: число подписавших в реальном времени"></a></p>
<p align="center">Несколько из них, их собственными словами.</p>
<p align="center">
<a href="https://career-ops.org/manifesto?utm_source=readme"><img src="docs/manifesto-wall.svg" alt="Три подписи под манифестом CareerOps, их собственными словами" width="800"></a>
</p>
<p align="center"><sub>Каждая подпись — коммит, который можно проверить. <a href="https://career-ops.org/manifesto?utm_source=readme">Прочитать все или добавить свою →</a></sub></p>
<br>
Найм сам себя не починит. Люди, которые через него проходят, могут, и они уже в комнате: сверяют заметки и чинят друг другу настройки.
<a id="builders"></a>
<p align="center"><a href="CONTRIBUTING.md"><img src="https://warpchart.dev/api/builders?lang=ru" alt="Анимированная стена из GitHub-аватаров участников, которая заполняется в порядке прихода с апрель 2026 г.; следующая клетка оставлена свободной." width="100%"></a></p>
[Именно здесь пишется исправление](CONTRIBUTING.md). Комната, а не клуб. **Давайте строить вместе.**
<p align="center"><a href="https://discord.gg/8pRpHETxa4"><img src="docs/discord-badge.svg" alt="Discord: число участников сервера career-ops в реальном времени"></a></p>
## Спонсоры
career-ops бесплатен для кандидатов, навсегда. Эти компании спонсируют проект:
<p align="center">
<a href="https://serpapi.com/career-ops-org" title="SerpApi"><img src="docs/sponsors/serpapi.svg" alt="SerpApi" height="48"></a>
</p>
<p align="center"><strong>SerpApi</strong> · Build a portfolio project with live search data. SerpApi gives developers structured JSON/Markdown from Google Search, Maps, Shopping, and other engines through a simple API call.</p>
> Спонсорство покупает чётко обозначенную видимость, но никогда влияние: никакая сумма денег не меняет дорожную карту и ничего не размещает в продукте. Спонсоры никогда не появляются в оценках, рейтингах или рекомендациях.
## Что career-ops делает для вас
Вставьте вакансию. Он скажет, стоит ли она этого вечера.
- **Ещё открыта?** Он проверяет, что объявление всё ещё активно, прежде чем вы напишете хоть слово.
- **Не ваше?** Он оценивает роль против вашего настоящего резюме и советует пропустить слабое совпадение. Вы можете его переубедить.
- **Стоит того?** Он готовит черновики резюме, сопроводительного письма и ответов. Вы их читаете. Вы их отправляете.
- **С кем говорить?** Он находит человека и готовит черновик сообщения. Он никогда его не отправляет.
- **Куда всё это уходит?** Каждый отклик остаётся на вашей машине. Нам ничего не загружается.
- **Что мне выучить?** После серии отказов он называет пробел.
Первые запуски шероховатые. Он вас ещё не знает. Поговорите с ним: ваше резюме, чего вы хотите, от чего отказываетесь. Считайте это первой неделей рекрутера.
При первом запуске он спрашивает всё это в чате. Ничего не нужно настраивать вручную.
## Чего career-ops не делает
- **Отправлять отклик автоматически.** Он готовит черновик ответа для каждого поля; вы проверяете и нажимаете «Отправить». Скрипт никогда не делает POST (`prepare-application.mjs`).
- **Не отправляет письма.** Только черновики. Во всём коде нет ни одного почтового транспорта.
- **Не звонит домой.** Без телеметрии, без нашего бэкенда. Ваше резюме идёт с вашей машины к выбранному вами AI-провайдеру и больше никуда. Единственный публичный реестр: этот репозиторий, `HIRED.md` и его issues.
- **Не толкает откликаться ниже 4.0/5.** Скажет этого не делать. Вы можете проигнорировать, и он об этом скажет.
Он переформулирует ваше резюме; выдумывать не имеет права никогда. Проверка в коде останавливает PDF, если в нём есть цифры или факты, которых нет ни в вашем резюме, ни в `article-digest.md`, но оценить каждую переформулировку она пока не может. Читайте каждое резюме перед отправкой. Подробности в [FAQ](#faq).
## Возможности
| Функция | Описание |
| ------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------- |
| **Оценка A-H** | Резюме роли, соответствие резюме (с весом каждого требования для этой вакансии и пометкой, взят ли вес из формулировки описания, его структуры или из оценки, с подписью для каждого требования; оценка никогда не может быть верхнего уровня), стратегия уровня, исследование компенсации, персонализация, подготовка к собеседованию (STAR+R), плюс проверка легитимности вакансии в блоке G (открыта ли она ещё, не повторная ли это публикация: наблюдения, а не вердикты) и сигнал разрешения на работу, помечающий описание с явным отказом в спонсорстве визы как жёсткий блокер |
| **Human-in-the-Loop** | ИИ оценивает и рекомендует, вы решаете и действуете. Система никогда не отправляет отклик: последнее слово всегда за вами <!-- hitl: absolute guarantee. Do not add "automatically", "by itself", "without your permission" or any other hedge when translating this row. --> |
| **Генерация ATS PDF** | Резюме, читаемые ATS и адаптированные под каждое описание вакансии на основе вашего собственного опыта, в дизайне Space Grotesk + DM Sans |
| **Генератор сопроводительных писем** | Сопроводительные письма на основе исследования с зеркалированием ключевых слов, четырьмя интерактивными вопросами об угле подачи (почему/проблемы/подход/тон), утверждением черновика в чате и A4 PDF через тот же конвейер HTML + Playwright, что и для резюме. Готовит черновик при каждой оценке; завершить и сгенерировать по запросу через `/career-ops cover` |
| **За пределами резюме** | Исследование компании ([`deep`](modes/deep.md)) раскрывает ИИ-стратегию, недавние шаги, инженерную культуру и угол, под которым стоит подать ваш профиль. Поиск контактов ([`contacto`](modes/contacto.md)) определяет hiring-менеджера, рекрутера или коллегу из команды, к кому стоит обратиться, и готовит сообщение для LinkedIn до 300 символов под каждый тип контакта. Черновики формальных писем-откликов ([`email`](modes/email.md)) превращают оценённый отчёт или вставленное описание в тему, текст и чеклист вложений, ничего не отправляя, не подавая и не кликая. Отклик ставит вас в очередь, исследование даёт вам разговор. |
| **Анализ паттернов** | Паттерны отказов и доля прохождения по каналам ATS (`analyze-patterns.mjs`), статистика воронки за весь поиск (`stats.mjs`), выявление перепубликаций, которые могут указывать на вакансию-призрак (`detect-reposts.mjs`) |
<details>
<summary><b>Всё остальное, что он делает</b></summary>
| Функция | Описание |
| ------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------- |
| **Авто-конвейер** | Вставьте URL и получите полную оценку + PDF + запись в трекере |
| **Банк историй для собеседований** | Накапливает истории STAR+Reflection между оценками: 5-10 главных историй, которые можно адаптировать под заданные вам поведенческие вопросы |
| **Скрипты переговоров** | Фреймворки переговоров о зарплате, ответ на географическую скидку, рычаг конкурирующих офферов |
| **Черновики писем-откликов** | Формальные письма рекрутеру, по рекомендации или холодные отклики из отчёта или вставленного описания, с темой, чеклистом вложений, обоснованными пунктами соответствия и блоком контактов из профиля. Только черновики: career-ops никогда не отправляет, не подаёт и не кликает ничего. |
| **Сканер порталов** | 100+ предварительно настроенных компаний (Anthropic, OpenAI, ElevenLabs, Retool, n8n...) + собственные поисковые веб-запросы по Ashby, Greenhouse, Lever, Wellfound |
| **Поиск профинансированных компаний** | Команда `company:funded` (сначала просмотр) показывает компании с недавним финансированием и диагностику источников из структурированных публичных лент, не меняя ваши данные |
| **Пакетная обработка** | Параллельная оценка headless CLI-воркерами (`claude -p` / `opencode run`) |
| **Dashboard TUI** | Терминальный интерфейс для просмотра, фильтрации и сортировки вашего конвейера |
| **Целостность конвейера** | Автоматическое слияние, дедупликация, нормализация статусов, проверки состояния |
| **Набор для собеседований** | Планы подготовки по временным блокам, тренировочные сессии с обратной связью, разборы после собеседования ([`interview/`](modes/interview/README.md)) и детектор тревожных признаков компании ([`interview-redflag`](modes/interview-redflag.md)) |
| **Этап оффера** | Сопровождение чтения контракта: проход по пунктам плюс список вопросов для юриста ([`offer-prep`](modes/offer-prep.md)), и анализатор разрыва между желаемой, заявленной и фактической зарплатой (`salary-gap.mjs`) |
| **Фоллоу-апы и ответы** | Калькулятор ритма фоллоу-апов и заготовленные напоминания (`followup-cadence.mjs`, `followup-seed.mjs`); классификация ответов работодателя в обновления трекера ([`reply-watch`](modes/reply-watch.md)) |
| **Система плагинов** | Опциональные интеграции (Gmail, Notion, Apify + реестр сообщества), выключены по умолчанию; см. [docs/PLUGINS.md](docs/PLUGINS.md) |
</details>
## Как это работает
<p align="center"><picture><source media="(prefers-color-scheme: dark)" srcset="docs/how-it-works-dark.svg"><img src="docs/how-it-works-light.svg" alt="How it works: you paste a job URL or description. Archetype Detection classifies it as LLMOps, Agentic, PM, SA, FDE or Transformation. The A-H Evaluation reads cv.md and covers match, gaps, comp research, STAR stories and legitimacy. It produces a report (reports/*.md), the tailored CV in the format set by cv.output_format — a PDF by default — and a tracker entry (data/applications.md)." width="760"></picture></p>
## Быстрый старт
**Самый быстрый путь, одна команда:**
```bash
npx @santifer/career-ops init
```
> 💡 `npx` идёт вместе с [Node.js](https://nodejs.org): он запускает установщик один раз,
> ничего не устанавливая глобально. Ещё нет Node? Сначала установите его.
> (Уже пользуетесь CLI Claude Code / Codex? Тогда он у вас уже есть.)
Это клонирует последний релиз в `./career-ops` и устанавливает зависимости. Затем:
```bash
cd career-ops
claude # or codex / qwen / opencode / agy / grok — open your AI CLI here
```
**При первом запуске career-ops проведёт вас через настройку (ваше резюме, профиль и целевые роли) просто в разговоре. Ничего не нужно редактировать вручную.**
<details>
<summary><b>Хотите настроить вручную? (git clone)</b></summary>
```bash
git clone https://github.com/career-ops-hq/career-ops.git
cd career-ops && npm install
npx playwright install chromium # only needed for PDF generation
# On a non-Debian/Ubuntu Linux distro (Fedora, Arch, ...), Chromium's system
# libraries aren't installed by the line above — install them yourself with
# your distro's package manager if PDF generation fails to launch the browser
# (Playwright's own docs list the required libraries per platform).
# 2. Open your AI CLI in this directory. On first launch it walks you
# through setup (your CV, profile and target roles) by chatting
claude # or codex / opencode / qwen / agy / grok
# Then ask your CLI to adapt the system to you:
# "Change the archetypes to backend engineering roles"
# "Translate the modes to English"
# "Add these 5 companies to portals.yml"
# "Update my profile with this CV I'm pasting"
# 3. Start using
# Вставьте URL вакансии или текст описания, чтобы запустить auto-pipeline.
# Все остальные режимы и способ вызвать их в вашем CLI: см. раздел «Использование» ниже.
```
</details>
### Глобальная установка
```bash
npm i -g @santifer/career-ops
```
Это устанавливает бинарник `career-ops` глобально, так что вы можете запускать `career-ops init [folder]` без `npx`. `init` — его единственная команда: она создаёт рабочее пространство, а всё дальнейшее происходит внутри вашего AI-CLI (см. «Использование» ниже), а не через этот бинарник.
**Что выбрать?**
- `npx @santifer/career-ops init`: лучше всего для первого запуска; создаёт отдельную папку проекта.
- `npm i -g @santifer/career-ops`: если вам удобнее набирать `career-ops init`, чем форму с `npx`. Других команд он не добавляет.
### Другие способы запуска
- **Из любой папки, как плагин Claude Code:** [docs/CLAUDE_PLUGIN.md](docs/CLAUDE_PLUGIN.md).
- **Без ИИ-CLI:** автономные скрипты для Gemini, Ollama и OpenAI-совместимых моделей оценивают вакансию самостоятельно. См. [docs/SCRIPTS.md](docs/SCRIPTS.md#geminieval--ollamaeval--openaieval).
> **Система спроектирована так, чтобы её настраивал сам ваш AI-CLI.** Режимы, архетипы, веса оценки, скрипты переговоров: просто попросите его изменить их. Он читает те же файлы, которыми пользуется, поэтому точно знает, что редактировать.
Смотрите [docs/SETUP.md](docs/SETUP.md) для полного руководства по настройке, [docs/RUNNING_ON_A_BUDGET.md](docs/RUNNING_ON_A_BUDGET.md) для дешёвого запуска career-ops на своих или локальных моделях (и [docs/FREE_TIER.md](docs/FREE_TIER.md) для запуска без затрат на бесплатном тарифе Antigravity CLI), [docs/AUTOMATION.md](docs/AUTOMATION.md) для планирования регулярных сканирований и рецепта отбора в шортлист без расхода токенов, [docs/APPLY_AUTOFILL.md](docs/APPLY_AUTOFILL.md) для деталей автозаполнения форм ATS, [docs/LINKEDIN_JOIN.md](docs/LINKEDIN_JOIN.md) для сверки экспорта ваших контактов LinkedIn с компаниями в вашей воронке, и [docs/FAQ.md](docs/FAQ.md) для ответов на типичные вопросы по настройке, включая [как происхождение историй предотвращает выдуманные цифры](docs/FAQ.md#why-does-career-ops-refuse-to-use-a-number-from-my-story-bank). Принципы дизайна в [ARCHITECTURE.md](ARCHITECTURE.md); потоки выполнения в [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md).
## Использование
Вставьте URL или описание вакансии в ваш ИИ-CLI. career-ops проверяет, что вакансия по ссылке ещё открыта (у вставленного текста нет ссылки для проверки), оценивает её по вашему резюме, пишет отчёт, адаптирует ваше резюме (по умолчанию в PDF) и добавляет строку в трекер. Этого хватает в большинство дней. Всё остальное — режимы, которые вы вызываете по названию. Если вакансию не удаётся прочитать, пайплайн останавливается и просит вставить текст.
### Как вызвать режим
| CLI | Как вызвать `scan` |
| --- | --- |
| Claude Code, OpenCode, Antigravity CLI (`agy`), Grok Build CLI | `/career-ops scan` |
| Pi | `/skill:career-ops scan` |
| Codex, Qwen, Cursor или любой другой поддерживаемый CLI | Обычным языком: "Run the career-ops scan mode" |
`/career-ops` без продолжения показывает меню команд в CLI, которые его используют. Обычный язык работает в любом поддерживаемом CLI. Как плагин Claude Code команда выглядит так: `/career-ops:career-ops`.
У всех них один общий роутер, `.agents/skills/career-ops/SKILL.md`, и одни и те же файлы `modes/*.md`, поэтому любой CLI направляет запрос одинаково (режимам, активно использующим браузер, также нужны инструменты Playwright). Slash-команды в Codex не гарантированы: просите обычным языком или запустите один промпт в headless-режиме через `codex exec "Evaluate this JD with career-ops auto-pipeline: https://company.com/jobs/123"` ([docs/CODEX.md](docs/CODEX.md)). Как запускать career-ops в каждом поддерживаемом CLI, headless-команды там, где они есть, и заметки по настройке отдельных CLI — в [docs/SUPPORTED_CLIS.md](docs/SUPPORTED_CLIS.md).
### Повседневные команды
| Команда | Что делает |
| --- | --- |
| *вставьте URL или описание вакансии* | Полный пайплайн: проверка, что вакансия ещё открыта (только для URL), оценка A-G плюс H при высокой оценке, отчёт, адаптированное резюме (по умолчанию PDF), строка в трекере |
| `scan` | Сканирует ваши порталы в поисках новых вакансий и добавляет их во входящие (`data/pipeline.md`) |
| `pipeline` | Обрабатывает URL, ожидающие во входящих (уровни standard и premium могут пропускать явные несоответствия) |
| `apply` | Заполняет форму отклика вместе с вами, поле за полем. Останавливается перед отправкой |
| `tracker` | На каком этапе каждый отклик |
| `followup` | Какие отклики пора напомнить о себе, с черновиками |
<details>
<summary><b>Все команды по этапам поиска</b></summary>
`oferta`, `ofertas` и `contacto` сохраняют исходные испанские названия: предложение, предложения, контакт.
**Найти вакансии**
| Команда | Что делает |
| --- | --- |
| [`scan`](modes/scan.md) | Сканирует порталы и находит новые вакансии |
| [`discover`](modes/discover.md) | Превращает список названий компаний в сканируемые ATS-доски. По умолчанию показывает только предпросмотр и добавляет их в `portals.yml` лишь с `--write` (без токенов) |
| [`pipeline`](modes/pipeline.md) | Обрабатывает отложенные URL из входящих (`data/pipeline.md`) |
| [`triage`](modes/triage.md) | Быстрая первичная оценка «стоит / не стоит» по `modes/_brief.md` перед полной оценкой (файлы не пишет) |
| [`batch`](modes/batch.md) | Оценивает много вакансий headless-воркерами (параллельно с Claude, по одной с другими CLI) |
| [`titles`](modes/titles.md) | Предлагает смежные названия должностей по вашему резюме, чтобы расширить поиск |
**Оценить вакансию**
| Команда | Что делает |
| --- | --- |
| *вставьте URL или описание вакансии* | [Auto-pipeline](modes/auto-pipeline.md): оценка + отчёт + адаптированное резюме (по умолчанию PDF) + запись в трекере |
| [`oferta`](modes/oferta.md) | Только оценка, блоки A–G плюс H при высокой оценке (без PDF) |
| [`ofertas`](modes/ofertas.md) | Сравнивает и ранжирует несколько вакансий |
| [`deep`](modes/deep.md) | Промпт для глубокого исследования компании |
| [`eu-swe`](modes/regional/eu-swe.md) | Калибрует европейский отклик на позицию в разработке ПО перед резюме, откликом или интервью |
**Отклик**
| Команда | Что делает |
| --- | --- |
| [`pdf`](modes/pdf.md) | ATS-оптимизированное резюме в PDF |
| [`ats`](modes/ats.md) | Проверка совместимости сгенерированного резюме с ATS: оценка и исправимые проблемы |
| [`text`](modes/text.md) | Адаптированное резюме в markdown (повторяет `cv.md`, без PDF) |
| [`latex`](modes/latex.md) | Экспортирует резюме в LaTeX/Overleaf `.tex` |
| [`latex-tex`](modes/latex-tex.md) | Адаптирует ваш собственный `resume.tex` на месте (по желанию; `cv.md` остаётся по умолчанию) |
| [`cover`](modes/cover.md) | Сопроводительное письмо по вставленному описанию вакансии или по оценённому отчёту (`cover {slug}`) |
| [`email`](modes/email.md) | Черновик официального письма-отклика. Только черновик: ничего не отправляет и не нажимает |
| [`contacto`](modes/contacto.md) | Находит нанимающего менеджера, рекрутера или коллегу и готовит черновик сообщения в LinkedIn |
| [`apply`](modes/apply.md) | Живой помощник подачи (Playwright из этого репозитория). Не отправляет |
**Интервью**
| Команда | Что делает |
| --- | --- |
| [`interview-prep`](modes/interview-prep.md) | Документ подготовки к интервью под конкретную компанию |
| [`interview/plan`](modes/interview/plan.md) | План подготовки по временным блокам к предстоящему интервью |
| [`interview/practice`](modes/interview/practice.md) | Тренировочное интервью, по одному вопросу, с обратной связью |
| [`interview/debrief`](modes/interview/debrief.md) | Разбор после интервью: закрыть пробелы, предсказать следующий раунд |
| [`interview-redflag`](modes/interview-redflag.md) | Анализирует тревожные признаки работодателя, прежде чем вы к нему присоединитесь |
**После отклика**
| Команда | Что делает |
| --- | --- |
| [`tracker`](modes/tracker.md) | Обзор статусов откликов |
| [`followup`](modes/followup.md) | Ритм фоллоу-апов: помечает просроченные отклики, генерирует черновики |
| [`reply-watch`](modes/reply-watch.md) | Классифицирует ответы работодателей и предлагает обновления трекера |
| [`outcome`](modes/outcome.md) | Записывает результат отклика и архивирует его артефакты |
| [`offer-prep`](modes/offer-prep.md) | Читает вместе с вами полученный оффер или договор: разбор пунктов и вопросы юристу (не юридическая консультация) |
**Ваш профиль и резюме**
| Команда | Что делает |
| --- | --- |
| [`interview`](modes/interview.md) | Настройка профиля: интерактивное интервью о вашем опыте, из которого строятся резюме и профиль (это не тренировка интервью) |
| [`intake`](modes/intake.md) | Создаёт или дополняет профиль по файлам из `documents/` (основное резюме, экспорт LinkedIn). Без вашего подтверждения ничего не записывается |
| [`master-profile`](modes/master-profile.md) | Импортирует, проверяет и валидирует ваш Master Career Profile и готовит выбранные факты как пункты резюме |
| [`add`](modes/add.md) | Добавляет проект, статью или роль в резюме (загрузка, предпросмотр, подтверждение) |
| [`expand`](modes/expand.md) | Находит недостающие в резюме компетенции по ссылкам из вашего профиля |
| [`retro`](modes/retro.md) | Разбирает эту сессию и сохраняет то, чему вы её научили, как правила (записывает только принятые вами) |
**Улучшить таргетинг**
| Команда | Что делает |
| --- | --- |
| [`patterns`](modes/patterns.md) | Анализирует закономерности отказов и улучшает таргетинг |
| [`calibrate`](modes/calibrate.md) | Проверяет, предсказывают ли ваши оценки реальные результаты. Только рекомендации: оценки никогда не меняет |
| [`upskill`](modes/upskill.md) | Анализ пробелов в навыках по вашим оценённым отчётам |
| [`training`](modes/training.md) | Оценивает курс или сертификацию относительно вашей North Star |
| [`project`](modes/project.md) | Оценивает идею проекта для портфолио |
**Система**
| Команда | Что делает |
| --- | --- |
| [`agent-inbox`](modes/agent-inbox.md) | Ставит запросы в очередь на следующую сессию и разбирает их тогда (`data/agent-inbox.md`). `inbox` тоже работает |
| [`update`](modes/update.md) | Обновляет системные файлы career-ops с предпросмотром диффа и проверкой совместимости |
</details>
## Настройка порталов
Сканер поставляется со **100+ компаниями**, готовыми к сканированию, и **35+ поисковыми запросами** по основным доскам вакансий. Скопируйте `templates/portals.example.yml` в `portals.yml` и добавьте свои:
**AI-лаборатории:** Anthropic, OpenAI, Mistral, Cohere, LangChain, Pinecone
**Голосовой ИИ:** ElevenLabs, PolyAI, Parloa, Hume AI, Deepgram, Vapi, Bland AI
**AI-платформы:** Retool, Airtable, Vercel, Temporal, Glean, Arize AI
**Контакт-центры:** Ada, LivePerson, Sierra, Decagon, Talkdesk, Genesys
**Enterprise:** Salesforce, Twilio, Gong, Dialpad
**LLMOps:** Langfuse, Weights & Biases, Lindy, Cognigy, Speechmatics
**Автоматизация:** n8n, Zapier, Make.com
**Европа:** Factorial, Attio, Tinybird, Clarity AI, Travelperk
**Сканируемые доски вакансий:** 55+ модулей провайдеров покрывают API ATS, ленты целых досок, XML/RSS-ленты, markdown-ленты и локальные парсеры. Полная таблица: [Поддерживаемые доски вакансий](docs/SUPPORTED_JOB_BOARDS.md).
По умолчанию `node scan.mjs` (он же `npm run scan`) доверяет тому, что возвращает каждая лента ATS. Некоторые компании оставляют устаревшие объявления в своём публичном API даже после закрытия вакансии, так что эти просроченные записи могут попасть в `pipeline.md`. Передайте `--verify`, чтобы после прохода по API запустить Playwright и отбросить просроченные объявления до того, как они попадут в конвейер:
```bash
node scan.mjs --verify # zero-token discovery + Playwright liveness check
```
Проверка последовательная и выполняется только для новых вакансий (после дедупликации), так что стоимость остаётся ограниченной.
### 🇷🇺 Российские площадки
career-ops поддерживает ключевые российские джоб-борды:
| Площадка | URL | Тип | Особенности |
| ------------------- | ------------------------------------------ | --------- | ------------------------------------------------------------ |
| **HeadHunter** | [hh.ru](https://hh.ru) | API + Web | Главная площадка РФ. Открытый API. 600k+ IT-вакансий |
| **Хабр Карьера** | [career.habr.com](https://career.habr.com) | Web | IT-вакансии, грейды, зарплатные вилки, техническое комьюнити |
| **Работа в России** | [trudvsem.ru](https://trudvsem.ru) | API + Web | Госпортал Роструда. Открытый API для массового парсинга |
| **Rabota.ru** | [rabota.ru](https://rabota.ru) | Web | Принадлежит Сберу. Крупные компании, финтех |
| **Superjob** | [superjob.ru](https://www.superjob.ru) | Web | Вторая по величине после hh.ru |
| **Geekjob** | [geekjob.ru](https://geekjob.ru) | Web | IT-вакансии с указанием вилок |
| **Буду** | [budu.jobs](https://budu.jobs) | Web | IT-вакансии, бывший Хантфлоу |
**Telegram-каналы** подключаются как обычный источник сканера через `provider: telegram-channel` (читает публичное превью `t.me/s/<канал>` — без ключей и логина, историю до `since_days`), образец записи — в `templates/portals.example.yml`. В выдачу попадают только посты, где назван работодатель («Компания: …», «Title @ Компания») и есть ссылка на саму вакансию (ATS работодателя или страница вакансии на борде): компанией становится работодатель, URL — эта ссылка, пермалинк поста уходит в описание. Посты «пишите @hr» без работодателя, подборки и анонимные вакансии отбрасываются, так что для HR-каналов вроде @jobforjunior или @job_python это работает, для чатов свободного формата — почти нет. Приватные каналы и каналы с выключенным превью так не читаются — сканер сообщит об этом явно.
#### Особенности российского рынка в оценке
- **Зарплата**: gross (до НДФЛ 13%) vs net (на руки) — система учитывает разницу
- **Оформление**: ТК РФ, ГПХ, самозанятость — влияет на оценку стабильности
- **Бенефиты**: ДМС, ДМС стомат., компенсация питания/спорта/обучения
- **Испытательный срок**: до 3 мес. (6 мес. для руководителей по ТК РФ)
- **Отпуск**: 28 календарных дней минимум по ТК + доп. дни
## Dashboard TUI
Встроенный терминальный дашборд позволяет просматривать ваш конвейер визуально:
```bash
npm run serve:dashboard # launch the TUI
npm run build:dashboard # optional: build the standalone binary
```
Функции: 10 вкладок фильтров, 8 режимов сортировки, сгруппированный/плоский вид, ленивая загрузка предпросмотра, изменение статусов в строке.
Есть также **экспериментальный веб-интерфейс** (альфа, опционально: ничего не запускается, пока вы его не запустите): смотрите [`web/README.md`](web/README.md).
## Структура проекта
```
career-ops/
├── AGENTS.md # Canonical agent instructions (all CLIs)
├── CLAUDE.md # Claude Code wrapper (imports AGENTS.md)
├── CODEX.md # Codex wrapper (imports AGENTS.md)
├── OPENCODE.md # OpenCode wrapper (imports AGENTS.md)
├── GEMINI.md # Legacy no-op guard to avoid Antigravity duplicate context
├── cv.md # Your CV (create this)
├── article-digest.md # Your proof points (optional)
├── config/
│ └── profile.example.yml # Template for your profile
├── modes/ # Skill modes
│ ├── _shared.md # Shared context (customize this)
│ ├── oferta.md # Single evaluation
│ ├── pdf.md # PDF generation
│ ├── cover.md # Cover letter generation
│ ├── email.md # Formal application email drafts
│ ├── scan.md # Portal scanner
│ ├── batch.md # Batch processing
│ └── ...
├── templates/
│ ├── cv-template.html # ATS-optimized CV template
│ ├── portals.example.yml # Scanner config template
│ └── states.yml # Canonical statuses
├── batch/
│ ├── batch-prompt.md # Self-contained worker prompt
│ └── batch-runner.sh # Orchestrator script
├── dashboard/ # Go TUI pipeline viewer
├── data/ # Your tracking data (gitignored)
├── reports/ # Evaluation reports (gitignored)
├── output/ # Generated PDFs (gitignored)
├── fonts/ # Space Grotesk + DM Sans
├── docs/ # Setup, customization, budget guide, architecture
└── examples/ # Sample CV, report, proof points
```
## Внешний каталог данных (опционально)
По умолчанию данные пользовательского слоя (такие как `cv.md`, `portals.yml` и папки `data/`, `reports/`, `output/`) живут в корневой папке проекта.
Чтобы отделить личные данные от кода (проще переключать ветки, подтягивать обновления или тестировать несколько профилей), вы можете настроить внешний каталог данных со следующим приоритетом:
1. **Переменные окружения:** задайте переменную `CAREER_OPS_ROOT` или `CAREER_OPS_DATA_DIR`:
```bash
export CAREER_OPS_ROOT=~/my-career-data
```
2. **Файл-маркер:** создайте в корне репозитория файл `.career-ops-data` с путём к вашему каталогу данных.
3. **По умолчанию:** корень репозитория.
После определения все пользовательские файлы разрешаются и записываются относительно этой папки, тогда как файлы промптов и скрипты по-прежнему разрешаются относительно репозитория.
- **Переопределение трекера:** можно также задать `CAREER_OPS_TRACKER`, чтобы напрямую указать путь к файлу трекера откликов.
- **Записи:** все операции записи (например, слияния) канонически направлены в `{DATA_ROOT}/data/applications.md`.
- **Конфигурация сканера:** `portals.yml` читается и валидируется по пути `{DATA_ROOT}/portals.yml`, так что `node validate-portals.mjs` проверяет тот же файл, что читает `scan.mjs`.
- **Сгенерированные документы:** адаптированные резюме и сопроводительные письма записываются в `{DATA_ROOT}/output/`, а PDF-манифест, связывающий их с отчётом, лежит в `{DATA_ROOT}/data/pdf-index.tsv`. Пока `CAREER_OPS_TRACKER` не задан, рабочим пространством трекера, которое ограничивает эти записи, является корень данных, а не checkout репозитория.
- **PDF при переопределённом трекере:** `generate-pdf.mjs` разрешает `CAREER_OPS_TRACKER` до того, как вычислить рабочее пространство, поэтому при заданном переопределении рабочим пространством становится папка с этим трекером (или папка уровнем выше, если трекер лежит в папке `data/`). HTML резюме и каждый PDF должны тогда находиться внутри этого рабочего пространства, а манифест переезжает в его `data/pdf-index.tsv`. Сопроводительные письма по-прежнему пишутся в `{DATA_ROOT}/output/`, поэтому они отклоняются, если эта папка оказывается вне рабочего пространства трекера.
- **Слой кода остаётся на месте:** `node_modules/`, `providers/`, `modes/` и сами скрипты всегда разрешаются относительно репозитория, никогда относительно корня данных.
Дашборд TUI на Go, скрипты Node.js и режимы ИИ-агента автоматически соблюдают эту иерархию.
## Технологии





- **Агент**: AI-CLI с общими скиллами и режимами (`AGENTS.md` + обёртка для CLI)
- **PDF**: Playwright + HTML-шаблон
- **Сопроводительные письма**: HTML-шаблон + Playwright (A4 PDF, тот же конвейер, что и для резюме)
- **Сканер**: Playwright + Greenhouse API + WebSearch
- **Дашборд**: Go + Bubble Tea + Lipgloss (тема Catppuccin Mocha)
- **Данные**: таблицы Markdown + конфигурация YAML + пакетные файлы TSV
<p align="center">
<a href="https://github.com/career-ops-hq/career-ops/releases/latest"><img src="docs/npm-badge.svg" alt="Latest release"></a>
</p>
<p align="center">
<a href="https://claude.com/claude-code"><img src="https://img.shields.io/badge/Built_with-Claude_Code-000?style=for-the-badge&logo=anthropic&logoColor=white" alt="Built with Claude Code"></a>
</p>
<p align="center">
<sub>Работает также в любом CLI со стандартом agent skills. См. <a href="docs/SUPPORTED_CLIS.md">поддерживаемые CLI</a>.</sub><br>
<img src="https://img.shields.io/badge/Claude_Code-000?style=flat&logo=anthropic&logoColor=white" alt="Claude Code">
<img src="https://img.shields.io/badge/OpenCode-111827?style=flat&logo=terminal&logoColor=white" alt="OpenCode">
<img src="https://img.shields.io/badge/Antigravity_CLI-4285F4?style=flat&logo=google&logoColor=white" alt="Antigravity CLI">
<img src="https://img.shields.io/badge/Codex-412991?style=flat&logo=openai&logoColor=white" alt="Codex">
<img src="https://img.shields.io/badge/Qwen-615CED?style=flat" alt="Qwen">
<img src="https://img.shields.io/badge/Kimi-FF4B4B?style=flat" alt="Kimi">
<img src="https://img.shields.io/badge/GitHub_Copilot-000?style=flat&logo=githubcopilot&logoColor=white" alt="GitHub Copilot">
<img src="https://img.shields.io/badge/Grok_Build_CLI-000?style=flat&logo=x&logoColor=white" alt="Grok Build CLI">
<img src="https://img.shields.io/badge/Pi-4B3F72?style=flat" alt="Pi">
<br>
<img src="https://img.shields.io/badge/Node.js-339933?style=flat&logo=node.js&logoColor=white" alt="Node.js">
<img src="https://img.shields.io/badge/Go-00ADD8?style=flat&logo=go&logoColor=white" alt="Go">
<img src="https://img.shields.io/badge/Playwright-2EAD33?style=flat&logo=playwright&logoColor=white" alt="Playwright">
<img src="https://img.shields.io/badge/Bubble_Tea-FF75B5?style=flat&logo=go&logoColor=white" alt="Bubble Tea">
<img src="https://img.shields.io/badge/License-MIT-blue.svg" alt="MIT">
<a href="TRADEMARK.md"><img src="https://img.shields.io/badge/Trademark-Policy-blue.svg" alt="Trademark Policy"></a>
</p>
## Также с открытым кодом
- **[cv-santiago](https://github.com/santifer/cv-santiago)**: сайт-портфолио (santifer.io) с ИИ-чатботом, дашбордом LLMOps и кейс-стади. Если вам нужно портфолио в дополнение к поиску работы, сделайте форк и сделайте его своим.
## FAQ
**Что такое career-ops?**
career-ops ([career-ops.org](https://career-ops.org), также известный как **careerops**) является ИИ-поиском работы с открытым кодом, который работает локально в вашем AI-CLI (Claude Code, Codex, OpenCode и других) и оставляет каждое решение за вами. Он оценивает вакансии относительно вашего резюме, генерирует ATS-адаптированные PDF, находит нужного человека для контакта и отслеживает всё в одном месте: последнее слово всегда за вами. Это первая эталонная реализация [Манифеста CareerOps](https://career-ops.org/manifesto).
**Может ли адаптированное резюме что-то выдумать?**
Не должно, и промпты это говорят: переформулировать, никогда не выдумывать. `generate-pdf` блокирует резюме, в котором есть цифры или факты, отсутствующие в ваших источниках, если только вы не передадите `--skip-fact-check`. Режим `pdf` также запускает `cv-title-check.mjs`: он сравнивает каждое название должности в адаптированном резюме с названием, которое cv.md даёт той же работе (сопоставление по компании и датам), и спрашивает, оставить или вернуть каждое отличающееся. Он только предупреждает, а не блокирует, потому что переформулировать название должности иногда ваше решение. Переформулировки пока ничто не оценивает: это отслеживает [#1411](https://github.com/career-ops-hq/career-ops/issues/1411) (проверка достоверности, блокирующая при несовпадении). До тех пор читайте каждое резюме перед отправкой. [Юридическая оговорка](LEGAL_DISCLAIMER.md) говорит то же самое длиннее.
**Могу ли я запускать career-ops бесплатно или на более дешёвой / локальной модели?**
Да. career-ops не зависит от CLI и работает на бесплатных и локальных моделях (бесплатные модели OpenRouter, Ollama или любой OpenAI-совместимый эндпоинт), так что вы не привязаны к платной подписке. Полная настройка: [docs/RUNNING_ON_A_BUDGET.md](docs/RUNNING_ON_A_BUDGET.md).
**Я плачу за Claude Pro/Max, но career-ops сжигает API-кредиты. Почему?**
Потому что `ANTHROPIC_API_KEY` в вашем окружении имеет приоритет над подпиской, в которую вы вошли: CLI использует ключ и тарифицирует за токен. Выполните `echo $ANTHROPIC_API_KEY`, и если что-то выводится, уберите его из профиля оболочки, перезапустите терминал и выполните `/login`. Пакетный режим является исключением, потому что воркеры `claude -p` не используют интерактивный вход: один раз выполните `claude setup-token` и экспортируйте результат как `CLAUDE_CODE_OAUTH_TOKEN`. Полное пошаговое описание: [docs/RUNNING_ON_A_BUDGET.md](docs/RUNNING_ON_A_BUDGET.md#2b-already-paying-for-a-subscription-make-sure-you-are-using-it).
**С какими AI-CLI работает career-ops?**
career-ops работает с любым основным AI-CLI для программирования (Claude Code, Codex, Gemini / Antigravity, OpenCode, Grok, Qwen и другими) через открытый Agent Skill Standard, так что никогда не привязан к одному вендору. Используйте тот CLI, что у вас уже есть.
**Как установить career-ops на Windows?**
career-ops работает на Windows. Специфичная для платформы настройка и известные острые углы (поиск Git Bash, концы строк, Планировщик заданий) описаны в [docs/WINDOWS.md](docs/WINDOWS.md). Если скиллы не загружаются с ошибкой символической ссылки при установке, решение в [docs/FAQ.md](docs/FAQ.md). Полные шаги в [docs/SETUP.md](docs/SETUP.md).
**Откликается ли career-ops на вакансии за меня?**
Нет. career-ops является фильтром, а не инструментом массовой автоматической рассылки. ИИ оценивает, ранжирует и готовит черновики; вы просматриваете и решаете. Он готовит черновики и заполняет поля; он никогда не отправляет. Вы нажимаете «Отправить». Именно в этом дизайне с человеком в контуре вся суть.
**Бесплатен ли career-ops и открыт ли его код?**
Да. career-ops бесплатен и с открытым кодом, и для кандидата так будет всегда. Это первая эталонная реализация [Манифеста CareerOps](https://career-ops.org/manifesto). Прочитайте его, и если он говорит то, во что вы верите, подпишите.
## Об авторе
Я [Santiago Fernández de Valderrama Aparicio](https://santifer.io/about) (santifer), бывший основатель: построил и продал бизнес, который до сих пор работает под моим именем. Я создал career-ops для управления собственным поиском работы, и это сработало: с его помощью я получил должность Head of Applied AI. Через полгода я ушёл с этой должности, чтобы сосредоточиться на career-ops и работать над ним полный рабочий день.
Интересно, как флот ИИ-агентов поддерживает репозиторий такого размера, а решение о каждом слиянии принимает человек? Читайте [Agentic maintenance: how career-ops is run by a fleet of AI agents](https://santifer.io/ai-agent-fleet).
Моё портфолио и другие open source проекты → [santifer.io](https://santifer.io)
Wikidata: [Santiago Fernández de Valderrama Aparicio](https://www.wikidata.org/wiki/Q138710224) · [career-ops](https://www.wikidata.org/wiki/Q139007988).
## Дисклеймер
**career-ops является локальным open-source инструментом, а НЕ хостинг-сервисом.** Используя это ПО, вы подтверждаете:
1. **Вы контролируете свои данные.** Ваше резюме, контакты и персональные данные остаются на вашей машине и отправляются напрямую выбранному вами AI-провайдеру (Anthropic, OpenAI и др.). Мы не собираем, не храним и не имеем доступа ни к каким вашим данным.
2. **Вы контролируете ИИ.** Промпты по умолчанию инструктируют ИИ не отправлять отклики автоматически, но ИИ-модели могут вести себя непредсказуемо. Если вы меняете промпты или используете другие модели, вы делаете это на свой риск. **Всегда проверяйте точность сгенерированного ИИ контента перед отправкой.**
3. **Вы соблюдаете условия сервиса третьих сторон.** Вы должны использовать этот инструмент в соответствии с Условиями использования карьерных порталов, с которыми взаимодействуете (Greenhouse, Lever, Workday, LinkedIn и др.). Не используйте этот инструмент для спама работодателям или перегрузки систем ATS.
4. **Без гарантий.** Оценки являются рекомендациями, а не истиной. ИИ-модели могут галлюцинировать навыки или опыт. Авторы не несут ответственности за результаты трудоустройства, отклонённые отклики, ограничения учётных записей или любые другие последствия.
Смотрите [LEGAL_DISCLAIMER.md](LEGAL_DISCLAIMER.md) за полной информацией. Это ПО распространяется по [лицензии MIT](LICENSE) «как есть», без каких-либо гарантий.
## Контрибьюторы
<a href="https://github.com/career-ops-hq/career-ops/graphs/contributors">
<img src="https://contrib.rocks/image?repo=career-ops-hq/career-ops&v=2" />
</a>
Все, кто внёс вклад кодом, документацией, переводами или тестами, перечислены в
[CONTRIBUTORS.md](CONTRIBUTORS.md), включая вклады без кода, которые
график выше показать не может.
Получили работу с career-ops? [Поделитесь своей историей!](https://github.com/career-ops-hq/career-ops/issues/new?template=i-got-hired.yml)
## Лицензия и товарный знак
Код лицензирован по [MIT](LICENSE). Название и бренд
«career-ops» регулируются [Политикой товарного знака](TRADEMARK.md): разрешительной
для использования сообществом, зарезервированной для названий коммерческих продуктов
и одобрений.
## История звёзд
<p align="center">
<a href="https://warpchart.dev/hq">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://warpchart.dev/api/chart?theme=dark&v=3">
<img alt="Live star telemetry of career-ops-hq/career-ops" src="https://warpchart.dev/api/chart?theme=light&v=3" loading="lazy">
</picture>
</a>
</p>
<p align="center"><sub>Создал и поддерживает <a href="https://santifer.io">Santiago Fernández de Valderrama Aparicio</a> (<a href="https://github.com/santifer">@santifer</a>)</sub></p>
## Контакты
[](https://santifer.io)
[](https://linkedin.com/in/santifer)
[](https://x.com/santifer)
[](https://discord.gg/8pRpHETxa4)
[](mailto:hi@santifer.io)