| name | eigenfeed.reflect |
| description | Generate salient questions from topics, use them to create search queries and discover new topics. Used by /eigenfeed and /coldstart, also invocable directly. |
| allowed-tools | Read, Write, Glob, Bash(*) |
Reflect
Inspired by the Stanford Smallville generative agents reflection mechanism. This skill does three things:
- Generate salient questions the user is trying to answer right now
- Feed back into memory — questions may reveal new topics to add to the vault
- Maintain the topic graph — decay stale topics, merge convergent ones
Prerequisites
Read the vault state:
vault/profile.md — for anti-preferences and curiosity edges
vault/topics/*.md — the interest graph (both active and expired — pay attention to Sources sections for recency signals)
vault/questions/*.md — existing questions (both active and expired — useful for seeing what's already been asked)
Step 1: Generate salient questions
Look across all active topics — especially their Sources sections — and the profile's curiosity edges. Also glance at expired topics and questions for context (what used to matter, what's been asked before).
Ask: "What are the 3-5 most important questions this reader is trying to answer right now?"
Guidelines:
- Questions should capture the edge of understanding — what the user doesn't know yet, not what they already know
- Questions should be specific and answerable by a blog post, not vague philosophical musings
- Questions can bridge topics — a good question often spans two interests
- Draw on recency signals in Sources: if a topic mentions "studying RLMs this week", the question should be about what's unresolved about RLMs for this reader
- Draw on curiosity edges: these are explicitly identified intersections worth exploring
- A new active question can link to expired questions or topics — this is the most interesting part of the graph, showing how curiosity evolves
Examples of good questions:
- "How do Recursive Language Models compare to ReAct for tasks requiring long-context reasoning?" (bridges ai-agents + llm-internals)
- "Are there open-source implementations of MCP servers that serve domain-specific public knowledge?" (bridges context-engineering + personal-computing)
- "What does a recommendation algorithm look like when you have rich taste data but no collaborative filtering?" (bridges personal-computing + ml-engineering)
Step 1b: Write question nodes to the vault
First, mark all currently active questions as expired:
For each active question file in vault/questions/, update its frontmatter: set status: expired and change tags from [question, active] to [question, expired].
Then write new question files. For each salient question, write vault/questions/<slug>.md:
---
type: question
status: active
tags: [question, active]
created: YYYY-MM-DD
---
# <The question>
## Related Topics
- [[topics/<slug>]] — why this topic is relevant to the question
## Related Questions
- [[questions/<expired-slug>]] — how this builds on or diverges from a previous question
The Related Questions section links to expired questions when relevant — showing how curiosity evolves over time. Only include these links when there's a genuine connection (e.g., a new question refines, extends, or pivots from an old one).
Step 2: Generate search queries from questions
Turn each question into 1-2 specific web search queries designed to find practitioner-voice content.
Guidelines:
- Target independent blogs. Add terms like "blog", "personal site", "build log" to steer away from corporate content.
- Respect anti-preferences. Skip directions that would surface listicles, hype, or marketing.
- Vary across runs. If you can tell from Sources what was recently explored, try a different angle.
Step 3: Discover new topics (feedback loop)
Review the salient questions. If a question reveals a sub-interest or intersection that has no topic yet, create a new topic file in vault/topics/.
For example, if the question "What does recommendation look like without collaborative filtering?" keeps surfacing, and there's no topics/recommendation-systems.md, create one.
New topic format:
---
type: topic
status: active
tags: [topic, active]
interest_level: medium
updated: YYYY-MM-DD
---
# Topic Name
<1-2 sentence description>
## Sources
- <source>: <detail>
## Related Topics
- [[topics/<slug>]] — how they relate
This is the feedback loop: reflection generates questions → questions reveal gaps in the topic graph → new topics get added → future reflections are richer.
Guidelines:
- Only create a topic if it has support from multiple sources or is clearly an active interest
- Set new topics to
medium interest by default — the user can promote them later
- Link new topics to existing ones in Related Topics
Step 4: Topic maintenance (decay + merge)
After generating questions and discovering new topics, review the full topic graph for cleanup.
Decay
Check each active topic's updated date and Sources section. A topic should be marked expired if:
- Its
updated date is older than 4 weeks AND
- It has no recent source activity (no notes, no reading behavior, no browser visits in the lookback window) AND
- It wasn't referenced by any salient question in this run
To expire a topic: update its frontmatter — set status: expired and change tags from [topic, active] to [topic, expired]. Do not delete or move the file. It stays in vault/topics/ and remains visible in the full graph.
If a future reflect run generates a question that relates to an expired topic, reactivate it: set status: active and tags back to [topic, active].
Merge
Two topics should be merged if:
- They always co-occur — the same Sources, same salient questions, same candidates reference both
- One is a subset of the other
- They have nearly identical Related Topics
To merge: combine the Sources and Related Topics into the broader topic, and expire the narrower one. The expired topic's backlinks remain, showing the merge history in the graph.
Guidelines:
- Be conservative — only merge when the overlap is clear
- Don't expire high-interest topics unless they've truly gone cold
- Don't merge topics that the user might want to distinguish (when in doubt, don't merge)
- Report all changes so the user can undo if needed
Output
Return:
- The salient questions (3-5)
- Search queries derived from them (5-8 total), each annotated with target topics
- Any new topics created (with brief justification)
- Any topics expired or merged (with justification)
- Any expired topics or questions reactivated
Questions:
1. "How do RLMs compare to ReAct for long-context reasoning?" → [[topics/ai-agents]], [[topics/llm-internals]]
2. "What does personal recommendation look like without platform data?" → [[topics/personal-computing]], [[topics/ml-engineering]]
3. ...
Search queries:
- "recursive language model vs ReAct long context blog 2026" → Q1
- "personal recommendation algorithm no collaborative filtering blog" → Q2
- ...
New topics created:
- topics/recommendation-systems.md (active, medium) — supported by eigenfeed project and ml-engineering background
Topics expired:
- topics/language-learning.md (no source activity in 6 weeks, no salient questions)
Topics reactivated:
- (none this run)