Automated neuroscience research monitoring from arXiv. Searches for latest papers in neuroscience, brain networks, neural dynamics, spiking neural networks, and computational neuroscience. Generates skills for ai_collection and updates Obsidian wiki. Activation: neuroscience research, arxiv monitor, brain papers, neural research update.
Automated research monitoring system for tracking latest neuroscience papers from arXiv and generating skills for the ai_collection.
This skill automates the process of:
neuroscience - General neuroscience researchbrain network - Brain connectivity and network analysisneural dynamics - Neural system dynamicsspiking neural network - SNN researchcomputational neuroscience - Computational methodsfMRI - Functional magnetic resonance imagingEEG - Electroencephalographybrain decoding - Neural decoding from brain signalsneural coding - Information encoding in neural systemsconnectome - Brain connectivity mappingbrain-computer interface - BCI research| Category | Keywords |
|---|---|
| Imaging | fMRI, EEG, MEG, PET, calcium imaging |
| Methods | brain decoding, neural coding, connectome analysis |
| Systems | brain network, neural dynamics, spiking neural network |
| Applications | brain-computer interface, neuroprosthetics, neural rehabilitation |
| Theory | computational neuroscience, theoretical neuroscience, neural modeling |
q-bio.NC - Neurons and Cognitioncs.NE - Neural and Evolutionary Computingq-bio.QM - Quantitative Methodscs.LG - Machine Learningcs.AI - Artificial Intelligencecs.CV - Computer Vision (for brain imaging)# Scoring weights (tuned from real execution)
SCORING_CONFIG = {
'keyword_match': 2, # Per keyword found in title/abstract
'category_qbio_nc': 5, # q-bio.NC, cs.NE, q-bio.QM
'category_cs_lg': 2, # Machine learning
'category_cs_ai_cv': 1, # AI/Computer Vision
'recency_days': 7, # Papers within last week
'recency_bonus': 2 # Bonus for very recent papers
}
# Search configuration
SEARCH_CONFIG = {
'keywords': [
# Primary keywords
"neuroscience",
"brain network",
"neural dynamics",
"spiking neural network",
"computational neuroscience",
# Extended keywords for comprehensive coverage
"fMRI",
"EEG",
"brain decoding",
"neural coding",
"connectome",
"brain-computer interface"
],
'max_results_per_query': 20, # Increased for extended keywords
'days_back': 14, # Look back 2 weeks
'top_n_papers': 5, # Select top N for skill generation
'deduplication': True, # Remove duplicate papers across keywords
'sort_by': 'submittedDate' # Sort by date (most recent first)
}
import httpx
import xml.etree.ElementTree as ET
import os
ARXIV_API = "https://export.arxiv.org/api/query" # HTTPS required (HTTP returns 301)
async def search_arxiv_neuroscience():
"""Search arXiv with fallback to local skill analysis."""
queries = [
"neuroscience",
"brain network",
"neural dynamics",
"spiking neural network",
"computational neuroscience"
]
all_papers = []
network_available = True
for query in queries:
params = {
"search_query": f"all:{query}",
"max_results": 20,
"sortBy": "submittedDate",
"sortOrder": "descending"
}
try:
async with httpx.AsyncClient(timeout=30.0, follow_redirects=True) as client:
response = await client.get(ARXIV_API, params=params)
response.raise_for_status()
# Parse XML and extract papers...
except Exception as e:
print(f"Network error for '{query}': {e}")
network_available = False
break
# Fallback: if network fails, analyze existing skills
if not network_available or not all_papers:
print("Network unavailable. Falling back to local skill analysis...")
return analyze_existing_skills()
return all_papers
def analyze_existing_skills():
"""Analyze existing ai_collection skills when network is down."""
import re
ai_collection_dir = os.path.expanduser("~/.hermes/skills/ai_collection")
skill_data = []
for item in os.listdir(ai_collection_dir):
skill_path = os.path.join(ai_collection_dir, item)
if os.path.isdir(skill_path):
skill_md = os.path.join(skill_path, "SKILL.md")
if os.path.exists(skill_md):
with open(skill_md, 'r') as f:
content = f.read()
# Extract arXiv references
arxiv_matches = re.findall(r'arXiv[:\s]+(\d{4}\.\d+)', content)
date_matches = re.findall(r'20\d{2}-\d{2}-\d{2}', content)
skill_data.append({
'name': item,
'arxiv_ids': arxiv_matches,
'dates': date_matches
})
return skill_data
Selection criteria:
Skill structure:
---