Global shortcut
Press Option+Space from anywhere to open Ghost. The
same surface, wherever you are. Configurable to
⌘⇧Space, ⌃Space, ⌃⌥Space,
or ⌘⌥G.
Ghost routes prompts to local and hosted models, searches your private knowledge base, starts local timers, and runs verified Mac actions — all from one quiet, native surface you summon with a keystroke. Choose where it lives: dropping from the top-center notch, or floating like Siri near the bottom of your screen.
Ghost is a native SwiftUI app for macOS that connects local models, hosted APIs, optional agent CLIs, document retrieval, timers, and verified Mac actions through one quiet surface — placed as a top-center notch or a floating bar.
It runs as an accessory — no Dock icon, no full-screen takeover. It appears with a keystroke, does the work, and steps back. Your Mac stays your Mac.
Every capability starts off. You opt into each one — clipboard, web, files, automation, screen, shell — in a six-step onboarding. Nothing is on by default. Nothing runs in the background without you asking.
2.1.0: Ghost introduces itself, shows you what it can do, and stops taking your keyboard at launch.
A new install used to open an empty text field and leave you to guess. There is a proper first run: where answers come from, one honest page about permissions, and a first question you can click to run. Ghost also no longer brings its window forward and takes the keyboard every time it launches, including at login.
Around thirty commands were reachable only if you already knew to
type /help. Type a single / in the
composer and they are listed and filtered as you go. A blank chat
suggests a few questions too, picked from what your permission
switches actually allow, and they retire once you have used Ghost
a few times.
The saved list is searchable across titles and message text, threads can be renamed, and they delete one at a time instead of all at once. Answers also fill the window now, and the window itself has a size setting.
When you named a page for Ghost to read, it skipped its approval prompt because you had chosen the destination yourself. That check compared only the host and the path, so a web page could talk Ghost into fetching the same address with your conversation attached as a query string, and no approval appeared. The check now covers the whole destination: query, fragment, port and credentials. Fixed in 2.1.0.
Ask Ghost, Start Focus Timer and Toggle Ghost are system actions now, so they can be used in a Shortcut or launched from Spotlight.
A small bar appears beside your selection in any app — Copy,
Search, Summarize, Fix, with rewrites, Explain and Translate one
click away. Results open in the bar, and
Replace writes the new text straight back into the field
you selected in, so that app's own undo still works. Press
⌃⌥Space to bring the bar back.
A bar across the top of the Ghost window switches between
sections in one click. The new Terminal runs shell
commands without leaving Ghost — arrow keys for history,
cd carries over — behind the same permission switch
as its shell tool. Timer starts Focus, Break, or Deep
Work directly, with no model involved.
Messages, Notes, Mail, and Contacts are never sent to a cloud model by Ghost's own tools or memory — a sensitive read on a cloud model is refused outright. The one exception is text you select and act on: an action like Summarize cannot work unless the model may read it, so the bar tells you which app the text came from and which provider it is going to before you press anything. A local model (LM Studio or Ollama) keeps it on the machine.
A personal knowledge base quietly grounds every chat, so Ghost
knows your people, preferences, and the usual. Say
"remember that …" or ask
"what do you know about me?" — it's plain Markdown you
can read or edit at ~/Ghost Outputs/Knowledge.
Ask "what's on my plate?" and Ghost ranks what needs you now — overdue and upcoming reminders plus imminent calendar events.
For a Mac task without a dedicated tool, Ghost writes an AppleScript to do it. You review the exact script and approve it — nothing runs until you say yes.
Route chat through your own Claude Code, Codex, or Google Antigravity CLI — your account, your plan, at no extra cost. Install the CLI, then pick it under "Your subscription (CLI)" in the model picker.
No Dock icon, no window to manage. Ghost answers to global shortcuts that work across every app on your Mac — and you decide whether it drops from the top-center notch or floats like Siri near the bottom of the screen. No Accessibility permission required: the hotkeys are registered through Carbon, the same system Spotlight uses.
Press Option+Space from anywhere to open Ghost. The
same surface, wherever you are. Configurable to
⌘⇧Space, ⌃Space, ⌃⌥Space,
or ⌘⌥G.
One surface, two homes. A toggle in Settings drops Ghost down from the top-center notch, or floats it as a Siri-style bar about an inch up from the bottom of your screen, growing upward as it fills.
In notch placement, glide your pointer to the top center of the screen and Ghost reveals itself — no click, no shortcut. The floating bar stays inert until you summon it, so it never traps a stray hover.
Enable a second global shortcut — ⌥⇧Space by
default — that opens the very same surface. A muscle-memory
backup for when your hands are already on the keys.
ghost://toggle opens Ghost from any app or script.
No file paths or user content accepted — the link only ever
opens, never exfiltrates.
Right-click any text in any app → Services → Ghost for Rewrite Professionally, Rewrite Casually, Humanize, Check Grammar, or Ask Ghost for Feedback.
You ask naturally. Ghost scores the prompt, picks the provider, model, and engine, and decides whether a fast direct call is enough or whether the work needs a connected agent loop.
The default path. Ghost calls the provider's HTTP API directly with its native tool harness — streaming, tool loops, prompt caching on Claude, retry with backoff on transient failures.
For deeper work, Ghost shells out to a local CLI at
~/.local/bin/ghost or hermes, passing
provider, model, turn limits, approval mode, and toolsets.
localhost:1234
localhost:11434
Anthropic
reasoning
zen/go/v1
free tier models
OpenAI · vLLM · any /v1
Four effort levels cap how many turns a run may take — from a one-shot answer to a ninety-turn deep-work session. Token budgets and mode names scale by provider; the figures above are Claude's ceilings, and local models run leaner.
Read-only tools auto-run; medium and high risk ask first.
Low and medium auto-run; high risk still asks.
Everything classified runs — but file path scope never expands.
Ghost indexes the folders you approve into a local SQLite database with FTS5 full-text search. When a prompt needs context, it retrieves cited, source-backed chunks — not vague confidence.
Chunks live in
~/Library/Application
Support/Ghost/rag/ghost_rag.sqlite. Max chunk 3,500 chars, 500-char overlap, sentence-aware
splitting, page numbers preserved from PDFs, section titles from
markdown headings.
Watch a folder recursively. Startup sync, event-driven sync with
8-second debounce, periodic rescan every hour. Up to 20,000
files per pass — manual folder ingest scales to 50,000. Skips
node_modules, build,
__pycache__, venv, and the rest.
RAG queries return chunk metadata and source paths. Ghost can open the cited file at the right spot, or reveal it in Finder. Ten RAG tools: ingest, sync, query, search, open, status, remove, reindex, clear.
Beyond literal keyword matching, Ghost uses on-device word
embeddings — Apple's NaturalLanguage — so a
paraphrased request still matches your saved facts and fast local
commands. All on-device.
The capability harness is Ghost's action layer. The model never touches the filesystem directly — it asks, Ghost normalizes the path, checks permissions, runs app-owned code, and returns a machine-readable receipt. You see what actually happened.
List, glob, grep, read, write, create, edit, patch, move, copy, delete (trash by default), zip, reveal in Finder. Conversions between PDF, DOCX, HTML, TXT, and Markdown. Desktop, Downloads, Documents, Ghost Outputs, and the workspace are all safe output targets.
Create Markdown, HTML, TXT, CSV, JSON, PDF, DOCX, PPTX, and XLSX — all through native macOS frameworks. If a local model returns a usable code block instead of calling a file tool, Ghost can save the artifact itself and return the real path.
Read-only: search, list, read, grep, weather, web search.
Writes, creates, calendar, reminders, file copy, app launch.
Patches, moves, deletes, app quit, Shortcuts, shell, send email, index clear.
Unknown future tools fail closed — never silently run.
Every write, edit, move, and delete records before-and-after state. Up to 100 journal entries. If a run goes sideways, you can roll it back.
Run a system report — CPU, RAM, disk, battery, even SMC temperatures. Set display brightness and audio device or volume, snap windows into layouts, run Homebrew, uninstall apps and clean junk, compress video and images or make a GIF, run a network speed test, keep the Mac awake, and pick a screen color.
Ghost doesn't shell out to scripts when it doesn't have to. It talks to Calendar, Reminders, Notes, Shortcuts, Vision OCR, and Speech Recognition through the same native APIs your other apps do.
Query events in a date range and create new ones after explicit intent. A deterministic parser turns natural language into real calendar entries.
Turn "remind me to check the oven in 10 minutes" into a real macOS Reminder with a due date — parsed deterministically from your sentence.
Create notes in specified folders, append to existing ones, and search by title and content — all through AppleScript.
Ask Ghost to read recent iMessages, send an iMessage, or start a FaceTime call. It resolves a name like "Mom" to the right contact and asks before sending. Off by default — enable Messages & FaceTime in Privacy & Access. Everything is read on-device and never sent to a cloud model.
On-device SFSpeechRecognizer with a live
three-bar EQ waveform driven by RMS from the audio tap. Start,
stop, send — or press Space to toggle.
Capture a region and extract text with Apple Vision OCR — fast or accurate mode. Ghost hides during capture and restores afterward.
Run macOS Shortcuts through /usr/bin/shortcuts.
Set pomodoro and countdown timers in natural language. Active
timers take over the compact notch, and completed timers
reopen with pause, resume, add-time, restart, and dismiss
controls.
When a compact notch isn't enough, Ghost opens into deeper work modes — agent workflows, an in-app terminal, and an intent router that classifies prompts before they run.
Inspect & propose
Edit files & run commands
Read & map codebase
Inspect diffs & catch bugs
Live progress in the notch, including creating-file and using-tools states.
Open with ⌘⇧T. Slash commands \clear,
\model, \help. An activity timeline
with live streaming output.
Classifies prompts into Answer, Research, Files, Summarize, Screenshot/OCR, Clipboard, Create, Organize, Automation, Code, Debug, Review, Terminal — then detects filenames, save targets, and RAG references before routing.
Ghost talks to LM Studio and Ollama running on your Mac, and your Messages, Mail, Notes, and Contacts are only ever read with one of these local models — a cloud model is refused.
Privacy isn't a setting you find later. It's the architecture. Ghost separates local providers, local indexes, and hosted key paths — so where your data goes is a routing choice, not an afterthought.
API keys live in macOS Keychain. A legacy
~/.ghost/.env file is migrated transparently and
deleted. Keys are only read when their provider is actually
called — no Keychain prompts at launch.
Environment scrubbing ensures the agent process only sees the selected provider's keys. DeepSeek keys are blocked when any other provider is selected. Local providers can't launch agent mode at all.
Web fetches block localhost, private IPv4/IPv6, link-local, multicast, and reserved addresses. DNS resolution checks every address. Redirects to private destinations are blocked. Cookie-free, cache-free, 5MB max.
Even with Full Disk Access, paths like .ssh,
.gnupg, .aws,
login.keychain, .kube/config, and
.env require explicit consent — Allow Once, Always
This Session, or Deny.
Web, local files, Mac automation, screen capture, and terminal inspection are each toggled independently. Disabled capabilities are removed from model tool schemas and checked again before execution. Revoking cancels active work mid-flight.
ghost://toggleThe only deep link Ghost accepts is one that opens Ghost. No file paths, no user content, no exfiltration vectors. Older deep link patterns are blocked.
Ghost's interface is built on a "Cosmic Glass" design system —
NSVisualEffectView blur with a subtle noise layer,
and an aurora background that shifts hue with the tone of your
conversation.
The surface condenses into view with scale, blur, and a soft bloom — plus a trackpad haptic. A gentle haptic marks answer completion. A single champagne welcome-back bloom swells from the logo the first time you open Ghost each day.
Ghost's pill is rendered in a "liquid glass" material that samples the desktop behind it, with a Siri-style iridescent streak that plays near the caret while you type — violet, cyan, champagne, and pink drifting across the composer.
Hollow when the composer is empty, primary accent when ready, red stop button while a run is in flight. Answer blocks ease in from a soft blur.
Tabular numerals, a latency sparkline, a token counter with rolling number animation, a reasoning depth meter, and skeleton loaders instead of spinners.
Open with ⌘⇧U. Today, 7-day, and 30-day spend, a
30-day sparkline, per-model breakdown, and a recent activity log
— with cost approximated from a per-model rate table.
Right-click any message for a circular menu — Copy, Regenerate, Fork, Pin, Copy ID, Delete — with champagne highlight on the active item and red on destructive. A native NSMenu sits underneath for keyboard and VoiceOver.
Whether it lives in the notch or the floating bar, the compact surface stays small for quick asks, expands for transcripts and settings, and hands deeper work to larger app surfaces when a task needs more room.
All motion respects prefers-reduced-motion.
VoiceOver support through native menus that back every custom
control, and full keyboard navigation. Reduce Motion is honored
throughout.
Ghost is open source, native macOS, and runs as a quiet accessory you summon with a keystroke — as a notch or a floating bar.