sotto
v0.4.7Full-duplex voice conversation with your running Claude Code session, powered by OpenAI gpt-live-1. Toggle with /talk.
By Chad BoydaLicense: MIT0 GitHub starsUpdated 1 hour ago
Directory evidence
- Runtimes
- Claude Code
- Parsed components
- 1 skill or MCP entry
- Source updated
- Sep 26, 2026
- Manifest status
- Canonical path parsed
The directory validates manifest shape and source location. It does not execute the plugin or provide a security endorsement. Review the indexing methodology →
Install sotto for Claude Code
claude plugin marketplace add IchenDEV/agent-plugin-mkt
claude plugin marketplace update agent-plugin-marketplace
claude plugin install sotto@agent-plugin-marketplacePaste and run these commands in a terminal with Claude Code. They add and refresh the PluginsMP catalog, then install this plugin.
The installer fetches third-party code from the source repository shown on this page. This directory validates manifest structure and source location, but does not perform a security audit; review the manifest, components, and source before installing.
Get the source manually
git clone https://github.com/chadboyda/sottoClone the source repository, then follow its setup instructions to add the plugin to a compatible client. The repository root is the plugin root.
Plugin files
├── .claude-plugin/plugin.json└── skills/talk/SKILL.md
Included Skills1
Turns sotto voice conversation on or off for this Claude Code session, or shows its status.
Plugin manifests1
{
"$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json",
"name": "sotto",
"displayName": "Sotto",
"version": "0.4.7",
"description": "Full-duplex voice conversation with your running Claude Code session, powered by OpenAI gpt-live-1. Toggle with /talk.",
"author": {
"name": "Chad Boyda"
},
"homepage": "https://github.com/chadboyda/sotto",
"repository": "https://github.com/chadboyda/sotto",
"license": "MIT",
"keywords": [
"voice",
"gpt-live",
"webrtc",
"speech",
"hands-free"
],
"userConfig": {
"voice": {
"type": "string",
"title": "Voice",
"default": "marin",
"description": "GPT-Live voice used for new voice sessions.",
"options": [
"alloy",
"ash",
"ballad",
"beacon",
"bossa",
"cedar",
"cinder",
"coral",
"delta",
"echo",
"gleam",
"marin",
"meridian",
"quartz",
"ripple",
"sage",
"shimmer",
"stone",
"tempo",
"verse",
"vesper",
"willow"
]
},
"port": {
"type": "number",
"title": "Local port",
"default": 47821,
"min": 1024,
"max": 65535,
"description": "Loopback port for the sotto daemon and voice window."
},
"idle_seconds": {
"type": "number",
"title": "Idle seconds",
"default": 60,
"min": 0,
"max": 7200,
"description": "Close the paid voice session after this many seconds with no speech and no pending request; it wakes again when you talk (0 = never)."
},
"idle_minutes": {
"type": "number",
"title": "Idle minutes (legacy)",
"default": 5,
"min": 0,
"max": 120,
"description": "Legacy setting, used only when Idle seconds is not set."
},
"wake_sensitivity": {
"type": "string",
"title": "Wake sensitivity",
"default": "medium",
"options": [
"off",
"low",
"medium",
"high"
],
"description": "How readily your voice wakes a sleeping session (detected locally, nothing is sent until then). off = press Space to resume."
},
"speaking_policy": {
"type": "string",
"title": "Speaking policy",
"default": "milestones",
"options": [
"quiet",
"milestones",
"walkthrough"
],
"description": "How much the voice narrates Claude's work you did not ask about."
},
"daily_cap_minutes": {
"type": "number",
"title": "Daily cap (minutes)",
"default": 120,
"min": 0,
"max": 1440,
"description": "Maximum voice minutes per day at $0.05/min (0 = no cap)."
},
"window": {
"type": "string",
"title": "Voice window",
"default": "auto",
"options": [
"auto",
"app",
"chrome",
"default"
],
"description": "Where the voice page opens: auto (the Sotto desktop app on macOS, else Chrome), app, chrome, or default (your default browser)."
},
"openai_api_key": {
"type": "string",
"title": "OpenAI API key (optional)",
"sensitive": true,
"description": "Optional. Leave empty to add the key in the voice window on first use (it is saved in your macOS Keychain). Needs access to gpt-live-1. An OPENAI_API_KEY environment variable, a .env file or the Keychain key takes precedence."
},
"mirror": {
"type": "string",
"title": "Mirror speech to Claude",
"default": "all",
"options": [
"all",
"decisions",
"off"
],
"description": "What you say to the voice that it does not hand to Claude still reaches Claude a few seconds later as background: all (everything but filler), decisions (only decisions, feedback and requests), or off."
},
"echo_guard": {
"type": "string",
"title": "Echo guard",
"default": "auto",
"options": [
"auto",
"on",
"off"
],
"description": "Keeps the voice from hearing itself on speakers. auto: a soft echo suppressor turns on only when the voice window measures echo that the browser's echo cancellation left behind (you can still talk over the voice); on: always; off: never. Headphones never need it."
}
}
}For maintainers
If you maintain this plugin, link to this source-backed listing from your README so users can review its manifest and indexed components.
[sotto on Agent Plugins Marketplace](https://pluginsmp.com/plugins/sotto)