mne-erp — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited mne-erp (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Evoked-response analysis of neurophysiology data via the MNE MCP server. This skill is skeptical by design: most ERP mistakes (peak-picking a window after seeing the grand average, a high-pass that shifts latency, calling an occipital 100 ms deflection "N1") run without any error — so the discipline is to grill the component identity and measurement plan before averaging, and critique before believing.
Companion skills:mne-mcp-guardfor technical execution safety;mne-methodology-criticfor Phase 3. Loaded objects persist in one MNE session.
Do not average until these are answered. If the user can't answer one, propose a sensible default and explicitly flag the open risk — never silently choose.
Design & claim
pre × post)
The questions that decide validity
Latency/polarity/topography must match the named component for that modality. ⚠️ auditory N1 is fronto-central (~100 ms); visual N1 is occipito-temporal ~150–200 ms — a ~100 ms occipital deflection in vision is most likely P1, not N1. A topography/modality mismatch means the component is misnamed. (This is the single most common identity error here.)
window/channel chosen after seeing this dataset's grand average is circular (double-dipping). Pin the window and ROI down NOW, from prior literature, not from the data.
Data & parameters
and polarity** (CDA, LPP, P300, CNV especially); low-pass smooths and delays peaks. State the band.
tmin/tmax, peak-to-peak rejection threshold + its justification.Inference plan (pin this down NOW, not after seeing results)
amplitude/latency differences. Will rejection differ between conditions/groups (differential rejection fabricates effects)?
length. Single-subject peak latency is noisy → plan a jackknife (group latency) with the adjusted t.
its independence assumption valid? (neighbouring channels/times are correlated → consider cluster-based permutation rather than per-channel tests)
mne_check_status; confirm the epoching inputs (events, montage,units) before averaging.
mne_find_events (trigger channel) or mne_events_from_annotations(EDF/BrainVision/EEGLAB). Verify the event codes map to the intended conditions.
mne_make_epochs(event_id="target:1,standard:2", tmin=-0.2, tmax=0.8,
baseline="default", reject_eeg=100e-6) # (None,0); 100 µV p2pInspect with mne_plot_epochs_image and read the PNG (single-trial consistency, latency jitter, residual artifact).
mne_average_evoked defaultsevoked_name="evoked"; calling it twice overwrites the first condition. Name each one:
mne_average_evoked(condition="target", evoked_name="evk_target")
mne_average_evoked(condition="standard", evoked_name="evk_standard")mne_run_code: evk_diff = mne.combine_evoked([evk_target, evk_standard], weights=[1, -1])
evk_diff.comment = "target - standard"style="joint") and mne_plot_topomap(name="evk_diff", times="0.3") (your registered latency, **not** "peaks"` on this data).
mne_run_code): # MEAN amplitude in a pre-specified window over a pre-specified ROI
roi = ["Pz", "CPz", "POz"]; tmin, tmax = 0.30, 0.50 # registered, not picked here
ev = evk_diff.copy().pick(roi)
m = ev.get_data(tmin=tmin, tmax=tmax).mean() # volts
# PEAK amplitude + latency (note: single-subject peak latency is noisy → jackknife for groups)
ch, lat, amp = evk_diff.get_peak(tmin=tmin, tmax=tmax, mode="abs", return_amplitude=True)
gfp = evk_diff.data.std(axis=0) # global field power over time
print(f"mean={m*1e6:.2f} µV | peak={amp*1e6:.2f} µV @ {lat*1e3:.0f} ms ({ch})")mne-analyst archiving convention).Best-practice reminders: high-pass ≤ 0.1–0.3 Hz + line-notch before epoching; equalize trial counts (epochs.equalize_event_counts) before comparing; report per-condition trial counts and rejection rate; measure where you pre-registered, not where the peak landed.
Hand the design + result to `mne-methodology-critic` (invoke the skill, or dispatch it as a subagent with references/methodology-checklist.md). For ERP/ERF work it will specifically check:
Report its BLOCK / REVISE / PASS verdict to the user and act on it before stating conclusions.
See references/erp-methods.md for deeper recipes (event handling, difference waves, mean vs peak vs jackknife latency, GFP, component windows by modality, and ERP inference choices).
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.