---
title: "Open Source & Labs: Ramón Chancay"
description: "Public repositories and experiments, with architecture, stack and licence."
author: Ramón Chancay
lang: en
canonical: https://www.ramonchancay.me/labs
---

# Open Source & Labs: Ramón Chancay

Public repositories and experiments, with architecture, stack and licence.

## Public repositories

### HermesVoice

HermesVoice is a native macOS app, styled after the J.A.R.V.I.S. HUD, that holds a spoken conversation with any OpenAI-compatible backend: a Hermes Agent instance from Nous Research, OpenAI, Ollama or LM Studio. Speech recognition and speech synthesis both run on-device with Apple’s Speech and AVFoundation frameworks, so the audio never leaves the Mac — only the transcribed text is sent to the model. It is written in Swift and SwiftUI with no third-party dependencies at all: no SPM packages, no CocoaPods, nothing to vendor.

- Repository: https://github.com/devrchancay/hermes-voice-jarvis
- Status: Open source · MIT. Language: Swift. Runs on: macOS 14+. Licence: MIT. Year: 2026.
- Stack: Swift, SwiftUI, AVFoundation, AVAudioEngine, SFSpeechRecognizer, AVSpeechSynthesizer, Accelerate (FFT), Keychain, Server-Sent Events, OpenAI-compatible API, XCTest
- Highlights: On-device speech, both directions (SFSpeechRecognizer transcribes and AVSpeechSynthesizer speaks, using the Siri voices already installed on the machine. The language picker only lists languages the Mac can both hear and speak, and flags the ones that would need to leave the device to be transcribed.); Streams as the model thinks (The reply arrives as server-sent events and goes through a sentence buffer, so the app starts speaking on the first complete sentence instead of waiting for the full answer. Talk over it and it stops mid-sentence — barge-in reads the same audio buffers as the recognizer.); One audio engine for everything (A single shared AVAudioEngine serves the microphone tap, playback and metering. That is what makes the waveform a real FFT of the live audio (the mic while you talk, the synthesized voice while it answers) and what makes stopping instant.); Any language, switchable mid-conversation (One setting drives recognition, synthesis and the language the model replies in. The system prompt stays monolingual and appends a directive naming the reply language, so adding a language costs nothing but a voice the Mac already has.); Spec-first, one pull request per task (The architecture, API contract and UI were written down in SPEC.md before the code, then built as 15 tasks with acceptance criteria, one PR each. The README screenshots are rendered from the real SwiftUI views with ImageRenderer inside the test suite, so they cannot drift out of date with the UI.)
- Details: https://www.ramonchancay.me/labs/hermes-voice-jarvis

### Voice booking agent

Built as a proof of concept for a client: ElevenLabs Agents handles voice, turn-taking and the model; Cal.com owns the calendar; and in between sits a Fastify backend whose entire job is to make sure the model never has to guess. The backend is the only component that talks to Cal.com, so the API key never reaches the agent and no booking payload is written by an LLM. The agent itself is versioned JSON applied with the ElevenLabs CLI — prompt, ASR, TTS, turn-taking and tool contracts live in the repository, not in a dashboard where the next deploy would overwrite them.

- Repository: https://github.com/devrchancay/elevenlabs-cal-demo
- Status: Proof of concept · client demo. Language: TypeScript. Runs on: Node 22 · Docker · Railway. Licence: Public repo, no licence file. Year: 2026.
- Stack: TypeScript, Node 22, Fastify, Zod, Vitest, ElevenLabs Agents, Cal.com API v2, WebRTC, Vite, Tailwind v4, Docker, Railway, pnpm workspaces
- Highlights: Every guessable decision moved out of the model (Timezone arithmetic lives in one file behind tests with a frozen clock. Cal.com returns dozens of raw slots; the backend picks three spread across the day and phrases them for speech, so the agent reads options rather than inventing them.); The page shows the booking, not the chat (The interface is built on the ElevenLabs SDK rather than the embedded widget: an orb that tracks the microphone and then the agent’s own output, a subtitle track, and a panel that fills in with the real times Cal.com returned, polled from the backend by conversation id.); Failure modes designed before the happy path (If the requested part of the day is full the rest of the day is offered; if the whole day is full the next seven are searched in parallel, because seven chained round-trips are audible silence. Tool errors come back as something the agent can say out loud.); Prompt iteration without burning voice minutes (A simulation harness runs six scripted conversations against the live agent in text and asserts that booking always followed an explicit confirmation, that no invented time was offered, and that confirming twice does not create two appointments. 153 tests, none of which touch the network.); Shipped like a product, not a demo (Bearer auth on both webhook tools, HMAC-verified post-call webhook with a replay window, constant-time comparisons, redacted logs, per-IP rate limiting, a multi-stage non-root Docker image, and boot-time validation that kills the process naming the missing variable instead of failing mid-call.)
- Details: https://www.ramonchancay.me/labs/elevenlabs-cal-demo

## Frequently asked questions

### What open-source projects does Ramón Chancay maintain?

Two repositories are public right now. HermesVoice is a native macOS voice client for large language models, MIT licensed, at github.com/devrchancay/hermes-voice-jarvis. The voice booking agent (github.com/devrchancay/elevenlabs-cal-demo) is a proof of concept built for a client: a visitor talks to a page in Spanish and hangs up with a confirmed appointment, using ElevenLabs Agents, Cal.com and a Fastify backend. Earlier, as part of the Nexxtway team, he contributed to react-rainbow-components, an open-source React component library. Everything is built in public: the spec, the task list and the pull requests are all in the repository.

### What is HermesVoice?

HermesVoice is a native macOS app, styled after the J.A.R.V.I.S. HUD, that lets you hold a spoken conversation with a large language model. Speech recognition and synthesis run on-device with SFSpeechRecognizer and AVSpeechSynthesizer, the reply streams over server-sent events and is spoken sentence by sentence, and you can interrupt it by talking over it. It is written in Swift and SwiftUI with zero third-party dependencies and requires macOS 14 or later.

### Which LLM backends does HermesVoice work with?

Any OpenAI-compatible endpoint that serves POST /v1/chat/completions with streaming. That includes a Hermes Agent instance from Nous Research, the OpenAI API, and local runtimes such as Ollama and LM Studio. The server URL is set in the app, and the API key is optional and stored in the macOS Keychain, so a local server without authentication works with no key at all.

### Does my voice leave my computer?

No. Both the recognition and the synthesis run on-device, so only the transcribed text is sent to whichever model you point the app at. The language picker lists only the languages your Mac can both transcribe and speak locally, and explicitly flags any language whose recognition would have to leave the device. The only running cost is the model itself.

### What is the voice agent that books appointments?

It is a proof of concept built for a client, and it works end to end: the visitor opens a page, talks to an assistant in Spanish, and hangs up with a confirmed 30-minute appointment on the business calendar. ElevenLabs Agents handles speech, turn-taking and the model, Cal.com owns the calendar, and a Fastify backend in TypeScript sits in between so the model never does date arithmetic, never writes a timestamp and never sees the Cal.com key. There is a full write-up of the build on the blog.

### Can I use these projects in a commercial product?

HermesVoice is MIT licensed, so it can be used, modified and shipped commercially with attribution. The voice booking agent is a public repository with no licence file, so it is there to be read and learned from rather than reused as-is: if you want that flow in your product, the practical route is to build it for your calendar and your copy. Issues and pull requests are welcome on both.

### How are these lab projects built?

Spec first. The architecture, API contract and UI design are written down before any code, the work is split into numbered tasks with acceptance criteria, and each task ships as its own pull request with tests. In HermesVoice the README screenshots are rendered from the real SwiftUI views with ImageRenderer as part of the test suite, so the documentation cannot silently drift away from the app. In the voice booking agent the agent itself is versioned JSON applied with the ElevenLabs CLI, and 153 tests plus a simulation harness run without touching the network.

### Can you build a voice agent or an on-device AI feature for my product?

Yes — the voice booking agent above was exactly that, built end to end for a client. Ramón builds voice and AI features end to end for web, mobile and desktop products: real-time speech interfaces, streaming LLM responses, RAG over your own data, and local or edge inference when the audio or the documents cannot leave the user’s machine. The fastest start is a short call to define the use case and the constraints.

