Skills DirectorySkills Directory
SkillsLearnSecurityCategoriesDocsCommunityBlog
Sign InSubmit Skill
Skills Directory

Security-tested agent skills for Claude, coding agents, and AI workflows.

Directory

  • Browse Skills
  • All Skills A–Z
  • Claude Skills
  • Claude Code Skills
  • Agent Skills
  • Categories
  • Submit a Skill

Learn

  • Learn Hub
  • Install Claude Skills
  • Write SKILL.md
  • Skills vs MCP
  • Directories Compared

Security

  • Security
  • Methodology
  • Secure Claude Skills
  • Security Badges

Company

  • About
  • Community
  • Blog
  • API Docs
  • Advertise

2026 Skills Directory. All rights reserved.

Back to skills

Agent Elements

ASecurity

Use whenever the user wants to build or modify a chat, agent, or tool-calling UI in a React 19 + Tailwind v4 project — especially if the code imports from `@/components/agent-elements/*` or the project has that folder on disk. Triggers: "agent chat", "tool call UI", "streaming chat", "plan approval", "AgentChat", "InputBar", "tool renderer", mentions of Agent Elements, or requests to add a new agent surface with shadcn. Do NOT use for plain chat UIs that don't need tool/plan/approval cards, ...

207 stars
0 votes
0 copies
2 views
Added 9/4/2026
ai-agentsshellbashreactrailsapi

Works with

cursorcliapimcp

Security Analysis

A100/100

Scanned 9/4/2026

Install to Claude Code

$npx -y skills add NeverSight/skills_feed --skill agent-elements --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Agent Elements?

Add the live security badge to your README — it updates automatically with every re-scan.

Security grade badge for Agent Elements
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/neversight-agent-elements/badge)](https://www.skillsdirectory.com/skills/neversight-agent-elements)

More formats (shields.io, HTML) on the badges page.

Download Zip
Files
SKILL.md
---
name: agent-elements
description: |
  Use whenever the user wants to build or modify a chat, agent, or tool-calling
  UI in a React 19 + Tailwind v4 project — especially if the code imports from
  `@/components/agent-elements/*` or the project has that folder on disk.
  Triggers: "agent chat", "tool call UI", "streaming chat", "plan approval",
  "AgentChat", "InputBar", "tool renderer", mentions of Agent Elements, or
  requests to add a new agent surface with shadcn.

  Do NOT use for plain chat UIs that don't need tool/plan/approval cards, or
  for projects already committed to a different agent UI kit.
---

# Agent Elements skill

Project-aware context for building chat and agent UIs with **Agent Elements** —
an open-source shadcn registry at `https://agent-elements.21st.dev`.

## What this skill gives you

When this skill loads, you know:

1. **The registry is shadcn-compatible.** Every component is installed with
   `npx shadcn@latest add https://agent-elements.21st.dev/r/<component>.json`.
   Files land under `components/agent-elements/` (the library's internal
   `components/` prefix is stripped — see Paths below).
2. **The API is typed around the Vercel AI SDK.** Messages are
   `UIMessage[]` from `ai`, status is `ChatStatus`. `useChat()` plugs in
   directly.
3. **The full component catalog with API shapes and composition rules** (see
   sections below).
4. **Theming guardrails** — the Tailwind tokens Agent Elements depends on.

## Detection

Consider this project "Agent Elements-ready" if any of these are true:

- `components/agent-elements/` exists on disk
- `components.json` includes an alias or registry reference to Agent Elements
- `package.json` dependencies include `ai` + `@tabler/icons-react` and the user
  mentions Agent Elements

If the folder does not exist yet, install on demand with:

```bash
npx shadcn@latest add https://agent-elements.21st.dev/r/agent-chat.json
```

`agent-chat` transitively pulls every other component it needs via
`registryDependencies` (MessageList, InputBar, tool renderers, shared utils).

## Paths (post-install layout)

After `shadcn add`, files sit under `@/components/agent-elements/` with this
shape:

```
components/agent-elements/
  agent-chat.tsx
  message-list.tsx
  input-bar.tsx
  markdown.tsx
  user-message.tsx
  error-message.tsx
  text-shimmer.tsx
  spiral-loader.tsx
  input/
    attachment-button.tsx
    send-button.tsx
    file-attachment.tsx
    suggestions.tsx
    model-picker.tsx
    mode-selector.tsx
  tools/
    bash-tool.tsx
    edit-tool.tsx
    search-tool.tsx
    todo-tool.tsx
    plan-tool.tsx
    tool-group.tsx
    subagent-tool.tsx
    mcp-tool.tsx
    thinking-tool.tsx
    generic-tool.tsx
  question/
    question-tool.tsx
  hooks/use-tool-complete.ts
  utils/cn.ts
  types.ts
```

**Import rule:** always import from the exact file, never from a barrel.

```tsx
// ✅
import { AgentChat } from "@/components/agent-elements/agent-chat";
import { BashTool } from "@/components/agent-elements/tools/bash-tool";

// ❌ — no barrel exists
import { AgentChat } from "@/components/agent-elements";
```

## Component catalog

### Chat surface

- **AgentChat** — the full chat shell. Renders `MessageList` + `InputBar`,
  handles tool invocations via `toolRenderers`, shows an empty state with
  optional `suggestions`. Props: `messages`, `status`, `onSend`, `onStop`,
  `toolRenderers?`, `suggestions?`, `attachments?`, `classNames?`, `slots?`.
- **MessageList** — transcript only. Use when you need the input bar somewhere
  else. Accepts `toolRenderers` and `showCopyToolbar`.
- **UserMessage / ErrorMessage / Markdown** — low-level message pieces.
  `Markdown` streams safely (external links get `rel="noreferrer"` by default).

### Input

- **InputBar** — composer. Props: `status`, `onSend({ content })`, `onStop`,
  `value?` + `onChange?` (controlled), `attachedImages`/`attachedFiles` with
  their remove handlers, `leftActions`/`rightActions` slots, `suggestions?`,
  `questionBar?`, `infoBar?`.
- **Suggestions** — quick-prompt chips for the empty state or inline.
- **ModelPicker / ModeSelector** — designed to drop into `leftActions`. Both
  accept a simple `{ id, name, version? }` / `{ id, label, icon?, description? }`
  shape. Do not import `CLAUDE_MODELS` — it was removed; supply your own array.
- **SendButton / AttachmentButton / FileAttachment** — usable standalone if
  you're building a custom composer.

### Tool cards

All tool cards accept a `part` prop of type
`Extract<UIMessage["parts"][number], { type: \`tool-<Name>\` }>` from the AI
SDK. Register them via `toolRenderers` on `AgentChat`/`MessageList`:

```tsx
<AgentChat
  toolRenderers={{
    Bash: BashTool,
    Edit: EditTool,
    Write: EditTool,      // Write reuses EditTool
    Search: SearchTool,
    WebSearch: SearchTool,
    TodoWrite: TodoTool,
    PlanWrite: PlanTool,
    Task: SubagentTool,
    Thinking: ThinkingTool,
  }}
/>
```

Cards available:

- **BashTool** — command + stdout, collapsible.
- **EditTool** — diff card. Supports `input.old_string`/`input.new_string` or
  `output.structuredPatch`, plus an approval footer via `input.approval`.
- **SearchTool** — grouped search results. Pass `results` or use `output.results`.
- **TodoTool** — diffed todo list from `input.todos` vs `output.oldTodos`.
- **PlanTool** — plan title + summary with approve/reject footer.
- **ToolGroup** — collapses consecutive tool calls into one row.
- **SubagentTool** — sub-agent task with nested tools.
- **McpTool** — generic MCP tool output; use `parseMcpToolType` from
  `@/components/agent-elements/tools/tool-registry` to get `mcpInfo`.
- **ThinkingTool** — collapsible reasoning row.
- **GenericTool** — fallback for unknown tools.
- **QuestionTool** — clarifying question with single/multi/text answer kinds.

### Streaming states

- **TextShimmer** — shimmering status label.
- **SpiralLoader** — Lottie spiral; use for multi-second loading states.

## Composition patterns

### Full chat with tool rendering (most common)

```tsx
"use client";

import { AgentChat } from "@/components/agent-elements/agent-chat";
import { BashTool } from "@/components/agent-elements/tools/bash-tool";
import { EditTool } from "@/components/agent-elements/tools/edit-tool";
import { SearchTool } from "@/components/agent-elements/tools/search-tool";
import { useChat } from "@ai-sdk/react";

export default function Chat() {
  const { messages, status, sendMessage, stop } = useChat();
  return (
    <AgentChat
      messages={messages}
      status={status}
      onSend={({ content }) => sendMessage({ text: content })}
      onStop={stop}
      toolRenderers={{
        Bash: BashTool,
        Edit: EditTool,
        Write: EditTool,
        Search: SearchTool,
      }}
    />
  );
}
```

### Composer with mode + model pickers

```tsx
import { InputBar } from "@/components/agent-elements/input-bar";
import { ModeSelector } from "@/components/agent-elements/input/mode-selector";
import { ModelPicker } from "@/components/agent-elements/input/model-picker";
import { IconBulb, IconCursor } from "@tabler/icons-react";

const modes = [
  { id: "agent", label: "Agent", icon: IconCursor },
  { id: "plan", label: "Plan", icon: IconBulb },
];
const models = [
  { id: "sonnet", name: "Sonnet", version: "4.6" },
  { id: "opus", name: "Opus", version: "4.7" },
];

<InputBar
  status="ready"
  onSend={handleSend}
  onStop={handleStop}
  leftActions={
    <>
      <ModeSelector modes={modes} defaultValue="agent" />
      <ModelPicker models={models} defaultValue="sonnet" />
    </>
  }
/>
```

### Custom tool renderer

`toolRenderers` values are React components that receive `{ part, chatStatus }`.
Return whatever UI you want; reuse `GenericTool` as a fallback shell.

## Theming

Agent Elements reads these Tailwind CSS vars (shadcn-style). Do not remove or
rename them in the consumer theme:

- `--an-foreground`, `--an-background`, `--an-primary-color`
- Standard shadcn tokens: `--background`, `--foreground`, `--border`,
  `--muted`, `--muted-foreground`, `--accent`, `--primary`, etc.

Customising a component is just editing the installed file. Prefer that over
wrapping — the code is yours now.

## When NOT to use Agent Elements

- Projects using `assistant-ui`, `ai-elements`, `copilotkit`, or another kit —
  don't mix.
- Pure chat UIs that never render tool calls or plans — `InputBar` + your own
  message rendering may be enough; skip `AgentChat`.
- React < 19 or Tailwind < v4 — the components depend on both.

## Quick answers for common asks

- **"Add Agent Elements to this project"** → run `npx shadcn@latest init` if
  `components.json` is missing, then
  `npx shadcn@latest add https://agent-elements.21st.dev/r/agent-chat.json`.
- **"Switch the default SendButton look"** → edit
  `components/agent-elements/input/send-button.tsx` directly. Tokens live on
  `--an-*` CSS vars.
- **"Render a custom tool"** → map its type in `toolRenderers`; fall back to
  `GenericTool` for unknown tools.
- **"Use with useChat"** → pass `messages` and `status` straight through,
  translate `sendMessage`/`stop` to `onSend({ content })`/`onStop`.

## Registry reference

- Index: `https://agent-elements.21st.dev/r/index.json`
- Per-component: `https://agent-elements.21st.dev/r/<id>.json`
- Full docs in one file:
  `https://agent-elements.21st.dev/llms-full.txt`

Attribution

NeverSightNeverSight
View sourceMore from NeverSight →
SSkills DirectorySkills Directory

Know which skills are safe — weekly.

Best new skills + every skill we flagged as malicious. From the team that scanned 103,619.

Join free

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments (0)

No comments yet. Be the first to comment!

SSkills DirectorySkills Directory

Know which skills are safe — weekly.

Best new skills + every skill we flagged as malicious. From the team that scanned 103,619.

Join free

Related Skills

Caveman

Ultra-compressed communication mode. Cuts token usage ~75% by speaking like caveman while keeping full technical accuracy. Supports intensity levels: lite, full (default), ultra, wenyan-lite, wenyan-full, wenyan-ultra. Use when user says "caveman mode", "talk like caveman", "use caveman", "less tokens", "be brief", or invokes /caveman. Also auto-triggers when token efficiency is requested.

1023331 votes

Hyperplan

Adversarial multi-agent planning skill. Self-orchestrates 5 hostile category members (unspecified-low, unspecified-high, deep, ultrabrain, artistry) via team-mode for ruthless cross-critique debate, distills only the defensible insights, then MANDATORILY hands the distilled insight bundle to the `plan` agent for executable plan formalization. Use when planning needs maximum rigor and surfacing of weak assumptions, blind spots, and over-engineering. Triggers: 'hyperplan', 'hpp', '/hyperplan', ...

686011 votes

Mcp Code Execution

Routes multi-tool workflows through MCP servers for large datasets and pipelines. Use when Bash tool overhead is limiting throughput on data-heavy tasks.

3351 votes

catchup

Recovers the conversation and failed tool calls of a previous Codex, Claude Code, Antigravity, Cline, Copilot CLI, Cursor, DeepSeek Harness, Kimi, OpenCode, Pi Agent, or ZCode session. Use when the user says "catch up", "what did the last session do", "get me up to speed", "I switched agents", asks to recover/summarize a previous session before continuing, or asks to diagnose or report a catchup failure. Do NOT use for the current conversation, git history, or any non-agent log.

651 votes

math-skill

A comprehensive mathematical reasoning skill for AI assistants — handles arithmetic to research-level problems with rigorous step-by-step reasoning, systematic verification, and transparent uncertainty handling

381 votes
View all in ai-agents →