[{"data":1,"prerenderedAt":1026},["ShallowReactive",2],{"cycle-doc-bob-wire-c19-precedents.md":3},{"cycle":4,"project":7,"path":10,"title":11,"toc":12,"ast":19},{"id":5,"title":6},"c19","AI Asset Inventory",{"id":8,"label":9},"bob-wire","Bob-Wire","precedents.md","AI Asset Inventory — Precedent Research",[13,14,15,16,17,18],"Short answer","Precedent survey","Round 2 — general inventory precedents (non-AI)","Extracted patterns","What nobody draws yet","Implications for the c19 brief",{"type":20,"children":21},"root",[22,39,58,64,109,114,121,160,184,201,218,224,248,254,279,285,316,322,346,352,414,419,424,430,456,462,481,487,499,505,538,544,601,606,611,709,714,802,807,854,859,968,972],{"type":23,"tag":24,"props":25,"children":26},"element","p",{},[27,30,37],{"type":28,"value":29},"text","Survey of how existing products present \"inventory\" pages relevant to Qpoint's AI asset inventory (agents, MCP servers, files, models, etc.). Plan in ",{"type":23,"tag":31,"props":32,"children":34},"a",{"href":33},"\u002Fcycles\u002Fbob-wire\u002Fc19\u002Fdoc\u002Fresearch-plan",[35],{"type":28,"value":36},"research-plan.md",{"type":28,"value":38},"; executed 2026-07-31.",{"type":23,"tag":24,"props":40,"children":41},{},[42,48,50,56],{"type":23,"tag":43,"props":44,"children":45},"strong",{},[46],{"type":28,"value":47},"Screenshots:",{"type":28,"value":49}," product screenshots are in ",{"type":23,"tag":31,"props":51,"children":53},{"href":52},"\u002Fcycles\u002Fbob-wire\u002Fc19\u002Fdoc\u002Fprecedents\u002FREADME",[54],{"type":28,"value":55},"precedents\u002F",{"type":28,"value":57}," (Defender AI agent inventory + details panes, Wiz AI-SPM inventory\u002Fdashboard\u002Fattack-path, Foundry agent store, Docker MCP Toolkit catalog, Langfuse tracing, Astrix NHI discovery, Axonius asset search).",{"type":23,"tag":59,"props":60,"children":62},"h2",{"id":61},"short-answer",[63],{"type":28,"value":13},{"type":23,"tag":24,"props":65,"children":66},{},[67,69,74,76,81,83,88,90,95,97,101,103,107],{"type":28,"value":68},"The AI asset inventory is no longer speculative — ",{"type":23,"tag":43,"props":70,"children":71},{},[72],{"type":28,"value":73},"Microsoft ships \"Assets > AI Agents\" in the Defender portal today",{"type":28,"value":75},", with columns almost identical to Qpoint's intended entity mix: agent name, platform, publish status, ",{"type":23,"tag":43,"props":77,"children":78},{},[79],{"type":28,"value":80},"MCP servers count",{"type":28,"value":82},", discovered tools, active alerts, risk level. Wiz ships an AI-BOM inventory of models\u002Fservices\u002FSDKs. The grammar everywhere is the same: ",{"type":23,"tag":43,"props":84,"children":85},{},[86],{"type":28,"value":87},"filterable table + posture columns + slide-in detail pane",{"type":28,"value":89},", with a dashboard of prioritized risks sitting above the raw list. What nobody unifies yet is the full actor set Qpoint sees — agents ",{"type":23,"tag":43,"props":91,"children":92},{},[93],{"type":28,"value":94},"and",{"type":28,"value":96}," MCP servers ",{"type":23,"tag":43,"props":98,"children":99},{},[100],{"type":28,"value":94},{"type":28,"value":102}," files ",{"type":23,"tag":43,"props":104,"children":105},{},[106],{"type":28,"value":94},{"type":28,"value":108}," model endpoints in one inventory with usage evidence behind each row.",{"type":23,"tag":59,"props":110,"children":112},{"id":111},"precedent-survey",[113],{"type":28,"value":14},{"type":23,"tag":115,"props":116,"children":118},"h3",{"id":117},"_1-ai-spm-ai-security-inventories",[119],{"type":28,"value":120},"1. AI-SPM \u002F AI security inventories",{"type":23,"tag":24,"props":122,"children":123},{},[124,129,131,135,137,142,144,151,153,158],{"type":23,"tag":43,"props":125,"children":126},{},[127],{"type":28,"value":128},"Microsoft Defender XDR — AI agent inventory",{"type":28,"value":130}," (closest precedent). A first-class asset class in the Defender portal (Assets > AI Agents). Table columns: agent name, platform (Copilot Studio, Foundry, M365, non-Microsoft), publish status, ",{"type":23,"tag":43,"props":132,"children":133},{},[134],{"type":28,"value":80},{"type":28,"value":136},", discovered tools, active alerts, creation time — plus risk level, risk indicators, and recommendation counts. Filter by name\u002Fplatform\u002Fpublish-status\u002Frisk; columns are customizable. Clicking a row opens a ",{"type":23,"tag":43,"props":138,"children":139},{},[140],{"type":28,"value":141},"details side pane",{"type":28,"value":143}," (not a page-nav): description, version, model, tools, channels, MCP servers. Also queryable as data via Advanced Hunting (",{"type":23,"tag":145,"props":146,"children":148},"code",{"className":147},[],[149],{"type":28,"value":150},"AgentsInfo",{"type":28,"value":152},"). Covers both platform-registered agents and ",{"type":23,"tag":43,"props":154,"children":155},{},[156],{"type":28,"value":157},"local agents discovered on endpoints",{"type":28,"value":159}," — the sanctioned + shadow split in one list.",{"type":23,"tag":24,"props":161,"children":162},{},[163,168,170,175,177,182],{"type":23,"tag":43,"props":164,"children":165},{},[166],{"type":28,"value":167},"Wiz AI-SPM.",{"type":28,"value":169}," Extends the cloud inventory to AI: an agentless ",{"type":23,"tag":43,"props":171,"children":172},{},[173],{"type":28,"value":174},"AI-BOM",{"type":28,"value":176}," of every AI service, SDK, model, and training-data store detected in the environment (\"immediately detect new AI services introduced into the environment\" — shadow-AI framing). Above the inventory sits an ",{"type":23,"tag":43,"props":178,"children":179},{},[180],{"type":28,"value":181},"AI security dashboard",{"type":28,"value":183}," with a prioritized queue of contextualized risks; attack-path analysis renders AI pipeline risk as a graph. Pattern: inventory = evidence layer, dashboard = meaning layer, graph = blast-radius layer.",{"type":23,"tag":24,"props":185,"children":186},{},[187,192,194,199],{"type":23,"tag":43,"props":188,"children":189},{},[190],{"type":28,"value":191},"Zenity",{"type":28,"value":193}," (no capture — JS site). Markets a \"live inventory of every AI agent\" across Copilot Studio, ChatGPT Enterprise, Agentforce, plus homegrown (Foundry\u002FBedrock\u002FVertex) — with ",{"type":23,"tag":43,"props":195,"children":196},{},[197],{"type":28,"value":198},"ownership, permissions, integrations, and risk",{"type":28,"value":200}," per agent, explicitly pitched at uncovering shadow AI. Confirms the column set: who created it, what tools it uses, what systems it touches.",{"type":23,"tag":24,"props":202,"children":203},{},[204,209,211,216],{"type":23,"tag":43,"props":205,"children":206},{},[207],{"type":28,"value":208},"Astrix",{"type":28,"value":210}," (stylized visual only). Non-human-identity inventory: service accounts, OAuth apps, API keys, and now AI agents\u002FMCP. Their hero visualization is instructive framing: ",{"type":23,"tag":43,"props":212,"children":213},{},[214],{"type":28,"value":215},"one big count (1,500 integrations) broken down by risk (75 high \u002F 425 medium \u002F 1,000 low)",{"type":28,"value":217}," with connected-platform icons — concentration-first, list second.",{"type":23,"tag":115,"props":219,"children":221},{"id":220},"_2-agent-observability",[222],{"type":28,"value":223},"2. Agent observability",{"type":23,"tag":24,"props":225,"children":226},{},[227,232,234,239,241,246],{"type":23,"tag":43,"props":228,"children":229},{},[230],{"type":28,"value":231},"Langfuse.",{"type":28,"value":233}," Dev-facing rather than security-facing: the inventory-like surfaces are the ",{"type":23,"tag":43,"props":235,"children":236},{},[237],{"type":28,"value":238},"trace list",{"type":28,"value":240}," (per-trace model, tokens, cost, latency) and per-model\u002Fper-user cost aggregations. The lesson for Qpoint is the ",{"type":23,"tag":43,"props":242,"children":243},{},[244],{"type":28,"value":245},"usage evidence",{"type":28,"value":247},": every asset row can carry observed activity (calls, tokens, cost, last-seen) rather than just registration metadata. LangSmith\u002FArize\u002FGalileo follow the same shape (not captured).",{"type":23,"tag":115,"props":249,"children":251},{"id":250},"_3-cloud-consoles",[252],{"type":28,"value":253},"3. Cloud consoles",{"type":23,"tag":24,"props":255,"children":256},{},[257,262,264,269,271,277],{"type":23,"tag":43,"props":258,"children":259},{},[260],{"type":28,"value":261},"Azure AI Foundry.",{"type":28,"value":263}," Agents are a left-nav list per project; published agents appear in an ",{"type":23,"tag":43,"props":265,"children":266},{},[267],{"type":28,"value":268},"Agent Store \u002F registry",{"type":28,"value":270}," — a card catalog with publisher and description. First-party consoles inventory only ",{"type":23,"tag":272,"props":273,"children":274},"em",{},[275],{"type":28,"value":276},"their own",{"type":28,"value":278}," agents — which is exactly the gap third-party inventories (Defender, Zenity, Qpoint) exist to close: cross-platform + shadow coverage. AWS Bedrock \u002F Vertex not captured but same shape (per-service resource lists).",{"type":23,"tag":115,"props":280,"children":282},{"id":281},"_4-mcp-registries-gateways",[283],{"type":28,"value":284},"4. MCP registries & gateways",{"type":23,"tag":24,"props":286,"children":287},{},[288,293,295,300,302,307,309,314],{"type":23,"tag":43,"props":289,"children":290},{},[291],{"type":28,"value":292},"Docker MCP Catalog \u002F Toolkit.",{"type":28,"value":294}," MCP servers presented as a ",{"type":23,"tag":43,"props":296,"children":297},{},[298],{"type":28,"value":299},"card catalog",{"type":28,"value":301}," (icon, name, publisher, description, tool count), discoverable by capability\u002Fcategory. The trust story is the differentiator: ",{"type":23,"tag":43,"props":303,"children":304},{},[305],{"type":28,"value":306},"verified-publisher vs community badges",{"type":28,"value":308},", signed images, SBOMs, provenance. The official MCP registry is API-only; Smithery is the same card-catalog shape. Nobody presents MCP servers as ",{"type":23,"tag":272,"props":310,"children":311},{},[312],{"type":28,"value":313},"observed infrastructure in your environment",{"type":28,"value":315}," — registries answer \"what can I install,\" not \"what is running and is it sanctioned.\"",{"type":23,"tag":115,"props":317,"children":319},{"id":318},"_5-classic-inventory-grammar",[320],{"type":28,"value":321},"5. Classic inventory grammar",{"type":23,"tag":24,"props":323,"children":324},{},[325,330,332,337,339,344],{"type":23,"tag":43,"props":326,"children":327},{},[328],{"type":28,"value":329},"Axonius",{"type":28,"value":331}," (cyber-asset management). The mature reference: one huge table per asset class (Devices, Software, …), a ",{"type":23,"tag":43,"props":333,"children":334},{},[335],{"type":28,"value":336},"query wizard",{"type":28,"value":338}," composing filter expressions over any field (\"Windows devices seen in last 7 days\"), saved queries, and an asset graph for relationships. ",{"type":23,"tag":43,"props":340,"children":341},{},[342],{"type":28,"value":343},"Last-seen recency is a first-class field",{"type":28,"value":345}," — inventories are about observed presence, not registration. ServiceNow CMDB \u002F SaaS-management \u002F API-inventory tools share the grammar: facets + query + table + detail + freshness.",{"type":23,"tag":115,"props":347,"children":349},{"id":348},"_6-internal-prior-art-bob-wire",[350],{"type":28,"value":351},"6. Internal prior art (bob-wire)",{"type":23,"tag":353,"props":354,"children":355},"ul",{},[356,382],{"type":23,"tag":357,"props":358,"children":359},"li",{},[360,365,367,372,374,380],{"type":23,"tag":43,"props":361,"children":362},{},[363],{"type":28,"value":364},"c6",{"type":28,"value":366}," built the raw inventory surface; ",{"type":23,"tag":43,"props":368,"children":369},{},[370],{"type":28,"value":371},"c12",{"type":28,"value":373}," refined it: a category thesis per entity class, list + representative-detail pages, jump selects between them, and ",{"type":23,"tag":145,"props":375,"children":377},{"className":376},[],[378],{"type":28,"value":379},"repos",{"type":28,"value":381}," added as a first-class entity. c12's \"every category page answers what matters about that entity type\" is a stronger idea than any external precedent's generic table and should survive.",{"type":23,"tag":357,"props":383,"children":384},{},[385,390,392,398,400,405,406,412],{"type":23,"tag":43,"props":386,"children":387},{},[388],{"type":28,"value":389},"c16 fleet data",{"type":28,"value":391}," (",{"type":23,"tag":145,"props":393,"children":395},{"className":394},[],[396],{"type":28,"value":397},"app\u002Fdata\u002Fc16-fleet.ts",{"type":28,"value":399},") already carries the agent\u002FMCP vocabulary (agents, findings, policy state) an inventory would be built from; ",{"type":23,"tag":43,"props":401,"children":402},{},[403],{"type":28,"value":404},"c13",{"type":28,"value":391},{"type":23,"tag":145,"props":407,"children":409},{"className":408},[],[410],{"type":28,"value":411},"ai-agent-policies.ts",{"type":28,"value":413},") has the actor\u002Ftrust vocabulary.",{"type":23,"tag":59,"props":415,"children":417},{"id":416},"round-2-general-inventory-precedents-non-ai",[418],{"type":28,"value":15},{"type":23,"tag":24,"props":420,"children":421},{},[422],{"type":28,"value":423},"A second pass over inventory UIs from any domain, read for grammar rather than competition.",{"type":23,"tag":115,"props":425,"children":427},{"id":426},"netbox-networkinfrastructure-inventory-dcimipam",[428],{"type":28,"value":429},"NetBox — network\u002Finfrastructure inventory (DCIM\u002FIPAM)",{"type":23,"tag":24,"props":431,"children":432},{},[433,435,440,442,447,449,454],{"type":28,"value":434},"The strongest open-source example of a multi-class inventory. The ",{"type":23,"tag":43,"props":436,"children":437},{},[438],{"type":28,"value":439},"home dashboard is a wall of per-object-class counts",{"type":28,"value":441}," (devices, IPs, prefixes, racks, connections…) — each count is the door into that class's list. List views are dense tables with two ideas worth stealing: ",{"type":23,"tag":43,"props":443,"children":444},{},[445],{"type":28,"value":446},"inline utilization bars",{"type":28,"value":448}," (a prefix row shows its usage as a bar, not a number) and ",{"type":23,"tag":43,"props":450,"children":451},{},[452],{"type":28,"value":453},"status as a colored badge vocabulary",{"type":28,"value":455}," shared across all object classes (active\u002Fplanned\u002Fdeprecated). Every object class gets the same table grammar — columns differ, the rhythm doesn't.",{"type":23,"tag":115,"props":457,"children":459},{"id":458},"backstage-software-catalog",[460],{"type":28,"value":461},"Backstage — software catalog",{"type":23,"tag":24,"props":463,"children":464},{},[465,467,472,474,479],{"type":28,"value":466},"Spotify's internal-software inventory, now the default answer to \"catalog of what we run.\" Its defining choice: ",{"type":23,"tag":43,"props":468,"children":469},{},[470],{"type":28,"value":471},"ownership is the first-class column",{"type":28,"value":473}," — every entity (service, website, library, ML model) must have an owner, and the catalog is pitched as \"who owns what, made discoverable.\" Type\u002Flifecycle\u002Fowner columns + tag filters; entity detail is a full page with relations (part-of-system, depends-on). The catalog is fed by ",{"type":23,"tag":43,"props":475,"children":476},{},[477],{"type":28,"value":478},"metadata files colocated with code",{"type":28,"value":480}," and harvested — registration is decentralized, the inventory is the aggregation.",{"type":23,"tag":115,"props":482,"children":484},{"id":483},"ralph-it-asset-management",[485],{"type":28,"value":486},"Ralph — IT asset management",{"type":23,"tag":24,"props":488,"children":489},{},[490,492,497],{"type":28,"value":491},"Open-source ITAM\u002FDCIM from Allegro: the traditional back-office inventory — hardware assets with lifecycle (in-use \u002F spare \u002F liquidated), location, owner, and financials. Representative of the ITAM genus (Snipe-IT, GLPI): inventories where the ",{"type":23,"tag":43,"props":493,"children":494},{},[495],{"type":28,"value":496},"lifecycle state machine",{"type":28,"value":498}," is the core column, a dimension the security tools mostly lack.",{"type":23,"tag":115,"props":500,"children":502},{"id":501},"tenable-vulnerability-centric-asset-inventory",[503],{"type":28,"value":504},"Tenable — vulnerability-centric asset inventory",{"type":23,"tag":24,"props":506,"children":507},{},[508,510,515,517,522,524,529,531,536],{"type":28,"value":509},"Explore > Assets: one table for hosts, web apps, cloud resources, and identities, with ",{"type":23,"tag":43,"props":511,"children":512},{},[513],{"type":28,"value":514},"computed scores as columns",{"type":28,"value":516}," — exposure score and ",{"type":23,"tag":272,"props":518,"children":519},{},[520],{"type":28,"value":521},"asset criticality rating",{"type":28,"value":523}," per row — plus source (which scanner\u002Fconnector saw it) and last-seen. The notable move: the inventory doesn't just list assets, it ",{"type":23,"tag":43,"props":525,"children":526},{},[527],{"type":28,"value":528},"ranks them by how much they matter",{"type":28,"value":530},", and shows ",{"type":23,"tag":272,"props":532,"children":533},{},[534],{"type":28,"value":535},"provenance of the observation",{"type":28,"value":537}," (which sensor reported this asset) as a column.",{"type":23,"tag":115,"props":539,"children":541},{"id":540},"surveyed-without-capture",[542],{"type":28,"value":543},"Surveyed without capture",{"type":23,"tag":353,"props":545,"children":546},{},[547,557,567,591],{"type":23,"tag":357,"props":548,"children":549},{},[550,555],{"type":23,"tag":43,"props":551,"children":552},{},[553],{"type":28,"value":554},"Intune \u002F Jamf \u002F device fleets",{"type":28,"value":556}," — Devices > All devices: compliance state as the hero column (compliant\u002Fnon-compliant badge), OS\u002Fversion columns, bulk actions on selection. The fleet grammar is table + compliance badge + remote-action toolbar.",{"type":23,"tag":357,"props":558,"children":559},{},[560,565],{"type":23,"tag":43,"props":561,"children":562},{},[563],{"type":28,"value":564},"ServiceNow CMDB",{"type":28,"value":566}," — the maximal precedent: every asset a configuration item in classed tables with relationship maps. Its known failure mode is the cautionary tale: CMDBs decay when population is manual — inventories must be fed by observation, not data entry (Axonius\u002FTenable\u002FQpoint all exist because of this).",{"type":23,"tag":357,"props":568,"children":569},{},[570,575,577,582,584,589],{"type":23,"tag":43,"props":571,"children":572},{},[573],{"type":28,"value":574},"Commerce stock inventories (Shopify\u002FWooCommerce\u002FSquare)",{"type":28,"value":576}," — a genuinely different genus: the row is a SKU and the core column is a ",{"type":23,"tag":43,"props":578,"children":579},{},[580],{"type":28,"value":581},"mutable quantity",{"type":28,"value":583}," with thresholds (low-stock alerts), adjustment history, and multi-location breakdown. The transferable idea is the ",{"type":23,"tag":272,"props":585,"children":586},{},[587],{"type":28,"value":588},"threshold alert on a per-row metric",{"type":28,"value":590},", not the layout.",{"type":23,"tag":357,"props":592,"children":593},{},[594,599],{"type":23,"tag":43,"props":595,"children":596},{},[597],{"type":28,"value":598},"GitHub dependency graph",{"type":28,"value":600}," — dependencies as an inventory: auto-detected from manifests, each row flagged with known vulnerabilities (Dependabot). Proof that \"inventory + advisory feed join\" reads naturally as a list with warning rows.",{"type":23,"tag":59,"props":602,"children":604},{"id":603},"extracted-patterns",[605],{"type":28,"value":16},{"type":23,"tag":24,"props":607,"children":608},{},[609],{"type":28,"value":610},"What the good inventory pages consistently do:",{"type":23,"tag":612,"props":613,"children":614},"ol",{},[615,625,642,652,662,672,689,699],{"type":23,"tag":357,"props":616,"children":617},{},[618,623],{"type":23,"tag":43,"props":619,"children":620},{},[621],{"type":28,"value":622},"Counts before rows.",{"type":28,"value":624}," A summary strip — total assets, breakdown by risk or type, what's new — sits above the table (Astrix's 1,500-by-risk, Wiz's dashboard queue, Defender's alert counts).",{"type":23,"tag":357,"props":626,"children":627},{},[628,633,635,640],{"type":23,"tag":43,"props":629,"children":630},{},[631],{"type":28,"value":632},"Table, not cards, for owned assets.",{"type":28,"value":634}," Cards appear only in ",{"type":23,"tag":272,"props":636,"children":637},{},[638],{"type":28,"value":639},"marketplace",{"type":28,"value":641}," contexts (Docker catalog, Foundry store). Everything that answers \"what's in my environment\" is a dense filterable table.",{"type":23,"tag":357,"props":643,"children":644},{},[645,650],{"type":23,"tag":43,"props":646,"children":647},{},[648],{"type":28,"value":649},"Posture as columns.",{"type":28,"value":651}," Risk level, active alerts, publish status, recommendations — the governance story is carried in 2–3 badge columns on the row, not on a separate page.",{"type":23,"tag":357,"props":653,"children":654},{},[655,660],{"type":23,"tag":43,"props":656,"children":657},{},[658],{"type":28,"value":659},"Slide-in detail pane first, full page second.",{"type":28,"value":661}," Defender's details pane keeps you in the list while answering \"what is this agent\"; deep-dive is a second click.",{"type":23,"tag":357,"props":663,"children":664},{},[665,670],{"type":23,"tag":43,"props":666,"children":667},{},[668],{"type":28,"value":669},"Relationship counts as columns.",{"type":28,"value":671}," Defender's \"MCP servers: 3\" and \"discovered tools: 12\" per agent row — cross-entity linkage compressed to a number that invites the drill.",{"type":23,"tag":357,"props":673,"children":674},{},[675,680,682,687],{"type":23,"tag":43,"props":676,"children":677},{},[678],{"type":28,"value":679},"Shadow vs sanctioned in one list.",{"type":28,"value":681}," Defender mixes endpoint-discovered local agents with platform-registered ones; Wiz leads with \"detect new AI services immediately.\" The unapproved asset is a ",{"type":23,"tag":272,"props":683,"children":684},{},[685],{"type":28,"value":686},"row with a flag",{"type":28,"value":688},", not a separate product area.",{"type":23,"tag":357,"props":690,"children":691},{},[692,697],{"type":23,"tag":43,"props":693,"children":694},{},[695],{"type":28,"value":696},"Observed presence over registration.",{"type":28,"value":698}," Axonius's last-seen, Langfuse's usage\u002Fcost — credible inventories prove the asset is real and active, not just declared.",{"type":23,"tag":357,"props":700,"children":701},{},[702,707],{"type":23,"tag":43,"props":703,"children":704},{},[705],{"type":28,"value":706},"Trust\u002Fverification badges for third-party components.",{"type":28,"value":708}," Docker's verified-publisher markers are the model for MCP-server rows: provenance is a column.",{"type":23,"tag":24,"props":710,"children":711},{},[712],{"type":28,"value":713},"Added by Round 2:",{"type":23,"tag":612,"props":715,"children":717},{"start":716},9,[718,728,738,748,758,775,785],{"type":23,"tag":357,"props":719,"children":720},{},[721,726],{"type":23,"tag":43,"props":722,"children":723},{},[724],{"type":28,"value":725},"Per-class counts as the front door.",{"type":28,"value":727}," NetBox's dashboard of object-class counts is the cleanest multi-entity entry point — each count is a link into that class's list (converges with pattern 1).",{"type":23,"tag":357,"props":729,"children":730},{},[731,736],{"type":23,"tag":43,"props":732,"children":733},{},[734],{"type":28,"value":735},"Every asset has an owner.",{"type":28,"value":737}," Backstage makes ownership mandatory and primary; an inventory row without an accountable owner is an open question, not a record.",{"type":23,"tag":357,"props":739,"children":740},{},[741,746],{"type":23,"tag":43,"props":742,"children":743},{},[744],{"type":28,"value":745},"Inline micro-visualizations on rows.",{"type":28,"value":747}," NetBox's utilization bars — a per-row metric rendered as a bar\u002Fspark beats a numeric column for scanning.",{"type":23,"tag":357,"props":749,"children":750},{},[751,756],{"type":23,"tag":43,"props":752,"children":753},{},[754],{"type":28,"value":755},"Computed rank, not just state.",{"type":28,"value":757}," Tenable's exposure + criticality scores order the inventory by how much each asset matters, not alphabetically.",{"type":23,"tag":357,"props":759,"children":760},{},[761,766,768,773],{"type":23,"tag":43,"props":762,"children":763},{},[764],{"type":28,"value":765},"Observation provenance as a column.",{"type":28,"value":767}," Tenable shows ",{"type":23,"tag":272,"props":769,"children":770},{},[771],{"type":28,"value":772},"which sensor saw this asset",{"type":28,"value":774},"; for multi-source inventories, \"how do we know\" belongs on the row.",{"type":23,"tag":357,"props":776,"children":777},{},[778,783],{"type":23,"tag":43,"props":779,"children":780},{},[781],{"type":28,"value":782},"Lifecycle state machines.",{"type":28,"value":784}," ITAM's in-use\u002Fspare\u002Fretired dimension — sanctioned AI assets will need approved\u002Ftrial\u002Fdeprecated states, not just risk states.",{"type":23,"tag":357,"props":786,"children":787},{},[788,793,795,800],{"type":23,"tag":43,"props":789,"children":790},{},[791],{"type":28,"value":792},"Fed by observation, not data entry.",{"type":28,"value":794}," The CMDB decay lesson: rows must appear because something was ",{"type":23,"tag":272,"props":796,"children":797},{},[798],{"type":28,"value":799},"seen",{"type":28,"value":801}," (harvested metadata, network traffic, scanners), never because someone typed them in.",{"type":23,"tag":59,"props":803,"children":805},{"id":804},"what-nobody-draws-yet",[806],{"type":28,"value":17},{"type":23,"tag":353,"props":808,"children":809},{},[810,827,837],{"type":23,"tag":357,"props":811,"children":812},{},[813,818,820,825],{"type":23,"tag":43,"props":814,"children":815},{},[816],{"type":28,"value":817},"The unified actor inventory.",{"type":28,"value":819}," Defender inventories agents (MCP servers only as a count column); Docker catalogs MCP servers (but as a marketplace, not your environment); nobody inventories ",{"type":23,"tag":43,"props":821,"children":822},{},[823],{"type":28,"value":824},"agents + MCP servers + files\u002Frepos + model endpoints as peer entity classes in one governed inventory",{"type":28,"value":826}," — which is exactly the c12\u002Fc16 direction with governance columns added.",{"type":23,"tag":357,"props":828,"children":829},{},[830,835],{"type":23,"tag":43,"props":831,"children":832},{},[833],{"type":28,"value":834},"Files as AI assets.",{"type":28,"value":836}," No precedent treats \"files\u002Fdata touched by agents\" as an inventory class; DSPM tools inventory data stores but don't join them to agent activity.",{"type":23,"tag":357,"props":838,"children":839},{},[840,845,847,852],{"type":23,"tag":43,"props":841,"children":842},{},[843],{"type":28,"value":844},"Traffic-grounded evidence.",{"type":28,"value":846}," Every security precedent infers from platform APIs and cloud config; none grounds each row in ",{"type":23,"tag":272,"props":848,"children":849},{},[850],{"type":28,"value":851},"observed wire traffic",{"type":28,"value":853}," the way Qpoint can (per-asset usage evidence à la Langfuse, but from the network).",{"type":23,"tag":59,"props":855,"children":857},{"id":856},"implications-for-the-c19-brief",[858],{"type":28,"value":18},{"type":23,"tag":612,"props":860,"children":861},{},[862,874,886,898,910,920,932,944,956],{"type":23,"tag":357,"props":863,"children":864},{},[865,867,872],{"type":28,"value":866},"Lead with a ",{"type":23,"tag":43,"props":868,"children":869},{},[870],{"type":28,"value":871},"summary strip",{"type":28,"value":873},": total AI assets, by type, by posture, new-this-week — before any table.",{"type":23,"tag":357,"props":875,"children":876},{},[877,879,884],{"type":28,"value":878},"One inventory, ",{"type":23,"tag":43,"props":880,"children":881},{},[882],{"type":28,"value":883},"segmented by entity class",{"type":28,"value":885}," (agents \u002F MCP servers \u002F models \u002F files-repos), each class with its own thesis columns (c12 pattern) but a shared row grammar.",{"type":23,"tag":357,"props":887,"children":888},{},[889,891,896],{"type":28,"value":890},"Carry posture in ",{"type":23,"tag":43,"props":892,"children":893},{},[894],{"type":28,"value":895},"3 badge columns max",{"type":28,"value":897},": sanctioned\u002Fshadow status, risk\u002Ftrust level, open findings count.",{"type":23,"tag":357,"props":899,"children":900},{},[901,903,908],{"type":28,"value":902},"Put ",{"type":23,"tag":43,"props":904,"children":905},{},[906],{"type":28,"value":907},"relationship counts",{"type":28,"value":909}," on rows (agent → MCP servers, tools, files touched) as the drill invitation.",{"type":23,"tag":357,"props":911,"children":912},{},[913,918],{"type":23,"tag":43,"props":914,"children":915},{},[916],{"type":28,"value":917},"Last-seen \u002F usage evidence on every row",{"type":28,"value":919}," — the Qpoint differentiator; consider a sparkline or call count per asset.",{"type":23,"tag":357,"props":921,"children":922},{},[923,925,930],{"type":28,"value":924},"Row click opens a ",{"type":23,"tag":43,"props":926,"children":927},{},[928],{"type":28,"value":929},"detail pane",{"type":28,"value":931},", not a page; full detail page is the second hop (matches Defender and c12's list→detail rhythm).",{"type":23,"tag":357,"props":933,"children":934},{},[935,937,942],{"type":28,"value":936},"Flag ",{"type":23,"tag":43,"props":938,"children":939},{},[940],{"type":28,"value":941},"shadow assets inline",{"type":28,"value":943}," with a filter chip, never as a separate page.",{"type":23,"tag":357,"props":945,"children":946},{},[947,949,954],{"type":28,"value":948},"MCP-server rows get ",{"type":23,"tag":43,"props":950,"children":951},{},[952],{"type":28,"value":953},"provenance\u002Fverification badges",{"type":28,"value":955}," (known publisher vs unknown), borrowing Docker's trust grammar.",{"type":23,"tag":357,"props":957,"children":958},{},[959,961,966],{"type":28,"value":960},"Keep a ",{"type":23,"tag":43,"props":962,"children":963},{},[964],{"type":28,"value":965},"query\u002Ffilter affordance",{"type":28,"value":967}," stronger than dropdowns (Axonius direction) but wireframe-simple: a filter bar with composable chips.",{"type":23,"tag":24,"props":969,"children":970},{},[971],{"type":28,"value":713},{"type":23,"tag":612,"props":973,"children":975},{"start":974},10,[976,986,996,1006,1016],{"type":23,"tag":357,"props":977,"children":978},{},[979,984],{"type":23,"tag":43,"props":980,"children":981},{},[982],{"type":28,"value":983},"Owner column on every entity class",{"type":28,"value":985}," (Backstage) — for agents especially: who runs this agent is as important as what it touches.",{"type":23,"tag":357,"props":987,"children":988},{},[989,994],{"type":23,"tag":43,"props":990,"children":991},{},[992],{"type":28,"value":993},"Usage as an inline bar\u002Fspark per row",{"type":28,"value":995}," (NetBox utilization) — render the traffic-evidence differentiator visually, not as a raw count.",{"type":23,"tag":357,"props":997,"children":998},{},[999,1004],{"type":23,"tag":43,"props":1000,"children":1001},{},[1002],{"type":28,"value":1003},"Order by computed importance",{"type":28,"value":1005}," (Tenable) — a risk-or-usage rank as the default sort, so the inventory opens on what matters.",{"type":23,"tag":357,"props":1007,"children":1008},{},[1009,1014],{"type":23,"tag":43,"props":1010,"children":1011},{},[1012],{"type":28,"value":1013},"Show observation source per row",{"type":28,"value":1015}," (\"seen in traffic\", \"declared in config\", \"found on endpoint\") — Qpoint's wire-observation is a provenance story; make it a column, not a footnote.",{"type":23,"tag":357,"props":1017,"children":1018},{},[1019,1024],{"type":23,"tag":43,"props":1020,"children":1021},{},[1022],{"type":28,"value":1023},"Give sanctioned assets a lifecycle",{"type":28,"value":1025}," (ITAM approved\u002Ftrial\u002Fdeprecated) alongside the shadow flag, so the inventory governs the whole asset lifespan, not just discovery.",1794599415254]