| name | eigenfeed.taste |
| description | Build or update taste profile and topics from configured sources. Used by /coldstart and /eigenfeed, also invocable directly. |
| allowed-tools | Agent, Bash(*), Read, Write, Glob, Grep |
Taste Profile Skill
Build or update the user's taste profile and topics from their configured sources.
Step 1: Read config and determine lookback
Read config.md to get:
sources — list of sources to scan
- The caller passes a
lookback_days value (coldstart uses coldstart_lookback_days, BAU uses lookback_days)
Step 2: Gather signals from each source
Sources are natural language descriptions in config. For each one, the agent figures out how to read it using its tools (Bash, Read, Glob, Grep). There are no fixed scripts — the agent discovers and extracts data directly.
mkdir -p tmp vault/signals
Guidance for common source types
RSS reader (e.g., "NetNewsWire feeds and reading behavior", "Miniflux subscriptions"):
- Search for OPML files or the reader's database on the local filesystem
- Extract: feed subscriptions (titles, URLs, categories), reading behavior (read counts, starred/favorited articles)
Personal notes (e.g., "Personal notes: ~/my-vault"):
- Parse the path from the source description
- Find recently edited notes within
lookback_days:
- If the path is a git repo:
git -C <path> log --diff-filter=AM --since="<lookback_days> days ago" --name-only
- Otherwise:
find <path> -name "*.md" -mtime -<days>
- Read recent files (first 100 lines each, skip files over 500 lines)
- Extract: concepts, themes, active projects, open questions
Browser history (e.g., "Chrome browsing history"):
- Find the browser's history database on the local filesystem
- Important: Copy the DB to
tmp/ before querying — browsers lock the file while running
- Query for recently visited URLs within
lookback_days, filtering for content-rich domains (skip search engines, social media feeds, internal tools)
- Extract: frequently visited domains, article URLs, topics the user has been reading about
Other sources: Attempt to discover and read. If unclear, ask the user for guidance.
Write signal files to the vault
After gathering signals from each source, write a signal file to vault/signals/<date>-<source-slug>.md:
---
type: signal
source: <source-slug>
tags: [signal]
captured: YYYY-MM-DD
---
# <Source Name> Signals — YYYY-MM-DD
<the full signal extraction: articles read, themes, engagement data, etc.>
Use a short slug derived from the source (e.g., netnewswire, notes, chrome). Signal files are point-in-time snapshots — never overwrite previous ones.
Step 3: Generate or update profile.md
vault/profile.md is a slim document covering only meta-preferences that don't belong in any single topic:
---
type: taste-profile
tags: [profile]
updated: YYYY-MM-DD
---
# Taste Profile
<2-3 sentence summary of this reader>
## Writing Style Preferences
- **Information density**: high | medium | low
- **Tone**: technical, conversational, etc.
- **Format preferences**: long-form essays, tutorials, etc.
- **Language**: which languages they read in
## Anti-Preferences
Things to avoid recommending:
- item
- item
## Curiosity Edges
Intersections between topics that could yield serendipitous finds:
- edge description
- edge description
All interest/topic data goes in topic files, NOT in the profile.
Step 4: Generate or update topic files
mkdir -p vault/topics
For each topic identified from ALL sources, create or update vault/topics/<slug>.md:
---
type: topic
status: active
tags: [topic, active]
interest_level: high | medium | low
updated: YYYY-MM-DD
---
# Topic Name
<1-2 sentence description of this topic and why it matters to the user>
## Sources
- <source name>: <detail> — what this contributes (engagement signals, starred articles, etc.)
## Related Topics
- [[topics/<other-slug>]] — how they relate
The tags field enables Obsidian graph coloring (active topics vs expired topics are different colors).
Guidelines:
- Keep sources and topics separate. Sources contribute evidence to topics, listed as provenance text — not as linked nodes.
- Be specific. Don't say "technology" — say "distributed systems, specifically consensus algorithms and CRDTs".
- Look for engagement signals (starred, frequently visited, heavily read) to distinguish active vs passive interests.
- Notes and browser history surface active interests that may not appear in RSS subscriptions.
- Use subagents to write topic files in parallel if there are many.
Step 5: Show summary
Show the user:
- Number of topics and how they connect
- Which sources had the strongest signals
- Curiosity edges identified
Ask if they'd like to adjust anything.