Repository navigation
Conversation
PaulAsjes
approved these changes
Oct 23, 2026
There was a problem hiding this comment.
🟢 Approval recommended
Static review identified no blocking issues in the focused reliability changes or regression coverage; tests were not executed during this review.
No open issues 🎉
What changed in this PR
This PR improves onboarding sign-in reliability and error reporting in the ElevenLabs CLI for version 1.7.2.
Changes:
- Extends onboarding approval waits to 30 minutes while leaving
auth loginat 5 minutes. - Retries token requests once after connection failures and distinguishes unreachable endpoints from other failures.
- Reports unverifiable clipboard keys separately from account mismatches and adds regression coverage.
| File | Description |
|---|---|
cli/elevenlabs/workflow/onboard/tests.rs |
Updates timeout expectations and tests key-verification outcomes. |
cli/elevenlabs/workflow/onboard/session.rs |
Extends the onboarding approval wait to 30 minutes. |
cli/elevenlabs/workflow/onboard/connect.rs |
Logs why clipboard-key verification failed. |
cli/elevenlabs/workflow/onboard/auth.rs |
Distinguishes unidentified accounts from confirmed account mismatches. |
cli/elevenlabs/workflow/loopback.rs |
Adds connection-failure retries, error classification, and regression tests. |
Cargo.toml |
Bumps the package version to 1.7.2. |
Cargo.lock |
Synchronizes the locked package version. |
Review effort: Balanced
…oken endpoint again - The sign-in waits 30 minutes instead of 5. Some people approve 10 to 30 minutes after the page opens, and those clicks reached nothing. - A token request that never connected is sent once more after 1 s; the code never got there, so it's still good. A request that connected is never sent again. When both tries fail to connect, the error page gets `temporarily_unavailable` instead of `server_error`. - A copied key that /v1/user refuses is "couldn't be checked", not "belongs to a different account": a key without user_read is refused there but works otherwise. The reason goes to the worker's log.
bitpshr
force-pushed
the
paul/onboard-1-7-2
branch
from
November 6, 2026 16:36
37fc273 to
5020e6c
Compare
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
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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
Since 1.7.1, the Windows misses we fixed are mostly gone. Three
onboardproblems are left in the sign-in, on every OS. This fixes them:onboardnow waits 30 minutes.auth loginstill waits 5.server_errorwithout a grant, at the same rate in every country. Many take about 11 s, which is the 10 s connect timeout, and a retry in a new tab usually works. When the token request never connected, the code wasn't used, so the CLI now tries once more after 1 s. A request that did connect is never sent again. If both tries fail to connect, the error page getstemporarily_unavailableinstead ofserver_error, so these failures can be counted apart from the rest./v1/userrefused the copied key (401 or 403), onboard told the agent the key "belongs to a different account". A key withoutuser_readis refused there but works for everything else. It's nowcould_not_verify("the key couldn't be checked, so it wasn't stored"). "A different account" is kept for a key that does open another account.It also makes the CLI say how each sign-in ended (this was #188). About 1 in 10 Authorize clicks still never ends with the CLI confirming the key, and the biggest group (about 45%) looks from the page like "the browser never reached the CLI", which could be a CLI the agent already stopped, a timeout, a port problem or something else. The CLI knows, but can't tell us: that sign-in never got a token.
timed-out,declined,port-busy,replaced,restarted,stopped(the worker went away before replying;stopped-afteronce the browser step was done),exchange-connect/-timeout/-refused/-server/-other(the token exchange now names its failure;exchange-connectis the one retried above), and for a sign-in that worked, how the key hand-off went (created,no-key,clipboard-error,wrong-account,unverified, ...).cli_prev=<outcome>andcli_prev_id, the first 16 hex characters of the SHA-256 of the earlier sign-in'sstate. The page computes the same hash from its own link, so a report can be matched to the click it explains; the state itself never leaves the machine.onboardrequests carry it too, as asignin/<outcome>User-Agent tag. About 42% of failed clicks are followed by a new approval page within a day and 56% by a signed-in CLI call, 74% by one or the other, so between the two most failures get explained, including people who give up and add a key by hand.cli_agenton the approval link andagent/<name>on every request.claude-code,claude-desktop,cursor,codex,gemini-cliorvscode. Claude Code'sCLAUDECODEandCLAUDE_CODE_ENTRYPOINTare checked first-hand; the others come from each tool's docs and are worth confirming in the eval harness.The reporting follows the 1.8.0 telemetry switch (
--telemetry off,ELEVENLABS_TELEMETRY=offorDO_NOT_TRACK=1turns it off), and only fixed words are sent. Outcomes older than a day aren't reported. The README and--telemetryhelp say what's sent. The page and the API keep the new values once elevenlabs/xi#58352 merges; until then they're just dropped.Rebased on main (1.9.0). No version bump: the SDK regeneration sets it now, so this goes out with the next release.
Testing
cargo test: all 3,345 tests pass on macOS, including the onboard integration tests. New or changed tests:connect), after the retry;refused) or closed without answering;sign-in-errororother, and every label fits the API's tag pattern ([a-z-]{1,16});stopped/stopped-afterwhen the worker left none, and nothing while one is running;restartedwhen this command stopped it), and a tampered file reports nothing;server_errorafter 20 ms.CLAUDECODE=1,onboard connect --no-browserprinted an approval link withcli_agent=claude-code,cli_prev=timed-outandcli_prev_id=ba7816bf8f01cfea.windows-latestrunner with real Chrome and Edge, on the retry and longer-wait code (before the rebase and the reporting were added):server_error. With only a 400 ms outage, both signed in, because Windows itself keeps retrying a refused connect for about 2 s.A side effect of the longer wait: a sign-in nobody approves keeps its link and its port for up to 30 minutes. Running
onboard connectagain in that project shows the same link, as it did within the 5 minutes before.