Copying several notes only produced a numbered list, which is wrong for pasting into a prompt that already has structure. The selection now offers both forms, Shift+click selects a range, and a selection bar makes it obvious that more than one note is selected. Esc clears the selection before it hides the panel.
Prompt
A native macOS app for keeping prompts and photos, in the spirit of Copper by shadcn: a floating panel that sits next to your work. Click anything to copy it back to your clipboard.
- Click to copy — text notes go back as text, photos go back as images.
- Capture from anywhere — select text in any app and tap Left Shift twice.
- Photos — paste (Cmd+V), drag & drop, or add via the photo button.
- Sections — type
# Namein the composer; Cmd+K switches sections. - Copy as List / Copy as Lines — Cmd+click to multi-select (Shift+click for a range), then copy the selection as a numbered list or as plain newline-separated text, from the selection bar or the right-click menu.
- Merge Notes, Mark as Done, Edit, Move To — right-click any item.
- Search — Cmd+F searches across all sections.
- Sync (optional) — generate an 8-digit code (
1234-5678) on one Mac and enter it on the other; no account, no login. The code is the only secret. - Local & private — everything lives in
~/Library/Application Support/Prompt/(store.json+Images/). No account, no sync, no telemetry.
Shortcuts
| Action | Shortcut |
|---|---|
| Capture current selection | Left Shift ×2 (or Cmd+Shift+C) |
| Show/hide panel | Right Shift ×2 (or Cmd+Shift+Space) |
| Switch/create section | Cmd+K |
| Search | Cmd+F |
| Focus composer | Cmd+N |
| Sync settings | Cmd+, |
| Copy selection as numbered list | Shift+Cmd+C |
| Copy selection as plain lines | Option+Cmd+C |
| Clear selection | Esc |
| Close panel | Esc |
Double-Shift gestures require Accessibility access (Prompt reads the selection by simulating Cmd+C, then restores your clipboard untouched). Until it is granted, use Cmd+Shift+Space and Cmd+Shift+C, or click the menu bar icon — and launching the app again always brings the panel back. Bare keys like Space and Cmd+C are deliberately not bound inside the panel so they never conflict with typing in the composer.
Install
brew tap TZGyn/tap https://gitea.tzgyn.dev/TZGyn/homebrew-tap.git
brew trust TZGyn/tap
brew install --cask prompt
Sync server
Sync is optional and needs the small Go backend in Server/. There is no
authentication: a sync group is identified by an 8-digit code, and whoever has
the code can read and write the group.
createdb prompt_sync
cd Server
PROMPT_SYNC_DATABASE_URL="postgres://localhost:5432/prompt_sync?sslmode=disable" \
go run . # listens on :8080
Or build the Docker image (docker build -t prompt-sync Server/) and point it
at your own Postgres — see Server/README.md for that and for
deploying to a host.
Then in the panel: click the sync icon (or Cmd+,), confirm the server URL, and either Generate Code on the first Mac or paste the code into Join on the other.
Notes:
- Sync defaults to
https://prompt.tzgyn.dev; change it in the sync panel to point at your own server. Both Macs must be able to reach it — a LAN address or a Tailscale hostname works, andlocalhostonly works if the server runs on the same Mac. See Server/README.md to deploy it. - Joining a group that already has notes replaces what's on that Mac.
- The app polls every 5 seconds (a tiny version check) and pushes 1.5s after a change; last write wins, and changes that came from the server are not echoed back.
- Verify sync from a terminal with
Prompt --sync-check.
Build from source
swift build # debug build
swift run Prompt # dev run (menu bar icon appears)
./build-app.sh 0.1.0 # release build + Prompt.app + icon + codesign
./release.sh 0.1.0 # build + dist/Prompt.zip (+ notarization when configured)
Requires macOS 14+.