Skip to content

gashiartim/pebble

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

6 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Pebble

Menu-bar text-polish tool that rewrites your clipboard with a local Ollama model. One global shortcut, seven presets, zero cloud.

License: MIT Electron Ollama Platform

Pebble lives in your menu bar. Press Cmd+Alt+P anywhere on your machine and whatever's on your clipboard gets rewritten by a local LLM β€” fix grammar, make it concise, formalize for an email, convert to bullets, or sharpen a vague prompt before sending it to an LLM. Polished text replaces the clipboard. Cmd+V to paste.

Nothing leaves your machine. No accounts, no telemetry, no cloud API.


Features

  • πŸͺ¨ One global shortcut β€” Cmd+Alt+P (configurable). Works in any app.
  • πŸŽ› Preset dropdown β€” Polish, Concise, Formal, Friendly, Fix typos, Bullets, Prompt enhance. Last selection persists across sessions and is what the global shortcut uses.
  • πŸ”’ 100% local β€” talks only to Ollama on 127.0.0.1. No cloud fallback.
  • 🍎 Menu-bar only β€” no dock icon, no main window. Hides on blur.
  • 🌍 Cross-platform β€” macOS (primary), Windows, Linux.
  • 🧱 Tiny code surface β€” Electron + React + ~600 lines of TypeScript. Easy to fork and modify.

Requirements

  • Node.js 20+
  • Ollama running locally
  • A chat-capable Ollama model (default: qwen3-coder:30b)

Install (from source)

git clone https://github.com/gashiartim/pebble.git
cd pebble
npm install
cp .env.example .env

# Pull a model β€” default is qwen3-coder:30b
ollama pull qwen3-coder:30b

npm run dev

Build a distributable

npm run build:mac      # β†’ dist/Pebble-1.0.0.dmg
npm run build:win      # β†’ dist/Pebble-1.0.0-setup.exe
npm run build:linux    # β†’ dist/Pebble-1.0.0.AppImage

The .dmg is unsigned (no Apple Developer ID). Personal-install on macOS:

ditto dist/mac-arm64/Pebble.app /Applications/Pebble.app
xattr -cr /Applications/Pebble.app
codesign --force --deep --sign - /Applications/Pebble.app
open /Applications/Pebble.app

The codesign step is required on macOS 15+ β€” without it the embedded Electron Framework's ad-hoc signature mismatches the main binary's and the app refuses to launch (Library not loaded ... different Team IDs).

Configuration

All env vars are optional β€” Pebble has sane defaults baked in. Override in .env:

OLLAMA_HOST=http://127.0.0.1:11434          # default
POLISH_MODEL=qwen3-coder:30b                # any chat-capable Ollama model
PEBBLE_POLISH_SHORTCUT=CommandOrControl+Alt+P

Recommended models

Model Size Quality Speed (M-series)
qwen3-coder:30b 18 GB Best (default) Fast
qwen2.5:14b 9 GB Very good Faster
llama3.1:8b 5 GB Good Fastest
gemma4:latest (8B) 9.6 GB Good Fast

Smaller models still work for short messages but lose nuance on longer rewrites and on the Prompt enhance preset (which depends on instruction-following discipline).

Usage

Global shortcut (the way most people use it)

  1. Copy text in any app (Cmd+C).
  2. Press Cmd+Alt+P.
  3. Wait ~1–3 seconds for the "βœ… Polished" notification.
  4. Paste with Cmd+V.

The shortcut uses whichever preset you last picked in the panel.

Panel UI

Click the menu-bar icon to open the panel. Pick a preset from the dropdown, paste text in the textarea, hit βŒ˜β†΅ (or click the button). The polished result replaces the textarea content and is auto-copied to your clipboard.

Presets

Preset What it does
Polish Clean grammar and style, keep tone
Concise Same meaning, fewer words
Formal Business / client-facing email tone
Friendly Casual, warm β€” Slack / team
Fix typos only Minimal change, preserves voice
Bullets Rewrite as a bullet list
Prompt enhance Sharpen a vague LLM prompt

Adding your own preset is one append to src/main/presets.ts β€” see CONTRIBUTING.md.

Architecture

File Purpose
src/main/index.ts Electron main: tray, panel window, IPC, global shortcut, notifications.
src/main/polish.ts Ollama chat call with the selected preset's system prompt.
src/main/presets.ts Preset definitions. Single array β€” first entry is the default.
src/preload/index.ts Bridge: window.pebble.{polish, getPresets, quit}.
src/renderer/src/Polish.tsx Preset dropdown + textarea + button.

Contributing

PRs welcome. Read CONTRIBUTING.md for the bar and the no-go list (no cloud LLMs, no Tailwind, no telemetry, etc.).

By contributing you agree to follow the Code of Conduct.

Security

See SECURITY.md for vulnerability reporting.

License

MIT β€” do whatever you want with it, just keep the copyright notice.

About

Menu-bar text-polish tool that rewrites your clipboard with a local Ollama model. One global shortcut, seven presets, no cloud.

Topics

Resources

License

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Packages

 
 
 

Contributors