Skip to main content

panorama-super-cli (psc)

PyPI CI Docs License

Agent-friendly object management for Palo Alto Panorama. Find where an IP lives, hunt down duplicate address/service objects, merge them safely (rewriting every group and rule that referenced them), enforce naming conventions, and audit object hygiene — all dry-run by default, with PAN-OS set and JSON output for humans and agents alike.

$ psc --config panorama.xml find ip 10.0.0.10
$ psc --config panorama.xml dedup addresses
$ psc --config panorama.xml dedup merge --keep h-web1 --remove web-primary --apply --out fixed.xml

v1.0.0. From this release psc follows SemVer: the CLI surface, JSON contracts, and exit codes are stable public API. Writes are dry-run by default; nothing touches Panorama without --apply.

Why

Panorama configs rot: the same 10.0.0.10 ends up as h-web1, web-primary, and WEB_PRD_01; services duplicate well-known ports; objects outlive the rules that used them. psc gives you a fast, scriptable, safe way to see and fix that — offline against an exported config, or live against Panorama.

Install

uv tool install panorama-super-cli      # recommended
# or
pipx install panorama-super-cli
# or
pip install panorama-super-cli

Two ways to point it at a config

  • Offline (no credentials, totally safe): psc --config exported.xml <cmd>. Export from Panorama (scp export configuration ... or the GUI) and audit it on your laptop.
  • Live: configure a profile (psc init, psc login) and psc talks the PAN-OS XML API via pan-os-python. Reads are free; writes still require --apply.

What it does

Area Commands
Find / resolve psc find ip <ip>, find ip -e <ip> (exact only), find ip --resolve-fqdn (opt-in DNS), find ip -f ips.txt, find object <name>
Duplicates psc dedup addresses, dedup services, dedup groups, dedup merge (pairwise or --group <value>), dedup merge-group, dedup promote (cross-DG duplicate → shared)
Audit psc audit overlaps (overlapping/contained CIDR ranges), audit services-vs-wellknown
Diff psc diff a.xml b.xml, diff --device-group A --against B
Object CRUD psc set address|address-group|service|service-group|tag ... (create/update with PAN-OS validation)
Import / export psc export <kind> (NDJSON), psc set <kind> -f objs.ndjson (bulk import)
Rule edits psc rule edit-member --rule R --field F --add/--remove M (idempotent)
Decommission / move psc decommission <ip|cidr>... (reference-safe teardown), psc move <kind> <name> --from --to [--cascade]
Naming psc name lint, name apply --object / --all (opt-in templates)
References psc refs used <object>, refs unused [--ignore-disabled], refs dangling
Workbench psc workbench (psc w) — interactive TUI, full CLI parity
Output `--output json

See the docs for the full surface, the safety model, and the agent guide.

Workbench (interactive TUI)

Prefer a cockpit to one-shot commands? psc workbench (alias psc w) is a keyboard-driven Textual TUI at full CLI parity. Search objects, multi-select them into a persistent buffer, route the selection into a spoke (dedup, move, rename, decommission, rule edits, audits, naming, create, group the selection with N, …), and stage plans into a git-like changelist that applies as one batch — as a set script, an offline config write, or a live candidate push (never a commit). Same safety model as the CLI throughout.

psc --config panorama.xml workbench
psc -p prod w --output-mode live-apply

See the Workbench guide.

Safety model

  • Dry-run is the default. Every mutating command prints a plan and exits without touching anything unless you add --apply.
  • Side-effect aware. Merging or renaming an object rewrites every address group, security rule, and NAT rule that referenced it — across shared and device-groups — or refuses and tells you why.
  • --debug streams structured logs to stderr; stdout stays clean for pipes.

For AI agents

psc ships a bundled Agent Skill and emits a stable JSON envelope + exit-code contract. Pass --output json and parse away. See Using with AI agents.

License

Apache-2.0.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

panorama_super_cli-1.9.0.tar.gz (423.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

panorama_super_cli-1.9.0-py3-none-any.whl (238.3 kB view details)

Uploaded Python 3

File details

Details for the file panorama_super_cli-1.9.0.tar.gz.

File metadata

  • Download URL: panorama_super_cli-1.9.0.tar.gz
  • Upload date:
  • Size: 423.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for panorama_super_cli-1.9.0.tar.gz
Algorithm Hash digest
SHA256 baab3e2a56b3ad497b65ce7493869d5d841e41b93acc6939962f6724d73b38d5
MD5 1a3fec5bf92de1d8c2848b6114106da1
BLAKE2b-256 d37793d326dc1eb4385625d23e2500014ba99898a9364ead40e21dea345782b7

See more details on using hashes here.

Provenance

The following attestation bundles were made for panorama_super_cli-1.9.0.tar.gz:

Publisher: release.yml on thomaschristory/panorama-super-cli

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file panorama_super_cli-1.9.0-py3-none-any.whl.

File metadata

File hashes

Hashes for panorama_super_cli-1.9.0-py3-none-any.whl
Algorithm Hash digest
SHA256 5dc0c27cc19aeb87517e1dec225244f5213da56df19220ec0fa74fc8eddc4809
MD5 972e133eaeb1d11fe0298e5c4eb88345
BLAKE2b-256 941875a5a0c6c2ffdcd0b7240c90e6ebb53e0b2c0e8a3cc9a9857dc030b44587

See more details on using hashes here.

Provenance

The following attestation bundles were made for panorama_super_cli-1.9.0-py3-none-any.whl:

Publisher: release.yml on thomaschristory/panorama-super-cli

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page