Index of everything on this site: https://ai.hiina.space/index.md
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 |
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.
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.
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.
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'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.
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