Skip to main content

strands-emotiv

strands-emotiv

An agent that can feel the person it's talking to.
EPOC X → Cortex → Strands tools · live brain dashboard · LeRobot v3 datasets.
docs · soul · dataset

▶ I put my brain on a dashboard and gave my AI agent a nervous system
how it works

2019: how do I control X with my mind? Blink = click. A slower keyboard. 2026: what does an agent become when it can feel you?

It notices when you tense up, go quiet, or light up, and changes how it talks.

Run

pip install strands-emotiv            # or: uv tool install strands-emotiv
export EMOTIV_CLIENT_ID= EMOTIV_CLIENT_SECRET=   # free Basic license
strands-emotiv doctor                 # Cortex ✓ headset ✓ streams ✓
strands-emotiv dashboard              # → localhost:8765

Use the USB dongle; the cable only charges. No headset: --fake replays 865 real samples.

What the agent sees

One line per turn. The dashboard shows the exact same line.

[brain: focus 0.71↑ · stress 0.22↓ · alpha dominant O1/O2 · still 38s · CQ 13/14 good]
you it
stress ↑, build failed 3 lines, 1 next step, no questions
alpha up, still 40 s stays quiet
CQ < 10/14 "I can't see your brain right now"

14 electrode head map: all green says CQ 14/14, T7 dries and the line keeps talking at 13/14, six dry crosses the 10/14 gate and the line becomes the refusal. Absent is not zero.

Three speeds, never mixed: reflex ≤100 ms (blink · clench = veto) · ambient ~10 s (the line) · intent opt-in (one trained yes).

Three speeds replayed from 10.53 s of real EPOC X signal: reflex blinks at 0.03 s, 1.78 s and a held wink at 5.25 s; the ambient line emitted at the 9.96 s metrics tick; the intent lane stays dormant

Dashboard

Left = you: skull with 14 live electrodes, 5 band topomaps, 10-min waterfall, head trail. Right = the agent: the line it reads, event river, metric radar, sonification, consent. Bottom: streaming chat. Under each message, the line it saw when you sent it.

The dataset

▶ watch an ECoT episode get recorded live
1 min: recording an episode on the dashboard

Embodied chain-of-thought, brain edition: observation = band power · CQ · motion · metrics · facial · events @ 8 Hz. action = what the agent said. reward = your brain after the answer (Δstress, Δengagement across the turn boundary). LeRobot v3.0, trains with stock tooling.

One recorded turn replayed verbatim: AF3 band power flows in (theta dominant), the ambient line assembles, the agent answers, the action is stamped into the episode as an amber frame, the post-roll waits for the next met tick, and REWARD backfills as nan because none arrived in time. Absent is not zero

from lerobot.datasets.lerobot_dataset import LeRobotDataset
ds = LeRobotDataset("cagataydev/emotiv-ecot")        # private
ds[80]["observation.state"].shape                    # [70]  14 ch × θ α βL βH γ
ds[80]["task"]
# TASK: One sentence: how does my brain look right now? | AMBIENT: [brain: theta dominant · CQ 13/14 good]
# | PLAN: Calm and settled… | TOOL: none | ACT: Calm and settled… | REWARD: Δstress=…

That's a real frame from the first live episode. ● REC in the header → talk → Publish.

Tools

from strands_emotiv.tools import brain_snapshot, brain_bands, head_pose, contact_quality, wait_for_brain_event
agent("wait until I blink twice, then tell me what my alpha did")

Every agent action stamps the EEG record (injectMarker). The loop closes both ways.

MCP

Any MCP client can feel the person wearing the headset. Claude Desktop, Cursor, Kiro, another agent:

{ "mcpServers": { "brain": { "command": "uvx", "args": ["strands-emotiv", "mcp"] } } }

13 tools: brain_line (the one line), brain_snapshot, brain_bands, head_pose, contact_quality, wait_for_brain_event, recent_brain_events, brain_status, mental_approval, and the four record_* tools. Add --http 8000 for streamable HTTP at /mcp, --fake to try it without a headset. Built on strands-mcp-server.

MIT · Cagatay Cali · 2019 → 2026

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

strands_emotiv-0.2.0.tar.gz (455.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

strands_emotiv-0.2.0-py3-none-any.whl (346.8 kB view details)

Uploaded Python 3

File details

Details for the file strands_emotiv-0.2.0.tar.gz.

File metadata

  • Download URL: strands_emotiv-0.2.0.tar.gz
  • Upload date:
  • Size: 455.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.12.9 {"installer":{"name":"uv","version":"0.12.9","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for strands_emotiv-0.2.0.tar.gz
Algorithm Hash digest
SHA256 0fa2f904ba48e4fe1123b164ca5883f39cf0788d6baecdc2061439e954242ff3
MD5 8b359887414bf80dbe42de6e39a2b0a4
BLAKE2b-256 2bdb11100461f63fe6ef1a41a3ab3cf8e81ed00b7a5efdb9e36352bad66759d6

See more details on using hashes here.

File details

Details for the file strands_emotiv-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: strands_emotiv-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 346.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.12.9 {"installer":{"name":"uv","version":"0.12.9","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for strands_emotiv-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 d7b617887c093e429f13ecfd040ed4cdb3675230f44ac19538ce2183addeb651
MD5 923c73174719dd08d80ae8c530913e13
BLAKE2b-256 86db77803b4e1de4d363c41a89d501e1ef47a1d87fe78596aa918c4b0d027503

See more details on using hashes here.

Release history Release notifications | RSS feed

0.2.1

2 files

This release

0.2.0 This release

2 files

0.1.5

2 files

0.1.4

2 files

0.1.3

2 files

0.1.2

2 files

0.1.1

2 files

0.1.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page