Changelog

What’s new in Speech Layer

Every notable change to Speech Layer, grouped by day, newest first. Built straight from the project git history.

128commits
17active days
July 27, 2026latest update

July 27, 2026

1 commit
  • Tell

    Resolve panes on non-active tabs of a workspace

July 24, 2026

2 commits
  • Fix

    Herdr 0.7.5 dropped agent send; inject path now uses agent prompt

  • Docs

    AGENTS.md and wake-words herder-route notes match the new CLI

  • Privacy

    Stop treating bare 10/11-digit runs as phones

  • Privacy

    Drop postal code masking entirely

July 23, 2026

1 commit
  • Fix

    Speech Layer restart now revives a dead email-pi-bridge via email-pi-bridge-ensure (best-effort, cron remains primary supervisor)

July 22, 2026

1 commit
  • Privacy

    Footer and logs count distinct identities, not hits

  • Privacy

    Shield and unshield phone XMPP sticky injects and replies

  • Privacy

    Shared store with email bridge and kill-switch XMPP_PRIVACY

July 20, 2026

3 commits
  • Privacy

    Count shield replacements per message and log them

  • Privacy

    Tell agents that fake tokens are stand-ins to quote as-is

  • Privacy

    Footer replies with what Speech Layer shielded during LLM calls

  • Fix

    Herd residual body verbs ask which pane, never spawn to or two

  • Fix client-site-two bug: body_starter includes to/too/two; herd-default routing for workspace-matched tells; block function-word callsigns.

July 19, 2026

6 commits
  • Say

    Wake poke, CLI fast path, dead-air slimming, hold presynth

  • Tts

    Install committed say/say-queue-daemon (wake.fifo 8ms claim, same-group ordering, recording-hold presynth, 40ms enqueue)

  • Barge

    Hands-free auto-calibration battery + daemon self-barge detector

  • Tts

    Spoken-prep leading-zero trim (PI-000018 -> PI-18); README: wake.fifo/same-group/presynth queue docs

  • Proper-nouns

    Glue 'tilda/tilde slash foo' to ~/foo before flat pairs

  • Privacy

    Mask bare and keyword-anchored phone numbers with NANP validation

  • Privacy

    Mask payment cards, tax ids, and Canadian postal codes with stable fakes

July 18, 2026

3 commits
  • Privacy

    Mask emails and phones to stable short fakes before prompts reach the LLM and restore them on replies

  • Privacy

    Seed names from mail headers and body anchors with separate first and last fakes

  • Email bridge

    Shield injected prompts and unshield replies with a shared locked-down lookup file

  • Voice

    Ask which pane when duplicate labels span workspaces

  • Voice

    Silent deciders sticky then focused herd then unique agent name

  • Phone

    Share the which-pane question and answer across voice and text

  • Voice

    Mute or unmute the default sink with switch volume and goodnight phrases

  • Voice

    Set Pocket voice across a whole workspace or a named pane

  • TTS

    Queue by default, pane-scoped replay ring, and soft barge gating

  • TTS

    Reconcile Pocket daemon pile-ups and durable HF cache on restart

  • Phone

    Keep XMPP channel sticky separate from voice sticky and focus

  • Callsigns

    Allow duplicate pane labels and keep agent names unique

  • Counters

    Stop bare thinking words cutting mid-sentence dictation

July 17, 2026

12 commits
  • Transform

    Drop dead svn commit historical map note

  • TTS

    Speak xmpp as x m p p

  • TTS

    Currency, paths, URLs, emails, dates, emoji in speak-prep

  • STT

    Log respell diffs for training when raw ≠ fixed

  • TTS

    Absorb trailing dots on a.m./p.m. clock forms

  • TTS

    Fix a.m./p.m. trailing period after clock expand

  • TTS

    Speak clock times without colon (14:30, 3pm)

  • TTS

    Space month abbr expansions so Oct.17 reads clean

  • TTS

    Month abbreviations speak as full names

  • STT

    Client-site-class fusions respelled as tell client-site

  • TTS speak seeds

    Degrees, ops, %, #N, units, e.g., cwd

  • TTS

    Speak-prep dict (~ → roughly; digit.digit → point)

  • Fix

    Successful tell no longer dual-dispatches into the focused pane

  • Herdr control

    Mark tell committed before TTS; fire-and-forget say

  • Dictate

    Wall after commit counts handled; refuse tell-shaped fallthrough with voice retry

  • Free-form pi-surf prefers sticky pin over focused eyes

  • Evolve proper-nouns into a respell dictionary (pie/pi, user JSON)

July 16, 2026

1 commit
  • Fix

    Delete pi session runs /delete and confirms Yes

  • Agent inject keeps multi-Enter sleep order for confirms

July 15, 2026

32 commits
  • Eyes/focus on also raises the herdr pi-surf window

  • Fix

    Focus client-site cleaner lands on the cleaner pane

  • Tell body re-runs bare control grammar on target pane

  • Tell body runs cwd/nav control on target pane not chat paste

  • STT togel focus for tell-move-focus toggle

  • Home sticky channel is herdr not mac

  • Voice toggle for tells moving eyes focus

  • Fix show me bare eyes-on grammar

  • Voice eyes on/off for bare workspace and pane focus

  • Fold client-site's / client-site STT into client-site for tell routing

  • Sticky hold checked every tick so focus cannot keep the channel

  • Sticky hold reasserts herdr against focus steal

  • Handoff wait-scrape herdr reply to phone; re-pin sticky + hold

  • Focus sync skips sticky during hold so channel stays herdr

  • Spawn handoff

    SMS herdr reply after wait; re-pin sticky

  • Fix bridge crash mangle on scrap path regex

  • STICKY machine line; instruct create to re-stick new pane

  • Spawn handoff

    Short ensure herdr pane when missing

  • Confirm keyword yes/no never agent-sends the herdr pane

  • Spawn free-form

    Default handoff to herdr pane via agent send

  • Keep rules/LLM rewrite path intact behind spawn-offer-clarify flip

  • Spawn clarify

    Quoted my workspace and label-before-noun patterns

  • Live herd name in free text re-routes offer with held body

  • Phone scrape

    Never TUI dump mid-working; reject chrome junk

  • Tell

    Keep live herd det words like my for inventory peel

  • Spawn offer

    Non-yes/no → rules then Needle/LLM rewrite route only

  • Consent stays keywords; wrong rewrite vectors never invent yes

  • Phone bridge

    Live-offer free-form asks speechlayer clarify path

  • Tell MSG lead

    Stop he eating hello

  • Phone

    Forward speechlayer spawn-offer text to XMPP not echo inbound

  • Tell peel

    Stop to/that hard split; long-comma English stays peel

  • Xmpp-send

    Heal session D-Bus so Gajim remote can ack

  • Herdr

    Silent focus cutover repins sticky without phone spam

  • Docs

    Sticky is channel not eyes address wins then manual focus

  • Docs

    Herdr skill notes label equals agent callsign dual-write

  • Herdr

    Pane rename always dual-writes agent callsign (shim plus control)

  • Herdr

    Background callsign sync heals TUI renames upgrade-proof

  • Voice

    Tell shell pane to launch pi types pi plus enter not prose

  • Voice

    Move working directory force-relocates pi session and resumes

  • Voice

    Keep change working directory as exit-pi shell-cd path

  • Docs

    Folder nav resolves chat basenames and change-cwd phrases

  • Voice

    Match change working directory / cwd / folder to name

  • Voice

    Resolve short basenames under chat before zoxide

  • Voice

    Never agent-send spawn yes/no residual or I don't know garbage

  • Voice

    Wait for TTS and skip free-wake preroll on spawn oneshot

  • Voice

    Peel hey speechlayer wake so spawn yes/no is not tell-to-speechlayer

  • Voice

    Arm one-shot free-wake after spawn offer, cut on yes/no

  • XMPP

    Accept no thanks and wake-style yes/no on spawn offers

  • XMPP

    Typed Note-to-Self runs the same Speech Layer pipeline as voice notes

  • Control

    Peel my/the and trailing pane nouns on tell routes

  • Say

    Caption side-channel for current, last, queue, status.json

  • Say

    Queue daemon updates captions on play, skip, done, and cancel

  • Control

    Tell client-site luke launch pi route works despite STT mangling

  • Control

    Tall/tel aliases of tell and cube-old folds into client-site

  • Control

    Stop hyphen split and cwd-basename false pane on tell peel

  • Control

    Hey and yo aliases for tell with dual-use hey (filler vs route)

  • Control

    Sticky fallthrough on soft free-form, shared with phone target file

  • Control

    Unknown tell target offers spoken yes/no spawn (shared XMPP offer state)

  • Control

    Tell workspace pane message routes via live inventory longest match

  • Control

    Herdr agent inject (XMPP-style) for tell, herder route, and --inject CLI

  • Control

    Everyday make/create/new pane wording maps to ensure pane

  • Dictate

    Wvd_agent_inject helper; pi-surf-term prefers agent send over xdotool

July 13, 2026

7 commits
  • Control

    Soft "speechlayer …" free-form gate with salvage before network and hard walls so blue never hangs

  • Control

    Ensure workspace and ensure pane create-if-missing then focus, including natural hybrid phrasing

  • Control

    Bash wvd_herdr_control wall plus {{SHIFTTAB}} marker wins in dictate scripts

  • CLI/docs

    Needle and herder-route ops, tts barge conf, phone mic and listen-path polish

  • TTS

    Hold say playback while Speech Layer is recording so panes don't talk over the mic

  • TTS

    Soft interrupt skips only the current utterance and keeps the rest of the queue

  • TTS

    Wake and energy barge use skip; shut up still drains the whole queue

  • Track host say queue tools and say-summary extension with Speech Layer

  • Bench

    Void guest shutdown check with default-device arecord proof; image retained

  • Portability

    Void thin-guest L2 claim and burn-in scorecard (runit, on-target whisper, PA mix)

  • Install

    Rewrite DAEMON_HOME pyenv templates and ship alsa-plugins-pulseaudio on void

  • Runit

    Dual-ship service trees with WVD default Pulse device fallback for Void asound

  • Install

    Force-distro/init/DE overrides and optional scrcpy on void and suse

  • Install

    Harden runit enable and systemd unit write for thin containers

  • Bench

    Family dry-run matrix, container smokes, Level-3 residual scrub

  • Docs

    Linux-family-matrix plus void and opensuse package smoke reports

  • Portability

    Cross-host macos svc_status port heuristics and soft LAN path

  • Portability

    Add macos-first-hour checklist with Darwin-safe probes

  • Portability

    Gate first-hour and forced-macos status in adapter selfcheck

  • Docs

    Point macOS install and resumption at first-hour playbook

  • Install

    Multi-family (debian/Mint) path, models seed step, on-target whisper wrappers

  • Install

    KDE/Cinnamon/dconf-cli hotkeys and never transplant cross-distro whisper bins

  • Assets

    Ship wakeword-models seed including hey_speechlayer verifier

  • Docs/Bench

    Mint walkthrough, portability claim calibrated, debian-family QEMU burn-in

July 12, 2026

2 commits
  • Portability

    Add install-macos first-boot helper and optional indicator launchd unit

  • Portability

    Ship skhd and Hammerspoon hotkey examples under system/macos

  • Portability

    Prefer TMPDIR for SL_RUNTIME_DIR on Darwin in env.sh

  • Portability

    Make fetch-deps cmake jobs work without Linux nproc

  • Docs

    Point README and portability at the macOS install path

  • Portability

    Route dictate RECORD_DEVICE through audio_fallback_device for CoreAudio default

  • Portability

    Ship rumps menu-bar indicator skeleton and wire Darwin CLI check or fix

  • Portability

    Add dictate and indicator gates to adapter selfcheck

  • Docs

    Update macOS install resumption and progress for residual scrub

July 11, 2026

4 commits
  • Portability

    A5 pipewire PASS on Fedora QEMU with stream-measure ratio 0.998

  • Install

    Pull alsa-plugins-pulseaudio so Fedora arecord pulse devices work

  • Fix

    Skip indicator check and restart when tray helper is not installed

  • Fix

    Session-heal polls for speechlayer mix and re-bounces daemon if arecord missing

  • Fix

    Keep speechlayer mix ensure after pulse recover when headless has no real mic

  • Docs

    Guest-validate PULSE_SERVER unset recover on Ubuntu QEMU restart

  • Docs

    Record Ubuntu QEMU systemd burn-in scorecard and partial gates

  • Portability

    Unset PULSE_SERVER before pulseaudio start after kill so restart can recover

July 10, 2026

15 commits
  • Fix

    Lower TTS energy cancel so hot speaker mon no longer zeros talk-over residual

  • Fix

    Fire residual barge on soft speaker monitor under high mic instead of hard skip

  • Fix

    Trial barge knobs need two chunks residual 2500 and ratio thr 3.5

  • Dictate

    Require switch model to alias so bare model names stay prose

  • Dictate

    Preflight complete herdr commands in listen mode before the LLM

  • Herdr

    Fuzzy workspace match and richer voice targets for STT near-misses

  • STT

    Accept cubald-style client-site mishears in proper-noun rewrite

  • Training

    Add standalone kapish terminator model trainer

  • Docs

    Freeze Artix Level-3 campaign work at host-gated stop-line

  • Docs

    List single-host burn-in tickets and regression bar for adapters

  • Portability

    Make status fix and session-heal accept pipewire-pulse without a pulseaudio process

  • Portability

    Refuse ha commands on Darwin and route speechlayer test capture through adapters

  • Portability

    Document A4 user units and expand Fedora dnf package list

  • Portability

    Extend adapter-selfcheck for CLI residual gates

  • Portability

    Add Linux adapter selfcheck covering macos force and launchd templates

  • Docs

    Point resumption install and progress at the selfcheck regression bar

  • Portability

    Add launchd installer so Mac templates are a real writer not just docs sed

  • Portability

    Scaffold Windows inject HTTP shim and WSL2 platform overrides after W0

  • Docs

    Point macos install and progress at launchd installer and Option C door

  • Portability

    Add stream measure script with ratio and cadence gates for A5 and W0

  • Docs

    Record Artix Pulse golden numbers for pipewire and WSLg comparison

  • Docs

    Spell out WSLg W0 operator procedure without claiming a pass yet

  • Portability

    Route macos beep pid check and speaker mon through adapters

  • Portability

    Teach speechlayer CLI Darwin-safe status restart and session-heal paths

  • Portability

    Skip the indicator cleanly when rumps is not installed

  • Docs

    Add macOS resumption door for real-Mac burn-in next

  • Docs

    Mark Option A A2 and A3 complete and fill INSTALL systemd install pointers

  • Docs

    Document OpenRC versus systemd sudoers as mutually exclusive

  • Docs

    Expand systemd Level 2 slices A1 to A6 and link them from INSTALL

  • Portability

    Route speechlayer managed service control through SL_SVC without OpenRC-only copy

  • Portability

    Write svc-backend on systemd install and sketch Fedora packages

  • Portability

    Draft user unit and systemctl sudoers examples off by default

  • Docs

    Spell out systemd Level 2 burn-in path unit gaps and first boot checklist

  • Portability

    Scaffold macOS adapters for capture inject notify svc and paths

  • Portability

    Add raw PCM capture helper that keeps the recording loop shape

  • Portability

    Ship untested launchd templates and macOS install TCC notes

  • Portability

    Opt-in systemd verbs via SL_SVC without auto-detecting init

  • Docs

    Record Option B decision readiness table and half-contract review

  • Docs

    Campaign brief for OS backends orchestrator after Phase 4 product close

  • Voice

    Stop soft mon from free-firing ratio barge mid long readouts without killing real talk-over

  • Voice

    Fix tts-barge set clamps that capped spk_k below real bleed and ratio thr at three

  • Status

    Count only real python daemon processes so supervise and grep noise stop false multi-daemon warnings

  • Voice

    Free-wake idle gap so amber can show between turns without killing barge or wake

  • Voice

    Seed free-wake recordings from the always-on PCM pre-roll so first words are not clipped

  • Docs

    Mark Phase 4 executed, platform readiness table, listen free-wake idle and pre-roll notes

July 9, 2026

15 commits
  • Voice

    Stop free-wake from rearming while TTS still plays without killing barge or wake

  • Voice

    Blank free-wake WAV during spoken acks so switching is not reheard as a new command

  • Voice

    Drop command-shaped listen acks and herdr switch TTS plus short-window herdr dedupe

  • Voice

    Ship always-on listen mode with CLI, rearm, intent LLM and plan executor

  • Voice

    Show an amber listening state on the corner indicator while mode is armed

  • STT

    Fold known client-site mishears on every dictate herdr and phone path before routing

  • Docs

    Document listen-mode harness files enter exit phrases and half-contract rules

  • Docs

    Mark the OS-adapter split finished end-to-end so the plan matches the tree

  • Portability

    Put every desktop notification under the single app name speechlayer so nothing collides with random voice daemons

  • Voice

    Lock TTS energy-barge knobs so loud talk-over and hey speechlayer can interrupt without clipping clean playback

  • Voice

    Age barge grace from first audio, not process start, so synthesize lag cannot burn the window

  • Voice

    Keep a softer wake threshold even when energy barge is off so drowned speech still reaches hey speechlayer

  • Voice

    Drop bare cancel as a cancel phrase so random prose no longer kills a recording

  • Voice

    Prefer okay-go and kapish spelling variants for the mid-recording instant cut

  • Portability

    Build the wake-word mic capture command through the OS adapter so the recording loop stays the same on every platform

  • Portability

    Record and play audio through the OS adapter so capture tools can change without rewriting the scripts

  • Portability

    Restart managed services through the OS adapter so Linux is not hard-wired into the CLI

  • Voice

    Reclaim dead recording locks so a crashed capture cannot block the next wake forever

  • Voice

    Let loud speech interrupt TTS playback, with knobs you can change without restarting

  • Voice

    Treat Whisper's clipped 'her D' as 'herd d' so herd switching still works

  • Voice

    Harden the keystroke-marker walker so unknown markers are dropped, not typed forever

  • Voice

    Map full 'new session' phrases to /new after slash commands settle

  • Portability

    Route every keystroke and window-focus call through the OS adapter so typing works the same on every platform

  • Portability

    Preserve per-site xdotool flags including flag-less Escape and --delay 8 type

  • Voice

    Revert bare 'go to <name>'; folder-noun required again (cd stays short form)

  • Voice

    Accept bare 'go to <name>' (≤3 tokens) when not a herd/pane command

  • Voice

    Harden folder resolve for whisper typos (client-site ≈ client-site) and TLD-ish tokens

  • Voice

    Drop legacy project-as-herd entirely - project is filesystem-only now

  • Docs

    Herds-and-folders.md voice cheat sheet (switch herd / folder nav / move session / resume pi)

July 8, 2026

12 commits
  • Voice

    Rebrand herdr workspaces as 'herd' (heard/workspace aliases), freeing 'project' for folder nav

  • Voice

    Plain folder nav inside pi now exits pi then cds; only 'move session to X' uses pi /cd relocate

  • Voice

    Add 'resume pi' -> pi -c

  • Voice

    Add folder-navigation intent (go to folder / cd / go up|home|back) to wvd-herdr-control, zoxide-resolved, shell cd vs pi /cd

  • Portability

    Send desktop notifications through the OS adapter so non-Linux backends can plug in

  • Docs

    Note that notification app-names should be unified after the port, since the current ones are generic enough to clash with other apps

  • Docs

    Record how the Linux dispatch layer was actually built, so the design matches the code

  • Portability

    Add the per-OS dispatch layer with Linux implementations built in, ready for scripts to adopt

  • Voice

    Add new-pane and pause keystroke macros so spoken herdr commands can open panes and let slash commands settle before submitting

  • Portability

    Route all runtime state files through a single configurable directory instead of hardcoding /tmp

  • Docs

    Inventory every OS-specific call site in the voice stack, grouped by adapter

  • Docs

    Design the OS-adapter split (audio, keystrokes, notifications, services) with a step-by-step migration plan

  • Docs

    Link the new portability design into the existing plan so the next phase is ready to start

  • Docs

    Note that MATE hotkeys run the dconf action field not command, so a stale action still errors even when command looks right

  • Docs

    Add scroll-in chat examples and modernize speechlayer landing page capabilities and privacy messaging

  • Docs

    Add charming non-technical speechlayer landing page

July 7, 2026

11 commits
  • Docs

    Restructure speechlayer landing page; feature herdr voice control and TTS reply playback

  • Docs

    Add plain-text ASCII-art landing page explaining speechlayer

  • Fix

    Systemd StartLimitIntervalSec/Burst moved to [Unit] section (were silently ignored in [Service])

  • Fix

    Debian/Ubuntu pkgs list drops bogus libnotify (aborted apt txn), adds python3-venv/pip + build-essential/cmake/git for whisper.cpp build

  • Fix

    Venv installs use --no-deps so pip-freeze closures don't pull 3GB of nvidia CUDA wheels via misaki

  • Fix

    Recreate broken venv lacking pip (failed earlier run left python3 but no pip)

  • Fix

    Wake-word models missing is a warning not a verify failure (user-trained artifacts, not in repo)

  • Install

    Validated full install.sh systemd burn-in on Ubuntu 24.04 VM (all 4 units active, whisper.cpp built, transcription working)

  • Phase 3c

    Level-2/3 scrub - de-hardcode user mac, dual-ship systemd units

  • Portability.md

    Phase 3b fully live - init.d copied, compat shims removed, full smoke matrix green

  • Phase 3b

    Root rename ~/scripts+~/.speechlayer -> ~/speechlayer with core/pi/net/training/media/lib subdirs

  • Herdr grammar

    Accept 'panel' as spoken alias for pane

  • Phase 3a portability: SL_HOME parameterization

  • Phase 2 portability: install.sh + fetch-deps.sh

  • Phase 1 portability: system snapshots, requirements, models, INSTALL.md

  • Initial messy commit: ~/scripts + ~/.speechlayer as-is, pre-restructure