Skip to content

feat(install): support macOS and install skills in the curl installer - #1057

Open
JackNDwyer wants to merge 5 commits into
mainfrom
jackdwyer/devx-843-curl-installer
Open

JackNDwyer wants to merge 5 commits into
mainfrom
jackdwyer/devx-843-curl-installer

Conversation

@JackNDwyer

Copy link
Copy Markdown
Contributor

What

  • install-cli.sh (what get.livekit.io/cli serves) now installs on macOS as well as Linux, using the existing darwin release archives for Intel and Apple silicon.
  • It no longer needs jq or sha256sum, which macOS before 15 doesn't ship: the version comes from where /releases/latest redirects, and the checksum falls back to shasum -a 256.
  • On macOS it creates /usr/local/bin if a fresh Mac doesn't have it. LK_INSTALL_PATH installs somewhere else, such as a user-level folder that needs no sudo.
  • After installing, it runs lk skills install --global --yes, which installs LiveKit's skills and the Docs MCP server for the coding agents it finds. It runs when stdout is a terminal (under curl | bash, stdin is the script) or with LK_INSTALL_SKILLS=1, and is skipped in CI, as root, or with LK_INSTALL_SKILLS=0. A failure there is a warning, not a failed install.
  • It warns when another lk, usually Homebrew's, comes first on PATH, or when the install folder isn't on PATH.
  • Windows stays on winget; the script now says so instead of a generic error.

Why

This is the second half of DEVX-843: one command that installs the CLI, the Docs MCP server and the skills, so coding agents can build LiveKit agents from the start (DEVX-840). Mac users had only Homebrew, which can't run that step. The first half, a one-time offer in lk itself, is #1056.

get.livekit.io/cli redirects to this file on main, so merging ships it immediately; there's no release step.

How to verify

Without touching /usr/local/bin, run the branch's script into a temporary folder, with a test home that has a Claude Code folder:

T=$(mktemp -d); mkdir -p $T/home/.claude
curl -sSL https://raw.githubusercontent.com/livekit/livekit-cli/jackdwyer/devx-843-curl-installer/install-cli.sh \
  | HOME=$T/home LK_INSTALL_PATH=$T/bin bash

Expect the darwin (or linux) archive to download and pass the checksum, $T/bin/lk --version to print the latest version, and seven skills in $T/home/.claude/skills with the Docs MCP server added. With LK_INSTALL_SKILLS=0 or CI=1, no skills are installed.

What I tested on macOS 26 (Apple silicon): the full install with skills, the skip paths (no terminal, LK_INSTALL_SKILLS=0, CI=1), no coding agents (warning, exit 0), and the Homebrew PATH warning. With a stubbed uname, Linux x86_64, Linux aarch64 and Intel macOS each downloaded the right archive, passed the checksum and installed the right binary. Not tested: the default /usr/local/bin install with sudo, a real Linux machine, and shellcheck (Docker wasn't running locally; bash -n passes).

🤖 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

Copy link
Copy Markdown

CLA assistant check
Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you all sign our Contributor License Agreement before we can accept your contribution.
1 out of 2 committers have signed the CLA.

✅ ShayneP
❌ JackNDwyer
You have signed the CLA already but the status is still pending? Let us recheck it.

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.

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.

3 participants