Skip to content

Fleet views

Three ways to see all your services at once: the dashboard in a browser, pacto fleet in a terminal or CI job and pacto tui in an interactive terminal. All three read the same operational graph, the joined view of your contracts, their versions and where they run. An AI agent asks the same questions through the pacto_fleet_* tools of pacto mcp --fleet. The contract-to-infrastructure side is in For platform engineers.

Dashboard

pacto dashboard opens a web dashboard over the same contracts the CLI manages and the operator checks. It has four views: what needs attention now, the service list, the Operational Graph and change analysis. It finds its sources at startup and merges them per service. Next to the Kubernetes operator it needs no OCI arguments: it reads the registry addresses from the resolvedRef field in each Pacto resource's status, then shows version history, interfaces, configuration schemas and diffs. See the pacto dashboard reference for its flags and environment variables.

The dashboard's page for payments-service: its compliance, an ownership conflict across four revisions and a summary of its operational targets The dashboard's page for payments-service: its compliance, an ownership conflict across four revisions and a summary of its operational targets

Its HTTP API is described at /openapi.json; see Dashboard container.

Fleet queries without a browser

pacto fleet answers the same questions from a terminal or a CI job: it builds one snapshot from the sources you name, then queries it with search, get, graph, status and explain.

$ pacto fleet search --local ./contracts --oci ghcr.io/acme/unreachable-pacto:1.0.0
1 of 1 service(s):
  payments-api                 NotEvaluated owner=acme/payments  revs=1 targets=0
warning: answer is partial (as of 2026-08-23T01:30:40+02:00)
  - [SOURCE_PARTIAL] source oci returned a partial result
  - [SOURCE_RECORD_INVALID] ref ghcr.io/acme/unreachable-pacto:1.0.0 could not be resolved: artifact not found: ghcr.io/acme/unreachable-pacto:1.0.0

Read the completeness before you read the rows. Pacto reports an unreachable registry, so a service missing from a partial answer may be one the missing source knew about. Likewise 1 of 1 is this page of total matches. --output-format json carries the same facts in a meta envelope for a CI job to branch on, and query semantics has the five operations and the knowledge vocabulary behind completeness.

The terminal UI

pacto tui is the dashboard's terminal equivalent, built over the snapshot pacto fleet builds and taking the same source flags. It loads that snapshot once and opens on the Services tab. From there you move through services, revisions, targets, owners and sources, with whatever row is highlighted standing in as the argument, so you never type a path. It needs an interactive terminal; in a pipeline, use the plain commands.

One difference from the dashboard matters more than the rest: the dashboard only reads and the TUI also writes. Read verbs run in-process against the loaded snapshot. Write verbs shell out to this same binary so they own the terminal. Each one names what it is about to change before it waits for a y: the directory a pull will overwrite, the resolved plugin binary, the output directory a generate will write. Pass --read-only to remove the four write verbs from the in-TUI help screen.

# whatever bundles are under the current directory
pacto tui

# a populated screen from the committed demo fixture
pacto tui --local examples/demo/bundles \
  --target-state examples/demo/fleet-targets.yaml \
  --traces examples/demo/traces.json --freshness 24h

# the same demo with no clone at all, straight out of the registry
pacto tui --root oci://ghcr.io/trianalab/pacto/pacto-demo:1.0.0 --local ""

The second command needs a clone and a paste from the repository root; it opens on 36 services and 4 operational targets. The third needs nothing on disk: --root follows the published contract's dependency declarations and pulls 12 of the demo's 36 services out of ghcr.io, and --local "" switches off the default directory scan. A registry has no record of where anything runs, so every service reads NotEvaluated until you add the --target-state fixture.

pacto tui on the demo fixture: the Services tab lists 36 services, with payments-service selected and compliant

Keys

Key Action
tab / shift+tab cycle the tabs: kinds on the list, categories under a, direction on a graph
/ filter; enter applies it, esc discards what you typed
enter open the highlighted row
a what needs attention
+ / - graph depth
? toggle the key table for the current screen
r reload the snapshot
q back, or quit from the root screen
esc clear an applied filter, otherwise the same as q
y copy the equivalent pacto command
v validate the selected bundle
E / e explain the bundle, or explain it from the fleet's point of view
l check the lock file
d / i diff or impact between two selections, pressed twice
g the selection's neighborhood graph
p / P push, or pull (writes; asks first)
L rewrite the lock file (writes; asks first)
G run a generate plugin (writes; asks first)

y copies the command you would have typed to the clipboard, so you can run anything the TUI has no key for. The line is shell-quoted, so a value carrying a space or a semicolon still pastes as one argument. With no clipboard, for example over ssh or on a headless box, the TUI prints the line and the reason it could not copy it. See the pacto tui reference for every flag.