尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证Open-source Superhuman clone: keyboard-first Gmail client with AI. Part of yourappisdead.
翻译准备中
正在加载完整 README。
查看完整 README ↗A keyboard-first Gmail client with a built-in AI assistant. Runs on your Mac, talks to Gmail and Claude with your own keys, and has no server of its own.
It is a from-scratch recreation of the Superhuman experience: split inbox (Important /
Other), j k e h triage, snooze, a Cmd+K command palette, undo toasts, and
"write with AI" drafts. The whole thing is a few thousand lines of TypeScript.
Prerequisites: macOS, Node 22 (nvm use reads .nvmrc), npm.
git clone <this repo> && cd SuperhumanIsDead
./scripts/setup.sh # installs dependencies, runs tests, builds
npm run dev # launches the app with hot reload
On first launch you can press Try the sample inbox to see the whole UI with fake data. To use your real mail you need two keys, both entered in the app's setup screen and stored encrypted on your Mac.
Gmail access needs an OAuth client that belongs to you. Google does not let apps share one.
https://www.googleapis.com/auth/gmail.modify. Under Test users add your
own Gmail address. You do not need to publish or verify the app for personal use.127.0.0.1. Google shows an "unverified app" warning because
this is your own test app; click Continue.Summaries, AI drafts and AI inbox sorting use Claude. Create a key at https://console.anthropic.com and paste it into the setup screen. Without it everything else still works.
| Key | Action |
|---|---|
j / k | Next / previous conversation |
e | Mark done (archive). In Done, moves back to inbox |
h | Snooze (1–5 picks a preset, or choose a time) |
r / a / f | Reply / reply all / forward |
c | Compose |
s / u / x | Star / unread / select |
z | Undo the last action |
⌘K | Command palette |
/ | Search (Gmail search syntax) |
Tab / ⇧Tab | Next / previous split |
g i g o g s g h g t g d g e | Go to Important, Other, Starred, Snoozed, Sent, Drafts, Done |
⌘J | AI: summarize the conversation (in the composer: write the draft) |
⌘⇧R | AI: draft a reply |
⌘↵ | Send |
? | All shortcuts |
src/main Electron main process: OAuth loopback flow, encrypted store (safeStorage),
Gmail REST proxy with token refresh, Claude proxy (streaming), snooze scheduler
src/preload The window.duper bridge (contextIsolation + sandbox on)
src/shared Pure modules: MIME builder, Gmail parser, split rules, key bindings. Unit tested.
src/renderer React UI: thread list, reading pane, composer, palette, overlays, demo inbox
safeStorage and never leave the machine. Mail content goes to Google and, only when
you invoke an AI action, to Anthropic.npm run dist:mac # produces dist/SuperhumanIsDead-<version>.dmg (unsigned unless you add an identity)
Set CSC_NAME or CSC_LINK/CSC_KEY_PASSWORD for electron-builder to sign and notarize.
npm test # vitest over src/shared
npm run typecheck
docs/SUPERHUMAN_SPEC_PROMPT.md is a prompt for an agent with a Superhuman account to
produce a measured spec (tokens, layout, motion, keyboard map). The resulting
docs/SUPERHUMAN_SPEC.md is the acceptance checklist; src/renderer/src/styles.css
holds every token in one place so the match is a matter of editing values.
MIT
web/ holds the single marketing page and /login (Firebase project yourappisdead,
email/password + Google). Copy web/.env.example to web/.env with the web app config, then:
npm run dev:web # local preview
npm run build:web # static files in out/web, served under /superhumanisdead/
Design tokens and the font (Inter, OFL, closest open match to Superhuman's sans) come from
the shared IsDead design system; refresh with npm run sync:design.
The full Superhuman keyboard map lives in src/shared/keys.ts (⌘K → Keyboard shortcuts shows it).
Highlights: E done, ⇧E not done, H remind me (natural language, "only if nobody replies"),
# trash, ! spam, ? Ask AI, 0 calendar (- T = to move days), g ; snippets,
;name inline snippets and ⌘; picker in the composer, ⌘⇧L send later, ⌘⇧H remind if no reply,
⌘⇧Z send instantly, ⌘⇧↵ send and mark done. Undo send uses the delay set in Settings.
Calendar uses the calendar.events scope (read and write): sign out and back in after upgrading.
N/P next/previous message, O expand, Space/⇧Space page, ← folder and label menu, ⌘O links and attachments, ⌘P print.V move, L labels, Y remove the label you are viewing, ⇧Y remove all labels, [ / ] remove then next/previous, ⇧M mute, ⌘U unsubscribe (asks first).Ctrl+1–9 switch account; ⌘K → Add another account.⇧C, ⇧R, ⇧↵, ⇧F open the draft in a floating window; ⌘⇧P pops it in/out, ⌘D toggles focus between draft and thread.⌘B ⌘I ⌘U ⌘K ⌘⇧X ⌘⇧7/8/9 (bold, italic, underline, link, strike, numbered, bullets, quote), ⌘⇧A attach (or drop files), ⌘⇧I Instant Intro, ⌘⇧F change From, :name emoji.2 week view, B quick-create ("Lunch with Ada tomorrow 1pm for 45m"), ⇧B full form. Guests only get an invitation if you add them, and the form says so.Settings → Read statuses. Turn it on and every email you send carries an invisible 1×1 image from a server you host
(node tools/pixel-server.mjs). Recipients are not told and some mail apps preload images, so treat it as a hint. Nothing is added unless both the host and the toggle are set.
npm run build, serve out/renderer (python3 -m http.server 5181 -d out/renderer), then SMOKE_CHROME=/usr/bin/google-chrome node scripts/smoke.mjs. It drives the sample inbox in a browser with a stubbed preload; no Google, no email.
This project is part of yourappisdead, a marketplace of free, open-source clones of paid SaaS apps. It is an independent clone built from public product behavior; it is not affiliated with, endorsed by, or using any code or assets from the original product. All brand names belong to their owners.
LICENSE).isdead-design.The website (web/) sends PostHog events to the shared IsDead project. See docs/ANALYTICS.md. The desktop app sends nothing.