A lightweight Manifest V3 browser extension that pastes your saved AI prompts into Claude, ChatGPT, Gemini, and any other text box with a single right-click. Your prompts live in your own Airtable base, so they stay in sync across every device and browser you use.
Stop digging through a notes file for that prompt you type ten times a day — save it once, then right-click to drop it in. Save time, stay consistent.
- Right-click to paste — pick any saved prompt from the context menu and it's dropped straight into the focused input. No copy-pasting, no switching tabs.
- Works where you do — one-click paste on Claude, ChatGPT, Gemini, and Perplexity, plus generic fallbacks for any
textarea, textinput, orcontenteditablefield. - Synced across devices & browsers — your prompts live in an Airtable base you control, so the same library shows up everywhere you install the extension. Full create / edit / delete from the popup.
- Offline-friendly — prompts are cached in
chrome.storage.local, so the right-click menu works instantly even when Airtable is unreachable (editing is disabled while offline). - Import, search & export — bulk-import prompts from a JSON file (exact duplicates are skipped), search your library instantly, and download a JSON backup anytime.
┌──────────┐ edits ┌─────────────────┐ caches ┌──────────────────────┐
│ Popup │──────────▶ │ Airtable │ │ chrome.storage.local │
│ (manager)│◀────────── │ (source of truth)│ │ (prompts) │
└──────────┘ reads └─────────────────┘ └──────────┬───────────┘
│ reads
┌──────────▼───────────┐
│ background.js │
│ (builds context menu)│
└──────────┬───────────┘
│ insertPrompt
┌──────────▼───────────┐
│ content.js │
│ (inserts into input) │
└──────────────────────┘
popup.jsis the only component that talks to Airtable. On save/delete it updates Airtable, then writes a cached copy tochrome.storage.localand tells the background worker to rebuild the menu.background.jsreads only from the cache, so the right-click menu is ready instantly even when the service worker was just restarted by the browser.content.jsreceives the chosen prompt and inserts it into the active field using several fallback strategies (execCommand→ clipboard paste → manual DOM range).
- Clone or download this repository.
- Open
chrome://extensions(oredge://extensions). - Enable Developer mode (top-right).
- Click Load unpacked and select this folder.
- The Easy Prompts icon appears in your toolbar.
Firefox MV3 runs the background as an event page rather than a service worker, so it
ships with its own manifest: manifest.firefox.json.
- Replace the default manifest with the Firefox one (keep a copy of the original):
cp manifest.firefox.json manifest.json
- Open
about:debugging#/runtime/this-firefox. - Click Load Temporary Add-on… and select the
manifest.jsonfile.
Temporary add-ons are removed when Firefox restarts; for permanent installation the extension needs to be signed via addons.mozilla.org.
- Create an Airtable base with a table containing two fields:
Title— a short name for the prompt (shown in the context menu).Description— the prompt text that gets inserted.
- Create an Airtable Personal Access Token with the
data.records:readanddata.records:writescopes, and grant it access to only the base you just created. - Open the extension popup → Settings and enter:
- Base ID — the
app…id from your base URL or the API docs. - Table Name — e.g.
Prompts. - API Key — the
pat…token from step 2.
- Base ID — the
- Click Test & Save. Your prompts load into the Prompts tab.
If your table uses different field names, change AIRTABLE_FIELD_TITLE / AIRTABLE_FIELD_DESCRIPTION at the top of popup.js.
- Click into any text box, then right-click → Easy Prompts → your prompt.
- Manage prompts from the toolbar popup (Add / Edit / Delete / Search / Import / Export).
Not sure what to add first? Five ready-to-use prompts live in
prompts/starter-prompts.json. The fastest way to add
them: open Add New → Import Prompts (at the bottom of the tab) and select that file —
all five load in one click (exact duplicates are skipped). Or copy an individual Title
and Description into the same tab.
| Title | What it does |
|---|---|
| Senior Software Engineer | Reviews code/problems for correctness, edge cases, and performance |
| Explain Simply (ELI5) | Explains any topic in plain language with a quick analogy |
| Proofread & Polish | Fixes grammar and improves clarity while keeping your voice |
| Summarize the Key Points | Gives a TL;DR plus the 3–5 most important bullets |
| Professional Email | Turns rough notes into a clear, polite, well-structured email |
The file is stored in the same { "title", "description" } shape the extension uses — the
same shape Export produces — so exported backups re-import cleanly too. Contributions
of new starter prompts are welcome!
Bulk-add prompts from a JSON file — great for the starter prompts, restoring a backup, or moving your library to a new Airtable base.
To import:
- Open the popup → Add New → Import Prompts (at the bottom of the tab).
- Choose a
.jsonfile (e.g.prompts/starter-prompts.json). - Confirm the count in the prompt that appears.
The file must be a JSON array of objects, each with a title and a description:
[
{ "title": "Explain Simply (ELI5)", "description": "Explain the following topic…" },
{ "title": "Summarize the Key Points", "description": "Summarize the following…" }
]Any extra fields (such as the id that Export includes) are ignored, so exported
backups re-import without edits.
Because Airtable is the source of truth, importing writes to Airtable and then updates the local cache — you must be configured and online to import. Under the hood:
- Read & parse — the file is read and parsed as JSON. Anything that isn't a JSON array is rejected with a clear message.
- Validate — only entries with a non-empty
titleanddescriptionare kept; incomplete entries are dropped and anyidfield is discarded. - De-duplicate — entries whose
title+descriptionalready exist in your library (or repeat within the file) are skipped, so re-importing is safe. - Confirm — you're shown how many prompts will be added (and how many duplicates will be skipped) before anything is written.
- Create in batches — records are sent to Airtable in batches of 10 (Airtable's per-request limit), paced to stay within its rate limit.
- Sync — on success the new prompts are cached in
chrome.storage.localand the right-click menu is rebuilt. If a batch fails partway through, the extension re-fetches from Airtable so the popup, cache, and menu all reflect what was actually saved.
A summary toast reports how many prompts were imported and how many duplicates were skipped.
- Your Airtable Personal Access Token is stored in
chrome.storage.localin plaintext (standard for extensions — it never leaves your machine except in requests toapi.airtable.com). Scope your token to a single base so a leaked token can't reach the rest of your Airtable account. - The extension requests
<all_urls>host access so it can insert prompts into text boxes on any site. It only reads/writes the field you click into; it does not collect or transmit page content anywhere. - No analytics, no third-party servers other than Airtable.
| File | Purpose |
|---|---|
build.js |
Generates both manifests from a single source (node build.js) |
package.json |
Package metadata + build / check-manifests scripts (no runtime deps) |
manifest.json |
Generated MV3 manifest for Chromium browsers — do not edit by hand |
manifest.firefox.json |
Generated MV3 manifest for Firefox (event-page background + gecko settings) — do not edit by hand |
background.js |
Service worker: builds the context menu, injects the content script |
content.js |
Inserts prompt text into the focused input |
popup.html / popup.css / popup.js |
Popup manager UI + Airtable client |
icons/ |
Toolbar / store icons (16, 32, 48, 128px) |
prompts/ |
Starter prompts you can copy into the extension (starter-prompts.json) |
Issues and pull requests are welcome — see CONTRIBUTING.md for how to set up, test, and submit changes. Some good starting points:
- Storing prompts locally without Airtable as an option.
- Higher-resolution source icons.


