Every Trigger.dev management endpoint, plus offline FTS over runs, span-cost rollups, and zombie-schedule detection no other tool gives you.
trigger-dev-pp-cli wraps the full v3 management API (47 endpoints across runs, schedules, deployments, batches, queues, waitpoints, env vars, and TRQL queries) and adds the cross-run aggregations the dashboard hides one click deep — LLM span cost rollups, recurring-failure patterns, real-time failure watch with desktop notifications, env-var diffs across environments, and substring grep over cached run errors.
Learn more at Trigger.dev.
Created by @mvanhorn (Matt Van Horn).
The recommended path installs both the trigger-dev-pp-cli binary and the pp-trigger-dev agent skill (Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, and other agents supported by the upstream skills CLI) in one shot:
npx -y @mvanhorn/printing-press-library install trigger-devFor CLI only (no skill):
npx -y @mvanhorn/printing-press-library install trigger-dev --cli-onlyFor skill only — installs the skill into the same agents as the default command above, but skips the CLI binary (use this to update or reinstall just the skill):
npx -y @mvanhorn/printing-press-library install trigger-dev --skill-onlyTo constrain the skill install to one or more specific agents (repeatable — agent names match the skills CLI):
npx -y @mvanhorn/printing-press-library install trigger-dev --agent claude-code
npx -y @mvanhorn/printing-press-library install trigger-dev --agent claude-code --agent codexIf npx isn't available (no Node, offline), install the CLI directly via Go (requires Go 1.26.4 or newer):
go install github.com/mvanhorn/printing-press-library/library/developer-tools/trigger-dev/cmd/trigger-dev-pp-cli@latestThis installs the CLI only — no skill.
Download a pre-built binary for your platform from the latest release. On macOS, clear the Gatekeeper quarantine: xattr -d com.apple.quarantine <binary>. On Unix, mark it executable: chmod +x <binary>.
Install the CLI binary first. The installer writes binaries to a per-user managed bin directory by default: $HOME/.local/bin on macOS/Linux and %LOCALAPPDATA%\Programs\PrintingPress\bin on Windows.
npx -y @mvanhorn/printing-press-library install trigger-dev --cli-onlyThen install the focused Hermes skill.
From the Hermes CLI:
hermes skills install mvanhorn/printing-press-library/cli-skills/pp-trigger-dev --forceInside a Hermes chat session:
/skills install mvanhorn/printing-press-library/cli-skills/pp-trigger-dev --forceRestart the Hermes session or gateway if the newly installed skill is not visible immediately.
Install both the CLI binary and the focused OpenClaw skill. The installer defaults binaries to a per-user bin directory ($HOME/.local/bin on macOS/Linux, %LOCALAPPDATA%\Programs\PrintingPress\bin on Windows):
npx -y @mvanhorn/printing-press-library install trigger-dev --agent openclawRestart the OpenClaw session or gateway if the newly installed skill is not visible immediately.
This CLI ships an MCPB bundle — Claude Desktop's standard format for one-click MCP extension installs (no JSON config required).
To install:
- Download the
.mcpbfor your platform from the latest release. - Double-click the
.mcpbfile. Claude Desktop opens and walks you through the install. - Fill in
TRIGGER_SECRET_KEYwhen Claude Desktop prompts you.
Requires Claude Desktop 1.0.0 or later. Pre-built bundles ship for macOS Apple Silicon (darwin-arm64) and Windows (amd64, arm64); for other platforms, use the manual config below.
Authentication uses a Trigger.dev secret key in the Authorization: Bearer header. Set TRIGGER_SECRET_KEY to your environment's key — tr_dev_… for development, tr_prod_… for production, tr_pat_… for personal access tokens. Each key is environment-scoped: a dev key cannot manage prod runs.
# Validate TRIGGER_SECRET_KEY and confirm reachability.
trigger-dev-pp-cli doctor
# Cache last 7 days of runs locally so search/aggregations work offline.
trigger-dev-pp-cli sync --resources runs --since 7d
# See the recurring failure signatures across all tasks in one shell call.
trigger-dev-pp-cli failures top --since 7d --top 20 --agent
# Rank LLM cost by model+task — the report finance asks for.
trigger-dev-pp-cli runs span-cost --since 7d --by model,task --top 20
# Find zombie crons that stopped firing or whose runs all fail.
trigger-dev-pp-cli schedules stale --days 14 --agent
# Stay in your terminal — get pinged the second a failure lands.
trigger-dev-pp-cli runs watch --task my-task --notify
These capabilities aren't available in any other tool for this API.
-
runs watch— Watches runs for new failures and interrupts your terminal the moment one happens — desktop notification, sound, and a non-zero exit so it composes with shell loops.Reach for this when an agent or oncall engineer needs to react to failures the second they appear, instead of polling the dashboard or waiting for an email.
trigger-dev-pp-cli runs watch --task daily-digest --notify --sound
-
schedules stale— Lists schedules that stopped firing or whose recent runs have a low success rate — the zombie cron audit no other tool gives you.Reach for this after an env var rotation, a Postgres URL change, or any silent-config event that might have killed crons without anyone noticing.
trigger-dev-pp-cli schedules stale --days 7 --min-success-rate 0.5 --agent
-
runs span-cost— Walks recent runs, surfaces the most expensive LLM spans grouped by model and task, with token totals and dollar cost — the report your finance lead actually wants.Reach for this when an AI-product engineer or agent needs to pinpoint which model + task pair is eating the LLM budget, before the next billing cycle closes.
trigger-dev-pp-cli runs span-cost --since 7d --by model,task --top 20 --agent --select spans.model,spans.task_identifier,spans.total_cost_cents
-
failures top— Top recurring (task, error-signature) pairs over a time window — mechanical group-by, no LLM, no NLP.Reach for this in an incident loop when an agent needs to find the dominant failure signature instead of reading 200 stack traces by hand.
trigger-dev-pp-cli failures top --since 7d --top 20 --agent --select patterns.task_identifier,patterns.error_signature,patterns.count,patterns.last_occurred_at
-
runs find— FTS5 grep over the synced runs table — error messages, tags, metadata, task identifiers — ranked by recency.Reach for this when an agent has a fragment of an error message and needs the matching runs without typing TRQL.
trigger-dev-pp-cli runs find "payload too large" --status FAILED --since 30d --agent
-
envvars diff— Side-by-side diff of environment variables between two environments — keys missing, keys extra, values that differ (masked).Reach for this when an agent is debugging "works in staging, fails in prod" — the answer is almost always an env var, and diff makes the answer one command away.
trigger-dev-pp-cli envvars diff --from prod --to staging --project proj_abc --agent
-
runs get— runs get returns typed exit codes: 0=COMPLETED, 20=FAILED, 21=CRASHED, 22=SYSTEM_FAILURE, 23=CANCELED, 3=not-found, 4=auth-error. Cobra annotation pp:typed-exit-codes makes verify and agents read the contract directly.Reach for this when an agent is writing a shell loop over many runs and wants to branch on success/failure without parsing JSON.
trigger-dev-pp-cli runs get run_abc123 --json && echo COMPLETED || echo $?
Run trigger-dev-pp-cli --help for the full command reference and flag list.
Manage batches
trigger-dev-pp-cli batches retrieve-batch-v1- Retrieve a batch by its ID, including its status and the IDs of all runs in the batch.
Manage deployments
trigger-dev-pp-cli deployments get-latest-v1- Retrieve information about the latest unmanaged deployment for the authenticated project.trigger-dev-pp-cli deployments get-v1- Retrieve information about a specific deployment by its ID.trigger-dev-pp-cli deployments list-v1- List deployments for the authenticated environment, ordered by most recent first.
Manage projects
Manage query
trigger-dev-pp-cli query execute-v1- Execute a TRQL (Trigger.dev Query Language) query against your run data. TRQL is a SQL-style query language that allows you to analyze runs, calculate metrics, and export data.trigger-dev-pp-cli query get-schema-v1- Get the schema for TRQL queries, including all available tables, their columns, data types, descriptions, and allowed values.trigger-dev-pp-cli query list-dashboards-v1- List available built-in dashboards with their widgets. Each dashboard contains pre-built TRQL queries for common metrics like run success rates, costs, and LLM usage.
Manage queues
trigger-dev-pp-cli queues list-v1- List all queues in your environment with pagination support.trigger-dev-pp-cli queues retrieve-v1- Get a queue by its ID, or by type and name.
Manage runs
trigger-dev-pp-cli runs list-v1- List runs in a specific environment. You can filter the runs by status, created at, task identifier, version, and more.trigger-dev-pp-cli runs retrieve-v1- Retrieve information about a run, including its status, payload, output, and attempts. If you authenticate with a Public API key, we will omit the payload and output fields for security reasons.
Manage schedules
trigger-dev-pp-cli schedules create-v1- Create a newIMPERATIVEschedule based on the specified options.trigger-dev-pp-cli schedules delete-v1- Delete a schedule by its ID. This will only work onIMPERATIVEschedules that were created in the dashboard or using the imperative SDK functions likeschedules.create().trigger-dev-pp-cli schedules get-v1- Get a schedule by its ID.trigger-dev-pp-cli schedules list-v1- List all schedules. You can also paginate the results.trigger-dev-pp-cli schedules update-v1- Update a schedule by its ID. This will only work onIMPERATIVEschedules that were created in the dashboard or using the imperative SDK functions likeschedules.create().
Manage tasks
trigger-dev-pp-cli tasks batch-trigger-v1- Batch trigger tasks with up to 1,000 payloads with SDK 4.3.1+ (500 in prior versions).
Manage timezones
trigger-dev-pp-cli timezones get-v1- Get all supported timezones that schedule tasks support.
Manage waitpoints
trigger-dev-pp-cli waitpoints complete-token-callback-v1- Completes a waitpoint token using the pre-signed callback URL returned in theurlfield when the token was created. No API key is required — thecallbackHashin the URL acts as the authentication token.
This is designed to be given directly to external services (e.g. as a webhook URL) so they can unblock a waiting run without needing access to your API key. The entire request body is passed as the output data to the waiting run.
If the token is already completed, this is a no-op and returns success: true.
trigger-dev-pp-cli waitpoints complete-token-v1- Completes a waitpoint token, unblocking any run that is waiting for it viawait.forToken(). An optionaldatapayload can be passed and will be returned to the waiting run. If the token is already completed, this is a no-op and returnssuccess: true.
This endpoint accepts both secret API keys and short-lived JWTs (public access tokens), making it safe to call from frontend clients.
trigger-dev-pp-cli waitpoints create-token-v1- Creates a new waitpoint token that can be used to pause a run until an external event completes it. The token includes aurlwhich can be called via HTTP POST to complete the waitpoint. Use the token ID withwait.forToken()inside a task to pause execution until the token is completed.trigger-dev-pp-cli waitpoints list-tokens-v1- Returns a paginated list of waitpoint tokens for the current environment. Results are ordered by creation date, newest first. Use cursor-based pagination withpage[after]andpage[before]to navigate pages.trigger-dev-pp-cli waitpoints retrieve-token-v1- Retrieves a waitpoint token by its ID, including its current status and output if it has been completed.
# Human-readable table (default in terminal, JSON when piped)
trigger-dev-pp-cli batches mock-value
# JSON for scripting and agents
trigger-dev-pp-cli batches mock-value --json
# Filter to specific fields
trigger-dev-pp-cli batches mock-value --json --select id,name,status
# Dry run — show the request without sending
trigger-dev-pp-cli batches mock-value --dry-run
# Agent mode — JSON + compact + no prompts in one flag
trigger-dev-pp-cli batches mock-value --agentThis CLI is designed for AI agent consumption:
- Non-interactive - never prompts, every input is a flag
- Pipeable -
--jsonoutput to stdout, errors to stderr - Filterable -
--select id,namereturns only fields you need - Previewable -
--dry-runshows the request without sending - Explicit retries - add
--idempotentto create retries and--ignore-missingto delete retries when a no-op success is acceptable - Confirmable -
--yesfor explicit confirmation of destructive actions - Piped input - write commands can accept structured input when their help lists
--stdin - Offline-friendly - sync/search commands can use the local SQLite store when available
- Agent-safe by default - no colors or formatting unless
--human-friendlyis set
Exit codes: 0 success, 2 usage error, 3 not found, 4 auth error, 5 API error, 7 rate limited, 10 config error.
# Top recurring failure signatures across all tasks in the last 24 hours
trigger-dev-pp-cli failures top --since 1d --top 20 --agent# Sync first, then grep — works without an internet connection
trigger-dev-pp-cli sync --resources runs --since 30d
trigger-dev-pp-cli runs find "payload too large" --status FAILED --since 30d --json# Drill into the most expensive model+task pairs over the last week
trigger-dev-pp-cli runs span-cost --since 7d --by model,task --top 20 --agent# Default behavior is plain stdout; --notify and --sound opt in to OS alerts
trigger-dev-pp-cli runs watch --task daily-digest --interval 30s --notify --sound# Mask values, machine-readable output for diff in CI
trigger-dev-pp-cli envvars diff --from prod --to staging --project proj_abc --json# Schedules that haven't fired in 14 days OR whose recent runs all fail
trigger-dev-pp-cli schedules stale --days 14 --min-success-rate 0.5 --agent# Inspect the schema first, then execute against your run data
trigger-dev-pp-cli query get-schema-v1 --json
trigger-dev-pp-cli query execute-v1 --query "SELECT task_identifier, COUNT(*) FROM runs GROUP BY task_identifier" --json# Exit code is 0=COMPLETED, 20=FAILED, 21=CRASHED, 22=SYSTEM_FAILURE, 23=CANCELED, 3=not-found, 4=auth-error
trigger-dev-pp-cli runs get run_abc123 --json && echo "ok" || echo "exit=$?"# Mutation example — pass payload via --stdin (JSON request body) or --payload
echo '{"payload": {"name": "alex"}}' | trigger-dev-pp-cli tasks trigger task-v1 my-task-id --stdin --agent# Polls the API and emits NDJSON to stdout for piping into downstream tools
trigger-dev-pp-cli tail --resource runs --interval 5s --json# Sync first, then run analytics queries against the synced data offline
trigger-dev-pp-cli sync --resources runs,schedules --since 30d
trigger-dev-pp-cli analytics --json# Items missing assignee/project/priority/labels — surfaces unowned work
trigger-dev-pp-cli orphans --jsontrigger-dev-pp-cli doctorVerifies configuration, credentials, and connectivity to the API.
Config file: ~/.config/trigger-dev-pp-cli/config.toml
Environment variables:
| Name | Kind | Required | Description |
|---|---|---|---|
TRIGGER_SECRET_KEY |
per_call | Yes | Set to your API credential. |
Authentication errors (exit code 4)
- Run
trigger-dev-pp-cli doctorto check credentials - Verify the environment variable is set:
echo $TRIGGER_SECRET_KEYNot found errors (exit code 3) - Check the resource ID is correct
- Run the
listcommand to see available items
- 401 Unauthorized on every call — Set TRIGGER_SECRET_KEY to a
tr_dev_…,tr_prod_…, ortr_pat_…key and runtrigger-dev-pp-cli doctor. The key prefix encodes which environment you can manage. - 403 environment mismatch when calling /api/v1/runs — Your key is scoped to a different environment than the resource. A
tr_dev_…key cannot list prod runs. Switch keys. - 429 rate-limited — Trigger.dev returns standard
Retry-Afterin seconds. The CLI's adaptive limiter honors it automatically; if you're seeing this in scripts, lower concurrency or add--limit. runs findreturns nothing — Runtrigger-dev-pp-cli sync --resources runs --since 30dfirst — substring grep is over the local store, not the live API.schedules stalesays all schedules are stale on a fresh project — The store is empty until sync. Runtrigger-dev-pp-cli sync --resources schedulesand--resources runsso the join has data.
This CLI was built by studying these projects and resources:
- trigger.dev (official CLI) — TypeScript (14803 stars)
- @trigger.dev/sdk — TypeScript (14803 stars)
- trigger.dev MCP server — TypeScript (14803 stars)
- Inngest CLI — Go (5093 stars)
- Temporal CLI — Go
Generated by CLI Printing Press