Install the native Codex companion or the TypeScript speech library
SpeakEasy has two installation paths. Most Codex users should install the signed native app. Developers who only need TTS can install the package.
Requirements:
Paste this bounded task into Codex Desktop:
Install the latest signed SpeakEasy release on this Mac. Read https://speakeasy.arach.dev/agent.md and follow Path 3. Do not build from source or bypass Gatekeeper. Tell me which version you installed and which human-only permissions or setup steps remain.
Codex downloads and inspects the latest release installer. The installer verifies the
published checksum, Gatekeeper acceptance, Developer ID team, bundle identity,
and exact app version before replacing /Applications/SpeakEasy.app. It then
opens Settings → Deck.
The packaged app does not require Bun, Node, Xcode, a terminal workflow, or a SpeakEasy checkout.
Prefer to install manually? Download the latest signed DMG, drag SpeakEasy to Applications, and open it. Open Settings → Deck to check the runtime and Codex connection. Approve microphone access when asked if you want to dictate.
Device setup takes a few extra steps:
The certificate enables trusted local HTTPS, which the browser needs for microphone access. It is only needed for this device path. The browser/PWA is the supported device path; the native iPad shell remains a developer preview.
See Listening mode for routing and privacy details.
Requirements:
# project dependency
bun add @arach/speakeasy
# or install the CLI globally with your preferred package manager
pnpm add --global @arach/speakeasy
import { say, SpeakEasy } from '@arach/speakeasy';
await say('Hello, world!');
await say('Hello from OpenAI', 'openai');
const speaker = new SpeakEasy({
provider: 'openai',
openaiVoice: 'nova',
rate: 180,
cache: { enabled: true },
apiKeys: { openai: process.env.OPENAI_API_KEY },
});
await speaker.speak('The task is complete.');
speakeasy "Hello, world!" --provider system
speakeasy "Build completed" --provider openai --voice nova --cache
speakeasy --doctor
export OPENAI_API_KEY="sk-..."
export ELEVENLABS_API_KEY="..."
export GROQ_API_KEY="gsk_..."
export GEMINI_API_KEY="AIza..."
Or configure providers once in ~/.config/speakeasy/settings.json. Caching is
automatic for API providers when credentials are present.