Repository navigation
feat(install): custom install path and no jq in the Linux curl installer - #1057
Merged
Merged
Conversation
install-cli.sh (served at get.livekit.io/cli) now installs on macOS as well as Linux, picking the darwin archive for Intel or Apple silicon. It no longer needs jq or sha256sum, which older macOS lacks, and creates /usr/local/bin when a fresh Mac doesn't have it. LK_INSTALL_PATH installs elsewhere. After installing, it runs `lk skills install --global --yes` when someone is watching (stdout is a terminal) or LK_INSTALL_SKILLS=1, and skips it in CI, as root, or with LK_INSTALL_SKILLS=0. A failure there doesn't fail the install. It also warns when another lk, such as Homebrew's, comes first on PATH. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This was referenced Oct 19, 2026
With LK_INSTALL_PATH=.../bin/, the PATH check compared .../bin//lk to the .../bin/lk that command -v reports and warned that lk shadows itself.
showBanner only checked that stderr is a terminal, so the install script's `lk skills install` step printed the banner mid-install: stderr is the user's terminal there even though stdin is the script. Coding agents that call lk hit the same thing. Gate it on SkipPrompts too (stdin isn't a terminal, or --yes), the signal the prompts already use. A person at a terminal still sees it on their next command.
…ent is found When lk detects no coding agent, the script told the user to run `lk skills install --global` to try again, which can't succeed. Say to run it once a coding agent is installed, which also covers a transient failure.
On Intel Macs Homebrew's prefix is /usr/local, so brew install livekit-cli puts a symlink at /usr/local/bin/lk, the script's default target. The mv replaced it with the binary silently: the PATH warning can't fire because command -v lk matches the install path, and the directory is user-writable so there's no sudo prompt. brew upgrade then fails with "Target already exists". This script only ever makes livekit-cli a symlink, never lk, so a symlink there is another package manager's: stop before the download and say to brew uninstall or set LK_INSTALL_PATH.
ShayneP
approved these changes
Oct 21, 2026
ShayneP
left a comment
Contributor
There was a problem hiding this comment.
Added 3 commits to fix some display + error message nits, and 1 commit to fix an issue w/ Intel Macs where you couldn't update.
Contributor
Author
|
Thanks @ShayneP for the fixes and the approval. We talked about this a bit in the DevEx sync, and we think Homebrew should stay the primary way to install on Mac, since you get signing, auto-updates and a clean uninstall with it. This PR keeps it that way: the README still leads with brew install livekit-cli, and the script is there as backup for Linux and Macs without Homebrew Per today's meeting, @rektdeckard, if you think Mac users should only install through Homebrew, I can drop macOS from the script and keep it Linux-only. |
…step Homebrew stays the way to install on macOS: it's signed, updates itself and uninstalls cleanly, and a script install would raise Gatekeeper questions for an unsigned binary. The skills offer moves to the CLI's first-run prompt, so the script, Homebrew and winget installs all behave the same. Keeps the parts that help on Linux: LK_INSTALL_PATH, no jq dependency, the guard against replacing another package manager's lk, and the PATH warning. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
rektdeckard
approved these changes
Oct 29, 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
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.
What
install-cli.sh(whatget.livekit.io/cliserves) stays Linux-only. On macOS it points to Homebrew, and on Windows to winget.LK_INSTALL_PATHinstalls somewhere other than/usr/local/bin, such as a user-level folder that needs nosudo.jq: the version comes from where/releases/latestredirects.lkthat's a symlink from another package manager, such as Homebrew on Linux.lkcomes first onPATH, or when the install folder isn't onPATH.lkskips the update banner under--yes, as it already does without a terminal, so scripts and coding agents don't see it.Why
This PR first added macOS support and a skills install step. After discussing it, the team kept Homebrew as the macOS path: it's signed, updates itself and uninstalls cleanly, and an unsigned binary installed by the script raises Gatekeeper questions. The skills offer lives in the CLI's first-run prompt instead (#1056), so the script, Homebrew and winget installs all behave the same, and
LK_NO_SKILLS_PROMPT=1turns it off. What's left here are the Linux improvements.get.livekit.io/cliredirects to this file onmain, so merging ships it immediately; there's no release step.How to verify
On a Linux machine or container, install into a temporary folder:
curl -sSL https://raw.githubusercontent.com/livekit/livekit-cli/jackdwyer/devx-843-curl-installer/install-cli.sh \ | LK_INSTALL_PATH=/tmp/lk-test/bin bash /tmp/lk-test/bin/lk --versionExpect the linux archive to download, pass the checksum, and print the latest version. On macOS, the script exits with the Homebrew instruction.
Tested in a
debian:12-slimcontainer with nojq: the default/usr/local/bininstall,LK_INSTALL_PATHwith a trailing slash, and the PATH warning when anotherlkcomes first. On macOS it exits with the Homebrew message.🤖 Generated with Claude Code