Open source · MIT · v0.9.0

The in-browser AI agent SDK.

Drop a <script> tag. Linda reads your live page as a virtual filesystem, calls real tools, runs skills, hands off between sub-agents, and fills your form's <input> fields in real time — all without a server.

Works with Anthropic, OpenAI, Groq, OpenRouter, and local Ollama. Framework-agnostic. ~35 KB gzipped.

  • ~35 KB gzipped core
  • 5 LLM providers
  • 19 hook events
  • 8 built-in skills
  • MIT licensed
<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>
acme.com — Sign up
Hey! Quick onboarding — what's your work email?
priya@acme.io
Got it. Which company are you onboarding for?
Acme Cloud
Filled name="email", name="company" in the form behind this chat.

The signature abstraction

A workspace, not a prompt.

Modern LLMs are trained on filesystem-shaped workflows. So Linda gives the model a workspace — /page for the live DOM, /conversation for the message log, /user for dropped files, /skills for installed capabilities, and /host for anything you mount.

The model reads what it needs, when it needs it. Writes to /page/form/fields/<name>.json are intercepted and fill your form's <input> in real time. No prompt-stuffing, no token bloat, no state plumbing.

$ linda.vfs.tree("/")
/
├── /page           # live DOM snapshot
│   ├── dom.html
│   ├── url.txt
│   └── form/
│       └── fields/
│           ├── email.json
│           └── company.json
├── /conversation   # full message log
│   ├── messages.jsonl
│   └── state.json
├── /user           # files the user drops in
│   └── files/
│       └── f_a1b2c3/
│           ├── info.md
│           └── parsed/
│               └── text.md
├── /skills         # composable capability bundles
│   └── installed/
│       ├── resume-intake/
│       │   ├── SKILL.md
│       │   └── schema.json
│       └── kyc-id-check/
│           └── SKILL.md
├── /host           # your data, mounted by you
│   └── crm/
│       └── accounts.json
├── /config
├── /scratchpad
└── /tools

Providers

Bring your own model.

Linda is provider-agnostic. Same code, swap the transport.

Ship an agent-driven flow this afternoon.

Install Linda, paste a config, and your form turns into an agent that fills its own inputs.