Introduction

AI UI Kit is an open-source UI kit for agent products, built on top of Mantine. It covers the chat (messages, tool cards, streaming states, the composer) and the screens around it: settings, MCP servers, agents, skills, permissions, hooks, memory, sessions, background tasks, diff review, a theme provider and an embeddable launcher. Install one package and use the components like any other Mantine extension: they follow your theme, color scheme and fonts.

The goal is not to be a framework. It gives you the pieces a production agent UI needs (streaming markdown, diffed edits, plan approvals, tool invocations, clarifying questions) so you can focus on the model side. The API is typed around ChatMessage and ChatStatus from the Vercel AI SDK, so useChat plugs in directly.

At a glance

124 documented components grouped by module. Use them individually, or drop in AgentChat to get the chat pieces wired together.

Quick start

Head to Installation for prerequisites, styles and your first component. In short:

npm install @sinups/ai-kit @mantine/core @mantine/hooks @tabler/icons-react
Composition recipes
Chat with tool renderers

AgentChat renders built-in cards for Bash, Edit, Search, Todo, Plan, subagent and MCP tool parts on its own. Add your own card with toolRenderers, keyed by the full part type such as tool-Deploy.

"use client";

import { Button, Group, Paper, Text } from "@mantine/core";
import { AgentChat, type CustomToolRendererProps } from "@sinups/ai-kit";
import type { ChatMessage } from "@sinups/ai-kit";

const messages: ChatMessage[] = [/* streamed from your backend */];

// Built-in cards (tool-Bash, tool-Edit, tool-Grep, tool-mcp__<server>__<tool>, ...) render automatically.
// toolRenderers adds or replaces cards by the full part type.
function DeployCard({ input, status, onAction }: CustomToolRendererProps) {
  return (
    <Paper withBorder p="xs">
      <Group justify="space-between">
        <Text size="sm">Deploy {String(input.service)} · {status}</Text>
        <Button size="xs" onClick={() => onAction?.("approve")}>Approve</Button>
      </Group>
    </Paper>
  );
}

export default function Chat() {
  return (
    <AgentChat
      messages={messages}
      status="ready"
      onSend={() => {}}
      onStop={() => {}}
      toolRenderers={{ "tool-Deploy": DeployCard }}
    />
  );
}
Composer with mode + model pickers

InputBar accepts any React node in leftActions / rightActions. Drop in ModeSelector and ModelPicker for a familiar composer.

"use client";

import { InputBar, ModeSelector, ModelPicker } from "@sinups/ai-kit";
import { IconBulb, IconCursor } from "@tabler/icons-react";

const modes = [
  { id: "agent", label: "Agent", icon: IconCursor },
  { id: "plan", label: "Plan", icon: IconBulb },
];

const models = [
  { id: "llama-3.3-70b", name: "Llama 3.3", version: "70B" },
  { id: "qwen-2.5-coder-32b", name: "Qwen 2.5 Coder", version: "32B" },
];

export default function Composer() {
  return (
    <InputBar
      status="ready"
      onSend={({ content }) => console.log(content)}
      onStop={() => {}}
      leftActions={
        <>
          <ModeSelector modes={modes} defaultValue="agent" />
          <ModelPicker models={models} defaultValue="llama-3.3-70b" />
        </>
      }
    />
  );
}
Credits

AI UI Kit is a fork of Agent Elements by 21st.dev, released under the MIT license. The component design, behavior, examples and this documentation site come from that project. What changed: the Tailwind and shadcn implementation was replaced with Mantine primitives and theme tokens, the registry-based install became a single npm package, and the parts tied to the 21st.dev Agent SDK (relay, sandbox and deploy flows) were removed.

If you are on Tailwind and shadcn, use the original. If you are on Mantine, you get the same components without a second styling system.