Agent-friendly CLI for Palo Alto Panorama object management: find, dedup/merge, rename, and audit address/service objects safely.
Project description
panorama-super-cli (psc)
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 --into web-primary --apply
⚠️ Alpha. The CLI surface and JSON contracts may shift before v1.0.0. 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) andpsctalks the PAN-OS XML API viapan-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 -f ips.txt, find object <name> |
| Duplicates | psc dedup addresses, dedup services, dedup groups, dedup merge, dedup merge-group |
| Audit | psc audit overlaps (overlapping/contained CIDR ranges) |
| Object CRUD | psc set address|address-group|service|service-group|tag ... (create/update with PAN-OS validation) |
| Rule edits | psc rule edit-member --rule R --field F --add/--remove M (idempotent) |
| Decommission | psc decommission <ip|cidr>... (reference-safe cascading teardown) |
| Naming | psc name suggest, name lint, name apply (opt-in templates) |
| References | psc refs <object> (where-used), refs unused |
| Output | `--output json |
See the docs for the full surface, the safety model, and the agent 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
sharedand device-groups — or refuses and tells you why. --debugstreams 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
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file panorama_super_cli-0.4.3.tar.gz.
File metadata
- Download URL: panorama_super_cli-0.4.3.tar.gz
- Upload date:
- Size: 238.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a933f9c78e863b61fba8c05906e08c4fd2892afc5f4fe40f371cc922d0db2c54
|
|
| MD5 |
dc7a25428d5cc8a9615128c61ce66293
|
|
| BLAKE2b-256 |
e3980bdc61e4b1bd1aae77eb4c571b16735f3852ce4b71dcb5d742d1dabbe1e1
|
Provenance
The following attestation bundles were made for panorama_super_cli-0.4.3.tar.gz:
Publisher:
release.yml on thomaschristory/panorama-super-cli
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
panorama_super_cli-0.4.3.tar.gz -
Subject digest:
a933f9c78e863b61fba8c05906e08c4fd2892afc5f4fe40f371cc922d0db2c54 - Sigstore transparency entry: 1758370221
- Sigstore integration time:
-
Permalink:
thomaschristory/panorama-super-cli@8549e6cb7c4f8483f3a7b65660d53b179d00c66c -
Branch / Tag:
refs/tags/v0.4.3 - Owner: https://github.com/thomaschristory
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@8549e6cb7c4f8483f3a7b65660d53b179d00c66c -
Trigger Event:
push
-
Statement type:
File details
Details for the file panorama_super_cli-0.4.3-py3-none-any.whl.
File metadata
- Download URL: panorama_super_cli-0.4.3-py3-none-any.whl
- Upload date:
- Size: 115.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
73afdd8a317dadab51f45bba6362ba8e038b07ec9bad02c089fd52ea37eb0654
|
|
| MD5 |
9d337d0d13d129bda96cbf181d4af542
|
|
| BLAKE2b-256 |
fd4f9e13336223b5035bc10a37f148a1189342eaace4bd4817d7a5a50c28e547
|
Provenance
The following attestation bundles were made for panorama_super_cli-0.4.3-py3-none-any.whl:
Publisher:
release.yml on thomaschristory/panorama-super-cli
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
panorama_super_cli-0.4.3-py3-none-any.whl -
Subject digest:
73afdd8a317dadab51f45bba6362ba8e038b07ec9bad02c089fd52ea37eb0654 - Sigstore transparency entry: 1758370288
- Sigstore integration time:
-
Permalink:
thomaschristory/panorama-super-cli@8549e6cb7c4f8483f3a7b65660d53b179d00c66c -
Branch / Tag:
refs/tags/v0.4.3 - Owner: https://github.com/thomaschristory
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@8549e6cb7c4f8483f3a7b65660d53b179d00c66c -
Trigger Event:
push
-
Statement type: