Skip to content
unseen.uiby Stack Unseen
Get started

React components for AI agent apps

The screens your agent needs, with nothing faked.

162 components for chat, tool calls, approvals, agent runs, sources and dashboards, plus 10 whole applications. A click only sends a request; the screen shows done when your server says so.

npm install @stackunseen/ui
React
19
Styling
Plain CSS, no Tailwind
Licence
MIT

Account cleanup

Needs you
  1. Review required

    Archive 3 inactive accounts

    Pending

    CRM sandbox · Demo workspace · accounts:archive · Medium risk

    3 accounts become read-only. An administrator can restore them.

Nothing is marked done until the server answers.

The real components, with sample data.

Runs

State
Agent

Active1

  • Running
    Ops agentUpdated Oct 15, 2026, 10:09 AMCost: ~$0.03, estimated from token prices

Waiting for you1

  • Needs review
    Docs agentUpdated Oct 15, 2026, 10:05 AMCost: ~$0.11, estimated from token prices

    Waiting on approval: Post to #metrics

Finished1

  • Complete
    Ops agentUpdated Oct 15, 2026, 9:48 AMCost: $0.04
  1. Understand the requestComplete

  2. Find inactive accountsComplete

  3. Request owner approvalRunning

  4. Prepare a summaryQueued

Whole applications, running with sample data.

All templates
license
MIT, examples included
stack
React 19 and TypeScript, no Tailwind needed
install
one npm package, one stylesheet import
access
keyboard and screen reader, documented

One component, connected to your stack.

Keep the AI SDK's useChat and your server route, or start with a local stand-in and swap in your server later. Tool calls, approvals and sources come along.

Moving from AI Elements? It is being deprecated at the end of November 2026. See how each component maps.

tsx
'use client';
import { useChat } from '@ai-sdk/react';
import { DefaultChatTransport } from 'ai';
import { Chat, useAiSdkChat } from '@stackunseen/ui/chat';
import '@stackunseen/ui/styles.css';
import '@stackunseen/ui/chat.css';

export function Assistant() {
  const chat = useChat({
    transport: new DefaultChatTransport({ api: '/api/chat' }),
  });
  return <Chat {...useAiSdkChat(chat)} title="Assistant" />;
}

Built for coding agents, not just for copying.

Connect the MCP endpoint once and your agent searches the catalog and reads any component page with every prop. Or press Copy prompt on a page and paste it into Claude, Cursor, ChatGPT or v0.

The endpoint serves the same files as the site, so the agent never reads a stale page. No key, no account.

sh
claude mcp add --transport http unseen-ui https://unseenui.com/api/mcp

# Then, in a session:
# "Add an approval card to the assistant page using Unseen UI."

Start from what you're building

All tasks

What you get

  • Your server stays in chargeWhen the AI asks to do something, the approval card waits for your server's answer. A click alone never marks an action as done.See ApprovalCard
  • Screens that tell the truthIf a request times out or a number is only an estimate, the screen says so, instead of showing a success or a failure that never happened.See UsageMeter
  • One install, your themeOne npm package with its own stylesheet, for any React 19 app. No Tailwind needed, and you get fixes by updating a version, not by copying files again.Read the setup guide
  • Ready for your coding agentAdd the MCP endpoint to Claude Code or Cursor, press Copy prompt on any component page, or point any tool at llms.txt and the Markdown page per component.Set up your agent

Checked 28 October 2026: 2,298 tests pass, and automated accessibility checks (axe) find no violations on the pages we audit.

Questions people ask first

Do I need Tailwind?

No. The package ships its own stylesheet; import it once and every component is styled. Colours, radius and spacing come from CSS variables, so a Tailwind project can keep its setup and a plain CSS project needs nothing extra. See Theme Studio for the token list.

What does it cost?

Nothing. Every component, pattern and template is MIT licensed, including the agent and approval pieces. There is no paid tier. The licence page has the full text.

What does “your server stays in charge” mean?

A component shows the state your server reports and calls back when a person acts. An approval click sends a decision bound to the action version; the card shows “approved” only once your server acknowledges it. Nothing is marked done, sent or executed by the click alone, and when the answer is unknown the screen says so.

Which backends does it work with?

Any. The Chat component plugs into the Vercel AI SDK through one adapter, and every other component takes plain values and callbacks, so a custom API, a queue or a stand-in host works the same way. Connect to your app shows the three shapes.

Is it accessible?

Keyboard and screen-reader behaviour is documented on each component page, overlays trap and return focus, live regions announce streaming and status changes, and reduced-motion preferences are respected. Automated axe checks run on the audited pages; the evidence line above states the last result.

Can my coding agent use it?

Yes. llms.txt and llms-full.txt index the site, every component page has a Markdown version and a “Copy prompt” button, the package ships a component manifest, and the MCP endpoint serves the same pages to an editor that supports it.

How stable is the API?

It is an experimental alpha. Pin exact versions, read the changelog before upgrading, and expect renamed props between prereleases. Component contracts in the core package change less often than their visual details.

Add it to your app in three steps.

  1. 01Install and set up
  2. 02Connect your data and actions
  3. 03Make the theme yours