@1presence/speech
v1.3.0
Published
Free speech-to-text for Mac — dictate into any app using your browser's built-in voice recognition, no subscription required
Maintainers
Readme
@1presence/speech
Free, private speech-to-text for Mac. No cloud. No subscription. No monthly fee.
Dictate into any app on your Mac — terminal, editor, notes, chat, anything — using the speech recognition that is already built into Chrome or Edge. Your voice is processed entirely on your device; nothing leaves your machine.
One command to start:
npx @1presence/speechYour browser opens automatically. Start speaking.
Why this exists
macOS has excellent voice input, but routing speech into a terminal or a specific app is harder than it should be. This tool fills that gap: a clean browser UI where you dictate, review your words, and send them — live, as you speak — into wherever your cursor is sitting.
It works with your browser's built-in Web Speech API (Chrome and Edge on Mac have the best recognition quality). No API keys. No account. No sending audio to a third party. Just open it and talk.
Requirements
- Node.js 18 or later
- Chrome or Edge (Web Speech API has the widest support there)
- macOS (keystroke injection uses AppleScript; the browser UI works on any OS, but the send-to-app feature is Mac-only)
Usage
One-off, no install needed
npx @1presence/speechThe browser opens at http://127.0.0.1:8787 automatically. Allow microphone access when Chrome asks. Start speaking — words appear in the transcript as you go.
Installed globally
npm install -g @1presence/speech
1presence-speechIn a project
npm install @1presence/speech
npx 1presence-speechSending text to apps
Three delivery modes — pick from the dropdown:
| Mode | How it works | Best for |
|------|-------------|----------|
| Focused app typed keystrokes | AppleScript keystroke — types character by character into the focused window | Most apps, most of the time |
| Frontmost app via paste | Copies to clipboard and sends Cmd+V | Apps that handle paste better than keystroke |
| iTerm active session | iTerm's native write text API | iTerm users |
Click "Send to app" to send the full transcript at any time. Or leave Live word mode enabled (the default) to stream words into the focused app as you speak — no need to click between sentences.
macOS permissions
The first time you send text, macOS will block it. Here is how to fix that in under a minute:
- Open System Settings > Privacy & Security > Accessibility
- Find the app you used to run the command — Terminal, iTerm, Warp, VS Code, Cursor — and enable it
- If it is not listed, click + and add it from
/Applications - Fully quit and reopen that app, then run
npx @1presence/speechagain
If macOS still blocks input after enabling the app, reset the Accessibility permissions database:
tccutil reset AccessibilityThen repeat the steps above.
For iTerm mode, also open System Settings > Privacy & Security > Automation and allow your terminal to control iTerm.
Options
| Variable | Default | Description |
|---|---|---|
| PORT | 8787 | Port the local server listens on |
| HOST | 127.0.0.1 | Host to bind — loopback only by default |
How it works
A small Node.js HTTP server (zero dependencies) serves the browser UI and exposes a POST /paste endpoint. The browser page uses the Web Speech API for recognition — Chrome's built-in engine, running entirely on device. When words are ready, the page posts them to the local server, which uses AppleScript (osascript) to deliver them to the focused app. Nothing hits the internet.
Live word mode sends words as they are recognised, before Chrome finalises the transcript, so they appear in your app immediately. A phrase-ordering gate in the browser ensures words always arrive in the correct sequence even when Chrome is processing multiple speech segments in parallel.
Part of 1Presence
This tool is part of 1Presence — an AI agent that lives in your pocket. It reads your notes and email, remembers your conversations across sessions, connects to the tools you already use, and works from your phone, tablet, or any browser without needing an app install.
Speech Terminal is one piece of the productivity toolkit we built for ourselves and decided to share. If you want an AI that truly knows your context — not just the last few messages — 1Presence is worth a look.
Troubleshooting
"Unsupported" error — Open the page in Chrome or Edge. Safari and Firefox do not support the Web Speech API.
Error 1002 — macOS blocked keystroke injection. Grant Accessibility permission to the terminal app running the server, fully quit and reopen it, then try again.
Speech stops after a few seconds — Chrome may have revoked microphone access. Click the lock icon in the address bar and set Microphone to Allow.
iTerm does not appear in Automation settings — Click Test in 3s to trigger the macOS permission prompt, then check System Settings > Privacy & Security > Automation.
Words arrive out of order or duplicated — Make sure you are on the latest version: npx @1presence/speech@latest. Version 1.0.0 fixed a phrase-ordering bug that could scramble live-word output during fast continuous speech.
