# Skyl – One Go interface for 400 AI models

> Source: <https://skyl-docs.vercel.app/>
> Published: 2026-10-25 14:28:48+00:00

v1.0.0 · Apache 2.0 · Go 1.22+

# skyl

One Go interface for every AI model.

Talk to Claude, GPT, Gemini, Ollama and 400+ other models through a single, stable interface — then switch between them by changing one string.

```
client := skyl.New(anthropic.New(os.Getenv("ANTHROPIC_API_KEY")))
resp, err := client.Complete(ctx, &skyl.Request{    Model: "claude-opus-5",    Messages: []skyl.Message{skyl.UserText("Hello")},})
fmt.Println(resp.Text())
```

The highlighted line is the only one that changes.

## Why skyl

Integrating an AI model into a Go service means writing the same 400 lines every time: request mapping, SSE parsing, retry with jitter, rate-limit backoff, token accounting, error classification. skyl does that once, properly, with tests.

### Provider-agnostic

One Request and Response shape across every vendor. Your application code never learns a vendor’s JSON.

### Zero-day model support

Model IDs are pass-through strings. A model released this morning works this morning, with no skyl release.

### No lock-in

Every response carries Raw — the untouched provider JSON — so skyl’s abstraction is never the reason you cannot ship.

### Streaming that works

A pull iterator with proper context cancellation, verified by a goroutine-leak test rather than by convention.

### Honest errors

Typed and classified, so you branch with errors.Is instead of matching on message text that vendors reword.

### Small surface

The core module has zero external dependencies. No router, no logger, no framework imposed on you.

## Every model, one interface

Three native adapters for full vendor fidelity, and one generic adapter that reaches the long tail of hosts speaking OpenAI’s wire format.

`provider/anthropic` own module
Claude, native. A separate module, because it is built on the official Anthropic SDK and that brings a dozen transitive dependencies nobody else should pay for.

Claude Opus 5, Fable 5, Sonnet 5, Haiku 4.5, and the 4.x family

`provider/openai`
GPT, native. Ships inside the core module, so it costs you no dependencies.

GPT-5.6 (Sol, Terra, Luna), GPT-5.5, GPT-5.4 nano, the o-series, and gpt-oss

`provider/gemini`
Gemini, native. Handles Gemini’s structural differences — contents/parts, the "model" role in place of "assistant", and systemInstruction — so your Request does not have to.

Gemini 3.6 Flash, 3.5/3.1 Flash-Lite, and 3 Pro

`provider/openaicompat`
One adapter, configured per host, reaching the long tail of vendors that speak OpenAI's wire format — including local runtimes that need no credential at all.

~18 hosts including xAI, DeepSeek, Groq, OpenRouter, Ollama, vLLM and LM Studio

[18 verified compatible endpoints](https://skyl-docs.vercel.app/reference/provider/compatible-endpoints/) — including Ollama, vLLM and LM Studio, which need no credential at all.

## Try it without an API key

skyl ships a sandbox that speaks all four providers’ wire protocols locally. Every example in this documentation runs against it — no signup, no credential, no cost.

```
go run ./cmd/skyl-sandbox
```

## Status: v1.0.0 — the API is stable, the feature surface is not complete

Every adapter has been exercised against its live provider API, so the wire mapping is confirmed rather than merely self-consistent. Since v1.0.0 the exported API is frozen: no breaking change without a major version. **What is not promised is complete provider coverage.** Each adapter still silently ignores some provider features, and embeddings, prompt-caching control, batch APIs, token counting and failover are deliberately deferred. Both lists are published rather than implied.
