SHOBR, un CLI de búsqueda de empleo que automatiza tu navegador real
El proyecto conduce tu navegador de uso diario vía beachpatrol, guarda todo el estado en logs de eventos JSONL y usa un LLM solo donde no hay alternativa.
SHOBR es un CLI de código abierto que automatiza la búsqueda de empleo sin levantar un navegador headless: conduce el navegador que ya usas a diario a través de beachpatrol, guarda el estado en registros de eventos y reserva el LLM para los pasos donde no hay otra salida. El autor lo publica en GitHub y lo describe como la opción más UNIX del nicho.
El navegador que ya tienes, no uno controlado
La premisa es sencilla. Buscar ofertas implica hacer scraping, y hacerlo bien implica hacerlo con tus credenciales reales. En vez de pedirte que extraigas cookies y sesiones a un navegador automatizado, SHOBR se apoya en beachpatrol, que envuelve Playwright sobre tu navegador de uso diario. Para LinkedIn, la actividad se parece a la de cualquiera pulsando enlaces. Beachpatrol es el único requisito duro del proyecto, y el autor avisa de que el enfoque puede chocar con los términos de servicio si se abusa de él.
El flujo se divide en cinco etapas: descubrimiento de ofertas, enriquecimiento con descripciones y rangos salariales, cribado, adaptación del currículum y seguimiento. shobr discover lanza el scraping, shobr status imprime el estado de cada fase y shobr next va preguntando por el siguiente paso lógico en lugar de obligarte a recordar el comando concreto. El envío final de la candidatura siempre lo haces tú: la herramienta prepara borradores y PDFs, pero no dispara nada.
Event sourcing y un LLM que no manda
Todos los datos —ofertas encontradas, cribados, seguimiento— viven en logs JSONL append-only que se proyectan a ficheros de estado. Eso permite cortar el pipeline a medias o recalcular aprobaciones con reglas nuevas sin perder nada por el camino.
En la parte de IA el diseño es deliberadamente frugal. Adaptar un currículum a una oferta con calidad exige algo de modelo, pero el proyecto usa lo mínimo y no requiere un driver de agente como otras herramientas del mismo espacio. La integración pasa por any-llm, así que da igual OpenAI, Anthropic o un modelo local; el autor incluso menciona faaah para reutilizar la suscripción de un agente que ya tengas corriendo.
Los currículums se escriben en Markdown y se compilan a PDF legibles por ATS con groff y pandoc, con una carpeta por candidatura.
Qué hace falta para probarlo
Python 3.14 o superior con uv, una sola dependencia de runtime (any-llm-sdk[openai]) y las utilidades de texto de Unix habituales. shobr setup genera la configuración en $XDG_CONFIG_HOME/shobr/config.toml y enlaza los comandos propios dentro de beachpatrol por symlink; hace falta un perfil con sesión iniciada en LinkedIn. Las pruebas van con unittest de la biblioteca estándar, sin framework externo, y el autor cifra el proyecto en 3500 líneas con comentarios incluidos. Conviene aclarar que el texto del repositorio está truncado a mitad de la fase de enriquecimiento, así que las etapas finales no quedan detalladas.
Lo reutilizable aquí no es el buscador de empleo, sino dos patrones: dirigir el navegador real en lugar de uno headless es una vía para cualquier scraping que necesite sesión autenticada, y una capa de abstracción como any-llm evita atarse a un proveedor cuando el modelo es solo una pieza del flujo.


