Skip to main content

Install & first run

This is the easy on-ramp: install lmctl, make sure at least one AI provider is ready, and look around. In these docs, lmctl is the product/platform name and lmctl is the command you run locally.

Prerequisites​

  • Linux or WSL2. (macOS is untested; native Windows is unsupported.)
  • Node.js 24.15 or newer. lmctl uses Node's built-in SQLite, which is stable from Node 24.15.0.
  • At least one provider CLI, installed and authenticated (next section).

lmctl does not store provider API keys. Each provider authenticates through its own CLI and config directory; lmctl just drives them.

Install lmctl​

npm install -g @lmctl-ai/lmctl
lmctl --version

After npm install -g, the lmctl command is on your PATH.

Install & authenticate a provider​

A team member ("player") is backed by a native provider CLI. Install the ones you want and sign in with each tool's own flow — lmctl reads their existing sessions, it doesn't manage their credentials. Common players:

ProviderCLIAuthenticate
Claudeclaude (Claude Code)run claude and complete login
Codexcodexrun codex and complete login
GitHub Copilotcopilotsign in via the Copilot CLI
OpenCodeopencodeper-provider creds in ~/.config/opencode/opencode.json (see the sample)
Qwenqwenrun qwen and authenticate
Kimikimirun kimi and authenticate
Antigravityagyrun agy and sign in
GeminigeminiAPI/enterprise Google accounts only — personal-subscription users should use agy instead

You don't need all of them — one is enough to start. The OpenCode provider alone reaches almost any model (local Ollama or remote), so it's a good single-provider start. See Players & model diversity.

You don't run a setup command — lmctl detects a missing provider or credential at the moment it needs one (during seed or chat) and tells you exactly what to fix.

Look around​

Confirm the install and see what lmctl can resolve on this machine:

lmctl status

Before you seed a team member, this may show scope: workspace and identity: none, then list registered teams and recent activity. Inside a seeded member session, status switches to the team/SELF view: identity (<teamfile>:<alias>), teamfile path, member busy/idle state, recent delegation activity, and mailbox lanes. status does not take --project or --web.

See your provider sessions​

Once a provider CLI has been used (by you directly, or by lmctl), you can browse its sessions:

lmctl ls # list native provider sessions in scope
lmctl ls --runs # list recent managed executions instead
lmctl tail <session-id> --provider codex # print a session's messages
lmctl health <session-id> --provider codex # session state + token usage

lmctl ls is your "what's here?", lmctl tail is your "read it", and lmctl health is your "how big / what state". These work across every provider — one set of commands, whatever CLI produced the session.

When you later seed a teamfile with per-member model= values, verify the routing before assigning work:

lmctl health ./team.lmctl

The MODEL column should match the teamfile. Use @lmctl-ai/lmctl 0.1.151 or newer for model-routed teams; this page was checked against 0.1.218.

Where lmctl keeps state​

lmctl stores local state under ~/.lmctl/. User-facing environment variables are prefixed LMCTL_.

You now have enough setup for Baby steps, the gentlest path through sessions, teamfiles, and handoffs.