JM Tech Power

⌨️ 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
Log in — opens your browser to click Authorize (works with Google/GitHub sign-in).
jm auth login --with-token
Log in by pasting a token from the API Tokens page.
jm auth login --password
Log in with username/email + password.
jm auth logout
Forget the stored token.
jm whoami
Show the logged-in user and storage usage.
jm account [--nickname N] [--bio B]
Show or update your account settings.
jm update [--check]
Update jm to the latest version (or just check).
jm readme | jm help
Print the full embedded documentation.

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). Projects publish immediately — there's no approval queue.

jm proj release clone <owner/name|id> [--dir D]
Download a project's source into a folder and write its jm.toml.
jm proj release checkout <project> <version> [--dir D]
Fetch a specific version's source into a directory.
jm proj release pull [--dir D]
Update a local checkout to the project's latest release source.
jm proj release readme <project> [--version V]
Print a project's README from its source.
jm proj release ls <project> [--version V]
List the files in a project's source.
jm proj release cat <project> <path> [--version V]
Print a source file to stdout.
jm proj list [--mine] [--search Q]
List your projects, or search published ones.
jm proj search <name>
Find projects by name.
jm proj release view <owner/name|id>
Show a project and its release history.
jm proj release releases <project>
List a project's releases.
jm proj release log <project> [-n N]
Show release history: short source hash, version tag, date and notes.
jm proj release diff <project> [<v1>] [<v2>] [--stat|--name-only]
Diff the browsable source between two releases (defaults to the latest two).
jm proj fork <owner/name|id> [--name NEW]
Fork a project into your account, copying its latest source.
jm proj forks <project>
List a project's forks.
jm proj stars <project>
List a project's stargazers.
jm proj pr-create <base> --from <fork>[@version] --title T [--body -]
Open a pull request: propose a fork's source to the base project.
jm proj pulls <base> [--state open|closed|merged]
List a project's pull requests.
jm proj pr <base> <number>
View a pull request and its source diff (base -> proposed).
jm proj pr-merge <base> <number>
Merge a pull request (base owner) — publishes the proposed source as a new release.
jm proj pr-close <base> <number>
Close a pull request.
jm proj init | add <path> | commit -m MSG (-a) | status | log | show [<ref>]
Native version control: a local .jm object store (blobs/trees/commits) with a staging area.
jm proj branch [NAME] | checkout <ref> | merge <branch> | rebase <upstream> [--continue|--abort]
Branches, a line-level 3-way merge (auto-merges disjoint edits), and rebase that pauses on conflict.
jm proj tag [NAME] | reset [--soft|--mixed|--hard] <ref> | revert <ref> | cherry-pick <ref>
Tag commits, move HEAD, undo a commit, or replay one onto HEAD.
jm proj stash [pop|list|drop] | rm <path> | mv <src> <dst> | blame <path> | diff [<a>] [<b>]
Shelve work (untracked included), remove/rename files, line-by-line authorship, and diffs.
jm proj clone <project> | push | fetch | pull
Sync commits/branches with the project's server-side object store (pull = fetch + merge).
jm proj install <owner/name|id> [-y] [--run FILE] [--download-only]
Download a project's latest release and install it for your OS (.deb/.rpm/.AppImage/.pkg/.dmg/.exe/.msi; archives are extracted, then a dev-declared installer or --run FILE is run). Asks before running; -y skips.
jm proj installed
List the projects jm has installed on this machine.
jm proj update [-y] [--check]
Upgrade every installed project to its latest version (--check just lists).
jm proj uninstall <owner/name|id> [--keep-files]
Uninstall from disk and untrack it. --keep-files only untracks.
jm proj visibility <project> <public|private>
Make a project public or private.
jm proj delete <id>
Delete a project with its releases, source and files.

Social

Stars, watching and issues — the collaborative surface. Agents can poll their inbox as an event bus.

jm proj star <project>
Star a project.
jm proj unstar <project>
Remove your star.
jm proj watch <project> [--level releases|all]
Watch a project for new releases (or --level all for all activity).
jm proj unwatch <project>
Stop watching a project.
jm proj issues <project> [--state open|closed|all]
List a project's issues.
jm proj issue <project> <number>
View an issue and its comments.
jm proj issue-create <project> --title T [--body -]
Open an issue (body from --body or piped stdin).
jm proj issue-comment <project> <number> [--body -]
Comment on an issue.
jm proj issue-close <project> <number>
Close an issue.
jm proj issue-reopen <project> <number>
Reopen an issue.
jm notifications [--unread] [--json]
Your inbox — new releases of watched projects, plus issues and replies. Alias: jm inbox. Use --json for agents.

Articles

jm articles list [--mine] [--search Q] [--category C]
List articles.
jm article view <id> [--raw]
Show an article (stripped text, or --raw HTML).
jm article create --title T --category C (--content "..." | --file body.html | stdin) [--summary ...] [--tags a,b] [--draft]
Create an article; --draft keeps it unpublished.
jm article edit <id> [--title ...] [--content ... | --file ...] [--tags ...] [--publish | --unpublish]
Update an article or toggle its publish state.
jm article delete <id>
Delete an article.

JMDrive (files)

jm drive ls [folder_id]
List files/folders (root by default).
jm drive upload PATH... [--folder ID] [--public]
Upload file(s); --public prints a share link.
jm drive mkdir NAME [--parent ID] [--public]
Create a folder.
jm drive download <id> [-o out]
Download a file (a folder downloads as a zip).
jm drive share <id> [--password P] [--limit N]
Make a file/folder public and print its link.
jm drive rm <id>
Delete a file or folder.

Chat

jm chat groups
List your chat groups.
jm chat read (--with USER_ID | --group ID) [--limit N]
Read a conversation.
jm chat send "message" (--to USERNAME | --group ID)
Send a direct or group message.

Tokens

jm token list
List your active API tokens.
jm token create [--name N]
Create a token (printed once).
jm token revoke <id>
Revoke a token.

Admin (official account)

jm admin stats
Site stats (users, projects, articles).
jm admin apps
List all projects with their status.
jm admin delete <id>
Delete a project.
jm admin users
List all users.

Search

jm search <query> [--web] [--limit N]
JM Search — apps, articles and people (or the crawled web index with --web).

Direct Install (devices)

jm link [--name N]
Run this machine as a device; it installs apps on demand from the website's Direct Install button (Ctrl-C to stop).
jm devices
List your linked devices.
jm unlink <id>
Remove a linked device.
jm service install | uninstall | status
Run `jm link` as a background service (systemd/launchd/Task Scheduler) so it starts at login/boot.

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

# projects are created and releases published on the website ("Upload files" / "Draft a new release")
jm proj release clone someone/quickfire      # download a published project's browsable source
jm proj release log someone/quickfire        # release history: hash, version, date, notes

jm proj install someone/quickfire            # install a project by owner/name

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 →