Problem
Each Panorama is a single pane of glass for its own firewalls, but large estates often run several, and an engineer wants one read-only view across all of them. API keys must stay encrypted at rest, and a tool that retries a bad sign-in can lock out its admin account (Palo Alto Networks advises a separate admin account for XML API access). The tool needs only Python 3.9 or later and its standard library plus one vendored AES package, and installs nothing system-wide.
What I built
A local web app with a mind-map view of the fleet, an Attention list, search and exports.
- Read-only by construction: it sends only XML API reads (operational
showcommands and running-config reads), plus at most one key request on Test. Ad-hoc queries are 7 fixedshowcommands, and two tests check that the source has no write patterns and that a mock refresh sends no write command. - A refresh pulls the fleet in 10 phases into SQLite snapshots with diffs.
- API keys sit in a local encrypted vault: AES-256 with an HMAC-SHA256 integrity tag and scrypt key derivation.
- The web UI listens on loopback only, with a strict Host-header check.
- Sign-in is an explicit state machine with 10 states, a cooldown and a 24-hour denial tally, designed so the tool never locks out an admin account.


How AI was used
The plan came from a multi-agent research and skeptic pass (the same loop as on the method page). Claude Code then wrote the code milestone by milestone, with a review-fix pass and a Playwright screenshot review that drove the UI fixes. I set the constraints, added two safety switches after the plan was drafted (a per-Panorama API switch that is off by default, and a global Offline mode), and own the real-environment run.
Results
947 unit tests pass on Python 3.9 and 3.13 (re-run Oct 2026); the suite grew from 248 tests at the first milestone. The app is about 14,200 lines of Python plus 17,800 lines of tests and 11,900 lines of front-end code. The Playwright UI smoke test passed 39 of 39 with 0 console errors on the default mock fleet (Sept 2026); an Oct 2026 re-run on a 6-Panorama mock passed 36 of 39, the misses being two fleet-size assumptions and one timing wait, not UI defects.

Status and limits
Prototype, mock-tested only. It has not run against a real Panorama yet; a 24-check plan is ready for the first real-Panorama run. The sign-in safety model still rests on unconfirmed assumptions about how a real Panorama counts refused keys and reports failed sign-ins. The vault uses standard primitives through a vendored pure-Python AES package and needs an independent crypto review before it holds any key beyond a lab Panorama's.
What I learned
76 issues were settled on paper before any code existed; I have not measured what that saved. Now the limit is a real test bed: without a real Panorama, 947 passing tests only prove the code matches my reading of the docs.