How AgentsKit fits the landscape
A practical lens — not a performance benchmark. Choose what matches your stack and how much control you need.
This table is wide — scroll sideways on small screens to compare all columns.
| Dimension | Vendor-tied or closed UI SDKs | Opinionated web framework paths | AgentsKit |
|---|---|---|---|
| Ownership | Often bound to one vendor console, hosted-only features, or opaque upgrade paths. | Open source with a strong “happy path” for a specific ecosystem (e.g. React streaming patterns). | MIT, modular npm packages — you own deployment; swap adapters without rewriting the UI layer. |
| UI model | Pre-built widgets; limited theming or escape hatches. | Conventions and examples centered on one stack's idioms. | Headless primitives (data-ak-*) plus optional theme — bring MUI, shadcn, or your design system. |
| Surfaces | Usually web-first; terminal or headless agents are an afterthought. | Web-first; depth outside the browser varies. | Same contracts for React, Ink (terminal), CLI, and headless runtime. |
| Extension | Plugin tiers, closed extension APIs, or vendor-specific tool schemas. | Composable inside the framework's world. | Shared core types — adapters, tools, memory, RAG, skills compose on @agentskit/core. |
Best fit: one stack across browser, terminal, and headless agents, with control over adapters and tools. Skip if: a single vendor widget is enough, or you are fully committed to one framework's AI path.
Closed SDKs and opinionated paths slow you down
You still own streaming edge cases — unless your stack is built to compose
- Vendor-tied or closed layers — upgrade schedules, hosted-only features, and opaque limits box you in when you need custom tools or self-hosted inference.
- Highly opinionated frameworks — productive inside their happy path; painful when your product spans web, terminal, and headless workers with one contract.
- Fragile hand-rolled streams — partial chunks, retries, and aborts still leak into UX (stuck “typing”, duplicated messages, lost tool results) when glue code diverges per surface.
AgentsKit is MIT-licensed and extension-first: adapters, tools, memory, and RAG sit on shared primitives so you keep control and swap pieces without rewriting the product narrative.
From ~50 lines of glue to ~10 lines of product
Less code to review, test, and regret when the API shape changes next month
const [messages, setMessages] = useState([])
const [input, setInput] = useState('')
const [streaming, setStreaming] = useState(false)
const abortRef = useRef(null)
const send = async () => {
setStreaming(true)
const userMsg = { role: 'user', content: input }
setMessages(prev => [...prev, userMsg])
const res = await fetch('/api/chat', {
method: 'POST',
body: JSON.stringify({ messages: [...messages, userMsg] }),
signal: abortRef.current?.signal,
})
const reader = res.body.getReader()
const decoder = new TextDecoder()
let text = ''
while (true) {
const { done, value } = await reader.read()
if (done) break
text += decoder.decode(value)
setMessages(prev => [...prev.slice(0,-1),
{ role: 'assistant', content: text }])
}
setStreaming(false)
}
// + error handling, auto-scroll, cleanup...import { useChat, ChatContainer, Message, InputBar }
from '@agentskit/react'
import { anthropic } from '@agentskit/adapters'
import '@agentskit/react/theme'
function Chat() {
const chat = useChat({
adapter: anthropic({ model: 'claude-sonnet-4-6' })
})
return (
<ChatContainer>
{chat.messages.map(msg =>
<Message key={msg.id} message={msg} />
)}
<InputBar chat={chat} />
</ChatContainer>
)
}One architecture, every surface
Jump to the guide you need — each link matches an @agentskit/* package on npm.
Model providers — swap in one line
Why AgentsKit?
Everything you need, nothing you don't — same story from UI to headless agents
3 Hooks
useStream, useReactive, useChat — that's the entire API. Learn it in 5 minutes.
<5KB Bundle
Tiny footprint. No virtual DOM overhead. Just reactive streams wired to the DOM.
Any Provider
Claude, GPT, Vercel AI SDK, or bring your own ReadableStream. Swap in one line.
Headless + Theme
Components ship with data-ak-* attributes. Import the theme or style your way.
Agent-Friendly
Entire API fits in 2K tokens. AI agents generate correct AgentsKit code first try.
Full toolkit
Runtime, Ink, CLI, RAG, memory, tools, skills, sandbox, eval — compose what you need, share types with @agentskit/core.
Works Everywhere
Next.js, Vite, Remix, TanStack Start — any React 18+ app. Zero config.
Stop, retry, clear
Cancellation and retries on the chat controller — fewer stuck “typing…” states and duplicate assistant messages.
Production visibility
Optional @agentskit/observability for traces across LLM calls, tools, and memory — OpenTelemetry-friendly when you need it.
Benchmark in CI
@agentskit/eval measures latency, cost, and success rate so agent regressions surface before users do.
10 Interactive Examples
Every example is a chat — because that's what AgentsKit does
See streaming work in under a minute
Run the quick start, then layer tools, memory, and RAG — the mental model does not change.
MIT · No signup · Open source — use it, fork it, or tell us what is missing
Young project, moving fast
AgentsKit is early-stage and expanding — try it, open an issue if something breaks, and help shape the roadmap.