UMBRA DOCS / V1 / SYSTEM SPECIFICATION

Private intelligence,
specified.

Umbra is a browser-first private AI workspace. Redaction happens on your device, conversations and credits stay in the browser, models are swappable, and USDG funding settles on Ethereum when a treasury is configured.

Maintaineruseumbra
System classBrowser-first private AI workspace on Cloudflare Workers
Hard constraintsNo account · no server-side conversation storage · no training on user data
ScopePrivacy boundary, local state, routing, tools, API, and funding
01

Overview

The boundary is local; the providers are replaceable.

Umbra is a private AI workspace for asking questions, making images and video, writing code, and connecting your own tools. It is not a model, an account system, or a server-side archive of your conversations.

In browser chat, Smart Privacy detects recognizable details before the request leaves your device. A provider receives the redacted text; the browser keeps the reversible mapping and restores your context when the response returns.

THREAT BOUNDARY

Umbra reduces exposure at the browser boundary. It cannot guarantee that every sensitive detail is detected, and it does not redact API clients on their behalf.

Add the Orbio tools connector at /api/mcp/orbio with Authorization: Bearer sk-orbio-… to use read-only tools billed to your Orbio CREDIT.

02

Privacy model

Detect locally, substitute reversibly, restore locally.

Smart Privacy is the default. Full adds lower-confidence contextual categories, while Off leaves the prompt unchanged. The detector set covers names, email addresses, phone numbers, locations, URLs, IP addresses, EVM addresses and transaction hashes, secrets, financial identifiers, organizations, money, dates of birth, and health terms.

Mode matrix

ModeBehavior
SmartProtects identity and high-signal details.
FullAdds contextual and lower-confidence categories.
OffSends the text without browser substitutions.

Placeholder contract

Avery Chen → [PERSON_1]
avery@example.com → [EMAIL_1]
0x1234…7890 → [WALLET_1]
Lisbon → [LOCATION_1]

Each replacement is recorded in a local receipt. When the response arrives, the browser restores placeholders such as [PERSON_1] and [EMAIL_1] from the conversation vault. The Leak check surface lets you inspect a prompt without sending it anywhere.

LIMITS

Detection is heuristic. Coverage changes with the selected mode and detector categories, and unusual phrasing or unseen formats can pass through. Review the local receipt before trusting a protected request.

03

Chat and routing

One local boundary in front of many models and controls.

UmbraChat can use the configured model catalog directly or choose with umbra-auto. The router considers the prompt and available model capabilities; a selected model is shown with the response.

The Tune panel exposes temperature, reasoning effort where a model supports it, and optional web search. Search results include URL citations beneath the answer. UmbraCouncil sends one browser-redacted brief to up to three seats in parallel; council runs remain in memory and are not saved as conversations.

The model catalog lists the configured models, context windows, pricing, and declared capabilities. The usage dashboard stores only provider-reported accounting by day and model.

BRING YOUR OWN KEY

Bring your own Orbio key to route non-Venice models through your Orbio credits. Set the x-umbra-orbio-key header, or enter it in the Chat Tune panel. The key stays in your browser for chat use and is relayed per request. Learn more at orbio.so.

04

Local storage and memory

Browser state is useful, portable by export, and not synced.

Conversations, manually written memory entries, settings, usage records, connector registrations, and API key records use IndexedDB in this browser. Memory is optional manual context, not automatic learning or a profile inferred from your conversations. Umbra can suggest memories from your own wording, entirely in this browser.

The credits vault is encrypted with Web Crypto and can be exported as an encrypted recovery file. A wipe-data control clears local application state. There is no sync service: switching browsers or devices does not bring these records with you unless you explicitly export and import the relevant recovery data.

STORAGE POSTURE

Clearing local data, losing a recovery file, or losing access to this browser can make local conversations, memory, keys, and displayed credits unavailable.

05

Attachments

Extract in the browser, redact before a provider sees text.

Text files (.txt, .md, .csv, and .json), PDFs, and images can be attached in Chat. Text and PDF content is extracted in the browser; image data is passed only to models that declare vision support.

Extracted text uses the same privacy boundary as the prompt. The combined extracted text sent for a turn is capped at 120,000 characters, and the chat surface marks truncated attachments. Umbra does not provide server-side file storage.

06

Connectors (MCP)

Bring an HTTPS MCP endpoint into the browser-local workspace.

The Connectors surface stores endpoint registrations in this browser and uses the /api/mcp proxy for cross-origin requests. The proxy accepts HTTPS URLs and supports initialize, tools/list, and tools/call operations.

Discover tools and run them manually from the connector surface. Optional agentic tool use can ask the model to choose from discovered tools, with a maximum of three tool rounds in a turn. Arguments are restored before a connector call and results are redacted before returning to the model.

EXPERIMENTAL

Agentic tool use is experimental and has not been tested against a third-party MCP server.

Built-in Venice tools

Umbra also exposes its own Venice-backed MCP endpoint at /api/mcp/venice. Send Authorization: Bearer <Umbra API key> using a key from Developers. It provides exactly three tools: venice_web_answer, venice_characters_search, and venice_models. Arguments leave the browser after redaction, and calls spend Umbra's Venice credit.

07

UmbraCode

Describe a build, then inspect it inside an isolated preview.

UmbraCode turns a product idea into project files through the configured coding model. Its preview renders those files in an isolated sandboxed iframe rather than mixing generated markup into the workspace page.

The surface is designed for iterative prompts, file inspection, and a live preview. It does not promise a production deployment or replace a project's own security review.

08

API

An OpenAI-compatible interface for builders who own the client boundary.

The API is available at /api/agent/v1 relative to your Umbra host. Create persistent keys from Developers; keys can be revoked there or through the revoke endpoint. The full key is returned once and stored only in the browser that created it.

There are no accounts, so possession of a key is the authorization to revoke it. API requests are not browser chat: client applications must redact their own prompts before sending them.

A signed holder proof can attach a verified $UMBRA tier to a new key. Each key then has an enforced daily quota: 200 for Base, 1,000 for Holder, 5,000 for Circle, and 20,000 for Council.

curl https://{your-domain}/api/agent/v1/chat/completions \
  -H "Authorization: Bearer $UMBRA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model":"umbra-auto","stream":false,"messages":[{"role":"user","content":"Hello"}]}'
const response = await fetch("https://{your-domain}/api/agent/v1/chat/completions", {
  method: "POST",
  headers: {
    "Authorization": `Bearer ${process.env.UMBRA_API_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    model: "umbra-auto",
    stream: false,
    messages: [{ role: "user", content: "Hello" }],
  }),
});
const completion = await response.json();
console.log(completion.choices[0].message.content);
MethodPathPurpose
POST/chat/completionsStream or return a routed completion.
GET/modelsList configured models and capabilities.
POST/keysCreate a key from a label and expiry window.
POST/keys/revokeRevoke a possessed key.

Self-hosters can still sign tokens directly with UMBRA_API_SECRET. The API server does not store prompt or response text.

09

Credits and on-chain funding

A local ledger can be funded by a verified USDG transfer.

Credits are held in an encrypted, browser-only vault. The Credits surface reads wallet balances on Ethereum and, when a treasury is configured, sends USDG to that treasury. After confirmation, the browser verifies the receipt through the public RPC and grants matching local credits once per transaction hash.

Wallet connections support multiple browser extensions through EIP-6963, plus WalletConnect QR sessions when configured.

Sending USDG transfers real funds. It does not create an account or imply refunds. The treasury address is public build configuration from NEXT_PUBLIC_UMBRA_TREASURY; when it is absent, the top-up form remains unavailable.

Chain factConfigured value
Network / chain IDEthereum · 1
RPChttps://ethereum.publicnode.com with a public RPC fallback for read-only on-chain reads
Explorerhttps://etherscan.io
$UMBRA token0xbbd154b816c92c2b11a88f81c941da384c332762

Clearing local data or losing the recovery file loses the displayed local balance. Umbra does not hold an account balance on your behalf.

10

Limits and honest status

The useful boundary includes knowing what is not implemented.

FeatureStatusCurrent statement
Accounts and cross-device syncNot implementedState remains local to each browser.
Memory suggestionsLiveUmbra proposes memories from your own wording; nothing is suggested or stored outside your browser.
VoiceLiveDictation uses browser speech recognition; in Chrome, audio may be sent to Google, never to Umbra. Playback is local.
Conversation sharingNot implementedConversations have no public sharing link.
$UMBRA tier checkLiveHolder tiers and related benefits are active for the configured Ethereum token.
Holder API quotaLiveSigned wallet proof sets a key's tier; daily request quota per key is 200 (base), 1,000 (Holder), 5,000 (Circle), 20,000 (Council).
Holder limitsLiveA signed holder proof raises Council seats (5 on Circle and Council) and the max-token ceiling in chat and UmbraCode.
Holder priority routingLiveSigned holder proofs retry congested premium models and upgrade the automatic route for Circle and Council. The chat response reports the configured retry allowance in X-Umbra-Tier-Retries.
Holder votesLiveGET /api/holder/vote returns public poll tallies. POST requires a signed holder proof; votes weigh 1× for Holder, 3× for Circle, and 10× for Council. Only a hash of the wallet address is stored.
$UMBRA tokenLiveThe configured token is on Ethereum; holder benefits use signed proofs.
Fixed-term lock stakingPausedNew Ethereum staking opens soon after a staking contract is configured. Round 1 staking ran on Robinhood Chain; that pool remains withdraw-only at /stake.
Agentic MCP tool useExperimentalAvailable with a three-round cap; third-party MCP coverage is untested.

Provider availability, model capabilities, browser storage, detector coverage, and local credentials can all affect a result. This specification describes the shipped boundary, not a guarantee that every provider or browser behaves the same way.