Back to skills
SkillHub ClubResearch & OpsFull Stack

ResearchMonitor

Monitors research topics for new papers, conferences, and journals.

Packaged view

This page reorganizes the original catalog entry around fit, installability, and workflow context first. The original raw source lives below.

Stars
3,077
Hot score
99
Updated
March 20, 2026
Overall rating
C4.0
Composite score
4.0
Best-practice grade
C64.0

Install command

npx @skill-hub/cli install openclaw-skills-researchassistant

Repository

openclaw/skills

Skill path: skills/eksubin/researchassistant

Monitors research topics for new papers, conferences, and journals.

Open repository

Best for

Primary workflow: Research & Ops.

Technical facets: Full Stack.

Target audience: everyone.

License: Unknown.

Original source

Catalog source: SkillHub Club.

Repository owner: openclaw.

This is still a mirrored public skill entry. Review the repository before installing into production workflows.

What it helps with

  • Install ResearchMonitor into Claude Code, Codex CLI, Gemini CLI, or OpenCode workflows
  • Review https://github.com/openclaw/skills before adding ResearchMonitor to shared team environments
  • Use ResearchMonitor for development workflows

Works across

Claude CodeCodex CLIGemini CLIOpenCode

Favorites: 0.

Sub-skills: 0.

Aggregator: No.

Original source / Raw SKILL.md

---
name: ResearchMonitor
description: Monitors research topics for new papers, conferences, and journals.
---

# ResearchMonitor

This skill helps you keep the user updated on their specific research field.

## Workflow

1.  **Check Configuration**:
    -   Read `research_config.json` in this directory to find the user's research topics and last checked date.
    -   If the file doesn't exist or topics are empty, ask the user what research topics they are interested in and save them using `scripts/daily_briefing.py --add-topic "topic"`.

2.  **Daily Check**:
    -   Get the current date.
    -   Compare with `last_checked` in `research_config.json`.
    -   If already checked today, do nothing unless explicitly asked.

3.  **Perform Search**:
    -   For each topic, use `search_web` to look for:
        -   "new research papers [topic] [current month/year]"
        -   "upcoming conferences [topic] [current year]"
        -   "new journal issues [topic] [current month/year]"
        -   Check specialized platforms like arXiv, IEEE Xplore, Google Scholar (via web search), or X (Twitter) if relevant.

4.  **Filter & Analyze**:
    -   For each potential item found, use `scripts/daily_briefing.py --check-seen "URL or Unique Title"`.
    -   If it returns "true", SKIP IT.
    -   Compare found items with what might have been seen yesterday (this requires some memory or just checking if the publication date is very recent, e.g., last 24-48 hours).
    -   **CRITICAL**: If there is *nothing significantly new* (no new major papers, no new conference announcements), **DO NOT BOTHER THE USER**.

5.  **Report**:
    -   If new items are found, compile a brief markdown report.
    -   Include:
        -   **Title**: News/Paper Title
        -   **Source**: URL/Journal Name
        -   **Summary**: 1-sentence summary of why it's relevant.
    -   Present this to the user.
    -   Mark the items as seen using `scripts/daily_briefing.py --mark-seen "URL or Unique Title"`.
    -   Update the `last_checked` date using `scripts/daily_briefing.py --update-date`.

## Scripts

-   `python scripts/daily_briefing.py --add-topic "topic"`: Adds a new research topic.
-   `python scripts/daily_briefing.py --list-topics`: Lists current topics.
-   `python scripts/daily_briefing.py --update-date`: Updates the last checked timestamp to now.
-   `python scripts/daily_briefing.py --check-seen "ID"`: Checks if an item ID (URL/Title) is already in memory.
-   `python scripts/daily_briefing.py --mark-seen "ID"`: Marks an item ID as seen.


---

## Referenced Files

> The following files are referenced in this skill and included for context.

### scripts/daily_briefing.py

```python
import argparse
import json
import os
from datetime import datetime

CONFIG_FILE = os.path.join(os.path.dirname(os.path.dirname(__file__)), 'research_config.json')

def load_config():
    if not os.path.exists(CONFIG_FILE):
        return {"topics": [], "last_checked": "1970-01-01", "seen_items": []}
    with open(CONFIG_FILE, 'r') as f:
        config = json.load(f)
        if "seen_items" not in config:
            config["seen_items"] = []
        return config

def save_config(config):
    with open(CONFIG_FILE, 'w') as f:
        json.dump(config, f, indent=4)

def add_topic(topic):
    config = load_config()
    if topic not in config['topics']:
        config['topics'].append(topic)
        save_config(config)
        print(f"Topic '{topic}' added.")
    else:
        print(f"Topic '{topic}' already exists.")

def list_topics():
    config = load_config()
    print("Current Research Topics:")
    for t in config['topics']:
        print(f"- {t}")

def update_last_checked():
    config = load_config()
    config['last_checked'] = datetime.now().strftime("%Y-%m-%d")
    save_config(config)
    print(f"Last checked date updated to {config['last_checked']}.")

def check_seen(identifier):
    config = load_config()
    if identifier in config.get('seen_items', []):
        print("true")
        return True
    print("false")
    return False

def mark_seen(identifier):
    config = load_config()
    if identifier not in config.get('seen_items', []):
        config.setdefault('seen_items', []).append(identifier)
        save_config(config)
        print(f"marked")
    else:
        print(f"already_seen")

def main():
    parser = argparse.ArgumentParser(description="Manage Research Monitor configuration.")
    parser.add_argument("--add-topic", type=str, help="Add a new research topic.")
    parser.add_argument("--list-topics", action="store_true", help="List all research topics.")
    parser.add_argument("--update-date", action="store_true", help="Update last checked date to today.")
    parser.add_argument("--check-seen", type=str, help="Check if an item identifier has been seen.")
    parser.add_argument("--mark-seen", type=str, help="Mark an item identifier as seen.")
    
    args = parser.parse_args()
    
    if args.add_topic:
        add_topic(args.add_topic)
    elif args.list_topics:
        list_topics()
    elif args.update_date:
        update_last_checked()
    elif args.check_seen:
        check_seen(args.check_seen)
    elif args.mark_seen:
        mark_seen(args.mark_seen)
    else:
        parser.print_help()

if __name__ == "__main__":
    main()

```



---

## Skill Companion Files

> Additional files collected from the skill directory layout.

### README.md

```markdown
# ResearchMonitor

A skill for OpenClaw to monitor research topics and report new findings.

## Features
-   Daily scanning for new research papers, conferences, and journal publications.
-   Filters out noise to avoid unnecessary notifications.
-   Configurable research topics.

## Setup
The skill uses `research_config.json` to store your preferences. You can let the agent manage this, or edit it manually.

## Usage
Simply ask the agent to "check for research updates" or let it run its daily routine.

```

### _meta.json

```json
{
  "owner": "eksubin",
  "slug": "researchassistant",
  "displayName": "ResearchMonitor",
  "latest": {
    "version": "0.1.2",
    "publishedAt": 1770160729545,
    "commit": "https://github.com/clawdbot/skills/commit/da730088cbd4974b77b4d65a2d4ca374e38209ff"
  },
  "history": [
    {
      "version": "0.1.1",
      "publishedAt": 1769985679130,
      "commit": "https://github.com/clawdbot/skills/commit/5ba2eb88b7b57286cd4df1ba97509df2d779e825"
    }
  ]
}

```

ResearchMonitor | SkillHub