> ## Documentation Index
> Fetch the complete documentation index at: https://docs.memloom.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Browser extension

> Save the page you're on so your agents can find it later

## Overview

The extension saves a page to memloom in two clicks. It keeps two things: the page's text, as a
[context document](https://docs.memloom.dev/cli/context.md), and a short memory saying you saved it to study later, with your
note if you wrote one. An agent asked "what did I want to read about retrieval?" finds the memory
through `recall_memory`. A question about the topic itself finds the page's text.

By default it talks to the daemon on `127.0.0.1:4319`, so the daemon has to be running. To save to
a hosted memloom instead, set its address and a token in the extension's
settings.

> [!NOTE]
>
> It works in Chrome, the other Chromium browsers (Edge, Brave, Arc) and Firefox 140 or later. It
> isn't in any extension store yet, so you load it from the repo.

***

## Install

> [tab] Chrome
>
> 1. Clone the repo, or pull it if you already have it.
> 2. Open `chrome://extensions` and turn on **Developer mode**.
> 3. Click **Load unpacked** and pick the `apps/extension` folder.
>
> The manifest pins a public key, so the extension gets the id
> `ebfjmgjkgcdcmpcgpbgglcdmddfndmnp` on every machine. The daemon accepts that id with no setup.

> [tab] Firefox
>
> 1. Clone the repo, or pull it if you already have it.
>
> 2. Open `about:debugging#/runtime/this-firefox`.
>
> 3. Click **Load Temporary Add-on** and pick `apps/extension/manifest.json`.
>
> 4. Copy the **Internal UUID** shown under memloom and add it to `~/.memloom/config.env`:
>
>    ```bash theme={null}
>    MEMLOOM_EXTENSION_IDS=your-firefox-internal-uuid
>    ```
>
> 5. Restart the daemon.
>
> 6. Click the memloom icon, then **Save** once, and allow access to `127.0.0.1:4319` when
>    Firefox asks. Firefox installs that permission switched off.
>
> Firefox gives every install its own UUID, so no manifest can pin it the way Chrome's key does.
> If you skip step 4, the popup's error names the UUID to add. A temporary add-on is removed
> when Firefox restarts, so you load it again after each restart.

The daemon accepts these extensions and refuses every other one.

***

## Saving

| How | What it sends |
| - | - |
| Toolbar button, or `Alt+Shift+S` | The page as you see it, a folder and an optional note |
| Right-click a page, **Save page to memloom** | The page as you see it, into the last folder you used |
| Right-click a link, **Save link to memloom** | Only the URL. The daemon fetches the page itself |

Saves go to `reading-list` unless you pick another folder. Type in the folder picker to filter
the tree, or type a new path such as `reading-list/papers` to create it.

In the viewer, the page shows on the **Documents** tab as a `link`, and the "saved to study later"
memory with your note shows on the **Memories** tab. Both sit in the folder you picked. Saving runs in the background, so the popup closes right away. While the daemon works, the
toolbar icon shows `…`, then a tick or a `!`. Hover the icon to read the error. A daemon busy
transcribing recordings can take several seconds over a save.

The extension sends the rendered page, so pages behind a login and single-page apps save with
their real content. For a YouTube video, the parser also tries to pull its captions as a transcript. Saving the
same page again updates it rather than adding a copy.

***

## Saving to a hosted memloom

A hosted memloom wants a token on every request. Make one for the extension on the server:

```bash theme={null}
docker compose exec memloom memloom token create --label extension
```

Then open the extension's settings: the **Settings** link at the bottom of the popup, or
**Extension options** on `chrome://extensions`. Put the server's address, such as
`https://memloom.example.com`, and the token in, and click **Save and test**. The browser asks
once for access to that address. The page shows how many folders it found, or why it couldn't
connect: a wrong address, a missing token, or one the server refused.

**Use this computer** clears both and goes back to the local daemon. The token stays in the
browser profile's extension storage. Revoke it on the server with `memloom token revoke` if
that profile is ever lost.

The server allows the same extension ids the daemon does, set the same way with
`MEMLOOM_EXTENSION_IDS` in its environment.

***

## Other builds

A Chrome build with a different id, such as one you packed yourself, gets a `403` until you allow
it.
Put its id in `~/.memloom/config.env` and restart the daemon:

```bash theme={null}
MEMLOOM_EXTENSION_IDS=abcdefghijklmnopabcdefghijklmnop
```

Separate several ids with commas. A Firefox UUID and a Chrome id can sit in the same list.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.