---
title: "Open Source y Labs: Ramón Chancay"
description: "Repositorios públicos y experimentos, con arquitectura, stack y licencia."
author: Ramón Chancay
lang: es
canonical: https://www.ramonchancay.me/es/labs
---

# Open Source y Labs: Ramón Chancay

Repositorios públicos y experimentos, con arquitectura, stack y licencia.

## Repositorios públicos

### HermesVoice

HermesVoice es una app nativa de macOS, con una interfaz al estilo del HUD de J.A.R.V.I.S., que sostiene una conversación hablada con cualquier backend compatible con OpenAI: una instancia de Hermes Agent de Nous Research, OpenAI, Ollama o LM Studio. El reconocimiento y la síntesis de voz corren en el dispositivo con los frameworks Speech y AVFoundation de Apple, así que el audio nunca sale de la Mac: solo se envía al modelo el texto transcrito. Está escrita en Swift y SwiftUI sin ninguna dependencia de terceros: sin paquetes SPM, sin CocoaPods, sin nada que vendorizar.

- Repositorio: https://github.com/devrchancay/hermes-voice-jarvis
- Estado: Open source · MIT. Lenguaje: Swift. Corre en: macOS 14+. Licencia: MIT. Año: 2026.
- Stack: Swift, SwiftUI, AVFoundation, AVAudioEngine, SFSpeechRecognizer, AVSpeechSynthesizer, Accelerate (FFT), Keychain, Server-Sent Events, OpenAI-compatible API, XCTest
- Puntos clave: Voz en el dispositivo, en los dos sentidos (SFSpeechRecognizer transcribe y AVSpeechSynthesizer habla, usando las voces de Siri ya instaladas en la máquina. El selector de idioma solo lista los idiomas que la Mac puede oír y hablar, y marca los que tendrían que salir del dispositivo para transcribirse.); Responde mientras el modelo piensa (La respuesta llega como server-sent events y pasa por un buffer de frases, así que la app empieza a hablar en la primera frase completa en lugar de esperar la respuesta entera. Si hablas encima, se detiene a media frase: la interrupción lee los mismos buffers de audio que el reconocedor.); Un solo motor de audio para todo (Un único AVAudioEngine compartido atiende el tap del micrófono, la reproducción y la medición. Eso es lo que hace que la forma de onda sea una FFT real del audio en vivo (el micrófono mientras hablas, la voz sintetizada mientras responde) y que detenerla sea instantáneo.); Cualquier idioma, cambiable a mitad de conversación (Un solo ajuste controla el reconocimiento, la síntesis y el idioma en que responde el modelo. El system prompt se mantiene en un idioma y añade una directiva que nombra el idioma de respuesta, así que agregar un idioma no cuesta más que una voz que la Mac ya tiene.); Spec-first, un pull request por tarea (La arquitectura, el contrato de la API y la UI se escribieron en SPEC.md antes que el código, y luego se construyeron como 15 tareas con criterios de aceptación, un PR cada una. Las capturas del README se renderizan desde las vistas SwiftUI reales con ImageRenderer dentro de los tests, así que no pueden quedar desactualizadas frente a la UI.)
- Detalle: https://www.ramonchancay.me/es/labs/hermes-voice-jarvis

### Agente de voz que agenda citas

Construido como prueba de concepto para un cliente: ElevenLabs Agents se encarga de la voz, los turnos y el modelo; Cal.com es el dueño del calendario; y en medio hay un backend en Fastify cuyo único trabajo es que el modelo nunca tenga que adivinar. El backend es el único componente que habla con Cal.com, así que la API key nunca llega al agente y ningún payload de reserva lo escribe un LLM. El agente mismo es JSON versionado que se aplica con el CLI de ElevenLabs: el prompt, el ASR, el TTS, los turnos y los contratos de las tools viven en el repositorio, no en un dashboard donde el siguiente deploy los sobrescribiría.

- Repositorio: https://github.com/devrchancay/elevenlabs-cal-demo
- Estado: Prueba de concepto · demo para cliente. Lenguaje: TypeScript. Corre en: Node 22 · Docker · Railway. Licencia: Repo público, sin archivo de licencia. Año: 2026.
- Stack: TypeScript, Node 22, Fastify, Zod, Vitest, ElevenLabs Agents, Cal.com API v2, WebRTC, Vite, Tailwind v4, Docker, Railway, pnpm workspaces
- Puntos clave: Toda decisión adivinable, fuera del modelo (La aritmética de zonas horarias vive en un solo archivo, cubierto por tests con el reloj congelado. Cal.com devuelve decenas de slots crudos; el backend elige tres repartidos en el día y los redacta para hablarlos, así el agente lee opciones en lugar de inventarlas.); La página muestra la reserva, no el chat (La interfaz está hecha sobre el SDK de ElevenLabs y no sobre el widget embebido: un orbe que sigue al micrófono y luego a la voz del agente, una pista de subtítulos y un panel que se va llenando con los horarios reales que devolvió Cal.com, consultados al backend por id de conversación.); Los fallos, diseñados antes que el camino feliz (Si la parte del día pedida está llena se ofrece el resto del día; si el día entero está lleno se buscan los siguientes siete en paralelo, porque siete llamadas encadenadas son silencio audible. Los errores de las tools vuelven como algo que el agente puede decir en voz alta.); Iterar el prompt sin quemar minutos de voz (Un harness de simulación corre seis conversaciones guionadas contra el agente en vivo, en texto, y verifica que la reserva siempre siguió a una confirmación explícita, que no se ofreció ningún horario inventado y que confirmar dos veces no crea dos citas. 153 tests, ninguno toca la red.); Entregado como producto, no como demo (Auth por bearer en las dos tools webhook, webhook post-llamada verificado por HMAC con ventana de replay, comparaciones en tiempo constante, logs redactados, rate limiting por IP, imagen Docker multi-stage sin root y validación al arranque que mata el proceso nombrando la variable que falta en vez de fallar a media llamada.)
- Detalle: https://www.ramonchancay.me/es/labs/elevenlabs-cal-demo

## Preguntas frecuentes

### ¿Qué proyectos open source mantiene Ramón Chancay?

Ahora mismo hay dos repositorios públicos. HermesVoice es un cliente de voz nativo de macOS para modelos de lenguaje, con licencia MIT, en github.com/devrchancay/hermes-voice-jarvis. El agente de voz que agenda citas (github.com/devrchancay/elevenlabs-cal-demo) es una prueba de concepto construida para un cliente: un visitante habla con una página en español y cuelga con una cita confirmada, usando ElevenLabs Agents, Cal.com y un backend en Fastify. Antes, como parte del equipo de Nexxtway, contribuyó a react-rainbow-components, una librería open source de componentes React. Todo se construye en público: la especificación, la lista de tareas y los pull requests están en el repositorio.

### ¿Qué es HermesVoice?

HermesVoice es una app nativa de macOS, con una interfaz al estilo del HUD de J.A.R.V.I.S., que permite sostener una conversación hablada con un modelo de lenguaje. El reconocimiento y la síntesis de voz corren en el dispositivo con SFSpeechRecognizer y AVSpeechSynthesizer, la respuesta llega por server-sent events y se habla frase por frase, y puedes interrumpirla hablando encima. Está escrita en Swift y SwiftUI sin dependencias de terceros y requiere macOS 14 o superior.

### ¿Con qué backends de LLM funciona HermesVoice?

Con cualquier endpoint compatible con OpenAI que sirva POST /v1/chat/completions con streaming. Eso incluye una instancia de Hermes Agent de Nous Research, la API de OpenAI y runtimes locales como Ollama y LM Studio. La URL del servidor se configura en la app y la API key es opcional y se guarda en el Keychain de macOS, así que un servidor local sin autenticación funciona sin ninguna clave.

### ¿Mi voz sale de mi computadora?

No. Tanto el reconocimiento como la síntesis corren en el dispositivo, así que al modelo solo se envía el texto transcrito. El selector de idioma lista únicamente los idiomas que tu Mac puede transcribir y hablar localmente, y marca de forma explícita cualquier idioma cuyo reconocimiento tendría que salir del dispositivo. El único costo recurrente es el modelo.

### ¿Qué es el agente de voz que agenda citas?

Es una prueba de concepto construida para un cliente, y funciona de punta a punta: el visitante abre una página, habla en español con un asistente y cuelga con una cita de 30 minutos confirmada en el calendario del negocio. ElevenLabs Agents se encarga de la voz, los turnos y el modelo, Cal.com es el dueño del calendario, y un backend en Fastify con TypeScript queda en medio para que el modelo nunca haga aritmética de fechas, nunca escriba un timestamp y nunca vea la key de Cal.com. Hay un artículo completo en el blog sobre cómo se construyó.

### ¿Puedo usar estos proyectos en un producto comercial?

HermesVoice tiene licencia MIT, así que se puede usar, modificar y lanzar comercialmente con la atribución correspondiente. El agente de voz que agenda citas es un repositorio público sin archivo de licencia, así que está para leerlo y aprender de él más que para reutilizarlo tal cual: si quieres ese flujo en tu producto, lo práctico es construirlo para tu calendario y tus textos. Los issues y pull requests son bienvenidos en ambos.

### ¿Cómo se construyen estos proyectos de laboratorio?

Primero la especificación. La arquitectura, el contrato de la API y el diseño de la UI se escriben antes de cualquier código, el trabajo se divide en tareas numeradas con criterios de aceptación y cada tarea se entrega como su propio pull request con tests. En HermesVoice las capturas del README se renderizan desde las vistas SwiftUI reales con ImageRenderer como parte de los tests, así que la documentación no puede alejarse en silencio de la app. En el agente de voz, el agente mismo es JSON versionado que se aplica con el CLI de ElevenLabs, y 153 tests más un harness de simulación corren sin tocar la red.

### ¿Puedes construir un agente de voz o una función de IA en el dispositivo para mi producto?

Sí: el agente de voz que agenda citas fue exactamente eso, construido de punta a punta para un cliente. Ramón construye funciones de voz y de IA de punta a punta para productos web, móviles y de escritorio: interfaces de voz en tiempo real, respuestas de LLM en streaming, RAG sobre tus propios datos e inferencia local o en el borde cuando el audio o los documentos no pueden salir de la máquina del usuario. La forma más rápida de empezar es una llamada corta para definir el caso de uso y las restricciones.

