feat: enhance feature-port skill and update navigation

844f929by mantrakp04

683 files

on main

README.md

g-spot

⚠️ Alpha. Expect bugs, missing features, and breaking changes. Data formats and APIs are not yet stable.

A local-first desktop command center for email, code review, notes, and an approval-gated AI agent — all in one quiet window.

g-spot bundles a React app, local API, SQLite persistence, and an Electrobun desktop shell into one machine-first workspace. Your data lives in a SQLite file you can cp. The cloud piece is intentionally small: a Fly-hosted relay for push notifications.

Download

↓ Download the latest release

Stable and nightly builds are published as GitHub releases for macOS (Apple Silicon), Linux (x64), and Windows (x64). The app auto-updates from the channel it was installed on.

CLI

Prefer a browser tab over the desktop shell on macOS Apple Silicon:

bunx g-spot-cli

The CLI package bundles the built web app and local server into one npm package. Running it starts the local Elysia/tRPC API, serves the bundled React app from the same port, runs SQLite migrations, and opens your browser.

bunx g-spot-cli --port 3999
bunx g-spot-cli --host 127.0.0.1 --port 3999
bunx g-spot-cli --port 3999 --kill

The package exposes both g-spot and g-spot-cli executables.

Options:

  • -p, --port <port>: server port, default 3000
  • -h, --host <host>: server host, default localhost
  • --kill: stop the process listening on the selected port

Screenshots

What It Does

One inbox for mail and code

Gmail threads, GitHub pull requests, and GitHub issues live in a single sectioned inbox. Sections are user-defined: pick a source, pick filters, pick the columns you want, drag to reorder. Each section can show a badge count.

Gmail, fully wired

Read threads, compose new mail, reply / reply-all / forward, manage drafts, apply labels, handle attachments. A floating draft dock lets you juggle multiple drafts in parallel without losing your inbox view. Inline compose keeps replies in the thread.

A separate apps/relay service receives Google Pub/Sub notifications and pushes them over WebSocket to the desktop client for real-time sync.

PR review at home

A full pull request review surface: syntax-highlighted diffs, inline comment threads, CI checks, timelines, commit-stack visualization, and a quiet keyboard-driven action bar. Issues are reviewable too.

Agent chat with approval gates

Per-project AI chats with streaming, slash-skills, file attachments, model picker, and queued steering messages. The distinctive bit: tool calls are gated by user approval. The agent surfaces an approval card with the tool name, parameters, and reason — you approve or deny with an optional message back to the model.

Per-chat controls let you set the sandbox (read-only / workspace-write / full-access), toggle network access, and whitelist which built-in tools the agent can use.

Notes that link back

An Obsidian-style local notes workspace built on CodeMirror 6: markdown with wikilinks ([[note]]), tags, KaTeX math, Mermaid diagrams, embeds, daily notes, and full-text search. Backlink and tag panels make the graph walkable. Notes are plain files on disk.

Memory that actually remembers

A local knowledge graph (entities + observations + relationships) backed by sqlite-vec embeddings. Chat turns are auto-ingested. Salience and confidence decay over time. The agent queries it as context, so "what did I tell you last week" works.

Projects and skills

Local projects scope chats, agent config, and custom instructions to a working directory. Skills are reusable prompt bundles invoked as /slash-commands — global or project-scoped (project shadows global).

Desktop shell

Electrobun packages everything into a native macOS app. Auto-updates from GitHub releases (stable / nightly channels). OAuth login uses an external-browser-paste flow. Drizzle migrations run on startup.

Stack

  • Runtime: Bun, TypeScript, Turborepo
  • Web: React 19, Vite, TanStack Router / Query / Table, Tailwind v4, shadcn
  • API: Elysia, tRPC, Zod
  • Data: Drizzle, SQLite, sqlite-vec
  • Desktop: Electrobun
  • Agent: Pi SDK (pi-agent-core, pi-ai, pi-coding-agent)
  • Auth: Hexclave (Gmail + GitHub OAuth)
  • Integrations: Gmail API, Google Pub/Sub, GitHub via Octokit
  • Hosting: Fly.io for the relay only

Repo Map

apps/
  cli/          npm CLI that bundles web + server and opens the local app
  desktop/      Electrobun desktop shell + auto-updater
  web/          React UI (inbox, chat, review, projects, settings)
  server/       Local Elysia/tRPC API (bundled into desktop)
  relay/        Fly-hosted Gmail Pub/Sub → WebSocket relay
  landing/      Landing page
packages/
  api/          tRPC routers, chat runtime, streaming, memory ingest
  db/           Drizzle schema, migrations, queries
  types/        Shared types and Zod schemas
  env/          Zod-validated env config
  ui/           shadcn-style React components
  config/       Shared TypeScript config
  adapters/     External service adapters (Gmail Pub/Sub, ...)
  relay-db/     SQLite state adapter for the relay

Development

Building from source, local workflow, and the task-completion bar (run bun check-types before finalizing) live in CONTRIBUTING.md.

Release pipeline, relay deployment, DNS, and migration policy live in DEPLOYMENT.md.

License

MIT.