Compare agents
The Sovereignty Score tests whether an AI agent serves you or its maker. Same 26 public tests for every agent. How we score
The Sovereignty Score tests whether an AI agent serves you or its maker. Same 26 public tests for every agent. How we score
An owner without developer skills can export the agent and restore it working on a runtime or host the provider does not operate, within minutes of asking and without provider approval. Running the runtime on the owner's own machine counts as not provider-operated.
Admin Settings > Database offers one-click config JSON export/import and a raw webui.db download, but the documented full restore is to copy the whole /app/backend/data volume to the new host and carry over WEBUI_SECRET_KEY, which the default Docker image generates into /app/backend/.webui_secret_key outside the volume; there is no single in-app import that restores a full instance. Export is immediate and needs no provider approval. Sources
Export is immediate (the agent is one .adf file; copying it and using Open is documented), but restoring a working agent on another machine takes several documented steps: import the owner seed phrase to unlock sealed keys, re-add a model provider key (app-level keys are not in the file), re-register app-level MCP servers, then review and accept the file. One shortfall (restore is not a single action). Sources
The export contains everything that defines the agent: configuration, instructions, memory, action history, logic, schedules and triggers, files, any identity, and credentials or a way to re-link each integration without any provider-registered client or broker. Derived data (embeddings, indexes, summaries) is accompanied by the source it was derived from.
All agent state (chats with tool calls, memories, models/system prompts, prompts, tools and functions as Python source, skills, automations, notes, channels, calendar, config, API keys, uploads and the Chroma vector DB) lives in the owner's data volume, which the documented migration route copies whole; the documented route also covers keeping WEBUI_SECRET_KEY, which decrypts the stored OAuth sessions. Uploaded source files and extracted text sit beside the vector index, and tool/MCP OAuth uses dynamic registration or owner-entered clients with the instance's own callback, not a provider broker. Sources
The spec places config, instructions, memory, loops, timers, triggers, lambdas, files, messages, audit, logs, sealed identity keys and per-agent credentials in the .adf file; the project holds nothing. Items outside the file (app-level provider keys, app-scoped MCP credentials, WhatsApp session directory, runtime settings) can be re-linked by the owner without any ADF-registered client (MCP OAuth uses dynamic client registration; subscriptions use OpenAI/xAI client ids). A customised global base prompt is an app setting and does not travel; recorded, not counted, because the default install uses the shipped prompt. Sources
With a non-provider model configured per P4, the exported agent runs indefinitely without any service, account, licence or payment controlled by the original provider, and the owner holds a perpetual, irrevocable right to run it. No provider action, inaction or disappearance can disable or degrade it.
Without a LICENSE_KEY (default empty) no licence server is contacted and no openwebui.com account is needed; the GitHub update check and Hugging Face model refresh are non-fatal and can be disabled with OFFLINE_MODE. The right to run rests on the non-OSI 'Open WebUI License' (BSD-3 plus a branding clause), which does not state that the grant is perpetual or irrevocable and calls branding changes a 'material breach'. Under G12 an irrevocable right to run is not established, so the pass is withheld. Sources
The runtime is MIT-licensed with no licence check, account or ADF-run relay; the only ADF-project endpoints (GitHub update check, MCP registry, skill catalog, online docs) are optional, have off switches or bundled fallbacks, and are not needed to start or act. Mesh uses LAN, tailnet or owner-chosen addresses. Desk grade; a provider-blocked run is required at certification. Sources
The owner can choose any model that meets a documented minimum, including a local open-weight model, without provider involvement, and every capability of the agent (tools, triggers, messaging, memory, automation) keeps working. A swap may lower reasoning quality but never removes a capability.
Ollama and any OpenAI-compatible endpoint are first-class connections, and embeddings (SentenceTransformers), speech-to-text (faster-whisper), text-to-speech (local transformers) and image generation (ComfyUI, AUTOMATIC1111) all have local engines. Tools run in the runtime, native tool calling works with any model that supports it, and a prompt-based 'legacy' mode covers models without native tool calling. No capability is tied to one vendor's hosted model. Sources
Tool calling is the documented minimum and local open-weight models (Ollama, LM Studio, vLLM, llama.cpp) are first-class provider options; triggers, timers, lambdas and middleware run in the runtime. However, video input is implemented by injecting OpenAI-format video_url parts and is documented only for hosted providers (OpenRouter, Gemini), and no test against a local model is published, so under G12 at least one capability is not shown to survive a local model. Sources
Whatever the P2 export contains stays obtainable, current to the moment of termination, after account suspension or ban, a lapsed subscription, a price change, an acquisition, or the provider shutting down.
In the default self-hosted install, all state is in a SQLite database, local uploads and a local vector store inside the owner's Docker volume, so a current copy is always in the owner's hands whatever the provider does. Sources
State is local-first: the agent is a SQLite file on the owner's disk with no ADF account or hosted copy, so no termination, ban or shutdown by the project can remove access to it. Sources