Every screen, and the claim it supports.
All of these are captured from the running app against the bundled demo corpus — nothing here is a mockup or a
composite. Regenerate them yourself with pnpm screenshots.
0
native dependencies
SQLite is Node 24’s built-in node:sqlite
<10s
clean-clone install
measured, no compile step to fail
52
tests passing
behaviour, not snapshot values
<15ms
hybrid search
exact retrieval, not approximate
168KB
web bundle, gzipped
no component library
10.5KB
content script
type-only imports from core
01 · First run
The hardest state to design for: a tool whose entire value is a corpus, and there is no corpus yet.
02 · Read and triage
Two hundred items should be a few minutes, not an afternoon.
The inbox, ranked by signal
Virtualised list on the left, reader on the right. J/K moves, S saves, E archives, X multi-selects. Every triage action is optimistic with six seconds of undo, so the row moves the instant you press the key.
What a row actually tells you
Score with a fill bar, source dot, author, age, the two most meaningful engagement counters for that platform, derived topics, and an echo count when other sources reported the same story. It degrades cleanly at narrow widths — topics drop first.
Press W: why is this a 61?
All six components with their live values and weights, plus ranked prose reasons. The breakdown is stored with the item, so this needs no recomputation. A ranking you cannot interrogate is a ranking you cannot trust.
Light theme, same system
One set of OKLCH tokens inverted, not a second stylesheet. Dark mode carries elevation with hairlines and an inner top highlight; light mode uses real shadows, because a drop shadow on near-black is invisible.
03 · Find anything
Four retrievers, fused by reciprocal rank. Chinese is a first-class citizen, not an afterthought.
⌘K searches your library while you type
Live hybrid results inside the palette, so "I remember reading something about inference" is two keystrokes from being open. Semantic-only matches are badged, so you always know why something surfaced.
中文搜索 that actually returns results
SQLite’s default tokeniser treats a whole Chinese sentence as one token, so most tools silently return nothing. Sift indexes character bigrams and turns queries into ordered bigram phrases — exact substring matching. 「怎么降低推理成本」 finds 「大模型推理成本优化实战」.
04 · Understand and synthesise
The part every aggregator skips: turning a pile of captures into something you can act on.
Topic momentum, not topic volume
"Which topics are big" is always the same few. This shows which are accelerating against the previous window, with smoothing so a fresh install does not claim 17× growth on three items. Plus source mix, the voices whose work you keep, and an entity cloud.
Ask, grounded strictly in your own corpus
Citations arrive before the first token and link back to the item, so every claim is checkable against the passage the model was actually shown. If the answer is not in your library, it says so rather than filling the gap from memory.
Briefings with every claim traceable
Themed sections, bracketed citations resolving to real items, generated daily or on demand. Works with no API key at all — the template path clusters and assembles locally.
05 · Collect and share
Sources that need no key, plus an extension for the ones that need your own session.
13 keyless connectors out of the box
Hacker News, arXiv, GitHub, Hugging Face papers, Reddit and seven curated feeds — every one a public endpoint needing no signup. Per-source trust multiplies the final score, and each can be polled on demand.
The extension reads what your browser already fetched
A MAIN-world script observes the page’s own fetch and XHR responses. Nothing is re-requested, no credentials are touched, no scraping traffic is generated. Three host permissions, no <all_urls>, no tabs, no cookies.
Share cards rendered locally
SVG generated server-side with no headless browser and no canvas binding, rasterised to PNG in-page. Export also does Markdown with your highlights, JSON, CSV (BOM-prefixed so Excel opens Chinese correctly) and OPML.
The scoring weights are yours
Six sliders. Move one and the whole library rescores in the background, streaming progress. API keys are write-only — stored locally and never returned by any endpoint.
Ready to post
Copy, paste, ship.
Written to each platform's length rather than truncated to fit, in English and Chinese. Every number in them is measured and checkable from the repository.
Built Sift — a local-first AI intelligence workstation. Harvests from X, 小红书, HN, arXiv, GitHub. Scores every item on 6 explainable axes. Folds duplicates. Searches in English and Chinese. Zero native deps. No account. No telemetry. One SQLite file. github.com/micaho26/sift
做了个 Sift —— 本地优先的 AI 情报工作台。 从推特、小红书、HN、arXiv、GitHub 采集,六个可解释维度打分,自动折叠重复,中英文都能搜。 零原生依赖,不用注册,无遥测,全部数据就一个 SQLite 文件。 github.com/micaho26/sift
Show HN: Sift – a local-first AI intelligence workstation I got tired of following AI across six timelines in three languages, seeing the same launch reported twenty times, and having bookmarks I could never search again. Sift collects from X, 小红书, Hacker News, arXiv, GitHub and RSS, then scores every item on six components — relevance, velocity, depth, novelty, authority, recency — and shows the full breakdown for any score. Press W and you see exactly why something is a 61. Two things I think are genuinely interesting: Deduplication is two-tier. SimHash with LSH banding catches verbatim reposts. But measured on my own corpus, a real repost sits at Hamming 22 while unrelated items sit at 27–31 — far too narrow to threshold. Cosine separates the same pair 0.60 vs 0.29, so tier two uses embeddings, gated on a shared named entity and a 72-hour window. Chinese search works. SQLite's unicode61 tokeniser treats a whole Chinese sentence as one token, so most tools silently return nothing for Chinese queries. Sift indexes a parallel column of character bigrams and turns queries into ordered bigram phrases, which is exact substring matching. Zero native dependencies — SQLite is Node 24's built-in node:sqlite, so install cannot fail on node-gyp. The vector index is a hand-written flat Float32Array scan doing exact KNN; at personal-corpus scale that beats an ANN index on every axis that matters. No account, no telemetry, no API key required. MIT.
Sift — local-first AI news workstation, zero native deps, works offline Everything lives in one SQLite file on your machine. No account, no telemetry, and no API key required — semantic search runs on a built-in hashing embedder, and summaries fall back to local extractive summarisation. Add Anthropic/OpenAI/Ollama only if you want written prose. Collects from Hacker News, arXiv, GitHub, Hugging Face papers, Reddit and RSS with no keys, plus a browser extension for X and 小红书 that reads the JSON your browser already received rather than re-requesting anything. Scores every item on six explainable axes and shows the full breakdown. Deduplicates the twenty accounts that all reported one launch. Searches in English and Chinese. git clone, pnpm install, pnpm dev. Install takes under 10 seconds because there is nothing to compile. github.com/micaho26/sift
每天追 AI 太累了:六个时间线、三种语言、同一个发布被转二十遍,收藏夹存了就再也搜不到。 所以做了 Sift,一个本地跑的 AI 情报工作台: · 从推特、小红书、HN、arXiv、GitHub 自动采集 · 每条内容六个维度打分(相关度/传播速度/信息密度/新颖度/作者权重/时效),按 W 能看到每个维度的具体数值和原因 · 自动折叠重复报道,保留一条 + 回声数 · 中英文都能搜(大多数工具中文搜索直接返回空,因为 SQLite 默认分词把整句中文当一个词) · 全部数据一个 SQLite 文件,不用注册,无遥测,不填 API key 也能用 零原生依赖,clone 下来 install 不到 10 秒,一条命令启动。MIT 开源。 github.com/micaho26/sift
Brand assets
Take what you need.
The palette is OKLCH: accent oklch(64% 0.18 285), background
oklch(11% 0.012 285). Type is Inter with JetBrains Mono for anything numeric. All
screenshots are 2× retina, captured at 1600×1000 from the running app. Everything here is MIT — reuse it freely.