Skip to content

feat(install): custom install path and no jq in the Linux curl installer - #1057

Merged
JackNDwyer merged 6 commits into
mainfrom
jackdwyer/devx-843-curl-installer
Oct 29, 2026
Merged

JackNDwyer merged 6 commits into
mainfrom
jackdwyer/devx-843-curl-installer

Conversation

@JackNDwyer

@JackNDwyer JackNDwyer commented Oct 19, 2026 •

Copy link
Copy Markdown
Contributor

What

  • install-cli.sh (what get.livekit.io/cli serves) stays Linux-only. On macOS it points to Homebrew, and on Windows to winget.
  • LK_INSTALL_PATH installs somewhere other than /usr/local/bin, such as a user-level folder that needs no sudo.
  • It no longer needs jq: the version comes from where /releases/latest redirects.
  • It won't replace an lk that's a symlink from another package manager, such as Homebrew on Linux.
  • It warns when another lk comes first on PATH, or when the install folder isn't on PATH.
  • lk skips 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=1 turns it off. What's left here are the Linux improvements.

get.livekit.io/cli redirects to this file on main, 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 --version

Expect 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-slim container with no jq: the default /usr/local/bin install, LK_INSTALL_PATH with a trailing slash, and the PATH warning when another lk comes first. On macOS it exits with the Homebrew message.

🤖 Generated with Claude Code

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>
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.
@CLAassistant

CLAassistant commented Oct 21, 2026 •

Copy link
Copy Markdown

CLA assistant check
All committers have signed the CLA.

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 ShayneP left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

@JackNDwyer

JackNDwyer commented Oct 21, 2026 •

Copy link
Copy Markdown
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>
@JackNDwyer JackNDwyer changed the title feat(install): support macOS and install skills in the curl installer feat(install): custom install path and no jq in the Linux curl installer Oct 28, 2026
@JackNDwyer
JackNDwyer merged commit bbc5d04 into main Oct 29, 2026
25 of 26 checks passed
@JackNDwyer
JackNDwyer deleted the jackdwyer/devx-843-curl-installer branch October 29, 2026 20:34
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.

4 participants