Markdown version: https://ai.hiina.space/reports/personal-web-surfing-models/04-feasibility-of-a-personal-surfing-model-from.md ยท index

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

Personal web surfing models and an ought-driven tab feed: 4. Feasibility of a personal surfing model from browser history

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) Reportedly keeps about 90 days by default (secondary source), so start archiving now
Chrome context_annotations, content_annotations, clusters (Chromium source) 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) 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), Chrome SNSS (crate) Open tabs per window, back-stack per tab Snapshot it periodically to get "kept vs closed" labels
An extension using chrome.tabs (docs) 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 already merges browser databases and other sources into one local visits database. ActivityWatch's web watcher logs the active tab locally. ArchiveBox snapshots page content that can then be embedded. Screenpipe 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 (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 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:

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

Evaluation

Privacy


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