Global flags
These flags are accepted by every command that talks to the backend:Auth (OTP)
Terminal-only signup and login. No browser, no dashboard. Seecli/auth for the full flag reference and error-code table.
slideless auth signup-request
Email a 6-digit signup code to a brand-new address. Refuses (USER_ALREADY_HAS_ORGANIZATION) if the email already owns an organization.
slideless auth signup-complete
Verify the code; create user, organization, and a cko_ key; save it as the active profile. --first-name is required (stored as display name + used in onboarding emails); --last-name is optional. Without --company, the org defaults to "<first-name>'s workspace".
slideless auth login-request
Email a login code to an existing account. Returns USER_NOT_FOUND / USER_HAS_NO_ORGANIZATION if there’s nothing to log in to.
slideless auth login-complete
Verify the code; mint a fresh cko_ key for the existing organization; save it as the active profile.
Authentication
slideless login
Save an API key and verify it against the backend. Alias of slideless config set.
slideless whoami
Show the currently authenticated identity. Calls /verifyApiKey for fresh data; falls back to cached profile data on network error.
slideless verify
Focused identity check — prints ✓ API key valid and exits 0 on success, nonzero on failure. Convenient for CI pipelines and troubleshooting.
slideless use [name]
List saved profiles or switch the active one.
slideless logout [name]
Remove a profile. Without an argument, removes the active profile.
Presentations
Slideless v0.5 collapsed the CLI to eight verbs. Each does one thing:
The old
share <path>, update, revoke, and token add commands are gone.
slideless push [path]
Upload content — creates a new deck or updates an existing one based on whether slideless.json exists in the target folder.
The first successful push writes a
slideless.json at the deck root. That’s how the CLI knows the folder is a Slideless deck — don’t delete or edit this file. It’s added to the built-in ignore list so it never uploads.
JSON output (new):
slideless share <id> when you’re ready to publish.
slideless pull <presentationId> [path]
Download a presentation to a local folder. Writes slideless.json at the root so subsequent push commands update this presentation.
slideless share <presentationId>
Mint a public viewer URL. Owner-only. Replaces the old token add command.
slideless unshare <presentationId>
Revoke viewer URLs. The deck itself stays — you can mint new URLs later.
slideless invite <presentationId>
Invite a dev collaborator by email. Owner-only.
status=active). Otherwise the row is status=pending and auto-claims when she signs up. The invite email includes a CLI snippet and a dashboard link.
slideless uninvite <presentationId> <collaboratorId>
Revoke a dev collaborator. Symmetric with invite. Revocation is immediate.
slideless delete <presentationId>
Hard-delete a presentation. Removes the Firestore doc, every version, every asset, every collaborator row. Irreversible.
slideless share-email <presentationId>
Email an existing shared presentation to one or more recipients. Each recipient gets a unique named share link by default — the sender can then see per-recipient opens in the dashboard (or via slideless get).
JSON output (success):
failed[] contains per-recipient failures inside an otherwise-successful call — success: false only fires when zero emails could be attempted (auth, not-found, too-many-recipients, etc.).
Error codes specific to share-email:
See the share-via-email guide for worked examples.
slideless list
List every presentation you can access — decks you own and decks shared with you. Each row carries a role column (owner or dev).
slideless get <presentationId>
Show full metadata for a single presentation.
- For owners: versions, tokens, collaborators, view counts.
- For dev collaborators: a read-only view with a
role: 'dev'marker.
slideless pin <presentationId> <tokenId>
Change a share token’s version mode — pin it to a specific version or put it back on auto-follow-latest. Only the presentation owner can pin.
Recipients cannot change their own version — there is no query-param override. Use
slideless get <presentationId> to inspect every token’s current versionMode. See Versioning.
Marketplace
The marketplace is a public, npm-style catalog of remixable presentations. These verbs publish, browse, and remix listings:slideless publish
Publish the presentation linked to the current folder as a marketplace listing, pinned to its current immutable version. Run from inside a linked deck folder (one with slideless.json). Owner-only. The active key needs the marketplace:publish scope.
The listing is created
public. See the publishing guide.
slideless unpublish <slug>
Remove a listing from the marketplace. The underlying presentation is untouched. Owner-only.
unpublish prompts for confirmation before taking the listing down — mirroring slideless delete. Pass --yes to skip the prompt; it is required in --json / non-interactive mode, where there is no TTY to confirm on.
You must unpublish a listing before you can slideless delete the presentation behind it.
slideless remix <slug> [path]
Download a listing’s files into a fresh local folder. No API key required. The folder is written with no slideless.json — it is not linked to any presentation. Increments the listing’s public remix count.
remix writes a .slideless-remix.json marker recording the source slug, version, and title. The first slideless push from the folder reads that marker and stores the lineage on the new presentation permanently — so a listing you later publish shows “Remixed from <original>”. The marker is excluded from the uploaded deck; delete it before the first push if you want an uncredited copy.
To turn the remixed folder into your own deck, run slideless push from inside it — that first push creates a brand-new presentation you own. See the remixing guide.
slideless search [query]
Browse the public marketplace catalog. No API key required.
slideless listing get <slug>
Show full detail for one listing — README, tags, counters, file manifest. No API key required. Works for both public and unlisted listings.
starCount), remixes (remixCount), and views (viewCount). If the listing was published from a remixed deck, it shows “Remixed from <original>” with the source slug (remixedFromSlug). If other listings were remixed from it, it lists them under “Remixes of this” (the descendants from GET /listMarketplaceRemixes). See Marketplace › remix lineage.
slideless listing update <slug>
Edit a listing you own — metadata, visibility, or version pin. Owner-only.
slideless star <slug> / slideless unstar <slug>
Add or remove a star on a listing. A key is required (so stars are attributed to an account). Star count feeds slideless search --sort stars.
slideless stars
List the listings you’ve starred. Requires a key.
Config
slideless config show
List all saved profiles.
slideless config set
Save a profile. Same behaviour as slideless login.
slideless config clear
Remove config or a specific profile.
Error shape (--json)
Every command returns this shape on failure:
code values (share / presentations):
Additional codes for the OTP auth flow (
slideless auth ...):
Every OTP error includes a
nextAction string designed to be acted on programmatically (e.g. jq -r '.error.nextAction').