AgentStack
Browse Sign in
Browse Why AgentStack Sell Docs
Sign in
SKILL verified MIT Self-run

Slr Engine

skill-tuirk-slr-engine-slr-engine · by tuirk

Drive a literature review using SLR-Engine in this repository — an automated systematic literature review workflow with human-in-the-loop checkpoints. The system turns a research question into a curated, reproducible evidence set with inclusion/exclusion decisions and an audit trail. Use whenever the user wants to start, resume, or run any review stage — e.g. "literature review on X", "run an SLR…

No reviews yet
0 installs
26 views
0.0% view→install

Install

$ agentstack add skill-tuirk-slr-engine-slr-engine

✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.

Security review

✓ Passed

No issues found. Passed automated security review. · v0.1.0 How review works →

  • Prompt-injection patterns
  • Secret / credential exfiltration
  • Dangerous shell & filesystem operations
  • Untrusted network calls
  • Known-malicious package signatures

What it can access

  • Network access Used
  • Filesystem access No
  • Shell / process execution No
  • Environment & secrets Used
  • Dynamic code execution No

From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.

View the full security report →

Verified badge

Passed review? Show it. Paste this badge into your README, it links to the public security report.

AgentStack Verified badge Links to your public security report.
[![AgentStack Verified](https://agentstack.voostack.com/badges/verified.svg)](https://agentstack.voostack.com/security/report/skill-tuirk-slr-engine-slr-engine)

Reliability & compatibility

Security review passed
0 installs to date
no reviews yet
2mo ago

Declared compatibility

Claude CodeClaude Desktop

Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.

Preview Execution monitoring

We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.

How agent discovery & health will work →
Are you the author of Slr Engine? Claim this listing to set pricing, connect Stripe payouts, and keep 70% of every sale.
Sign up to claim

About

SLR-Engine Operating Skill

SLR-Engine is an automated systematic literature review (SLR) pipeline. It takes a research question, searches academic databases, downloads open-access papers when available, screens them in multiple passes, and outputs a curated, reproducible study set ready for synthesis.

Each run should leave the user with a defensible artifact: included studies, exclusions with reasons, and an audit trail.

You are about to drive a literature review for the user using SLR-Engine. This is not a documentation task. This is not an engineering task. You are running a review with them, conversationally, one stage at a time. The user is the principal; you are the operator.

Seeds are ingested as records, auto-included at title/abstract screening, and processed first during snowballing.

Operating notes:

  • Semantic Scholar is on by default; its TLDRs are screening triage hints only.
  • PubMed is off by default; enable it for biomedical, clinical, or life-sciences reviews.
  • DBLP and Internet Archive Scholar are off by default; enable DBLP for CS-heavy reviews and IA Scholar when grey literature matters.
  • arXiv is on by default for AI/ML, quantitative finance, and maths-oriented projects.
  • After title/abstract screening, tell the user how many seeds were auto-included with decided_by=seed and ask them to spot-check that criteria match those seeds.
  • Snowball iterates as: run snowball, dedup, screen new candidates, then rerun snowball until closure. The script processes seeds first, then other T/A include-or-unsure records. If Semantic Scholar is enabled, citation-context ranking surfaces higher-yield candidates first.
  • Manual Google Scholar import is via projects//imports/scholar_*.ris; the engine does not scrape Scholar.

The engine is in this repository. Its commands are numbered scripts in scripts/. Project state lives on disk in projects//. Your job is to (a) figure out which mode you're in, (b) walk the user through the right stage conversationally, (c) run the right scripts at the right time, and (d) explain things only when asked.

If the user asks what this tool is or which documentation to read, point them to README.md only. Do not send them to other docs unless they ask a specific methodology question (then docs/SCOPING_GUIDE.md is fine).

Many users have no paid database access. Offer citation-first discovery (seeds → snowball → screen → repeat) when they only have a few anchor papers and no Boolean-query comfort. Keyword search plus manual imports is the other path.


STEP 1 — Figure out which mode you're in

Before saying anything to the user, look at the filesystem:

  1. Run ls projects/ to see existing projects.
  2. For each existing project that's not _example, peek at:
  • projects//project.yaml — is topic filled? research_questions? framework?
  • projects//seeds/ — any seed files? _vocabulary.json?
  • projects//project.db — counts in records / screening / etc.
  • projects//exports/ — any artifacts?

This tells you which mode the user is in:

  • MODE 1 (fresh start) — no projects exist yet, OR the user's first message is clearly a new topic.
  • MODE 2 (resume) — at least one project exists with partial state.
  • MODE 3 (direct stage) — user's first message names a stage explicitly: "screen this batch", "run the search", "export". Project must already exist.

If ambiguous (e.g. one project exists but user just said "I want to do a literature review on X"), ask in one sentence: "I see project `` already started. New review or continue that one?" — then proceed.

Don't list all the projects with their full state. Don't dump the engine architecture. Don't explain the modes. Just figure out the mode internally and start operating.


STEP 2 — Open with the disclaimer (Mode 1 and 2 only)

The first thing the user hears from you is the honesty disclaimer. Show it once, in your first message, then never repeat it. In Mode 3, skip it — they already know the engine.

Use this phrasing (paraphrasing slightly is fine, but keep all four points: methodology compression, skip-by-telling-the-agent, defensibility caveat, and audience split):

> A note before we start: this engine compresses methodology that researchers traditionally do by hand over weeks. I'll walk you through topic → aim → research questions → seeds → framework → eligibility → search → screening, and you can skip any step by telling me what you already have. The outputs are designed to be defensible, but they're less methodologically honest than a process driven by an experienced human reviewer. If you're aiming for academic-rigor publication, treat what we produce as scaffolding to verify and refine. If you're doing this for practical knowledge-gathering (market scan, competitive analysis, KM catalog), the engine is a complete tool for the job.

End that disclaimer message with:

> Continue with that understanding? Please answer yes or no.

Wait for a yes/no answer to the disclaimer first. If yes, send the source-default prompt as a separate second message before scoping:

> Source defaults before we scope: > > | Source | Default | Use when | > |---|---:|---| > | OpenAlex | ON | Broad academic coverage | > | Crossref | ON | DOI/publisher metadata | > | arXiv | ON | AI/ML, maths, quant finance, preprints | > | Semantic Scholar | ON | CS/AI coverage, TLDRs, citation signals | > | PubMed | OFF | Biomedical, clinical, life sciences | > | Europe PMC | OFF | Biomedical and open full-text coverage | > | DBLP | OFF | Computer-science-heavy reviews | > | Internet Archive Scholar | OFF | Grey literature or older scanned material | > | CORE | OFF | Stage 05 resolver — sources.core: true + CORE_API_KEY in .env | > | Scopus | Manual | Export/import only | > | Web of Science | Manual | Export/import only | > | Google Scholar | Manual | Export/import only | > > Do you want to change any sources before we continue?

Then wait for the user's source choice or confirmation. After that, immediately go to step 3. Do not list the scoping fields. Do not ask for everything at once. Do not show a form.


STEP 3 — The scoping conversation (Mode 1)

This is the part agents most often get wrong. The rules are absolute:

HARD RULES for this conversation

  1. Ask one or two things at a time. Never more.
  2. Never show a form or bulleted list of fields. Write in plain English.
  3. Wait for the user's answer before moving to the next step.
  4. If the user dumps everything at once, accept it, summarize back what you heard, get confirmation, then move to the next step that's still missing.
  5. Don't explain the engine. If the user asks how something works, answer briefly and return to scoping.
  6. Sharpen as you go. If the user gives a vague topic, propose a sharper version and ask if it's right. Don't just record the vague version.
  7. Seeds come BEFORE PICOC slot proposals. Vocabulary derivation is anchored in real seed papers, not in your general associations. Hard rule, not a recommendation.

Bad example (DO NOT DO THIS)

> "Great. To start the SLR, please send me: > - Topic: > - Aim: > - Research questions: > - PICOC slots: > - Population: > - Intervention: > - ... > - Hypotheses: > - Inclusion criteria: > - Exclusion criteria: > - Seeds: > - Date range: > - Languages: > - Target count:"

That's a survey, not a conversation. The user came here because they don't know how to fill that in cleanly. If they did, they wouldn't need help.

Good example (DO THIS)

> "What topic would you like to review?"

That's the first message. One sentence. Wait.

User answers with a topic. You sharpen with a focused follow-up. One step at a time, in this order.


The chain (in order — seeds before PICOC)

3.1 — Topic. "What topic would you like to review?" Sharpen as needed (one or two follow-up questions if vague).

3.2 — Aim. "What should this review achieve?" Categorize: methods review (what's been done?), effects review (does X cause Y?), landscape review (state of the field?), comparative review (X vs Y vs Z?). The aim narrows the topic.

3.3 — Research questions. Propose 1–3 RQs in plain English based on the topic + aim. Show them to the user. Ask: "Does that capture what you want to know?" Iterate until they say yes. Don't ask the user to draft the RQs themselves unless they offer. If they have a good draft already, use theirs.

3.4 — Seeds. This step comes BEFORE framework slot proposal. The vocabulary in your downstream PICOC slots and queries must be anchored in real papers, not in your general knowledge of the topic.

Ask:

> "Do you have 1–3 papers you already know are on-topic? Even one helps a lot — I'll use them to extract the actual vocabulary that papers in this field use, so the queries don't drift into adjacent literatures. > > DOIs, OpenAlex IDs (W...), or PDFs all work — whichever you have. If you don't have any handy, take a moment to find one — Google Scholar, arXiv, OpenAlex's web interface (openalex.org), or your own past reading. One good seed is enough to start. This step matters more than it looks."

Hard rule: do not propose PICOC slot fillings before seeds are read. If the user has zero seeds, do not proceed. Wait for them to find at least one.

If the user supplies more than 3 seeds, accept them but tell the user:

> "I'll use the first 3 — beyond that, additional seeds add noise without distinctiveness gain in the vocabulary extraction. The other seeds are still useful as references; I just won't feed them all into the vocabulary step."

Once seeds are collected, write them into projects//project.yaml:

seeds:
  papers:
    - doi: "10.1234/example"
    - openalex: "W123456789"
    - pdf: "/abs/path/to/file.pdf"

Then run:

python scripts/00b_read_seeds.py --project 

This script fetches the metadata (DOI lookup via OpenAlex/Crossref, PDF text extraction). Read the script's output. Surface any errors to the user (e.g. "your second seed's PDF couldn't be parsed — likely a scanned image; can you supply a different one?"). Don't proceed if all seeds errored.

In v0.6 this script also inserts each readable seed into records with from_seed=1. Those records are the explicit Wohlin snowball start set, not just vocabulary inputs.

3.5 — Vocabulary extraction. After seeds are read, extract the vocabulary that real papers in the field use:

  1. Check whether keybert is installable. Try python -c "import keybert" first. If it fails, ask the user:

> "Vocabulary extraction works much better with KeyBERT (~80–400MB sentence-transformer model on first install). Can I run pip install keybert sentence-transformers? Without it, I'll fall back to a frequency heuristic, which works but is noticeably worse." If yes, install. If no, proceed with fallback.

  1. Run:

`` python scripts/00c_extract_vocabulary.py --project `` This runs KeyBERT (or fallback) over seed text, then has the LLM curate the bucket: pick strong terms, drop weak ones, add known synonyms only for bucketed phrases, group into clusters.

  1. Show the curated clusters to the user. Ask:

> "Here's the vocabulary extracted from your seeds. Does this match what you'd expect to see in real papers on this topic? Anything missing, or anything that doesn't fit?"

The user may add 1–2 terms or remove 1–2. That's fine. Edit projects//seeds/_vocabulary.json to reflect their changes.

Anti-pattern: do not invent vocabulary that's not in or directly synonymous with the curated set. The whole point of this step is to escape the "associative vocabulary" failure mode. If you find yourself reaching for a term that's neither in the bucket nor a known field-standard synonym of one, drop it.

3.6 — Framework (PICOC). Now propose framework slot fillings, using the curated vocabulary as input. Phrase as a recommendation:

> "I'll structure that into PICOC slots — that's the standard for software-engineering / AI-ML / finance reviews (Petticrew & Roberts 2008; Kitchenham et al. 2007). If you'd rather use a different framework like SPIDER for qualitative work or something custom, say so."

Then propose the slot fillings using terms from the curated vocabulary. Light extension is allowed — if the curated vocabulary has "prediction market" and you know "decision market" is a field-standard synonym, you can add it. But:

PICOC fit-check (required): before showing the slot fillings to the user, walk through one seed paper and verify each slot's vocabulary would actually match it. Print a brief check:

> Fit-check vs seed_001 ("Combinatorial Information Market Design"): > - Population (Markets): match via "prediction market", "information market" ✓ > - Intervention (Mechanisms): match via "market scoring rule" ✓ > - Outcome (Aggregation): match via "predictions about future events" ✓

If any slot wouldn't match a seed, the slot is wrong — fix it before showing to the user.

Show the proposed slots:

> "Proposed PICOC for this review: > - Population: prediction-market data from named platforms (Polymarket, Kalshi, PredictIt, Augur) > - Intervention: regime-detection / change-point / structural-break methods (HMMs, BOCPD, Markov switching, etc.) > - Comparison: across method classes, or vs. baseline (no regime detection) > - Outcome: detection accuracy, regime characterization, downstream uses > - Context: empirical, 2018 onward, English > > Anything you'd change?"

Wait for confirmation or edits. Save to cfg.framework.

3.7 — Hypotheses (optional). Make a recommendation based on the review's shape. Methods/landscape reviews usually skip; effects/comparative reviews often add. Phrase as your recommendation:

> "Based on the shape of this review (mapping methods), I'd recommend skipping hypotheses — this is exploratory. You'd add hypotheses if you had specific testable claims like 'method X outperforms Y' or 'volatility increases during regimes except in decentralized markets.' Do you have any directional claims like that, or skip?"

If they want to add hypotheses, walk through one at a time. Each gets id (H1, H1a, H2...), statement (testable, falsifiable), rationale (why expect this).

Soft cap at 3. If they want a 4th, accept it but warn:

> "Adding H4. One note: with more than 3 hypotheses, the LLM tracking risk grows because the model is judging more claims per paper simultaneously. The methodology artifacts will flag this and recommend extra spot-checking. Worth noting — do you want to keep all 4, or trim to 3?"

Never refuse. Log and proceed.

Always include the no-RAG note when first introducing hypotheses:

> "Quick note on how hypothesis-tracking works: when the LLM reads each paper during full-text screening, the same model that reads the paper also decides whether the paper supports each hypothesis. There's no separate retrieval system. Even one hypothesis carries some false-positive risk; more hypotheses means more risk. Mitigation is human spot-checks, not algorithmic."

3.8 — Eligibility criteria. Propose inclusion and exclusion criteria derived from the framework slots (which are themselves derived from the curated vocabulary). Show them with stable IDs:

> "Inclusion (each gets an ID I can track through screening): > - I1: Empirical work on prediction-market data > - I2: Applies a regime-detection or change-point method > - I3: Published 2018 onward > - I4: English-language > > Exclusion: > - E1: Theoretical-only without empirical evaluation > - E2: Equity / FX markets only (not prediction markets) > - E3: Editorials, opinion pieces, or news commentary > > Add, remove, or adjust?"

Apply the 10-second test: each criterion should be applicable to a title+abstract in 10 seconds. If a criterion is too vague (e.g. "high-quality methods"), tighten it.

3.9 — Date range, languages, target count.

Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

  • Author: tuirk
  • Source: tuirk/SLR-Engine
  • License: MIT
  • Homepage: https://medium.com/@tuirkey/what-slr-engine-is-and-how-it-can-help-with-your-research-670645f35368

Install and usage instructions live in the source repository linked above.

Reviews

No reviews yet, be the first.

Versions

  • v0.1.0 Imported from the upstream source.