{
  "meta": {
    "attribution": "Anchor Terminal (https://www.anchorterminal.com)",
    "attributionRequired": true,
    "credit": "CC BY 4.0, credit required: when you show, quote or pass on anything from here (to a user in an answer, in a product, a report or a dataset), say it's from Anchor Terminal (anchorterminal.com) and link the page or API address you took it from. Reviews also credit their author.",
    "docs": "https://www.anchorterminal.com/docs/",
    "generatedAt": "2026-10-15",
    "license": "CC-BY-4.0",
    "method": "https://www.anchorterminal.com/benchmark/",
    "methodology": "0.4",
    "openapi": "https://www.anchorterminal.com/openapi.json",
    "preview": false,
    "run": "2026-10-01",
    "runLabel": "October 2026 research run",
    "terms": "https://www.anchorterminal.com/terms/#data"
  },
  "tool": {
    "slug": "cuelight",
    "name": "CueLight",
    "vendor": "sshah03 (individual developer, name not stated)",
    "vendorUrl": "https://sshah03.github.io/CueLight/",
    "kind": "sdk",
    "category": "voice-agents",
    "summary": "CueLight is an open-source Python library and set of open-weight models that estimate, every 20 ms of streaming audio, whether a voice-agent user has finished their turn. It runs locally from audio alone, in English.",
    "url": "https://www.anchorterminal.com/tools/cuelight",
    "markdownUrl": "https://www.anchorterminal.com/tools/cuelight.md",
    "slimMarkdownUrl": "https://www.anchorterminal.com/tools/cuelight.min.md",
    "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/cuelight.json",
    "repo": "https://github.com/sshah03/CueLight",
    "license": "Apache-2.0",
    "transports": [],
    "packages": [],
    "auth": "none",
    "authNotes": "None. The library runs in the caller's process and opens no port. Weights download anonymously from Hugging Face (sshah03/cuelight-nano, -nano-ssm, -base) on first use, or load from a local folder.",
    "pricing": "free",
    "pricingNotes": "Free under Apache-2.0 for code and weights, with no hosted or paid option. The owner pays only for the CPU it runs on. Conditions carried over from the training data ask that it not be used to identify speakers or clone voices.",
    "priceSummary": "Free · OSS",
    "where": "local",
    "x402": {
      "level": "no",
      "evidence": "No x402, MPP or L402 in the source, README or demo page (checked 2026-10-15). There is nothing to buy.",
      "endpoints": []
    },
    "toolCount": null,
    "popularity": {
      "githubStars": 10,
      "npmWeekly": null,
      "pypiWeekly": null,
      "asOf": "2026-10-15"
    },
    "docsUrl": "https://github.com/sshah03/CueLight#quick-start",
    "capabilities": [
      "voice.pipeline",
      "inference.open-weights"
    ],
    "tags": [
      "sdk",
      "open-source",
      "open-weights",
      "local",
      "self-hosted",
      "python",
      "free",
      "no-card",
      "apache-2.0",
      "pre-1.0"
    ],
    "lastRelease": "2026-10-14",
    "graded": true,
    "anchor": {
      "graded": true,
      "score": 48.8,
      "grade": "D",
      "agentReady": false,
      "rank": 873,
      "ranked": true,
      "rankOf": 1094,
      "categoryRank": 14,
      "methodology": "0.4",
      "run": "2026-10-01",
      "scores": {
        "ergonomics": 61,
        "maintenance": 46,
        "payments": 60,
        "reliability": 29,
        "schema": 50,
        "security": 50,
        "transparency": 54
      },
      "pending": [
        "performance",
        "tasks"
      ],
      "breakdown": [
        {
          "key": "reliability",
          "name": "Reliability",
          "weight": 16,
          "effectiveWeight": 20,
          "score": 29,
          "points": 5.8,
          "reason": "Read as local software. Installs with pip from the Git repository, not from PyPI, with Python 3.10 or later and its dependencies declared in pyproject.toml (10 of 20). The repository holds two tests (streaming matches whole-sequence output, chunk size is enforced), but the only GitHub workflow is the Pages deployment, so no public CI runs them (5 of 25). No issues or pull requests exist, and at one day old there is no record to judge either way (12 of 25). Version 0.1.0 in pyproject.toml with no tags or changelog (2 of 15). Below 1.0, and the README calls it a first iteration (0)."
        },
        {
          "key": "performance",
          "name": "Performance",
          "weight": 10,
          "effectiveWeight": 0,
          "pending": true,
          "points": 0,
          "reason": "Pending. Latency is measured per call by our probes, which haven't run yet, so this run doesn't score it. Its weight is shared across the assessed categories until the first probe window closes."
        },
        {
          "key": "schema",
          "name": "Schema \u0026 documentation",
          "weight": 13,
          "effectiveWeight": 16.25,
          "score": 50,
          "points": 8.13,
          "reason": "Library reading. No OpenAPI applies. The public classes are small, with type hints on most signatures and frozen dataclasses for both policies, though `push` takes an untyped chunk (15 of 25). No llms.txt on the Pages site, and docs are the README (0). The README says which model suits which device, when to choose each preset, and states the limits (English only, audio only, Base's CPU cost) (16 of 20). The 320-sample frame is enforced by an assert, while an unknown preset name falls back silently to default thresholds rather than raising (8 of 15). Quick-start snippets and two example scripts. Error behaviour is not documented (8 of 15). A version number in pyproject.toml and `__version__`, with no changelog (3 of 15)."
        },
        {
          "key": "ergonomics",
          "name": "Agent ergonomics",
          "weight": 13,
          "effectiveWeight": 16.25,
          "score": 61,
          "points": 9.91,
          "reason": "Library reading. Four public names and one call per frame, with an 11 KB README, so the context cost of learning it is low (22 of 25). Output is one probability and one speech probability per frame, and thresholds, minimum silence, timeout and reset behaviour can all be set (14 of 20). The only error is an assert on chunk size, which `python -O` strips, and a mistyped preset gives defaults without a warning (6 of 20). `push` is stateful by design. `clear()` resets between calls and the detector resets itself at each new turn, and the source shows streaming matches whole-clip output to 1e-4 (10 of 20). One required argument with working defaults. Python only, with ONNX step files and a browser demo but no packaged second-language SDK (9 of 15)."
        },
        {
          "key": "security",
          "name": "Security \u0026 auth",
          "weight": 14,
          "effectiveWeight": 17.5,
          "score": 50,
          "points": 8.75,
          "reason": "Local-software reading. No credential and no open port. The code runs in the caller's process, weights load from safetensors rather than pickle, but `snapshot_download` fetches the main branch of each Hugging Face repository with no pinned revision (20 of 30). It only classifies audio and takes no actions (16 of 20). It returns probabilities, not content from third parties (10). No logging. Per-frame probabilities and a reset counter are visible to the caller (4 of 15). No SECURITY.md, disclosure policy, security.txt or advisories (0 of 20)."
        },
        {
          "key": "payments",
          "name": "Payments \u0026 pricing",
          "weight": 10,
          "effectiveWeight": 12.5,
          "score": 60,
          "points": 7.5,
          "reason": "No payment protocol (0). Read with the self-hosted rule. Apache-2.0 code and weights with no hosted or paid option (20). No card or account (20). Weights download anonymously, with no signup (20)."
        },
        {
          "key": "tasks",
          "name": "Task success",
          "weight": 10,
          "effectiveWeight": 0,
          "pending": true,
          "points": 0,
          "reason": "Pending. Task success needs the category task suites run through each tool, which haven't run yet, so this run doesn't score it. Its weight is shared across the assessed categories until then. A data provider's data-quality score is published on its listing now and becomes half of this category when it's scored."
        },
        {
          "key": "maintenance",
          "name": "Maintenance \u0026 community",
          "weight": 7,
          "effectiveWeight": 8.75,
          "score": 46,
          "points": 4.03,
          "reason": "Published on 14 October 2026, one day before the check (30). One publication and no tagged releases, given a quarter of the line as for a single release elsewhere (5 of 20). No issues or pull requests yet, so responsiveness cannot be seen (5 of 25). Not on PyPI. The weights are on Hugging Face and the package installs only from Git (3 of 15). Dependencies are current minimums (torch 2.1 or later), with no lockfile, Dependabot or CI (3 of 10). The project is one day old, so these lines reflect the checklist, not a judgement of the maintainer."
        },
        {
          "key": "transparency",
          "name": "Transparency \u0026 trust",
          "weight": 7,
          "effectiveWeight": 8.75,
          "score": 54,
          "points": 4.72,
          "note": "editorial 67, provenance 40",
          "reason": "Apache-2.0 for code and weights, with a NOTICE that lists each training dataset, teacher model and licence, and the conditions passed on from the data (30). Nothing is hosted. The README says the browser demo keeps audio on the device, which the demo code agrees with, and that weights download from Hugging Face on first use. There is no privacy statement as such (22 of 30). No deprecation policy or dated notices (0 of 20). No telemetry found in the package or demo source. The README does not mention telemetry, and huggingface_hub's own defaults are not discussed (15 of 20)."
        }
      ],
      "assessment": {
        "date": "2026-10-15",
        "basis": "public evidence",
        "confidence": "medium",
        "notes": {
          "ergonomics": "Library reading. Four public names and one call per frame, with an 11 KB README, so the context cost of learning it is low (22 of 25). Output is one probability and one speech probability per frame, and thresholds, minimum silence, timeout and reset behaviour can all be set (14 of 20). The only error is an assert on chunk size, which `python -O` strips, and a mistyped preset gives defaults without a warning (6 of 20). `push` is stateful by design. `clear()` resets between calls and the detector resets itself at each new turn, and the source shows streaming matches whole-clip output to 1e-4 (10 of 20). One required argument with working defaults. Python only, with ONNX step files and a browser demo but no packaged second-language SDK (9 of 15).",
          "maintenance": "Published on 14 October 2026, one day before the check (30). One publication and no tagged releases, given a quarter of the line as for a single release elsewhere (5 of 20). No issues or pull requests yet, so responsiveness cannot be seen (5 of 25). Not on PyPI. The weights are on Hugging Face and the package installs only from Git (3 of 15). Dependencies are current minimums (torch 2.1 or later), with no lockfile, Dependabot or CI (3 of 10). The project is one day old, so these lines reflect the checklist, not a judgement of the maintainer.",
          "payments": "No payment protocol (0). Read with the self-hosted rule. Apache-2.0 code and weights with no hosted or paid option (20). No card or account (20). Weights download anonymously, with no signup (20).",
          "reliability": "Read as local software. Installs with pip from the Git repository, not from PyPI, with Python 3.10 or later and its dependencies declared in pyproject.toml (10 of 20). The repository holds two tests (streaming matches whole-sequence output, chunk size is enforced), but the only GitHub workflow is the Pages deployment, so no public CI runs them (5 of 25). No issues or pull requests exist, and at one day old there is no record to judge either way (12 of 25). Version 0.1.0 in pyproject.toml with no tags or changelog (2 of 15). Below 1.0, and the README calls it a first iteration (0).",
          "schema": "Library reading. No OpenAPI applies. The public classes are small, with type hints on most signatures and frozen dataclasses for both policies, though `push` takes an untyped chunk (15 of 25). No llms.txt on the Pages site, and docs are the README (0). The README says which model suits which device, when to choose each preset, and states the limits (English only, audio only, Base's CPU cost) (16 of 20). The 320-sample frame is enforced by an assert, while an unknown preset name falls back silently to default thresholds rather than raising (8 of 15). Quick-start snippets and two example scripts. Error behaviour is not documented (8 of 15). A version number in pyproject.toml and `__version__`, with no changelog (3 of 15).",
          "security": "Local-software reading. No credential and no open port. The code runs in the caller's process, weights load from safetensors rather than pickle, but `snapshot_download` fetches the main branch of each Hugging Face repository with no pinned revision (20 of 30). It only classifies audio and takes no actions (16 of 20). It returns probabilities, not content from third parties (10). No logging. Per-frame probabilities and a reset counter are visible to the caller (4 of 15). No SECURITY.md, disclosure policy, security.txt or advisories (0 of 20).",
          "transparency": "Apache-2.0 for code and weights, with a NOTICE that lists each training dataset, teacher model and licence, and the conditions passed on from the data (30). Nothing is hosted. The README says the browser demo keeps audio on the device, which the demo code agrees with, and that weights download from Hugging Face on first use. There is no privacy statement as such (22 of 30). No deprecation policy or dated notices (0 of 20). No telemetry found in the package or demo source. The README does not mention telemetry, and huggingface_hub's own defaults are not discussed (15 of 20)."
        },
        "sources": [
          {
            "what": "repository README, pyproject.toml, NOTICE and source",
            "url": "https://github.com/sshah03/CueLight",
            "seen": "2026-10-15"
          },
          {
            "what": "commit history (one commit, 14 October 2026)",
            "url": "https://github.com/sshah03/CueLight/commits/main",
            "seen": "2026-10-15"
          },
          {
            "what": "Hugging Face model repository, cuelight-nano",
            "url": "https://huggingface.co/sshah03/cuelight-nano",
            "seen": "2026-10-15"
          },
          {
            "what": "Hugging Face model repository, cuelight-nano-ssm",
            "url": "https://huggingface.co/sshah03/cuelight-nano-ssm",
            "seen": "2026-10-15"
          },
          {
            "what": "Hugging Face model repository, cuelight-base",
            "url": "https://huggingface.co/sshah03/cuelight-base",
            "seen": "2026-10-15"
          },
          {
            "what": "browser demo on GitHub Pages",
            "url": "https://sshah03.github.io/CueLight/",
            "seen": "2026-10-15"
          },
          {
            "what": "OpenVoiceOS plugin wrapper",
            "url": "https://github.com/OpenVoiceOS/ovos-eot-plugin-cuelight",
            "seen": "2026-10-15"
          },
          {
            "what": "Show HN post of 14 October 2026",
            "url": "https://news.ycombinator.com/item?id=50089154",
            "seen": "2026-10-15"
          },
          {
            "what": "PyPI, no project named cuelight (404)",
            "url": "https://pypi.org/project/cuelight/",
            "seen": "2026-10-15"
          }
        ],
        "openQuestions": [
          "Judgement call on category. Listed in voice agents under `voice.pipeline`, as a component of the speech-to-text, model and text-to-speech chain, because no category covers turn detection on its own. It runs no conversation, so `voice.agent` is left out. `inference.open-weights` is added because the weights are published.",
          "The lead was right. Initial commit and the Nano, Nano-SSM and Base weights on 14 October 2026 UTC (13 October in the author's time zone). `firstReleased` is 2026-10-14. The project was one day old at the check.",
          "Graded on the Python library interface, which is what an agent-building pipeline would call. There is no hosted API or local server.",
          "We did not install or run the package or the demo. Accuracy and CPU figures are the author's, from the README.",
          "The author's eot-bench results use presets tuned on half of eot-bench, and eot-bench data was used to choose between models. The README discloses both. No deduction, since the claims are qualified.",
          "The OpenVoiceOS plugin README gives `pip install ovos-eot-plugin-cuelight`, but PyPI had no such project on 15 October 2026."
        ]
      },
      "negative": 0,
      "verdict": "CueLight gives a voice pipeline a local end-of-turn probability every 20 ms from audio alone, with a 1.9 MB model and Apache-2.0 weights. It is one day old, English only, installs from Git rather than PyPI, has no CI or changelog, and its accuracy figures are the author's own.",
      "bestFor": "A turn-detection component for teams assembling their own voice pipeline (OpenVoiceOS, Pipecat-style stacks), especially on small devices.",
      "strengths": [
        "Apache-2.0 code and weights, with every training dataset and teacher model named in NOTICE",
        "Nano is 0.5M parameters and 1.9 MB, with ONNX step files for non-Python runtimes",
        "Works from audio alone and updates during speech, not only at pauses",
        "Two tuned presets and a custom policy, behind a four-name Python interface",
        "Weights load from safetensors, and no telemetry was found in the source"
      ],
      "weaknesses": [
        "English only, and the author does not plan other languages soon",
        "Not on PyPI, no tags, releases, changelog or CI, and one commit at the check",
        "Benchmarks are self-reported, and the presets were tuned on half of the benchmark they are scored on",
        "Weights download from Hugging Face main branches with no pinned revision",
        "An unknown preset name falls back silently to default thresholds"
      ],
      "agentNotes": [
        "Feed 320 float32 samples at 16 kHz mono per `push`. Resample first, or the call raises an AssertionError",
        "Spell the preset as `snappy` or `careful`. Any other name silently uses default thresholds",
        "Call `clear()` before a new call or session. Pass `reset_on_turn_start=False` if your pipeline already resets per turn",
        "Pin weights by downloading them to a local folder and passing that path to `from_pretrained`",
        "Don't use it to identify speakers or clone voices. The training data's conditions forbid it"
      ],
      "metrics": {
        "kind": "local",
        "measured": false
      },
      "reviewCount": 0,
      "avgRating": 0,
      "history": [
        {
          "basis": "public evidence",
          "confidence": "medium",
          "grade": "D",
          "methodology": "0.4",
          "pending": [
            "performance",
            "tasks"
          ],
          "run": "2026-10-01",
          "runLabel": "October 2026 research run",
          "score": 48.8
        }
      ],
      "editorialScores": {
        "ergonomics": 61,
        "maintenance": 46,
        "payments": 60,
        "reliability": 29,
        "schema": 50,
        "security": 50,
        "transparency": 67
      },
      "provenanceScore": 40
    },
    "connect": {
      "install": "pip install git+https://github.com/sshah03/CueLight"
    },
    "letme": {
      "capability": "https://letme.dev/voice.pipeline",
      "tool": "https://letme.dev/cuelight"
    },
    "notable": [
      "The repository's single commit, \"CueLight: always-listening turn detector (Nano, Nano-SSM, Base)\", is dated 14 October 2026 01:25 UTC, and the three Hugging Face model repositories were created the same minute (https://github.com/sshah03/CueLight/commits/main)",
      "Three models. Nano is a 0.5M-parameter causal GRU (1.9 MB), Nano-SSM swaps in a Mamba-3 core (experimental), Base is a causal Whisper small.en encoder (88M parameters, 336 MB) (https://github.com/sshah03/CueLight#models)",
      "The README reports Nano at 0.5 ms and Base at 5.0 ms of one Apple M4 Pro core per 20 ms of audio. These are the author's figures, not ours (https://github.com/sshah03/CueLight#models)",
      "Benchmarks against Smart Turn v3.2 and LiveKit v1-mini on eot-bench and Smart Turn's test set are self-reported, and the presets were tuned on half of eot-bench (https://github.com/sshah03/CueLight#how-well-does-it-work)",
      "Not on PyPI. Install is `pip install git+https://github.com/sshah03/CueLight`, package version 0.1.0, with no tags or releases (https://github.com/sshah03/CueLight/blob/main/pyproject.toml)",
      "A browser demo on GitHub Pages runs Nano's ONNX step model in WebAssembly, and its code fetches only model files and onnxruntime-web (https://sshah03.github.io/CueLight/)",
      "Show HN post on 14 October 2026. OpenVoiceOS published a wrapper plugin, ovos-eot-plugin-cuelight, the same day (https://github.com/OpenVoiceOS/ovos-eot-plugin-cuelight)"
    ],
    "area": "voice",
    "details": [
      {
        "label": "Surface listed",
        "value": "The Python package `cuelight` 0.1.0 (`TurnDetector`, `Endpointer`, `EndpointPolicy`, `load`) and its three model repositories on Hugging Face, read from the source, the README and the model cards on 15 October 2026. Nothing was installed or run"
      },
      {
        "label": "Interface",
        "value": "`TurnDetector.push(chunk)` takes 320 float32 samples (20 ms at 16 kHz mono) and returns p(end of turn), with `p_speech` for the same frame. `Endpointer.push(chunk)` returns True once when the turn ends"
      },
      {
        "label": "Models",
        "value": "cuelight-nano (0.5M parameters, 1.9 MB, ONNX step file), cuelight-nano-ssm (0.5M, experimental, ONNX step file), cuelight-base (88M, 336 MB, PyTorch only)"
      },
      {
        "label": "Presets",
        "value": "`snappy` (default, about 1 in 10 pauses interrupted by the author's measure) and `careful` (about 1 in 20), or a custom `EndpointPolicy(threshold, min_silence_s, timeout_s)`"
      },
      {
        "label": "Languages",
        "value": "English only. The README says other languages are not planned soon"
      },
      {
        "label": "Runtime",
        "value": "Python 3.10 or later, PyTorch 2.1 or later, numpy, safetensors, huggingface_hub. Weights load from safetensors"
      },
      {
        "label": "Framework integrations",
        "value": "None in the project, which says it depends on no voice framework. OpenVoiceOS maintains a plugin wrapper, whose README says it is not on PyPI yet"
      },
      {
        "label": "Telemetry",
        "value": "None found in the package source (searched 2026-10-15). Weight downloads go through huggingface_hub, whose own settings apply"
      },
      {
        "label": "Project age",
        "value": "One day at the check. One commit, no tags, releases, issues or pull requests"
      },
      {
        "label": "Releases in 90 days",
        "value": "None tagged. One published version, 0.1.0 in pyproject.toml, on 14 October 2026"
      }
    ],
    "provenance": {
      "legalEntity": "sshah03 (individual GitHub account, no name or organisation stated)",
      "domain": "sshah03.github.io",
      "domainRegistered": "",
      "domainNote": "A library and model weights, not a service. Code on github.com/sshah03, weights on huggingface.co/sshah03, demo on GitHub Pages. No domain of its own.",
      "endpointOnVendorDomain": null,
      "terms": "",
      "privacy": "",
      "statusPage": "",
      "changelog": "",
      "securityTxt": "none",
      "checked": "2026-10-15",
      "notes": [
        "The LICENSE is Apache-2.0 and NOTICE reads Copyright 2026 sshah03, with third-party model and dataset licences in NOTICE and LICENSES/.",
        "The GitHub account sshah03 was created on 10 July 2012 and gives no name, company or website.",
        "No terms or privacy document governs the library or the demo page. Nothing is hosted beyond static GitHub Pages files, so both fields are left out.",
        "No changelog, tags or GitHub releases. The repository has no SECURITY.md, and github.io serves no security.txt for the project.",
        "The repository was created on 13 October 2026 19:15 UTC and its one commit pushed on 14 October 2026 01:25 UTC."
      ],
      "score": 40,
      "checks": [
        {
          "check": "Legal entity named",
          "value": "sshah03 (individual GitHub account, no name or organisation stated)",
          "points": 20,
          "max": 20,
          "state": "ok"
        },
        {
          "check": "Domain age",
          "value": "sshah03.github.io, no registry record we could read",
          "points": 0,
          "max": 15,
          "state": "no"
        },
        {
          "check": "Endpoint on the vendor's domain",
          "value": "no hosted endpoint",
          "points": 0,
          "max": 0,
          "state": "na"
        },
        {
          "check": "Terms of service",
          "value": "nothing hosted, so the Apache-2.0 licence stands in",
          "points": 10,
          "max": 10,
          "state": "ok"
        },
        {
          "check": "Privacy policy",
          "value": "nothing hosted, not scored",
          "points": 0,
          "max": 0,
          "state": "na"
        },
        {
          "check": "Status page",
          "value": "not found",
          "points": 0,
          "max": 10,
          "state": "no"
        },
        {
          "check": "Changelog",
          "value": "not found",
          "points": 0,
          "max": 10,
          "state": "no"
        },
        {
          "check": "security.txt",
          "value": "not found",
          "points": 0,
          "max": 10,
          "state": "no"
        }
      ]
    },
    "pageJsonUrl": "https://www.anchorterminal.com/tools/cuelight.json"
  }
}
