Get started
Introduction
Zidane is a hookable TypeScript agent harness, with a terminal app, a desktop app and a server built on it.
Zidane is a TypeScript agent harness. It sends your prompt to a model, runs the tools the model asks for, and repeats until the model stops. Providers, tools, sessions, compaction and sub-agents all have replaceable defaults.
import { createAgent } from 'zidane'
import { basic } from 'zidane/presets'
import { anthropic } from 'zidane/providers'
const agent = createAgent({ ...basic, provider: anthropic({ apiKey: process.env.ANTHROPIC_API_KEY }) })
await agent.run({ prompt: 'build a REST API' })Surfaces#
| Surface | What it is | Start here |
|---|---|---|
The library (zidane) | Build your own agent in TypeScript | Quickstart |
The terminal app (zidane) | A chat app in your terminal, plus zidane run for scripts and CI | Terminal |
| The desktop app | The same chat with panels, diffs, terminals and a dev browser | Desktop |
| zidane-server | Runs sessions on another machine for the apps and browsers | Server |
The UI kit (zidane-ui) | The desktop app's chat components for your own React app | UI kit |
| The ACP adapter | zidane inside editors such as Zed | ACP |
The terminal and desktop apps run the same engine and share sessions. With the daemon on, they also share live runs (one engine, two apps).
Design principles#
| Principle | What zidane does |
|---|---|
| Token discipline | Prompt caching, read dedup and byte budgets keep long sessions cheap. Compaction is opt-in in the library and on by default in the apps. |
| Fault recovery | Repairs malformed tool arguments, answers unknown tool names with a fallback, rewrites errors so the model can act on them. |
| Provider parity | Anthropic gets its server-side features, other providers client-side equivalents. Switching providers needs no agent change. |