Skip to main content
The SDK installs three command-line tools:

Common behavior

  • Backend and login. Commands that reach the backend use your saved login from plurai login, or the PLURAI_URL and PLURAI_TOKEN pair when both are exported. There is no URL or token flag. See Environment variables.
  • Anonymization posture. The ingest-* commands read the posture from the top-level anonymize: key in plurai.config.yaml. It is a workspace setting, never a per-run flag. Under anonymize: true they scrub personal data locally before upload and refuse to run without the anonymize extra. See Data and privacy.
  • Disclosure and audit. Before any upload, every ingest-* command prints what it is about to send (sizes, posture, hashes, scrub summary) to stderr and writes it to .plurai/uploads/disclosure-<kind>.txt. Every upload is recorded in .plurai/uploads/audit.log.
  • Output. stdout carries only what a caller parses (a manifest, an id, a JSON entry). Diagnostics go to stderr.
  • --overrule FILE. convert-trace, ingest-bundle, ingest-corpus, ingest-doc-examples, ingest-run, ingest-run-report and ingest-traces take overrules for their gate findings: a YAML or JSON list of {gate_id, fingerprint, reason}. An overrule lapses when the evidence changes. Security and invariant gates are never lifted.

—workspace-root

Every ingest-* command, convert-trace and folder-names take --workspace-root DIR (default .). The .plurai/ folder (anonymization key, disclosure and audit log) is created under it, and plurai.config.yaml is looked up at <root>/plurai.config.yaml, then <root>/plurai_sim/plurai.config.yaml. The plugin passes the plurai_sim folder. Pick one spelling per workspace and keep it: under the anonymized posture, a second spelling mints a second key and breaks pseudonym stability across uploads.

Global flags

capabilities

Prints this build’s identity and surface as JSON: version, identity, commands (read off the live CLI), features, overrule_commands, trace_selection_keys (per trace source, the source-config keys that narrow an export) and trace_formats (the built-in convert-trace readers). Check a feature here rather than comparing version strings.

ingest-traces

Exports production traces from your observability platform locally, applies the posture, and uploads them as one content-addressed part. See Trace sources for each source’s config.
stdout is one part entry: {kind, name or label, sha256, bytes, posture, anon_key_fingerprint}.

ingest-corpus

Extracts a RAG or SQL knowledge corpus locally, applies the posture, and uploads it as one part. Your data source’s credentials stay local.

ingest-descriptions

Delivers your agent’s descriptions as content-addressed parts: plurai.config.yaml, simulation_prd.md and scenario_variables.yaml, whichever exist. They are sent as written, with no posture. stdout is one JSON array of part entries.

ingest-doc-examples

Scans a folder of example documents, applies the posture, and uploads them so generated documents follow your real formatting. stdout is the upload manifest. Under anonymized, images and PDFs need the anonymize-binary extra.

ingest-bundle

Applies the posture to a prepared scenario bundle (real records, or a converted trace) and uploads it.

ingest-run

Uploads a finished Run’s saved artifacts, so the backend can re-score them without re-running.

ingest-run-report

Uploads a Run’s rendered report, to attach to that Run’s upload.

convert-trace

Converts a trace export into a scenario bundle that resumes the real conversation where it stopped. It runs locally and uploads nothing; publish the result with ingest-bundle. A resumed scenario needs a seed_state that applies the resume seed. See Write a harness. Exit code 2 only when nothing was written.

stash-doc

Stashes one generation input (a PRD, a scenario_variables.yaml) on the backend from disk and prints its input doc id, so the document never passes through a model’s context.
The id is content-addressed: an unchanged file gives the same id.

fetch

Downloads backend-owned files. Both commands write through a temp file and a rename, so a failed fetch never truncates a good file.

fetch policies

Prints state=<promoted|draft|unknown|absent>.

fetch artifact

Prints wrote <path> or missing <relpath> per file, and exits 1 when any file is missing.

job

A job id that is not one the backend issues is refused before any request.

backend

Other commands

correct-scores

Overwrites, on your connected Langfuse or LangSmith, the score of every eval whose verdict was corrected after the Run. Prints one line per eval: written, not_recorded, unsupported or failed. With no platform connected, it prints a skip line. Exits 0, except 2 when the Run folder or a verdicts.json cannot be read.

More commands

plurai-scan-contract

Runs the scan’s conclusions against the files they were drawn from, on your machine, before generation spends anything.

check

Writes scan_contract.json and pre_generation_findings.md to --out, plus an internal record under .plurai/gate_authority/ that you should never commit or upload. check touches nothing but your files unless you pass both --probe-consent and --agent-command. Then it sends one derived question per probe to your own command, never to a Plurai service, and refuses any question that opens with a state-changing instruction. The replies are kept in the report as evidence, so review the artifact before you commit or upload it.

recheck

Re-hashes your files and reports drift against a recorded scan. Always exits 0: drift is advisory.