Install
Three ways to add Linda.
Pick the mode that matches where you are. Same agent loop under all three.
1. Script tag (10 seconds)
The fastest path. Drop one tag, mark up a form with
data-linda, and you're done.
<script src="https://unpkg.com/@linda/script/dist/linda.js"></script>
<form
data-linda
data-linda-config="/configs/signup.json"
data-linda-provider="anthropic"
data-linda-model="claude-sonnet-4-6"
data-linda-key="sk-ant-..."
>
<input name="email" />
<input name="company" />
<input name="team_size" />
</form> - UMD bundle: ~34 KB gzipped.
- Loads from unpkg / jsDelivr — pin a version in production.
- Reads
data-linda-*attributes for config. - BYOK with
data-linda-key, or use a proxy URL viadata-linda-proxy.
2. npm + bundler
For Vite, Webpack, esbuild, Rollup. ESM only.
npm install @linda/core import { Linda } from "@linda/core";
const linda = new Linda({
transport: {
mode: "browser",
provider: "anthropic",
apiKey: import.meta.env.PUBLIC_ANTHROPIC_KEY,
model: "claude-sonnet-4-6",
},
config: {
persona: "Helpful onboarding assistant",
target: { type: "form", selector: "#signup" },
dataPoints: [
{ name: "email", question: "What's your work email?" },
{ name: "company", question: "Which company are you with?" },
{ name: "team_size", question: "How big is your team?" },
],
},
});
linda.attach(); 3. React
@linda/react wraps the core in a provider + form component.
npm install @linda/react import { LindaProvider, LindaForm } from "@linda/react";
import { BUILTIN_SKILLS } from "@linda/skills";
export default function Signup() {
return (
<LindaProvider
transport={{
mode: "proxy",
url: "/api/linda",
provider: "anthropic",
model: "claude-sonnet-4-6",
}}
>
<LindaForm
config={signupConfig}
skills={BUILTIN_SKILLS}
onComplete={(data) => fetch("/api/save", {
method: "POST",
body: JSON.stringify(data),
})}
>
<input name="email" />
<input name="company" />
<input name="team_size" />
</LindaForm>
</LindaProvider>
);
} Optional: the proxy server
If you don't want your API key in the browser, drop in
@linda/server — a Node middleware that streams responses
over SSE.
import express from "express";
import { lindaProxy } from "@linda/server";
const app = express();
app.post("/api/linda", lindaProxy({
provider: "anthropic",
apiKey: process.env.ANTHROPIC_API_KEY!,
model: "claude-sonnet-4-6",
rateLimit: { rpm: 30 },
})); Pick a provider
Linda supports five out of the box:
- Anthropic Claude (Sonnet 4.6, Opus 4.7)
- OpenAI (GPT-4o, GPT-5)
- Groq (Llama, Qwen — fast)
- OpenRouter (anything)
- Ollama (local)
Capability gates (browser support)
Linda detects browser capabilities at startup —
FileReader, WebGPU, Bluetooth,
NFC, Geolocation, etc. — and only exposes
skills/parsers/mounts that the runtime actually supports. So you can
ship a build with the OCR skill and Bluetooth mount; on Firefox
without WebUSB they'll silently no-op.
Minimum supported: Chrome 80+, Firefox 80+, Safari 14+, Edge 80+.
<script src="https://unpkg.com/@linda/script/dist/linda.js"></script>
<form
data-linda
data-linda-config="/configs/signup.json"
data-linda-provider="anthropic"
data-linda-model="claude-sonnet-4-6"
data-linda-key="sk-ant-..."
>
<input name="email" />
<input name="company" />
<input name="team_size" />
</form>Ship an agent-driven flow this afternoon.
Install Linda, paste a config, and your form turns into an agent that fills its own inputs.