useChat
The one hook every framework binding exposes. Same input, same return, same events.
useChat is the contract every AgentsKit UI binding mirrors. It wraps
createChatController from @agentskit/core with the idioms of your
host framework (React hook, Vue composable, Svelte store, Solid
signal, Angular service, React Native hook, Ink hook).
#Contract
type ChatReturn = {
messages: Message[]
status: 'idle' | 'streaming' | 'error' | 'awaiting-tool'
error: Error | null
send: (text: string, opts?: SendOptions) => Promise<void>
retry: () => Promise<void>
stop: () => void
clear: () => void
approve: (toolCallId: string, result?: unknown) => void
deny: (toolCallId: string, reason?: string) => void
edit: (messageId: string, text: string) => Promise<void>
}#Inputs
type ChatConfig = {
adapter: Adapter
tools?: Tool[]
skills?: Skill[]
memory?: Memory
rag?: Retriever
system?: string
onEvent?: (e: ChatEvent) => void
onError?: (e: Error) => void
}#Per-framework usage
| Framework | Import | Shape |
|---|---|---|
| React | import { useChat } from '@agentskit/react' | const chat = useChat(config) |
| Vue | import { useChat } from '@agentskit/vue' | const chat = useChat(config) β values are refs |
| Svelte | import { createChatStore } from '@agentskit/svelte' | const chat = createChatStore(config) β Svelte 5 runes |
| Solid | import { useChat } from '@agentskit/solid' | const chat = useChat(config) β accessors |
| React Native | import { useChat } from '@agentskit/react-native' | Metro-safe, no DOM |
| Angular | import { AgentskitChat } from '@agentskit/angular' | constructor(private chat: AgentskitChat) β Signal + RxJS |
| Ink | import { useChat } from '@agentskit/ink' | Terminal-safe |
#Events (onEvent)
chat.start Β· message.append Β· message.update Β· tool.call Β·
tool.result Β· error Β· status.change Β· chat.end.
Full schema: Concepts β mental model.
#Related
- Components: ChatContainer Β· Message Β· InputBar Β· ToolCallView Β· ThinkingIndicator
- Data attributes Β· Theming
- For agents β React
Explore nearby
- PeerUI + hooks
Every AgentsKit UI binding exposes the same contract. Pick the framework; the API stays the same.
- PeerChatContainer
Headless scrollable transcript container. Auto-scroll on new messages, virtualized-ready.
- PeerMessage
Renders one message β user, assistant, tool, or system. Streaming-aware, role-aware.