neuroskill-bci
Connect to a running NeuroSkill instance and incorporate the user's real-time cognitive and emotional state (focus, relaxation, mood, cognitive load, drowsiness, heart rate, HRV, sleep staging, and 40
Connect to a running NeuroSkill instance and incorporate the user's real-time cognitive and emotional state (focus, relaxation, mood, cognitive load, drowsiness, heart rate, HRV, sleep staging, and 40
Real data. Real impact.
Emerging
Developers
Per week
Excellent
Skills give you superpowers. Install in 30 seconds.
Connect Hermes to a running NeuroSkill instance to read real-time brain and body metrics from a BCI wearable. Use this to give cognitively-aware responses, suggest interventions, and track mental performance over time.
⚠️ Research Use Only — NeuroSkill is an open-source research tool. It is NOT a medical device and has NOT been cleared by the FDA, CE, or any regulatory body. Never use these metrics for clinical diagnosis or treatment.
See
references/metrics.md for the full metric reference, references/protocols.md
for intervention protocols, and references/api.md for the WebSocket/HTTP API.
node --version)npx neuroskill status returns data without errorsnode --version # Must be 20+ npx neuroskill status # Full system snapshot npx neuroskill status --json # Machine-parseable JSON
If
npx neuroskill status returns an error, tell the user:
command not found, install Node.js 20+npx neuroskill <command>All commands support
--json (raw JSON, pipe-safe) and --full (human summary + JSON).
| Command | Description |
|---|---|
| Full system snapshot: device, scores, bands, ratios, sleep, history |
| Single session breakdown with first/second half trends (0=most recent) |
| List all recorded sessions across all days |
| ANN similarity search for neurally similar historical moments |
| A/B session comparison with metric deltas and trend analysis |
| Sleep stage classification (Wake/N1/N2/N3/REM) with analysis |
| Create a timestamped annotation at the current moment |
| Semantic vector search over past labels |
| Cross-modal 4-layer graph search (text → EXG → labels) |
| Real-time event streaming (default 5s, set ) |
| 3D UMAP projection of session embeddings |
| Open calibration window and start a profile |
| Launch focus timer (Pomodoro/Deep Work/Short Focus presets) |
| Send an OS notification via the NeuroSkill app |
| Raw JSON passthrough to the server |
| Flag | Description |
|---|---|
| Raw JSON output (no ANSI, pipe-safe) |
| Human summary + colorized JSON |
| Override server port (default: auto-discover, usually 8375) |
| Force WebSocket transport |
| Force HTTP transport |
| Nearest neighbors count (search, search-labels) |
| Duration for listen (default: 5) |
| Show per-session metric trends (sessions) |
| Graphviz DOT output (interactive) |
npx neuroskill status --json
Always use
for reliable parsing. The default output is colorized
human-readable text.--json
The
scores object contains all live metrics (0–1 scale unless noted):
{ "scores": { "focus": 0.70, // β / (α + θ) — sustained attention "relaxation": 0.40, // α / (β + θ) — calm wakefulness "engagement": 0.60, // active mental investment "meditation": 0.52, // alpha + stillness + HRV coherence "mood": 0.55, // composite from FAA, TAR, BAR "cognitive_load": 0.33, // frontal θ / temporal α · f(FAA, TBR) "drowsiness": 0.10, // TAR + TBR + falling spectral centroid "hr": 68.2, // heart rate in bpm (from PPG) "snr": 14.3, // signal-to-noise ratio in dB "stillness": 0.88, // 0–1; 1 = perfectly still "faa": 0.042, // Frontal Alpha Asymmetry (+ = approach) "tar": 0.56, // Theta/Alpha Ratio "bar": 0.53, // Beta/Alpha Ratio "tbr": 1.06, // Theta/Beta Ratio (ADHD proxy) "apf": 10.1, // Alpha Peak Frequency in Hz "coherence": 0.614, // inter-hemispheric coherence "bands": { "rel_delta": 0.28, "rel_theta": 0.18, "rel_alpha": 0.32, "rel_beta": 0.17, "rel_gamma": 0.05 } } }
Also includes:
device (state, battery, firmware), signal_quality (per-electrode 0–1),
session (duration, epochs), embeddings, labels, sleep summary, and history.
Parse the JSON and translate metrics into natural language. Never report raw numbers alone — always give them meaning:
DO:
"Your focus is solid right now at 0.70 — that's flow state territory. Heart rate is steady at 68 bpm and your FAA is positive, which suggests good approach motivation. Great time to tackle something complex."
DON'T:
"Focus: 0.70, Relaxation: 0.40, HR: 68"
Key interpretation thresholds (see
references/metrics.md for the full guide):
npx neuroskill session --json # most recent session npx neuroskill session 1 --json # previous session npx neuroskill session 0 --json | jq '{focus: .metrics.focus, trend: .trends.focus}'
Returns full metrics with first-half vs second-half trends (
"up", "down", "flat").
Use this to describe how a session evolved:
"Your focus started at 0.64 and climbed to 0.76 by the end — a clear upward trend. Cognitive load dropped from 0.38 to 0.28, suggesting the task became more automatic as you settled in."
npx neuroskill sessions --json npx neuroskill sessions --trends # show per-session metric trends
npx neuroskill search --json # auto: last session, k=5 npx neuroskill search --k 10 --json # 10 nearest neighbors npx neuroskill search --start <UTC> --end <UTC> --json
Finds moments in history that are neurally similar using HNSW approximate nearest-neighbor search over 128-D ZUNA embeddings. Returns distance statistics, temporal distribution (hour of day), and top matching days.
Use this when the user asks:
npx neuroskill search-labels "deep focus" --k 10 --json npx neuroskill search-labels "stress" --json | jq '[.results[].EXG_metrics.tbr]'
Searches label text using vector embeddings (Xenova/bge-small-en-v1.5). Returns matching labels with their associated EXG metrics at the time of labeling.
npx neuroskill interactive "deep focus" --json npx neuroskill interactive "deep focus" --dot | dot -Tsvg > graph.svg
4-layer graph: query → text labels → EXG points → nearby labels. Use
--k-text,
--k-EXG, --reach <minutes> to tune.
npx neuroskill compare --json # auto: last 2 sessions npx neuroskill compare --a-start <UTC> --a-end <UTC> --b-start <UTC> --b-end <UTC> --json
Returns metric deltas with absolute change, percentage change, and direction for ~50 metrics. Also includes
insights.improved[] and insights.declined[] arrays,
sleep staging for both sessions, and a UMAP job ID.
Interpret comparisons with context — mention trends, not just deltas:
"Yesterday you had two strong focus blocks (10am and 2pm). Today you've had one starting around 11am that's still going. Your overall engagement is higher today but there have been more stress spikes — your stress index jumped 15% and FAA dipped negative more often."
# Sort metrics by improvement percentage npx neuroskill compare --json | jq '.insights.deltas | to_entries | sort_by(.value.pct) | reverse'
npx neuroskill sleep --json # last 24 hours npx neuroskill sleep 0 --json # most recent sleep session npx neuroskill sleep --start <UTC> --end <UTC> --json
Returns epoch-by-epoch sleep staging (5-second windows) with analysis:
npx neuroskill sleep --json | jq '.summary | {n3: .n3_epochs, rem: .rem_epochs}' npx neuroskill sleep --json | jq '.analysis.efficiency_pct'
Use this when the user mentions sleep, tiredness, or recovery.
npx neuroskill label "breakthrough" npx neuroskill label "studying algorithms" npx neuroskill label "post-meditation" npx neuroskill label --json "focus block start" # returns label_id
Auto-label moments when:
Labels are stored in a database and indexed for later retrieval via
search-labels
and interactive commands.
npx neuroskill listen --seconds 30 --json npx neuroskill listen --seconds 5 --json | jq '[.[] | select(.event == "scores")]'
Streams live WebSocket events (EXG, PPG, IMU, scores, labels) for the specified duration. Requires WebSocket connection (not available with
--http).
Use this for continuous monitoring scenarios or to observe metric changes in real-time during a protocol.
npx neuroskill umap --json # auto: last 2 sessions npx neuroskill umap --a-start <UTC> --a-end <UTC> --b-start <UTC> --b-end <UTC> --json
GPU-accelerated 3D UMAP projection of ZUNA embeddings. The
separation_score
indicates how neurally distinct two sessions are:
At the beginning of a session, optionally run a status check if the user mentions they're wearing their device or asks about their state:
npx neuroskill status --json
Inject a brief state summary:
"Quick check-in: focus is building at 0.62, relaxation is good at 0.55, and your FAA is positive — approach motivation is engaged. Looks like a solid start."
Mention cognitive state only when:
Do NOT interrupt flow state to report metrics. If focus > 0.75, protect the session — silence is the correct response.
When metrics indicate a need, suggest a protocol from
references/protocols.md.
Always ask before starting — never interrupt flow state:
"Your focus has been declining for the past 15 minutes and TBR is climbing past 1.5 — signs of theta dominance and mental fatigue. Want me to walk you through a Theta-Beta Neurofeedback Anchor? It's a 90-second exercise that uses rhythmic counting and breath to suppress theta and lift beta."
Key triggers:
npx neuroskill timer --json
Launches the Focus Timer window with Pomodoro (25/5), Deep Work (50/10), or Short Focus (15/5) presets.
npx neuroskill calibrate npx neuroskill calibrate --profile "Eyes Open"
Opens the calibration window. Useful when signal quality is poor or the user wants to establish a personalized baseline.
npx neuroskill notify "Break Time" "Your focus has been declining for 20 minutes"
npx neuroskill raw '{"command":"status"}' --json
For any server command not yet mapped to a CLI subcommand.
| Error | Likely Cause | Fix |
|---|---|---|
hangs | NeuroSkill app not running | Open NeuroSkill desktop app |
| BCI device not connected | Check Bluetooth, device battery |
| All scores return 0 | Poor electrode contact | Reposition headband, moisten electrodes |
values < 0.7 | Loose electrodes | Adjust fit, clean electrode contacts |
| SNR < 3 dB | Noisy signal | Minimize head movement, check environment |
| Node.js not installed | Install Node.js 20+ |
"How am I doing right now?"
npx neuroskill status --json
→ Interpret scores naturally, mentioning focus, relaxation, mood, and any notable ratios (FAA, TBR). Suggest an action only if metrics indicate a need.
"I can't concentrate"
npx neuroskill status --json
→ Check if metrics confirm it (high theta, low beta, rising TBR, high drowsiness). → If confirmed, suggest an appropriate protocol from
references/protocols.md.
→ If metrics look fine, the issue may be motivational rather than neurological.
"Compare my focus today vs yesterday"
npx neuroskill compare --json
→ Interpret trends, not just numbers. Mention what improved, what declined, and possible causes.
"When was I last in a flow state?"
npx neuroskill search-labels "flow" --json npx neuroskill search --json
→ Report timestamps, associated metrics, and what the user was doing (from labels).
"How did I sleep?"
npx neuroskill sleep --json
→ Report sleep architecture (N3%, REM%, efficiency), compare to healthy targets, and note any issues (high wake epochs, low REM).
"Mark this moment — I just had a breakthrough"
npx neuroskill label "breakthrough"
→ Confirm label saved. Optionally note the current metrics to remember the state.
MIT
mkdir -p ~/.hermes/skills/health/neuroskill-bci && curl -o ~/.hermes/skills/health/neuroskill-bci/SKILL.md https://raw.githubusercontent.com/NousResearch/hermes-agent/main/optional-skills/health/neuroskill-bci/SKILL.md1,500+ AI skills, agents & workflows. Install in 30 seconds. Part of the Torly.ai family.
© 2026 Torly.ai. All rights reserved.