Ctrl K
ComunidadGuías…

README.es.md

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
<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">El agente de IA open source para buscar empleo.</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>

<p align="center"><a href="https://career-ops.org/es/docs?utm_source=readme&utm_content=es">Documentación completa en español: career-ops.org/es/docs</a></p>

<!-- The non-breaking spaces (&nbsp;) and word joiners (&#8288;) 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>&nbsp;&nbsp;Creado por <a href="https://github.com/santifer"><strong>@santifer</strong></a>, con&nbsp;&nbsp;<a href="https://github.com/career-ops-hq/career-ops/blob/main/README.es.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>&nbsp;&nbsp;<a href="https://github.com/career-ops-hq/career-ops/blob/main/README.es.md#builders">700+ contribuidores</a></p>

<p align="center">
<strong>Meses mandando CVs al&nbsp;silencio.</strong><br>
Así que construí el filtro que&nbsp;necesitaba.
</p>

<p align="center">
<strong>740&nbsp;ofertas&nbsp;evaluadas. 68&nbsp;candidaturas. 12&nbsp;entrevistas.&nbsp;1&nbsp;oferta.</strong><br>
Fui su primer usuario. Conseguí el&nbsp;trabajo. Luego lo&nbsp;liberé como&nbsp;open&nbsp;source.
</p>

<p align="center">
Pega una oferta. En tu máquina, te dice si sigue&nbsp;abierta y si te&nbsp;encaja.<br>
Adapta tu CV y redacta tus&nbsp;respuestas. <strong>Tú&nbsp;pulsas&nbsp;Enviar.</strong>
</p>

<p align="center">
  <img src="docs/demo.gif" alt="La búsqueda del propio autor en el dashboard de career-ops: ofertas puntuadas, un recuento en rojo de las marcadas como no aplicar y, después, un informe de evaluación completo" width="800">
</p>

<p align="center"><sub>Mi propia búsqueda, a mitad de camino, con&nbsp;la&nbsp;interfaz&nbsp;en&nbsp;español.</sub></p>

<p align="center">
  Las empresas usan IA para filtrar candidatos.<br>
  <strong>Yo solo les di a los candidatos IA&nbsp;para&nbsp;<em>elegir</em>&nbsp;empresas.</strong>
</p>

<p align="center">
  Seis meses después, <strong>dejé ese trabajo.</strong><br>
  Ahora construimos career-ops para&nbsp;que&nbsp;consigas&nbsp;el&nbsp;tuyo.
</p>

<p align="center"><a href="#te-toca">Pruébalo con una oferta&nbsp;↓</a> · <a href="https://santifer.io/career-ops-system">Lee la historia&nbsp;completa&nbsp;→</a></p>
<p align="center"><sub>¿Prefieres no usar la terminal? <a href="https://career-ops.org/es/waitlist?ref=readme-es">Apúntate a la lista de espera de la versión web&nbsp;→</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">Los que vinieron después de mí dejaron escrito cómo consiguieron el trabajo.</p>

<p align="center">
  <a href="HIRED.md"><img src="docs/hired-wall.svg" alt="Historias de contratación que puedes abrir y leer" width="800"></a>
</p>

<p align="center"><sub>Cada tarjeta es una issue pública que puedes abrir. ¿Has conseguido el tuyo? <a href="https://github.com/career-ops-hq/career-ops/issues/new?template=i-got-hired.yml">Deja tu tarjeta →</a></sub></p>

<p align="center">⭐ <strong>Si career-ops te ha ayudado, una estrella ayuda a que la siguiente persona lo&nbsp;encuentre.</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>
  &nbsp;&nbsp;&nbsp;&nbsp;
  <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>
  &nbsp;&nbsp;&nbsp;&nbsp;
  <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>

## Te toca

Pega una oferta a la que ibas a aplicar esta noche. Si vuelve como <em>no aplicar</em>, acabas de recuperar la noche. Si vuelve con un plan, ya sabes qué hacer.

```bash
npx @santifer/career-ops init
```

<p align="center"><sub>Open source. En local. En el CLI de IA que ya usas. <a href="docs/RUNNING_ON_A_BUDGET.md">Modelos gratuitos y locales incluidos.</a></sub></p>


## No tienes que buscar a solas

El silencio después de pulsar enviar no va contigo. Bastante gente vio lo mismo como para dejar la práctica por escrito, en seis líneas:

> Aplica mejor a menos. Señal antes que volumen. Evidencia antes que palabras clave. Decide un humano. Local primero. Dignidad a ambos lados de la mesa.

<p align="center"><a href="https://career-ops.org/es/manifesto?utm_source=readme&utm_content=es"><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="El manifiesto CareerOps: recuento de firmantes en vivo"></a></p>

<p align="center">Algunos de ellos, con sus propias palabras.</p>

<p align="center">
  <a href="https://career-ops.org/es/manifesto?utm_source=readme&utm_content=es"><img src="docs/manifesto-wall.svg" alt="Tres firmas del manifiesto CareerOps, con sus propias palabras" width="800"></a>
</p>

<p align="center"><sub>Cada firma es un commit que puedes auditar. <a href="https://career-ops.org/es/manifesto?utm_source=readme&utm_content=es">Léelas todas, o añade la tuya →</a> · <a href="https://career-ops.org/es/manifesto?utm_source=readme&utm_content=es#what-is-ai-job-search">¿Qué es la búsqueda de empleo con IA?</a></sub></p>

<br>

La contratación no va a arreglarse sola. La gente que la sufre sí puede, y ya está en la sala, comparando notas y arreglándose los setups unos a otros.

<a id="builders"></a>

<p align="center"><a href="CONTRIBUTING.md"><img src="https://warpchart.dev/api/builders?lang=es" alt="Muro animado con los avatares de GitHub de quienes contribuyen, que se llena por orden de llegada desde abril de 2026 y deja libre la siguiente casilla." width="100%"></a></p>

[Aquí es donde se escribe el arreglo](CONTRIBUTING.md). Una sala, no un club. **Construyámoslo juntos.**

<p align="center"><a href="https://discord.gg/8pRpHETxa4"><img src="docs/discord-badge.svg" alt="Discord: recuento en vivo de miembros del servidor de career-ops"></a></p>

## Patrocinadores

career-ops es gratis para los candidatos, para siempre. Estas empresas patrocinan el proyecto:

<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>

> El patrocinio compra visibilidad claramente etiquetada, nunca influencia: ninguna cantidad de dinero cambia la hoja de ruta ni coloca nada en el producto. Los patrocinadores nunca aparecen en evaluaciones, rankings ni recomendaciones.

## Qué hace career-ops por ti

Pega una oferta. Te dice si esa noche merece la pena.

- **¿Sigue abierta?** Comprueba que la oferta sigue activa antes de que escribas una palabra.
- **¿No eres tú?** Puntúa el puesto contra tu CV real y te dice que pases si el encaje es flojo. Puedes ignorarlo.
- **¿Merece la pena?** Redacta el CV, la carta de presentación y las respuestas. Tú las lees. Tú las envías.
- **¿Con quién hablo?** Encuentra a la persona y redacta la nota. Nunca la envía.
- **¿Adónde va todo esto?** Cada candidatura se queda en tu máquina. No se nos sube nada.
- **¿Qué debería aprender?** Tras una racha de noes, te dice cuál es el hueco.

Las primeras pasadas son toscas. Todavía no te conoce. Háblale: tu CV, lo que quieres, lo que rechazas. Piensa en ello como en la primera semana de un recruiter.

En el primer arranque te lo pregunta todo en el chat. Nada que configurar a mano.

## Lo que career-ops no hace

- **Enviar una candidatura automáticamente.** Redacta la respuesta de cada campo; tú revisas y pulsas Enviar. El script nunca hace POST (`prepare-application.mjs`).
- **Mandar un correo.** Solo borradores. No hay ningún transporte de correo en todo el código.
- **Llamar a casa.** Sin telemetría, sin backend nuestro. Tu CV va de tu máquina al proveedor de IA que tú elijas, y a ningún otro sitio. El único registro público es este repositorio: `HIRED.md` y sus issues.
- **Empujarte a aplicar por debajo de 4.0/5.** Te dirá que no lo hagas. Puedes ignorarlo, y te lo dirá.

Reformula tu CV; nunca debe inventarlo. Un control en el código bloquea el PDF si tiene cifras o datos que no están ni en tu CV ni en tu `article-digest.md`, pero todavía no puede juzgar cada reformulación. Lee cada CV antes de enviarlo. Detalles en las [preguntas frecuentes](#preguntas-frecuentes-faq).

## Funcionalidades

| Funcionalidad            | Descripción                                                                                                                              |
| ------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------- |
| **Evaluación A-H**       | Resumen del puesto, encaje con el CV (con cuánto pesa cada requisito en esta oferta y si ese peso sale de la redacción de la propia descripción, de su estructura o de una estimación, etiquetado requisito a requisito; una estimación nunca puede estar en la banda más alta), estrategia de nivel, investigación de compensación, personalización, preparación de entrevista (STAR+R), más una comprobación de legitimidad de la oferta en el bloque G (si sigue abierta, si es una republicación: observaciones, no veredictos), y una señal de permiso de trabajo que marca como bloqueo duro cualquier descripción que excluya expresamente el patrocinio de visado |
| **Human-in-the-Loop**    | La IA evalúa y recomienda, tú decides y actúas. El sistema nunca envía una candidatura: la última palabra siempre es tuya <!-- hitl: absolute guarantee. Do not add "automatically", "by itself", "without your permission" or any other hedge when translating this row. -->               |
| **PDF optimizado para ATS** | CVs legibles por los ATS, adaptados a cada descripción a partir de tu propia experiencia, con diseño Space Grotesk + DM Sans             |
| **Generador de cartas de presentación** | Cartas basadas en investigación con reflejo de palabras clave, cuatro preguntas interactivas de enfoque (por qué/problemas/planteamiento/tono), aprobación del borrador en el chat y PDF A4 por el mismo pipeline HTML + Playwright que los CVs. Redacta un borrador en cada evaluación; complétalo y genéralo cuando quieras con `/career-ops cover` |
| **Más allá del CV**      | La investigación de empresa ([`deep`](modes/deep.md)) saca a la luz su estrategia de IA, movimientos recientes, cultura de ingeniería y el ángulo que debería tomar tu perfil. La búsqueda de contactos ([`contacto`](modes/contacto.md)) identifica al hiring manager, al recruiter o al compañero de equipo al que merece la pena escribir y redacta un mensaje de LinkedIn de ≤300 caracteres ajustado a cada tipo de contacto. Los borradores de correo formal de candidatura ([`email`](modes/email.md)) convierten un informe evaluado o una descripción pegada en asunto, cuerpo y lista de adjuntos sin enviar, presentar ni hacer clic en nada. La candidatura te mete en la cola; la investigación te consigue una conversación. |
| **Análisis de patrones** | Patrones de rechazo y tasas de avance por canal ATS (`analyze-patterns.mjs`), estadísticas de embudo de toda la búsqueda (`stats.mjs`), detección de republicaciones, posible señal de una oferta fantasma (`detect-reposts.mjs`) |

<details>
<summary><b>Todo lo demás que hace</b></summary>

| Funcionalidad            | Descripción                                                                                                                              |
| ------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------- |
| **Auto-Pipeline**        | Pega una URL y obtén la evaluación completa + PDF + entrada en el tracker                                                                |
| **Banco de historias**   | Acumula historias STAR+Reflexión entre evaluaciones: 5-10 historias maestras que puedes adaptar a las preguntas de comportamiento que te hagan |
| **Guiones de negociación** | Marcos de negociación salarial, respuesta al descuento geográfico, uso de ofertas competidoras como palanca                            |
| **Borradores de correo de candidatura** | Correos formales para recruiter, referido o candidatura en frío a partir de un informe o de una descripción pegada, con asunto, lista de adjuntos, puntos de encaje con fuente y un bloque de contacto sacado de tu perfil. Solo borradores: career-ops nunca envía, presenta ni hace clic en nada. |
| **Escáner de portales**  | 100+ empresas preconfiguradas (Anthropic, OpenAI, ElevenLabs, Retool, n8n...) + consultas propias de búsqueda web en Ashby, Greenhouse, Lever, Wellfound |
| **Descubrimiento de empresas financiadas** | El comando `company:funded`, pensado para revisar antes de actuar, saca a la luz empresas con financiación reciente y diagnósticos de fuente a partir de feeds públicos estructurados, sin tocar tus datos |
| **Procesamiento en lote** | Evaluación en paralelo con workers de CLI sin interfaz (`claude -p` / `opencode run`)                                                   |
| **Dashboard TUI**        | Interfaz de terminal para navegar, filtrar y ordenar tu pipeline                                                                         |
| **Integridad del pipeline** | Fusión automática, deduplicación, normalización de estados, comprobaciones de salud                                                    |
| **Suite de entrevistas** | Planes de preparación por bloques de tiempo, sesiones de práctica con feedback, análisis posterior a la entrevista ([`interview/`](modes/interview/README.md)) y un detector de señales de alarma de la empresa ([`interview-redflag`](modes/interview-redflag.md)) |
| **Fase de oferta**       | Acompañante de lectura del contrato: recorrido cláusula a cláusula más una lista de preguntas para el abogado ([`offer-prep`](modes/offer-prep.md)), y un analizador de la brecha entre salario deseado, anunciado y real (`salary-gap.mjs`) |
| **Seguimientos y respuestas** | Calculadora de cadencia de seguimiento y recordatorios sembrados (`followup-cadence.mjs`, `followup-seed.mjs`); clasificación de las respuestas del empleador en actualizaciones del tracker ([`reply-watch`](modes/reply-watch.md)) |
| **Sistema de plugins**   | Integraciones opcionales (Gmail, Notion, Apify + un registro comunitario), desactivadas por defecto; ver [docs/PLUGINS.md](docs/PLUGINS.md) |

</details>

## Cómo funciona

<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>

## Inicio rápido

**La forma más rápida, con un solo comando:**

```bash
npx @santifer/career-ops init
```

> 💡 `npx` viene con [Node.js](https://nodejs.org): ejecuta el instalador una vez,
> sin instalar nada de forma global. ¿Aún no tienes Node? Instálalo primero.
> (¿Ya usas un CLI de Claude Code / Codex? Entonces ya lo tienes.)

Esto clona la última versión en `./career-ops` e instala las dependencias. Después:

```bash
cd career-ops
claude   # or codex / qwen / opencode / agy / grok — open your AI CLI here
```

**En el primer arranque, career-ops te guía en la configuración (tu CV, tu perfil y los puestos que buscas) solo conversando. No hay nada que editar a mano.**

<details>
<summary><b>¿Prefieres configurarlo a mano? (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
# Pega la URL o el texto de una oferta para activar el auto-pipeline.
# El resto de los modos, y cómo pedirlos en tu CLI: consulta Uso más abajo.
```

</details>

### Instalación global

```bash
npm i -g @santifer/career-ops
```

Esto instala el binario `career-ops` de forma global para que puedas ejecutar `career-ops init [folder]` sin `npx`. `init` es su único comando: prepara un espacio de trabajo, y todo lo demás ocurre dentro de tu CLI de IA (ver Uso más abajo), no a través de este binario.

**¿Cuál deberías usar?**
- `npx @santifer/career-ops init`: lo mejor para el primer uso; crea una carpeta de proyecto dedicada.
- `npm i -g @santifer/career-ops`: si prefieres escribir `career-ops init` en lugar de la forma con `npx`. No añade ningún otro comando.

### Otras formas de ejecutarlo

- **Desde cualquier carpeta, como plugin de Claude Code:** [docs/CLAUDE_PLUGIN.md](docs/CLAUDE_PLUGIN.md).
- **Sin un CLI de IA:** scripts independientes de Gemini, Ollama y compatibles con OpenAI evalúan una oferta por sí solos. Consulta [docs/SCRIPTS.md](docs/SCRIPTS.md#geminieval--ollamaeval--openaieval).

> **El sistema está diseñado para que lo personalice tu propio CLI de IA.** Modos, arquetipos, pesos de la puntuación, guiones de negociación: solo pídele que los cambie. Lee los mismos ficheros que usa, así que sabe exactamente qué editar.

Consulta [docs/SETUP.md](docs/SETUP.md) para la guía de instalación completa, [docs/RUNNING_ON_A_BUDGET.md](docs/RUNNING_ON_A_BUDGET.md) para ejecutar career-ops a bajo coste con modelos propios o locales (y [docs/FREE_TIER.md](docs/FREE_TIER.md) para ejecutarlo a coste cero en el nivel gratuito de Antigravity CLI), [docs/AUTOMATION.md](docs/AUTOMATION.md) para programar escaneos periódicos y una receta de triaje a lista corta sin gastar tokens, [docs/APPLY_AUTOFILL.md](docs/APPLY_AUTOFILL.md) para los detalles del flujo de rellenado de formularios ATS, [docs/LINKEDIN_JOIN.md](docs/LINKEDIN_JOIN.md) para cruzar una exportación de tus contactos de LinkedIn con las empresas de tu embudo, y [docs/FAQ.md](docs/FAQ.md) para respuestas a las dudas habituales de configuración, incluida [cómo la procedencia de las historias evita cifras inventadas](docs/FAQ.md#why-does-career-ops-refuse-to-use-a-number-from-my-story-bank). Los principios de diseño están en [ARCHITECTURE.md](ARCHITECTURE.md); los flujos en ejecución, en [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md).

## Uso

Pega la URL o la descripción de una oferta en tu CLI de IA. career-ops comprueba que una oferta enlazada siga abierta (un texto pegado no tiene enlace que comprobar), la puntúa frente a tu CV, escribe un informe, adapta tu CV (en PDF por defecto) y añade una fila a tu tracker. Eso cubre la mayoría de los días. Todo lo demás es un modo que pides por su nombre. Si no se puede leer una oferta, el pipeline se detiene y te pide que pegues el texto.

### Cómo pedir un modo

| CLI | Cómo pides `scan` |
| --- | --- |
| Claude Code, OpenCode, Antigravity CLI (`agy`), Grok Build CLI | `/career-ops scan` |
| Pi | `/skill:career-ops scan` |
| Codex, Qwen, Cursor o cualquier otro CLI compatible | Lenguaje natural: «Run the career-ops scan mode» |

`/career-ops` sin nada detrás muestra el menú de comandos en los CLIs que lo usan. El lenguaje natural funciona en todos los CLIs compatibles. Como plugin de Claude Code, el comando es `/career-ops:career-ops`.

Todos comparten un único enrutador, `.agents/skills/career-ops/SKILL.md`, y los mismos archivos `modes/*.md`, así que todos los CLIs enrutan una petición de la misma forma (los modos que usan mucho el navegador también necesitan herramientas de Playwright). Los comandos de barra no están garantizados en Codex: pide en lenguaje natural, o lanza un prompt en modo headless con `codex exec "Evaluate this JD with career-ops auto-pipeline: https://company.com/jobs/123"` ([docs/CODEX.md](docs/CODEX.md)). Cómo ejecutarlo en cada CLI compatible, los comandos headless cuando un CLI los tiene y las notas de configuración de cada CLI están en [docs/SUPPORTED_CLIS.md](docs/SUPPORTED_CLIS.md).

### Los comandos de cada día

| Comando | Qué hace |
| --- | --- |
| *pega una URL o una descripción de oferta* | Pipeline completo: comprobación de que la oferta sigue abierta (solo URLs), evaluación A-G más H con puntuaciones altas, informe, CV adaptado (PDF por defecto), fila en el tracker |
| `scan` | Escanea tus portales en busca de ofertas nuevas y las añade a la bandeja (`data/pipeline.md`) |
| `pipeline` | Recorre las URL que esperan en la bandeja (los niveles standard y premium pueden descartar las que claramente no encajan) |
| `apply` | Rellena un formulario de candidatura contigo, campo por campo. Se detiene antes de Enviar |
| `tracker` | En qué punto está cada candidatura |
| `followup` | Qué candidaturas toca seguir, con borradores |

<details>
<summary><b>Todos los comandos, por fase de la búsqueda</b></summary>

`oferta`, `ofertas` y `contacto` conservan sus nombres originales en español: oferta, ofertas, contacto.

**Encontrar puestos**

| Comando | Qué hace |
| --- | --- |
| [`scan`](modes/scan.md) | Escanea portales y descubre ofertas nuevas |
| [`discover`](modes/discover.md) | Convierte una lista de nombres de empresas en tableros ATS escaneables. Por defecto solo muestra una vista previa y únicamente con `--write` los añade a `portals.yml` (sin tokens) |
| [`pipeline`](modes/pipeline.md) | Procesa las URLs pendientes de la bandeja (`data/pipeline.md`) |
| [`triage`](modes/triage.md) | Primer filtro rápido de sí/no a partir de `modes/_brief.md`, antes de una evaluación completa (no escribe archivos) |
| [`batch`](modes/batch.md) | Evalúa muchas ofertas con workers headless (en paralelo con Claude, de una en una con otros CLIs) |
| [`titles`](modes/titles.md) | Sugiere títulos de puesto afines a partir de tu CV para ampliar la búsqueda |

**Evaluar un puesto**

| Comando | Qué hace |
| --- | --- |
| *pega una URL o una descripción de oferta* | [Auto-pipeline](modes/auto-pipeline.md): evaluación + informe + CV adaptado (PDF por defecto) + entrada en el tracker |
| [`oferta`](modes/oferta.md) | Solo evaluación, bloques A a G más H con puntuaciones altas (sin PDF) |
| [`ofertas`](modes/ofertas.md) | Compara y ordena varias ofertas |
| [`deep`](modes/deep.md) | Prompt de investigación en profundidad sobre la empresa |
| [`eu-swe`](modes/regional/eu-swe.md) | Calibra una candidatura europea de ingeniería de software antes del CV, la solicitud o la entrevista |

**Candidatura**

| Comando | Qué hace |
| --- | --- |
| [`pdf`](modes/pdf.md) | CV optimizado para ATS en PDF |
| [`ats`](modes/ats.md) | Comprobación de compatibilidad con ATS de un CV generado: puntuación y problemas corregibles |
| [`text`](modes/text.md) | CV adaptado en markdown (refleja `cv.md`, sin PDF) |
| [`latex`](modes/latex.md) | Exporta el CV a `.tex` de LaTeX/Overleaf |
| [`latex-tex`](modes/latex-tex.md) | Adapta tu propio `resume.tex` en el sitio (opcional; `cv.md` sigue siendo el predeterminado) |
| [`cover`](modes/cover.md) | Carta de presentación, a partir de una descripción pegada o de un informe evaluado (`cover {slug}`) |
| [`email`](modes/email.md) | Borrador de correo formal de candidatura. Solo borrador: nunca envía, presenta ni hace clic |
| [`contacto`](modes/contacto.md) | Encuentra al responsable de contratación, a un reclutador o a un par, y redacta un mensaje de LinkedIn |
| [`apply`](modes/apply.md) | Asistente de candidatura en vivo (Playwright desde este repositorio). No envía |

**Entrevista**

| Comando | Qué hace |
| --- | --- |
| [`interview-prep`](modes/interview-prep.md) | Documento de preparación de entrevista específico de la empresa |
| [`interview/plan`](modes/interview/plan.md) | Plan de preparación por bloques de tiempo para una entrevista próxima |
| [`interview/practice`](modes/interview/practice.md) | Entrevista de práctica, una pregunta cada vez, con feedback |
| [`interview/debrief`](modes/interview/debrief.md) | Análisis posterior a la entrevista: cierra huecos, anticipa la siguiente ronda |
| [`interview-redflag`](modes/interview-redflag.md) | Analiza las señales de alarma del empleador antes de incorporarte |

**Después de candidatarte**

| Comando | Qué hace |
| --- | --- |
| [`tracker`](modes/tracker.md) | Resumen del estado de las candidaturas |
| [`followup`](modes/followup.md) | Cadencia de seguimiento: marca las candidaturas vencidas, genera borradores |
| [`reply-watch`](modes/reply-watch.md) | Clasifica las respuestas del empleador y sugiere actualizaciones del tracker |
| [`outcome`](modes/outcome.md) | Registra el resultado de una candidatura y archiva sus artefactos |
| [`offer-prep`](modes/offer-prep.md) | Lee contigo una oferta o contrato recibido: recorrido por las cláusulas y preguntas para el abogado (no es asesoría legal) |

**Tu perfil y tu CV**

| Comando | Qué hace |
| --- | --- |
| [`interview`](modes/interview.md) | Configuración del perfil: una entrevista interactiva sobre tu experiencia que construye tu CV y tu perfil (no es práctica de entrevistas) |
| [`intake`](modes/intake.md) | Construye o enriquece tu perfil a partir de los archivos de `documents/` (CV maestro, exportación de LinkedIn). No se escribe nada sin tu confirmación |
| [`master-profile`](modes/master-profile.md) | Importa, revisa y valida tu Master Career Profile, y prepara datos seleccionados como viñetas del CV |
| [`add`](modes/add.md) | Añade un proyecto, artículo o puesto a tu CV (descarga, vista previa, confirmación) |
| [`expand`](modes/expand.md) | Descubre competencias que faltan en tu CV a partir de los enlaces de tu perfil |
| [`retro`](modes/retro.md) | Repasa esta sesión y conserva como reglas lo que le enseñaste (solo escribe las que aceptes) |

**Mejorar tu puntería**

| Comando | Qué hace |
| --- | --- |
| [`patterns`](modes/patterns.md) | Analiza patrones de rechazo y mejora la puntería |
| [`calibrate`](modes/calibrate.md) | Comprueba si tus notas de evaluación predicen tus resultados reales. Orientativo: nunca cambia la puntuación |
| [`upskill`](modes/upskill.md) | Análisis de carencias de habilidades en tus informes evaluados |
| [`training`](modes/training.md) | Evalúa un curso o certificación frente a tu North Star |
| [`project`](modes/project.md) | Evalúa una idea de proyecto de portfolio |

**Sistema**

| Comando | Qué hace |
| --- | --- |
| [`agent-inbox`](modes/agent-inbox.md) | Pone en cola peticiones para la siguiente sesión y las resuelve entonces (`data/agent-inbox.md`). `inbox` también funciona |
| [`update`](modes/update.md) | Actualiza los ficheros de sistema de career-ops, con vista previa del diff y comprobación de compatibilidad |

</details>

## Portales preconfigurados

El escáner viene con **100+ empresas** listas para escanear y **35+ consultas de búsqueda** en los principales portales de empleo. Copia `templates/portals.example.yml` a `portals.yml` y añade las tuyas:

**Laboratorios de IA:** Anthropic, OpenAI, Mistral, Cohere, LangChain, Pinecone
**IA de voz:** ElevenLabs, PolyAI, Parloa, Hume AI, Deepgram, Vapi, Bland AI
**Plataformas de IA:** Retool, Airtable, Vercel, Temporal, Glean, Arize AI
**Contact center:** Ada, LivePerson, Sierra, Decagon, Talkdesk, Genesys
**Enterprise:** Salesforce, Twilio, Gong, Dialpad
**LLMOps:** Langfuse, Weights & Biases, Lindy, Cognigy, Speechmatics
**Automatización:** n8n, Zapier, Make.com
**Europa:** Factorial, Attio, Tinybird, Clarity AI, Travelperk

**Portales de empleo cubiertos:** 55+ módulos de proveedor cubren APIs de ATS, feeds de portales completos, feeds XML/RSS, feeds en markdown y analizadores locales. La tabla completa está en [Portales de empleo compatibles](docs/SUPPORTED_JOB_BOARDS.md).

Por defecto `node scan.mjs` (también `npm run scan`) se fía de lo que devuelve cada feed de ATS. Algunas empresas dejan ofertas caducadas en su API pública incluso después de cerrar el puesto, así que esas entradas pueden colarse en `pipeline.md`. Pasa `--verify` para lanzar Playwright después de la pasada por la API y descartar las ofertas caducadas antes de que lleguen al pipeline:

```bash
node scan.mjs --verify          # zero-token discovery + Playwright liveness check
```

La verificación es secuencial y solo se ejecuta sobre las ofertas nuevas (tras la deduplicación), así que el coste queda acotado.

## Dashboard TUI

El dashboard integrado en la terminal te permite navegar por tu pipeline de forma visual:

```bash
npm run serve:dashboard   # launch the TUI
npm run build:dashboard   # optional: build the standalone binary
```

Funcionalidades: 10 pestañas de filtro, 8 modos de ordenación, vista agrupada o plana, previsualizaciones con carga diferida, cambios de estado en línea.

También hay una **interfaz web experimental** (alfa y opcional: no se ejecuta nada si no la arrancas tú): ver [`web/README.md`](web/README.md).

## Estructura del proyecto

```
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
```

## Directorio de datos externo (opcional)

Por defecto, los datos de la capa de usuario (como `cv.md`, `portals.yml` y las carpetas `data/`, `reports/` y `output/`) viven dentro de la carpeta raíz del proyecto.

Para separar tus datos personales del código (y así cambiar de rama, traer actualizaciones o probar varios perfiles con más facilidad), puedes configurar un directorio de datos externo con esta precedencia:

1. **Variables de entorno:** define la variable `CAREER_OPS_ROOT` o `CAREER_OPS_DATA_DIR`:
   ```bash
   export CAREER_OPS_ROOT=~/my-career-data
   ```
2. **Fichero marcador:** crea un fichero `.career-ops-data` en la raíz del repositorio con la ruta a tu directorio de datos.
3. **Por defecto:** la raíz del repositorio.

Una vez resuelto, todos los ficheros de usuario se resuelven y se escriben relativos a esa carpeta, mientras que los ficheros de prompts y los scripts siguen resolviéndose relativos al repositorio.

- **Sobrescribir el tracker:** también puedes definir `CAREER_OPS_TRACKER` para indicar directamente la ruta del fichero del tracker de candidaturas.
- **Escrituras:** todas las operaciones de escritura (como las fusiones) apuntan canónicamente a `{DATA_ROOT}/data/applications.md`.
- **Configuración del escáner:** `portals.yml` se lee y se valida en `{DATA_ROOT}/portals.yml`, así que `node validate-portals.mjs` comprueba el mismo fichero que lee `scan.mjs`.
- **Documentos generados:** los CVs adaptados y las cartas de presentación se escriben en `{DATA_ROOT}/output/`, y el manifiesto de PDFs que los vincula a un informe está en `{DATA_ROOT}/data/pdf-index.tsv`. Mientras `CAREER_OPS_TRACKER` no esté definida, el espacio de trabajo del tracker que acota esas escrituras es la raíz de datos, no el checkout.
- **PDFs con el tracker sobrescrito:** `generate-pdf.mjs` resuelve `CAREER_OPS_TRACKER` antes de derivar el espacio de trabajo, así que, con la variable definida, el espacio de trabajo es la carpeta que contiene ese tracker (o la carpeta superior, cuando el tracker está en una carpeta `data/`). El HTML del CV y todos los PDFs tienen que quedar dentro de ese espacio de trabajo, y el manifiesto pasa a su `data/pdf-index.tsv`. Las cartas de presentación siguen apuntando a `{DATA_ROOT}/output/`, así que se rechazan cuando esa carpeta queda fuera del espacio de trabajo del tracker.
- **La capa de código no se mueve:** `node_modules/`, `providers/`, `modes/` y los propios scripts se resuelven siempre contra el repositorio, nunca contra la raíz de datos.

El dashboard TUI en Go, los scripts de Node.js y los modos del agente de IA respetan automáticamente esta jerarquía de resolución.


## Stack tecnológico

![Claude Code](https://img.shields.io/badge/Claude_Code-000?style=flat&logo=anthropic&logoColor=white)
![Node.js](https://img.shields.io/badge/Node.js-339933?style=flat&logo=node.js&logoColor=white)
![Playwright](https://img.shields.io/badge/Playwright-2EAD33?style=flat&logo=playwright&logoColor=white)
![Go](https://img.shields.io/badge/Go-00ADD8?style=flat&logo=go&logoColor=white)
![Bubble Tea](https://img.shields.io/badge/Bubble_Tea-FF75B5?style=flat&logo=go&logoColor=white)

- **Agente**: CLI de programación con IA con skills y modos compartidos (`AGENTS.md` + envoltorio por CLI)
- **PDF**: Playwright + plantilla HTML
- **Cartas de presentación**: plantilla HTML + Playwright (PDF A4, mismo pipeline que los CVs)
- **Escáner**: Playwright + API de Greenhouse + WebSearch
- **Dashboard**: Go + Bubble Tea + Lipgloss (tema Catppuccin Mocha)
- **Datos**: tablas Markdown + configuración YAML + ficheros TSV de lote

<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>También funciona en cualquier CLI con el estándar de agent skills. Ver <a href="docs/SUPPORTED_CLIS.md">CLIs compatibles</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>

## También open source

- **[cv-santiago](https://github.com/santifer/cv-santiago)**: la web de portfolio (santifer.io) con chatbot de IA, dashboard de LLMOps y case studies. Si necesitas un portfolio que acompañe tu búsqueda de empleo, haz un fork y hazlo tuyo.

## Preguntas frecuentes (FAQ)

**¿Qué es career-ops?**
career-ops ([career-ops.org](https://career-ops.org), también conocido como **careerops**) es una búsqueda de empleo con IA, open source, que corre en local dentro de tu CLI de programación con IA (Claude Code, Codex, OpenCode y otros) y deja cada decisión en tus manos. Evalúa ofertas frente a tu CV, genera PDFs adaptados a los ATS, encuentra a la persona adecuada a la que escribir y lo registra todo en un solo sitio: la última palabra siempre es tuya. Es la primera implementación de referencia del [Manifiesto CareerOps](https://career-ops.org/manifesto).

**¿Puede el CV personalizado inventarse cosas?**
No debe, y los prompts lo dicen: reformular, nunca inventar. `generate-pdf` bloquea un CV con cifras o datos que no estén en tus fuentes, salvo que pases `--skip-fact-check`. El modo `pdf` también ejecuta `cv-title-check.mjs`, que compara cada cargo del CV adaptado con el que cv.md da al mismo puesto (emparejado por empresa y fechas) y te pregunta si quieres mantener o revertir cualquiera que difiera. Solo avisa, no bloquea, porque reformular un cargo a veces es decisión tuya. Nada juzga todavía los cambios de redacción: de eso se ocupa [#1411](https://github.com/career-ops-hq/career-ops/issues/1411) (control de fidelidad que bloquea si falla). Hasta entonces, lee cada CV antes de enviarlo. El [aviso legal](LEGAL_DISCLAIMER.md) dice lo mismo con más palabras.

**¿Puedo usar career-ops gratis, o con un modelo más barato o local?**
Sí. career-ops es independiente del CLI y funciona con modelos gratuitos y locales (modelos gratuitos de OpenRouter, Ollama o cualquier endpoint compatible con OpenAI), así que no dependes de ninguna suscripción de pago. Consulta [docs/RUNNING_ON_A_BUDGET.md](docs/RUNNING_ON_A_BUDGET.md) para la configuración completa.

**Pago Claude Pro/Max pero career-ops me está consumiendo créditos de la API. ¿Por qué?**
Porque una `ANTHROPIC_API_KEY` en tu entorno tiene prioridad sobre la suscripción con la que has iniciado sesión: el CLI usa la clave y factura por token. Ejecuta `echo $ANTHROPIC_API_KEY` y, si imprime algo, quítala del perfil de tu shell, reinicia la terminal y ejecuta `/login`. El modo en lote es la excepción, porque los workers `claude -p` no usan el inicio de sesión interactivo: ejecuta `claude setup-token` una vez y exporta el resultado como `CLAUDE_CODE_OAUTH_TOKEN`. Guía completa en [docs/RUNNING_ON_A_BUDGET.md](docs/RUNNING_ON_A_BUDGET.md#2b-already-paying-for-a-subscription-make-sure-you-are-using-it).

**¿Con qué CLIs de IA funciona career-ops?**
career-ops funciona con cualquier CLI de programación con IA importante (Claude Code, Codex, Gemini / Antigravity, OpenCode, Grok, Qwen y más) a través del estándar abierto Agent Skill Standard, así que nunca queda atado a un solo proveedor. Usa el CLI que ya tengas.

**¿Cómo instalo career-ops en Windows?**
career-ops funciona en Windows. La configuración específica de la plataforma y sus aristas conocidas (detección de Git Bash, finales de línea, Programador de tareas) están en [docs/WINDOWS.md](docs/WINDOWS.md). Si las skills no cargan por un error de enlace simbólico durante la instalación, la solución está en [docs/FAQ.md](docs/FAQ.md). Los pasos completos están en [docs/SETUP.md](docs/SETUP.md).

**¿career-ops aplica a las ofertas por mí?**
No. career-ops es un filtro, no un aplicador masivo a ciegas. La IA evalúa, puntúa y redacta; tú revisas y decides. Redacta y rellena; nunca envía. Tú pulsas Enviar. Ese diseño con una persona al mando es justo el sentido de todo.

**¿career-ops es gratis y open source?**
Sí. career-ops es gratis y open source, y para el candidato siempre lo será. Es la primera implementación de referencia del [Manifiesto CareerOps](https://career-ops.org/es/manifesto). Léelo y, si dice lo que tú crees, fírmalo.

## Sobre el autor

Soy [Santiago Fernández de Valderrama Aparicio](https://santifer.io/about) (santifer), exfundador: monté y vendí un negocio que sigue funcionando con mi nombre. Construí career-ops para gestionar mi propia búsqueda de empleo, y funcionó: gracias a él conseguí un puesto de Head of Applied AI. Seis meses después dejé ese puesto para dedicarme a tiempo completo a construir career-ops.

¿Te preguntas cómo se mantiene un repositorio de este tamaño con una flota de agentes de IA y una persona que decide cada merge? Lee [Agentic maintenance: how career-ops is run by a fleet of AI agents](https://santifer.io/ai-agent-fleet).

Mi portfolio y otros proyectos 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).

## Aviso legal

**career-ops es una herramienta local y open source, NO un servicio alojado.** Al usar este software, aceptas que:

1. **Tú controlas tus datos.** Tu CV, tus datos de contacto y tu información personal se quedan en tu máquina y se envían directamente al proveedor de IA que elijas (Anthropic, OpenAI, etc.). No recopilamos, almacenamos ni tenemos acceso a ninguno de tus datos.
2. **Tú controlas la IA.** Los prompts por defecto instruyen a la IA para que no envíe candidaturas automáticamente, pero los modelos de IA pueden comportarse de forma impredecible. Si modificas los prompts o usas otros modelos, lo haces bajo tu responsabilidad. **Revisa siempre la exactitud del contenido generado por la IA antes de enviarlo.**
3. **Tú cumples las condiciones de terceros.** Debes usar esta herramienta de acuerdo con las condiciones de servicio de los portales de empleo con los que interactúes (Greenhouse, Lever, Workday, LinkedIn, etc.). No uses esta herramienta para hacer spam a las empresas ni para saturar sistemas ATS.
4. **Sin garantías.** Las evaluaciones son recomendaciones, no verdades. Los modelos de IA pueden inventar habilidades o experiencia. Los autores no son responsables de resultados laborales, candidaturas rechazadas, restricciones de cuenta ni de ninguna otra consecuencia.

Consulta [LEGAL_DISCLAIMER.md](LEGAL_DISCLAIMER.md) para todos los detalles. Este software se distribuye bajo la [licencia MIT](LICENSE) "tal cual", sin garantía de ningún tipo.

## Contribuidores

<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>

Todas las personas que han aportado código, documentación, traducciones o tests están en
[CONTRIBUTORS.md](CONTRIBUTORS.md), incluidas las contribuciones que no son código y que
el gráfico de arriba no puede mostrar.

¿Has conseguido trabajo con career-ops? [¡Cuenta tu historia!](https://github.com/career-ops-hq/career-ops/issues/new?template=i-got-hired.yml)

## Licencia y marca

El código se distribuye bajo licencia [MIT](LICENSE). El nombre y la marca
"career-ops" se rigen por la [política de marca](TRADEMARK.md), permisiva
para el uso comunitario y reservada para nombrar productos comerciales y
para el respaldo de los mismos.

## Historial de estrellas

<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>Creado y mantenido por <a href="https://santifer.io">Santiago Fernández de Valderrama Aparicio</a> (<a href="https://github.com/santifer">@santifer</a>)</sub></p>

## Conecta

[![Website](https://img.shields.io/badge/santifer.io-000?style=for-the-badge&logo=safari&logoColor=white)](https://santifer.io)
[![LinkedIn](https://img.shields.io/badge/LinkedIn-0A66C2?style=for-the-badge&logo=linkedin&logoColor=white)](https://linkedin.com/in/santifer)
[![X](https://img.shields.io/badge/X-000?style=for-the-badge&logo=x&logoColor=white)](https://x.com/santifer)
[![Discord](https://img.shields.io/badge/Discord-5865F2?style=for-the-badge&logo=discord&logoColor=white)](https://discord.gg/8pRpHETxa4)
[![Email](https://img.shields.io/badge/Email-EA4335?style=for-the-badge&logo=gmail&logoColor=white)](mailto:hi@santifer.io)