Skip to content
anouk

Open source · MIT · on npm

Build AI-powered browser extensions in minutes, not days.

Anouk is a small, friendly framework for shipping browser extensions that call LLMs. Plug in OpenAI, Anthropic, Together.xyz, Ollama, or Hugging Face. Get caching, rate-limit queueing, and a settings panel for free.

# scaffold a new AI extension

$ npm install -g anouk

$ anouk init my-ai-extension

$ cd my-ai-extension && npm run build

# load unpacked in chrome://extensions and you're live

5

provider profiles documented in the README

1

command to scaffold a runnable extension

MIT

license — fork, ship, sell on the store

What is Anouk?

The AI half of a browser extension, already wired

Anouk is two things in one npm package. First, a runtime libraryAIService, configManager, and settingsPanel — that you import into any Manifest V3 extension to add AI features. Second, a CLI (anouk init) that scaffolds a working extension with the runtime pre-wired.

The bet: for a meaningful slice of AI features, the model call belongs in the extension, not on a backend you operate. The user supplies their own provider URL, key, and model in the settings panel; the extension calls the provider directly over fetch. No server on the critical path.

Lower latency

No extra hops through a backend you host.

Stronger privacy

Content never crosses a server the developer controls.

Zero operating cost

Static site + open source; the user pays their own provider.

What you get

The boring AI plumbing, already done

Providers

Bring any OpenAI-compatible provider

Anouk speaks the OpenAI chat-completions shape, so OpenAI, Anthropic, Together.xyz, Ollama, and Hugging Face Inference all plug in with a URL, an API key, and a model name. No SDK juggling, no per-provider adapters in your extension code.

Caching

Built-in caching, keyed per request

AIService caches responses by a request id and cache key you control, so repeated calls (re-opening the same email, re-running the same summary) skip the round trip and the bill.

Reliability

Rate-limit queueing out of the box

Provider quotas are unforgiving. Anouk queues calls per-provider so a clicky user does not blow your token budget or earn a 429 in the middle of a sidebar render.

UI

A runtime settings panel

Pre-built settings panel that lets users set provider, key, model, and system prompt at runtime. Values persist in chrome.storage.local. You ship one bundle; the user chooses what to run against.

CLI

CLI that scaffolds in one command

anouk init my-extension drops a working Manifest V3 project on disk with the AI service, config manager, and settings panel pre-wired. Load it unpacked in Chrome and iterate.

Workflows

Use as a library or as a starter

Already have an extension? npm install anouk and import { AIService }. Starting from zero? anouk init gives you a runnable extension that talks to a model on the first build.

Three lines to an AI feature

Call a model from inside your extension

One AIService.call() handles config, caching, queueing, and the provider request. You get back a plain string.

src/content.js — summarize the page
import { AIService } from 'anouk';

// user set provider + key in the settings panel
const summary = await AIService.call(
  'Summarize this page in 3 bullets',
  document.body.innerText,
  `summary_${location.href}`
);
renderSidebar(summary);
what Anouk does for that one call
1. reads providerUrl / apiKey / model from config
2. builds cache key `${requestId}_${cacheKey}`
3. returns cached answer if present  // no spend
4. else enqueues per-provider (rate-limit safe)
5. POSTs OpenAI chat-completions shape via fetch
6. caches + returns the text

No SDK, no backend, no per-provider glue in your extension code.

Bring your own provider

One adapter, every OpenAI-compatible endpoint

Set providerUrl to any endpoint that speaks the OpenAI chat-completions shape.

O
OpenAI api.openai.com
A
Anthropic api.anthropic.com
T
Together.xyz api.together.xyz
O
Ollama localhost:11434
H
Hugging Face api-inference.huggingface.co

How a request flows

From content script to model and back

01 · extension.js

Your code calls AIService

Pass an instruction, a piece of content, and a stable request id. Anouk handles everything from there.

02 · cache check

Lookup by request + key

If the same prompt has already been answered for this id, you get the cached response. No round trip, no spend.

03 · queue + dispatch

Rate-limit-aware fetch

The request is queued per provider so simultaneous user actions do not stampede the API. Anouk speaks the OpenAI chat-completions shape.

04 · response

Decoded, cached, returned

The model output is parsed, written to cache, and returned to your extension code as a plain string.

Honest comparisons

How Anouk fits next to other extension frameworks

Plasmo and WXT are great at building extensions in general. Anouk is opinionated about the AI part. Pick the right tool — sometimes that's not us.

FAQ

Questions builders ask first

+ Which browsers does Anouk target?

The CLI scaffolds Chrome-style Manifest V3 extensions with host_permissions, storage, and unlimitedStorage wired up. The current template is built and tested against Chromium-based browsers; the README walks through loading via chrome://extensions. Firefox and Safari WebExtensions are not currently demonstrated by the repo.

+ Which AI providers can I plug in?

Anything that speaks the OpenAI chat-completions request shape. The README documents OpenAI, Anthropic, Together.xyz, Ollama (localhost:11434), and Hugging Face Inference endpoints, and lets you point providerUrl at anything else compatible.

+ Do I need an API key at build time?

No. AIService accepts config via code, but the bundled settings panel lets the end user supply providerUrl, apiKey, model, and a system prompt at runtime. You can ship without baking a key into the extension.

+ What does the CLI actually generate?

anouk init produces a Manifest V3 project with src/aiService.js, configManager.js, settingsPanel.js, and a starter extension entry point. anouk generate extension|service|config drops the same kind of file into an existing project.

+ Is it a runtime or just a starter?

Both. You can npm install anouk and import { AIService } into your existing extension to use only the request, cache, and queue layer. Or you can use anouk init as a complete scaffold.

+ How is the framework distributed?

It is published to npm as anouk, MIT licensed, and developed in the open on GitHub under skelf-research/anouk. Install instructions and CLI commands are linked from the docs site.

+ Where do I read the actual docs?

Documentation lives at docs.skelfresearch.com/anouk (path-based, not a subdomain). The README is a quickstart; the docs site is where examples, recipes, and the full configuration surface live.

Read all FAQs →

Explore the docs

Everything else worth reading

The full map of the site — dig into use cases, the architecture, the glossary, comparisons, and the blog.

Stop wiring up fetch + cache + queue

Install anouk, scaffold an extension, point it at a provider, and spend your weekend on the part of your product that is actually new.