Power features
Export
Bulk export with auto-pagination (unified or proxy):
# Unified: path contains /
truto export crm/contacts -a <account-id> -o ndjson --out contacts.ndjson
truto export crm/contacts -a <account-id> -o csv --out contacts.csv
# Proxy: no slash in path
truto export tickets -a <account-id> -o csv --out tickets.csv
# Pipe to jq
truto export crm/contacts -a <account-id> -o ndjson | jq '.email'| Format | Behavior |
|---|---|
ndjson |
Streams one record per line — best for large datasets |
csv |
Header from first page; columns locked from first record |
json / yaml |
Buffers all pages in memory — avoid for huge exports |
export defaults to json output; most other commands default to table.
Diff
Compare two records field-by-field:
truto diff crm/contacts <id1> <id2> -a <account-id>
truto diff crm/contacts <id> -a <account-1> --account2 <account-2> # cross-account
truto diff crm/contacts <id1> <id2> -a <account-id> -o jsonResource path convention matches export: crm/contacts → unified; tickets → proxy.
With --account2, [id2] is optional and defaults to id1.
JSONata
Evaluate Truto JSONata locally (no API call):
truto jsonata eval --expression '$map(items, function($v) { $v.id })' --input context.json
cat context.json | truto jsonata eval --expression-file expr.txt --stdinUses @truto/truto-jsonata with Truto's custom functions, in the CLI's own bounded worker. The CLI and the Truto runtime use different engine versions, so a local result does not prove production behavior.
- A runaway expression is stopped and the command exits 1. If the evaluator cannot start, nothing is evaluated and the command exits 1.
- Functions that call external services (
$generateEmbeddingsCohere,$parseDocument,$convertMdToPdf,$getArrayBuffer,$getDataUri,$teeStream) are not called. - Instead, they return the placeholder
"[not run: external function $<name>]"with a warning on stderr; the command still exits 0. Check stderr before trusting the value. - A URL or date-time result prints as its JSON form (the
href, or an ISO string).
Open dashboard
truto open
truto open integrations
truto open accounts <id>
truto open tenants # tenants page
truto open tenants acme-corp # specific tenant detail
truto open sync-jobs
truto open logs| Resource | With no ID | With an ID |
|---|---|---|
integrations, unified-models |
List page | That catalog page |
environment-integrations, accounts (or integrated-accounts), sync-jobs, tenants |
List page | That record's page |
webhooks, api-tokens, datastores, logs, team, notifications |
List page | List page, with a warning |
environments, workflows, mcp-tokens, link-tokens |
Refused — no dashboard page | Refused |
Any other name is appended to https://app.truto.one/ as path segments. A segment that reads as . or .. is refused, since it would name another page.
Uses open on macOS, xdg-open on Linux, and the system default browser on Windows.
Stdin piping
# Bulk admin create from NDJSON
cat contacts.ndjson | truto accounts create --stdin
# Bulk admin create from JSON array
echo '[{"name":"a"},{"name":"b"}]' | truto integrations create --stdin
# Data plane (single JSON body)
echo '{"first_name":"Jane"}' | truto unified crm contacts -m create -a <id> --stdin
cat batch.json | truto batch --stdinUpgrade
truto upgrade --check
truto upgrade --forceSee Installation.