Data attributes
AgentsKit UI components are headless. Every stylable hook is a data-ak-* attribute so your CSS (or your LLM) can target them reliably.
Components emit zero styles. They emit data attributes. Style with your favorite CSS stack; generate UI with an LLM and the attributes tell it exactly where to hook.
#Reference
| Attribute | Where | Values |
|---|---|---|
data-ak-chat-container | root of ChatContainer | β |
data-ak-message | root of Message | β |
data-ak-role | on Message root | user Β· assistant Β· tool Β· system |
data-ak-streaming | on Message root | true Β· false |
data-ak-part | every message part | text Β· tool-call Β· tool-result Β· image Β· file |
data-ak-tool-call | root of ToolCallView | β |
data-ak-status | on ToolCallView | pending Β· running Β· done Β· error Β· awaiting-approval |
data-ak-input-bar | root of InputBar | β |
data-ak-thinking | root of ThinkingIndicator | β |
data-ak-markdown | root of Markdown | β |
data-ak-code-block | root of CodeBlock | β |
#Generative UI
Because selectors are stable and framework-agnostic, LLMs can generate CSS / className overrides that work cross-framework. See Generative UI recipe.
#Related
- Theming β CSS variables + preset themes
Explore nearby
- PeerUI + hooks
Every AgentsKit UI binding shares the core state and action contract; host component APIs remain framework-specific.
- PeeruseChat
The shared chat state and action contract adapted by each framework binding.
- PeerChatContainer
Headless scrollable transcript container. Auto-scroll on new messages, virtualized-ready.