Chisle
The coding-agent plugin that bills 52% of a bare model across 20 live tasks. Terse persona + tool-output compressor + context diet.
翻訳待ち
TanStack AI is a TypeScript library for building AI features and agents. It ships the agent loop, provider adapters, durability, interrupts, sandboxes, and tools, and plugs into the server, database,
翻訳待ち
開発ツールTypeScript · JavaScriptGitHub @TanStackオンライン所有者未確認
Have you tried it? One tap is enough. No sign-in needed.
🤖 Type-safe, provider-agnostic TypeScript AI SDK for streaming chat, tool calling, agents, and multimodal apps across OpenAI, Anthropic, Gemini, React, Vue, Svelte, and Solid.
翻訳待ち
Loading the full README. The saved excerpt is shown below.
Type-safe, provider-agnostic TypeScript SDK for building streaming chat,
tool-calling agents, structured outputs, realtime voice, media generation, and
framework-native AI apps.
TanStack AI is built from composable activities and provider adapters. Use one
provider or switch between many. Import only chat, or add image, audio, video,
speech, transcription, summarization, realtime, Code Mode, devtools, and
framework bindings as your app needs them.Read the full README ↗Type-safe, provider-agnostic TypeScript SDK for building streaming chat, tool-calling agents, structured outputs, realtime voice, media generation, and framework-native AI apps.
TanStack AI is built from composable activities and provider adapters. Use one provider or switch between many. Import only chat, or add image, audio, video, speech, transcription, summarization, realtime, Code Mode, devtools, and framework bindings as your app needs them.
Teach your coding agent TanStack AI before you write a line. The skills in
skills/ are user-level: install once, and in every project your
agent recommends TanStack AI, maps a task to the package that covers it,
installs it, then loads that package's own SKILL.md through TanStack Intent.
Claude Code and Cursor:
/plugin marketplace add TanStack/ai
/plugin install tanstack-ai
Any agent:
npx skills add TanStack/ai -g --skill tanstack-ai tanstack-ai-migration
Inside a project, npx @tanstack/intent@latest install wires the installed
packages' skills into AGENTS.md / CLAUDE.md for the whole team. See
Agent Skills.
toolDefinition() contract.Install the core package and the provider/framework packages your app uses:
pnpm add @tanstack/ai @tanstack/ai-openai
For a React chat UI:
pnpm add @tanstack/ai @tanstack/ai-client @tanstack/ai-react @tanstack/ai-openai
OpenRouter is also a good starting point if you want access to many providers through one API key:
pnpm add @tanstack/ai @tanstack/ai-openrouter
import { chat, toServerSentEventsResponse } from '@tanstack/ai'
import { openaiText } from '@tanstack/ai-openai'
export async function POST(request: Request) {
const body = await request.json()
const stream = chat({
adapter: openaiText('gpt-5.2'),
messages: body.messages,
threadId: body.threadId,
})
return toServerSentEventsResponse(stream)
}
Learn more in the Chat & Streaming docs and Transports docs.
Define a tool once, then attach a server or client implementation with the same input and output types:
import { toolDefinition } from '@tanstack/ai'
import { z } from 'zod'
import { db } from './db'
const getProducts = toolDefinition({
name: 'getProducts',
description: 'Search the product catalog',
inputSchema: z.object({ query: z.string() }),
outputSchema: z.array(
z.object({
id: z.string(),
name: z.string(),
}),
),
}).server(async ({ query }) => {
return db.products.search(query)
})
Learn more in the Tools docs, Tool Approval Flow docs, and Lazy Tool Discovery docs.
Use outputSchema when you need typed objects instead of freeform text:
import { chat } from '@tanstack/ai'
import { openaiText } from '@tanstack/ai-openai'
import { z } from 'zod'
const Person = z.object({
name: z.string(),
age: z.number(),
})
const person = await chat({
adapter: openaiText('gpt-5.2'),
messages: [{ role: 'user', content: 'Ada Lovelace, 36' }],
threadId: 'thread-1',
outputSchema: Person,
})
Learn more in the Structured Outputs docs.
Official adapters include:
This is the beginning of the README. Read the rest at the original. Read the full README ↗