{"_id":"@1presence/speech","_rev":"4-2507b307ca38fe9be5f3d6e6ecbc46e9","name":"@1presence/speech","dist-tags":{"latest":"1.3.0"},"versions":{"1.0.0":{"name":"@1presence/speech","version":"1.0.0","keywords":["speech-to-text","dictation","voice","macos","accessibility","web-speech-api","free","terminal","productivity"],"license":"MIT","_id":"@1presence/speech@1.0.0","maintainers":[{"name":"jonkafton","email":"jonkafton@gmail.com"}],"homepage":"https://1presence.com","bugs":{"url":"https://github.com/jonathankata/presence/issues"},"bin":{"1presence-speech":"server.mjs"},"dist":{"shasum":"381c0c27615f6a72343d0aa28c0ee60f1ec3a620","tarball":"https://registry.npmjs.org/@1presence/speech/-/speech-1.0.0.tgz","fileCount":5,"integrity":"sha512-Zyandc3oU2QhTM16wxTb30g7I5HkPVCzXVjeFyksGE1D09YP/ryA5U7GF2CqrI0obQKSYnbjXox+1Lo6Z9JYsA==","signatures":[{"sig":"MEUCIFHnjYzag9ZP3r4yXKv+NHenMp8VOKLhlRHGbA7HA1TmAiEA6aumJFiZ5kAxa+kyQ6W9qPO6ZqcDrpOEEGoJpdiSsvU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":41747},"type":"module","engines":{"node":">=18"},"gitHead":"a7f595edbbee490465a3f70078b48fe1e334746f","scripts":{"start":"node server.mjs"},"_npmUser":{"name":"jonkafton","email":"jonkafton@gmail.com"},"repository":{"url":"git+https://github.com/jonathankata/presence.git","type":"git"},"_npmVersion":"10.8.2","description":"Free speech-to-text for Mac — dictate into any app using your browser's built-in voice recognition, no subscription required","directories":{},"_nodeVersion":"20.20.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/speech_1.0.0_1779619227209_0.9049460800649325","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@1presence/speech","version":"1.1.0","keywords":["speech-to-text","dictation","voice","macos","accessibility","web-speech-api","free","terminal","productivity"],"license":"MIT","_id":"@1presence/speech@1.1.0","maintainers":[{"name":"jonkafton","email":"jonkafton@gmail.com"}],"homepage":"https://1presence.com","bugs":{"url":"https://github.com/jonathankata/presence/issues"},"bin":{"speech":"server.mjs","1presence-speech":"server.mjs"},"dist":{"shasum":"1a06b2f1064978941cbeeb8e8b8d61b8f580d404","tarball":"https://registry.npmjs.org/@1presence/speech/-/speech-1.1.0.tgz","fileCount":5,"integrity":"sha512-JEKcxIjOFBM1a2xE4MSp1dxiK72eWzAZ7egFV6T0Nurrwzjla56Z4E9nrNTiaOER4FV+3Darg6gPCVgortbvSA==","signatures":[{"sig":"MEUCIQD9aMiptozkFSQZANL3tnpvar/4cMOKq0E9CA9bbWXHJgIgCFhfMhSkS4a8n3GbSPQsLkR/p4GAQzmkMrB6dF9m0zc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":44909},"type":"module","engines":{"node":">=18"},"gitHead":"87ea354b99b3d9d0924a0f436c15b87e6a6be79c","scripts":{"start":"node server.mjs"},"_npmUser":{"name":"jonkafton","email":"jonkafton@gmail.com"},"repository":{"url":"git+https://github.com/jonathankata/presence.git","type":"git"},"_npmVersion":"10.8.2","description":"Free speech-to-text for Mac — dictate into any app using your browser's built-in voice recognition, no subscription required","directories":{},"_nodeVersion":"20.20.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/speech_1.1.0_1779648687679_0.09267929983134882","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@1presence/speech","version":"1.2.0","keywords":["speech-to-text","dictation","voice","macos","accessibility","web-speech-api","free","terminal","productivity"],"license":"MIT","_id":"@1presence/speech@1.2.0","maintainers":[{"name":"jonkafton","email":"jonkafton@gmail.com"}],"homepage":"https://1presence.com","bugs":{"url":"https://github.com/jonathankata/presence/issues"},"bin":{"speech":"server.mjs","1presence-speech":"server.mjs"},"dist":{"shasum":"a395888d5c78a240153535157266ec9d1352ecea","tarball":"https://registry.npmjs.org/@1presence/speech/-/speech-1.2.0.tgz","fileCount":5,"integrity":"sha512-3gC0G/h5wVxOu/i9/GcnDcEdsRT0mE4kkRedsGnqi7ZBnbXoLbqRwGS3qWcjy2GfJ55xRZp2pgPPIxcbCvvK9w==","signatures":[{"sig":"MEQCID+elslW6ZdXM6A1T8Ommx9VzfBjngYATPycJwDJg6HwAiAVjLEGF7Z4NfQEhYP76iPp1W/298I0BTPedQn/X3t41Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":45430},"type":"module","engines":{"node":">=18"},"gitHead":"a1370a0049a8ddef3eb5a6af6d080a0212eb1256","scripts":{"start":"node server.mjs"},"_npmUser":{"name":"jonkafton","email":"jonkafton@gmail.com"},"repository":{"url":"git+https://github.com/jonathankata/presence.git","type":"git"},"_npmVersion":"10.8.2","description":"Free speech-to-text for Mac — dictate into any app using your browser's built-in voice recognition, no subscription required","directories":{},"_nodeVersion":"20.20.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/speech_1.2.0_1779653713697_0.997784492903447","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"@1presence/speech","version":"1.3.0","description":"Free speech-to-text for Mac — dictate into any app using your browser's built-in voice recognition, no subscription required","type":"module","bin":{"1presence-speech":"server.mjs","speech":"server.mjs"},"scripts":{"start":"node server.mjs"},"engines":{"node":">=18"},"keywords":["speech-to-text","dictation","voice","macos","accessibility","web-speech-api","free","terminal","productivity"],"license":"MIT","homepage":"https://1presence.com","publishConfig":{"access":"public"},"_id":"@1presence/speech@1.3.0","gitHead":"0f839a51f24ae99f450242ff6dda77bf91e650aa","_nodeVersion":"20.20.2","_npmVersion":"10.8.2","dist":{"integrity":"sha512-SdJNgMjNA5Yu1dp2m4PP9kXG84Jy7nxQuAmS4Yx/mgdtV+pwULnZqrIr9l1fMLD4gMlX8tZwBA5DLK7kF94FIQ==","shasum":"47a5333ceacc4f81c2d6d30dd4ae9d0ad5c8367d","tarball":"https://registry.npmjs.org/@1presence/speech/-/speech-1.3.0.tgz","fileCount":5,"unpackedSize":45334,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDsUb+pue7nX15giNfdJKgD4UuOoXIt2Wa3bCKZIMV5vgIgQRoQWMbYs44W1Pvpa9XuQJvjZ4tCPDRT0n2q2fSKlTU="}]},"_npmUser":{"name":"jonkafton","email":"jonkafton@gmail.com"},"directories":{},"maintainers":[{"name":"jonkafton","email":"jonkafton@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/speech_1.3.0_1779707123214_0.07064702618948315"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-24T10:40:27.045Z","modified":"2026-05-25T11:05:23.495Z","1.0.0":"2026-05-24T10:40:27.379Z","1.1.0":"2026-05-24T18:51:27.856Z","1.2.0":"2026-05-24T20:15:13.890Z","1.3.0":"2026-05-25T11:05:23.368Z"},"license":"MIT","homepage":"https://1presence.com","keywords":["speech-to-text","dictation","voice","macos","accessibility","web-speech-api","free","terminal","productivity"],"description":"Free speech-to-text for Mac — dictate into any app using your browser's built-in voice recognition, no subscription required","maintainers":[{"name":"jonkafton","email":"jonkafton@gmail.com"}],"readme":"# @1presence/speech\n\n**Free, private speech-to-text for Mac. No cloud. No subscription. No monthly fee.**\n\nDictate 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.\n\nOne command to start:\n\n```bash\nnpx @1presence/speech\n```\n\nYour browser opens automatically. Start speaking.\n\n---\n\n## Why this exists\n\nmacOS 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.\n\nIt 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.\n\n---\n\n## Requirements\n\n- Node.js 18 or later\n- Chrome or Edge (Web Speech API has the widest support there)\n- macOS (keystroke injection uses AppleScript; the browser UI works on any OS, but the send-to-app feature is Mac-only)\n\n---\n\n## Usage\n\n### One-off, no install needed\n\n```bash\nnpx @1presence/speech\n```\n\nThe 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.\n\n### Installed globally\n\n```bash\nnpm install -g @1presence/speech\n1presence-speech\n```\n\n### In a project\n\n```bash\nnpm install @1presence/speech\nnpx 1presence-speech\n```\n\n---\n\n## Sending text to apps\n\nThree delivery modes — pick from the dropdown:\n\n| Mode | How it works | Best for |\n|------|-------------|----------|\n| **Focused app typed keystrokes** | AppleScript `keystroke` — types character by character into the focused window | Most apps, most of the time |\n| **Frontmost app via paste** | Copies to clipboard and sends Cmd+V | Apps that handle paste better than keystroke |\n| **iTerm active session** | iTerm's native `write text` API | iTerm users |\n\n**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.\n\n---\n\n## macOS permissions\n\nThe first time you send text, macOS will block it. Here is how to fix that in under a minute:\n\n1. Open **System Settings > Privacy & Security > Accessibility**\n2. Find the app you used to run the command — Terminal, iTerm, Warp, VS Code, Cursor — and enable it\n3. If it is not listed, click **+** and add it from `/Applications`\n4. Fully quit and reopen that app, then run `npx @1presence/speech` again\n\nIf macOS still blocks input after enabling the app, reset the Accessibility permissions database:\n\n```bash\ntccutil reset Accessibility\n```\n\nThen repeat the steps above.\n\nFor **iTerm mode**, also open **System Settings > Privacy & Security > Automation** and allow your terminal to control iTerm.\n\n---\n\n## Options\n\n| Variable | Default | Description |\n|---|---|---|\n| `PORT` | `8787` | Port the local server listens on |\n| `HOST` | `127.0.0.1` | Host to bind — loopback only by default |\n\n---\n\n## How it works\n\nA 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.\n\nLive 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.\n\n---\n\n## Part of 1Presence\n\nThis tool is part of [1Presence](https://1presence.com) — 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.\n\nSpeech 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](https://1presence.com) is worth a look.\n\n---\n\n## Troubleshooting\n\n**\"Unsupported\" error** — Open the page in Chrome or Edge. Safari and Firefox do not support the Web Speech API.\n\n**Error 1002** — macOS blocked keystroke injection. Grant Accessibility permission to the terminal app running the server, fully quit and reopen it, then try again.\n\n**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.\n\n**iTerm does not appear in Automation settings** — Click **Test in 3s** to trigger the macOS permission prompt, then check **System Settings > Privacy & Security > Automation**.\n\n**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.\n","readmeFilename":"README.md"}