⌨️ jm CLI Docs
jm is the command-line tool for JM Tech Power — like git / gh.
Every command below runs from your terminal.
Looking for the REST API? →
Install
# Linux / macOS curl -fsSL https://jmtechpower.com/jm/install.sh | sudo bash # Windows (PowerShell) irm https://jmtechpower.com/jm/install.ps1 | iex
Needs Python 3. After installing, run jm auth login and click Authorize in the browser.
Manage tokens →
Setup & account
Install, then log in once. Config is saved in ~/.config/jm/config.json (override with the JM_HOST / JM_TOKEN env vars).
jm auth login
jm auth login --with-token
jm auth login --password
jm auth logout
jm whoami
jm account [--nickname N] [--bio B]
jm update [--check]
jm readme | jm help
Projects & releases
Projects are created and releases published on the website — create a project, then use Upload files for its browsable source and Draft a new release for installers and notes. The CLI covers native version control (jm proj <verb> — commit, branch, merge, …) plus reading and cloning published source (jm proj release <verb>). jm proj is the main command (jm project also works; jm apps is a deprecated alias). Point a working copy at a project with jm proj remote set <owner>/<name> and push; the project's Source tab then shows your commits rather than a release ZIP. Projects publish immediately — there's no approval queue.
jm proj clone <owner/name|id> [--dir D] [--version V]
jm proj release new <project> --version V [--file F] [--asset PATH[:PLATFORM/ARCH]]...
jm proj release clone <owner/name|id> [--dir D]
jm proj release checkout <project> <version> [--dir D]
jm proj release pull [--dir D]
jm proj release readme <project> [--version V]
jm proj release ls <project> [--version V]
jm proj release cat <project> <path> [--version V]
jm proj list [--mine] [--search Q]
jm proj search <name>
jm proj release view <owner/name|id>
jm proj release releases <project>
jm proj release log <project> [-n N]
jm proj release diff <project> [<v1>] [<v2>] [--stat|--name-only]
jm proj fork <owner/name|id> [--name NEW]
jm proj forks <project>
jm proj stars <project>
jm proj pr-create <base> --from <fork>[@version] --title T [--body -]
jm proj pulls <base> [--state open|closed|merged]
jm proj pr <base> <number>
jm proj pr-merge <base> <number>
jm proj pr-close <base> <number>
jm proj init | add <path> | commit -m MSG (-a) | status | log | show [<ref>]
jm proj branch [NAME] | checkout <ref> | merge <branch> | rebase <upstream> [--continue|--abort]
jm proj tag [NAME] | reset [--soft|--mixed|--hard] <ref> | revert <ref> | cherry-pick <ref>
jm proj stash [pop|list|drop] | rm <path> | mv <src> <dst> | blame <path> | diff [<a>] [<b>]
jm proj remote [set <owner/name>]
jm proj push | fetch | pull
jm proj install <owner/name|id> [-y] [--run FILE] [--download-only]
jm proj installed
jm proj update [-y] [--check]
jm proj uninstall <owner/name|id> [--keep-files]
jm proj visibility <project> <public|private>
jm proj delete <id>
Social
Stars, watching and issues — the collaborative surface. Agents can poll their inbox as an event bus.
jm proj star <project>
jm proj unstar <project>
jm proj watch <project> [--level releases|all]
jm proj unwatch <project>
jm proj issues <project> [--state open|closed|all]
jm proj issue <project> <number>
jm proj issue-create <project> --title T [--body -]
jm proj issue-comment <project> <number> [--body -]
jm proj issue-close <project> <number>
jm proj issue-reopen <project> <number>
jm notifications [--unread] [--json]
Articles
jm articles list [--mine] [--search Q] [--category C]
jm article view <id> [--raw]
jm article create --title T --category C (--content "..." | --file body.html | stdin) [--summary ...] [--tags a,b] [--draft]
jm article edit <id> [--title ...] [--content ... | --file ...] [--tags ...] [--publish | --unpublish]
jm article delete <id>
JMDrive (files)
jm drive ls [folder_id]
jm drive upload PATH... [--folder ID] [--public]
jm drive mkdir NAME [--parent ID] [--public]
jm drive download <id> [-o out]
jm drive share <id> [--password P] [--limit N]
jm drive rm <id>
Chat
jm chat groups
jm chat read (--with USER_ID | --group ID) [--limit N]
jm chat send "message" (--to USERNAME | --group ID)
Tokens
jm token list
jm token create [--name N]
jm token revoke <id>
Admin (official account)
jm admin stats
jm admin apps
jm admin delete <id>
jm admin users
Search
jm search <query> [--web] [--limit N]
Direct Install (devices)
Link a machine and the website can install projects onto it: open a project, press Direct install, pick the machine. The machine connects outbound, so this works from behind NAT with no ports opened. Run jm auth login on that machine first, as the user the service will run as. A linked machine gets its own token, scoped to its install jobs — it cannot read your Drive or publish projects — and unlinking revokes it. Manage your machines at /devices.
sudo jm service install | uninstall
jm service status
jm link [--name N]
jm devices
jm unlink <id>
Examples
jm proj init # start version control (a local .jm repo)
jm proj add . && jm proj commit -m "first cut" # stage + commit
jm proj branch feature && jm proj merge feature # branch + line-level 3-way merge
jm proj remote set someone/quickfire # name the remote: someone/quickfire.jmproj
jm proj push # push commits; the Source tab then shows them
jm proj clone someone/quickfire # get a project's code (repo, or its release source)
# projects are created and releases published on the website ("Upload files" / "Draft a new release")
jm proj release clone someone/quickfire --version 1.2.0 # a specific published source zip
jm proj release log someone/quickfire # release history: hash, version, date, notes
jm proj install someone/quickfire # install a project by owner/name
jm service install # let the website install onto this machine
echo "<p>Hello world</p>" | jm article create --title "Hi" --category News --draft
jm drive upload report.pdf --public # prints a https://.../d/<token> link
All of this is also available as a raw REST API — see the API Docs →