Skip to content

Screens

loomster is a deployment of awslabs/loom. A fresh deploy stands up the infrastructure, but the app also has to be usable — and Loom’s own database init seeds almost nothing, so most screens start empty. The loom-seed Op fills them through Loom’s own API.

This page is the map from the running app to those decisions: for every screen, what data backs it, what each seed profile populates, and — where a screen is left empty — why that’s the right answer rather than a gap. The validation harness (npm run validate) enforces exactly this, screen by screen.

Two seed profiles are referenced throughout: foundation (the config an agent deploy needs — the default on the production tiers) and demo (foundation plus explorable content — the default on light). See Seeded defaults for the mechanics.

ScreenBacked byfoundationdemoEmpty by design
Taggingtags, tag profilesLoom’s platform tags + a loomster profilesame
Security → IAM Rolesmanaged_rolesimported agent rolesame
Security → Authorizersauthorizer_configsCognito authorizersame
Security → Approval Policiesapproval_policiesa default policyon foundation
Security → Permission Requestspermission_requestsone pending requeston foundation
Security → Identity Providersidentity_providersalways (see below)
Agentsagentsa deployed agenton foundation
Memorymemoriesa memoryon foundation
MCP Serversmcp_serversa sample serveron foundation
A2A Agentsa2a_agentsa registered agentwhen no A2A endpoint
Catalogthe five abovepopulatedon foundation
Settingsapp configLoom defaultsLoom defaultsNetworking / Infrastructure
Costs, Admin, Chat, Invocationsruntime (invocation records)a few demo invocationson foundation / until real use
Registrypreviewuntil you opt in

Loom’s own init seeds the three locked platform tags (loom:application, loom:group, loom:owner) and a set of demo-user-N tag profiles. loom-seed adds a loomster tag profile, and stamps every resource it creates with loom:application and loom:owner set to loomster — so its records are distinguishable from Loom’s demo data and anything entered by hand.

Five tabs. Two are the floor an agent deploy needs; two are demo content; one is deliberately never seeded.

  • IAM Rolesfoundation imports the shared-foundation agent execution role by ARN. Without a role here, the add-agent form’s role picker is empty and no agent can be deployed. Loom only supports importing existing roles (it assumes security admins create them out of band), which is exactly what loomster provisions.
  • Authorizersfoundation registers a Cognito authorizer pointed at the pool loomster provisions, so agents can use OAuth2/Cognito auth.
  • Approval Policiesdemo seeds one default notify-only policy, so the tab isn’t empty and the approval flow is visible.
  • Permission Requestsdemo seeds one pending request against the seeded role, so the review workflow is visible.
  • Identity Providersnever seeded. Registering an identity provider flips Loom out of its dev-auth bypass into real-OIDC mode: with no real IdP to authenticate against, every request then fails with “Missing authorization token” and the app locks itself out. You add a real provider here on a real deploy; a seeded one would only break a local or demo run. The harness checks this tab renders, and asserts nothing is in it.

The Catalog aggregates four resource types. On demo, loom-seed populates every one so the Catalog isn’t a wall of empty sections:

  • Agents — deploys one agent (loomster_demo_agent) via Loom’s own deploy path (build artifact → S3 → AgentCore runtime). Names must be identifier-style ([A-Za-z][A-Za-z0-9_]*), and the model is discovered from the catalog rather than hardcoded. The harness requires at least one agent that’s READY or CREATING — an all-FAILED list means the deploy path is broken and fails validation.
  • Memory — creates one memory resource with a summary strategy, so it actually processes events rather than sitting inert (a strategyless memory is valid but does nothing). Creating a memory calls Bedrock AgentCore; it’s free on the Floci emulator but a real (billable) resource on a live account, which is why it’s demo-only.
  • MCP Servers — registers one sample server. The create call doesn’t validate the endpoint, so a placeholder URL is fine.
  • A2A Agents — registers one agent. Unlike MCP, registration fetches the agent card from the endpoint, so it needs a reachable one. just local-up serves a static card from its proxy and sets LOOM_DEMO_A2A_URL; without a reachable endpoint the A2A section is left for you to fill.

On foundation, none of the Catalog is seeded — deploying an agent or creating a memory costs money on a live account, so the production tiers stay lean and leave that to you.

Settings is configuration, not content — and its empty states are correct defaults, not gaps. Nothing here needs seeding.

  • General — Loom serves working defaults (e.g. cpu_io_wait_discount) without needing seeded rows.
  • Models — the enabled-models list starts empty, and that’s intentional: it’s an allow-list to restrict the catalog, so empty means “all models allowed.” The agent picker uses the full catalog regardless. Seeding a curated list would override Loom’s own default, not fix anything.
  • Networking — VPC configurations start empty, and that’s correct on light: its agents run in PUBLIC network mode, and a light deploy only has public subnets, so there’s nothing a VPC config would point at. These are named presets the UI uses to deploy an agent into a VPC. On the production tiers the chant-deployed agents already carry their VPC config in the template — a Loom VPC config is only needed if you also deploy VPC-mode agents from the UI, at which point you register one against the deployed private subnets.
  • Infrastructure — the AgentCore Agent Registry is a preview feature that loomster doesn’t provision, so it’s off by default with no ARN. You opt in on a real deploy once the feature is available; there’s nothing to fabricate.

Costs, Admin (audit logs and session analytics), Chat, and Invocations are computed from real invocation records — they show nothing until agents run. Rather than fabricate spend, demo lights them up honestly: after the demo agent reaches READY, loom-seed invokes it a few times, so the Costs dashboard shows real (if tiny) usage and the audit/session screens have activity. On the emulator this is free; on foundation it’s skipped, because invoking a real agent on a live account costs money. The harness asserts the Costs dashboard has at least one recorded invocation on demo — a zero there means the runtime path never ran. Registry is a preview surface that stays empty until you opt in.

npm run validate (or just validate) checks all of the above against a running deploy: every screen must return 200, and every section a profile is meant to seed must be non-empty. An empty Catalog section, an all-failed agent deploy, or a missing authorizer fails the run. So “the deploy is usable” is a check, not a claim. See Seeded defaults for the profiles and how to run it.