How to Use This Research Framework
This framework is a self-managing generative research platform — a combination of Obsidian, Hugo, and AI automation that continuously researches, writes, reviews, and improves content in your chosen domain. A human curator sets direction; the AI handles volume and consistency.
What This Framework Is
The framework has three layers:
- Content layer — Obsidian vault (
obsidian/) — where all articles live as Markdown files - Presentation layer — Hugo static site (
hugo/) — converts the vault to a public website - Automation layer — Python scripts + Claude skills (
.claude/skills/) — the AI system that runs research, writing, and review cycles
The human role is to:
- Set the domain and its core commitments (foundational perspectives)
- Prioritise the task queue (
workflow/todo.md) - Review and approve drafts before they publish
- Tune the system when something isn’t working
Everything else — research, writing, reviewing, linking, condensing — the automation handles.
The Content Hierarchy
Research notes (obsidian/research/)
↓ research-topic skill generates these
Topics (obsidian/topics/) ← explorations of domain questions
Concepts (obsidian/concepts/) ← definitions of building blocks
Arguments (obsidian/arguments/) ← criticism and counterarguments
↓ expand-topic, deep-review skills develop these
Apex articles (obsidian/apex/) ← synthesis deliverables
Voids (obsidian/voids/) ← mapped limits of knowability
Research notes are raw AI-generated inputs — not published, used to queue expand-topic tasks.
Topics and concepts are the working content — regularly reviewed, improved, and cross-linked.
Arguments challenge the framework’s commitments — steel-manning opposing views.
Apex articles are the synthesis deliverables — curated, thesis-driven, polished.
Voids map the limits — what the domain cannot resolve and why.
The Automation Loop
The evolution loop (scripts/evolve_loop.py) runs continuously and picks tasks from a deterministic 24-slot cycle:
| Slots | Task type | What happens |
|---|---|---|
| 16 (67%) | Queue tasks | Picks from todo.md (P0–P2 priority) |
| 4 (17%) | Deep review | Comprehensive review of one article |
| 1 | Pessimistic review | Finds logical gaps and counterarguments |
| 1 | Optimistic review | Finds strengths and expansion opportunities |
| 1 | Coalesce | Combines related articles into one |
| 1 | Research voids | Maps domain limits |
Every N complete cycles, additional tasks run:
- Every 2 cycles: check-links (find broken internal links)
- Every 3 cycles: check-tenets (verify content aligns with commitments)
- Every 4 cycles: apex-evolve (create or refine synthesis articles)
- Every 6 cycles: tune-system (meta-review of automation performance)
Speed control is set by the --interval flag (seconds between sessions):
| Interval | Sessions/day |
|---|---|
--interval 600 | 144/day (fast, testing) |
--interval 2400 | 36/day (normal) |
--interval 14400 | 6/day (slow, low cost) |
Running the Framework Locally
# 1. Install dependencies
uv sync
# 2. Sync Obsidian vault to Hugo content
uv run python scripts/sync.py
# 3. Build the static site
uv run python scripts/build.py
# 4. Preview locally
cd hugo && hugo server
# 5. Run the automation loop (Ctrl+C to stop)
uv run python scripts/evolve_loop.py --interval 2400
# 6. Test with a single iteration
uv run python scripts/evolve_loop.py --max-iterations 1
# 7. Validate frontmatter
uv run python scripts/validate.py hugo/content/
The Task Queue
Human + AI collaboration happens through obsidian/workflow/todo.md.
Priority levels:
P0— urgent: blocking issues, broken contentP1— high: important improvements, gap-fillingP2— normal: standard content work (automation picks these)P3— low: nice to have, backlog
The automation loop picks tasks at P0–P2. When active tasks drop below 3, replenish-queue runs automatically to generate new tasks from:
- Unconsumed research notes awaiting articles
- Content gaps (concepts referenced but not defined)
- Stale AI-generated content (not reviewed in 30+ days)
- Orphaned files (no inbound links)
Task types:
| Type | What it does |
|---|---|
research-topic | Web research → research note → queues expand-topic |
expand-topic | Research note → publishable article in target section |
cross-review | Reviews new article in context of existing content |
refine-draft | Improves existing draft, fixes links, addresses review findings |
deep-review | Comprehensive single-document review |
condense | Reduces article length while preserving value |
integrate-orphan | Adds inbound links to orphaned files |
apex-evolve | Creates or updates synthesis articles |
The Skills (Slash Commands)
Skills are invoked by the automation loop or manually via /skill-name.
| Skill | Purpose | Modifies content? |
|---|---|---|
/validate-all | Daily health check | No |
/check-links | Find broken internal links | No |
/check-tenets | Verify content aligns with commitments | No |
/pessimistic-review | Find gaps and counterarguments | No |
/optimistic-review | Find strengths and opportunities | No |
/research-topic [topic] | Web research → research note | No |
/research-voids | Map domain limits | No |
/expand-topic [topic] | Generate new article | Yes |
/refine-draft [file] | Improve existing draft | Yes |
/deep-review [file] | Comprehensive review with improvements | Yes |
/condense [file] | Reduce article length | Yes |
/coalesce | Combine related articles | Yes |
/apex-evolve | Create/update synthesis articles | Yes |
/add-highlight | Feature content on highlights page | Yes |
/tune-system | Monthly meta-review of automation | Yes (minor) |
/outer-review | Commission external AI analysis | Yes |
/archive [file] | Archive article preserving URL | Yes |
Domain Configuration
The framework’s domain is configured in two places:
obsidian/tenets/tenets.md — the foundational commitments. Every article must relate to these. The /check-tenets skill verifies this alignment automatically.
obsidian/project/domain-config.yaml — machine-readable domain settings used by skills and the automation loop (section names, caps, author info). This file is generated by the intake wizard.
Reconfiguring for a New Domain
Run the intake wizard to configure the framework for a new research domain:
uv run python scripts/wizard.py
The wizard collects:
- Project name, description, and domain
- Author information
- Content section names and caps
- Domain commitments (equivalent to tenets)
- Audience and writing style
Then it generates all domain-specific files and patches the infrastructure files.
Deploying
The site is a standard Hugo static site deployable to Cloudflare Pages or Netlify.
Cloudflare Pages:
- Connect GitHub repo
- Build command:
uv run python scripts/build.py - Output directory:
hugo/public
Netlify:
- Connect GitHub repo
- Build command:
uv run python scripts/build.py - Publish directory:
hugo/public
The commit_obsidian.py script handles git authorship attribution (human vs AI edits):
# Preview what would be committed
uv run python scripts/commit_obsidian.py --dry-run
# Commit with correct authorship
uv run python scripts/commit_obsidian.py
Section Caps
To prevent runaway content generation, each section has a maximum article count configured in obsidian/workflow/evolution-state.yaml. When a section is full, automation shifts to improving existing content rather than creating new articles.
Default caps:
- Primary section (topics/explorations): 200
- Secondary section (concepts/patterns): 200
- Tertiary section (voids/gaps): 100
Adjust caps in evolution-state.yaml under section_caps.
Tagging Workflow
Tags provide a free, bottom-up vocabulary for content discovery. They are distinct from the controlled topics and concepts fields.
The Three Vocabulary Layers
| Field | Type | Purpose |
|---|---|---|
tags | Folksonomy (free) | Bottom-up themes; any author can add any tag |
concepts | Controlled | Defined terms that have their own article in obsidian/concepts/ |
topics | Controlled | Main subject areas that have their own article in obsidian/topics/ |
Tag Format
- Lowercase kebab-case only:
human-ai-collaboration, notHumanAIorHuman AI - 3–8 tags per article — prefer specificity over generality
- Tags are plural themes, not titles or sentences
When to Add Tags
- During
expand-topic— tag new articles at creation time - During
refine-draft— add missing tags when improving existing articles - During
deep-review— review and correct tags alongside content
The Harvest Path
Tags accumulate bottom-up. When a tag appears on 5+ articles, consider:
- Is there already a concept or topic article covering this theme?
- If not, add an
expand-topictask to create one - Once the article exists, add its slug to the
conceptsortopicsarray on relevant articles
This is how controlled vocabulary grows organically from actual usage rather than top-down design.
Further Reading
- AI Automation System — detailed automation documentation
- Human Supervision — the curator’s role and review protocols
- Writing Style Guide — how articles should be written
- Workflow — task queue and evolution loop details
- Domain Commitments — the foundational perspectives