AgentsKit Chat Alpha
Getting started

Ink quick start

View canonical Markdown

Ink quick start

Install the application shell and its published upstream peers:

pnpm add @agentskit/chat @agentskit/chat/ink @agentskit/ink ink react

Define the chat in a framework-neutral module and render it from an Ink entry point:

import { defineChat } from '@agentskit/chat'
import { AgentChat } from '@agentskit/chat/ink'
import { render } from 'ink'

import { adapter } from './adapter.js'

const chat = defineChat({ id: 'support', chat: { adapter } })

render(<AgentChat definition={chat} />)

When a trusted terminal host already owns the session, pass the same framework-neutral controlled source used by React:

import type { ControlledChatSource } from '@agentskit/chat'
import { AgentChat } from '@agentskit/chat/ink'

export const mountChat = (source: ControlledChatSource) =>
  render(<AgentChat definition={chat} controlled={source} />)

Controlled mode validates the serialized snapshot and delegates input, cancellation, lifecycle commands, confirmation, and component interactions to the host callbacks. It does not invoke the upstream useChat hook or create a second controller. The official Ink input, Escape cancellation, confirmation, theme, semantic fallback, and single-owner keyboard behavior remain unchanged.

The host must rerender with its next snapshot after a callback and remains responsible for authentication, authorization, transport, persistence, and business behavior.

The shell delegates lifecycle, streaming, input history, Escape cancellation, and terminal components to @agentskit/ink. Validate unsupported visual output with parseSemanticFallback from @agentskit/chat, then render it with Ink's SemanticFallback; the shared formatter keeps its kind and readable summary stable across platforms.

On this page