Listen · ASR
Press once to record and again to send. Vox transcribes locally before SpeakEasy routes the final text to the task you chose.
speakeasy "Welcome to SpeakEasy! This unified text-to-speech service makes it easy to add voice to your applications" --provider openai --voice nova --rate 180npm install @arach/speakeasySpeakEasy now joins local speech recognition and controllable narration around one exact Codex Desktop conversation.
Press once to record and again to send. Vox transcribes locally before SpeakEasy routes the final text to the task you chose.
The task’s response returns through the menu-bar player with autoplay, queueing, speed, volume, and a live transcript HUD.
Nine persistent lanes. No focus guessing.
No repository, Bun, Xcode, or server setup. Give Codex one bounded installation task; it verifies and opens the notarized app, then tells you exactly which human permissions remain. The paired browser/iPad Deck is included.
It downloads and inspects the pinned release installer—never a floating latest build.
Checksum, Gatekeeper, Developer ID, version, and safe app replacement are checked in order.
You grant microphone and local-network access; Settings verifies Codex and the live bridge.
No complex setup, no boilerplate. Choose your style and start building.
import { say } from '@arach/speakeasy';
// Quick start - one line!
await say('Hello world!');
// With provider
await say('Hello from OpenAI!', 'openai');
await say('Hello from ElevenLabs!', 'elevenlabs');import { speak, SpeakEasy } from '@arach/speakeasy';
// Full featured with options
await speak('Priority message', {
provider: 'openai',
volume: 0.8,
priority: 'high'
});
// Custom instance
const speech = new SpeakEasy({
provider: 'elevenlabs',
volume: 0.6,
rate: 200
});
await speech.speak('Custom configuration');# Install globally
npm install -g @arach/speakeasy
# Quick setup - save your API key
speakeasy --set-key elevenlabs YOUR_API_KEY
# Set as default provider
speakeasy --set-default elevenlabs
# Start speaking!
speakeasy "Hello world"
# Or use system voice (no API key needed)
speakeasy "Hello world" --provider system// ~/.config/speakeasy/settings.json
{
"providers": {
"openai": {
"voice": "nova",
"apiKey": "sk-..."
},
"elevenlabs": {
"voiceId": "EXAVITQu4vr4xnSDxMaL",
"apiKey": "sk-..."
}
},
"defaults": {
"provider": "openai",
"volume": 0.7,
"rate": 180
}
}--provider system for built-in macOS voicesNever miss important notifications. Transform Claude Code's silent alerts into intelligent spoken updates.
// ~/.claude/hooks/notification.ts
import { SpeakEasy } from '@arach/speakeasy';
const speakEasy = new SpeakEasy({
provider: 'groq',
cache: { enabled: true, ttl: '7d' },
fallbackOrder: ['groq', 'openai', 'system']
});
// Read notification from Claude Code
const notificationType = process.argv[2];
const payload = JSON.parse(await readStdin());
// Extract project context
const projectMatch = payload.transcript_path?.match(/\/([^\/]+)$/);
const projectName = projectMatch?.[1] || 'your project';
// Transform into natural speech
let spokenMessage = payload.message;
if (projectName !== 'your project') {
spokenMessage = `In ${projectName}, ${payload.message}`;
}
// Speak the notification
await speakEasy.speak(spokenMessage);
// Also copy to clipboard and log
await copyToClipboard(JSON.stringify(payload, null, 2));
logger.info('Notification processed', { type: notificationType, message: spokenMessage });Ready-to-deploy handlers
Claude HooksOfficial documentation
Every feature is designed to make text-to-speech simple, reliable, and powerful for your applications.
Automatic caching for API providers. Same text + voice = no API call, lower bills.
Set defaults once in ~/.config/speakeasy/settings.json. Override per-call when needed.
Full type safety, IntelliSense, and modern async/await patterns. Built for developer experience.
Precise volume control (0.0-1.0) without affecting your system. Isolated playback for every provider.
System voices, OpenAI, ElevenLabs, Groq, and Gemini. Smart fallbacks ensure your speech always works.
Minimal footprint with smart fallbacks. Works offline with system voices, online with API providers.