Skip to main content
Version: 2.4

tSM CLI

The tSM CLI (tsm) is a command-line tool for managing tSM configuration, packages, and deployments from a terminal, CI/CD pipeline, or automation script.

The CLI follows a topic-command pattern. Each top-level topic groups related commands:

tsm <topic> <command> [flags]

The CLI supports these topics:

TopicPurpose
authAuthenticate to tSM environments.
configManage CLI user preferences (output format, timeout, color).
packageCreate, configure, build, validate, diff, install packages.
changesetStory-level change tracking.

See also:


Installation

Download the latest release for your platform from the tSM Studio releases page and place it on your PATH:

# macOS / Linux
chmod +x tsm
sudo mv tsm /usr/local/bin/

# verify
tsm --version

Command overview

tsm auth login               Authenticate to a tSM environment and store credentials.
tsm auth list List saved environments.
tsm auth logout Remove stored credentials for an environment.

tsm config set Set a CLI user preference (e.g. output format, timeout).
tsm config get Display current CLI configuration.
tsm config list List all configuration values.

tsm package init Scaffold a new package (creates package.yaml and area structure).
tsm package add area Add an area definition to an existing package.yaml.
tsm package add dependency Add a dependency to an existing package.yaml.
tsm package set version Set or bump the version in package.yaml.
tsm package info Display resolved package.yaml details.

tsm package download Download environment configuration into a local package directory.
tsm package validate Validate a package against a target environment (dry-run).
tsm package diff Compare a package with the current environment state.
tsm package install Install a package into a target environment.
tsm package artifact Create an installation artifact with pre-computed diff.
tsm package publish Publish an artifact to a repository (Nexus, Harbor).

tsm package installed list List installed packages in an environment.
tsm package installed get Get details of a specific installed package.
tsm package installed items List items inside an installed package.

tsm changeset create Create a new Change Set linked to a story/task.
tsm changeset list List Change Sets.
tsm changeset show Display Change Set details and tracked items.
tsm changeset add Manually add an entity to a Change Set.
tsm changeset remove Remove an entity from a Change Set.
tsm changeset submit Submit a Change Set for review (OPEN → IN_REVIEW).
tsm changeset close Close a reviewed Change Set (IN_REVIEW → CLOSED).
tsm changeset abandon Abandon an open Change Set.

Authentication

tsm auth login

Authenticate to a tSM instance and store the credentials under an alias.

tsm auth login \
--url https://tsm.example.com \
--alias prod \
--user admin \
--password secret

The alias can then be used with --target-env on any command.

Flags

FlagRequiredDescription
--urlYesBase URL of the tSM instance.
--alias, -aYesShort name for this environment (e.g. dev, staging, prod).
--user, -uUsername for Basic authentication.
--passwordPassword for Basic authentication. Omit to be prompted interactively.
--tokenBearer token for OAuth / API-key flows (takes precedence over Basic).

Credentials are stored in ~/.tsm/credentials.json. The file is created with restricted permissions (600). See Configuration Reference for the full file schema.

Token-based example

tsm auth login \
--url https://tsm.example.com \
--alias prod \
--token eyJhbGciOiJSUzI1NiIs...

tsm auth list

List all saved environments.

tsm auth list
ALIAS   URL                             AUTH     DEFAULT
dev https://dev.tsm.example.com Basic
prod https://tsm.example.com Bearer ✓

tsm auth logout

Remove stored credentials for an environment.

tsm auth logout --alias staging

Configuration

tsm config set

Set a CLI user preference. Preferences are stored in ~/.tsm/config.json. See Configuration Reference for the full settings reference.

tsm config set output json
tsm config set default-env test # global default
tsm config set default-env test --project acme-bss # per-project override
KeyDescriptionValues
outputDefault output format.table, json, yaml.
timeoutHTTP request timeout in seconds.Integer (default: 300).
colorEnable or disable colored output.true, false.
pagerEnable or disable pager for long output.true, false.
default-envTarget environment alias.Any environment alias.

Use --project <name> to store a setting under the per-project section instead of the global default. Without --project, the value is written to the top-level (global) config.

tsm config get

Display one or all configuration values.

tsm config get output         # → json
tsm config list # show all

Global flags

These flags are available on every command and override configuration defaults:

FlagEnv variableDescription
--target-env, -eTSM_ENVEnvironment alias to use (overrides user default-env).
--urlTSM_URLBase URL (overrides the alias URL).
--userTSM_USERUsername for Basic auth (overrides stored credentials).
--passwordTSM_PASSWORDPassword for Basic auth.
--tokenTSM_TOKENBearer token (overrides stored credentials).
--output, -oOutput format: table (default), json, or yaml.
--verboseEnable verbose / debug logging.
--jsonShorthand for --output json.
--timeoutHTTP request timeout in seconds (default: 300).

Resolution order for target environment: explicit --target-env flag → TSM_ENV → per-project default-env → global default-env (both from ~/.tsm/config.json).

Environment variables override stored credentials; explicit flags override everything.


Package authoring commands

These commands work locally on package.yaml files. They do not call the server.

tsm package init

Scaffold a new package inside the current workspace.

Creates:

  • the package directory
  • a package.yaml with the provided values
  • one initial area
tsm package init \
--package-id AllConfig \
--name "All Configuration" \
--version 0.0.1 \
--path packages/AllConfig

Flags

FlagRequiredDescription
--package-idYesStable unique package identifier. Also used as the default directory name.
--nameYesHuman-readable package name.
--versionInitial version (default: 0.0.1).
--descriptionPackage description.
--owner-teamOwner team of the package.
--pathDirectory path (default: packages/<packageId>).
--area-idID of the first area to create (prompted interactively if omitted).
--area-pathPath of the first area (default: same as --area-id).
--config-typeConfigType code for the first area.
--include-subtreeInclude ConfigType subtree in the first area (default: true).

Example

tsm package init \
--package-id ordering-sdwan \
--name "Ordering / SD-WAN" \
--version 1.0.0 \
--owner-team SDWAN \
--path packages/ordering-sdwan \
--area-id sdwan-product \
--config-type cap.ordering.sdwan.product \
--include-subtree

This creates:

packages/ordering-sdwan/
package.yaml
sdwan-product/

With package.yaml:

packageId: ordering-sdwan
name: Ordering / SD-WAN
version: 1.0.0
ownerTeam: SDWAN

areas:
- id: sdwan-product
path: sdwan-product
configTypes:
- code: cap.ordering.sdwan.product
includeSubtree: true

policy:
managed: true
allowDelete: false
enforceDependencies: true

tsm package add area

Add a new area definition to an existing package.yaml.

tsm package add area \
--package-yaml packages/ordering-sdwan/package.yaml \
--area-id sdwan-fulfillment \
--description "SD-WAN-specific process and orchestration configuration." \
--config-type cap.ordering.sdwan.fulfillment \
--include-subtree

Flags

FlagRequiredDescription
--package-yamlYesPath to the package.yaml to modify.
--area-idYesStable area identifier.
--area-pathRelative area path (default: same as --area-id).
--descriptionArea description.
--config-typeYesConfigType code to add. Repeatable for multiple ConfigTypes.
--include-subtreeInclude ConfigType subtree (default: true).

The area directory is also created on disk if it does not exist.


tsm package add dependency

Add a dependency to an existing package.yaml.

tsm package add dependency \
--package-yaml packages/ordering-sdwan/package.yaml \
--dependency-id core-common \
--version-range ">=1.0.0 <2.0.0" \
--kind required

Flags

FlagRequiredDescription
--package-yamlYesPath to the package.yaml to modify.
--dependency-idYesPackage ID of the required dependency.
--version-rangeYesAllowed version range (e.g. >=1.0.0 <2.0.0).
--kindDependency kind: required (default) or optional.

tsm package set version

Set or bump the version in package.yaml.

# Set an explicit version
tsm package set version \
--package-yaml packages/AllConfig/package.yaml \
--version 1.2.0

# Bump using semver increment
tsm package set version \
--package-yaml packages/AllConfig/package.yaml \
--bump minor

Flags

FlagRequiredDescription
--package-yamlYesPath to the package.yaml to modify.
--versionExplicit version string to set (e.g. 1.2.0).
--bumpSemver component to increment: major, minor, or patch.

Either --version or --bump must be provided.


tsm package info

Display the resolved contents of a package.yaml.

tsm package info --package-yaml packages/AllConfig/package.yaml
Package:       AllConfig
Name: All Configuration
Version: 1.2.0
Owner: SolutionTeam
Description: Main package containing all business and project-specific configuration.

DEPENDENCIES
PACKAGE VERSION RANGE KIND
System >=0.0.2 <1.0.0 required

AREAS
ID PATH CONFIG TYPES SUBTREE
common common Common yes
crm crm CRM yes
catalog catalog Catalog yes
ordering ordering Ordering yes
ticketing ticketing Ticketing yes
other other Other yes

POLICY
managed: true allowDelete: false enforceDependencies: true

Package server commands

These commands call the tSM public API. They require authentication to a target environment.

By default, server commands work with a local package directory — the directory containing package.yaml and its downloaded content. The directory path is passed as a positional argument. A pre-built ZIP archive or artifact can be used instead by passing the --file flag.

tsm package download

Download the current environment configuration into a local package directory.

The command reads package.yaml from the given directory, sends it to the server, and downloads the matching configuration items organized by area and entity type. The downloaded content is extracted directly into the package directory.

tsm package download AllConfig

Flags

FlagRequiredDescription
(positional)YesPath to the local package directory containing package.yaml.
--outWrite output as a ZIP archive instead of extracting into the package directory.
--area-codeLimit download to a single area within the package.
--from-timestampDownload only items modified after this ISO-8601 timestamp (e.g. 2025-06-01T00:00:00Z).
--entity-typesComma-separated list of entity types to include (e.g. Form,Process,Script). If omitted, all types are used.
--changesetDownload only items tracked by the given Change Set code (e.g. US-1234).

Examples

Download a full package into the local directory:

tsm package download AllConfig

Download as a ZIP archive instead:

tsm package download AllConfig --out AllConfig-1.0.0.zip

Download only changes since a timestamp:

tsm package download AllConfig \
--from-timestamp 2025-11-01T00:00:00Z

Download only specific entity types from one area:

tsm package download SDWAN \
--area-code sdwan-product \
--entity-types EntityCatalogSpecification,Characteristic

Download only items tracked by a Change Set:

tsm package download SDWAN --changeset US-1234

tsm package validate

Validate a package with dry-run semantics. No changes are made to the target environment.

The CLI packages the local directory into an archive, sends it to the server, which parses it, resolves dependencies, and reports any structural or compatibility issues.

tsm package validate AllConfig

Flags

FlagRequiredDescription
(positional)Path to the local package directory containing package.yaml and content. Required unless --file is used.
--fileUse a pre-built ZIP archive instead of the local package directory.
--area-codeValidate only a specific area within the package.
--entity-typesComma-separated list of entity types to validate (e.g. Form,Process). If omitted, all types are validated.

Example output

Validation result: PASSED
Package: AllConfig 1.0.0
Items: 142
Warnings: 0
Errors: 0
Validation result: FAILED
Package: AllConfig 1.0.0
Items: 142
Warnings: 1
Errors: 2

ERRORS:
[1] Dependency not satisfied: System >=0.0.2 <1.0.0 (installed: none)
[2] Missing entity reference: Form/OrderEntry references Characteristic/BandwidthTier (not found)

WARNINGS:
[1] Entity Register/CommonStatuses already exists with different configType

tsm package diff

Compare a package with the current environment state and show what would change on install.

tsm package diff AllConfig

Flags

FlagRequiredDescription
(positional)Path to the local package directory containing package.yaml and content. Required unless --file is used.
--fileUse a pre-built ZIP archive instead of the local package directory.
--area-codeDiff only a specific area.
--entity-typesComma-separated list of entity types to diff. If omitted, all types are compared.

Example output

Diff: AllConfig 1.0.0 vs current environment

ADDED (3):
Form/SDWAN_SiteSetup
Characteristic/SiteRole
Process/SDWAN_OrderProvisioning

MODIFIED (2):
Form/OrderEntry [fields changed]
Register/CommonStatuses [values changed]

REMOVED (0):

UNCHANGED (137)

tsm package install

Install a package into the target environment and create an InstalledPackage record.

This is the primary deployment command. It validates the package, applies the configuration, and records the installation history.

tsm package install AllConfig

Flags

FlagRequiredDescription
(positional)Path to the local package directory containing package.yaml and content. Required unless --file is used.
--fileUse a pre-built ZIP archive instead of the local package directory.
--area-codeInstall only a specific area.
--entity-typesComma-separated list of entity types to install. If omitted, all types are installed.
--install-sourceInstallation source label (default: CLI).
--notesFree-text notes attached to the InstalledPackage record (e.g. ticket number or release description).
--dry-runIf set, equivalent to validate. No changes are applied.

Examples

Install with notes:

tsm package install AllConfig \
--notes "Release 1.0.0 — initial PROD deployment, ticket PROJ-1234"

Install only specific entity types:

tsm package install AllConfig \
--entity-types Form,Process \
--notes "Hotfix: form and process corrections"

Install from a pre-built ZIP archive:

tsm package install --file AllConfig-1.0.0.zip \
--notes "Release 1.0.0"

Example output

Install result: SUCCESS
Package: AllConfig 1.0.0
Installed items: 142
Install source: CLI
Notes: Release 1.0.0 — initial PROD deployment, ticket PROJ-1234
Installed ID: a3f8c2e1-7b4d-4e9a-b6c1-2d5f8a9e0b3c

tsm package artifact

Create an installation artifact — a self-contained ZIP archive containing only the items that differ from the target environment. The diff is pre-computed at artifact creation time.

Artifacts are written to the build/ directory by default.

tsm package artifact AllConfig --target-env prod

Flags

FlagRequiredDescription
(positional)YesPath to the local package directory containing package.yaml and content.
--target-envYesTarget environment to diff against.
--outOutput path for the artifact (default: build/<packageId>-<version>-<env>.zip).
--area-codeInclude only a specific area.
--entity-typesComma-separated list of entity types to include.
--branch-diffCompute diff from Git branch range instead of full content (e.g. main...feature/X).

Examples

Create an artifact with diff against production:

tsm package artifact AllConfig --target-env prod
Artifact: build/AllConfig-1.1.0-prod.zip

ADDED (1):
Form/SDWAN_SiteSetup

MODIFIED (2):
Form/OrderEntry [fields changed]
Process/OrderProvisioning [steps changed]

Total: 3 items (139 unchanged, excluded from artifact)

Create an artifact from a Git branch diff:

tsm package artifact AllConfig \
--branch-diff main...feature/ordering-improvements \
--target-env test

Create an artifact scoped to specific entity types:

tsm package artifact AllConfig --target-env prod \
--entity-types Form,Process

tsm package publish

Publish an installation artifact to a remote repository (Nexus, Harbor, or another configured registry).

tsm package publish build/AllConfig-1.1.0-prod.zip \
--repository nexus

Flags

FlagRequiredDescription
(positional)YesPath to the artifact ZIP file.
--repositoryYesTarget repository alias (configured in tsm-project.yaml or CLI config).
--notesRelease notes attached to the published artifact.

Example

tsm package publish build/AllConfig-1.1.0-prod.zip \
--repository nexus \
--notes "AllConfig 1.1.0 — ordering form improvements, PROJ-456"

tsm package installed list

List installed packages in the target environment.

tsm package installed list

Flags

FlagRequiredDescription
--pagePage number for paginated results (default: 0).
--sizePage size (default: 20).
--sortSort field and direction (e.g. installedAt,desc).
--filterFilter expression (e.g. packageId==AllConfig). Repeatable.

Example output

INSTALLED PACKAGES
ID PACKAGE VERSION INSTALLED AT SOURCE
a3f8c2e1-7b4d-4e9a-b6c1-2d5f8a9e0b3c AllConfig 1.0.0 2025-12-01T10:30:00Z CLI
b7e2d4f6-9a1c-4b8e-a3d5-6f0e2c7b1a4d System 0.0.2 2025-11-28T14:15:00Z CLI
c1a9b3e5-2d4f-4c8a-b6e0-7f3d5a1c9b2e System 0.0.1 2025-11-15T09:00:00Z API

tsm package installed get

Get details of a specific installed package by ID.

tsm package installed get a3f8c2e1-7b4d-4e9a-b6c1-2d5f8a9e0b3c

Flags

FlagRequiredDescription
(positional)YesInstalledPackage UUID.

Example output (JSON)

tsm package installed get a3f8c2e1-7b4d-4e9a-b6c1-2d5f8a9e0b3c --json
{
"id": "a3f8c2e1-7b4d-4e9a-b6c1-2d5f8a9e0b3c",
"packageId": "AllConfig",
"name": "All Configuration",
"version": "1.0.0",
"description": "Main package containing all business and project-specific configuration.",
"installedAt": "2025-12-01T10:30:00Z",
"installSource": "CLI",
"notes": "Release 1.0.0 — initial PROD deployment, ticket PROJ-1234",
"itemCount": 142
}

tsm package installed items

List items contained in an installed package.

tsm package installed items a3f8c2e1-7b4d-4e9a-b6c1-2d5f8a9e0b3c

Flags

FlagRequiredDescription
(positional)YesInstalledPackage UUID.
--pagePage number (default: 0).
--sizePage size (default: 50).
--filterFilter expression (e.g. entityType==Form). Repeatable.

Example output

INSTALLED PACKAGE ITEMS — AllConfig 1.0.0
ENTITY TYPE CODE NAME
EntityCatalogCategory SDWAN_Category SD-WAN Category
EntityCatalogSpecification SDWAN_Offer SD-WAN Offer
EntitySpecification SDWAN_Profile SD-WAN Profile
Characteristic AccessBandwidth Access Bandwidth
Characteristic SiteRole Site Role
Form SDWAN_SiteSetup SD-WAN Site Setup
Form OrderEntry Order Entry
Process SDWAN_OrderProvisioning SD-WAN Order Provisioning
Script SDWAN_EligibilityCheck SD-WAN Eligibility Check
Register CommonStatuses Common Statuses
... (142 total)

CI/CD integration

The CLI is designed for scripted and automated use. There are two approaches:

  • Direct install — commands work directly with the package directory. Simple, but the diff is computed at install time.
  • Artifact-based — create an artifact first (tsm package artifact), then publish and install it. Recommended for production pipelines because the diff is pre-computed and reviewable.

For artifact-based CI/CD examples, see Installation Artifacts.

The examples below show the direct-install pattern for simplicity.

GitLab CI example

stages:
- validate
- deploy

variables:
TSM_URL: https://tsm.example.com
# TSM_USER and TSM_PASSWORD set as CI/CD masked variables

validate-package:
stage: validate
script:
- tsm package validate AllConfig

deploy-prod:
stage: deploy
needs: [validate-package]
when: manual
environment:
name: production
script:
- tsm package diff AllConfig
- tsm package install AllConfig --notes "CI pipeline $CI_PIPELINE_ID — $CI_COMMIT_SHORT_SHA"

GitHub Actions example

name: Deploy package
on:
push:
tags:
- 'v*'

env:
TSM_URL: ${{ secrets.TSM_URL }}
TSM_TOKEN: ${{ secrets.TSM_TOKEN }}

jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- name: Validate
run: tsm package validate AllConfig

- name: Diff
run: tsm package diff AllConfig

- name: Install
run: |
tsm package install AllConfig \
--notes "GitHub Actions — ${{ github.ref_name }} — ${{ github.sha }}"

Shell script example

#!/usr/bin/env bash
set -euo pipefail

PACKAGE_DIR="AllConfig"

echo "==> Validating..."
tsm package validate "$PACKAGE_DIR"

echo "==> Diff against target..."
tsm package diff "$PACKAGE_DIR"

read -rp "Proceed with installation? [y/N] " confirm
if [[ "$confirm" =~ ^[Yy]$ ]]; then
tsm package install "$PACKAGE_DIR" --notes "Manual release $(date +%Y-%m-%d)"
echo "==> Installed successfully."
else
echo "==> Aborted."
fi

Typical workflow

A typical CLI workflow combines local authoring with server-side deployment:

1. Create the package

tsm package init \
--package-id AllConfig \
--name "All Configuration" \
--version 0.0.1 \
--path packages/AllConfig \
--area-id common --config-type Common --include-subtree

tsm package add area \
--package-yaml packages/AllConfig/package.yaml \
--area-id ordering --config-type Ordering --include-subtree

tsm package add dependency \
--package-yaml packages/AllConfig/package.yaml \
--dependency-id System --version-range ">=0.0.1 <1.0.0" --kind required

2. Download content from source environment

tsm auth login --url https://dev.tsm.example.com --alias dev
tsm package download AllConfig

3. Bump version

tsm package set version \
--package-yaml packages/AllConfig/package.yaml \
--bump minor

4. Validate against target environment

tsm auth login --url https://prod.tsm.example.com --alias prod
tsm package validate --target-env prod AllConfig

5. Review differences

tsm package diff --target-env prod AllConfig

6. Install

tsm package install --target-env prod AllConfig --notes "Release 0.1.0"

7. Verify

tsm package installed list --target-env prod --filter "packageId==AllConfig"

Exit codes

CodeMeaning
0Success.
1General error (network, auth, unexpected).
2Validation failed (errors found).
3Dependency not satisfied.
10Bad usage (missing flags, bad arguments).

Scripts can use exit codes to control pipeline flow:

tsm package validate AllConfig
if [ $? -eq 2 ]; then
echo "Package has validation errors, aborting."
exit 1
fi

Change Set commands

These commands manage Change Sets — story-level tracking units that sit on top of Configuration Packages. Change Sets track which entities were changed for a story, provide a scope for review, and maintain an audit trail.

For the full concept, see Change Sets.

tsm changeset create

Create a new Change Set linked to a user story or task.

tsm changeset create \
--code US-1234 \
--name "SD-WAN site setup form and provisioning" \
--branch feature/US-1234

Flags

FlagRequiredDescription
--codeYesShort identifier, typically matching the ticket (e.g. US-1234).
--nameYesHuman-readable description.
--branchGit branch this Change Set belongs to.
--user-groupOwner user group.

tsm changeset list

List Change Sets in the target environment.

tsm changeset list

Flags

FlagRequiredDescription
--statusFilter by status: OPEN, IN_REVIEW, CLOSED.
--ownerFilter by owner user.

Example output

CHANGE SETS
CODE NAME STATUS OWNER ITEMS
US-1234 SD-WAN site setup form and provisioning OPEN bob 4
US-5678 Revise common statuses and shared validation IN_REVIEW alice 3
US-4444 Catalog restructuring CLOSED carol 7

tsm changeset show

Display the contents and status of a Change Set.

tsm changeset show US-1234

Example output

Change Set: US-1234
Name: SD-WAN site setup form and provisioning
Status: OPEN
Owner: bob
Branch: feature/US-1234

ITEMS (4):
CHANGE ENTITY TYPE CODE CONFIG TYPE BASE VERSION
ADDED Form SDWAN_SiteSetup SDWAN.Ordering —
ADDED Characteristic SiteRole SDWAN.Ordering —
ADDED Process SDWAN_OrderProvisioning SDWAN.Provisioning —
MODIFIED Register SDWANStatuses SDWAN 2026-03-01T10:00:00Z

tsm changeset add

Manually add an entity to a Change Set.

tsm changeset add US-1234 \
--entity-type Characteristic \
--entity-code AccessBandwidth

Flags

FlagRequiredDescription
(positional)YesChange Set code.
--entity-typeYesEntity type.
--entity-codeYesEntity code.

tsm changeset remove

Remove an entity from a Change Set.

tsm changeset remove US-1234 \
--entity-type Register \
--entity-code SDWANStatuses

Flags

FlagRequiredDescription
(positional)YesChange Set code.
--entity-typeYesEntity type.
--entity-codeYesEntity code.

tsm changeset submit

Submit a Change Set for review. After submission, no further entity additions are allowed.

tsm changeset submit US-1234

The Change Set moves from OPEN to IN_REVIEW.


tsm changeset close

Close a reviewed Change Set. This archives the Change Set for audit purposes.

tsm changeset close US-1234

The Change Set moves from IN_REVIEW to CLOSED.


tsm changeset abandon

Abandon an open Change Set. Tracked entities are released.

tsm changeset abandon US-9999

A Change Set can be abandoned from OPEN or IN_REVIEW state.

For the full Change Set lifecycle, see Change Sets.


API mapping

Each server-side CLI command maps to a public API endpoint:

CommandHTTP MethodEndpoint
tsm package downloadPOST/api/v2/installable-packages/content
tsm package validatePOST/api/v2/installable-packages/validate
tsm package diffPOST/api/v2/installable-packages/diff
tsm package installPOST/api/v2/installable-packages/install
tsm package artifactLocal + POST /api/v2/installable-packages/diff
tsm package publishPUTRepository-specific (Nexus/Harbor API).
tsm package installed listGET/api/v2/installed-packages
tsm package installed getGET/api/v2/installed-packages/{id}
tsm package installed itemsGET/api/v2/installed-packages/{id}/items

Local commands (init, add area, add dependency, set version, info) operate only on package.yaml files and do not call the API.

For commands that accept a local package directory, the CLI internally packages the directory into a ZIP archive before sending it to the API. The download command downloads the ZIP archive from the API and extracts it into the local package directory.


Summary

The tSM CLI provides a complete command-line workflow for Configuration Packages and Change Sets:

Authoring (local):

  • tsm package init — scaffold a new package
  • tsm package add area — add an area definition
  • tsm package add dependency — add a dependency
  • tsm package set version — set or bump version
  • tsm package info — display package details

Deployment (server):

  • tsm package download — download environment configuration into a local package directory
  • tsm package validate — dry-run check before installation
  • tsm package diff — see exactly what would change
  • tsm package install — deploy the package and record the installation
  • tsm package artifact — create an installation artifact with pre-computed diff
  • tsm package publish — publish an artifact to Nexus or Harbor

Change Sets (story-level tracking):

  • tsm changeset create — open a Change Set for a story
  • tsm changeset show — review tracked entities
  • tsm changeset submit — submit for review
  • tsm changeset close — close after review

Inspection (server):

  • tsm package installed list — list what is installed
  • tsm package installed get — get details of one installation
  • tsm package installed items — list items inside an installation

Key benefits:

  • local-directory-first workflow — commands operate on the package directory by default
  • story-level tracking through Change Sets
  • local + server workflow from package creation through deployment
  • repeatable deployments from CI/CD pipelines
  • named environments with stored credentials
  • full audit trail through InstalledPackage records