NeuroSkill — Local-First EXG/BCI Neurofeedback Workbench
A local-first desktop app that turns real-time EXG streams into GPU band-power analysis, neural embeddings and session-level BCI research views.
- Source repo
- NeuroSkill-com/skill
- Stars
- ★ 103
- Last updated
- 3d ago
- License
- GPL-3.0
- Primary language
- Rust
- FA score
- 47/100 · Major gaps
At a glance
- How it runs
- Works with
- Portable with changes
- Cost
- Free, no paid service needed
- Setup effort
- Medium · a few setup steps
- You'll need
- Typical use
- A neurofeedback researcher who wants live multi-channel band power and session comparisons on a laptop without uploading raw EEG to a cloud service.
- Not a fit if
- Teams needing an FDA/CE-approved medical device for diagnosis or treatment
- Users unwilling to set up the Hugging Face CLI, Rust/Tauri and npm toolchains
- Users who want a pure cloud SaaS rather than local model weights and EXG devices
- Source review
- 47/100 · Major gaps 1 safety controls not found
What does this agent do, and when should you use it?
NeuroSkill is an open-source, local-first desktop neurofeedback and BCI application built with Tauri v2 (Rust) and SvelteKit, explicitly scoped to research use and not a medical device. It ingests real-time EXG streams from supported headsets or any compatible LSL source, as well as remote rlsl-iroh streams, and lists devices from BrainBit, OpenBCI, Emotiv, InteraXon Muse, g.tec, Neurosity, NeuroSky, Ōura and more. On top of the live signal it performs GPU band-power analysis and neural embeddings, then supports session comparison, sleep staging, UMAP visualization, labeling, similarity search and screenshot-based search. A catalog defined in src-tauri/exg_catalog.json drives loading of EEG/EXG foundation models such as ZUNA, LUNA, REVE, LaBraM, EEGPT, CBraMod and SleepFM from Hugging Face. The app also embeds a local LLM and TTS and exposes a WebSocket/HTTP API, and ships as macOS dmg, Windows exe and Linux AppImage releases or via a Homebrew cask. Because everything runs in the desktop process, raw physiological data does not have to leave the machine.
At runtime NeuroSkill reads live multi-channel EXG data from a supported device or from any LSL source, including remote rlsl-iroh streaming, and renders it in a real-time desktop view. It then runs GPU band-power analysis and neural embedding computation on captured signals. Recordings become sessions that can be compared against each other, staged for sleep, projected with UMAP, labeled, and retrieved through similarity search or screenshot-based search. The model layer is declared in src-tauri/exg_catalog.json and pulls pretrained weights from Hugging Face (ZUNA, LUNA Base/Large/Huge, REVE Base/Large, OpenTSLM, SensorLM, SleepFM, SleepLM, OSF Base, SignalJEPA, LaBraM, EEGPT, TRIBE v2, NeuroRVQ, CBraMod, ST-EEGFormer Small/Base/Large) for downstream inference. A local LLM plus TTS integration and a WebSocket/HTTP API make the app programmable from outside. Accompanying docs cover architecture, device integration, metric formulas, hooks, LLM internals, LSL integration, the API surface, and platform build steps.
- A neurofeedback researcher who wants live multi-channel band power and session comparisons on a laptop without uploading raw EEG to a cloud service.
- An ML engineer benchmarking several EEG foundation models (LaBraM, EEGPT, CBraMod, LUNA) who needs one acquisition pipeline that feeds loading, embedding and visualization.
- A sleep or cognition lab using SleepFM/SleepLM-style models with overnight recordings for sleep staging and UMAP inspection.
- A hardware prototyper working with Muse, OpenBCI Cyton, Emotiv or g.tec Unicorn who needs a desktop app with broad device support and a WebSocket/HTTP API.
- A team wiring a local LLM and TTS into a physiological-signal workflow through the app's hook and local-model pipeline.
- An instructor or demo presenter who needs a one-command install on macOS, Windows or Linux and a live BCI walkthrough.
How do you install or deploy this agent?
Prebuilt releases are published for each desktop platform; download and launch.
# macOS
https://github.com/NeuroSkill-com/skill/releases/latest/download/NeuroSkill.dmg
# Windows
https://github.com/NeuroSkill-com/skill/releases/latest/download/NeuroSkill.exe
# Linux
https://github.com/NeuroSkill-com/skill/releases/latest/download/NeuroSkill.AppImageOn macOS you can also install via Homebrew:
brew tap NeuroSkill-com/skill && brew install --cask neuroskillBuilding from source starts by installing the Hugging Face CLI and downloading a model (ZUNA shown):
curl -LsSf https://hf.co/cli/install.sh | bash
hf download Zyphra/ZUNAOn Windows the Hugging Face CLI install command is:
powershell -ExecutionPolicy ByPass -c "irm https://hf.co/install.ps1 | iex"Then run the repository setup script and start the dev app:
npm run setup -- --yes
npm run tauri devAnd build a production bundle:
npm run tauri buildHow do you use this agent?
Launch the desktop app, pick the EXG device or LSL stream you want (BrainFlow, MATLAB and pylsl sources all qualify via LSL), and start the real-time stream view. Save the recording as a session, then use the built-in tools to compare sessions, run sleep staging, generate UMAP visualizations, apply labels, and run similarity or screenshot-based search over the data. To run a specific foundation model, make sure its weights were fetched with hf download first; the authoritative list lives in src-tauri/exg_catalog.json. External scripts talk to the app through the WebSocket/HTTP API documented in docs/API.md, while local LLM and TTS wiring is covered in docs/LLM.md and extension points in docs/HOOKS.md. The device and model lists in the README are auto-generated and should be refreshed with npm run sync:readme:supported after changing support.
What are this agent's strengths and limitations?
- Local-first by design: acquisition, model inference and storage happen on the desktop, which suits researchers handling sensitive raw physiological data.
- Broad hardware coverage: the README lists BrainBit, OpenBCI, Emotiv, Muse, g.tec, Neurosity, NeuroSky, Ōura and others, plus any compatible LSL source.
- Auditable model catalog: src-tauri/exg_catalog.json enumerates 20 EEG/EXG foundation checkpoints across ZUNA, LUNA, REVE, LaBraM, EEGPT, CBraMod, SleepFM and more.
- Programmable surface: a WebSocket/HTTP API, local LLM and TTS integration, and a documented hooks mechanism make it embeddable in existing pipelines.
- Complete three-platform distribution: macOS dmg, Windows exe, Linux AppImage and a Homebrew cask keep install friction low.
- Explicitly not a medical device: no FDA/CE approval means it cannot be used for diagnosis or treatment, which blocks clinical adoption.
- You must supply your own EXG hardware and Hugging Face weights, and source installs require the Hugging Face CLI, npm and the Tauri/Rust toolchain.
- GPL-3.0-only licensing constrains closed-source redistribution or embedding in commercial products.
- The repository documents no server or container deployment path, so it cannot run as a headless service on a cluster.
- The README does not state which LLM/TTS models are used, their hardware acceleration requirements or quantization options, so inference performance cannot be estimated from the docs.
How does this agent compare with similar options?
Key facts side by side with the most closely related agents.
| Agent | Source review | Form / cost | Stars | Updated | Language | Full support on |
|---|---|---|---|---|---|---|
| NeuroSkill — Local-First EXG/BCI Neurofeedback Workbench This agent | 47 · Major gaps | Desktop appFree | ★ 103 | 3d ago | Rust | — |
| Principia | 66 · Some gaps | CLIFree + model costs | ★ 948 | 17d ago | Rich Text Format | — |
| Open Science Workbench | 52 · Major gaps | Desktop appFree + model costs | ★ 5.4k | today | TypeScript | Codex · Claude Code |
| ChatLab — Chat History Analyzer | 42 · Major gaps | Desktop appFree + model costs | ★ 7.5k | 4d ago | TypeScript | — |
How does FollowAgents rate this agent?
Why each dimension lost points
Evidence shows a local-first Tauri desktop BCI app, but repository-level permission boundaries are not stated in the visible files: no capability/permission manifest and no explicit declaration of microphone/camera/Bluetooth/filesystem/network access, so least_privilege scores 1 (present but thin). user_confirmation scores 0: no confirmation mechanism before destructive actions is described anywhere in the visible files. data_flow_transparency scores 1: the README mentions local LLM, LSL, remote rlsl-iroh streaming and a WebSocket/HTTP API, but does not state where data flows or whether it leaves the device. sensitive_data_handling scores 1: the project processes EEG/EXG and Oura physiological data, which is sensitive, yet no privacy policy, encryption or retention statement is visible. dependency_security scores 2: Cargo.toml explicitly patches GHSA-wrw7-89jp-8q8g (glib) and GHSA-2qph-qpvm-2qf7 (rand/phf_generator) and documents the cubek-matmul, btleplug and muda patches, which is verifiable dependency-security work; however the patches point at personal forks (eugenehp/*), widening the supply-chain trust surface, so full marks are withheld. external_effects scores 1: auto-updater plugin, Discord webhook and remote streaming create external side effects, but their boundaries are undocumented. rollback scores 1: an updater and version numbers exist, but no rollback/downgrade procedure is described. source_attribution scores 1: the README lists many third-party models and device vendors but gives no per-model licensing or attribution detail.
self_consistency scores 2: package.json version 0.0.129, README badges, CI workflows and the Cargo workspace member list are mutually consistent with no visible contradiction. dependency_availability scores 1: many dependencies are git-branch patches (eugenehp/cubek, eugenehp/btleplug, eugenehp/gtk-rs-core, eidola-ai/burn-mlx) plus local patches/ directories; if those branches are deleted or force-pushed the build is not reproducible, and Hugging Face model downloads and prebuilt llama libraries add external service dependencies. failure_messages scores 1: CI scripts contain some error messages and retry logic, but runtime failure messaging is not visible in the provided files.
audience_and_scenarios scores 2: the README clearly targets EXG/BCI researchers and lists devices, models and a documentation index. capability_boundaries scores 2: it prominently states 'Research use only — not a medical device' and that it must not be used for diagnosis or treatment, which is a clear boundary statement. trigger_precision scores 1: for a desktop app with CLI/daemon, the conditions under which acquisition starts, the LLM is invoked, or data is sent out are undefined in the visible files. environment_fit scores 2: separate macOS/Windows/Linux build and packaging scripts, a Homebrew cask and platform docs give real environment support.
information_architecture scores 2: the README is well structured and docs/ splits architecture, devices, metrics, API and development. install_notes scores 2: Homebrew, download links, npm run setup, hf download and tauri dev/build steps are given. naming_stability scores 2: crates are uniformly named skill-*, the package is neuroskill, and versioning is centralized. examples_and_faq scores 1: quickstart commands exist, but there are no usage examples, FAQ or troubleshooting guidance. known_limitations scores 2: it explicitly states it is not a medical device and not FDA/CE approved, and documents several upstream bugs and patches. license scores 3: the LICENSE file is the full GPL-3.0 text, package.json declares GPL-3.0-only, and the README and badge agree — three mutually corroborating sources. versioning_changelog scores 2: a CHANGELOG.md is referenced with fragment validation scripts and a CI gate, but no actual change history is visible. maintenance_responsibility scores 1: the publisher is unverified and no maintainer, governance or security contact is stated.
output_usability scores 2: the product output (real-time visualization, analysis, embeddings, search, API) is clearly useful for research and is supported by screenshots and docs. marginal_value scores 2: broad device and EXG foundation-model support plus local LLM/TTS, LSL and remote streaming differentiate it from generic tooling. cost_benefit scores 1: build cost is high (a Rust workspace of dozens of crates, Vulkan/ONNX/llama.cpp, model downloads, multi-platform signing and notarization) while the visible files give no performance or resource quantification, so the trade-off cannot be assessed.
claim_traceability scores 1: the device and model lists are marked auto-generated with sync scripts and a canonical source (src-tauri/exg_catalog.json), so some claims are traceable, but functional and security claims lack supporting evidence. cross_source_corroboration scores 1: license and version can be cross-checked across README/package.json/LICENSE, but security and privacy claims have no second source. fact_inference_separation scores 1: the README is mostly feature assertion and does not separate verified facts from design intent or flag unimplemented/untested capabilities.
- Not found in source: confirmation before actingTurn on (or add) a confirmation step before it acts, and try it in a sandbox or test environment before real data.
- The repository handles sensitive data such as EEG/EXG and Oura physiological signals, yet the visible files provide no privacy policy, retention or encryption statement; assess compliance before collecting real subject data.
- Cargo.toml patches several crates via personal fork branches (eugenehp/cubek, eugenehp/btleplug, eugenehp/gtk-rs-core, eidola-ai/burn-mlx); deletion or force-push of those branches breaks reproducibility and widens the supply-chain trust surface.
- The README explicitly states this is not a medical device and is not FDA/CE approved and must not be used for diagnosis or treatment; no clinical or health decision should rely on its output.
- Publisher identity is unverified and no maintainer, governance or security-disclosure channel is stated, leaving update and long-term maintenance responsibility unclear.
- The visible files do not describe the data flow or boundaries of the auto-updater, remote rlsl-iroh streaming, WebSocket/HTTP API or Discord webhook; confirm the network exposure surface before deployment.