EN
← Volver al Portafolio
IA Agéntica y Automatización septiembre de 2026

CareerTwin, un Banco de Trabajo de Evidencia Profesional y Búsqueda de Empleo para un Solo Candidato

Un banco de trabajo autoalojado donde un candidato es dueño de un perfil centrado en evidencia y de cualquier número de oportunidades, postulaciones, tareas y artefactos de carrera generados. Su puntaje de calce es una medida de alineación versionada con cobertura e incertidumbre, nunca una probabilidad de contratación: separa requisitos obligatorios, deseables y de elegibilidad, declara cuánto de cada uno cubre la evidencia confirmada y explica cada componente de forma reproducible. El lado agéntico es acotado y cita evidencia, cada escritura canónica propuesta requiere aprobación explícita, y el producto completo funciona sin ningún proveedor de IA. No clasifica candidatos para empleadores, no infiere rasgos protegidos, no raspa sitios de empleo sin permiso, no postula ni contacta por sí mismo. En producción en v0.14.5 sobre un solo VPS; no se afirma ningún resultado externo de búsqueda de empleo.

Compuertas de release en v0.14.5
82 pruebas de backend, MyPy y Ruff estrictos, 6 contratos de agente, 22 pruebas de frontend, auditorías de dependencias y secretos, CodeQL, escaneo de dos imágenes, SBOM
Inteligencia ocupacional
Importadores de ESCO 1.2.1 y O*NET 30.3 con checksums y procedencia; O*NET activo con 1.150 conceptos y 12.684 relaciones; un benchmark fijo de 20 casos EN/ES de MRR, recall y latencia con compuerta de no degradación
Límite de privacidad
Secretos, documentos, bases de datos y respaldos fuera de Git; filtros por inquilino más seguridad a nivel de fila en PostgreSQL; ClamAV antes de extraer; la captura por URL fija cada destino y redirección; los PAT de GitHub se aceptan solo en un cuerpo POST para una instantánea acotada de solo lectura y nunca se persisten
Estado de producción verificado
Fijado al commit revisado, dos imágenes de release, PostgreSQL 17.11 + pgvector 0.8.6, igualdad de collation, Alembic en head, el acceso de identidad sin autenticar responde 401, una restauración aislada de 39 tablas desde un respaldo cifrado solo del dueño verificada fuera del host
Lo que sigue abierto, con nombre
Activación con consentimiento del operador del archivo oficial ESCO 1.2.1 (#55); una llave de modelo gestionada y acotada al producto con la prueba real de agente y voz en producción (#63); sin adoptante externo ni resultado medido
Despliegue
Un solo VPS tras nginx y TLS, perfil alojado en Docker Compose, acceso solo por invitación, rotación forzada de la contraseña inicial; repositorio público MIT; consume el shell compartido @fasl-work/caos-app-shell
Diagrama de arquitectura de CareerTwin, un Banco de Trabajo de Evidencia Profesional y Búsqueda de Empleo para un Solo Candidato
#career #evidence-graph #job-search #matching #agentic #self-hosted #privacy #fastapi #postgresql #pgvector #react

Contexto de Negocio

El valor de una búsqueda de empleo lo decide el posicionamiento, y el posicionamiento lo decide la evidencia: qué afirmaciones puede respaldar el candidato, qué brechas son reales y qué oportunidades valen las horas. CareerTwin mantiene ese libro del lado del candidato. Un puntaje de calce que declara su cobertura y su incertidumbre le dice al candidato qué corregir y no a quién vencer; una matriz de recomendaciones sobre brechas repetidas en un portafolio objetivo convierte decenas de avisos en una lista corta de capacidades por construir o por evidenciar; los borradores fundamentados en evidencia confirmada eliminan la línea inventada que hace descartar una postulación. El límite autoalojado es la condición de todo esto: secretos de producción, documentos, bases de datos y respaldos nunca entran al repositorio público, se aplican a la vez filtros por inquilino y seguridad a nivel de fila en PostgreSQL, las cargas se escanean antes de extraerlas, y la captura por URL fija cada destino y cada redirección para resistir SSRF y reenlace de DNS.

Valor Estratégico

El producto está completo y en producción, y su registro dice exactamente qué está establecido y qué no. Compuertas de release en v0.14.5: 82 pruebas de backend, MyPy y Ruff estrictos, seis contratos de agente, 22 pruebas de frontend, auditorías de dependencias y secretos, CodeQL, escaneo de contenedores, un SBOM y un contrato de carga representativo de 10 usuarios sobre 1.000 oportunidades a 8,059 ms p95 contra un límite de 2,5 s. Producción corre fijada al commit revisado con dos imágenes de release; PostgreSQL 17.11 y pgvector 0.8.6 se verifican junto con la igualdad de collation, una restauración aislada de 39 tablas desde un respaldo cifrado solo del dueño, y O*NET 30.3 activo con 1.150 conceptos y 12.684 relaciones. Dos compuertas siguen honestamente abiertas y se siguen como issues: la activación con consentimiento del operador del archivo oficial ESCO 1.2.1, y una llave de modelo gestionada y acotada al producto seguida de una prueba real de agente y voz en producción; el proveedor de modelo queda sin configurar hasta entonces. No existe un adoptante externo con nombre ni un resultado medido de búsqueda de empleo, así que el eje de valor del plan se registra como demostración interna, no como adopción.

El Desafío

Las herramientas de búsqueda de empleo están hechas para el otro lado de la mesa: clasifican personas para empleadores, las puntúan con números que se leen como probabilidades y le piden al candidato entregar su historia a un servicio que se la queda. Un candidato que quiere entender su propio posicionamiento no tiene nada equivalente: un perfil que es una lista de afirmaciones y no de evidencia, un calce que es un número que nadie puede desarmar, y cartas de presentación generadas que citan cosas que el candidato nunca dijo. Los requisitos duros son los límites. Un puntaje nunca debe leerse como probabilidad de contratación. Nada sobre un rasgo protegido puede inferirse. Documentos, llaves de proveedor y sesiones deben quedarse en hardware que el candidato controla. Y un asistente que puede escribir en el registro canónico nunca debe hacerlo por su cuenta.

Nuestro Enfoque

CareerTwin es un producto de repositorio nativo primero: FastAPI, Pydantic, SQLAlchemy y Alembic sobre SQLite para uso local, y PostgreSQL 17 con pgvector, un worker respaldado por la base de datos y ClamAV en el perfil alojado; React, TypeScript y Vite al frente. Nueve módulos cubren el recorrido del candidato: perfil y evidencia (ingesta cifrada de documentos con parsers deterministas, una bandeja de confirmación, instantáneas del portafolio en GitHub, afirmaciones ligadas a su fuente, un banco STAR, variantes inmutables de currículum, importación y exportación JSON Resume), inteligencia de oportunidades (captura manual, pegada, por archivo, por URL acotada y por extensión de navegador revocable, con instantáneas inmutables de cada revisión), calce determinista (requisitos obligatorios, deseables y de elegibilidad separados, cobertura de evidencia, cotas de incertidumbre, un resumen versionado de las entradas y explicaciones reproducibles por componente), mejora y borradores fundamentados, operaciones de búsqueda (tablero de postulaciones, contactos, tareas, importación y exportación de calendario RFC 5545, conectores de calendario y correo sujetos a consentimiento, analítica de embudo), un concierge agéntico (conversaciones persistentes sobre evidencia confirmada, estado de ejecución y checkpoints en la base de datos, y aprobación explícita de cada escritura canónica propuesta), administración de cuentas solo por invitación, inteligencia ocupacional (importadores de ESCO 1.2.1 y O*NET 30.3 con verificación de checksum, un benchmark fijo de recuperación de 20 casos EN/ES y una compuerta de no degradación en cada release) y ocho habilidades de repositorio versionadas que usan los mismos contratos de CLI y API que el producto web. Los servicios deterministas son dueños del puntaje y de toda escritura canónica; el arnés agéntico son flujos LangGraph acotados que citan evidencia, tras adaptadores Pydantic AI para xAI, OpenAI, Anthropic y Google, y el producto funciona completo sin proveedor.

Indicadores Clave de Rendimiento

KPILínea BaseResultadoImpacto
Un puntaje que no puede leerse como probabilidad de contrataciónUn número opaco por avisoUna medida de alineación versionada con cobertura de evidencia, cotas de incertidumbre, separación obligatorio/deseable/elegibilidad y explicaciones reproducibles por componenteEl candidato aprende qué corregir, y el número sobrevive a una nueva corrida
Un asistente que nunca escribe por su cuentaEl texto generado entra al registro sin revisiónFlujos acotados que citan evidencia; cada escritura canónica propuesta requiere aprobación explícita; los servicios deterministas son dueños del puntaje y las escrituras; operación completa sin ningún proveedorNinguna afirmación inventada llega a una postulación
Contrato de carga en el perfil alojadoUn límite de 2,5 s p95 para 10 usuarios sobre 1.000 oportunidades8,059 ms p95 medidos en el releaseTres órdenes de magnitud dentro del contrato

Arquitectura

careertwin pipeline

careertwin pipeline

Stack Tecnológico

Python FastAPI Pydantic SQLAlchemy Alembic PostgreSQL 17 pgvector SQLite LangGraph Pydantic AI React TypeScript Vite Sigma.js ECharts Docker Compose

Capturas de la Aplicación

CareerTwin, un Banco de Trabajo de Evidencia Profesional y Búsqueda de Empleo para un Solo Candidato
CareerTwin, un Banco de Trabajo de Evidencia Profesional y Búsqueda de Empleo para un Solo Candidato