Project
Caret
A prompt palette that opens where the cursor already is, on three chat sites that each handle text differently.
problem
The prompts worth reusing end up in a notes file, which means leaving the chat, finding the one you want, and pasting it back.
The gap is small and you cross it many times a day.
trigger
Typing the trigger symbol at a word boundary opens a palette anchored above the cursor. Fuzzy search filters the library and the keyboard inserts the prompt without leaving the input.
The symbol is configurable per site, because one that is free on a chat surface collides with a native shortcut on another.
adapters
Three sites, two editor models. Claude and ChatGPT render their inputs
through ProseMirror, Gemini uses a plain contenteditable.
Writing into either directly corrupts the host's own state, so each site gets an adapter that synthesizes the events a real keystroke would produce rather than setting the value.
The contenteditable adapter walks the DOM
to find an absolute cursor position across fragmented text nodes, which
is what makes the palette land in the right place rather than near it. Nothing
leaves the browser.