Type a prompt in one AI chat, send it to all of them.
ask'em is a Chrome (MV3) extension that mirrors a prompt you submit in one AI chat provider out to the other enabled providers in the same workspace. The provider you type in still sends natively; ask'em fans the same prompt — text and attachments — out to the targets by replaying it into each one's composer.
Seven providers are supported today, with more on the way.
| Provider | Host |
|---|---|
| Claude | claude.ai |
| ChatGPT | chatgpt.com |
| Gemini | gemini.google.com |
| Kimi | www.kimi.com (text only) |
| DeepSeek | chat.deepseek.com |
| Manus | manus.im |
| Grok | grok.com |
- Capture — a content script observes your submit (Enter / send button) and reads the composer text plus any attachments (paste, drop, file input, or transient detached inputs).
- Coordinate — the background service worker resolves the workspace, decides which providers to fan out to, and tracks per-provider delivery status.
- Deliver — for each target tab, an adapter replays the prompt into that provider's composer (synthetic paste / scoped file input / transient input) and confirms the result before submitting.
Attachments ride a dedicated transport: base64 chunks on the wire, raw bytes at rest in
IndexedDB, bounded by per-file / total / count / TTL budgets, and released as soon as the
fan-out for a submit completes. See docs/plan/attachment-sync.md
for the full design.
src/
adapters/ per-provider DOM strategy (capture, delivery, presence) + factory
background/ coordination: workspaces, delivery, settings, issues
content/ page-local capture, delivery controller, indicator UI
runtime/ shared contracts, message protocol, attachment store, pure transforms
entrypoints/ WXT entrypoints (content scripts, background, popup)
styles/ content + popup CSS
docs/ architecture notes, design plans, pitfalls
State ownership (background owns coordination, runtime owns contracts, content/popup own
local UI) is documented in docs/architecture/state-ownership.md.
Requires Node.js + pnpm. Built with WXT, React 19, and TypeScript.
pnpm install
cp .env.example .env.local # set WXT_SUPPORT_API_BASE_URL for the feedback endpoint
pnpm dev # launches Chrome with the extension loaded (HMR)| Script | Purpose |
|---|---|
pnpm dev |
Run the extension in dev mode |
pnpm build |
Production build |
pnpm package:chrome |
Production Chrome build and Web Store zip |
pnpm test |
Run the Vitest suite |
pnpm compile |
Type-check (tsc --noEmit) |
pnpm lint |
ESLint |
Before submitting code changes, run pnpm test, pnpm compile, and pnpm lint
to check behavior, types, and code style.
For a release package, increment the patch version in both package.json and
wxt.config.ts (unless targeting a specific version), then run pnpm package:chrome.
Keep both version values synchronized.
The only Chrome API permission requested is storage. Host access is limited to the
supported AI chat providers so the extension can run its content scripts there. The
support/feedback endpoint configured in .env.local is requested only as an optional
host permission when you submit feedback or provider requests.
.env.local (see .env.example) wires up the feedback/support backend:
WXT_SUPPORT_API_BASE_URL— Supabase Edge Function serving feedback (pnpm support:devruns it locally).WXT_FEEDBACK_ENDPOINT,WXT_MORE_PROVIDERS_REQUEST_ENDPOINT— optional overrides.
Sync behavior (global on/off, default fan-out providers, pause after first fan-out, auto-sync new chats, diagnostics) is controlled from the extension popup.
Copyright (C) 2026 Tuxi.
ask'em is free software licensed under the GNU Affero General Public License v3.0
(AGPL-3.0) — see LICENSE. You may use, study, share, and modify it; if you
distribute it or run a modified version as a network service, you must make your source
available under the same license.
A separate commercial license is available for uses that the AGPL does not permit
(e.g. shipping a closed-source product built on ask'em). Contributions are accepted
under maintainer-controlled licensing terms so this dual-licensing option stays open —
see CONTRIBUTING.md before submitting changes.