[BUG] Cowork ElevenLabs plugin: ${user_config.output_dir} never substituted — all TTS/music generation fails with ENOENT
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
- Install the ElevenLabs plugin in Cowork via the plugin marketplace
- Configure with a valid ElevenLabs API key and set an output directory path (e.g. /Users/username/Downloads)
- In a Cowork conversation, ask Claude to generate speech: "Generate TTS saying hello world"
- Plugin calls generate_tts
- Immediately fails with: ENOENT: no such file or directory, mkdir '${user_config.output_dir}'
Alternate reproduction:
- Uninstall the plugin completely
- Reinstall fresh with API key and explicit output path
- 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.
This issue has 2 comments on GitHub. Read the full discussion on GitHub ↗