[BUG] Cowork ElevenLabs plugin: ${user_config.output_dir} never substituted — all TTS/music generation fails with ENOENT

Resolved 💬 2 comments Opened May 1, 2026 by SoWrongImRight Closed Jun 11, 2026

Preflight Checklist

  • [x] I have searched existing issues and this hasn't been reported yet
  • [x] This is a single bug report (please file separate reports for different bugs)
  • [x] I am using the latest version of Claude Code

What's Wrong?

When using the ElevenLabs plugin in Cowork (not Claude Code CLI), all audio generation tools — generate_tts, generate_music, generate_sound_effect — fail immediately with:

Failed to generate speech: ENOENT: no such file or directory, mkdir '${user_config.output_dir}'

The plugin's output directory config accepts a path during setup, but the ${user_config.output_dir} template string is passed literally to mkdir rather than being resolved to the configured path. This happens on fresh install AND after reinstall with an explicit path set.

Account tier: ElevenLabs Starter (paid). API key is valid — the error occurs before any API call is made, purely in the plugin's file system setup.

What Should Happen?

The output directory path configured during plugin setup should be substituted into ${user_config.output_dir} so the plugin can create the directory and save generated audio files. generate_tts, generate_music, and generate_sound_effect should all return audio files saved to the configured path.

Error Messages/Logs

Failed to generate speech: ENOENT: no such file or directory, mkdir '${user_config.output_dir}'

Same error for all three tools:
- generate_tts
- generate_music (also fails with missing music_generation permission on free tier, but output_dir error blocks even on paid Starter tier)
- generate_sound_effect

Error occurs on every call regardless of text content or voice selection. Reproduced across:
- Fresh install of ElevenLabs plugin
- Uninstall + reinstall with explicit output path configured
- ElevenLabs Starter tier (paid) with valid API key

Steps to Reproduce

  1. Install the ElevenLabs plugin in Cowork via the plugin marketplace
  2. Configure with a valid ElevenLabs API key and set an output directory path (e.g. /Users/username/Downloads)
  3. In a Cowork conversation, ask Claude to generate speech: "Generate TTS saying hello world"
  4. Plugin calls generate_tts
  5. Immediately fails with: ENOENT: no such file or directory, mkdir '${user_config.output_dir}'

Alternate reproduction:

  1. Uninstall the plugin completely
  2. Reinstall fresh with API key and explicit output path
  3. Same error persists — the configured path is never substituted for ${user_config.output_dir}

Claude Model

None

Is this a regression?

Yes, this worked in a previous version

Last Working Version

_No response_

Claude Code Version

Cowork desktop app (not Claude Code CLI) - macOS

Platform

Anthropic API

Operating System

macOS

Terminal/Shell

Terminal.app (macOS)

Additional Information

This bug is in the Cowork desktop app plugin, not Claude Code CLI. The ElevenLabs plugin is installed via the Cowork plugin marketplace.

Note: The underlying ElevenLabs MCP server (elevenlabs/elevenlabs-mcp) had a related path-handling bug (Issue #71) that was fixed in PR #82 on 2025-10-01. However, the Cowork plugin wrapper layer is failing before the MCP server is even reached — the ${user_config.output_dir} template variable substitution happens in the Cowork plugin layer itself.

This makes the ElevenLabs plugin completely non-functional in Cowork. All three generation tools (TTS, music, sound effects) are blocked. Given that ElevenLabs is a featured connector in Cowork and this workflow (AI voice + music for video content) is a primary use case, this is a high-priority regression.

View original on GitHub ↗

This issue has 2 comments on GitHub. Read the full discussion on GitHub ↗