Dev.to AI 🤖 Ai 👁 0 📖 3 min read

waifu ♡ — She Greets You, Vibes With You, and Says Bye When You Leave

This is a submission for Weekend Challenge: Passion Edition What I Built waifu — a flirty voice companion that wraps around Claude Code in your terminal. Type waifu claude instead of claude, and she greets y

waifu ♡ — She Greets You, Vibes With You, and Says Bye When You Leave

This is a submission for Weekend Challenge: Passion Edition

What I Built

waifu — a flirty voice companion that wraps around Claude Code in your terminal.

Type waifu claude instead of claude, and she greets you out loud before handing control to a normal Claude Code session, then says goodbye when you exit. Get bored mid-session? waifu vibeme composes and plays an original instrumental track on the spot — lofi, synthwave, jazz, whatever mood you ask for.

The goal was simple: take the CLI tool I already live in all day and give it a little personality, without getting in the way of actual work. No dashboards, no wrapper UI to learn — just her voice layered on top of the tool you already use.

waifu claude              # greets you → runs Claude Code → says bye
waifu claude --vibeme     # …with a background score looping while you code
waifu vibeme lofi rain piano

Demo

Install and try it yourself — it's a real CLI, not a hosted demo:

npm install -g https://github.com/codebyNJ/waifu/releases/latest/download/waifu-cli.tgz
export ELEVENLABS_API_KEY=your-key   # free tier works
waifu setup && waifu claude

Code

GitHub logo codebyNJ / waifu

A flirty voice companion wrapped around Claude Code, powered by the ElevenLabs API.

waifu ♡

release release workflow

A flirty voice companion wrapped around Claude Code, powered by the ElevenLabs API.

She greets you (sweetly, or… not so sweetly) when you start coding, says goodbye when you leave, and composes instrumental background scores when you're bored.

waifu claude          # she greets you → Claude Code runs → she says bye
waifu vibeme          # she composes an instrumental vibe & plays it

Install

Every push to main publishes a fresh GitHub Release with a ready-to-install tarball, so anyone can grab the latest:

npm install -g https://github.com/codebyNJ/waifu/releases/latest/download/waifu-cli.tgz

Or install straight from source:

npm install -g codebyNJ/waifu   # npm builds it for you via the prepare script

Bring your own key

Nothing secret ships in the package — you supply your own ElevenLabs API key (the free tier works):

export ELEVENLABS_API_KEY=your-key   # add to your shell profile to persist
# …or keep it in a .env file in
…

How I Built It

It's a small, dependency-free TypeScript CLI — no Express, no framework, just Node 22's built-in fetch and .env loading. A few decisions mattered more than the rest:

Voice, not just TTS. My first pass used ElevenLabs' eleven_multilingual_v2 model, and the result was technically speech but emotionally dead — every line read in the same flat tone regardless of what it said. I switched to eleven_v3, which reads inline audio tags like [whispers], [giggles], and [sighs] embedded directly in the text and performs them. Every one of her lines is hand-tagged and scaled by a spice setting (mild → flirty → spicy), so the same greeting can be sweet or unmistakably flirtatious depending on your mood. Tags are stripped before anything hits the screen or an older model, so they never leak out as literal text.

Instrumental companionship. vibeme calls ElevenLabs' Music API with a mood prompt — lofi, synthwave, ambient — and plays the result with a tiny animated terminal equalizer. On accounts without Music API access it falls back automatically to the sound-generation endpoint, so the feature degrades gracefully instead of failing.

Zero-friction distribution. A GitHub Actions workflow stamps a new version and cuts a GitHub Release with an installable tarball on every push to main — anyone can npm install -g the latest release URL directly, no npm registry account required. Nothing secret ships in the package; everyone brings their own ElevenLabs key at runtime, with a friendly first-run message if it's missing.

Respecting the terminal. Spoken lines are cached by content hash, so repeated greetings cost zero API credits. Ctrl+C is passed straight through to Claude Code during a session instead of being swallowed by the wrapper. --mute (or WAIFU_MUTE=1) turns it all off instantly for quiet environments.

Prize Categories

Best Use of ElevenLabs

📰 Read the original article on Dev.to AI

Originally published by Dev.to AI. Aggregated on AIWithGhost for educational purposes — full credit and traffic to the original publisher.