What’s new in Speech Layer
Every notable change to Speech Layer, grouped by day, newest first. Built straight from the project git history.
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 commitsEyes/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