DeepSeek Harness Remote
DeepSeek Harness Remote: DeepSeek Harness 실행 PC와 모바일·PC를 안전하게 연결해 어디서나 작업 이어받기
메일을 열면 누가 기다리는지, 누가 빚졌는지, 무엇을 미룰 수 있는지 한눈에 보여줍니다 자체 호스팅 Gmail 및 모든 IMAP 인박스 지원
Open your mail to a brief: who’s waiting on you, who owes you, and what can wait. Self-hosted, for Gmail and any IMAP inbox.
생산성TypeScript · CSSGitHub @kleenpulse온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Self-hosted email client for Gmail, Outlook, iCloud and any IMAP inbox. See who's waiting on your reply and ask your inbox anything.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗A self-hosted mail client for Gmail, Outlook, Yahoo, iCloud, Fastmail, Proton (Bridge), and any IMAP/SMTP mailbox — with an Overview that answers "what needs me?" and Ask Jev, an assistant that finds things in your inbox without making anything up.
/overview, the home screen) — replies you owe and who owes you (judged against each person's usual reply time), reply debt with a payoff plan, inbox "weather", received vs sent, mail mix, arrival heatmap turned into suggested check-in times, newsletter open rates (A–F) with unsubscribe links, storage, a daily brief, and a reply-zero streak./mail) — the three-pane reader: folders, list with previews, and a sandboxed message view./integrations) — step-by-step health checks for your mail account and Jev; Slack, Discord and signed JSON webhooks (Zapier, Make, n8n) for Share from the reader and Send brief from the Overview; and a resumable mailbox export to .mbox. Every connect, test and delivery streams its progress and lands in an activity log.Jev is TypeSafe's decision model: it answers typed questions (pick one of these options, score this, yes/no) and returns probabilities — it does not write text. Raven uses it for exactly that:
Email text only ever reaches Jev as data to choose between, and Jev can't take actions, so a hostile email can at worst rank itself higher. Each user can bring their own TypeSafe key in Settings → Account (it is checked once, then kept only inside the encrypted session cookie, and wins over the server key). Deep triage (a button, never automatic) asks Jev to re-score your last 48 hours.
Not everyone has a Jev key, so Raven ships Kage (lib/kage/), a built-in engine that answers Jev's exact systemOne contract (choice, score, noul) with no network and no account. It scores each option with BM25 over word stems plus a small mail lexicon ("invoice" ≈ "receipt", "owes me" ≈ "no reply"), turns the scores into probabilities, and like Jev it never writes text: email content is only evidence, so it can't add options or change the question.
KAGE=off turns it off; then keyless sessions use the keyword rules.bun run eval:kage (or Kage in the dev nav, /dev/kage) scores Kage against the keyword rules, and against Jev when TYPESAFE_API_KEY works, on labeled fixtures in test/fixtures/kage/. The blind split was written after tuning stopped. Read that one.An LLM "narrator" can be plugged in later at lib/jev/ask/narrate.ts; none ships today.
app/globals.css)@neondatabase/serverless over HTTP; the desktop app uses PGlite insteaddesktop/)bun install
cp .env.example .env.local
# set SESSION_SECRET (openssl rand -base64 32)
bun run dev
Integrations need a Postgres database (everything else runs without one). With Neon: neon env pull (or paste DATABASE_URL / DATABASE_URL_UNPOOLED from the console), then:
bun run db:migrate # applies lib/db/migrations using the direct (unpooled) URL
Open http://localhost:3000 and sign in. In development, Continue in dev mode opens a seeded mailbox with 45 days of realistic traffic — no account needed.
Set APP_URL to the deployment's public origin; canonical, Open Graph and sitemap URLs use it. Every deployment is noindex by default, because self-hosted copies all serve the same landing page and a personal /login shouldn't be searchable. Set SEO_INDEX=true only on the deployment that should show up in search. To verify it in Google Search Console, pick the "HTML tag" method and set GOOGLE_SITE_VERIFICATION to the tag's content value.
| Provider | Notes |
|---|---|
| Gmail | Enable IMAP, turn on 2-Step Verification, use an App Password |
| Outlook | App password if 2FA is on |
| Yahoo | App password under Account Security |
| iCloud | App-specific password from appleid.apple.com |
| Fastmail | Session / app password |
| Proton | Proton Bridge on localhost (ALLOW_LOOPBACK_MAIL_HOSTS=true in production) |
| Custom | Your own IMAP/SMTP hosts, ports, TLS |
The button asks for SESSION_SECRET. Generate one with openssl rand -base64 32.
docker build -t raven .
docker run -d -p 3000:3000 --env-file .env raven
Or with Compose:
cp .env.example .env
# set SESSION_SECRET (openssl rand -base64 32)
docker compose up -d
The image runs Node 24 on port 3000 as a non-root user.
@neondatabase/serverless, which talks over HTTP. Use Neon (the free tier works), or Neon's local HTTP proxy in front of a plain Postgres. Everything else runs with no database. The desktop app doesn't need any of this: it has its own database built in.NEXT_PUBLIC_SOURCE_URL sets the "Source code" link in Settings → About and the landing footer. If you run a modified copy for other people, AGPL-3.0 asks you to offer them your source, so point it at your fork.Raven also runs as a desktop app on Windows, macOS and Linux. It's the same Raven, with its server running on your own computer.
| System | Download |
|---|---|
| Windows 10/11 (x64) | the .exe installer (installs for your user, no admin needed) |
| macOS 13+ (Apple Silicon or Intel) | the .dmg for your Mac (arm64 or x64) |
| Linux (x64) | the .deb, or the .AppImage |
Installers come with each release on the Releases page, starting with the first release after the desktop app's update support. Between releases, the Desktop workflow in GitHub Actions builds them too: open a run and download your system's installer from Artifacts. Each download includes SHA256SUMS.txt so you can check the files.
First launch. The builds aren't code-signed yet, so your system warns you once:
xattr -dr com.apple.quarantine /Applications/Raven.app once..deb is the easy way. For the AppImage, run chmod +x on it first. On Ubuntu 24.04 and later it may also need an AppArmor allowance.What's different on desktop
.deb, it opens the download page, and you install the new version over the old one. You can also pick Check for updates… in the File menu (the Raven menu on a Mac) or the tray menu.Where your data lives
| Windows | macOS | Linux |
|---|---|---|
%APPDATA%\Raven | ~/Library/Application Support/Raven | ~/.config/Raven |
That folder holds the database, the logs and the keys that lock your session. Before Raven updates the database, it saves a copy in db.backups next to it and keeps the last three. If the database ever won't open, Raven offers to go back to the newest copy. The keys are kept in your system's keychain. On Linux without GNOME Keyring or KWallet they're saved unencrypted, and only your user can read them, so install a keyring if you can.
Working on the desktop app
bun run desktop:setup # once: installs desktop/ packages and Electron
bun run desktop:dev # Electron on next dev (stop your own next dev first)
bun run desktop:preview # Electron on a production build, no installer
desktop/README.md explains how it works and why. Installers for other people are only built by CI. desktop/RELEASING.md covers releases, updates and code signing.
httpOnly cookie; SESSION_SECRET is mandatory in production.INTEGRATIONS_SECRET or SESSION_SECRET), plus an activity log (the newest 500 events per mailbox) whose summaries include the subject of emails you chose to share. Rows are keyed by an HMAC of the mailbox identity — no email addresses are stored.sessionStorage (gone when the tab closes); the streak and brief dismissals live in localStorage on your device.| Key | Action |
|---|---|
⌘/Ctrl + K | Search, jump or ask Jev |
C | Compose |
J / K | Next / previous message |
U | Back to list |
/ | Search the folder |
Esc | Close / clear |
bun run dev # next dev
bun run build # production build
bun run lint # eslint
bun run typecheck # tsc --noEmit
bun test # unit tests (metrics, planner, MIME, reply, auth, integrations, mbox)
bun run check:payload # fail if known malware markers are in the tree
bun run db:generate # new migration from lib/db/schema.ts
bun run db:migrate # apply migrations (direct connection)
bun run db:studio # browse the integrations tables
bun run bump patch # cut a release (patch|minor|major|x.y.z) — see Releases
bun run desktop:dev # desktop app on next dev (see Desktop)
CHANGELOG.md follows Keep a Changelog
and ships inside the app: the What's New card after an upgrade, the changelog
dialog (account menu, Settings → About, or any URL + #changelog) all read it.
Add plain-English, user-facing entries under [Unreleased] as you work.
bun run bump patch|minor|major|x.y.z moves [Unreleased] under a dated
heading, syncs package.json, commits chore(release): vX.Y.Z and tags it. It
refuses a dirty tree or an empty [Unreleased] (--allow-empty overrides) and
never pushes. The What's New card shows once per device per version; a fresh
browser records the version silently instead.
app/
(app)/overview dashboard (home)
(app)/mail three-pane mail
(app)/integrations health checks, chat/webhook connections, mailbox export
api/mail/* GET reads (folders, messages, message)
api/overview dashboard data (?days=30&tz=…)
api/jev/ask Ask Jev — streams NDJSON stage events + answer
api/jev/triage on-demand Deep triage
api/integrations/* overview, activity, connect + check (NDJSON steps), share, brief, export plan/chunk
lib/
mail/ imap, smtp, snapshot, previews, MIME, sanitize, dev store
insights/ pure metrics: obligations, reply times, rhythm, newsletters, weather
jev/ask/ planner, retrieval, ranking, answers (pure where possible)
integrations/ providers (Slack, Discord, webhook), delivery + retries, SSRF-safe fetch, sealing, diagnostics, mbox export
db/ Drizzle schema + migrations (Neon on the web, PGlite in the desktop app)
actions/ server actions (mutations only)
server/ route guard, TTL cache, rate limiter, connection semaphore
components/
overview/ bento widgets (+ orbit/ constellation)
jev/ Ask tray, answers, hero prompt
integrations/ board, detail sheet, step progress, activity, export panel, share menus
shell/ nav rail, frame, theme switch
settings/ /settings registry, rows, board
whats-new/ What's New card + #changelog dialog (CHANGELOG.md via lib/changelog)
mail/ list, reader, compose, sandboxed email frame
viz/ hand-drawn SVG charts (sparkline, ring, circles, bars, heat dots)
Bug reports, provider quirks and pull requests are welcome. Start with CONTRIBUTING.md, and please follow the Code of Conduct. Found a security bug? Report it privately, as described in SECURITY.md.
Raven is free. If it saves you time, GitHub Sponsors keeps it going.
Raven is licensed under AGPL-3.0-or-later. components/motion-garden/ is MIT; see its LICENSE.
In plain words: you can use Raven, change it and self-host it. If you run a modified version for other people over a network, you must share your changes with them.