Experimental

Surface

Adaptive Card UX for FabrCore Agents

Give agents a safe visual layer: render Adaptive Cards, route actions, and manage agent conversations from Blazor without letting AI generate arbitrary app UI.

What Surface Looks Like

This is a static preview of the kind of experience Surface enables: agent chat, validated Adaptive Cards, routed actions, and render diagnostics in one Blazor command center.

Surface Command Center
ui.render validated
Show the purchase exception and let me approve it if it is inside policy.
Ops Agent Adaptive Card
Purchase Exception

Approve rush replacement order?

The vendor price is 7.8% above the standard threshold, but the downtime estimate is higher than the variance.

Request REQ-1048
Amount $4,820
Policy result Needs approval
Target agent ops-agent
Approve Ask follow-up Open record

Chats and Channels

Surface can frame agent work as a workspace: direct chats for focused work, channels for multi-agent collaboration, and shared timelines that keep people in the loop.

Surface Workspace
3 chats 2 channels
Channel

# vendor-review

Live activity
Eric
Ask the channel to compare the new vendor quote against our replacement policy.
Swarm Orchestrator
I split this into three tasks and routed them to available agents.
policy lookup price variance approval card
Knowledge Agent
Policy match found: rush replacements under $5,000 can be approved by operations when downtime risk exceeds the variance.
Ops Agent ui.render
Rendered approval card to the channel timeline and routed actions to app + agent.
Approve Ask follow-up Open record
Message # vendor-review or mention an agent...
In plain English

Surface is the screen layer for FabrCore agents. Instead of an AI trying to invent HTML, it sends a structured Adaptive Card that your app can validate, render, and wire to trusted actions. If you're a business owner: this is how agent work becomes buttons, approvals, forms, dashboards, and status updates inside the tools your team already uses.

What It Does

FabrCore Surface is an Adaptive Cards bridge for FabrCore agents and Blazor apps. It turns agent output into a controlled visual contract: a versioned envelope, an Adaptive Card, optional data, and metadata for routing.

The key design choice is restraint. Surface does not ask agents to emit Razor, HTML, JavaScript, custom UI schemas, or arbitrary routes. Agents either send deterministic Adaptive Card envelopes or use a configured planner model to produce the same envelope shape. The host validates the result before rendering.

Render

Agents publish ui.render messages carrying Adaptive Card Surface envelopes through FabrCore messaging.

Validate

Hosts enforce schema version, payload size, action types, target-agent rules, URL policy, and card parser compatibility.

Route

Adaptive Card actions dispatch to trusted app handlers, agent follow-up messages, or both with explicit routing data.

That makes Surface a practical UI boundary for distributed agents: flexible enough for approvals, forms, lists, and operational dashboards, but narrow enough for production apps to reason about and secure.

The Command Center

Surface includes a routable Blazor command center for owner-to-agent work.

FeatureWhat It Enables
Agent directory Loads owner-tracked agents and optionally includes shared agents available through access-control rules.
Agent chat Sends commands to selected agents with fire-and-forget delivery by default, so agents can publish progress and final responses asynchronously.
Live status Tracks health and system traffic such as _status, _thinking, and _error without polluting the normal transcript.
Adaptive cards Renders validated ui.render envelopes inline in the chat timeline through the same Surface contracts used by embedded components.
Create Agent Optional builder that discovers agent types, plugins, tools, models, aliases, streams, args, and MCP servers from the FabrCore host API.
Diagnostics Optional panel and render/action metadata for validation results, action counts, target handles, and LLM/service troubleshooting.

How It Works

  1. An agent chooses a view. It creates an AdaptiveCardSurfaceEnvelope directly or asks a configured planner model to produce one.
  2. Surface sends a render message. The payload is serialized as application/vnd.fabrcore.surface.adaptive-card+json on a ui.render message.
  3. The Blazor host receives it. DynamicAgentSurface or the command center listens through the current user/client context.
  4. The card is expanded and validated. Surface applies template data, enforces host policy, and rejects unsafe or unsupported cards.
  5. Actions route explicitly. Action.Execute and Action.Submit can call trusted app code, send a follow-up agent message, or do both.

Business side effects stay behind the application boundary. Surface moves intent and UI safely; the app still owns authorization, data validation, and workflow mutation.

Key Capabilities

Adaptive Card Contract

A stable envelope carries card, data, metadata, version, and id. The UI contract stays portable across agents and Blazor hosts.

Embedded Surface

DynamicAgentSurface gives product teams a drop-in way to render live agent cards in existing Blazor screens.

Action Helpers

SurfaceActions produces canonical action data for app, agent, and combined routing without hand-built payloads.

User-Scoped Delivery

The built-in Surface agent can deliver cards to explicit target handles through message args or envelope metadata.

Config Profiles

fabrcore-surface.json profiles define planner models, required actions, and validation policy for repeatable deployments.

Diagnostics

Render diagnostics expose planned, validated, rejected, and rendered action counts so teams can troubleshoot agent UI safely.

Experimental

Interested in Surface?

Surface is experimental and actively evolving. If your agents need trusted cards, approvals, forms, or a command center inside a Blazor app, we’d love to compare notes.