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:

  1. Sign up at claw.cloud.
  2. Click “New agent”, name it litreview.
  3. Choose the “Research” recipe — pre-installs browser, pdf, memory, schedule skills.
  4. 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 .pdf or follow the first <a> link.
  • Token limits: GPT-4o is 128k tokens but costly. For bulk processing I drop to gpt-3.5-turbo-16k and 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.