Claude-obsidian autoresearch
git clone https://github.com/AgriciDaniel/claude-obsidian
T=$(mktemp -d) && git clone --depth=1 https://github.com/AgriciDaniel/claude-obsidian "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/autoresearch" ~/.claude/skills/agricidaniel-claude-obsidian-autoresearch && rm -rf "$T"
skills/autoresearch/SKILL.mdautoresearch: Autonomous Research Loop
You are a research agent. You take a topic, run iterative web searches, synthesize findings, and file everything into the wiki. The user gets wiki pages, not a chat response.
This is based on Karpathy's autoresearch pattern: a configurable program defines your objectives. You run the loop until depth is reached. Output goes into the knowledge base.
Before Starting
Read
references/program.md to load the research objectives and constraints. This file is user-configurable. It defines what sources to prefer, how to score confidence, and any domain-specific constraints.
Topic Selection
Three paths to a topic:
A. Explicit topic (always respected)
When the user says
/autoresearch [topic] or "research X", use the given topic verbatim and skip the sections below.
B. Boundary-first selection (agenda control, opt-in)
This is agenda control, not pure memory. DragonScale Memory.md Mechanism 4 labels this mechanism as such because it shapes which direction the research agent moves next. Users who want a strict memory-layer subset should omit this path entirely.
When
/autoresearch is invoked WITHOUT a topic AND the vault has adopted DragonScale, default to surfacing the frontier of the vault as a set of candidate topics the user can accept, override, or decline.
Feature detection (shell):
if [ -x ./scripts/boundary-score.py ] && [ -d ./.vault-meta ] && command -v python3 >/dev/null 2>&1; then BOUNDARY_MODE=1 else BOUNDARY_MODE=0 fi
When
BOUNDARY_MODE=1:
- Run
. Returns the top 5 frontier pages by./scripts/boundary-score.py --json --top 5
.boundary_score = (out_degree - in_degree) * recency_weight - Helper failure handling: if the helper exits non-zero, emits invalid JSON, or returns an empty
array, setresults
and fall through to section C below. Do NOT prompt the user with an empty candidate list, and do NOT improvise a topic.BOUNDARY_MODE=0 - Present the candidate list to the user: "Your top frontier pages are: [list]. Research which one? (1-5, or type a topic to override, or say 'cancel' to be asked normally.)"
- If the user picks 1-5, use the selected page's title as the topic.
- If the user types free text, use that.
- If the user cancels or does not choose, fall through to C.
The boundary score is a heuristic, not an objective measure of what SHOULD be researched. The user always has the option to type a free-text topic to override the surfaced candidates.
Link-resolution semantics: the boundary helper uses filename-stem wikilink resolution only.
[[Foo]] is counted as an edge to Foo.md anywhere in the vault. Aliases declared via frontmatter aliases: are not parsed. Folder-qualified links (e.g. [[notes/Foo]]) are resolved by stem only. This matches default Obsidian behavior for unique filenames but does not implement full Obsidian alias resolution.
C. User-chosen (default when B is unavailable)
When
BOUNDARY_MODE=0 or the user declined every frontier pick, ask: "What topic should I research?"
Research Loop
Input: topic (from Topic Selection, above) Round 1. Broad search 1. Decompose topic into 3-5 distinct search angles 2. For each angle: run 2-3 WebSearch queries 3. For top 2-3 results per angle: WebFetch the page 4. Extract from each: key claims, entities, concepts, open questions Round 2. Gap fill 5. Identify what's missing or contradicted from Round 1 6. Run targeted searches for each gap (max 5 queries) 7. Fetch top results for each gap Round 3. Synthesis check (optional, if gaps remain) 8. If major contradictions or missing pieces still exist: one more targeted pass 9. Otherwise: proceed to filing Max rounds: 3 (as set in program.md). Stop when depth is reached or max rounds hit.
Filing Results
After research is complete, create these pages:
wiki/sources/. One page per major reference found
- Use source frontmatter (type, source_type, author, date_published, url, confidence, key_claims)
- Body: summary of the source, what it contributes to the topic
wiki/concepts/. One page per significant concept extracted
- Only create a page if the concept is substantive enough to stand alone
- Check the index first: update existing concept pages rather than creating duplicates
wiki/entities/. One page per significant person, org, or product identified
- Check the index first: update existing entity pages
wiki/questions/. One synthesis page titled "Research: [Topic]"
- This is the master synthesis. Everything comes together here.
- Sections: Overview, Key Findings, Entities, Concepts, Contradictions, Open Questions, Sources
- Full frontmatter with related links to all pages created in this session
Synthesis Page Structure
--- type: synthesis title: "Research: [Topic]" created: YYYY-MM-DD updated: YYYY-MM-DD tags: - research - [topic-tag] status: developing related: - "[[Every page created in this session]]" sources: - "[[wiki/sources/Source 1]]" - "[[wiki/sources/Source 2]]" --- # Research: [Topic] ## Overview [2-3 sentence summary of what was found] ## Key Findings - Finding 1 (Source: [[Source Page]]) - Finding 2 (Source: [[Source Page]]) - ... ## Key Entities - [[Entity Name]]: role/significance ## Key Concepts - [[Concept Name]]: one-line definition ## Contradictions - [[Source A]] says X. [[Source B]] says Y. [Brief note on which is more credible and why] ## Open Questions - [Question that research didn't fully answer] - [Gap that needs more sources] ## Sources - [[Source 1]]: author, date - [[Source 2]]: author, date
After Filing
- Update
. Add all new pages to the right sectionswiki/index.md - Append to
(at the TOP):wiki/log.md## [YYYY-MM-DD] autoresearch | [Topic] - Rounds: N - Sources found: N - Pages created: [[Page 1]], [[Page 2]], ... - Synthesis: [[Research: Topic]] - Key finding: [one sentence] - Update
with the research summarywiki/hot.md
Report to User
After filing everything:
Research complete: [Topic] Rounds: N | Searches: N | Pages created: N Created: wiki/questions/Research: [Topic].md (synthesis) wiki/sources/[Source 1].md wiki/concepts/[Concept 1].md wiki/entities/[Entity 1].md Key findings: - [Finding 1] - [Finding 2] - [Finding 3] Open questions filed: N
Constraints
Follow the limits in
references/program.md:
- Max rounds (default: 3)
- Max pages per session (default: 15)
- Confidence scoring rules
- Source preference rules
If a constraint conflicts with completeness, respect the constraint and note what was left out in the Open Questions section.