Command reference¶
Generated from --help, so it always matches the program. Every command accepts --json and --quiet.
Exit codes: 0 ok, 1 failure, 2 usage, 3 authentication or setup, 4 network or service, 5 not found.
wms access— Permissions: groups, per-user access, 2FA exemptions, sign-in limits and timeoutswms access check— Would this user be allowed? And whywms access export— Print the whole policy as JSON (a backup, or to edit and import)wms access groups— List, show, create, change and delete groupswms access groups create— A new, empty group (or a copy with --from)wms access groups delete— Delete a group (refused while users are in it)wms access groups list— Every group, its members and how many permissions it allowswms access groups restricted— Whether 2FA-exempt accounts may be in the group (it then may not hold admin-level permissions)wms access groups set— Allow, deny or clear a permission for a groupwms access groups show— A group's permission gridwms access import— Replace the policy with a JSON file (checked before anything is written)wms access perms— List every permissionwms access settings— Global timings: 2FA remember window, idle lock, maximum session, export expiry, download link lifetimewms access user— A user's groups, permission overrides, 2FA policy, sign-in limits and timeoutswms access user 2fa— The user's 2FA policy; exempt accounts may only be in restricted groupswms access user allow— Allow a permission for this user alonewms access user badge— Show or issue the user's barcode-badge sign-in token (never the literal username)wms access user channels— Which ways in the user may usewms access user dashboard— Also sign into the web dashboard with this account (yes/no)wms access user deny— Deny a permission for this user alone (beats every group)wms access user expires— The day the user's access endswms access user inherit— Clear a user override (the groups decide)wms access user list— Every user with a policy entrywms access user note— A note on the entry (what the account is for)wms access user remove— Delete the user's entry (they go back to their ModernWMS role's access)wms access user rename— Rename a numeric Picker/Checker login ID (the MC9090's keypad-only login means the ID is the permanent username)wms access user set-groups— Put a user in these groups (this also brings them under the policy)wms access user set-name— Set a display name shown alongside a numeric-login account's user ID (e.g. "7354 - Kieran Collins")wms access user set-password— Set a local sign-in password for solo mode (see docs/guides/solo-mode.md) — ignored by ModernWMS/Part-DB loginswms access user show— A user's entry and effective permissions (with the reason for each)wms access user timeouts— Per-user 2FA remember window, idle lock and maximum session ("global" clears one)wms attendance— Clock in/out and the rota — see docs/guides/assigned-work.mdwms attendance break-end— End a paid breakwms attendance break-start— Start a paid break (stays clocked in; pauses pick/check work while it's on)wms attendance card— Delay / No Work Available cards — admin-applied, suppress the idle-ticket nudge while activewms attendance card clear— Clear someone's active card, if anywms attendance card list— Everyone with a card on right nowwms attendance card set— Put a card on someone, closing any card they already havewms attendance card-scan— Scan a status card (today: the break card) to toggle it for yourselfwms attendance clock-in— Start a shiftwms attendance clock-out— End a shiftwms attendance gate— Turn the clock-in requirement on or off (default: show current state)wms attendance rota— Who's scheduled whenwms attendance rota clear— Remove someone's schedule for a daywms attendance rota override— Quick NS override: let someone work a day they're not on the rota for (default: today)wms attendance rota set— Schedule someone to work a day (updates any existing entry for that day)wms attendance rota show— Who's scheduled on a day (default: today)wms attendance status— Clocked in? Scheduled today?wms audit— Check the tamper-evident audit logwms audit head— Print the chain's newest hash, to keep a copy off this machinewms audit verify— Recompute the audit log's hash chain; exits non-zero at the first broken linewms backup— Back up ModernWMS's database via SQLite's online backup API (--encrypt to seal it with a passphrase)wms backup decrypt— Open an encrypted backup (never overwrites an existing file)wms bricklink— Live BrickLink lookups by number, prices and where-used (needs your API credentials)wms bricklink colors— BrickLink colour numberswms bricklink colors sync— Map Rebrickable colours to BrickLink's (one call; needed for prices by colour)wms bricklink configure— Enter the four BrickLink API values (hidden as you type) and test themwms bricklink item— Look an item up by its BrickLink numberwms bricklink price— BrickLink price guide: what it sold for (default) or is listed for (--stock)wms bricklink status— Show what is configured and today's call count (never the secrets)wms bricklink test— Check the credentials and the IP binding with one cheap callwms bricklink where-used— Which sets contain a part (BrickLink 'supersets')wms bricklink whoami— Show this server's public IP address — the one to register with BrickLinkwms doctor— Check the install: services, tokens, keys, clock, file permissions, audit chain and backupswms gateway— Telnet + web-terminal gateway (secondary to the CLI)wms gateway serve— Start the Telnet daemon and the ttyd-fronted web terminal togetherwms lego— Manage the local LEGO collection (sets, parts, Rebrickable lookups)wms lego achievements— Collection milestones and how close you are to eachwms lego add-part— Add or update an owned LEGO part: details from the catalog/Rebrickable, you give colour and quantitywms lego attach— Attach a scanned/photographed proof of the finished paper checklistwms lego backup— Back up your LEGO collection (sets, owned parts, history), without the re-downloadable catalogwms lego bag-add— Register and print another instance of a bag kind, once a set's default limit has been raisedwms lego bag-find— What a bag code belongs to — a lost bag found without its checker, or double-checking a labelwms lego bag-kind— The registered bag kinds (small, main, extra, and any added beyond those)wms lego bag-kind add— Register a new bag kind beyond small/main/extrawms lego bag-kind list— List every registered bag kindwms lego bag-labels— Print (or reprint) every bag label a set currently has — small, main, and extra once one existswms lego bag-pool— Reusable physical bags with their own stable code, assigned to whichever set currently needs onewms lego bag-pool add— Register a reusable bag under its own stable codewms lego bag-pool assign— Hand a reusable bag to a set's current check instead of printing a fresh codewms lego bag-pool list— List every reusable bag and what it's currently doingwms lego bag-pool release— Free a reusable bag back to available by hand (normally happens automatically when its check finishes)wms lego bag-size— Which bag a part goes in while picking/checking: easy-to-lose small parts, or the main bag (default)wms lego build— Which sets your loose parts could (nearly) build — from the offline catalog, no internet neededwms lego catalog— The offline copy of Rebrickable's catalog (parts, sets, minifigs, set contents)wms lego catalog refresh— Download the catalog (free, no key needed; at most once a day), or load it from --from-dirwms lego catalog status— Show what the offline catalog holds and how old it iswms lego check— Check a set's parts: everything is 'have' except what you list as missing or extrawms lego checks— Set check sessions across the collectionwms lego checks pending— Sets whose paper checklist is done but the CLI entry still isn'twms lego detail— Export a part's or set's page with its picture (a set includes its whole parts list)wms lego element-id— A part+colour's LEGO element id — show it, or set/correct it yourselfwms lego export— Write your collection (or one set's missing parts) for another toolwms lego help-sheet— Printable cheat sheet of the TUI/telnet key bindingswms lego history— What changed in your collection, who changed it, and from what to whatwms lego import— One-time import of legacy KC-LEGO-CLI JSON data into the local LEGO storewms lego import-parts— Import a parts list: a Rebrickable CSV or a BrickLink inventory XML (--dry-run shows the plan first)wms lego labels— Printable set labels (thermal 4x6/100x150/62mm/50x30/40x30, or A4/Letter sheets)wms lego low— List the parts that are below the minimum you setwms lego missing— What a set still needs, compared with the loose parts you hold (part + colour)wms lego missing-sheet— Combined label sheet of everything missing, across several checked setswms lego optional— Mark a part optional, so it never counts as missing (default: on for stickers)wms lego orders— Orders for missing parts: supplier, prices, shipping, invoice, tracking, receivedwms lego orders add-line— Add a part to an orderwms lego orders list— All orders (--status wanted|ordered|shipped|received|cancelled|open)wms lego orders new— Start an order (--from-set adds everything that set is short)wms lego orders show— An order and its lineswms lego orders status— Move an order along (received fills the sets it was for)wms lego paper-done— Mark a set's paper checklist as finished — the CLI entry is still to comewms lego parts-sheet— Printable barcode sheet of a set's parts, for the stock-check scanner modewms lego report— Printable reports: stock-take, parts lists, missing/extra parts, sets, orders, check historywms lego report archive— Browse and re-fetch previously generated reportswms lego report archive get— Mint a fresh share link (and QR) for an archived reportwms lego report archive list— List archived reports (yours, unless --all)wms lego report extra— Extra Parts: spares left over from completed set checkswms lego report history— Past stock checks, newest first — for one set, or across the collectionwms lego report missing— Missing Parts: what's still missing, for the given sets or every incomplete setwms lego report orders— Order List: every parts order, most recent firstwms lego report setlist— List of Sets on Collection: every set you own, no loose partswms lego report setparts— Set (ID) Parts Lists: one or more sets' full parts lists, side by sidewms lego report stocktake— Parts Stock-take: a blank printable checklist for counting a set by handwms lego reset— Clear every set, owned part and check/order/ticket history to start freshwms lego restore— Put your owned parts and sets back as they were at a snapshot (the present is saved first, so it can be undone)wms lego retirement— LEGO set retirement dates (from a community-maintained sheet — not Rebrickable, which has no such field)wms lego retirement import— Import retirement dates from a local CSV (the sheet's own column headers, or close to them)wms lego retirement list— Sets retiring soon, flagged with whether you own or are watching themwms lego retirement refresh— Fetch retirement dates from the configured (or --url) sheetwms lego search— Search parts, sets and minifigures — offline catalog first, live Rebrickable only if it has nothingwms lego search minifigs— Search minifigswms lego search parts— Search partswms lego search sets— Search setswms lego set-info— Where a set is kept and its condition (sealed, built, in pieces, displayed)wms lego set-min— Set the stock level below which a part counts as low (0 stops tracking it)wms lego set-photo— Attach a photo to a set — the box, the built model, anything worth keeping a picture ofwms lego set-photo-remove— Remove one attached set photo — the wrong one attached by mistake, saywms lego set-photos— List a set's attached photoswms lego share— A read-only page for someone without the CLI (a wishlist or your collection), viewable until it expireswms lego share collection— Share your full collection as a read-only pagewms lego share wishlist— Share your BrickLink watch list (wms lego watch) as a plain page — for family before a birthdaywms lego shopping— What a checked set is still missing, with BrickLink/BrickOwl prices, spares you hold and where to buywms lego small-bag-label— A label for the set's small-parts bag — the set number, name, and (if given) the bag's own barcodewms lego snapshots— List restore points (one is taken before the first change of each day)wms lego snapshots take— Take a snapshot nowwms lego spend— What missing parts have cost (parts + shipping) by set, supplier or monthwms lego stats— The collection at a glance: sets, pieces, colours, categories, low stockwms lego sync-parts— Push owned LEGO parts into Part-DB through its API (one-way; sets are never synced)wms lego today— Set of the Day: a set your loose parts nearly cover (90%+), the same for everyone todaywms lego value— What your collection is worth by BrickLink's average sold prices (always 'N of M priced')wms lego wanted— Write a BrickLink wanted list (XML) for a set's missing parts or your low-stock partswms lego watch— Be told (ntfy/webhook) when a part or set's BrickLink price falls to your limitwms lego watch add— Watch an itemwms lego watch check— Check every watch now (uses BrickLink calls) and show the ones at your limitwms lego watch list— Show your watches and what they last sawwms lego watch rm— Stop watchingwms menu— Quick launcher: pick a tool from a short list and run it (alias: q)wms menu list— List every tool with its id (for scripts and tools.json)wms menu run— Run one tool by id, without the listwms motd— Show or set the message of the day on the sign-on screenwms notify— Alerts to Discord, Slack, Telegram, Teams, email, Pushover, Gotify, WhatsApp (webhook) or ntfywms notify channels— List the channels and where each event goeswms notify route— Send an event only to these channels (all = every channel)wms notify test— Send a test alert to every channel (or --channel id) and report each resultwms plugin— Your own programs:wms fooruns wms-foo, and enabled plugins can react to eventswms plugin disable— Turn a plugin offwms plugin enable— Review a plugin's checksum and turn it onwms plugin list— Show the plugins in the folder and their statewms plugin new— Create an example plugin (not enabled) to start fromwms plugin run— Run an enabled plugin (same aswms <name> [args...])wms preflight— Audit the code, the files to be published and the live machine, and say GO or NO-GOwms publish— Push the committed code to GitHub as one new commit (after the preflight says GO)wms receive— Receive stock instantly via an ASN ticket, no login/menu neededwms sync— PartDB -> ModernWMS sync engine: status, trigger, or serve the REST APIwms sync serve— Run the REST API + /metrics and the background sync loop (blocks)wms sync set-password— Set the sync dashboard's REST API credentialswms sync status— Print the last sync run's statswms sync trigger— Run one sync cycle now and print the resultwms sys— Small system helpers used by the launcher and the login bannerwms sys audit— Show the newest audit log entries (-f to follow)wms sys banner— The one-line status shown at loginwms sys connect— How to connect from another machine (telnet or a browser)wms sys guide— A short card of the commands worth rememberingwms sys mobile-setup-qr— QR code for a new phone's first-time KC-Parts Pick setupwms sys pdf-editor— QR code / link for your Stirling-PDF instance, to touch up a generated PDF before printingwms sys status— System health: memory, disk, containers, gateway, backupswms tui— Launch the interactive 5250-style terminal (default when no subcommand is given)wms update— Check GitHub for a newer release, and install it (after verifying its SHA-256)wms users— Create/list/reset/delete users across both ModernWMS and Part-DBwms users 2fa— Manage TOTP two-factor authentication for TUI loginswms users 2fa disable— Remove TOTP 2FA from a userwms users 2fa enable— Enroll a user in TOTP 2FA (opt-in, off by default)wms users 2fa status— Show whether a user has TOTP 2FA enabledwms users 2fa unlock— Clear a 2FA lockout (5 wrong codes in a row lock the account for 5 minutes, doubling each time)wms users create— Create a user with a random temp password (default role: Picker)wms users delete— Delete a user from one system (asks first; --yes to skip the question)wms users list— List all users across both systemswms users reset— Reset a user's password to a new random temp passwordwms users set-password— Set a specific password (no forced change)wms users toggle— Enable or disable a user accountwms version— Print the version