floating-prompt
A floating window for Claude Code that holds the turn open until you reply.

When a Claude Code turn ends or Claude needs an answer from you
(AskUserQuestion, ExitPlanMode, a permission gate, an idle
Notification), this popup appears in the bottom-right of your screen,
holds the turn open until you respond, then injects your answer back into
the conversation. Press a numbered option, type a free-text reply, or
dismiss with double-Esc — focus-independent, so you don't have to click
the window first.
Pure Win32 + Direct2D + DirectWrite. Every pixel is custom-painted, so the
look follows a designed style instead of standard Windows chrome.
Install
Windows only. Inside Claude Code:
/plugin marketplace add LuisRizo/floating-prompt
/plugin install floating-prompt@floating-prompt-marketplace
That's it. The prebuilt binary lives in the repo — no Rust toolchain, no
build step, no settings.json editing. Hooks are hot-loaded; no Claude
Code restart needed.
Verify with /hooks and /plugin list. To pin a specific release:
/plugin marketplace add LuisRizo/[email protected]. To remove:
/plugin uninstall floating-prompt@floating-prompt-marketplace.
What you get
-
Every hook event covered — Stop, AskUserQuestion (single /
multi / preview), ExitPlanMode (Approve), PreToolUse gates (Allow /
Deny / explain), PermissionRequest, and idle Notification. The four
hook bindings are declared in hooks/hooks.json and
wired by the plugin system at install time.
-
Multi-session aware — concurrent Claude Code sessions queue rather
than stack. One popup visible at a time, FIFO. A small badge in the
header shows how many more are waiting.
-
Double-Esc dismissal anywhere on screen — a global WH_KEYBOARD_LL
keyboard hook means you don't have to focus the popup first. The pips
in the footer arm on the first press, drain over a 600 ms window, then
reset.
-
Markdown in the message body — bold, italic, inline code, fenced
code blocks (mono + tinted background), headings, lists, horizontal
rules. Parsed with pulldown-cmark, styled via per-range
IDWriteTextLayout so it's one paint, no flicker.
-
Per-project palettes — six built-in palettes (slate, ocean,
amber, forest, plum, default). Pick one per project and the
popup remembers it.
-
Position persistence — drag the window anywhere; it stays put
across invocations (and re-clamps if your monitor layout changes).
-
Full keyboard editing — Ctrl + arrows for word jump, Ctrl + Backspace /
Delete for word delete, Ctrl + A / C / X / V, Home / End line-bounds,
Shift + Enter for newline, click-drag selection. Custom-painted edit
control — no EDIT child window, no flicker.
-
Global on/off toggle — /floating-prompt off makes every hook
invocation a silent no-op. No need to uninstall the plugin or edit
settings.json.
Configure
Per-project setup runs through the bundled /floating-prompt skill:
/floating-prompt palette ocean # set current project's palette
/floating-prompt palettes # list all six names
/floating-prompt status # report on/off + project mapping count
/floating-prompt off # disable globally (hooks no-op)
/floating-prompt on # re-enable
/floating-prompt show # dump state.json
Mapping is stored in %LOCALAPPDATA%\floating-prompt\state.json under
palettes, keyed by basename(cwd). Picked up on the next hook fire.
Use it as a standalone popup
The same binary works outside Claude Code as a general-purpose blocking
prompt for scripts:
.\hooks\floating-prompt.exe `
--message "Pick one" `
--options "Yes,No,Maybe" `
--mode single `
--placeholder "or type your own"
Prints the chosen option (or typed text) on stdout with exit code 0;
prints nothing and exits 10 if dismissed.