| name | arxiv-monitor |
| version | 1.0.0 |
| description | Scheduled ArXiv paper monitor. Uses CronCreate to search configured keywords every 6 hours, deduplicates via MemoryRecord, and stores summaries in named memory for morning briefing integration. |
| category | research |
| trigger | when user wants to monitor ArXiv papers, schedule research updates, or integrate paper discovery into the heartbeat ecosystem |
| tools | ["Bash","Read","Write","Skill","MemoryRecord","CronCreate","CronList","CronDelete"] |
| dependencies | ["scheduled-tasks"] |
| tags | ["arxiv","research","monitor","scheduled","heartbeat","loop","papers"] |
| model | sonnet |
| invoked_by | both |
| user_invocable | true |
| verified | true |
| created_by | direct (retroactive attribution) |
| compliance_status | legacy-direct-creation |
| source | builtin |
| trust_score | 100 |
| provenance_sha | b38f5f0d41d9a5b7 |
ArXiv Monitor Skill
Polls the ArXiv API every 6 hours for papers matching configured keywords. Deduplicates against previously seen papers, stores new summaries in named memory, and integrates with the morning briefing loop.
Setup
-
Set ARXIV_KEYWORDS in .env:
ARXIV_KEYWORDS=multi-agent systems,LLM reasoning,autonomous agents,RAG,tool use
-
Start the monitor loop:
/loop 6h Skill({ skill: 'arxiv-monitor' })
Or via CronCreate for programmatic control:
CronCreate({
schedule: '0 */6 * * *',
task: "Invoke Skill({ skill: 'arxiv-monitor' }) to fetch new ArXiv papers",
});
Core Logic
Step 1: Load Keywords and Seen Papers
const keywords = (process.env.ARXIV_KEYWORDS || 'multi-agent systems,autonomous agents')
.split(',')
.map(k => k.trim());
const seenRaw = await readMemory('arxiv-seen-ids');
const seenIds = new Set(seenRaw ? JSON.parse(seenRaw) : []);
Step 2: Search ArXiv API for Each Keyword
Use Bash to query the ArXiv API (no authentication required):
ENCODED=$(python3 -c "import urllib.parse,sys; print(urllib.parse.quote(sys.argv[1]))" "$KEYWORD")
curl -s