From thesis-engine
A research-feeder pipeline for vibe-thesis projects. Surfaces cutting-edge thesis topics, gathers primary sources, opposing positions, and methodological precedents via web search, and emits research notes + a BibTeX bibliography in vibe-thesis-shaped subdirectories ready to drop into ThesisStudio. Optional Stage 3 adapts a seeded topic into a Smart Brevity blog draft for BlogStudio. Use this skill whenever the user mentions "thesis engine", "topic discovery", "source gathering", "research feeder", "cutting-edge topics", "blog from thesis", "lit review feeder", or wants to seed a vibe-thesis project with topic candidates and starter research. Also trigger on "run the engine", "find me a topic", "what should I write about next", or "give me sources for X". This skill produces inputs for the vibe-thesis Thesis Template — it does not replace the drafting work that happens inside vibe-thesis.
How this skill is triggered — by the user, by Claude, or both
Slash command
/thesis-engine:thesis-engineThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
A three-stage engine: **Discover → Gather → (optional) Adapt**.
A three-stage engine: Discover → Gather → (optional) Adapt.
The engine's job is to do the cold-start work that's painful inside vibe-thesis: scanning the field for live topics, pulling primary sources and opposing positions, and shaping them into vibe-thesis-compatible notes and a BibTeX bibliography. The drafting itself stays inside vibe-thesis where the persona and citation pipeline live.
03_BODY/ chapter scaffolding plus the LeadWriter persona handle the actual drafting.05_CITATIONS/references.bib is a manual or scripted step.Goal: Surface 5 high-signal, low-competition thesis topics via web search.
Default domain is ai_ml. Honor explicit --domain arguments. Supported domains:
ai_ml — AI / Machine Learning (default)theater_ops — Theater Technology & Operationsfilm_exhibition — Film Distribution & Exhibitionspatial_xr — Spatial Computing / XRbehavioral_econ — Behavioral Economicsorg_behavior — Organizational Behaviordata_eng — Data EngineeringRun 3–5 web searches across these angles:
[domain] research breakthroughs 2025 2026
[domain] unsolved problems emerging trends
[domain] preprint arxiv notable 2025
[domain] industry disruption underreported
For each result cluster, extract:
Show a ranked table:
| # | Topic | Novelty | Thesis Potential | Relevance | Total |
|---|---|---|---|---|---|
| 1 | ... | 4 | 5 | 4 | 13 |
Ask the user to pick one, or auto-select the top scorer if --auto is passed.
Write the table to <run>/topics.md so it survives the session.
Goal: For the chosen topic, produce vibe-thesis-shaped research notes and a starter BibTeX bibliography.
thesis-engine-run-YYYYMMDD/
├── README.md (run summary + ingest instructions)
├── topics.md (Stage 1 ranking)
├── 01_PLANNING/
│ └── proposal.md (thesis proposal stub: what, why, scope)
├── 02_RESEARCH/
│ ├── prior-art/notes.md
│ ├── methodology-survey/notes.md
│ ├── opposing-positions/notes.md
│ ├── key-authors/notes.md
│ └── primary-sources/notes.md
└── 05_CITATIONS/
└── references.bib (BibTeX, Pandoc-ready)
The subdirectory names mirror the vibe-thesis Template exactly — drop them into C:\Users\estev\Projects\ThesisStudio\ and they merge cleanly. references.bib should be appended to the canonical 05_CITATIONS/references.bib (or replace it on a fresh project).
Run 5–8 targeted web searches structured by axis:
| Axis | Searches | Target output |
|---|---|---|
| Prior art | "[topic] literature review", "[topic] survey 2024 2025" | 3–5 sources |
| Methodology | "[topic] methodology", "how researchers measure [topic]" | 2–3 sources |
| Opposing | "[topic] critique", "[topic] limitations", "against [topic]" | 2–3 sources |
| Key authors | "[topic] researchers", "leading [topic] scholars" | 2–4 named authors |
| Primary | preprints, datasets, original papers | 2–3 sources |
For each source, capture:
authoryear style — e.g., smith2024)Each axis gets its own notes file with this template:
# [Axis Name] — [Topic]
## Summary
[2–3 sentence framing of what this axis tells us about the topic]
## Sources
### [@citation-key] — [Title]
- **Author(s)**: ...
- **Year**: ...
- **Venue**: ...
- **URL**: ...
- **Why it matters**: 2–3 sentences specific to the thesis.
- **Quote / data point**: optional pull-quote.
### [@next-key] — ...
Use Pandoc citation keys throughout. Body claims should reference sources as [@key] so a future drafting step can lift them straight into 03_BODY/.
01_PLANNING/proposal.md:
# [Topic Title] — Thesis Proposal (Engine-Generated Stub)
> Generated by Thesis Engine on YYYY-MM-DD.
> Edit freely in vibe-thesis. The engine fills in scaffold; the human owns the argument.
## What this thesis argues
[1–2 sentence claim derived from Stage 1 scoring rationale]
## Why it matters
[Why now? What's the gap in the field? Pull from prior-art notes.]
## Scope
- **In scope**: ...
- **Out of scope**: ...
## Methodology sketch
[Pull from methodology-survey notes — what approach do similar studies use?]
## Anticipated counterarguments
[Pull from opposing-positions notes — name them now so vibe-thesis can address them in-text.]
## Next steps inside vibe-thesis
1. Decide `THESIS_MODE` (dissertation / article / masters).
2. Drop `02_RESEARCH/` and `05_CITATIONS/references.bib` into ThesisStudio.
3. Refine claim → run a research swarm via `04_AGENT_SWARMS/` if deeper coverage is needed.
4. Begin drafting in `03_BODY/`.
05_CITATIONS/references.bib:
@article{smith2024,
title = {Title here},
author = {Smith, Jane},
year = {2024},
journal = {Venue Name},
url = {https://...},
note = {Engine-gathered. Verify before citing.}
}
@inproceedings{jones2025,
...
}
Cite type rules: @article for journal/blog, @inproceedings for conference, @misc for preprints/datasets/web sources without a clear venue, @book for books.
The note = {Engine-gathered. Verify before citing.} line is intentional — it surfaces in rendered bibliographies and reminds the human to verify each entry before relying on it. Strip the note line after verification.
Before completing:
[@key] syntaxreferences.bib parses (no malformed entries)proposal.md has a single explicit thesis claim02_RESEARCH/<axis>/notes.md has a Summary sectionIf any gate fails, surface the failed gates as a checklist in chat and write the partial run to <run>/pending/. Do not silently proceed.
Goal: From the Stage 2 proposal + research notes, produce a Smart Brevity blog draft for BlogStudio. This stage is optional and only runs when invoked via /thesis-engine:blog.
thesis-engine-run-YYYYMMDD/
└── blog/
└── 02_DRAFTS/
└── YYYY-MM-DD-[slug]/
├── POST.md
└── frontmatter.yaml
Subdirectory names mirror BlogStudio's live layout — drop 02_DRAFTS/<dated-slug>/ into C:\Users\estev\Projects\BlogStudio\02_DRAFTS\ for ingest.
| Source material | Blog equivalent |
|---|---|
proposal.md claim | Hook paragraph + bold one-line headline |
| Prior-art notes | "What we thought we knew" (2–3 paragraphs) |
| Methodology notes | Brief — only if methodology is the story |
| Opposing-positions notes | "The strongest case against this" mini-section |
| Primary sources | Pull-quote or data callout |
## headers, paragraphs ≤3 sentences, 1–2 pull-quote callouts, bullet liststitle: "..."
slug: "kebab-case-title"
excerpt: "1-2 sentence teaser, ≤140 chars"
tags: [tag1, tag2, tag3]
domain: "..."
source_run: "thesis-engine-run-YYYYMMDD"
generated_date: "YYYY-MM-DD"
status: draft
When the user invokes /thesis-engine:run, execute Stages 1 + 2 in sequence. Stage 3 is opt-in via --blog or via the standalone /thesis-engine:blog command.
After a successful run:
<run>/README.md summarizing what was produced and how to ingest it into ThesisStudio.6H02m934H97jNl15DzWe) using mcp__626labs__manage_tasks action create with title "Thesis run YYYY-MM-DD — [topic]" and status Done. If the 626Labs MCP is unavailable, log a one-line note to chat and continue.computer:// links.| Frequency | Trigger | Output |
|---|---|---|
| Weekly | Scheduled task weekly-thesis-engine (Mondays 8 AM, --domain ai_ml --auto) | 1 topic + research bundle, no blog |
| On-demand | /thesis-engine:run | Same |
| Batch | /thesis-engine:run --count 3 | 3 topics + 3 research bundles |
| Discover-only | /thesis-engine:discover | Topic table only |
| Blog-only | /thesis-engine:blog [run-folder-or-thesis.md] | Blog draft from existing run or thesis |
01_PLANNING/, 02_RESEARCH/, 05_CITATIONS/ from a run folder drop directly into C:\Users\estev\Projects\ThesisStudio\. Subdirectory names match exactly. Merge references.bib into the canonical bibliography.blog/02_DRAFTS/<dated-slug>/ drops into C:\Users\estev\Projects\BlogStudio\02_DRAFTS\.6H02m934H97jNl15DzWe.[@authorYear] keys throughout, BibTeX bibliography. Matches vibe-thesis's render pipeline.See references/domain-feeds.md for a curated list of RSS feeds, preprint servers, and newsletters to seed Stage 1 discovery searches.
Creates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.
npx claudepluginhub estevanhernandez-stack-ed/thesis-engine --plugin thesis-engine