DeepSeek Harness Remote
DeepSeek Harness Remote: DeepSeek Harness 실행 PC와 모바일·PC를 안전하게 연결해 어디서나 작업 이어받기
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Your Gmail, sorted. Rules you can read, typed AI judgments from TypeSafe's Jev for pennies, receipts and undo for everything.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Rules you can read. Typed AI judgments for pennies. A straight answer to what to trash.
Mailroom keeps a Gmail mailbox sorted. Deterministic rules do the bulk for free: label on arrival, archive stragglers, trash expired codes and stale notifications, mark old promotions read. Whatever the rules cannot place goes to TypeSafe's Jev, a System One model that answers five narrow typed questions per email with probabilities instead of prose, for about $0.042 per million input tokens. Every run previews first, writes a receipt, and can be undone. Nothing is ever sent, unsubscribed, or deleted for good.
Live at mailroom.kevinliu.studio. It is a personal deployment: sign-in shows Google's "unverified app" warning (click Advanced, then Go to mailroom), Jev is bring-your-own-key, and the project is capped at 100 users by Google. If that is not for you, clone it and run your own; the setup below takes an hour.
| Rules, then Jev, then a receipt | A policy you can read in one screen becomes Gmail searches and label changes. Jev judges only the Primary-tab mail the rules left alone, once per message, cached forever. Every change is a row in a receipt. |
| Ask in plain words | "Receipts from Uber last month", "who hasn't replied to me", "unread from real people". Code finds the senders, dates, and status words; Jev picks the category, window, and intent; you get a Gmail query you can edit, and conversations ranked by the signal you asked for, with every probability shown. |
| Decide sender by sender | Ninety days of mail aggregated by sender, judged once, crossed with how much of it you actually open. You click protect, keep, trash after 30 days, or trash all; it becomes a standing rule. |
| Filing you can read | Routes say where mail from a sender goes: a category, an optional sub-label, optionally only for certain subject words. Each becomes a Gmail filter, so new mail is filed the moment it lands. Built-in routes cover common services; yours add to them. Already have hand-made Gmail filters? Adopt them in one click and one system owns filing from then on. |
| Grade what happened | On any receipt, ask Jev whether each trashed or filed email was handled right. Disagreements come pre-selected, and one click reverses just those. |
| Thirteen fixed labels | Work, Personal, Banking & Finance, Receipts, Trips & Travel, Events, Recruiting, School, Dev Notifications, Social Media, Newsletters, Marketing & Deals, Accounts & Security. Nothing custom, so search always works. |
Gmail applies every filter that matches, so two routes that both match a message would both label it. Mailroom resolves that when it compiles the filters, by three rules:
o.delta.com is filed as Marketing, the delta.com Travel route excludes it,
so Delta's promos stop landing in Travel while boarding passes still do.uber.com Marketing route; the rest of Uber's mail stays Marketing. A route's exceptions go back with it: the
built-in Receipts route skips promo phrasing such as "your next order", so "40% off your next order" stays Marketing.delta.com as Marketing and the built-in Travel route drops it.Anything left, the same sender in two of your own routes with nothing to tell them apart, is shown as a conflict on the policy page. Gmail lets a filter apply one user label, so a route with a sub-label becomes two filters with the same criteria. Mailroom tracks the filters it creates and only ever changes those; filters that do something routes cannot express (forwarding, never-spam, Gmail tabs, labels outside the categories) are left alone. Every sync, adoption, and reconcile is a run with a receipt, and Undo puts the filters, the labels, and the policy back.
Filters only see new mail. File existing mail on the policy page previews, then applies, the routes to recent mail. Missing labels go on. A label comes off only where a filter Mailroom replaced could have put it and today's routes file the message in another category, so labels you, Jev, or an earlier cleanup applied stay put.
SECURITY.md and docs/casa.md.You need a Google Cloud project, a Postgres database, a Vercel account (or anywhere Next.js runs with a cron), and a TypeSafe key for Jev.
https://<your-domain> and http://localhost:3000 and redirect URIs <origin>/api/auth/callback/google for both.
Enable the Gmail API. Add the Gmail scopes gmail.modify and gmail.settings.basic under Data Access.
Until Google verifies your app you will see the unverified warning; verification for these restricted scopes
requires an annual CASA assessment (docs/casa.md explains the trade-off). For a mailbox or two, unverified is fine.cp .env.example .env.local and fill it in. openssl rand -base64 32 for AUTH_SECRET and
TOKEN_ENCRYPTION_KEY. TYPESAFE_API_KEY and OWNER_EMAIL are optional: set them and the owner's account uses the
house key, everyone else adds their own key in the dashboard..woff2 files into src/app/fonts/ (see .gitignore for the filenames), or run pnpm fonts:fallback to
fetch open stand-ins (JetBrains Mono and Figtree) under those names.pnpm install && pnpm db:push creates the tables.pnpm dev, sign in, add a TypeSafe key if you are not the owner, press Preview.vercel link, vercel env add each variable, vercel --prod. The cron in vercel.json calls
/api/cron daily at 13:00 UTC with Authorization: Bearer $CRON_SECRET. It runs only the mailboxes whose owners
turned the daily run on; a new mailbox starts with it off.Next.js 16 (App Router, Turbopack), React 19, Auth.js v5 with Google, Drizzle on Postgres, @typesafe-ai/sdk,
Tailwind v4, Vitest. Type is Camber for words and Berkeley Mono for data.
src/lib/policy the policy schema (zod), the thirteen categories, rules, routes compiled to Gmail filters
src/lib/engine run.ts (rules, then triage, then receipts), filters.ts (sync), filing.ts (adopt, reconcile)
src/lib/ai client.ts (bring-your-own-key context), triage.ts, grade.ts
src/lib/search lexicon.ts, compile.ts (words to a Gmail query), threads.ts, rerank.ts
src/lib/gmail a thin Gmail REST client: metadata reads, batchModify, labels, filters
src/app/api one route per action; every write requires a session and is scoped to that user
src/app/app the dashboard, search, what-to-trash, senders, policy, run receipts
src/components the landing diagrams (isometric SVG), the app bits, the type system
tests pure logic: compiler, lexicon, thread summaries, label expansion
docs verification notes, the share image recipe, the CASA evidence table
Jev is used the way TypeSafe recommends: code owns the workflow, finds candidates, and applies thresholds; the model answers atomic questions (Choice for the category, Noul for yes-or-no facts, Score for graded relevance) over metadata, and every probability is shown in the UI rather than hidden behind a verdict.
pnpm dev, pnpm build, pnpm test, pnpm typecheck, pnpm lint, pnpm db:push, pnpm db:studio,
pnpm smoke:search (compiles thirty questions and prints the queries), pnpm smoke:triage, pnpm filters:audit
(where your Gmail filters stand against the routes: in place, to sync, adoptable, left alone, conflicts).
scripts/seed-preview-user.ts creates a throwaway signed-in user so the app pages can be reviewed without Gmail; run
it with --remove afterwards.
MIT for the code. The fonts are not included: Berkeley Mono (Berkeley Graphics) and Camber (Emtype) are licensed to
the hosted instance only. pnpm fonts:fallback gives you open stand-ins.