Install · Quests · Privacy · Verify Build · Issues
SideQuest watches what you're working on inside Claude Code and surfaces one contextual dev-tool suggestion when it actually fits — a native macOS card you can dismiss with a keystroke, capped at 5 a day. No feed. No email. No LLM mediation. Conversation content stays on your machine; matching runs on anonymous IDs and on-device embeddings.
curl -fsSL https://get.trysidequest.ai/install.sh | bashInstalls the plugin into Claude Code, downloads the native macOS notification app, and runs Google OAuth (browser opens). macOS 13+ required.
That's it. Quests appear when context says they're useful.
Auditing the install script? See BUILD.md — covers source review, SHA256 verification against the repo copy, and release-tag pinning.
A quest fires in the corner of Claude Code Desktop. Native, dismissable, capped at 5/day.
- Right tool, right moment. While you're debugging Postgres, get a pointer to a faster connection pooler. Not a feed. Not a newsletter. A timed nudge inside the editor where you already are.
- Native, not LLM-mediated. Quests render through a real macOS notification card via the SideQuest app — 100% delivery. Doesn't depend on Claude choosing to surface anything.
- Privacy by design. Your words stay on your Mac. Only anonymous IDs and a local embedding of your last turn (text → numbers, on-device) reach our servers. See Privacy.
- Cap-respected. Max 5/day. 20-minute cooldown. One ⌘⌃D dismiss permanently mutes. Do-Not-Disturb is one slash command away.
- Open + audit-ready. MIT. Reproducible plugin tarballs. Source-pinned binaries. See BUILD.md to verify.
Skills available inside Claude Code:
| Skill | What it does |
|---|---|
/sidequest:sq-login |
Sign in with Google. One-time. |
/sidequest:sq-status |
Health check — auth, app, API, timing. Run first when stuck. |
/sidequest:sq-settings |
Toggle the plugin on or off. |
/sidequest:sq-do-not-disturb |
Pause quests for 2 hours. |
/sidequest:sq-retrigger |
Re-show the last quest. |
/sidequest:sq-feedback |
Send feedback. |
/sidequest:sq-update |
Pull the latest plugin + app. |
/sidequest:sq-uninstall |
Remove everything. |
What stays on your machine:
- Conversation content (Claude messages, prompts, code)
- Project files, repo contents, file paths
- Anything Claude reads or writes
What we send to the API (only when a quest fires):
- Anonymous user ID (UUID, not your email)
- Anonymous session/tracking ID (UUID per quest)
- Anonymous tag IDs (e.g.
tag_4791— never the source string) - An on-device embedding of your last turn — your text is turned into a list of numbers locally on your Mac; only those numbers leave, never the words
- Quest engagement: shown / clicked / dismissed
- Plugin + app version (for compatibility checks)
Storage on your machine:
~/.sidequest/config.json— auth token, settings~/.sidequest/timing-state.json— quest cap state~/.sidequest/tech-context.json— anonymized tag IDs~/.sidequest/sidequest.sock— Unix socket (plugin ↔ app)
Code paths to inspect:
- Outbound network calls:
plugin/hooks/stop-hook - On-device embedding (where text becomes numbers):
macOS/SideQuestApp/Models/EmbeddingModel.swift - Tag anonymization:
plugin/hooks/extract-context.py
Plugin (Claude Code hook). A stop-hook and session-start hook. Pulls anonymous tag IDs from your project context and hands your last turn to the native app for on-device embedding, then asks the API for the matching quest and passes it back to the app to display. Source: plugin/hooks/.
Native app (macOS). Embeds your last turn locally — text in, numbers out, words never leave the app. Renders each quest as a native floating card, top-right. Handles open/skip keyboard. Auto-launches at login. Source: macOS/.
API. Takes the anonymous IDs + the on-device embedding, returns one quest from the catalog. Never sees your prompt content.
Updates are silent. The session-start hook compares your installed plugin/app version against the latest published version and pulls the new tarball/DMG when they differ.
To remove everything:
curl -fsSL https://get.trysidequest.ai/uninstall.sh | bashOr, in Claude Code:
/sidequest:sq-uninstall
This repo publishes deterministic plugin tarballs and source-pinned macOS DMGs. Anyone can clone at a release tag, rebuild, and confirm the SHA256 matches the asset on GitHub Releases. See BUILD.md for the step-by-step verification guide.
- Run
/sidequest:sq-statusfor a self-diagnosis. - Open an issue for bugs or feature requests.
MIT — see LICENSE.
