Conversation
`lk skills install|list|update|remove` installs the skills from livekit/agent-skills into coding agents (Claude Code, Codex, Cursor, Copilot, Gemini CLI, OpenCode, Windsurf, Amp, Cline, Goose) and adds the LiveKit Docs MCP server to their configs. - Fetches the latest main as a tarball; no git or Node required. - Copies (never symlinks) into .agents/skills plus agent-specific dirs. - Writes the same skills-lock.json / ~/.agents/.skill-lock.json that `npx skills` and `gh skill` use, with byte-identical hashes, so the tools interoperate. - Never overwrites local edits without --force; removes skills LiveKit stops publishing; replaces untracked LiveKit skills (e.g. copies committed to starter templates) after confirming. - Edits MCP configs (JSON/JSONC/TOML) in place, preserving formatting and comments, and never replaces an existing livekit-docs entry. `lk agent init` and `lk app create` offer to install skills into new agent projects (--skills to control).
lk agent init / lk app create now show the agent multi-select (detected agents preselected, none to skip) instead of a yes/no, since detection only means a config directory exists. Docs MCP results print as a single line; paths remain in --json and lk skills list.
3 tasks
The skills are for building agents, and lk app create is on its way out.
bcherry
marked this pull request as ready for review
September 24, 2026 04:19
Contributor
|
Demo of lk-skills.mp4 |
…-skills-commands-5833c9 # Conflicts: # autocomplete/fish_autocomplete
Contributor
|
lk skills remove deletes edited skills without saying so. You can see this in the demo, and it's in the code (skills.go#L808-L880). update protects edited skills, but remove lists them in its confirmation like every other folder. |
Like install and update, lk skills remove now leaves skills with local edits in place and names them in a warning; --force removes them too. The confirmation marks untracked copies, and a skill whose edited copy is kept stays in the lock file.
Contributor
Author
|
@u9g great catch, fixed |
lk never used metadata.version to decide anything, since state comes from content hashes, so stop showing it in output, lk skills list, and --json. Skills that still carry the field are unaffected.
3 tasks
…-skills-commands-5833c9 # Conflicts: # autocomplete/fish_autocomplete
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.
Adds
lk skills install|list|update|remove, which installs the skills from livekit/agent-skills into coding agents and adds the LiveKit Docs MCP server to their configs. Also:lk agent initoffers to install skills into new agent projects, replacing the copies the starters used to commit.How it works
livekit/agent-skillsmain, fetched as a tarball from codeload. No git or Node needed. A hidden--refflag installs from a branch, for trying skill PRs before they merge.--agentoverrides that, and interactive runs pick from a multi-select with detected agents preselected. Skill paths follow thenpx skillstable..agents/skillsshare one copy; Claude Code, Windsurf and Goose get their own.skills-lock.json(project) and~/.agents/.skill-lock.json(global) thatnpx skillsandgh skilluse. Hashes are byte-identical to whatnpx skillscomputes, and the tree hash matches GitHub's folder SHA, so the three tools can manage each other's installs.--force.-y).livekit-docsentry is never replaced. For user-scope Claude Code it usesclaude mcp addwhenclaudeis on PATH. Amp, Cline and Goose get manual setup instructions.lk agent initshows the agent picker (detected agents preselected, none to skip) to install skills into the new project. Without a terminal it installs for detected agents;--skills=falseskips.lk app createis unchanged.New dependency:
github.com/tailscale/hujson, for editing JSON/JSONC without reformatting.Testing
pkg/skillsfor archive parsing, hashing against vectors generated with Node'slocaleCompareandgit write-tree, lock round-trips, install states, and MCP config edits. Command-level tests incmd/lk/skills_test.go.$HOME:lk skills installover an existingnpx skillsinstall leftskills-lock.jsonunchanged.~/.claude.jsonfallback whenclaudeisn't on PATH.agent-starter-python:update --ref bcherry/skills-refreshswapped the untrackedlivekit-agentscopies for the new skills.Related
livekit/internal-actions/.github/workflows/sync.yml. It still lists both starters (andlivekit/cloud-api-server) and a hardcodedSKILLS=(livekit-agents livekit-simulations), which needs updating for the Replace the two skills with seven smaller ones, add evals, and drop the downstream sync agent-skills#10 renames.