Local-first Mac scratchpad for AI-assisted work — capture selections from any app, stage prompts, copy them back when ready.
Open source. MIT licensed. No account, no sync, no telemetry.
When you bounce between ChatGPT, Claude, Cursor, and the browser, useful bits scatter everywhere. SidePrompt is a floating queue for those bits: capture with a shortcut, organize in sections, copy back as a list when you need them.
- Double-tap Shift (configurable) to capture the current selection from any app
- Floating panel with sections, search, checkboxes
- ⌘-click multi-select, Shift-click range select
- Copy / Copy as List / Merge
- Prompt templates with
{{variables}} - Local JSON storage only
- macOS 14+
- Accessibility permission (reads text selection + global shortcuts)
git clone https://github.com/yavuz/SidePrompt.git
cd SidePrompt
xcodegen generate
open SidePrompt.xcodeprojBuild & run in Xcode (sign with your team), then grant Accessibility for the built app.
CLI:
xcodegen generate
xcodebuild -scheme SidePrompt -configuration Debug -derivedDataPath build/DerivedData build
open build/DerivedData/Build/Products/Debug/SidePrompt.app| Action | Shortcut |
|---|---|
| Capture selection | Double-tap Shift (Settings → configurable) |
| Show panel | Menu bar icon or ⌘⇧P (configurable) |
| Edit item | Click |
| Multi-select | ⌘-click |
| Range select | Shift-click |
| Copy selected | ⌘C |
| Copy as list | ⌘⇧C |
| Select all | ⌘A |
| Merge selected | ⌘⇧M |
| Delete selected | Delete |
| Close editor / panel | Esc |
Templates: panel ••• → Templates… — use {{variable}} placeholders.
~/Library/Application Support/SidePrompt/store.json
Nothing is uploaded. Keep Time Machine (or any backup) on.
SidePrompt/ # Swift sources
docs/ # Landing page + Sparkle appcast scaffold
scripts/package.sh # Release ZIP/DMG (+ optional notarize)
project.yml # XcodeGen
./scripts/package.sh
# Optional:
NOTARIZE=1 APPLE_ID=... APP_PASSWORD=... TEAM_ID=... ./scripts/package.shSparkle keys / hosted appcast are optional for open-source builds. Placeholder SUPublicEDKey disables the updater until configured.
Issues and PRs welcome. Keep the app local-first: no analytics, no forced accounts.
MIT — see LICENSE.

