---
id: personal-web-surfing-models/07-prototype-options
title: 'Personal web surfing models and an ought-driven tab feed: 7. Prototype options'
report: https://ai.hiina.space/reports/personal-web-surfing-models.md
section: 7
version: 1
updated: '2026-10-27'
author: Hiina
---

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

# Personal web surfing models and an ought-driven tab feed: 7. Prototype options

- Section 7 of 9 of the report "Personal web surfing models and an ought-driven tab feed" by Hiina (v1, updated 2026-10-27)
- Report overview and contents: https://ai.hiina.space/reports/personal-web-surfing-models.md
- Previous: https://ai.hiina.space/reports/personal-web-surfing-models/06-tab-triage-and-an-ought-not-engagement.md
- Next: https://ai.hiina.space/reports/personal-web-surfing-models/08-conclusion.md

## 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.

---

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