pltutil CLI
pltutil is the PLTcloud command line tool. It uploads files as a project
release and can trigger deployment and test plan execution on the PLTs in a
deployment group, or on a single PLT. Run it from a terminal, a
CI pipeline, or a coding agent.
See the release notes for all changes between versions.
Renamed from pltcloud
This tool was named pltcloud before v0.7.4. PLTcloud itself, the
PLTCLOUD_API_TOKEN environment variable, and the
PLTcloud GitHub Action keep
their names.
To migrate an existing script or CI pipeline to the current version:
Replace the
pltcloudcommand withpltutil.Install the
pltutilpackage. Packages are now namedpltutil_<VERSION>_<ARCH>.deb.Replace
-modelwith-pltmodeland-serialwith-pltserial.Replace
-wait-report <DURATION>with-wait-report -wait-timeout <DURATION>, and remove-report-poll.
Download
The current version is v0.7.5.
Package |
Platform |
|---|---|
Debian-based Linux, x86-64 |
|
Debian-based Linux, ARM64 |
Packages connect to the production PLTcloud environment. To install one:
$ sudo apt install ./pltutil_0.7.5_amd64.deb
macOS and Windows builds are not currently published for download.
Authentication
Select API Tokens from the drop-down menu under the user menu in PLTcloud, then select Add Release Token and copy the token.
pltutil reads the token from the PLTCLOUD_API_TOKEN environment
variable. The -t option also accepts a token, but the environment variable
keeps it out of your shell history and process list.
To check that the token is valid and grants access to a project, without uploading anything:
$ export PLTCLOUD_API_TOKEN=...
$ pltutil -p "${PROJECT_UUID}" -vvv
INFO[0000] PLTcloud upload tool
INFO[0000] Validating release..
INFO[0001] Project access validated
INFO[0001] "bfe34e54-b2f3-11e9-8f4c-06f2ca2a1f06" is a valid project UUID
The tool exits with a non-zero code if the token is invalid or does not grant access to the project, so this command also works as a CI pipeline check.
Usage
Upload a release
$ pltutil -p "${PROJECT_UUID}" -v "123" -f "fwdist/*"
Files can be specified with patterns such as **/prefix*,
grandparent/**/child?, **/parent/*, or ** (all files and directories,
recursively).
Deploy to a deployment group
Add -d to deploy the release to a deployment group.
$ export PLTCLOUD_API_TOKEN=...
$ pltutil -p "${PROJECT_UUID}" -d "${DPG_UUID}" -v "123" -f "fwdist/*"
INFO[0001] Uploading "fwdist/bento2-blue.hex"
INFO[0002] Uploading "fwdist/bento2-green.hex"
INFO[0002] Uploading "fwdist/bento_flash_blinky_test_blue_2026-07-15_01.yaml"
INFO[0003] Upload Details:
Release UUID: b1a86272-30c7-4812-a6ac-c42b7dde6031
Project UUID: bfe34e54-b2f3-11e9-8f4c-06f2ca2a1f06
Deployment Group ID: 956226f0-19d8-4a54-88e8-5cb88f4db9f9
Version: "123"
Auto Deploy: false
Repeat: false
Resume: false
Files:
- "bento2-blue.hex" (87 KiB)
- "bento2-green.hex" (87 KiB)
- "bento_flash_blinky_test_blue_2026-07-15_01.yaml" (2 KiB)
INFO[0003] Deployed release. Check for update on PLT
Auto-deploy with a timestamp-derived version
The -a option enables auto-deploy and triggers test plan execution on the PLTs
in the deployment group. The -utcDateVersion option generates a version based
on the current UTC date and time.
$ export PLTCLOUD_API_TOKEN=...
$ pltutil -p "${PROJECT_UUID}" -d "${DPG_UUID}" -utcDateVersion -a -f "fwdist/*"
INFO[0001] Uploading "fwdist/bento2-blue.hex"
INFO[0002] Uploading "fwdist/bento2-green.hex"
INFO[0003] Uploading "fwdist/bento_flash_blinky_test_blue_2026-07-15_01.yaml"
INFO[0003] Upload Details:
Release UUID: 636159d0-7291-4764-ad2c-4a0742941813
Project UUID: bfe34e54-b2f3-11e9-8f4c-06f2ca2a1f06
Deployment Group ID: 956226f0-19d8-4a54-88e8-5cb88f4db9f9
Version: "2026-10-23T08:30:42Z"
Auto Deploy: true
Repeat: false
Resume: false
Files:
- "bento2-blue.hex" (87 KiB)
- "bento2-green.hex" (87 KiB)
- "bento_flash_blinky_test_blue_2026-07-15_01.yaml" (2 KiB)
INFO[0003] Deployed release. Check for test report on PLTcloud or report connector
Deploy to one PLT
Use -pltserial and -pltmodel with -a to deploy to a single PLT instead
of a deployment group. Both options are required, and they cannot be combined with
-d. Serial numbers are zero-padded to 5 digits, so -pltserial 6 targets
serial number 00006.
$ pltutil -p "${PROJECT_UUID}" -pltserial 00006 -pltmodel plt-106 -v "123" -a -f basic.yaml
To clear the direct target, so the PLT falls back to its deployment group release:
$ pltutil -clear-plt -pltserial 00006 -pltmodel plt-106
INFO[0001] Cleared the direct release target of PLT 00006 (plt-106). It now falls back to its deployment group release.
Warning
Clearing a direct target can downgrade the PLT to an older deployment group release. The command does not ask for confirmation.
Clearing needs a valid API token, but no project UUID. If no PLT matches, or your account is not an Administrator or Manager in the PLT’s organization, the command reports the same error for both cases.
Wait for a test report
Use -wait-report with -a to wait for the first new test report on the
deployed release, print it, and exit. The wait gives up after -wait-timeout
(default 10 minutes). The -report-save-dir option also saves the report as JSON.
$ pltutil -p "${PROJECT_UUID}" -d "${DPG_UUID}" -utcDateVersion -a -wait-report -report-save-dir . -f basic.yaml
INFO[0001] Uploading "basic.yaml"
INFO[0002] Upload Details:
Release UUID: 825eee1a-42ca-4a42-8727-62f4d4b32bf7
Project UUID: bfe34e54-b2f3-11e9-8f4c-06f2ca2a1f06
Deployment Group ID: 956226f0-19d8-4a54-88e8-5cb88f4db9f9
Version: "2026-10-26T11:59:41Z"
Auto Deploy: true
Repeat: false
Resume: false
Files:
- "basic.yaml" (162 bytes)
INFO[0063] Saved test report to report-8f196758-07f1-43eb-9ce7-d257987efc0e.json
Test report 8f196758-07f1-43eb-9ce7-d257987efc0e: model=plt-106 serial=00006 pass_fail=PASS test_plan="Basic test plan"
With a deployment group, the first report from any PLT counts. With -pltserial
and -pltmodel, only reports from that PLT count. Add -vvv to see progress
messages during the wait.
Important
-wait-report exits with code 0 whenever it receives a report, including a
failing one. To act on the test result in a script, read pass_fail from the
output. A timeout exits with code 1, and an interrupt exits with code 130.
Note
Waiting for reports and single-PLT deployment require matching PLTcloud server support, which may not yet be enabled in the production environment.
Use with coding agents
The -jsonp option prints log lines and the -wait-report summary as JSON
objects, for use by coding agents and other tools. See also PLT AI Kit.
Command-line options
Option |
Description |
|---|---|
|
Auto deploy. Requires |
|
Clear the direct release target of the PLT given by |
|
Deployment group UUID. |
|
Release description. |
|
Add an arbitrary key to the test suite. Can be repeated. |
|
Files to upload. |
|
Output log lines and the |
|
Project UUID. |
|
Target PLT model. Used with |
|
Target PLT serial number. Used with |
|
Repeat runs on deployment. |
|
Report policy file (JSON or YAML). |
|
Save the test report as JSON in this directory. Requires |
|
API token. Prefer |
|
Catch runtime panics (default true). |
|
Upload timeout in minutes (default 20). |
|
Use the UTC date and time as the release version. |
|
Release version. |
|
Verbose output. |
|
Wait for the first new test report on the deployed release, then print it.
Requires |
|
How long |