You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
feat: onboard ends a voice agent project on a link to talk to the agent (1.9.0) - #184
When someone asks for a voice agent, onboard didn't know when it was done. A site that only embeds the agent widget never counted as wired, so check kept asking for SDK code, and the flow always ended by offering a text-to-speech clip. This makes the agent case end the way you'd expect:
The widget counts. A page or component with <elevenlabs-convai> is wired, in check and right after sign-in.
Only code that reads the key has to load it. The agents' browser SDKs (@elevenlabs/react, @elevenlabs/client, @elevenlabs/react-native) and the widget packages connect without the key, so an app that only uses those isn't sent to load_key. A server SDK, or code that names ELEVENLABS_API_KEY, still is.
The last step is the agent. When the code names an agent the key can open, check ends on done with a link to talk to it and its dashboard page, instead of the TTS clip:
It looks up at most 3 IDs, the code's first, then the env file's (not .env.example), then agents.json, and stops at a 401/403.
An agent limited to an allowlist, or a private one, gets its page instead of the talk-to link. A private agent with no server code says the page can't connect until auth is off or a server signs the conversation.
An ID the key can't open (a docs sample, another account's) is skipped, and everything else gets the usual test request.
Links use the residency's app host (eu.residency.elevenlabs.io etc.), and the global app for any other saved value, as the API does.
Bumps the version to 1.9.0, since 1.8.0 is out. #175 still says 1.7.2 and will need a bump when it's rebased.
Testing
cargo test: everything passes (onboard integration 28, workflow unit 246). New or changed:
a plain site with only the widget ends on done with both links and no load_key, both from check and right after sign-in
allowlisted and private agents get their page; a private agent behind the widget alone says what to change
a 404 (with a body) and a stand-in ID get the test request; a page without the widget still gets write_code
at most 3 lookups, and only 1 when the key can't read agents; a TTS app makes none
the widget from npm in a Vite app, and @elevenlabs/react in Next.js with the ID in .env.local, both end on the agent
only code that reads the key has to load it; the ID matcher and its order; residency hosts
an agent ID in the key's env file counts even outside the app (a monorepo's root .env.local) or under another --env-path name, and comes before agents in the project's other env files (.env.test etc.)
Dropping the non-2xx skip or the 401 stop makes these tests fail.
Not run end to end with a real coding agent and sign-in yet.
This only searches for agent_, but existing agents can also have unprefixed 20-character IDs—for example, J3Pbu5gP6NNKBscdCdwB, returned by the create/list fixtures in wiremock/wire-test-cases.json. Such an ID in a widget or env file produces no candidates, so check still offers a TTS request instead of the agent links, even when the key can open it. Please also recognize legacy IDs in explicit agent-ID fields and add a regression case.
The reason will be displayed to describe this comment to others. Learn more.
🔵 Needs a closer look
Unrecognized saved residency values use the global API but generate unsupported residency-domain links, leaving successful agent lookups with unusable links.
No open issues 🎉
1 previously missed issue
In code that hasn't changed since last review
Fall back to sign-in origin for unsupported residency values
cli/elevenlabs/workflow/onboard/check.rs:231
An unrecognized saved residency such as euu-residency still uses the global API via settings::base_url_for, but this branch generates links on euu.residency.elevenlabs.io. A successful agent lookup therefore ends on done with unusable links. Restrict this branch to supported residency values so unknown values fall back to the sign-in origin, matching the API routing behavior.
bitpshr
changed the title
feat: onboard ends a voice agent project on a link to talk to the agent (1.9.0)
fix: onboard counts a page with the agent widget as set up (1.8.1)
Nov 3, 2026
bitpshr
changed the title
fix: onboard counts a page with the agent widget as set up (1.8.1)
feat: onboard ends a voice agent project on a link to talk to the agent (1.9.0)
Nov 3, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
When someone asks for a voice agent,
onboarddidn't know when it was done. A site that only embeds the agent widget never counted as wired, socheckkept asking for SDK code, and the flow always ended by offering a text-to-speech clip. This makes the agent case end the way you'd expect:<elevenlabs-convai>is wired, incheckand right after sign-in.@elevenlabs/react,@elevenlabs/client,@elevenlabs/react-native) and the widget packages connect without the key, so an app that only uses those isn't sent toload_key. A server SDK, or code that namesELEVENLABS_API_KEY, still is.checkends ondonewith a link to talk to it and its dashboard page, instead of the TTS clip:.env.example), thenagents.json, and stops at a 401/403.eu.residency.elevenlabs.ioetc.), and the global app for any other saved value, as the API does.Bumps the version to 1.9.0, since 1.8.0 is out. #175 still says 1.7.2 and will need a bump when it's rebased.
Testing
cargo test: everything passes (onboard integration 28, workflow unit 246). New or changed:donewith both links and noload_key, both fromcheckand right after sign-inwrite_code@elevenlabs/reactin Next.js with the ID in.env.local, both end on the agent.env.local) or under another--env-pathname, and comes before agents in the project's other env files (.env.testetc.)