Skip to Content
The CLI
last verified · 2026-07-16

The CLI

Lumis has two layers of commands, and the split is deliberate.

  • lumis <verb> — the deterministic layer. Plain scripts: same input, same output, no AI involved. Safe to run anytime, from any folder.
  • /lumis:<command> — the judgment layer. These run inside an agent session: the agent reads the current state, makes a decision under the platform’s rules, and finishes by recording what it did.

Rule of thumb: if it needs to think, it’s a slash command. If it just needs to run, it’s a verb.

Deterministic verbs

lumis status <project>
project: <project> open: 12 in progress: 3 in review: 2 done (30d): 8

One line, current funnel, no interpretation added.

CommandWhat it does
lumis install [--check|--force]bind this machine to the platform (see Set up a machine)
lumis uninstall [--check|--purge]remove what was installed on this machine
lumis doctor [--fix]what this machine has connected — repos, commands, agent CLIs — and repair what it safely can
lumis whereamiwhich project the current folder belongs to
lumis checkrun the platform’s own consistency checks
lumis lintcheck the platform’s rules and records for consistency issues
lumis metrics <project>a KPI snapshot: tickets, defects, code, cost
lumis registryprint every project this platform knows about
lumis status <project>a one-line ticket funnel for a project

Judgment commands

Installed once when you set up your machine, so they work from any repository — each command resolves the right platform and project on its own.

/lumis:next
Picked <PREFIX>-142 "add plus-tag routing to inbox intake" (Ready for Build). Reading spec... running... 4 files changed, tests passing. Stopped: no gate reached. Ticket moved to In Review. Event recorded.
CommandUse it to…
/lumis:statusget the current state of a project, or the whole platform
/lumis:plan <topic>turn an idea into a spec and a set of tickets
/lumis:nextrun the next ready ticket through one full cycle
/lumis:autorun several cycles unattended — still stops at every gate
/lumis:intaketriage incoming requests into tickets or answers
/lumis:bugturn a bug report into a reproduced, ticketed defect
/lumis:askask a question with the full history of the project behind the answer
/lumis:deciderecord a decision, with the options considered and the ruling
/lumis:onboardconnect a new or existing project (see Add a project)
/lumis:resumepick up exactly where the last session left off
/lumis:closeend a session cleanly: handoff notes, metrics, final commit
/lumis:helpexplain any command or rule

Smart resolution

Both layers are forgiving about arguments:

  • Where you are counts. Run lumis status (or /lumis:plan, /lumis:next, …) from inside a project’s repository and it already knows which project you mean.
  • Prefixes work. lumis status wo resolves to the one project starting with “wo” — if more than one matches, you get a list instead of a guess.
  • Tab-completion for verbs and project names is installed automatically when you set up your machine.

The contract every command honors

Whichever layer it runs in, every command follows the same rules:

  1. Pull first, announce presence. A session registers itself before it starts, so two people — or two agents — working at once can see each other.
  2. Path-scoped writes. Each ticket declares which paths it’s allowed to touch; a command can’t write outside that scope.
  3. No event, no cycle. Every run ends with a recorded event — what changed, which model, tokens, cost — so there’s always a receipt. This is what the loop is built on.
  4. Gates always stop. Deploys, spend, secrets, destructive changes, and locked decisions wait for a person, every time — even inside an unattended run.