---
id: personal-web-surfing-models
title: Personal web surfing models and an ought-driven tab feed
version: 1
published: '2026-10-27'
updated: '2026-10-27'
author: Hiina
produced-by: Claude deep-research run with citation checking
model: claude-opus-5-5
sources-through: '2026-10-26'
status: current
takeaway: Don't train a generative model on one person's browsing; pair a local ranker
  on implicit labels with an editable goals profile applied by an LLM rerank, starting
  with a weekend ought-triage tab feed.
topics:
- web-browsing
- recommender-systems
- agents
- personalization
source-sha256: 4fc4a5de84c9a6220dc58a6349ec3a9e916b3ae4c0667ebf7544d7a51c87ed64
---

Index of everything on this site: https://ai.hiina.space/index.md

# Personal web surfing models and an ought-driven tab feed

- Author: Hiina (hiina@hiina.space)
- Produced by: Claude deep-research run with citation checking
- Version: 1 · published 2026-10-27 · updated 2026-10-27 · status: current
- Canonical: https://ai.hiina.space/reports/personal-web-surfing-models.md (this version as one file: https://ai.hiina.space/reports/personal-web-surfing-models/v1.md)
- Takeaway: Don't train a generative model on one person's browsing; pair a local ranker on implicit labels with an editable goals profile applied by an LLM rerank, starting with a weekend ought-triage tab feed.
- Topics: web-browsing, recommender-systems, [agents](https://ai.hiina.space/topics/agents.md), personalization
- Model: claude-opus-5-5
- Sources through: 2026-10-26

The question behind this report: could a model trained on one person's open-web history rank links or tabs for that person, or for the research agents working on their behalf? And could such a model rank by what the person *ought* to read, given their current goals, rather than by what they habitually click? The motivating case is someone who uses open tabs as a read-later queue and sometimes opens the browser just wanting to be distracted. A secondary question is whether such models could be shared: could you call up "Gwern's view of the web" the way you call any other tool?

## 1. Summary

No one has published a personal web surfing model: a model trained on one person's open-web history and used to rank links or tabs for them or an agent. The neighbours are mature: next-page prediction, session-based recommendation, web agents and personal LLMs. A useful version is buildable on commodity hardware now. It just shouldn't be a generative model trained on a person's URL stream.

- **History encodes what you did, distraction included.** Kleinberg et al. formalize how optimizing for revealed behavior can raise engagement while lowering welfare. Gwern himself warns that passive lifelog data mostly encodes routine. A pure imitation model of someone's browsing would learn their "please distract me" scrolling.

- **The workable architecture has two layers.**

  - A local ranker trained on implicit labels (dwell, revisit, saved, closed unread) supplies the "is".

  - An editable natural-language profile (Gwern's `PRINCIPAL.md`), applied by an LLM rerank against the current task, supplies the "ought".

  - The literature on LLM user profiles and retrieval favors this over raw-history prompting. TALLRec shows a LoRA reranker can learn from under 100 labeled pairs once the labels exist.

- **Sharing works best through public curation, not models trained on private history.** Browsing histories are about 99% unique, so they act as fingerprints. A "Gwern view" is buildable from his public link-annotation database, tags and newsletters as retrieval plus a profile-prompted judge. [Knowledge](https://knowledge-web.org) already does this for about 450 people as an MCP server.

- **The ought feed has close precedents but no tab version.**

  - BONSAI (an intent-specified Bluesky feed) and Intent Assistant (CHI 2026: state an intention, an LLM nudges toward it) both worked in small field studies. Compass did the same for YouTube Shorts.

  - Every tab tool groups tabs by similarity or age; none ranks by a stated goal.

  - The evidence says: clarify the intention each session, make archiving safe so the pile can shrink, and answer "distract me" with a redirect and an explicit leisure option, not a block.

**Most promising first build:** a weekend ought-triage feed. A local 7 to 8B model scores the open tabs against a goals file and a per-session intention. It returns "now", "archive" and one "unwind" pick. Pair it with a tab logger that starts collecting labels for a later personal-ranker MCP tool. Details are under Prototype options.

One thing to do today: Chrome's history may expire after about 90 days, and Firefox's per-visit interaction data is off by default (`browser.places.interactions.enabled`). Start archiving now if you want training data later.

## 2. Gwern's Guardian Angels, and how browsing fits

In [Guardian Angels](https://gwern.net/guardian-angel), Gwern proposes a personal LLM that emulates one person in order to amplify them. The essay never proposes a browsing or link-choice model. Its framework still carries over almost unchanged.

- **The idea.** A Guardian Angel (GA) is a per-person model. The principal acts like a board that decides what is worth doing, and the GA works out how. It also screens incoming information, scams and prompt injections. Two of his principles are "enhancement, not replacement" and "mental sovereignty". He treats engagement as a cost: the aim is "zero *wasted* interruptions", not zero interruptions.

- **Training.** He would fine-tune an off-the-shelf model under 100B parameters on commodity hardware, starting from about 1GB of his own text:

  - IRC logs, his site's Markdown, and his link-annotation database

  - Twitter, HN and LessWrong exports

  - later, email, clippings, flashcards and archived web pages and PDFs

- **Keeping it current.** Dynamic evaluation (online LoRA updates with replay) keeps the model up to date. Active learning has it ask him questions. Synthetic augmentation includes a generated `PRINCIPAL.md` profile.

- **Evaluation.** Held-out loss on his recent comments, plus blinded A/B tests that he judges himself.

- **Caveats.** Dynamic evaluation costs about 3 times normal inference, and he suggests a budget above \$1,000 a month. Only the principal can grade the model. A footnote matters for a browsing model: passive lifelogging data is worth less than expected, because routine behavior is predictable and says little about deeper preferences.

Mapping the browsing idea onto his:

- Browser history is the equivalent of his IRC logs, but it is mostly the passive kind his footnote warns about.

- The `PRINCIPAL.md` profile is the piece that carries the "ought". It is also the piece that is cheap to build, edit and share.

- The nearest thing to a browsing model in Gwern's orbit is a June 2026 reader response on LessWrong, [Screencasts could be scalable data and evals for single-user emulation](https://www.lesswrong.com/posts/NwrbrHmkDuKPXgLFb/screencasts-could-be-scalable-data-evals-for-single-user). Its first proposed benchmark is predicting which tweets a user clicks in a held-out browsing session.

- Gwern also proposed simulated LessWrong commenters, including a "virtual-gwern" that critiques drafts ([2024](https://gwern.net/blog/2024-virtual-comments)). That is a per-person model used as a critic, close to the "Gwern's view" idea.

## 3. Existing web surfing models

No one has published a model trained on one person's open-web history and used to rank links or tabs for them or an agent. Several neighbouring fields are mature: next-page prediction, session-based recommendation, web-agent benchmarks and personal LLMs. Each covers part of what a personal surfing model needs.

| Field                           | Representative work                                                                                                                                                                                                                                                                                                                                                    | What it gives                                                                                          | Why it isn't a personal surfing model                                                                                                     |
|---------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------|
| Cognitive models of link choice | [SNIF-ACT](https://apps.dtic.mil/sti/html/tr/ADA462156/index.html) (Fu & Pirolli 2007): picks links by "information scent" relative to a goal. [West & Leskovec](https://archives.iw3c2.org/www2012/proceedings/proceedings/p619.pdf) (WWW 2012): Wikispeedia players jump to a hub, then steer by similarity                                                          | An interpretable account of why a goal-directed person clicks a link. Usable as features or a baseline | Population-level and goal-given; no personal taste                                                                                        |
| Next-page prediction            | Markov and PPM models ([Gellert 2021](https://webspace.ulbsibiu.ro/arpad.gellert/html/NN_Web_Pred_v9_JWE_preprint.pdf)); [GoWeB](https://arxiv.org/pdf/2108.03350) on Edge logs; Chrome omnibox ML scoring ([Google, 2024](https://blog.google/chromium/how-machine-learning-improved-chrome/))                                                                        | Proof that history predicts the next destination                                                       | Predicts habit, which is the opposite of "ought"                                                                                          |
| History to interest profile     | Chrome [Topics API](https://privacysandbox.google.com/private-advertising/topics/web): hostnames to 22 root topics, top 5 per week. [Being removed](https://groups.google.com/a/chromium.org/g/blink-dev/c/_R85yctz4Rs/m/CkQpJil0AQAJ) in 2026                                                                                                                         | A production design for compressing history                                                            | Deliberately coarse, built for ads                                                                                                        |
| Sequential recommendation       | [GRU4Rec](https://arxiv.org/pdf/1511.06939), SASRec, BERT4Rec ([replicability study](https://arxiv.org/pdf/2207.07483)), [HSTU](https://proceedings.mlr.press/v235/zhai24a.html) (Meta, 1.5T parameters in production), [TIGER](https://proceedings.neurips.cc/paper/2023/hash/20dcab0f14046a5c6b02b61da9f13229-Abstract.html)                                         | Architectures for next-item prediction                                                                 | Need a shared catalogue and millions of users. One person's web has an open item space and thousands of events                            |
| LLM recommenders                | [TALLRec](https://arxiv.org/abs/2305.00447) (works with under 100 labels), [LLaRA](https://arxiv.org/html/2312.02445v4), [USER-LLM](https://research.google/blog/user-llm-efficient-llm-contextualization-with-user-embeddings/) (compresses long history to 32 soft tokens), [ONCE](https://ar5iv.arxiv.org/html/2305.06566) (GPT infers a profile from news history) | The building blocks for an n=1 ranker                                                                  | Trained and evaluated on pooled users                                                                                                     |
| News click data with dwell      | [MIND](https://www.microsoft.com/en-us/research/?p=676704), [EB-NeRD](https://arxiv.org/pdf/2410.03432) (dwell and scroll depth)                                                                                                                                                                                                                                       | Public data for pretraining a ranker or testing label noise                                            | News only, other people                                                                                                                   |
| Web navigation agents           | [WebShop](https://arxiv.org/abs/2207.01206v2), [Mind2Web](https://arxiv.org/abs/2306.06070v1), [WebArena](https://arxiv.org/abs/2307.13854v4), [WebLINX](https://proceedings.mlr.press/v235/lu24e.html), [Online-Mind2Web](https://arxiv.org/abs/2504.01382v1)                                                                                                         | The research agent a personal ranker would steer                                                       | Optimize for finishing tasks, not for taste                                                                                               |
| Imitating real browsing people  | [OPeRA](https://arxiv.org/pdf/2506.05606) (2025: 51 real users, about 4 weeks of Amazon logs with in-the-moment rationales and personas); [Lu et al.](https://arxiv.org/html/2503.20749v7) (3,526 users)                                                                                                                                                               | The closest data and evaluation recipe                                                                 | Exact next action is hard: 12 to 22% accuracy. Rationales help. No per-user model                                                         |
| Personal LLMs and digital twins | [LaMP](https://arxiv.org/abs/2304.11406v4), [PRISM](https://arxiv.org/pdf/2404.16019); [Park et al.](https://arxiv.org/abs/2411.10109v1) (1,052 interview-based agents reach 85% of people's own test-retest consistency); [PRISM-X](https://arxiv.org/pdf/2605.13307) (2026: per-user tuning gains small)                                                             | Evidence that individual imitation works on attitudes and is hard on preferences                       | Built from interviews, chat or writing, not browsing                                                                                      |
| Personalized web agents         | [PersonalWAB](https://arxiv.org/html/2410.17236v2) (purchase histories); [Persona2Web](https://arxiv.org/html/2602.17003v1) (2026, synthetic year-long browsing histories)                                                                                                                                                                                             | A benchmark shape for "agent conditioned on my history"                                                | Persona2Web agents reach at most about 13%. Inferring preferences from implicit history is the hard part, and explicit profiles help most |

Two things are worth knowing beyond the table:

- The only n=1 browsing models I found are from the 2000s. [Brank et al.](https://www.microsoft.com/en-us/research/wp-content/uploads/2004/11/tr-2004-122.pdf) (MSR 2004, 30 users) predicted per-user habitual trails. [Lettkeman et al.](https://mlanthology.org/aaai/2006/lettkeman2006aaai-predicting) (AAAI 2006) predicted per-task revisits. Both were small, and association rules failed on individual logs.

- [Compass](https://arxiv.org/abs/2608.04274) (August 2026) is the nearest feed-side work. An LLM realigns a YouTube Shorts feed to the user's reflective preferences, with prompts during browsing. A 10-day study with 15 users reported more purposeful use.

The gap has three parts. First, a model of one person's long-term open-web history evaluated as a ranker for an agent. Second, a split between "would click" and "endorse" for a personal tab queue. Third, any shareable per-person model. I tried the wordings personal, single-user, n-of-1, tab recommendation, revisitation and read-later. This looks like a real gap, not a search miss.

## 4. Feasibility of a personal surfing model from browser history

It is feasible, but not as a generative model trained on a URL stream. Build a local ranker on implicit labels, then add an LLM reranking pass against an editable profile and goals file. History records what a person did, distraction included, and the profile file is the cheapest place to write down what they should do.

### What the data actually holds

| Source                                                                                                                                                                                                   | Useful fields                                                                                                                                                            | Catch                                                                                            |
|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------|
| Chrome `History` SQLite: `urls`, `visits`                                                                                                                                                                | URL, title, visit time, `from_visit` referrer chain, transition type (link, typed, reload), `visit_duration` ([SANS](https://www.sans.org/blog/google-chrome-forensics)) | Reportedly keeps about 90 days by default (secondary source), so start archiving now             |
| Chrome `context_annotations`, `content_annotations`, `clusters` ([Chromium source](https://chromium.googlesource.com/chromium/src/+/HEAD/components/history/core/browser/visit_annotations_database.cc)) | Foreground duration, tab id, task tree (`root_task_id`, `parent_task_id`), page end reason, Chrome's own topic categories, entities, search terms and Journeys clusters  | Undocumented internal schema that can change                                                     |
| Firefox `moz_places_metadata` ([Interactions source](https://arai.searchfox.org/firefox-main/source/browser/components/places/Interactions.sys.mjs))                                                     | Per-visit view time, typing time, key presses, scroll distance, referrer                                                                                                 | The `browser.places.interactions.enabled` pref defaults to false, so past data probably lacks it |
| Session files: Firefox `recovery.jsonlz4` ([format](https://blog.dend.ro/decoding-firefox-session-store-data/)), Chrome SNSS ([crate](https://docs.rs/crate/snss/0.1.1))                                 | Open tabs per window, back-stack per tab                                                                                                                                 | Snapshot it periodically to get "kept vs closed" labels                                          |
| An extension using `chrome.tabs` ([docs](https://developer.chrome.com/docs/extensions/reference/api/tabs/))                                                                                              | Activation events (from which dwell can be computed), `lastAccessed`, `openerTabId`, groups, close events                                                                | Has to be written; `chrome.history` has no duration field                                        |

Existing plumbing to reuse: [Promnesia](https://beepb00p.xyz/exobrain/projects/promnesia.html) already merges browser databases and other sources into one local visits database. [ActivityWatch's web watcher](https://addons.mozilla.org/firefox/addon/aw-watcher-web/) logs the active tab locally. [ArchiveBox](https://docs.archivebox.io/v0.4.20/README.html) snapshots page content that can then be embedded. [Screenpipe](https://screenpipe.com/about) is local but source-available and needs a commercial license.

### Three modeling options at n=1

1.  **Fine-tune a small LM on visit sequences.** This is the weakest option. The nearest real result, [GoWeB](https://arxiv.org/pdf/2108.03350) (Microsoft Edge), used 57k users to reach next-page MRR@10 of about 0.11. One person's history is far smaller, and the model would mostly learn habits. Fine-tuning does pay once there are explicit preference labels: [TALLRec](https://arxiv.org/abs/2305.00447) adapted LLaMA-7B into a ranker with under 100 labeled pairs on a single 24 GB consumer GPU.

2.  **Embeddings plus a learned ranker.** This is the cheapest and easiest to debug. Embed title, URL and page text locally, then fit logistic regression or LightGBM on normalized dwell, revisits, bookmarks and tabs kept. The labels are noisy:

    - Raw dwell favors long pages and heavy readers, so normalize it per source and cap it ([ar5iv](https://ar5iv.labs.arxiv.org/html/2209.09000)).

    - Keeping a tab open often reflects fear of losing it, not importance (the CHI 2021 tab study in the tab triage section).

3.  **A frontier LLM with retrieval and a natural-language profile.** This is where the "ought" fits.

    - [Radlinski et al.](https://arxiv.org/abs/2205.09403v1) argue for editable, readable natural-language user profiles.

    - [Ramos et al.](https://arxiv.org/abs/2402.05810v2) (ACL 2024) found LLM-written profiles competitive with standard recommenders.

    - Short profiles of about 100 words held up for pairwise preference ([LFM](https://arxiv.org/pdf/2402.15623)).

    - Retrieving about 30 relevant past records beat dumping the full history ([LUNAR](https://arxiv.org/html/2608.05246v2)).

    - LLMs used as zero-shot rankers show position and popularity bias, which can be reduced by shuffling candidates and aggregating ([Hou et al.](https://arxiv.org/abs/2305.08845v2)).

### Evaluation

- Split strictly by time: train before date T and test after. Random splits leak the future ([Ji et al.](https://arxiv.org/abs/2010.11060v4)).

- Offline tasks: next-domain or next-cluster MRR, ranking tabs later reopened or bookmarked above tabs closed unread, and revisit prediction.

- Pairwise blind judgments in a small UI, which also produce fine-tuning data.

- Agent-in-the-loop: run the research agent with and without the ranker and rate the reports. Gwern's proposed metrics fit here: endorsement rate and regret per query.

- Score "is" and "ought" separately. A model that predicts someone's visits well may simply be predicting distraction.

### Privacy

- Browsing histories act like fingerprints. In a Mozilla study of about 52k users, 99% had unique histories ([Mozilla Foundation](https://www.mozillafoundation.org/en/research/library/why-we-still-cant-browse-in-peace-on-the-uniqueness-and-reidentifiability-of-web-browsing-histories/)). Hashing the URLs does not anonymize them.

- About 15% of a billion URLs tested carried special-category content such as health or politics ([IMDEA](https://networks.imdea.org/over-150-million-websites-among-a-billion-tested-include-sensitive-and-tracked-content/)).

- Keep raw history, embeddings and the ranker on a self-hosted machine. Send a hosted model only the reviewed profile plus candidate titles.

- Retention on hosted models: the Anthropic API deletes inputs within 30 days by default ([policy](https://privacy.claude.com/en/articles/7996866-how-long-does-anthropic-store-my-organizations-data)). Consumer plans keep data 5 years if the training setting is on ([terms update](https://www.anthropic.com/news/updates-to-our-consumer-terms)). Check that setting before piping history through a consumer-plan coding agent, or use a local Qwen model for the scoring pass.

## 5. Sharing and remixing surfing models

No one has published a trained model of a public figure's link choices. The working version of "call Gwern's view of the web" today is retrieval over that person's public link trail, plus an LLM judge prompted with their profile. Privacy pushes the same way: a model trained on raw history is close to a fingerprint, so anything shared should be built from public curation, not private browsing.

### Prior art

- **Memex trails.** In Bush's ["As We May Think"](https://en.wikipedia.org/wiki/Memex) (1945), a user builds a trail of their interest and can copy it to a colleague. Bush even predicted a profession of "trailblazers". That is the sharing idea, as static trails rather than models.

- **Knowledge** ([README](https://raw.githubusercontent.com/raphaelsty/knowledge/main/README.md), [site](https://knowledge-web.org)) is the closest working system. It builds public per-person libraries for about 450 people, including Karpathy, Olah and Willison, from their GitHub stars, X likes, HN submissions and Hugging Face likes. That comes to about 440k documents under ColBERT search, with an MCP server offering search within one person's library, search across libraries, and feed and intersection tools. It is retrieval, not a trained model. I couldn't tell whether Gwern is included.

- **Trail and annotation tools.**

  - [Are.na](https://www.are.na/developers/explore) channels: open API, mostly without auth.

  - Hypothesis public annotations: [exportable per user](https://web.hypothes.is/blog/viewing-and-exporting-hypothesis-annotations/).

  - Pinboard public bookmarks.

  - [Memex by WorldBrain](https://addons.mozilla.org/firefox/addon/worldbrain/): shared collections, little activity.

  - [Histre](https://histre.com/blog/why/): public member pages, hosted.

  - None of these models anyone.

- **Simulated users for recommenders.** [RecAgent](https://arxiv.org/abs/2306.02552v3), [Agent4Rec](https://arxiv.org/abs/2310.10108v3) (SIGIR 2024) and [USimAgent](https://arxiv.org/pdf/2403.09142) build LLM agents seeded from real users' histories. They simulate populations, not named individuals.

- **Personal models from screen activity.** [GUM](https://arxiv.org/html/2505.10831v1) (Shaikh, Bernstein et al. 2025) turns screenshots, browsing included, into weighted propositions about the user. Its assistant uses expected utility to decide when to interrupt. GUM is a close relative of both the personal surfing model and the ought feed.

- **Imitating specific people.** In [TwinVoice](https://arxiv.org/html/2510.25536) (2025), models fall below the human baseline at matching specific people's opinions and style.

### Bootstrapping a Gwern model from public data

Gwern's site is unusually well suited to this. Its build code shows the data available:

- **The link-annotation database.** [`GTX.hs`](https://gwern.net/static/build/GTX.hs) defines records holding the URL, title, authors, date, tags and his abstract or commentary.

- **Supporting tables.** The code also builds a backlinks database, tag directories and per-page link bibliographies. A similar-links embedding index is built with [`GenerateSimilar.hs`](https://gwern.net/static/build/GenerateSimilar.hs).

- **Newsletters.** Monthly issues are topic-sorted link lists with short glosses ([example](https://gwern.net/newsletter/2022/11)).

All of this is public as HTML. I could not confirm that a bulk `.gtx` dump can be downloaded: robots.txt refused my fetcher, and I couldn't check the [repo](https://github.com/gwern/gwern.net). Assume the per-page bibliographies may have to be scraped.

Three ways to frame it, cheapest first:

1.  **Retrieval baseline.** Embed his annotated corpus and score candidate links by similarity to his library. Add an LLM judge prompted with a generated Gwern `PRINCIPAL.md`, the same augmentation his essay proposes. This is a weekend's work once the corpus is scraped.

2.  **Link choice in context.** For each essay sentence that cites a link, the cited link is the positive. Plausible uncited links are the negatives, such as arXiv papers or HN posts on the same topic from the same week. That yields a pairwise dataset for a LoRA reranker.

3.  **Annotation as preference.** Predict his tags or gloss from an item's abstract. What he chooses to say about a paper shows what he finds salient.

The gap that matters is that public data shows what he kept and never what he opened and dropped. A "Gwern view" built this way models his curation, not his browsing. For the purpose here, learning which sources he favors or ignores, curation is arguably the better signal.

The shareable artifact is then a bundle: a profile file, a public link library and optionally a small LoRA reranker. A browser extension or MCP tool takes a topic and candidate links, and returns that person's ranking with a one-line reason for each. A user could compare their own ranking with his side by side to see what he would skip.

## 6. Tab triage and an ought-not-engagement feed

No tool I found ranks open tabs or a read-later queue against a stated current goal. Existing tools group tabs by similarity or sweep them by age. The two closest pieces of research are BONSAI, an intent-specified social feed, and Intent Assistant, which nudges toward a stated intention. Between them they cover most of the design.

### Why tabs pile up

- People hoard tabs out of fear, not laziness. In Chang et al. (CHI 2021, n=103), over half said they could not close tabs and 30% called it a problem; only 19% blamed laziness. The driver is a "black hole" fear that anything closed is gone, plus attachment to the tabs themselves. I took these figures from [CMU's write-up](https://www.scs.cmu.edu/news/2021/overcoming-tab-overload) and [ScienceAlert](https://www.sciencealert.com/tab-overload-is-a-common-problem-for-people-browsing-the-internet-survey-finds); the paper itself would not load.

- Tabs work as reminders, and they rot. In [Dubroy & Balakrishnan](https://www.dgp.toronto.edu/public_user/ravin/papers/chi2010_tabbedbrowsing.pdf) (CHI 2010), 17 of 21 users kept tabs as reminders, 25% of tabs were never selected and 45% were selected once.

- Task bundles plus permission to deprioritize worked in the field. In [Tabs.do](https://par.nsf.gov/servlets/purl/10358962) (UIST 2021), 7 of 10 overwhelmed users still used it daily after 10 weeks. Its "Maybe/Someday" section resurfaces one random item. Due dates went unused.

- [Arc](https://resources.arc.net/hc/en-us/articles/19228855311127) archives idle tabs after 12 hours, and the archive can be restored. Arc shows that aggressive auto-archive is tolerable when nothing is lost.

### Read-it-later mostly goes unread

- Pocket's founder put the eventual read rate at about half, with a range of 10 to 70% by source. One Pocket analysis found 80% of reads happen within 35 days of saving ([BuzzFeed, 2013](https://www.buzzfeednews.com/article/jwherrman/heres-when-people-actually-read-later)). After a month, an unread item is probably dead.

- History drove 0.2% of page requests in [Obendorf et al.](https://vsis-www.informatik.uni-hamburg.de/getDoc.php/publications/280/chi2007-newformat.pdf) (CHI 2007), which found history and bookmarks unreliable for long-term rediscovery.

- [Pocket shut down](https://9to5mac.com/2025/05/22/mozilla-announces-shutdown-of-pocket/) in July 2025. I found no rigorous study of save versus read rates; the evidence is vendor anecdotes plus older bookmark research.

### Ranking for reflective rather than revealed preferences

- The theory: [Kleinberg, Mullainathan & Raghavan](https://arxiv.org/abs/2202.11776v3) show that when in-the-moment choices diverge from what users want on reflection, engagement can rise while welfare falls. A model trained purely on someone's clicks inherits that problem. This is the core tension in a personal surfing model used as a feed.

- Measured on Twitter: in [Milli et al.](https://arxiv.org/html/2305.16941v6) (n=806), engagement ranking amplified anger, and users preferred a timeline ranked by their stated preferences. A [companion paper](https://arxiv.org/abs/2305.17428) gives a recipe: weight each behavioral signal by how faithfully it reflects value.

- LLMs scoring against a written rubric work. In [Jia, Bernstein et al.](https://arxiv.org/html/2307.13912v3) (CSCW 2024), zero-shot GPT-4 scores matched human coders at ρ=0.75, and reranking moved attitudes with no loss of engagement. The [Prosocial Ranking Challenge](https://arxiv.org/html/2603.19626v1) (2026, n=9,386 over 6 months) found real-world effects were small.

- [BONSAI](https://arxiv.org/html/2509.10776v1) (2025) is nearest to the ought-feed idea. Users describe a Bluesky feed in plain language, and an LLM scores each post 0 to 10 against that intent. Users said it separated engagement from intent. But 5 of 15 stopped maintaining their intents, and users wanted to see why each item was shown.

- [Readwise Reader](https://readwise.io/reader/update-aug2026) now has a "Triage my inbox" skill and an MCP server, but triage runs only on request and does not rank by goal.

### Designing for "please distract me"

- Intent Assistant ([Choi et al., CHI 2026](https://arxiv.org/html/2510.14513v3)) is the best evidence for an LLM as a commitment device. The user states an intention and the LLM asks up to two clarifying questions. Gemini Flash then scores each screenshot and URL every 2 seconds and sends gentle nudges the user can dismiss.

  - Over a 3-week study (n=22), off-task time fell to 10.4%, versus 16.6% with a timed reminder.

  - Clarifying the intention gave the biggest accuracy gain. Stating an intention with no AI at all already beat logging alone.

- Friction works but wears thin. In one sec logs (Haliburton et al., [CHI 2024](https://www.medien.ifi.lmu.de/pubdb/publications/pub/haliburton2024chi/haliburton2024chi.pdf)), app-open attempts fell mostly in the first 3 weeks, and users called hard friction tiring.

- Don't ban leisure. In [Lukoff et al.](https://arxiv.org/pdf/2101.11778) (CHI 2021), users with a specific goal wanted control, while users who were unwinding were happy to let the app lead. A recommender should first decide whether to recommend at all, then what.

### Design principles that follow

1.  Start each session from a stated, clarified intention and rank against it. Treat history as noisy evidence, never the objective.

2.  Make letting go safe. Archive aggressively but keep everything searchable, resurface by relevance to the current intention, and show why each item appears.

3.  Answer the distraction impulse with a redirect, not a block. Detect or ask the mode. In "focus" mode, offer the one or two items that serve the goal. In "unwind" mode, offer explicit, guilt-free leisure. Learn from dismissals.

## 7. Prototype options

Start with 1 and 2 together on one weekend. The ought-triage feed is useful on day one, and the logger starts collecting the labels that every later option needs. Options 3 to 5 build on that data.

| \#  | Prototype                                         | Effort                         | Needs                         |
|-----|---------------------------------------------------|--------------------------------|-------------------------------|
| 1   | Ought tab triage and feed                         | 1 to 2 days                    | A goals file, the open tabs   |
| 2   | History archive and tab logger                    | 1 weekend, then runs passively | Nothing, starts the clock     |
| 3   | Personal ranker as an MCP tool for research agents | 1 to 2 weeks                  | 4 to 8 weeks of data from 2   |
| 4   | "View as Gwern" (and others)                      | About 1 week                   | Scraped public link data      |
| 5   | LoRA-trained personal reranker                    | 2 to 4 weeks                   | A few hundred pairwise labels |

### 7.1 Ought tab triage and feed (weekend hack)

This tests the ought-feed idea directly.

- **What it does.**

  - A script or extension reads the open tabs, using URL, title and, where cheap, page text.

  - A local LLM scores each tab 0 to 10 against a `GOALS.md` kept in the user's notes plus a one-line "right now I'm working on" intention.

  - It returns three lists: "now" (top 3 that serve the intention), "archive" (stale or off-goal, closed into a searchable archive so nothing is lost), and one deliberate "unwind" pick.

  - A new-tab page shows the feed and asks "focus or unwind?" before showing anything.

- **Stack.**

  - Firefox `recovery.jsonlz4` or a small WebExtension.

  - A 7 to 8B instruct model on a single 24 GB consumer GPU through vLLM or Ollama.

  - Archive to markdown notes or to SQLite.

  - Shuffle candidates and score in small batches to dodge LLM position bias.

- **Plugs in.** A coding agent or a scheduled agent run can do a nightly triage pass and write the result into the notes.

- **Risks.** The goals file goes stale: BONSAI users stopped maintaining their intents. Mitigate by asking for the intention fresh each session, which Intent Assistant found was the biggest win. Show a one-line reason per item.

### 7.2 History archive and tab logger (do now)

The history behind 3 to 5 disappears if nobody starts archiving it.

- **What it does.**

  - Cron-copies the Chrome `History` database (including `context_annotations`) and Firefox `places.sqlite` to a self-hosted machine, or uses Promnesia.

  - Turns on Firefox's `browser.places.interactions.enabled`.

  - Adds a roughly 100-line extension that logs tab created, activated, closed and foreground time to a local endpoint.

- **Output.** One SQLite table of visits joined with labels: dwell normalized per domain, revisited within 30 days, bookmarked or saved to notes, tab closed unread.

- **Risks.**

  - Label noise: tabs are kept out of fear, and dwell favors long pages.

  - It is among the most sensitive datasets a person owns. Keep it on local hardware, strip query strings, and drop sensitive domains at ingest.

### 7.3 Personal ranker as an MCP tool for research agents

This is the personal surfing model in its most useful form.

- **What it does.** An MCP tool `rank_links(task, candidates)` returns candidates ordered by how likely the user is to endorse them, each with a reason. A coding-agent research run calls it before choosing which result to open next.

- **Stack.**

  - Stage 1: a local embedding model, plus LightGBM or logistic regression trained on the labels from 2.

  - Stage 2: an LLM rerank of the top-k against a `PRINCIPAL.md` (an LLM-generated profile of the user's interests and source preferences, edited by hand) and the agent's task.

  - Only the profile and candidate titles ever reach a hosted model.

- **Evaluation.**

  - A time-split offline test: do links later revisited or saved rank above links closed unread?

  - Then an A/B test of research reports with and without the ranker, graded blind by the user.

- **Risks.** It learns habits, including distraction clicks. Keep the "is" score and the "ought" rerank separate and visible.

### 7.4 "View as Gwern" (and others)

This tests the sharing idea cheaply.

- **What it does.** It scrapes Gwern's link bibliographies, annotations, tags and newsletters, and embeds them. It generates a Gwern `PRINCIPAL.md` and exposes `rank_as(person, topic, candidates)`. A side panel shows the user's ranking against his on the same search results, flagging what he would surface and what he would skip.

- **Shortcut.** Before scraping, check whether [Knowledge](https://knowledge-web.org)'s MCP server already covers the people of interest.

- **Risks.**

  - The data shows curation, not browsing, and has no negatives.

  - Scrape politely: his robots.txt blocks some fetchers.

  - A model of a named person deserves care in how it is labeled and shared.

### 7.5 LoRA-trained personal reranker

This is the Guardian Angel route, applied to links.

- **What it does.**

  - Collects pairwise judgments ("which of these two would you rather read now, given X?") through the feed in 1 and the agent loop in 3. Dismissals and corrections count as labels too.

  - LoRA-tunes a 7 to 8B model on a single 24 GB consumer GPU once there are a few hundred pairs. TALLRec showed gains from under 100.

  - Optionally runs nightly dynamic-evaluation updates, as in Gwern's design.

- **Payoff.** A small, local model that ranks in the user's voice, including their source preferences, that can be versioned and, if they choose, published without the raw history.

- **Risks.**

  - Gains over option 3 may be small. PRISM-X found per-user tuning only marginally beat a pooled model.

  - Evaluating it takes the user's own time, since only they can grade it.

  - Worth building only once 3 shows the ranker is used.

## 8. Conclusion

A personal web surfing model is an open niche, but the obvious version, a generative model trained on one person's URL stream, is the wrong one: it would mostly learn habit, distraction included, and the resulting weights would be a privacy-sensitive fingerprint. The defensible design separates "is" from "ought". A local ranker on implicit labels (normalized dwell, revisits, saves, tabs closed unread) captures what the person actually reads; an editable natural-language profile and a per-session intention, applied by an LLM rerank, capture what they want to read. Sharing follows the same logic and should be built from public curation, as Knowledge and Gwern's annotated link database show. The cheapest test is a weekend ought-triage feed over open tabs, started alongside a history archive and tab logger, because every later option, from a ranking MCP tool for research agents to a LoRA reranker, depends on labels that only accumulate once logging begins.

## 9. Sources

All pages below were read by the research passes, except where the text says a figure came from a secondary source. Three items are dated 2026 and were read but not independently re-verified: Intent Assistant, Compass and the Prosocial Ranking Challenge. Chang et al. (CHI 2021) figures come from CMU's write-up and ScienceAlert because the paper would not load.

- [Knowledge: public per-person link libraries](https://knowledge-web.org)
- [Gwern, Guardian Angels](https://gwern.net/guardian-angel)
- [Screencasts could be scalable data and evals for single-user emulation (LessWrong, 2026)](https://www.lesswrong.com/posts/NwrbrHmkDuKPXgLFb/screencasts-could-be-scalable-data-evals-for-single-user)
- [Gwern, virtual LessWrong comments (2024)](https://gwern.net/blog/2024-virtual-comments)
- [Fu & Pirolli, SNIF-ACT (2007)](https://apps.dtic.mil/sti/html/tr/ADA462156/index.html)
- [West & Leskovec, human wayfinding in information networks (WWW 2012)](https://archives.iw3c2.org/www2012/proceedings/proceedings/p619.pdf)
- [Gellert, web page prediction with Markov and PPM models (2021 preprint)](https://webspace.ulbsibiu.ro/arpad.gellert/html/NN_Web_Pred_v9_JWE_preprint.pdf)
- [GoWeB: next-page prediction on Edge logs](https://arxiv.org/pdf/2108.03350)
- [Google, how machine learning improved Chrome (2024)](https://blog.google/chromium/how-machine-learning-improved-chrome/)
- [Chrome Topics API](https://privacysandbox.google.com/private-advertising/topics/web)
- [blink-dev: Topics API removal thread](https://groups.google.com/a/chromium.org/g/blink-dev/c/_R85yctz4Rs/m/CkQpJil0AQAJ)
- [GRU4Rec: session-based recommendations with RNNs](https://arxiv.org/pdf/1511.06939)
- [SASRec vs BERT4Rec replicability study](https://arxiv.org/pdf/2207.07483)
- [HSTU: trillion-parameter sequential transducers (ICML 2024)](https://proceedings.mlr.press/v235/zhai24a.html)
- [TIGER: generative retrieval for recommender systems (NeurIPS 2023)](https://proceedings.neurips.cc/paper/2023/hash/20dcab0f14046a5c6b02b61da9f13229-Abstract.html)
- [TALLRec](https://arxiv.org/abs/2305.00447)
- [LLaRA](https://arxiv.org/html/2312.02445v4)
- [USER-LLM (Google Research blog)](https://research.google/blog/user-llm-efficient-llm-contextualization-with-user-embeddings/)
- [ONCE: LLM-boosted content-based recommendation](https://ar5iv.arxiv.org/html/2305.06566)
- [MIND news recommendation dataset](https://www.microsoft.com/en-us/research/?p=676704)
- [EB-NeRD news dataset](https://arxiv.org/pdf/2410.03432)
- [WebShop](https://arxiv.org/abs/2207.01206v2)
- [Mind2Web](https://arxiv.org/abs/2306.06070v1)
- [WebArena](https://arxiv.org/abs/2307.13854v4)
- [WebLINX (ICML 2024)](https://proceedings.mlr.press/v235/lu24e.html)
- [Online-Mind2Web](https://arxiv.org/abs/2504.01382v1)
- [OPeRA: real-user shopping browsing dataset (2025)](https://arxiv.org/pdf/2506.05606)
- [Lu et al., simulating real users' web shopping](https://arxiv.org/html/2503.20749v7)
- [LaMP: personalized LLM benchmark](https://arxiv.org/abs/2304.11406v4)
- [PRISM alignment dataset](https://arxiv.org/pdf/2404.16019)
- [Park et al., generative agent simulations of 1,000 people](https://arxiv.org/abs/2411.10109v1)
- [PRISM-X (2026)](https://arxiv.org/pdf/2605.13307)
- [PersonalWAB](https://arxiv.org/html/2410.17236v2)
- [Persona2Web (2026)](https://arxiv.org/html/2602.17003v1)
- [Brank et al., predicting per-user browsing trails (MSR 2004)](https://www.microsoft.com/en-us/research/wp-content/uploads/2004/11/tr-2004-122.pdf)
- [Lettkeman et al., predicting task-specific webpages for revisiting (AAAI 2006)](https://mlanthology.org/aaai/2006/lettkeman2006aaai-predicting)
- [Compass: realigning short-video feeds to reflective preferences (2026)](https://arxiv.org/abs/2608.04274)
- [SANS, Google Chrome forensics](https://www.sans.org/blog/google-chrome-forensics)
- [Chromium visit annotations database source](https://chromium.googlesource.com/chromium/src/+/HEAD/components/history/core/browser/visit_annotations_database.cc)
- [Firefox Interactions.sys.mjs source](https://arai.searchfox.org/firefox-main/source/browser/components/places/Interactions.sys.mjs)
- [Decoding Firefox session store data](https://blog.dend.ro/decoding-firefox-session-store-data/)
- [snss crate: Chrome SNSS session files](https://docs.rs/crate/snss/0.1.1)
- [chrome.tabs extension API](https://developer.chrome.com/docs/extensions/reference/api/tabs/)
- [Promnesia](https://beepb00p.xyz/exobrain/projects/promnesia.html)
- [ActivityWatch web watcher add-on](https://addons.mozilla.org/firefox/addon/aw-watcher-web/)
- [ArchiveBox](https://docs.archivebox.io/v0.4.20/README.html)
- [Screenpipe](https://screenpipe.com/about)
- [Dwell time normalization for implicit feedback](https://ar5iv.labs.arxiv.org/html/2209.09000)
- [Radlinski et al., natural-language user profiles for transparent recommendation](https://arxiv.org/abs/2205.09403v1)
- [Ramos et al., LLM-written user profiles (ACL 2024)](https://arxiv.org/abs/2402.05810v2)
- [LFM: short user profiles for pairwise preference](https://arxiv.org/pdf/2402.15623)
- [LUNAR: retrieval of past records for personalization (2026)](https://arxiv.org/html/2608.05246v2)
- [Hou et al., LLMs are zero-shot rankers for recommender systems](https://arxiv.org/abs/2305.08845v2)
- [Ji et al., data leakage in recommender evaluation](https://arxiv.org/abs/2010.11060v4)
- [Mozilla Foundation, uniqueness and re-identifiability of browsing histories](https://www.mozillafoundation.org/en/research/library/why-we-still-cant-browse-in-peace-on-the-uniqueness-and-reidentifiability-of-web-browsing-histories/)
- [IMDEA, sensitive and tracked content across a billion URLs](https://networks.imdea.org/over-150-million-websites-among-a-billion-tested-include-sensitive-and-tracked-content/)
- [Anthropic API data retention policy](https://privacy.claude.com/en/articles/7996866-how-long-does-anthropic-store-my-organizations-data)
- [Anthropic, updates to consumer terms](https://www.anthropic.com/news/updates-to-our-consumer-terms)
- [Memex (Wikipedia; Bush, "As We May Think")](https://en.wikipedia.org/wiki/Memex)
- [Knowledge README](https://raw.githubusercontent.com/raphaelsty/knowledge/main/README.md)
- [Are.na API](https://www.are.na/developers/explore)
- [Hypothesis, viewing and exporting annotations](https://web.hypothes.is/blog/viewing-and-exporting-hypothesis-annotations/)
- [Memex by WorldBrain add-on](https://addons.mozilla.org/firefox/addon/worldbrain/)
- [Histre, why](https://histre.com/blog/why/)
- [RecAgent](https://arxiv.org/abs/2306.02552v3)
- [Agent4Rec (SIGIR 2024)](https://arxiv.org/abs/2310.10108v3)
- [USimAgent](https://arxiv.org/pdf/2403.09142)
- [GUM: general user models from screen activity (2025)](https://arxiv.org/html/2505.10831v1)
- [TwinVoice (2025)](https://arxiv.org/html/2510.25536)
- [gwern.net build code: GTX.hs](https://gwern.net/static/build/GTX.hs)
- [gwern.net build code: GenerateSimilar.hs](https://gwern.net/static/build/GenerateSimilar.hs)
- [Gwern newsletter, November 2022](https://gwern.net/newsletter/2022/11)
- [gwern.net repository](https://github.com/gwern/gwern.net)
- [CMU, overcoming tab overload (on Chang et al., CHI 2021)](https://www.scs.cmu.edu/news/2021/overcoming-tab-overload)
- [ScienceAlert, tab overload survey](https://www.sciencealert.com/tab-overload-is-a-common-problem-for-people-browsing-the-internet-survey-finds)
- [Dubroy & Balakrishnan, tabbed browsing study (CHI 2010)](https://www.dgp.toronto.edu/public_user/ravin/papers/chi2010_tabbedbrowsing.pdf)
- [Tabs.do (UIST 2021)](https://par.nsf.gov/servlets/purl/10358962)
- [Arc, archived tabs help article](https://resources.arc.net/hc/en-us/articles/19228855311127)
- [BuzzFeed, when people actually read later (2013)](https://www.buzzfeednews.com/article/jwherrman/heres-when-people-actually-read-later)
- [Obendorf et al., web page revisitation revisited (CHI 2007)](https://vsis-www.informatik.uni-hamburg.de/getDoc.php/publications/280/chi2007-newformat.pdf)
- [9to5Mac, Mozilla announces Pocket shutdown](https://9to5mac.com/2025/05/22/mozilla-announces-shutdown-of-pocket/)
- [Kleinberg, Mullainathan & Raghavan, the challenge of understanding what users want](https://arxiv.org/abs/2202.11776v3)
- [Milli et al., engagement, user satisfaction and divisive content on Twitter](https://arxiv.org/html/2305.16941v6)
- [Milli et al., choosing the right weights for behavioral signals](https://arxiv.org/abs/2305.17428)
- [Jia, Bernstein et al., embedding societal values into social media feeds (CSCW 2024)](https://arxiv.org/html/2307.13912v3)
- [Prosocial Ranking Challenge results (2026)](https://arxiv.org/html/2603.19626v1)
- [BONSAI: intent-specified Bluesky feeds (2025)](https://arxiv.org/html/2509.10776v1)
- [Readwise Reader, August 2026 update](https://readwise.io/reader/update-aug2026)
- [Choi et al., Intent Assistant (CHI 2026)](https://arxiv.org/html/2510.14513v3)
- [Haliburton et al., one sec friction study (CHI 2024)](https://www.medien.ifi.lmu.de/pubdb/publications/pub/haliburton2024chi/haliburton2024chi.pdf)
- [Lukoff et al., designing for user agency on YouTube (CHI 2021)](https://arxiv.org/pdf/2101.11778)

---

Text licensed CC BY 4.0 (attribution: Hiina, ai.hiina.space). Source: https://github.com/hiinaspace/ai-hiina-space
