Skip to content

feat: setup installs ElevenLabs in your coding agents, and onboard offers it (1.11.0) - #191

Draft
bitpshr wants to merge 19 commits into
mainfrom
paul/one-command-setup-cli
Draft

bitpshr wants to merge 19 commits into
mainfrom
paul/one-command-setup-cli

Conversation

@bitpshr

@bitpshr bitpshr commented Nov 11, 2026 •

Copy link
Copy Markdown
Contributor

Summary

Getting ElevenLabs into a coding agent takes a different handful of commands for each agent, and onboarding leaves you with an API key but nothing installed in the agent itself. elevenlabs setup does it in one command, and onboard now offers it at the end.

  • It looks for Claude Code, Codex and Cursor. For Claude Code and Codex it installs the ElevenLabs plugin (the skills and the hosted MCP server) with the agent's own plugin command. Cursor has no install command, so it prints the marketplace link. If it finds none of them, it copies the skills into ~/.agents/skills.
  • It only says what it would do until you pass --yes. Running it again updates.
  • After your first request works, onboard asks once whether to set up the agents it found. Nothing else about onboarding changes.

It's careful about what it runs: only a program called claude or codex, started from your home folder, never anything in the project. A step that hangs is stopped after 30 seconds along with anything it started, and Ctrl-C stops it cleanly. On Windows it works from PowerShell and Git Bash.

Bumps the version to 1.11.0. The plugin needs its own fix released first (0.5.0, branch paul/one-command-setup-plugin in elevenlabs/plugin). Without it, Claude Code installs the plugin but drops its MCP server.

Testing

  • cargo test --locked passes three runs in a row on macOS, and on Linux in a container. 61 new tests cover finding the agents, each install step failing, the skills copy, hangs and Ctrl-C, as unit tests and through the real binary. I broke the code 14 ways on purpose and a test caught each one.
  • Testing found four bugs, fixed here: a claude in a relative PATH folder could be run, an empty skills download counted as success, a step stopped at its time limit could leave a process behind, and a failed install could put megabytes of the agent's output into the reply.
  • By hand, with the real Claude Code and Codex in throwaway configs: the whole onboarding flow up to the offer and the install, and about 120 variations of setup. Both agents list the plugin afterwards.
  • CI runs setup on Windows, from Git Bash and PowerShell, against stand-in agents, including a failed install.
  • Not tried: a full onboarding run inside a real agent with a real sign-in, and stopping a hung install on Windows.

…n offer it (1.11.0)

`elevenlabs setup --yes` installs the ElevenLabs plugin (skills and the
hosted MCP server) into Claude Code and Codex through their own plugin
commands, prints the marketplace link for Cursor, and with none of them
copies the skills into ~/.agents/skills. Without --yes it only says what
it would do.

Onboarding asks the approval page whether to offer it (setup_offer=1).
When the callback says yes, the reply that ended the flow after a test
request that worked, or for a voice agent project, asks instead whether to
set ElevenLabs up in the agents found, and `onboard setup` does it.
…nd honours --dry-run

Claude Code installed by npm names node or bun in CLAUDE_CODE_EXECPATH, so setup now uses that path only when the program is called claude, and starts every agent command in the home folder, where nothing in the project can be loaded. A command past its time limit is stopped with every program it started. --dry-run installs nothing, in setup and onboard setup. On Windows a .cmd shim is started by its full path, without a hand-built cmd /C, so a folder with parentheses works. A skills copy that stops partway is replaced next time, onboard setup with no home folder ends with a reply, and a failed setup says how to try again.
…s what it started

On Windows the search path arrives as Path, so setup looked for PATH, found no agent and copied the skills instead of installing the plugin. Variable names now match ignoring case on Windows, and windows-smoke runs setup from PowerShell too.

Ctrl-C or SIGTERM during an agent command now stops that command and everything it started, then exits with 130 or 143. A skill folder whose marker can't be written is removed rather than left unmarked.
The offer to set up the coding agents no longer waits for anything from the approval page: every sign-in that works leaves it due, and the flow makes it once, at the end, as before. The sign-in link and the callback handling are back to what they were.
… when the skills download holds none

An empty or relative entry on PATH names a folder in the project, so a claude or codex there could be run by setup. Those entries are now skipped. A skills download with no skill in it used to report "copied 0 ElevenLabs skills" as a success; it now fails and says so. The skills download takes its URL as a parameter, so tests serve archives from a local server.
…rocesses, as tables and a randomized run

Every combination of Claude Code, Codex and Cursor, and the awkward PATH and CLAUDE_CODE_EXECPATH values; each agent command failing in turn, and 2,000 seeded random failure patterns against an injected clock; the skills download against a local server standing in for GitHub, and every state the home folder can be in; and real child processes for stdin, large and broken output, signals, vanished programs, limits and leftovers.
setup for every combination of stand-in agents and flags, a stand-in failing at each step, odd folder names, ten runs in a row and two at once, and agents started from the shell's environment, never a project's .env. Whole flows through the real loopback sign-in: the offer after a test request that works, once per sign-in, with the flags and the npx spelling in its run. With no sign-in, every reply is compared with the base commit's, kept in tests/fixtures/. SIGINT and SIGTERM during each of the six agent commands, twice in a row, with SIGINT ignored, and with no agent command running.
…uding a failed install

Both the Git Bash and the PowerShell steps now check that setup without --yes runs nothing, that a stand-in codex.cmd gets its three commands in order, and that a claude.cmd refusing plugin install makes setup --yes exit 1 and show the error.
…n one it was just starting

A program being started as its group was killed could miss the signal and keep running. Once the stopped command is reaped, its group is now killed until it is empty. Found by fifty_runs_in_a_row_leave_no_process_behind, which failed in each of three full test runs.
@bitpshr bitpshr changed the title feat: setup installs ElevenLabs in your coding agents, and onboard can offer it (1.11.0) feat: setup installs ElevenLabs in your coding agents, and onboard offers it (1.11.0) Nov 11, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant