Preface¶
The philosophy of DSH is that “everything is a plugin.” In terminal agents, two operational costs are often underestimated: converting a command into a message when stepping away from the keyboard, and avoiding the need to read through large output word-by-word while a task is running. dsh-voice is a voice bundle for DSH, covering speech-to-text, text-to-speech, and walk-away reading. It defaults to a local-first approach; audio files are saved locally, with no automatic recording or playback.
What is it¶
Jesse-njx/dsh-voice is maintained by Jesse-njx, licensed under MIT, verified version 0.1.0, and requires Node.js >=20. It is a DSH bundle providing transcribe, speak, and /voice capabilities, and renders voice-note cards in the Web client.
Core Features¶
Speech-to-Text¶
transcribe supports two types of sources:
{ file: <path> }: Transcribe an existing audio file.{ record: { seconds? } }: Transcribe audio recorded from the microphone.
The transcription result is inserted as a user message, displayed by the Web client as a voice-note card.
Text-to-Speech¶
speak accepts text, synthesizes and plays it in a background task, and immediately returns { jobId, audioRef }. It is suitable for walk-away narration during long builds or headless runs, such as synthesizing a result into a status announcement.
Auto-Read Replies¶
readReplies and /voice provide a session-level toggle for auto-reading replies, which is disabled by default. It can be toggled in real-time using /voice.
Local-First¶
Audio files are regular files under ~/.dsh/voice/, and session logs only save references and transcriptions. The default values are as follows:
stt.backendautomatically selects fromwhisper-localtomacosfor offline processing.tts.backendissayreadRepliesisfalseaudioDiris~/.dsh/voice
Backends¶
STT (Speech-to-Text) backends support whisper-local, openai, macos, and fake.
TTS (Text-to-Speech) backends support say, piper, edge-tts, and fake.
Cloud backends are only available when explicitly configured and will not be selected automatically.
Working with dsh-crosstalk¶
When dsh-crosstalk is installed, transcribe({ source, to: <peer> }) can send the transcribe result as a peer message to another local session.
Installation and Usage¶
First, ensure your local machine meets Node.js >=20, then execute the installation command:
dsh plugin --profile web add @dsh-voice/bundle
After installation, transcribe, speak, and /voice are provided by this bundle.
Typical Usage¶
Using /voice¶
The following commands are used to check status, toggle auto-reading, or directly read a line of text:
/voice status
/voice on
/voice off
/voice speak build finished, 0 failures
Calling transcribe¶
The following calls demonstrate file transcription and microphone recording transcription:
transcribe({ source: { file: "/path/to/note.m4a" } })
transcribe({ source: { record: { seconds: 5 } } })
source is either: an existing audio file path, or microphone recording parameters.
Calling speak¶
The following call demonstrates reading a text:
speak({ text: "build finished, 0 failures" })
It returns { jobId, audioRef }.
Sending to Another Local Session¶
When dsh-crosstalk is installed, you can call it like this:
transcribe({ source: { file: "/path/to/note.m4a" }, to: "<peer>" })
Use Cases and Considerations¶
Suitable for users who need to leave voice commands within a DSH session, want replies to be readable, or receive status announcements after long-running tasks.
Note the following limitations:
- Plugins run with the permissions of the current
dshprocess; ensure you check the source code and license before installing. - Audio does not leave the local machine by default; it will only be sent to the cloud if you explicitly configure the following cloud backends:
stt.backend: openai
tts.backend: edge-tts
- The
openaibackend reads credentials viaOPENAI_API_KEY. - Recording and playback only occur on explicit tool calls;
readRepliesis disabled by default. v0.1non-goals include real-time streaming dialogue, outbound synthesized voice, group WeChat context audio, speaker separation, music/sound effects, raw audio into session logs, and wake words/continuous listening.
Conclusion¶
Following these steps, dsh-voice can turn voice input into user messages, convert replies into playable local audio, and maintain local storage by default.
GitHub: https://github.com/Jesse-njx/dsh-voice
Community Directory: A specific URL is not provided in the verified materials.