Skip to content
Agentmart
Submit a tool

ava

Voice interaction for AI coding assistants.

Skill by harshav167

IndexedMIT
Write a review

Install

Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.

npx agentmarket install skill/harshav167-ava

Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.

Get the weekly diff

The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.

We use your email only for this newsletter. Privacy

About

Voice interaction for AI coding assistants. Provides natural voice conversations using ElevenLabs TTS and STT. Use when users mention ava, speak, talk, converse, voice status, or voice troubleshooting. ElevenLabs-only: eleven_v3 TTS model, Scribe v2 Realtime STT with local Silero VAD.

No reviews yet. Installed it? Reviews come from verified installers only. How reviews work

Permissions

What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.

Tools
No tools found
Secrets
None asked for
Install scripts
None found

Network hosts it talks to 1

  • codeload.github.com · found in install command

Files it touches

  • ~/.claude/skills/ava

What's inside

Skill name
ava
Description
Voice interaction for AI coding assistants. Provides natural voice conversations using ElevenLabs TTS and STT. Use when users mention ava, speak, talk, converse, voice status, or voice troubleshooting. ElevenLabs-only: eleven_v3 TTS model, Scribe v2 Realtime STT with local Silero VAD.
License
MIT
Instructions
144 lines in SKILL.md · view on GitHub

Agent Skills spec issues

  • files: referenced but missing: scripts/ava-server.sh

Files (1)

  • SKILL.md

SKILL.md (first lines)

# Ava

Natural voice conversations with AI coding assistants using ElevenLabs text-to-speech (TTS) and speech-to-text (STT).

## The Jarvis Goal

Ava aims to create a Jarvis-like voice assistant experience. The AI speaks to you and listens, like a real conversation. In voice-primary mode, substantive responses must go through `converse`; if voice fails, stop and restore MCP instead of continuing chat-only.

## Setup

### 1. Configure MCP Server

Ava runs as an HTTP server on port 8765. Add this MCP configuration to Cursor, Codex, Factory, or another MCP-capable host:

```json
{
  "mcpServers": {
    "ava": {
      "type": "http",
      "url": "http://127.0.0.1:8765/mcp"
    }
  }
}
```

### 2. Configure ElevenLabs

Set your ElevenLabs API key:

```bash
# In ~/.ava/ava.env
ELEVENLABS_API_KEY=your-key-here
```

ElevenLabs provides:
- **TTS**: `eleven_v3` model with Donna voice (cloned)
- **STT**: Scribe v2 Realtime (streaming WebSocket with manual commit mode)

## Usage

Use the `converse` MCP tool. Trust server defaults unless changing behavior for the current turn:

```python
# Speak and listen — trust server defaults
converse(message="Hello! What would you like to work on?", wait_for_conch=true)

# Speak without waiting (narration while working)
converse(message="Searching the codebase now...", wait_for_response=false, wait_for_conch=true)

# User wants to say something long without silence cutoff
converse(message="Go ahead, I'm listening.", disable_silence_detection=true, wait_for_conch=true)
```

### Parameter rules (read before every call)

The server defaults are tuned and locked. **Do not pass tuning parameters** — passing them yourself is the #1 cause of inconsistent behavior across agents. The vast majority of calls are exactly:

```python
converse(message="...")
```

Only three parameters are ever situational: `wait_for_response`, `disable_silence_detection`, and (Claude Desktop only) `skip_tts`. Everything else is a server default you must NOT send.

| Parameter | Default | Pass it? | When to pass |
|-----------|---------|----------|--------------|
| `message` | required | **always** | The text to speak (use `""` only with `skip_tts=true`) |
| `wait_for_response` | `true` | **only to disable** | Pass `false` for a fire-and-forget announcement/narration where you will NOT listen |
| `disable_silence_detection` | `false` | **only to enable** | Pass `true` when the user explicitly needs to talk at length with long pauses (dictation, reading aloud) |
| `wait_for_conch` | `true` | **never** (already default) | Leave as default; it auto-queues behind another speaker |
| `speed` | `1.2` | **never** unless user asks | Only if the user says "talk faster/slower" mid-session. Range 0.7–1.2; eleven_v3 rejects >1.2 |
| `vad_aggressiveness` | `2` | **never** unless troubleshooting | Server-tuned. Only change if the user reports background bleed (raise) or being cut off (lower) |
| `listen_duration_min` | `1` | **never** | Server-tuned |
| `listen_duration_max` | `600` | **never** | Server-tuned (10 min) |
| `timeout` | `900` | **never** | Server-tuned (15 min) |
| `metrics_level` | `summary` | **never** | Server-tuned |

**Hard rule:** if you find yourself passing `speed`, `vad_aggressiveness`, `listen_duration_*`, `timeout`, or `metrics_level`, stop — you almost certainly should not be. The user tunes those via `~/.ava/ava.env`, not per-call.

## Best Practices

1. **Voice-primary communication** -- substantive responses go through `converse`; if voice fails, stop and restore MCP instead of continuing chat-only
2. **Trust server defaults** -- speed defaults to 1.2 (the eleven_v3 max); pass optional parameters only when changing behavior
3. **Narrate without waiting rarely** -- Use `wait_for_response=false` only for short acknowledgements before work
4. **One question at a time** -- Don't bundle multiple questions
5. **Parallel calls** -- Combine a rare short `converse(..., wait_for_response=false)` acknowledgement with other tools in one turn for zero dead air
6. **Long input** -- Set `disable_silence_detection=true` when the user needs to speak at length; server defaults already allow a 10-minute listen window
7. **Long spoken output** -- A long single-line paragraph is valid in one `converse` call; normalize literal newlines out of `message`, but do not shorten or split substantive content merely to work around reliability issues

## Parallel Tool Calls (Zero Dead Air)

When performing actions during a voice conversation, use parallel tool calls to eliminate dead air:

```python
# FAST: One turn -- voice and action fire simultaneously
converse("Checking that now.", wait_for_response=false, wait_for_conch=true)
bash("git status")

# Then speak the results
converse("Here's what I found: ...", wait_for_response=true, wait_for_conch=true)
```

## Configuration

Config file: `~/.ava/ava.env`

### ElevenLabs Settings

| Variable | Default | Description |
|----------|---------|-------------|
| `ELEVENLABS_API_KEY` | (none) | API key -- required |
| `AVA_ELEVENLABS_TTS_MODEL` | `eleven_v3` | TTS model |
| `AVA_ELEVENLABS_TTS_VOICE` | `k4hP4cQadSZQc0Oar2Ld` | Voice ID (Donna) |
| `AVA_ELEVENLABS_STT_MODEL` | `scribe_v2_realtime` | STT model |
| `AVA_ELEVENLABS_REALTIME_STT` | `true` | Use realtime streaming STT |
| `AVA_SILENCE_THRESHOLD_MS` | `2000` | Silence threshold in ms (2.0s default) |
| `AVA_VAD_AGGRESSIVENESS` | `2` | VAD strictness (0-3); higher rejects more background audio |

## Architecture

From harshav167/ava, MIT.

Signals

Stars
0
Forks
0
Open issues
2
Last commit (this folder)
Jun 3, 2026 (4 months ago)

From GitHub (fetched Oct 24, 2026).

Details

License
MIT
First seen
Oct 24, 2026
Last checked
Oct 24, 2026

Same skill elsewhere

Copies of this SKILL.md published by others; search shows only one of them.

More from harshav167

Cite this page

ava skill. Agent Mart. https://agentmart.dev/skills/harshav167-ava (last updated 2026-10-24)