aria
the manual

How to use
ARIA.

Install the extension, connect your ElevenLabs agent, learn every command, shortcut and voice trigger — plus how to ship it to the web stores when you’re ready.

section 01

Install the extension

download

Chrome — direct download

Download the latest build zip, unzip it, and load it as an unpacked extension. Takes about 30 seconds.

coming soon

Firefox Add-ons

ARIA ships with a Firefox build via webextension-polyfill.

Listed on Mozilla Add-ons once review completes. Load temporarily in the meantime (see below).

developer path

Load unpacked (Chrome / Edge / Brave)

  1. Download the ZIP (or grab any version from GitHub Releases) and unzip it.
  2. Open chrome://extensions, toggle Developer mode on.
  3. Click Load unpacked and pick the unzipped build/chrome-mv3-prod folder.
  4. Pin the ARIA icon so you can click it from the toolbar.
developer path

Load temporary add-on (Firefox)

  1. Download the Firefox build zip from releases and unzip it.
  2. Visit about:debugging#/runtime/this-firefox.
  3. Click Load Temporary Add-on and pick the manifest.json inside build/firefox-mv3-prod.
section 02

Connect your ElevenLabs agent

required

1 · ElevenLabs API key

Go to ElevenLabs → API Keys and create a key. Paste it into ARIA’s settings (the extension never sends it anywhere else).

required

2 · Create a Conversational AI agent

  1. Open Conversational AI and create a new agent called ARIA.
  2. Pick a voice. Jim / Riley / Zara all work well — Zara is the default.
  3. Copy the Agent ID from the agent’s URL or Overview tab.
required

3 · Paste the system prompt

ARIA’s persona, dynamic variables and client tools are managed in your dashboard. Open the extension’s Settings → Agent system prompt block for the exact prompt to paste, then:

  • Define these dynamic variables: mode, sass_level, page_title, page_url, page_text_snippet, arm_phrase, end_phrase.
  • Register these client tools: arm_focus_guard, disarm_focus_guard, set_focus_goal.
  • Enable the built-in end_conversation system tool.
  • Under Advanced, disable or raise the user inactivity timeoutso the agent doesn’t ask “are you still there?” during Focus Guard.
required

4 · Paste the Agent ID into ARIA

Open the extension settings, drop the Agent ID in the ElevenLabs Agent field, and click Run connection test. You should see token_endpoint: 200 ok and microphone: granted.

section 03

Commands & shortcuts

keyboard

Default shortcuts (Chrome limit: 4)

  • BBrief me. Opens the side panel and delivers a conversational morning briefing.
  • ATalk to this page. Captures page context and starts a realtime mic conversation about what you’re looking at.
  • FToggle Focus Guard. Arms or disarms the ambient drift-watcher for the active window.
  • LStop all playback. Emergency mute for any active ARIA session.

Remap any of these at chrome://extensions/shortcuts.

popup

Popup tiles

  • Brief me — same as ⌘⇧B.
  • Talk to this — same as ⌘⇧A.
  • Focus Guard toggle — live badge reflects state (ON when armed).
  • Settings — opens the full preferences tab.
in-session

Inside a session

  • Mute mic / Unmute mic — stops her from hearing background audio without ending the session.
  • Stop — ends the session cleanly and closes the realtime connection.
  • Highlight-to-read — select text on any page and trigger the context-menu item to have ARIA read / react to it.
section 04

Voice triggers

defaults

Arm Focus Guard by voice

While in a session, say “ARIA, watch my back”(or your custom phrase). She’ll call the arm_focus_guard tool, pick up today’s goal and start shepherding you.

Say “stop watching” or similar to disarm — this hits disarm_focus_guard.

defaults

End the conversation

Say “I’ll talk to you later” and the agent ends the live session with the end_conversation system tool. Focus Guard keeps running in the background — it’s a separate always-on layer.

customize

Customize the phrases

Open Settings → Focus Guard → Voice commands. Set the arm phrase and end phrase to whatever feels natural. They’re passed to the agent as the {{arm_phrase}} and {{end_phrase}} dynamic variables so the prompt stays in sync.

section 05

Tell her to run the browser

inventory

Ask what's open

Mid-session, say “what tabs do I have open?”and she’ll call list_tabs to read back an annotated summary — pinned, muted, grouped, and which ones are duplicates.

Try “any tab groups already?” for list_tab_groups.

close

Close tabs by intent, not by id

She can target tabs by id or by a semantic match. Things that work out loud:

  • “Close every YouTube and Reddit tab.”
  • “Kill the duplicates.”
  • “Close anything with ‘docs’ in the title.”
  • “Close the tab that’s making noise.” — matches audible: true.
  • “Keep this one. Close the other ones.” — the active tab is excluded by default.

The underlying tool is close_tabsand she’ll echo back the count + titles she removed.

organize

Group, ungroup, pin, mute

  • “Group all my Linear tabs into a red group called Work.” group_tabs with a title and color.
  • “Ungroup the Research group.” ungroup_tabs.
  • “Pin this tab.” / “Mute this tab.” pin_tab / mute_tab on the active tab when no id is supplied.
  • Group colors are constrained by Chrome: grey, blue, red, yellow, green, pink, purple, cyan, orange.
  • Groups must live in a single window — she’ll refuse if the match spans multiple.
navigate

Open and switch tabs

  • “Open linear dot app.” open_tab auto-prefixes https://.
  • “Jump to the Notion tab.” → she asks list_tabs, finds it, then calls activate_tab.
  • “Reload this and bypass the cache.” reload_tab with bypass_cache: true.
safety

What she won't do without asking

The system prompt tells her to confirm before destructive actions:

  • Closing more than a handful of tabs.
  • Ungrouping an existing group by name.
  • Closing pinned tabs (she excludes them unless you insist).

If you’d rather skip the confirmation step, loosen that line in the dashboard prompt. If you’d rather tighten it (e.g. always require a readback of titles), add that instruction there too.

section 06

Settings worth knowing

voice

Engine, voice & persona

  • Engine: auto picks Agents when ConvAI + mic are healthy, otherwise falls back to TTS.
  • Persona: Jim (warm), Riley (neutral), Zara (default / editorial). TTS uses the selected preset; Agents uses the voice configured on your agent in the ElevenLabs dashboard.
  • Sass level: 1 = polite, 2 = honest, 3 = unhinged. Plumbed through as sass_level.
focus

Focus Guard

  • Goal: what “on task” means today.
  • Blocked domains: ARIA nudges when you visit these.
  • Mode: soft = voice nudge, hard = voice + tab interrupt.
  • Quiet hours: muzzle her during calls or deep work.
data

Scheduled briefings & webhooks

  • Scheduled briefing: pick a time (e.g. 08:30) for a daily auto-briefing via chrome.alarms.
  • Webhook: point at your own endpoint returning JSON/text — calendars, emails, today’s tasks, whatever.
  • Privacy redaction: regex list that scrubs sensitive strings out of DOM snippets before they’re sent to ElevenLabs.
section 07

If something looks off

diagnostics

Run the connection test

Settings → Voice connection → Run connection test. You want:

  • convai access: 200 ok
  • token_endpoint: 200 ok
  • microphone: granted

A 401 on subscriptionis informational and doesn’t block Agents.

mic

Mic permissions

If the mic is denied, open the page’s padlock → Site settings → allow Microphone. Chrome sometimes also surfaces this via the URL bar camera icon.

agent

“agent_details 404” / prompt override blocked

These are not fatal. ARIA manages its persona via the dashboard prompt, not client overrides — make sure the system prompt, dynamic variables and client tools listed in section 02 are actually configured on your agent.

context

“Extension context invalidated”

Usually happens right after a rebuild. Close the side panel, reload the extension at chrome://extensions, and reopen.

section 08

Shipping to web stores

build

Build production bundles

From the repo root:

cd aria-extension
bun install
bun run build           # Chrome MV3 → build/chrome-mv3-prod
bun run build:firefox   # Firefox MV3 → build/firefox-mv3-prod
bun run package         # zips both builds into build/*.zip
chrome web store

Chrome Web Store

  1. Register a developer account at chrome.google.com/webstore/devconsole (one-time $5 fee).
  2. Click New item and upload chrome-mv3-prod.zip.
  3. Fill the store listing: name, summary, description, category (“Productivity”), screenshots (1280×800), 128×128 icon, small promo tile (440×280).
  4. Write a privacy policy describing: mic audio is streamed to ElevenLabs during sessions; API keys live in chrome.storage.sync; no analytics. Link it in the listing.
  5. In Privacy practices, declare permissions honestly: storage, activeTab, scripting, alarms, sidePanel, contextMenus, tabs, plus host access used for page reading.
  6. Submit for review. First review is typically 1–3 business days; subsequent updates are faster.
  7. Once live, paste the listing URL into aria-website/src/lib/install.ts → chromeWebStoreUrl. All install buttons update automatically.
firefox add-ons

Firefox Add-ons (AMO)

  1. Create a free account at addons.mozilla.org/developers.
  2. Click Submit a New Add-on, pick On this site, and upload firefox-mv3-prod.zip.
  3. Provide source for any minified/bundled code (point at the GitHub tag for the release so reviewers can reproduce the build).
  4. Fill listing metadata and privacy policy (same content as the Chrome listing is fine).
  5. Once approved, copy the listing URL into firefoxAddonsUrl in install.ts.
edge / brave / others

Edge Add-ons + self-hosted

  • Microsoft Edge Add-ons: the Chrome ZIP works as-is. Register at partner.microsoft.com, submit the same bundle.
  • Brave / Vivaldi / Arc: pick up the Chrome Web Store listing automatically once it’s live.
  • Self-hosted: attach the zip to a GitHub Release so the “load unpacked” path always has a recent build.
checklist

Before you hit submit

  • Bump version in aria-extension/package.json.
  • Confirm the production build loads without CSP errors.
  • Record two short screen captures (brief me + focus guard) for the listing.
  • Write a 1-paragraph release note for the GitHub release.
  • Double-check the privacy policy URL resolves and matches what’s declared in the store.