Skip to content

About

Queue follow-up messages while your AI chat is generating, then send them automatically in order when it’s ready.

Topics

Resources

Contributing

Stars

2 stars

Watchers

0 watching

Forks

Repository files navigation

AI Chat Queue logo

AI Chat Queue

Queue follow-up messages while your AI chat is generating, then send them automatically in order when it’s ready.

CI status GitHub stars Version Chrome extension Manifest V3

AI Chat Queue with three queued messages

⭐ Find this useful? Star the repo to help more ChatGPT users discover the queue :)

What it solves

ChatGPT normally accepts one message while a response is generating. This extension adds a Queue button and keyboard shortcuts: ⌘ + Shift + Enter on macOS, or Ctrl + Shift + Enter in general, so you can stage any follow-up draft, even while a turn is still active (for example during a tool approval). It displays the pending messages beside the composer and sends them one at a time as each response finishes.

Installation

From the Chrome Web Store

The store listing will be linked here after the first public release.

From a local build

You need Node.js and pnpm. Use the Node.js version in .nvmrc and pnpm 10.

git clone https://github.com/technway/ai-chat-queue.git
cd ai-chat-queue
pnpm install
pnpm build

Open chrome://extensions, enable Developer mode, choose Load unpacked, and select .output/chrome-mv3.

Usage

  1. Open ChatGPT and start a conversation.
  2. Type a message, then use the Queue button or press ⌘ + Shift + Enter on macOS, or Ctrl + Shift + Enter on Windows and Linux. Normal Enter keeps ChatGPT's native behavior untouched.
  3. Your message waits in the queue, then sends automatically when ChatGPT is ready.

Note

The queue currently supports text messages. Images and files are not queued yet.

How queueing works

  1. Queueing is always explicit: use the Queue button, ⌘ + Shift + Enter on macOS, or Ctrl + Shift + Enter on Windows and Linux. It never depends on the send-button or generation state, so it works while ChatGPT is idle, generating, unavailable, or waiting for a tool approval.
  2. Normal Enter is left completely native: ChatGPT decides what to do with it, including its own "Follow up" behavior.
  3. The queue drainer watches generation state. When a turn truly finishes, the next message is placed in the composer and submitted automatically. Messages are never sent merely because the send button happens to be enabled mid-turn.
  4. Pending messages can be moved up or down before they are sent.
  5. Queued messages can be edited in place; automatic sending pauses at the edited message while earlier messages continue.
  6. Queue state and UI preferences are stored locally per conversation. After a reload, pending work is restored paused so it can be explicitly resumed.

The extension does not send messages to its own service: it operates on the ChatGPT page already open in the browser.

The diagram below uses ChatGPT as the current provider example, while the shared runtime is designed to support additional AI chat providers.

flowchart TD
    DOM["AI chat DOM"] --> Content["Shared content runtime<br/>src/entrypoints/content.ts"]
    Content --> Registry["Provider registry"]
    Registry --> ChatGPT["ChatGPT provider<br/>adapters + selectors"]

    Content --> QueueAction["Explicit queue action<br/>Queue button + keyboard shortcuts"]
    QueueAction --> QueueService["QueueService"]
    QueueService --> QueueDrainer["QueueDrainer"]
    QueueDrainer --> GenerationState["Generation-state observer"]
    QueueService --> QueuePanel["QueuePanel<br/>(isolated shadow UI)"]
    QueueService --> QueueStorage["QueueStorage<br/>chrome.storage.local"]
    QueueDrainer --> ChatGPT
Loading

Provider-specific DOM knowledge stays inside the active provider. See the provider checklist for adding another AI chat site. Queue behavior is covered independently by unit tests and end-to-end tests against a local fake page.

Demo

AI Chat Queue in use on ChatGPT

Development

Start a development build with:

pnpm dev

The development extension is generated in .output/chrome-mv3-dev. Edit source files under src/; WXT rebuilds the extension during development.

For browser tests, install Playwright Chromium once:

pnpm exec playwright install chromium
pnpm test:e2e

The E2E suite loads the built extension into Chromium and serves e2e/fake-chatgpt.html at a ChatGPT URL. It never connects to production ChatGPT.

Privacy and permissions

  • Messages are used only for local queue management and are not sent to an AI Chat Queue backend.
  • No backend, analytics, telemetry, account service, or remote database is required.
  • No user data is collected by this extension.
  • Queued messages and queue preferences are stored in the browser's local extension storage, scoped to the conversation where they were queued.
  • The storage permission is used to persist queued messages and preferences across page reloads.
  • Content-script access is limited to chatgpt.com and chat.openai.com so the extension can read the composer state, render the queue button, and submit queued text.
  • The extension requests no tabs, scripting, identity, downloads, or network permissions, and the background service worker does not process user data.

See the full statement in PRIVACY.md.

Contributing

Please read CONTRIBUTING.md before opening a pull request. The short version is: open or find an issue, keep ChatGPT DOM knowledge inside the adapter, add tests for behavior changes, and run the local quality checks before submitting.

License

This project is licensed under the GNU General Public License v3.0.

Release

The release checklist and Chrome Web Store upload flow are documented in docs/RELEASING.md. The local release artifact is produced with:

pnpm zip

GitHub Actions runs quality checks, unit tests, browser E2E tests, and the extension build for pushes to main and pull requests targeting main.

About

Queue follow-up messages while your AI chat is generating, then send them automatically in order when it’s ready.

Topics

Resources

Contributing

Stars

2 stars

Watchers

0 watching

Forks

Releases

Used by

Contributors

Languages