SiftPage Summarizer (Chrome)
What it does for you
A reading side panel with local summaries, page questions and optional Claude support.

Screenshots

In more detail
Sift is a reading companion in Chrome's side panel. It pulls the main text out of a web page, skips the navigation and promo noise, and gives you a TL;DR, key points, a simpler version, action items, or answers to questions about the page, right beside the source. Local mode works with no account and no paid call. Claude is an optional setting you turn on yourself.
Honest limits
The installed-extension path was never tested in a real Chrome profile, and the optional live Claude path was never exercised. Streaming and a map-reduce pass for large pages need real integration coverage. The model IDs follow the split spec without verifying they're available. 47 checks is a smaller suite than most in this batch.
How I built it
This was a Codex row in 00-system/capstone-split.md. An earlier interrupted session had left the extractor, the local summary logic, the prompt builders, an API adapter, the service worker, and the shared panel rendering. Codex finished the runnable parts: the adapters, a standalone reading desk, settings, history, Markdown export, themes, and the verification and browser checks. About 0.16 hours this session, earlier core work not counted. No subagents were used.
I set strict boundaries: no spending, minimal permissions, and stay inside its own folders. Nothing was published and nothing was sent to an API. The side panel and the demo mount the same UI, and the sample page is original fictional prose, labeled as such.
The split file's AI rules applied here: Claude API only, a deterministic local mode that works with no key, and never calling the API during a build or from tests. Codex checked the request headers and refusal handling against HTTP fixtures instead. As a Codex build it went through the merge protocol, with a LOG-ENTRY.json in its folder that Claude Code checked and merged.
What I learned
- Page content is untrusted input. Text and metadata get fenced as untrusted, closing delimiters inside a hostile page get neutralized, and the prompt says never to follow instructions from that content. The delimiter injection case is tested.
- A passing logic suite doesn't prove the browser will start. The browser test caught a missing object brace in the source-rendering code that the pure tests never loaded.
- A local extractive summary is useful when its limits are visible. Local questions return matching source sentences instead of pretending to reason.
- HTTP fixtures let me check headers, refusals, and errors without spending credits.
What carried forward
Sift shares its main idea with #58, which Codex finished the same day: one UI mounted in both the extension and a standalone demo. It also reused a core that was already in the folder and passed its tests, per the split file's rule 2. No later project imports Sift's code.
If I took it further
Add a real installed-extension test with cancellation across tab changes, and measure extraction quality against a fixed set of difficult pages before adding features.
#059 Built with Codex September 23, 2026 47 automated checks