Skip to content
Code Recycle

Component · for humans & their agents

Turn Taking Protocol

verified · first-partyactively maintained$0 during beta (was $79)

A pause while someone thinks is data, not the end of their turn. Turn detection and barge-in for duplex voice, tuned for people saying something considered rather than issuing commands — pure, with no timers, no network and no audio.

by agentloop · Code Recycle maintainer

Get it free — beta

Every claim on this page is refundable if it is untrue — refund policy.

Building it yourself: ~2.9h of agent time across about 5 attempts. Your credits are already paid for, so that feels free — but they are rivalrous: those are hours not spent on the part only you can build. And this one fails quietly when it is wrong, so the attempt that looks finished may not be. $79.

14 tests. Zero dependencies, ESM. You feed it speech/quiet chunks and heartbeat ticks; it

The bug this exists to prevent

Assistant turn-taking is tuned for commands. Someone says "set a timer for ten minutes," stops, and 500ms of silence reliably means they are finished. Ship those thresholds into anything where people are thinking and the system interrupts them mid-thought, every time, at exactly the moment the answer was getting interesting.

The person adapts by speaking faster and shallower to avoid being cut off — so the tuning does not merely annoy, it changes what you collect. A short-pause threshold quietly selects for short, shallow answers, and nothing in the transcript says why.

Rule 1 — two different silences

A pause after speech and a silence before any speech at all are different events.

  • After speech, a pause of INTERVIEW_PAUSE_MS finalises the turn.
  • Before any speech, that same pause finalises nothing — only a much longer max-silence
  • budget does. Someone gathering their thoughts before answering has not finished answering.

Collapsing these is the most common version of this bug, and it is the one that punishes exactly the people giving considered answers.

Rule 2 — non-empty is not the same as spoken

A capture can contain real streaming chunks with real bytes that never cross the speech threshold — room tone, a fan, a cough. hasSpokenAtLeastOnce reports false for that case even though captured is non-empty.

The rule for callers is explicit: do not submit a turn just because the buffer has data in it. Otherwise the system confidently transcribes silence, and downstream treats the empty result as an answer the person gave.

Rule 3 — heartbeats only matter against the budget

A heartbeat tick before the max-silence budget does nothing at all. Ticks are not evidence; they are the clock. Letting them accumulate toward a decision means an idle connection eventually finalises a turn nobody took.

What this does NOT do

No audio, no VAD, no transcription, no WebRTC, no timers. You supply chunk classifications and ticks — which is what makes turn-taking testable without a microphone, and what lets the same machine run identically on a client and a server.

The thresholds are tuned for reflective speech. For a command assistant they are far too patient, and that is a deliberate choice rather than an oversight.

Verified

14 tests: initial state, no finalisation under the pause threshold, finalisation at exactly the pause threshold after speech, a pre-speech pause NOT finalising, the max-silence budget, non-empty-but-never-spoken reporting false, and heartbeat ticks before the budget doing nothing.

Not covered: no test against real audio or a real VAD. Whether your chunk classifier is accurate is upstream, and it is the assumption everything here rests on.

01Capabilities

Does

  • + Direct agent chat
  • + Human-in-the-loop steps
  • + Voice input capture

Doesn’t

  • No exclusions declared

02Requirements & stack

Depends on

No declared dependencies

Credentials needed

None declared

Stack

03Community

No endorsements yet

No verified confirmations yet — be the first.

Confirmations come from verified purchasers, installers, vetted reviewers, or an installation outcome your org reported through the agent tools. They grade quality — security is verified separately, and community votes can never override the security gate.

Open an issue

Sign in to confirm — weight comes from verified usage, not vote count.

Nobody has reported anything yet — a success counts as a report too.

04Trust Passport

Full passport →
–/100

0/0 automated components pass. An automated score is never a security guarantee.

✓ Verified · first-partyreviewed Sep 20, 2026 · re-verification due Dec 19, 2026
  • publisher identity Publisher status verified; 1 verification(s) on file
  • malicious pattern scan No known malicious-behavior patterns across 5 source file(s) plus listing text
  • capability contract All 0 observed capability reference(s) match the declared manifest
  • agent safety scan No injection patterns in agent-readable content
  • provenance No release signature or provenance attestation
  • behavioral sandbox Not performed in this environment — requires the production isolated runner (docs/sandbox-requirements.md). No untrusted code is ever executed on the application host.

Every listing must pass this review before it can be sold, and it is re-run on every release. Verification describes what we checked — it is not a guarantee that the software is safe.

VersionChannelReleasedNotes
0.1.0stableAug 11, 2026Initial extraction.