If you landed here searching for how to use OpenClaw for research and literature review, you probably have two problems: papers are multiplying faster than you can read them, and the tooling around search, PDFs, and citations still feels like 2003. I just finished wiring OpenClaw 0.48.2 into my own workflow and cut my weekly lit-review time in half. Below is the exact setup, no gloss.
Why OpenClaw beats a pile of browser tabs
OpenClaw is an open-source AI agent framework (Node 22+, MIT licence) that already talks to the places you hang out: Slack, Telegram, WhatsApp, Signal, iMessage, web chat. Through Composio it also pokes at Gmail, Notion, GitHub, Calendar, and 800-ish other APIs. The piece that matters for researchers is the combo of:
- Browser skill — headless Chromium with programmable navigation & scraping.
- File skill — upload/download plus built-in PDF parsing (pdf.js under the hood).
- Memory — Redis or SQLite store for long-term notes.
- Scheduling — cron-style or natural-language: “every Monday at 07:00”.
Put those together and you have an agent that can search, fetch, extract, summarise, and remind you, without you touching the keyboard.
0-60: installing OpenClaw or spinning up ClawCloud
Local install (Node 22+)
If you like running things yourself:
$ brew install node@22 # or use asdf / nvm
$ npm create openclaw@latest my-lit-agent
$ cd my-lit-agent
$ npm run dev
The wizard asks a few questions (agent name, port, memory backend). Accept the defaults for SQLite; you can move to Redis later.
Hosted shortcut (ClawCloud)
Honestly, for a research assistant the hosted path is easier:
- Sign up at claw.cloud.
- Click “New agent”, name it
litreview. - Choose the “Research” recipe — pre-installs browser, pdf, memory, schedule skills.
- Hit “Launch”. 60 seconds later you get a public HTTPS endpoint and a UI.
I’ll assume ClawCloud for the rest, but every YAML snippet works the same locally.
Hooking your messaging app for push summaries
Reading summaries in Telegram while commuting beats logging into yet another dashboard. Here’s the minimal Telegram connector:
# config/telegram.yaml
kind: connector
name: telegram
botToken: "6151234567:AAE-YOUR-TOKEN"
allowedUserIds:
- 38517492 # your personal user id
Drop the file into agents/litreview/connectors and restart the daemon:
$ npm run daemon
OpenClaw auto-registers the webhook. Send “/help” to the bot — you should see “litreview @ your-cloud-url”.
Building the LitReview workflow step by step
1. Advanced web search
You need clean search strings, not generic “GPT-ish” prompts. OpenClaw’s browser skill exposes a browser.search() function that accepts Google or Semantic Scholar operators. Example task definition:
# tasks/search-papers.yaml
kind: task
name: search-papers
description: "Search Google Scholar for recent PDFs on ${topic}"
inputs:
topic: string
run:
- browser.search:
query: "${topic} filetype:pdf site:arxiv.org after:2023-01-01"
maxResults: 20
- return: results
Run it interactively:
/run search-papers topic="diffusion models video"
Result: array of URLs with titles & snippets.
2. Downloading and parsing PDFs
Next task grabs the URLs, downloads the PDFs, and extracts structured text plus metadata (title, authors, year, doi if present).
# tasks/process-pdf.yaml
kind: task
name: process-pdf
inputs:
url: string
run:
- file.download:
url: "${url}"
saveAs: temp.pdf
- pdf.extract:
file: temp.pdf
outline: true
references: true
- memory.save:
namespace: papers
key: "${pdf.meta.doi || url}"
value: ${pdf.text}
- return:
title: ${pdf.meta.title}
authors: ${pdf.meta.authors}
abstract: ${pdf.meta.abstract}
url: ${url}
Performance note: pdf.js inside OpenClaw uses a worker pool (defaults to 4). Bump PARSER_WORKERS=8 in .env if you have CPU to spare.
3. Extracting notes and highlights
Long PDFs drown the LLM. The trick is chunking. I use 1 k-token sliding windows with 200-token overlap; OpenClaw’s text.chunk helper handles it:
# tasks/extract-notes.yaml
kind: task
name: extract-notes
inputs:
text: string
run:
- text.chunk:
size: 1000
overlap: 200
- llm.map:
model: gpt-4o
prompt: |
For each chunk output bulleted research notes: key findings, methods, datasets. Max 5 bullets.
- text.join:
separator: "\n"
- return: joined
Chaining tasks:
/pipe search-papers -> process-pdf -> extract-notes
The pipe operator is new in 0.48.x and still marked “experimental” — if it blows up, chain manually.
4. Citation management with Zotero via Composio
Good summaries are useless if you can’t cite later. I hooked Zotero because its web API is sane and free.
# integrations/zotero.yaml
kind: integration
provider: zotero
apiKey: "zotero-xxxx"
baseUrl: "https://api.zotero.org/users/123456"
collections:
litreview: "LRV123"
Add a final step in process-pdf:
- zotero.item.create:
collection: litreview
data:
itemType: journalArticle
title: ${pdf.meta.title}
creators: ${pdf.meta.authors}
url: ${url}
date: ${pdf.meta.year}
abstractNote: ${pdf.meta.abstract}
Now every processed paper appears in Zotero with the summary pinned as a note.
5. Literature synthesis across papers
Once you parse a dozen papers you want an overview. OpenClaw’s memory is vectorised through PgVector or RedisVec. Enable it:
# config/memory.yaml
kind: memory
backend: redisvec
url: redis://127.0.0.1:6379
Saving chunks earlier already embedded them. Query with:
/ask memory.papers "What are the dominant evaluation metrics for diffusion video models?"
The LLM receives the top-k relevant chunks with sources and synthesises an answer. Think “ChatGPT retrieval plugin” but local.
Triggering the whole thing with a single prompt
At this point we can stitch tasks into an agent behaviour. In agents/litreview/flows.yaml:
flow "Find & summarise latest papers" {
input: topic
steps:
papers = task.search-papers(topic)
foreach url in papers.urls {
info = task.process-pdf(url)
notes = task.extract-notes(info.abstract + "\n" + info.body)
}
summary = llm.chat:
model: gpt-4o
prompt: |
Produce a structured literature review on "${topic}".
Sections: Trends, Methods, Gaps, Key Papers (with citation keys).
output: summary
}
Mark it callable from Telegram:
# connectors/telegram.yaml (continued)
commands:
/litreview: "flow:Find & summarise latest papers"
Usage:
/litreview topic="diffusion models for video generation"
Wait ~90 s and you’ll receive a 2-3 page summary with numbered references that match your Zotero keys. The message size cap on Telegram is 4096 characters, so OpenClaw auto-splits long replies.
Automating weekly digests with the scheduler
Researchers live on a calendar. In schedule.yaml:
# schedule.yaml
kind: schedule
cron: "0 7 * * 1" # every Monday 07:00
run:
flow: Find & summarise latest papers
with:
topic: "video diffusion models"
The summary lands in your chat every Monday before coffee. If you prefer email, swap the connector or add a gmail.send step.
Real-world snags and how to avoid them
- CAPTCHAs: Google Scholar blocks headless browsers after ~100 requests. Switch to Semantic Scholar API (
browser.search.engine: s2) or add SerpAPI creds. - PDF garbage: conference organisers sometimes wrap papers in HTML frames. Pre-filter URLs ending with
.pdfor follow the first<a>link. - Token limits: GPT-4o is 128k tokens but costly. For bulk processing I drop to
gpt-3.5-turbo-16kand only upgrade final synthesis to 4-o. - Zotero rate limits: bursts over 50 req/min get 429. The Composio wrapper respects
X-RateLimit-Remaining; leave it on. - Unicode maths: pdf.js sometimes mangles math symbols. I run a post-processor replacing common artifacts (e.g., “−” -> “−”).
The payoff
With the flow in place I spend zero time on mechanical tasks: search, download, highlight, copy/paste citations. My chat scroll gives me an always-up-to-date map of the field, and Zotero stays in sync for manuscript writing.
If you try this, drop feedback on GitHub discussions #8123. Bugs in the pipe operator or new provider ideas are especially welcome.
Next step: fork the repo, swap the search query, and schedule your own digest. Your future-self writing the related-work section will thank you.