One CLI for Lovstudio users: install skills and activate license keys.
npx -y lovstudio@latest --helpRun a command in a local app without changing directories first. The CLI runs
the app's own package manager — read from packageManager in its package.json
(npm / pnpm / yarn / bun), falling back to its lockfile (bun.lock → bun,
pnpm-lock.yaml → pnpm, yarn.lock → yarn, package-lock.json → npm), and
defaulting to pnpm when nothing indicates otherwise. The package manager is
added automatically, so don't prefix the command with it — write tauri dev,
not bun tauri dev:
npx lovstudio app vmux tauri dev
npx lovstudio app ataru tauri devFind an app and print its absolute path with the top-level find-app command:
npx lovstudio find-app oneshotfind-app <name> is a shortcut for app path <name> and uses the same app
discovery and remembered mappings described below.
The CLI searches app roots in LOVSTUDIO_APP_PATH, using the same ordered,
platform-specific delimiter as PATH. It then searches roots persisted by
app add. If the variable is unset, it also searches ~/lovstudio/coding and
~/projects. Apps are recognized by directory name, package.json.name, and
Tauri's productName.
If multiple directories share the same app name, the CLI asks you to choose
one and remembers that choice in ~/.lovstudio/apps.json. Later commands reuse
the remembered path without prompting again.
export LOVSTUDIO_APP_PATH="$HOME/work:$HOME/projects"
npx lovstudio find-app ataru
npx lovstudio app path ataruExplicit mappings override discovery and are stored in
~/.lovstudio/apps.json:
npx lovstudio app add ~/projects/lovcode
npx lovstudio app add ataru ~/projects/lovcode
npx lovstudio app path ataru
npx lovstudio app remove ataru
npx lovstudio app listAfter finding a valid project, app add asks whether to persist the project's
parent directory as a search root. Accepting lets sibling projects be discovered
automatically by later commands. The same ~/.lovstudio/apps.json file stores
both mappings and these roots, while remaining compatible with the previous
mapping-only format.
app add <path> infers the mapping name from the app's Tauri productName,
package.json.name, or directory name. Use app add <name> [path] to choose a
custom name; when its path is omitted, it defaults to the current directory.
The resolved command is executed as <package-manager> <command...> with the
app directory as its working directory.
Inside tmux, the running pane is automatically titled with the app and command
(for example, Lumos · dev) plus the current run log path. When a web service
prints a local or network HTTP(S) address, the CLI adds that address to the pane
title (for example, Lumos · dev:web · http://localhost:5173/). The CLI copies
the pane output to ~/.lovstudio/logs/apps/<app>/ without taking the app off its
TTY, and prints the absolute log path when the run begins. An existing
user-managed tmux pane pipe is preserved instead of replaced. Pane labels are
left-aligned and use a stable two-digit prefix such as
# 01: Lumos · dev · ~/.lovstudio/logs/apps/lumos/.... If pane borders are hidden, the CLI
enables the top border for the current tmux window and applies a readable
inactive-pane label, so every pane title remains visible without focusing it.
When the command exits, its pane title remains in place with the command and
completed run log path for later inspection; shell title escapes are disabled
for that pane so the returning prompt cannot overwrite it.
# Connect this device once to the same account used on lovstudio.ai
npx -y lovstudio@latest account connect
# Install a free Skill directly
npx -y lovstudio@latest skills add any2pdf
# Install a paid Skill (the command signs in, checks ownership, then downloads
# its declared encrypted bundle or public source)
npx -y lovstudio@latest skills add subtitle-freedom
# Install a skill + preflight its runtime deps, auto-installing any that are missing
npx -y lovstudio@latest skills add wxmp-cracker --with-deps
# Install all free Skills globally; add paid Skills individually
npx -y lovstudio@latest skills add skills -g -y
# List all skills in the catalog
npx -y lovstudio@latest skills listskills add reads the unified lovstudio/skills catalog before installation.
Free Skills install directly. Paid Skills must declare either an encrypted
bundle or an explicit public-source delivery. The CLI first refreshes and checks
an activated local license, including dynamic all access; a matching license
installs without Credits. Otherwise it connects this device to the user's
Lovstudio website account and checks that account's current ownership: a Skill
already purchased on the website installs immediately without another Credits
confirmation or purchase request. For a Skill not yet owned, the CLI confirms
the current Credits price and completes the redemption before downloading from
the declared source. Encrypted placeholders use the same account entitlement at
runtime, so no activation key is needed and protected plaintext is not written
to disk. Public-source paid Skills remain openly inspectable and install from
their catalog-declared repository after the same ownership check.
The command automatically installs the selected Skill's transitive Skill
dependencies from the catalog's depends_on graph. It then resolves each
installed Skill's executable dependencies: frontmatter and runs every check
command. With --with-deps, missing executable dependencies are installed
automatically via their declared install command.
Under the hood:
account connect→ browser device confirmation onlovstudio.ai; the shared session is stored owner-only under~/.lovstudio/for local Agent toolsskills add <name>→ resolves the product slug inskills.yaml, then passes its exactruntime_nametonpx -y skills@latest add lovstudio/skills --skill <runtime_name>(vercel-labs/skills)skills add skills→ resolves the unified catalog and passes every free Skill's exactruntime_namelicense *→uvx lovstudio-skill-helper *(pinned version)
lovstudio dns status # show registrar + public resolver + mode
lovstudio dns cf # switch registrar NS -> Cloudflare
lovstudio dns aliyun # switch registrar NS -> Aliyun (CN split-horizon)
lovstudio dns sync --apply # apply missing records to Aliyun
lovstudio license issue [options] # admin-only: mint license keysGODADDY_API_KEY # registrar API key
GODADDY_SECRET # registrar API secret
CLOUDFLARE_API_KEY # CF token with Zone.DNS read
ALI_AK # Aliyun AccessKey ID
ALI_SK # Aliyun AccessKey Secret
Proxy: honors HTTPS_PROXY / HTTP_PROXY (useful in mainland China).
# one-off (recommended; always uses the current entitlement behavior)
npx -y lovstudio@latest skills list
# or global
pnpm add -g lovstudio
lovstudio skills listRequires Node ≥18. license * commands additionally require uv.
On Windows, use the same commands from PowerShell; the CLI resolves npm's
npx.cmd shim internally.
- Create
src/commands/<name>/index.mjsexporting{ summary, run(args) }. - Register it in
src/index.mjsCOMMANDS. - That's it.
MIT