Skip to main content

Glossary

Every term used in this site, in the order it tends to come up.

TermMeans
AgentA catalog listing (agents row) plus a separately hosted runtime service. The two are joined by id / slug and an OAuth clientId.
SlugURL-safe identifier for an agent (e.g. ai-support). Used in /agent/:slug, /pricing/:slug, agent OAuth scopes, and tier upgrade CTAs. Immutable after publish.
Agent statusdraft, active, coming_soon, inactive. Drafts and inactive are filtered from the public catalog. coming_soon agents render with a "Notify me" CTA backed by the waitlist.
CapabilityA marketing bullet point — icon, title, description, sortOrder. Rendered on the agent detail page. CRUD via /agents/:agentId/capabilities. Display only.
StepA "how it works" card — title, description, sortOrder. Same lifecycle as Capability. Not an execution unit.
TagA category-like label (e.g. voice, developer, sales). M:N with agents via agent_tags. Drives the catalog filter chips and the per-category color theme (themeFor).
Pricing TierA purchasable plan attached to an agent — name, price, currency, billingInterval (month / year / one_time), isFree, recommended, trialDays, featuresIncluded. Paid tiers auto-create Stripe Product + Price.
Metric DefinitionA meterable thing an agent charges against — slug (immutable), displayName, unit, kind (fixed allocation or rolling per-cycle). Example: sessions, voice, avatar, sites, max_session_seconds.
Tier QuotaThe quotaLimit of a MetricDefinition granted by a PricingTier. NULL = unlimited, 0 = explicit deny (feature gated off), positive int = cap. No row defaults to deny.
Effective QuotabaseQuota + sum(activeAddons) at consume time. The marketplace computes it atomically inside consume.
AddonA grant on top of a subscription's tier quota — one_cycle (resets next period) or permanent. Created by admin grants or future purchase flows.
SubscriptionA (userId, agentId, tierId) row with a Stripe-tracked status (active, trialing, past_due, canceled, incomplete, incomplete_expired, unpaid). Unique on (userId, agentId) where status is active or trialing.
InstallA (userId, agentId) row recording that a user clicked "install". Idempotent. Does not trigger provisioning or runtime.
InteractionA marketing/sales event — user_signup, demo_request, notify_request, subscription_created. Fans out emails to recipients listed in interaction_recipients. Not an agent runtime event.
ReviewA (userId, agentId) row with rating (1–5, CHECK), title, body. Unique on (agentId, userId) — second submit upserts.
WaitlistEmail signup for a coming_soon agent. (agentId, email) is unique. Also writes an Interaction of type notify_request.
OAuth clientCreated automatically when an agent is created via POST /agents. Type public, no client secret, PKCE-S256 required. redirectUris lives on the agents row and is mirrored into the OAuth client row.
First-party agentAn agent owned by the marketplace operator. Backed by skipConsent: true so the user isn't prompted to grant scopes.
Scopeopenid, profile, email, marketplace:role, marketplace:installs, marketplace:agentTiers, offline_access. The last issues a refresh token.
ID token claimsub, email, name, picture, plus marketplace:role and marketplace:agentTiers. marketplace:installs is only in UserInfo, not ID token.
Tier hintThe marketplace:agentTiers claim — a snapshot of the user's tier per agent at token issue time. Always treat as a hint; the source of truth is /me/subscriptions/:agentId.
Quota envelopeThe JSON shape returned by consume and release{ ok, status, used, effectiveQuota, remaining, resetsAt }.
clientReqIdAn idempotency key passed by the agent backend on every consume / release call. Stored in usage_ledger. Resubmitting the same clientReqId is a no-op.
Platform adminRole platform_admin. Can create/edit/delete agents and tiers, manage users, grant addons.
Org adminRole org_admin. Manages own organization and members. Cannot create agents.
Org memberRole org_member. Read-only over the catalog, owns their own subscriptions. Default for new sign-ups.
ApiResponse envelopeThe wrapper every non-auth endpoint returns: { requestId, timestamp, status, statusCode, data, error, pagination? }.
better-authThe library that implements signup/signin, sessions, OAuth/OIDC provider, admin plugin, and JWKS.
DrizzleThe ORM used by the backend. pgTable with snake_case columns in SQL and camelCase in TypeScript.
AppConfigServiceThe single source of truth for environment variables. Never read process.env directly outside main.ts, migrate.ts, seed.ts.

If a term shows up in code that isn't in this list, it's either an internal detail or a stale name. Open an issue.