{
  "schema": "leumas.docs.page/1",
  "id": "skill:leumas-studio#domains/eeg",
  "slug": "skills/leumas-studio/domains/eeg",
  "kind": "tools",
  "bucket": "skill",
  "title": "EEG Lab — what you can do",
  "name": "EEG Lab",
  "eyebrow": "what you can do",
  "chip": null,
  "summary": "<!-- GENERATED by ops/tools/skill-sync — do not edit by hand. Run pnpm skills:sync. -->",
  "keywords": [
    "leumas-studio",
    "fetch remember",
    "skill-sync",
    "skills",
    "pnpm",
    "edit",
    "hand",
    "generated"
  ],
  "audience": "both",
  "funnel": {
    "product": null,
    "cta": null
  },
  "body": "<!-- GENERATED by ops/tools/skill-sync — do not edit by hand. Run `pnpm skills:sync`. -->\n\n# EEG Lab — what you can do\n\n`/admin/d/eeg` · pillar `devices`\n\nRead a Neurosity crown, train binary intent grids, and decode a trained intention into a trigger that runs anything.\n\n## Fetch this, never remember it\n\nThese change per install and per release. Call for them - a list written here would be a future lie.\n\n| What | Call | Why |\n|---|---|---|\n| whether a crown is connected, and whether it is simulated | `GET /api/eeg/status` | ALWAYS READ THIS FIRST. `simulated: true` means the bands are generated, not measured — anything trained from them is trained on a sine wave. `configured: false` means no credential exists yet, which is the ordinary first-run state and not an error. |\n| the grids and their quadrants | `GET /api/eeg/grids` | each quadrant is one binary axis. `settings.scoreThreshold`, `minMatches` and `cooldownMs` are what decide whether a decode runs anything — they are the answer to \"it recognises me but nothing happens\". |\n| what a quadrant has been trained on | `GET /api/eeg/grids/:gridId/samples` | a quadrant with samples on only one pole will match almost anything. The counts per labelRole are the honest measure of how much training exists. |\n| the trained models | `GET /api/eeg/grids/:gridId/models` | keyed by quadrant. A quadrant absent from this map has never been trained, which reads on screen as \"resting\" and is a setup problem rather than a signal. |\n| what a thought is bound to run | `GET /api/eeg/bindings` | each is \"when I think X, do Y\", stored as an ordinary rule. `allowSimulated: true` on any of them means a SIMULATED crown can fire it, which is fine for a demo and wrong for a door. |\n| bind a thought to a function | `POST /api/eeg/bindings` | {intent, run, props} is the whole body. The intent must be spelled as it was TRAINED — a typo compiles to a condition that can never be true, so the rule arms green and never fires. Read the vocabulary first. |\n| the poles this grid can actually produce | `GET /api/eeg/grids/:gridId/vocabulary` | the closed set a binding may name, each marked with whether its axis is trained. Bind against this rather than against what the operator called it in conversation. |\n| turn a decode into a sentence, or into a chosen action | `POST /api/eeg/grids/:gridId/interpret` | deterministic by default; `useModel` adds a language model and `choose` makes it pick an action id. It NEVER runs what it picks. `usedModel: false` in the reply means you are reading the deterministic phrase — check `note` for why. |\n| one decode of the newest frame | `GET /api/eeg/grids/:gridId/decode` | returns every quadrant's score, the command they compose, and whether it would fire. 409 means no frame has arrived — connect a crown first. |\n| the live frame feed | `GET /api/eeg/stream` | SSE, about four frames a second, each carrying band power, the vendor metrics and a raw preview. It holds a crown session open: the server closes the session when the last watcher leaves, so do not hold this open to poll. |\n\n## Tabs\n\nEvery one is a real URL. A tab with its own section below carries a real job.\n\n| Tab | Path | Group | What it is for |\n|---|---|---|---|\n| `crown` | - | The headset | Connect a Neurosity crown, watch signal quality, and see the live bands. |\n| `signal` | - | The headset | Per-electrode contact and the raw trace — where to look when nothing decodes. |\n| `grids` | - | The lab | The binary intent grids: each quadrant is one axis, drawn as a 26x26 sheet. |\n| `training` | - | The lab | Hold an intention, capture it as a pole, and train the quadrant on what you captured. |\n| `models` | - | The lab | What each quadrant has learned, how much it was trained on, and how to retrain it. |\n| `bind` | - | The output | When I think YES, do this. One pole, one action, no language model in the way. |\n| `listen` | - | The output | Live decoding: the moving cell, the command it spells, and whether it would fire. |\n| `apps` | - | The output | Watch a metric and fire a trigger. No code is written and none is run. |\n\n## API\n\nMounted prefixes that serve this domain: `/api/eeg`\n\nThe full route table is `leumas-capabilities/reference/api-routes.md`.\n\n",
  "source": {
    "path": ".claude/skills/leumas-studio/reference/domains/eeg.md",
    "blobSha": "",
    "commit": "",
    "committedAt": "",
    "provenance": "no-git",
    "bytes": 4253,
    "hash": "e948b0510461c9312b085d494798d07f456f081d"
  },
  "urls": {
    "html": "/p/skills/leumas-studio/domains/eeg",
    "json": "/docs/skills/leumas-studio/domains/eeg.json",
    "md": "/docs/skills/leumas-studio/domains/eeg.md"
  },
  "links": {
    "composes": [],
    "usedBy": [],
    "product": [],
    "howTo": [],
    "skills": []
  }
}
