@liminal-machines/cli
v1.5.0
Published
Limion plugin client — skill sync, share-time transcript upload, MCP install, and component sync for Claude Code and Cursor.
Downloads
1,065
Maintainers
Readme
@liminal-machines/cli
The cross-platform Limion plugin client for Claude Code and Cursor. It syncs your team's skills, uploads prototype sessions when you share, registers the Limion MCP server, and pulls/pushes component libraries — on macOS, Linux, and native Windows (it replaces the old bash + python3 hook scripts, which were mac/Linux-only).
Requirements
- Node.js ≥ 22
Install
The Limion web app gives you a one-line install command, prefilled with your key, that looks like:
npm install -g @liminal-machines/cli && limion install --key lmn_… --backend https://… --client claudelimion install registers the (remote) Limion MCP server, writes your
credentials, wires the skill-sync hook, and primes a first sync. Re-running it
is safe — it replaces prior Limion entries (including any old bash-script hooks
and pre-1.3.0 transcript-forward hooks) idempotently.
Use --client cursor for Cursor, or --client both to wire whichever clients
are installed.
What it does
| Command | Purpose | How it runs |
| --- | --- | --- |
| limion sync | Materialize all accessible team/product skills into ~/.claude/skills | SessionStart hook |
| limion sessions | Upload the session transcripts behind a prototype (secrets redacted first) | invoked by the share skill at share time |
| limion components pull\|push | Pull or publish a team component library | invoked by the component-library skills |
| limion install / uninstall | Set up or cleanly remove the MCP server, hooks, and credentials | manual |
| limion doctor | Diagnose Node version, credentials, backend reachability, and hook wiring | manual |
Privacy: transcripts leave your machine only when you share a prototype. The share flow shows you which sessions it will attach, uploads them with secrets redacted on your go, and nothing is captured in the background — there are no turn-boundary hooks.
Uninstall
limion uninstall # remove MCP + hook entries (both clients)
limion uninstall --purge # also delete the local data dir (credentials, sync state)
limion uninstall --skills # also remove synced skillsDevelopment
This package lives in the liminal monorepo
under cli/. It is a standalone pnpm/TypeScript package (ESM, Node ≥ 22, zero
runtime dependencies).
pnpm install
pnpm test:run # vitest
pnpm typecheck # tsc --noEmit
pnpm build # tsc -> dist/Layout: src/bin/limion.ts (router), src/commands/* (one file per
subcommand), src/lib/* (the shared, tested core — config, paths, the
Claude-vs-Cursor client abstraction, the authed HTTP client, and the
agent-surfaced notice envelopes).
Testing the CLI/skills against a local dev backend
The CLI has no baked-in environment — it authenticates against whatever
backendUrl + apiKey live in its config, and limion sync pulls skills from
that backend's /api/skills/bundle. So "test against dev" means running the
CLI with a dev key pointed at your local backend (http://localhost:8000).
The trap: the config lives at one default path, and the share skill invokes the
bare limion binary with no flags — so a naive dev setup either clobbers your
prod credentials or, worse, leaves skill-driven uploads (limion sessions,
limion screenshots) silently reading the prod key against the dev backend
(a 403 on team-scoped uploads). The fix is an isolated dev home plus
launching Claude Code with it, so nothing about prod is ever touched.
Two pnpm scripts (scripts/dev-install.mjs) handle the install side:
pnpm --dir cli dev:install --key lmn_your_dev_key # build + install into
# ~/.config/limion-dev,
# generate mcp.json, run doctor
pnpm --dir cli dev:uninstall # remove it (incl. synced skills)dev:install writes an isolated ~/.config/limion-dev/ (its own config.json
mcp.json), leaving your real~/…/limion/config.jsonuntouched. Flags:--backend URL(defaulthttp://localhost:8000),--home DIR. Then launch a fully-dev Claude Code session — CLI and MCP server on dev — viaLIMION_HOME+--mcp-config. Add this to your shell profile so it's one word:
# dev session (CLI + MCP on localhost); plain `claude` stays on prod
limion-dev() { LIMION_HOME="$HOME/.config/limion-dev" claude --mcp-config "$HOME/.config/limion-dev/mcp.json" "$@"; }Notes:
~/.config/limion-dev/holds a livelmn_…key — it lives outside the repo and must never be committed. Onlyscripts/dev-install.mjsand this doc are checked in; they carry no secrets.- Skills sync into
~/.claude/skills, a path fixed by Claude Code and not isolated byLIMION_HOME. A dev install replaces them with the dev versions untilcli-dev-uninstall. - Overridable:
pnpm --dir cli dev:install --key … --backend http://localhost:9000 --home /some/dir.
