Repository navigation
Web Access and Connected Apps
SLM works fully on your computer. Web access is an optional extra for one purpose: letting an AI app that runs on the internet, such as ChatGPT, Claude on the web, Composio or Muse, recall from and, if you allow it, save to the same memory your local agents use. It is off until you turn it on, and it only turns on when you approve an app. Your database never leaves your computer: an app asks your computer a question and gets an answer back.
Your computer opens one outbound link to a connection gateway. There is no tunnel to configure, no open port and no account to create beyond a GitHub sign-in. A web app talks to the gateway, the gateway relays each call down your link, and your computer answers it from the local engine. If your computer is asleep or offline the app gets connector_asleep, never an empty result that looks like a real answer.
Each relayed call carries a grant signed by the gateway that names what the app may do, and your computer verifies it before running anything. Credentials are kept in your operating system's secure store, never in the browser. A relayed request is limited to 1 MiB, a response to 4 MiB, and a call has a 25-second budget. Your computer takes up to 8 web requests at a time and answers connector_busy (HTTP 429) beyond that.
The local core never needs any of this. Claude Code, Codex, the CLI, SLM-Mesh and the answer checks all run without Web access, and a problem in the connection never stops local SLM from starting.
SLM installed and running on a computer that stays on and online while the app needs your memory. A GitHub account, used only to sign in to Web access. An app that supports a custom remote MCP connection with OAuth sign-in; whether your plan with that app allows one is up to the app.
- Open the dashboard (
slm dashboard) and choose Connected apps under Integrations. - Under Set up an app, choose the app: ChatGPT, Claude (web), Claude Code (web), Composio, Muse or Other app (MCP). The choice only picks which instructions are shown.
- Under What this app can do, tick Turn on internet access for this app, and choose whether it may save memories and use session tools.
- Select Link this computer with GitHub and finish the sign-in. Wait for Web access is on.
- Add SuperLocalMemory to the app. Most apps ask only for the MCP server URL; some also ask for the OAuth metadata URL. Both are shown on the page under Technical details. Sign in with the same GitHub account when the app asks, and approve its permissions.
- Paste the text from Copy instructions into the app's instructions, so it knows when to recall and what to save. Connecting gives an app the tools, not the judgment to use them well.
- Ask the app something your memory knows. Only a completed round trip proves the connection works.
The page reaches one memory profile, the one active when you turn Web access on. Switching profile clears an unfinished sign-in and resets the permission boxes.
| Permission | What it allows | Tools |
|---|---|---|
| Read (always on) | Look things up |
recall, search, fetch, get_status
|
| Save | Remember new things | remember |
| Session tools | Open and close sessions, report whether a memory helped |
session_init, close_session, report_feedback, report_outcome
|
| Mesh | Message your other bots |
mesh_peers, mesh_send, mesh_inbox, mesh_wait, mesh_state (see Bots That Talk) |
| Pictures and documents | Save and read pictures and PDFs |
remember_media, get_media, remember_document, media_status, media_upload_link (see Pictures and Documents) |
Saving and session tools are separate choices and are off unless you tick them. Mesh and media each need a second yes, a switch on the Web access row of Connected apps, in addition to the app's own approval. An app can never delete, retire or correct a memory, share one with another profile, switch profile, or run any other tool; those stay on your computer. Host-only tools are always refused to a remote caller. Remove access ends one app immediately, and Turn off ends Web access for every app at once, with your memory untouched.
Anything an app reads is shared with that app and the AI service behind it, and anything it saves travels to your computer through the link. Memory text returned to an app is whatever is stored for that key's one bound profile, with host details such as paths, your home folder and account names withheld. Treat it like any other service you give access to.
An app cannot reach a file on your computer, and you cannot paste a PDF into most chat boxes. So an app asks SLM for a one-time link, hands it to you, and you open it and choose the file.
sequenceDiagram
participant App as Web app
participant SL as Your SLM
participant P as You (browser)
participant GW as Connection gateway
participant RL as Relay on your computer
App->>SL: media_upload_link(kind: image or document)
SL->>SL: mint a link: token hash only, 10 minutes,<br/>at most 3 open per connection
SL-->>App: one-time URL
App-->>P: gives you the URL
P->>GW: open the link, choose the file
GW->>RL: info, then chunks of up to 700 KB, then finish
RL->>RL: check the token and the app's write and media permission on every step
RL->>RL: check file type from the first bytes, size, order
RL->>SL: save the picture or PDF
SL-->>RL: stored, processing, duplicate, refused or warming
RL-->>GW: plain-language result
GW-->>P: Saved to your memory
Code: mcp/tools_media_upload.py, media/upload_links.py, remote_connections/upload_relay.py, server/routes/media_upload.py, server/remote_tool_policy.py.
A link belongs to the app that asked for it and works for one file. It must be started within 10 minutes, and the upload must finish within 20 minutes of starting. A connection can have 3 open links and start 20 uploads a day, and each link allows 3 attempts. The file travels in chunks of up to 700,000 bytes and is checked on your computer, from its first bytes, for the kind of file the link was made for. The link's token is verified on your computer, which stores only a hash of it; the gateway relays the chunks and never holds the capability check. Treat a link like a password for one upload: anyone who has it before it is used can save one file into your memory. If the picture tools are still starting when the upload finishes, the page says so and you send the file again a minute later.
| What you or the app sees | Meaning |
|---|---|
connector_asleep |
Your computer is asleep or offline. Wake it and the app can try again |
connector_busy |
More than 8 web requests at once (HTTP 429). One at a time is enough. The project's older error guide calls this relay_busy
|
relay_timeout |
A call passed its 25-second deadline |
DAILY_LIMIT_REACHED |
The free daily allowance is spent; it resets later. Local use is never limited |
REVOKED or ENTITLEMENT_REQUIRED
|
Web access has ended or the app was removed |
Your computer's credential renews itself, so normally you do nothing, and the page shows Renews automatically. If renewal keeps failing and fewer than 7 days remain, the page says when Web access ends and asks you to check that the computer is online. Web access has ended means you turn it on again; Sign in again to keep Web access working means the GitHub sign-in lapsed. Each app's own sign-in also lapses after a period without use, and the app then signs in again.
Folder sources pause while Web access is set up. Pictures saved by an earlier release are held back from web apps until saved again, because they were vetted under an older rule. See Security, Company Mode and Teams and Privacy and Data Flow.
A different feature, slm remote, serves other computers on your network or tailnet, with no cloud involved. It is a second, TLS-only listener, off by default. slm remote tls init makes a certificate, slm remote enable --listen HOST:PORT turns it on, and slm remote keys add NAME creates a named key, shown once and bound to exactly one profile (--read-only for a read-only key). The listener serves /mcp and any path under it (a bare /mcp is served as /mcp/), plus GET and HEAD /health. Any other path is 404. Company mode refuses these keys: an enterprise deployment, or a workspace that requires sign-in. If that mode cannot be read, the keys are refused as well. slm remote keys allow NAME mesh|media grants the optional abilities, and slm remote check tests the setup.
Web access is not database replication and not SLM-Mesh. More guides are in the repository under docs/remote-access: connecting each host app, the architecture and trust boundaries, and how to check a connection end to end.
SuperLocalMemory: governed, local-first memory for AI agents. Home · Installation · Architecture · Privacy and Data Flow · CLI · MCP tools · FAQ
Part of Qualixar | Created by Varun Pratap Bhardwaj | GitHub · CHANGELOG
Platform boundary: Apple Silicon macOS, 64-bit Windows and 64-bit Linux. Linux covers x86_64 and ARM64. Intel Mac, 32-bit Windows and Windows on ARM are not supported.
SuperLocalMemory
Start here
How memory works
- Architecture
- How Remember Works
- How Recall Works
- Retrieval Score Contract
- Answer Check
- Memory Kinds
- Modes Explained
- Profiles
- Auto-Memory
- Active Memory
The living system
Governance and trust
- Governance
- Security, Company Mode and Teams
- Privacy and Data Flow
- GDPR
- Compliance
- Backup and Restore
- Cloud Backup
Beyond text
Connected systems
- Bots That Talk (SLM-Mesh)
- Connect Web Apps (steps)
- Web Access and Connected Apps
- Bounded Loops
- Framework Adapters
- Optimize
Operate and reference
- Dashboard Tour
- Configuration
- Embedding Models
- CLI Reference
- MCP Tools
- Capabilities and Operations
- Troubleshooting
- FAQ
Research
Archive