phase1-analysis.md
c15 — Phase 1 Analysis: Agent-Governance Evaluation of the wf1 App
Source under analysis: ../app.qpoint.io/app/pages/** (the wf1 working wireframe,
runs at http://localhost:7878/).
Method: Six parallel agents read the actual page + component source for ~45 pages and
scored each through the agent-governance lens. Scores below are grounded in what the files
render, not in the page titles.
1. Framing
Qpoint is pivoting from API/traffic observability to AI-agent governance. The wf1 app was built for the former: every analytics surface pivots on Vendor / Client / Endpoint, never on an agent / model / identity. The governance question is not "is this a good observability app" (it is) but "how well does each page help the three mandate-owners — Security, Finance, Executive — govern AI agents: their egress, their spend, and their risk."
Scoring rubric (per stakeholder, per page):
| Score | Meaning |
|---|---|
| 0 | No value to this stakeholder for agent governance |
| 1–2 | Tangential / enabling plumbing |
| 3 | Useful, but needs reframing to land |
| 4 | Strong fit; identity/agent dimension is the missing piece |
| 5 | Core daily value for governing agents |
Three findings hold across the entire app and should frame everything below:
- Security is structurally well-served; the gap is vocabulary. The richest pages
already capture identity-adjacent provenance —
requests(auth token type, masked token, sensitive-data scan),connections(sourceExeprocess → destination, allow/ block action, country),data-risk(producer→consumer sensitive-data flows), and themcp/views/proxysettings (agent registry + data scope + default allow/deny). They speak "traffic / PII / domains," not "agents / LLMs / egress policy." - Finance is essentially unserved. Almost every page scores 0–2 for Finance. The strongest cost signal anywhere is bytes in/out — raw volume, never dollars or tokens. There is no spend, budget, or cost-attribution dimension in the product.
- Executive value is thin and scattered. It concentrates in
security/overview's health dials anddeploy/preferences' capability+residency+SOC2 summary. No single board-level posture/ROI surface exists — it would have to aggregate across pages.
The single highest-leverage structural fix: add an agent / model / identity
dimension alongside Vendor/Client/Endpoint (the shared traffic/components/usage/ GroupBy.vue pivot). Every page's scores rise once "by agent" is a pivot, because spend,
risk, and posture in this pivot are all owned per agent.
2. Per-Page Evaluation
Scores are S = Security, F = Finance, E = Executive (0–5).
Onboarding & Dashboard
| Page | S | F | E | Purpose & note |
|---|---|---|---|---|
/ Splash | 0 | 0 | 0 | Bootstrap/redirect gate. Keep thin; route governance roles to a posture view, not the generic dashboard. |
/orgs/overview Dashboard | 3 | 1 | 2 | Main landing: onboarding checklist + a Traffic/Inventory/Security/Deployment widget strip. Over-built with API telemetry; only explicit agent hook is a buried "Configure MCP Server" quick action. |
/orgs/new Create Org | 1 | 0 | 1 | Name-only org creation. No governance intent or spend/security owner captured. |
/orgs/configure Configure wizard | 1 | 0 | 1 | Gates onboarding — but the Capabilities/Hosting steps are empty stubs. Highest-leverage empty shell in the app. |
/orgs/install Install Qtap | 2 | 0 | 1 | Sensor install. Mechanical; framed as generic traffic tap, not agent-egress sensor. |
sso/* Authentication | 2 | 0 | 1 | OIDC/SAML redirect+spinner. Governs human operators, not agents. |
- Dashboard low-hanging: re-label/re-group widgets for the pivot; promote "Configure MCP Server" to first-class; surface AI/LLM vendors as a distinct inventory slice.
- Dashboard high-hanging: replace the metric strip with three stakeholder lanes — Agent Egress (which agents call which external LLM/tool endpoints), Spend (token/ $ per agent per vendor — the missing Finance signal), Posture (violations, unsanctioned agent traffic) for the executive.
- Configure wizard: fill the stubs as a Governance Policy setup (allowed agent capabilities, egress allowlists, spend ceilings, data residency/retention).
Traffic
| Page | S | F | E | Purpose & note |
|---|---|---|---|---|
/traffic/availability | 2 | 1 | 3 | Uptime/error health per destination, five-nines coloring. Reusable as an agent-reliability SLO. |
/traffic/bandwidth | 2 | 2 | 1 | Byte volume in/out, p99/max. Strongest re-think candidate → agent egress volume → token spend → cost trend. |
/traffic/performance | 1 | 2 | 2 | Latency percentiles. Reframe as per-agent task latency/efficiency; correlate slow+high-token = cost risk. |
/traffic/requests | 5 | 2 | 2 | Searchable request log w/ auth token type, masked token/hash, Sensitive Data (qscan) tab. The forensic backbone; core Security artifact. |
/traffic/connections | 4 | 1 | 2 | Richest provenance: sourceExe process → destination, allow/block action, country. The egress-control primitive. |
- Lead with
requests+connections— they already hold identity-adjacent provenance. PromoteauthTokenTypeand the sensitive-data flag to first-class columns/ filters; mapsourceExeto a known-agent registry; surface a policy verdict (allowed/ blocked/flagged) inline. - Reframe
bandwidth→ spend: translate request/response bytes at LLM/API destinations into estimated tokens and $ per agent and per provider, with MoM cost trend and budget burn. This is the single highest-leverage move for Finance and Executive.
Inventory
| Page | S | F | E | Purpose & note |
|---|---|---|---|---|
/inventory/clients | 4 | 2 | 2 | Discovered callers. Closest existing surface to an AI-agent inventory (caller = where agent identity lives). |
/inventory/endpoints | 3 | 1 | 1 | Discovered routes/destinations. Attack-surface map; endpoint- not agent-centric. |
/inventory/vendors | 4 | 3 | 3 | Third-party egress destinations. Best current Finance fit (vendor = unit of external spend) — but shows bytes, not $. |
/inventory/api-tokens | 4 | 1 | 1 | Credential discovery by hash, w/ rejections. Agent-credential governance seed. |
/inventory/geolocation | 2 | 0 | 2 | Origin heatmap. Reframe as agent data-residency / egress-destination geography + sovereignty zones. |
/orgs/settings/index Org | 1 | 0 | 1 | Org name + delete. Trivial. |
- Cheapest wins in the whole app: two columns are already coded but commented out — re-enable "Sensitive Data" (clients/endpoints/vendors) and "Last Used" (tokens).
- High-hanging: classify each client as human vs. agent/service (owner, model/runtime,
risk score); evolve
vendorsinto an AI/LLM-vendor spend & risk inventory (token/$ cost, DPA/compliance status, shadow-AI flagging); bind each token hash to an owning agent identity with scope/over-permission detection and one-click revoke.
Security & Alerting
| Page | S | F | E | Purpose & note |
|---|---|---|---|---|
/security/overview | 4 | 1 | 3 | Health dials + scanner coverage + ranked issues. Most board-presentable artifact. Reframe categories as agent-risk. |
/security/data-risk | 5 | 1 | 3 | Sensitive-data producers→consumers, frequency, data-flow viz. Closest page to the governance thesis. |
/alerting/events | 4 | 1 | 2 | Per-rule fired-alert summary w/ history sparkline. Group by agent/mandate → accountability ledger. |
/alerting/events/manage | 3 | 0 | 1 | Single-rule event history. Make it an agent-incident case view. |
/alerting/rules | 3 | 1 | 2 | Rules list. Add policy packs (pre-built agent-governance rule bundles). |
/alerting/rules/manage | 5 | 2 | 2 | Rule editor — Threshold/Delta/Risk/Discover (PII/new vendor). The governance lever. |
/alerting/integrations | 3 | 1 | 1 | Webhooks list. Expand to governance response/enforcement actions. |
/alerting/integrations/manage | 2 | 0 | 0 | Webhook editor. kind select offers only "webhook." |
data-risk+ the rule editor's Risk/Discover-PII kinds are ~80% of an agent-egress governance story already — they just say "traffic/PII," not "agents/LLMs." Highest- leverage, lowest-cost pivot in the set.- High-hanging: a dedicated Sensitive-Data → LLM flow view (consumers filtered to model endpoints, agent→model sankey, allowed/blocked overlay); an Agent-Behavior policy kind (rules over agent identity × destination model × sensitive-data class × spend ceiling); closed-loop enforcement actions (quarantine agent, revoke token, throttle egress) instead of notify-only webhooks.
Stacks / Plugins (the enforcement control plane)
| Page | S | F | E | Purpose & note |
|---|---|---|---|---|
/stacks | 3 | 1 | 1 | Stacks (policy bundles) list. Add adapter/domain counts + posture indicator. |
/stacks/new | 2 | 0 | 0 | Create stack. Add policy-intent templates. |
/stacks/settings | 2 | 0 | 1 | Stack config + delete. Needs change-audit + impact warning. |
/stacks/adapters | 4 | 1 | 2 | Ordered enforcement chain (drag-sort). The actual policy pipeline. |
/stacks/adapters/new | 3 | 1 | 1 | Adapter library. Reframe as a governance-control marketplace. |
/stacks/adapters/manage | 4 | 1 | 1 | Per-adapter config (delete is unverified — fix). Most policy-dense surface. |
/stacks/routing | 4 | 2 | 2 | Domain→stack binding. The allow/route decision surface. |
routing(binding) andadapters(enforcement) are the strongest control-plane surfaces but speak pure middleware. Inject an agent/identity dimension into routing (which agents may reach which LLM/MCP endpoints, default-deny, per-destination spend ceilings), add allowed/blocked/spend telemetry to adapters, and a coverage/posture rollup to the index. Surface uncovered egress (domains routed to "(none)").
Org Settings (configuration & access control)
| Page | S | F | E | Purpose & note |
|---|---|---|---|---|
/orgs/settings/mcp (+manage) | 5 | 2 | 4 | Most agent-native page in the app — registry of AI clients, each with a token and a dataset-view scope (contextId). |
/orgs/settings/views (+manage) | 5 | 1 | 3 | Named filtered data slices = the access-scope primitive MCP binds to. Agent data-access scoping. |
/orgs/settings/proxy | 5 | 2 | 4 | defaultDomainAction ALLOW/DENY + audit dest. The default egress stance for agents. |
/orgs/settings/team (+manage) | 4 | 1 | 3 | Rich human RBAC (Security Manager, Payload Viewer…). Human-only — agents aren't principals. |
/orgs/settings/deploy/preferences | 3 | 2 | 4 | Capabilities + data residency + SOC2 badges. Most executive-legible page. |
/orgs/settings/services (+manage) | 3 | 3 | 3 | Data stores (self-host vs cloud) + scanners. Real residency + cost trade-off. |
/orgs/settings/releases | 3 | 1 | 2 | Config release/rollback history. Make policy-aware + audited. |
/orgs/settings/qtap | 3 | 1 | 1 | Sensor capture (egress direction!) — gates whether agent egress is observable at all. |
/orgs/settings/sso | 3 | 0 | 2 | Human SSO. Extend to agent/workload identity. |
/orgs/settings/jwt | 3 | 0 | 1 | Workload→proxy token + ACL tags + HMAC. Latent agent-identity hook. |
/orgs/settings/tls | 3 | 0 | 1 | Root CA key/cert for egress inspection. Sensitive vault; add rotation/expiry. |
/orgs/settings/deployments (+manage) | 2 | 1 | 1 | Sensor registration tokens. Tie coverage to a governance KPI. |
/orgs/settings/endpoints | 2 | 0 | 1 | Default stacks for new endpoints. Make "default-governed" the out-of-box. |
/orgs/settings/tags | 1 | 1 | 0 | Custom tag mapping. Latent agent/cost-center attribution dimension. |
/orgs/settings/snapshot | 2 | 0 | 1 | Read-only qpoint.yaml dump. Could become policy-as-code source of truth. |
- Three pages already are agent governance and should anchor the pivot: MCP Clients (identity + credential + scope), Dataset Views (the scope primitive), and Proxy (default allow/deny egress). Together = the identity + scope + egress triad, but thin.
- Biggest latent capability already in code:
mcp/manage.vuebinds a client'scontextIdto a dataset view. Extend that into per-agent audit logs, rate/volume limits, token expiry/rotation, and an "All-access" warning → a governed agent registry with minimal conceptual stretch.
3. Score Summary (sorted views)
Top Security surfaces (anchor the pivot here): requests (5), data-risk (5),
rules/manage (5), mcp (5), views (5), proxy (5), then connections/clients/
vendors/api-tokens/security-overview/events/adapters/adapters-manage/routing/
team (4).
Top Executive surfaces: mcp (4), proxy (4), deploy/preferences (4); then
availability/security-overview/data-risk/vendors/views/team/services (3).
Finance — the whole column is weak. Nothing scores above 3 (vendors,
services). The vast majority are 0–1. This is the defining gap of the product relative
to the agent-governance mandate.
4. Persona Evaluation
Security / SecOps (CISO, Security Manager) — well served, mis-framed
- Pages: requests, connections, data-risk, security/overview, rules(+manage), events, mcp, views, proxy, api-tokens, clients, vendors, qtap, tls, jwt, team.
- How well served: Strongly. The forensic data (who called what, with which credential, carrying what payload, allowed or blocked) and the control plane (views, proxy, adapters, routing) are largely present.
- Gaps: No agent identity stitched across requests/connections/tokens/MCP; no unified "which agents, doing what, against what policy" view; alerting groups by rule, not by agent.
- Opportunities: Low — re-enable the commented-out Sensitive-Data column; promote
auth-token/sensitive-data to filters; verify the adapter delete. High — an Agent
Inventory/Registry that resolves
sourceExe+ tokens + MCP clients into one identity; an Agent-Risk Posture Board. 50k-ft overlay — a per-agent risk score rolled up from egress destinations, sensitive-data flows, and policy violations.
Finance / Spend owner — not served
- Pages: none owned today; nearest are vendors, bandwidth, services.
- How well served: Barely. The product measures bytes, never dollars or tokens. No budget, chargeback, or per-agent/per-vendor cost.
- Gaps: Everything. No spend dimension, no cost owner role, no budget alerts.
- Opportunities: Low — derive an "egress cost estimate" (bytes × per-GB/token rate) on vendors/bandwidth; add a "spend owner" team role. High — a net-new Agent Spend & Cost Report (token/$ per agent per LLM vendor, budget burn, MoM trend) and spend- ceiling alert rules. 50k-ft overlay — cost attribution by tag/cost-center so spend rolls up per agent, team, and vendor for chargeback.
Executive (board-level posture/ROI) — partially served, no home
- Pages: deploy/preferences (capabilities+residency+SOC2), security/overview (dials), data-risk (flow viz), mcp, proxy.
- How well served: Partially. The ingredients of a posture story exist but are scattered across operator pages; nothing is packaged for a board.
- Gaps: No single posture/ROI surface; no "agents governed," "egress default-deny on/ off," "open high-risk findings," "$ at risk," or trend; nothing exportable.
- Opportunities: Low — turn
deploy/preferencesinto a posture scorecard (coverage %, governed agents, egress stance, open findings). High — a net-new Agent Governance Posture Board + a board-ready report/export. 50k-ft overlay — a single governance index (posture score) trended over time with drill-down.
5. Additional Personas to Consider
The prompt names Security / Finance / Executive and asks "others?". From the page grouping, five more personas clearly exist in the product today:
| Persona | Served by | Verdict on adding a scoring column |
|---|---|---|
| Engineering / Platform (DevOps/SRE) | stacks/*, deployments, install, snapshot, qtap, tls, jwt, endpoints, routing, performance, availability | Yes — primary builder/operator. Owns the enforcement control plane; deserves its own column. The single biggest non-listed persona. |
| Operations / Alert Manager | alerting/* | Partial overlap with Security; could fold into Security or track separately if an on-call function is distinct. |
| Compliance / Privacy / Legal | data-risk, views, services (residency), sso, deploy/preferences (SOC2) | Yes — recommend adding. Data-residency, PII flows, and SOC2 are a distinct mandate from SecOps and increasingly central to AI governance. |
| Data Analyst | traffic/, inventory/, geolocation | Lower governance relevance; consumer of observability, not a governance owner. Optional. |
| Procurement / Vendor manager | vendors | A finance sub-persona; the AI-vendor inventory (DPA status, sanctioned/shadow-AI) is procurement-relevant. Fold under Finance. |
Recommendation for Phase 2 scoring: keep Security / Finance / Executive as the headline columns, and add Engineering/Platform and Compliance/Privacy as secondary columns — they own real pages today and the pivot increases their importance.
6. Executive & Finance Overview Gaps — Net-New Pages (Phase 2 candidates)
The prompt's headline question — "are there opportunities for executive overview pages and reports that do not exist in our wireframe?" — answers yes. Synthesizing the high-hanging opportunities across all sections, six net-new surfaces are missing, none of which exist in wf1 today. These are the candidate page set for the Phase 2 mockups.
- Agent Governance Posture Board (Executive, Security) — one-glance board view:
governed-agent count, sensor/egress coverage %, egress stance (default-deny on/off),
open high-risk findings, a single governance index trended over time. Seed:
security/overviewdials +deploy/preferences. - Agent Spend & Cost Report (Finance, Executive) — token/$ spend per agent per LLM
vendor, budget burn, MoM trend, top cost drivers. Closes the product's single biggest
gap. Seed:
bandwidth+vendors(bytes → tokens → $). - Agent Inventory / Registry (Security, Executive) — every agent as a first-class
identity: owner, model/runtime, credentials, data-scope (dataset view), risk score, last
seen, spend. Seed:
mcpclients +inventory/clients+api-tokens. - Sensitive-Data → LLM Flow (Security, Compliance) — producer→consumer sankey
filtered to model endpoints, with an allowed/blocked overlay and drill-to-samples. Seed:
security/data-risk. - Agent Egress Control Matrix (Security, Engineering) — which agents may reach which
LLM/MCP/3rd-party endpoints, default-deny posture, per-destination spend ceilings, live
"uncovered egress" alerting. Seed:
routing+proxy+adapters. - Agent Risk Register / Board Report (Executive, Compliance) — ranked open agent-risk
findings with owner, status, and $ exposure; exportable board-ready report. Seed:
alerting/events+security/overviewissues.
Recommended Phase 2 lead set: the Posture Board (#1), Spend & Cost Report (#2), and Agent Inventory (#3) — together they cover all three primary stakeholders, close the Finance gap, and tell the clearest agent-governance story. #4–#6 are strong follow-ons.
Appendix — Cheapest wins already in the codebase
- Re-enable commented-out "Sensitive Data" column (
inventory/clients,endpoints,vendors) and "Last Used" column (api-tokens). - Fill the empty Capabilities/Hosting stubs in the
/orgs/configurewizard. - Make
/stacks/adapters/managedelete verified (currently:verify="false"). - Add an "All-access" warning badge on MCP clients scoped to
contextId = null. - Add an agent/identity option to
traffic/components/usage/GroupBy.vue— lifts scores across every analytics page.