Skip to content

Module I — inventory & discovery

Module I is the catalog of the estate: a passive, bus-driven inventory of everything that exists — agents, sessions, Claude Code instances, MCP servers, skills, tools, resources, models, providers and non-human identities. It discovers by listening, never by probing, and records only relationships, identifiers and liveness — never payloads. This page is the reference for what the catalog holds and what it deliberately does not.

Connectors emit observations, not entities. They publish normalized edge.observed and cost.sampled facts onto the event bus; the entities they imply are never sent. Module I materializes the core entity each observation names from its natural reference: an origin session/agent/ identity, an MCP server, a tool, a resource, a skill, and — from cost samples — a provider and a model (discovered, without pricing; FinOps owns that). Materialization is idempotent under at-least-once delivery: find-or-create on the natural key, so the same observation seen twice never duplicates an entity.

The module registers one entity of its own, inventory.catalog_entry — a discovery overlay attached to each materialized core entity. It records how a thing was found, not what it did: a list of signal sources, the hosts it was seen on, first- and last-seen timestamps, an occurrence count, and a liveness status of active or stale. A periodic staleness sweep marks an entry stale when it has not been seen within the configured window, and flips it back to active the moment it reappears; the sweep runs only over the tenants the module has actually observed (it cannot, and does not, enumerate tenants). The read surface is small and read-only: a summary count by kind and source, a paginated entities listing filterable by kind and status, and a single-entity detail view. Every read requires a tenant-scoped, namespaced read permission (the lowest viewer tier suffices); ingestion is high-frequency and not audited per write. Full shapes live in the event bus reference and the product’s typed interfaces.

Module I is a pure consumer. It subscribes to edge.observed, cost.sampled and finding.reported and writes only its own catalog overlay and the core entities it derives. It emits no events of its own and exposes no actuation surface — discovery is, by nature, observe-and-catalog. The references it persists arrive already redacted from the connectors; the module stores them verbatim and adds no raw detail of its own, so the minimal-data property is a property of the wire, upheld end to end.