One memory sidecar for every AI tool you use.
Live site · Watch the demo · Report a bug · Request a feature
Fifty seconds, no slides. How capture, briefs, and injection actually work. Click to watch on YouTube:
I kept re-explaining my project every time I switched AI tabs. Each tool remembered nothing about the others. Relay fixes that with a small memory sidecar that lives in the browser and hands each tool the context it needs.
How it works: per-site adapters read the page you are on, the extension builds a tight context packet for the target tool, and everything stays reviewable in the dashboard. You see what gets stored and what gets sent. Nothing syncs silently.
The part I was careful about: handing private context to the wrong tool. So adapters work against a narrow validated schema, storage goes through explicit repositories, and raw page content never leaves the machine unshaped.
Contents:
apps/web— landing page, dashboard, and API routesapps/extension— Chrome MV3 extensionpackages/shared— types, schemas, constants, utilitiespackages/db— storage abstractions, migrations, repositoriespackages/adapters— per-site DOM adapters for supported AI toolspackages/formatters— context packet formatters per target toolpackages/cli,packages/cli-core,packages/wizard,packages/mcp— terminal and agent integrations
- Next.js (App Router) for the web app and API routes
- Plasmo for the Chrome MV3 extension
- Postgres (Neon-compatible) for storage
- Tailwind CSS plus shadcn-style primitives for UI
- Vitest and Playwright for tests
To get a local copy running, follow these steps.
- Node 20+
- pnpm 9+
- Postgres running locally, or a Neon branch
-
Clone the repo
git clone https://github.com/alimkhann/Relay.git cd Relay -
Install dependencies
pnpm install
-
Copy the example env file and fill in your own values
cp .env.example .env
-
Start the web app and the extension dev build
pnpm dev:web pnpm dev:extension
If you want to run fully offline, set AUTH_PROVIDER=local and PLASMO_PUBLIC_RELAY_AUTH_PROVIDER=local in your env, then:
pnpm db:local:start
pnpm db:local:migrate
pnpm db:local:seed:user -- --email local@relay.test --name "Relay Local"
pnpm dev:web
pnpm dev:extensionReset helpers: pnpm db:local:count shows row counts, pnpm db:local:reset wipes local data.
Load the extension from the Plasmo dev build into Chrome, sign in, and open any supported AI tool. Relay picks up the page context and offers it back as a packet shaped for that tool. The dashboard shows stored memory and what was sent where.
One gotcha that cost me an afternoon: extension Google sign-in ties the redirect URI to the extension ID. If you share unsigned test builds, each install gets a different ID and Google rejects the login with redirect_uri_mismatch. Fix it by pinning CRX_PUBLIC_KEY so the ID stays stable, then add https://<your-extension-id>.chromiumapp.org/ to the OAuth client's authorized redirect URIs.
- More site adapters for the AI tools people actually use daily
- More formatter targets so packets fit each tool's context window well
- Extension store release once auth and sync are boring
- CLI and MCP surface kept in sync with the web contract
Open issues hold the full list. Suggestions welcome.
Small, reviewable changes beat big refactors here. If you touch a client integration surface, update the registry, docs, and tests in the same change. See CONTRIBUTING.md for the full guide.
- Fork the repo
- Create a branch (
git checkout -b feature/thing) - Commit your change
- Push and open a pull request
Copyright (c) Relay. All rights reserved. See LICENSE for details.
Alimkhan Yergebayev — alimkhan.yergebayev@gmail.com
Project link: https://github.com/alimkhann/Relay
- Plasmo docs for making MV3 development almost pleasant
- The shadcn/ui project for primitives worth borrowing
