Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/jasonkneen/openclicky/llms.txt

Use this file to discover all available pages before exploring further.

OpenClicky reads all secrets locally — there is no cloud key sync, no Google login requirement, and no hosted credential service. You supply your API keys through the in-app Settings panel, environment variables, or a local secrets file.

Supported API Keys

KeyProviderPurpose
ANTHROPIC_API_KEYAnthropicClaude voice responses (required)
ELEVENLABS_API_KEYElevenLabsNatural text-to-speech (optional)
ELEVENLABS_VOICE_IDElevenLabsSpecific voice for TTS (optional)
OPENAI_API_KEYOpenAICodex/Agent Mode (optional)
CARTESIA_API_KEYCartesiaAlternative TTS provider (optional)
CARTESIA_VOICE_IDCartesiaSpecific Cartesia voice (optional)
ASSEMBLYAI_API_KEYAssemblyAIReal-time speech transcription (optional)
DEEPGRAM_API_KEYDeepgramReal-time speech transcription and TTS (optional)
GOG_KEYRING_PASSWORDgogcliGoogle Workspace keyring decryption (optional)
The recommended approach is a local secrets file at ~/.config/openclicky/secrets.env:
mkdir -p ~/.config/openclicky
chmod 700 ~/.config/openclicky
$EDITOR ~/.config/openclicky/secrets.env
chmod 600 ~/.config/openclicky/secrets.env
Populate the file with your keys:
~/.config/openclicky/secrets.env
ANTHROPIC_API_KEY=sk-ant-...
ELEVENLABS_API_KEY=your_elevenlabs_key
ELEVENLABS_VOICE_ID=your_voice_id
OPENAI_API_KEY=sk-...
CARTESIA_API_KEY=your_cartesia_key
Use chmod 600 on the secrets file and chmod 700 on the directory. The repo .gitignore excludes .env and .env.local, but keep your secrets file outside the project directory entirely.

Alternative: Custom File Path

If you store secrets elsewhere, point OpenClicky to the file using the OPENCLICKY_SECRETS_FILE environment variable:
export OPENCLICKY_SECRETS_FILE=/path/to/your/secrets.env

Alternative: Launch Environment

You can also pass keys as launch environment variables. Set them in your shell before launching OpenClicky from Xcode, or configure them in Xcode’s scheme editor (Product → Scheme → Edit Scheme → Arguments → Environment Variables).

In-App Settings

All keys can also be entered directly in the OpenClicky Settings panel:
  1. Click the OpenClicky menu-bar icon
  2. Open Settings (gear icon or keyboard shortcut Cmd+,)
  3. Enter your keys in the API Keys section
Keys entered in-app are stored securely in the macOS Keychain under the service com.jkneen.openclicky.secrets.

Secret Resolution Order

OpenClicky checks each source in order and uses the first value it finds:
  1. In-app Settings fields (macOS Keychain-backed)
  2. Launch environment variables
  3. ~/.config/openclicky/secrets.env
  4. The path set in OPENCLICKY_SECRETS_FILE

Transcription Providers

OpenClicky supports multiple speech-to-text backends. Select your preferred provider in Settings:
ProviderKey RequiredNotes
Apple SpeechNoneOn-device, private, no key needed
OpenAI WhisperOPENAI_API_KEYHigh accuracy, cloud-based
AssemblyAIASSEMBLYAI_API_KEYReal-time streaming
DeepgramDEEPGRAM_API_KEYReal-time streaming

TTS Providers

OpenClicky supports multiple text-to-speech backends:
ProviderKey RequiredNotes
OpenAI RealtimeOPENAI_API_KEYDefault provider; low-latency streaming
ElevenLabsELEVENLABS_API_KEY + ELEVENLABS_VOICE_IDNatural, expressive voices
CartesiaCARTESIA_API_KEYFast, low-latency TTS
DeepgramDEEPGRAM_API_KEYAura 2 voices; reuses the STT key
Microsoft EdgeNoneFree Edge online voices; no API key required
macOS AVSpeechSynthesizerNoneSystem TTS fallback

Security Notes

Never commit API keys to the repository. The repo .gitignore excludes common env file names, but only a secrets file stored outside the project directory is fully safe. OpenClicky does not read repo-local .env files.
API keys entered through in-app Settings are stored in the macOS Keychain, isolated to the com.jkneen.openclicky.secrets service, and accessible only after the device is first unlocked (kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly). Keys are never written back to UserDefaults in plaintext once they have been migrated to the Keychain.

Build docs developers (and LLMs) love