Eric Le

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.