agentskit.js
UI + hooks

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

FrameworkImportShape
Reactimport { useChat } from '@agentskit/react'const chat = useChat(config)
Vueimport { useChat } from '@agentskit/vue'const chat = useChat(config) — values are refs
Svelteimport { createChatStore } from '@agentskit/svelte'const chat = createChatStore(config) — Svelte 5 runes
Solidimport { useChat } from '@agentskit/solid'const chat = useChat(config) — accessors
React Nativeimport { useChat } from '@agentskit/react-native'Metro-safe, no DOM
Angularimport { AgentskitChat } from '@agentskit/angular'constructor(private chat: AgentskitChat)Signal + RxJS
Inkimport { 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 → Events.

✎ Edit this page on GitHub·Found a problem? Open an issue →·How to contribute →

On this page