All notable changes to pm, the PushMetrics command-line tool (pushmetrics-cli on PyPI). Newest first. Dates are the day the version reached PyPI. Upgrade with pipx upgrade pushmetrics-cli.

0.3.0 - Unreleased

Added

  • pm token create NAME --scope read makes a read-only token: it can read and query metrics views; SQL, runs and changes are refused. Without --scope, tokens have full access as before.
  • pm token create NAME --scope read checks that the server really made a read-only token. If it did not (a server older than read-only tokens), pm revokes the token at once, or, if that fails, prints its id and the pm token revoke command to run. Either way it prints no token and exits with status 1.
  • pm whoami shows the session's token_scope (full, read, or unknown on an older server), and pm token list has a SCOPE column.
  • When the server refuses a request because the token is read-only, pm adds a hint that tells an AI agent to stop and ask the person it works for instead of looking for another token.

Fixed

  • An API error whose body has Windows line endings, such as a proxy's error page, no longer ends each line with a stray space.

0.2.0 - 2026-11-12

Added

  • pm schedule lists, creates, updates, pauses, resumes and runs a report's schedules. pm schedule run delivers to all its destinations: it asks first in a terminal and needs --yes otherwise.
  • pm deliverability lists the email addresses the email provider blocks for this workspace and shows one address's history; admins can unblock an address.
  • pm config list shows PM_CLIENT among the environment overrides, and the cleaned-up value pm actually sends when it differs from what you set.

Fixed

  • Text from the server in tables and key: value output no longer carries terminal control characters, so it cannot change your terminal.
  • Multi-line text from the server, such as report YAML or a database comment, keeps its line breaks but loses other control characters.

0.1.1 - 2026-11-11

Added

  • PM_CLIENT tells PushMetrics which tool runs pm (for example ci or claude-code). pm sends it with every request as pm/<version> (client=<name>; py/<version>). It is not a secret and does not change what the token can do.
  • pm config list shows the config home, where pm keeps its configuration and tokens (config_home with --json), and lists PM_CONFIG_HOME with the environment overrides. When PM_CONFIG_HOME points somewhere other than the default, the Not logged in error also names the config home.

Changed

  • A request refused because the organization has no active subscription now says what to do: pm needs an active PushMetrics subscription for this workspace's organization. Start a trial or upgrade in the web app.
  • Help and login text name the token settings page by its new name, Settings > CLI & API.

Fixed

  • pm config set writes config.toml in one step, so an interrupted write cannot leave a broken file. A new config.toml is readable only by you, an existing one keeps its permissions, and a config.toml that is a symbolic link stays a link.
  • An unreadable or invalid config.toml gives an error that names the file and how to fix it, instead of a traceback.
  • pm help metrics-view no longer fails on Windows when its output is piped or redirected.

0.1.0 - 2026-10-16

Added

  • First release of pm, published on PyPI as pushmetrics-cli, for Python 3.9 or newer.
  • pm login --token logs in with a personal access token, from a hidden prompt or from stdin, and stores it in the operating system's credential store. PM_API_TOKEN works without storing anything and wins over a stored token. pm whoami shows who you are; pm logout forgets the token.
  • Command groups for reports and runs (pm report, pm run), report blocks (pm sql, pm chart, pm email, pm slack, pm sftp, pm tableau, pm slides, pm explore, pm metrics-view, pm block, pm saved-block), and the rest of the workspace (pm database, pm user, pm role, pm folder, pm token, pm workspace and more). pm help shows the map of every group.
  • --json on every command, before or after the action. Data goes to stdout, messages and errors to stderr. pm exits with 0 on success, 1 when a command fails and 2 when the command line is wrong.
  • Profiles for several workspaces: --profile <name>, pm config set and pm config list.