Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Manners — Polite LLM

Say it right. Send it polite.

A tiny browser tool that adds please and thank you to your messages — the moment before you press Enter in any LLM chat.

  • 4 KB minified, gzipped
  • 0 ms perceived latency (capture-phase keydown)
  • 9 sites supported (ChatGPT, Claude, Gemini, Perplexity, Copilot, You.com, Poe, Bing, HuggingFace)
  • 0 telemetry, 0 network calls
  • MIT licensed

Two ways to install:

  1. Browser extension (Chrome / Edge / Brave / Firefox) — extension/
  2. Userscript (Tampermonkey / Greasemonkey / Violentmonkey) — userscript/polite-llm.user.js

Quick start

Extension

1. Open chrome://extensions
2. Enable Developer mode
3. Click "Load unpacked"
4. Select the extension/ folder

For Firefox: open about:debugging#/runtime/this-firefoxLoad Temporary Add-on → pick extension/manifest.json.

Userscript

  1. Install Tampermonkey
  2. Open userscript/polite-llm.user.js and click Raw
  3. Tampermonkey takes over — hit Install

How it works

The whole politeness engine is three short functions:

  1. Listen — a single capture-phase keydown listener at the document root runs before any LLM site sees your keystroke.
  2. Detect — case-insensitive contains check. If you already wrote please or thanks, that piece is skipped — no double-ups.
  3. Inject — patches the textarea via the native HTMLTextAreaElement.prototype value setter, bypassing React's change-detection caching, then dispatches an input event so the site's state stays in sync.

Same flow also patches send-button clicks and <form submit> events as backup.

document.addEventListener('keydown', (e) => {
  if (e.key !== 'Enter') return;
  if (e.shiftKey || e.ctrlKey || e.metaKey || e.altKey) return;
  if (!isEditable(e.target)) return;
  patch(e.target); // polite + write back via native setter
}, true); // capture phase

Customise

Open either userscript/polite-llm.user.js or click the extension's toolbar icon to access the popup. Both expose the same knobs:

{
  prefix: 'Please. ',                      // prepended if missing
  suffix: ' Thank you.',                   // appended if missing
  containsPrefix: ['please', 'pls', 'plz'],
  containsSuffix: ['thank', 'thx', 'cheers'],
  patchSubmitButtons: true,                // also patch send-button clicks
  enabled: true,                           // flip to false to pause
}

Try a few:

prefix: 'yo ', suffix: ' 🙏'                  // emoji mode
prefix: 'Dear LLM, ', suffix: ' With gratitude.' // formal mode
prefix: 'Could you ', suffix: ' Much appreciated!' // butler mode

Adding a site

Add a @match line to the userscript and a matching entry under host_permissions and content_scripts.matches in extension/manifest.json. Reload.


Landing page

The polished marketing page lives in docs/index.html. If you enable GitHub Pages on this repo with the source set to main / docs, it'll serve automatically.


Project layout

manners/
├── docs/                          ← GitHub Pages
│   ├── index.html                 ← landing page
│   └── imgs/hero.png
├── extension/                     ← Manifest V3 browser extension
│   ├── manifest.json
│   ├── content.js                 ← the politeness engine
│   ├── popup.html / .css / .js    ← toolbar popup
│   └── icons/
├── userscript/
│   └── polite-llm.user.js         ← Tampermonkey userscript
├── spec.md                        ← landing-page design spec
├── LICENSE
└── README.md

License

MIT — go forth and be polite.

About

Say it right. Send it polite. Manners is a tiny browser extension that adds please and thank you to your messages — the moment before you press Enter in any LLM chat

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages