scaffold-research-project
Skill4 starsChanged 5 months agoMITView on GitHub
Use to create a new research project from the template via conversation — no terminal, no `cp` commands. Asks for project name, parent directory, methodology, discipline, and languages; copies the template tree using the Write tool; patches CLAUDE.md frontmatter; optionally initialises git. Designed to work in Cowork (no shell access) as well as Claude Code.
In this repository16 other files it gives its agents.
- acquire-sourcesSkill
- add-to-librarySkill
- brainstorming-researchSkill
- drafting-manuscriptSkill
- drift-reportSkill
- executing-research-planSkill
- finishing-a-research-projectSkill
- grant-finderSkill
- ingest-sourceSkill
- literature-reviewSkill
- requesting-peer-reviewSkill
- semantic-wiki-reviewSkill
- using-research-powersSkill
- wiki-graphSkill
- wiki-lintSkill
- writing-research-planSkill
The file
We split this skill into the rules it gives an agent
9 rules. About 0 are common, 4 are distinctive, and 5 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈4
Distinctive · estimate
This author's own choices. Worth a look.
5
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 45
Create a new research project from the research-project-template without leaving the chat.
- Distinctive: line 59
Create a task-list item for each.
- Very specific: line 69
If the user is unsure, recommend hermeneutic and note that they can change it later.
- Very specific: line 73
Ask for languages: Default [en]. Offer [de, en] for German-speaking research.
- Distinctive: line 77
Wait for explicit confirmation.
- Very specific: line 114
Use the Edit tool with the original placeholder block as old_string.
- Very specific: line 124
If ~/.config/research-superpowers/library already exists, offer its contents as the default — most users have one library for everything.
- Distinctive: line 128
Optionally init git: If the Bash tool is available, ask: "Initialise a git repository here?
- Distinctive: line 135
If Bash is not available or the user declines, skip — note that git can be initialised later.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Scaffold a Research Project
Create a new research project from the research-project-template without leaving the chat. Designed for users on Cowork (no terminal) and for Claude Code users who prefer a guided setup.
Announce at start: "Using scaffold-research-project to set up <project_name> at <parent_directory>."
When to use
- User says "start a new research project", "scaffold a project on X", "create a new project", "set up a research project about Y"
- User on Cowork (no shell) or anyone who prefers a guided setup over
cp -rand manual frontmatter editing - First-time users who haven't seen the template structure yet
NOT for: modifying an existing project (edit CLAUDE.md directly), copying parts of the template in isolation (use the relevant skill — e.g. ingest-source will create the wiki structure on demand).
Checklist
Create a task-list item for each. Complete in order; do not write files until all inputs are collected and confirmed.
- Ask for project name. Require kebab-case (lowercase, hyphens, no spaces). Reject
MyProjectormy project— request a slug likeiron-age-chronologyornegev-fortresses-debate. Validate against the regex^[a-z][a-z0-9-]*$. - Ask for parent directory. Offer
~/Documentsas default (expand via the Bash tool if available). If Bash is not available, ask the user to paste an absolute path. Verify the directory exists; if not, ask whether to create it. - Ask for methodology. Present the three options briefly:
hermeneutic— default. Theology, exegesis, source criticism, interpretive archaeology. No frozen hypothesis; the plan documents research question + method sketch + expected sources.quantitative— geostatistics, 14C Bayesian, quantitative DH. Full pre-registration (hypothesis, operationalisation, stop criterion).mixed— per-sub-study; quantitative tasks opt into pre-registration individually. If the user is unsure, recommendhermeneuticand note that they can change it later.
- Ask for discipline. Free text. Offer examples:
"Biblical Archaeology","Theology / Old Testament","Ancient History","Digital Humanities". The string is used in the project's CLAUDE.md frontmatter. - Ask for languages. Default
[en]. Offer[de, en]for German-speaking research. Other ISO 639-1 codes welcome. - Confirm the plan with the user. Present a single block:
"I'll create
<parent_directory>/<project_name>/with methodology<methodology>, discipline<discipline>, languages<languages>. Proceed?" Wait for explicit confirmation. Do not write any files before confirmation. - Locate the template. Try, in order:
- Plugin cache:
~/.claude/plugins/cache/<marketplace>/research-superpowers/templates/research-project-template/. Use Bashlsto confirm if Bash is available; otherwise try common marketplace names (leiverkus-research,claude-plugins-community). - User-supplied path: if the user has the plugin checked out as a development clone, ask for the path.
- Fallback: fetch each template file from GitHub raw URLs (
https://raw.githubusercontent.com/leiverkus/research-superpowers/main/templates/research-project-template/...) via theWebFetchtool. Slower but works without any local clone.
- Plugin cache:
- Copy the template tree file-by-file using
Read(from the located template path) andWrite(to the new project path). Preserve directory structure exactly. Copy these top-level entries:CLAUDE.mdREADME.md.vscode/settings.jsonand.vscode/tasks.json.gitignore.gitlab-ci.ymlschema/knowledge-frontmatter.schema.jsonscripts/library.py— resolves the shared source library. Without it nothing can find a PDF.scripts/bib-subset.py— writesoutput/bibtex/references.bibas the cited subset of the libraryscripts/bib-search.py— page-level full-text search across the library (SQLite FTS5; the index is a local cache, never in the synced folder)scripts/check-pdf-version.py— flags manuscript-vs-published PDFs before ingestscripts/add-to-library.py— adds one PDF directly to the shared master library (theadd-to-libraryskill drives it)scripts/lint-wiki.pyscripts/wiki-to-graph.pyscripts/graph_mcp.py— stdlib MCP server exposing the graph queriesscripts/vendor/cytoscape.min.js(+scripts/vendor/README.md) — bundled offline lib for the HTML graph viz.mcp.json— registers thewiki-graphMCP server for Claude Codeinput/(with itsbibliography/,data/,description/,ideas/,notes/subdirectories — thedescription/project-description.mdtemplate file goes too)knowledge/(plain Markdown wiki —_meta/, the four_example-*.mdfiles inentities/,concepts/,sources/,synthesis/, plus an emptyassets/and_meta/log.md,_meta/index.md; no_quarto.ymlorMakefile— the wiki has no build step)output/(bibtex/references.bib,bibtex/csl/,article/article.qmd,book/_quarto.ymland chapters,presentation/talk.qmd, plus their Makefiles; and the emptyarticle/outline/+book/outline/dirs wheredrafting-manuscriptkeeps each manuscript's argument architecture — not rendered, never listed in_quarto.yml)
Patch CLAUDE.md frontmatter with the user's answers. Read the new
CLAUDE.md, replace the placeholder frontmatter block at the top:--- methodology: <user-answer> discipline: "<user-answer>" languages: <user-answer> plugin_version: "<version from .claude-plugin/plugin.json>" ---Use the Edit tool with the original placeholder block as
old_string.plugin_versionis not a user answer — read it from$CLAUDE_PLUGIN_ROOT/.claude-plugin/plugin.jsonand copy theversionstring verbatim. It records which plugin version this project's copiedschema/andscripts/came from, and it is what letsscripts/sync-project.pytell an old copy from a local patch later. Leaving it at0.0.0is not fatal — the project is then simply treated as behind — but it costs the user a false "local edit" warning on every file they never touched.- Point the project at the shared library. Source PDFs do not live in the project — they live in one shared folder (
<library>/pdf/<bibkey>.pdf), so the same paper exists once across every project. Write its path into.research-library(one line, no trailing slash). Without this the project has no sources:ingest-sourcewill hard-stop on the very first ingest.- If
~/.config/research-superpowers/libraryalready exists, offer its contents as the default — most users have one library for everything. - Otherwise ask: "Where is your shared source library? (e.g.
~/UOLcloud/Bibliothek). Leave blank to set it later." - The file is gitignored — the path is machine-local and differs between machines, so committing it would break every other checkout.
- If
- Optionally init git. If the Bash tool is available, ask: "Initialise a git repository here? (recommended; lets you track changes and roll back.)" If yes, run:
If Bash is not available or the user declines, skip — note that git can be initialised later.cd <parent_directory>/<project_name> git init -b main git add . git commit -m "Scaffold research project from research-superpowers template" - Register the project and audit its join keys. Append the new project's absolute path to
~/.config/research-superpowers/projects(one path per line; create the file if missing — the session-start drift check also auto-registers, but only once a session starts in the project). If the registry now lists ≥ 2 projects, runpython scripts/wiki-global-graph.py bibkeys <all registry roots>— a new project is exactly when its own doc says to run the audit, because no single project's CI can see a cross-project COLLISION or SPLIT. - Confirm completion. Tell the user:
"Project created at
<parent_directory>/<project_name>/. Next steps:- Open
CLAUDE.mdto see the project's conventions - Point the project at the shared library (one line in
.research-library), then say 'ingest<bibkey>' to populate the wiki - For the full walkthrough, see the plugin's
docs/tutorial.md"
- Open
Process Flow
digraph scaffold {
"Ask project name" [shape=box];
"Valid kebab-case?" [shape=diamond];
"Ask parent directory" [shape=box];
"Ask methodology" [shape=box];
"Ask discipline" [shape=box];
"Ask languages" [shape=box];
"Confirm plan" [shape=box];
"User confirms?" [shape=diamond];
"Locate template" [shape=box];
"Template found?" [shape=diamond];
"Fallback to WebFetch" [shape=box];
"Copy files via Read+Write" [shape=box];
"Patch CLAUDE.md frontmatter" [shape=box];
"Bash available?" [shape=diamond];
"Offer git init" [shape=box];
"User wants git?" [shape=diamond];
"git init + commit" [shape=box];
"Confirm + next steps" [shape=doublecircle];
"Ask project name" -> "Valid kebab-case?";
"Valid kebab-case?" -> "Ask project name" [label="no, retry"];
"Valid kebab-case?" -> "Ask parent directory" [label="yes"];
"Ask parent directory" -> "Ask methodology";
"Ask methodology" -> "Ask discipline";
"Ask discipline" -> "Ask languages";
"Ask languages" -> "Confirm plan";
"Confirm plan" -> "User confirms?";
"User confirms?" -> "Ask project name" [label="no, restart"];
"User confirms?" -> "Locate template" [label="yes"];
"Locate template" -> "Template found?";
"Template found?" -> "Fallback to WebFetch" [label="no"];
"Fallback to WebFetch" -> "Copy files via Read+Write";
"Template found?" -> "Copy files via Read+Write" [label="yes"];
"Copy files via Read+Write" -> "Patch CLAUDE.md frontmatter";
"Patch CLAUDE.md frontmatter" -> "Bash available?";
"Bash available?" -> "Offer git init" [label="yes"];
"Bash available?" -> "Confirm + next steps" [label="no"];
"Offer git init" -> "User wants git?";
"User wants git?" -> "git init + commit" [label="yes"];
"User wants git?" -> "Confirm + next steps" [label="no"];
"git init + commit" -> "Confirm + next steps";
}Red Flags
| Thought | Reality |
| "I'll skip the methodology question and default to hermeneutic" | No — ask explicitly. Methodology drives writing-research-plan and executing-research-plan behaviour; assuming wrong wastes the user's time later. |
"I can just cp -r the template" | Not in Cowork (no Bash). The Read+Write approach works everywhere. |
| "Partial copy is fine, the user can fix it" | No — failed mid-copy leaves a confusing half-state. Either complete or roll back. |
| "I'll write files before the user confirms" | No — explicit confirmation is the gate between Q&A and disk writes. |
Key Principles
- Ask everything first, then write — atomic-feeling. The user types answers, sees the plan, confirms once, then files appear.
- No bash in the core path — only optional git init uses Bash. The scaffold itself works in any tool environment.
- Template lookup is graceful — plugin cache → user clone → GitHub fetch. Don't fail because the cache path varies.
- Frontmatter is patched, not regenerated — preserves the rest of the template's CLAUDE.md (architecture docs, workflow conventions).
- Git is optional — recommend it, never require it. A research project without git still works.
- One project per invocation — never batch.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

