Turn your iPhone into an AI-powered assistant. Text it questions, send voice notes, trade on prediction markets — all through iMessage with real blue bubbles.
What you get: A personal AI agent that lives in your iMessage contacts. Ask it anything, send voice memos for transcription, or trade on Kalshi prediction markets — all from your phone.
https://github.com/user-attachments/assets/placeholder-loom-video
- Node.js 20+ — nodejs.org
- A Linq API token — linqapp.com
- An Anthropic API key — console.anthropic.com
Optional (for specific features):
- Kalshi API credentials — for prediction market trading (kalshi.com)
- OpenAI API key — for voice note transcription via Whisper (platform.openai.com)
npm install -g openclawopenclaw initThis creates ~/.openclaw/ with a default config.
Create ~/.openclaw/.env:
# Required
ANTHROPIC_API_KEY=sk-ant-api03-your-key-here
# Optional: Voice note transcription
OPENAI_API_KEY=sk-proj-your-key-here
# Optional: Kalshi prediction market trading
KALSHI_API_KEY_ID=your-kalshi-api-key-uuid
KALSHI_PRIVATE_KEY_PATH=/Users/yourname/.openclaw/kalshi_private_key.pemopenclaw plugins install github:linq-team/openclaw-linq-pluginopenclaw channels add --channel linqThe wizard will walk you through:
- Entering your Linq API token (or using the
LINQ_API_TOKENenv var) - Setting your Linq phone number
- Configuring the webhook endpoint
Tip: You can also set
LINQ_API_TOKENin your.envfile and the wizard will detect it automatically.
npx clawhub install kalshi-tradingopenclaw gateway runYou should see:
Gateway listening on http://localhost:3100
Health: OK, Linq: ok
Open iMessage on your iPhone and text the Linq phone number. You'll see real blue bubbles — it's native iMessage, not SMS.
Try:
- "What's the weather in NYC?"
- "Summarize the latest news about AI"
- Send a voice memo: "What are the trending markets on Kalshi?"
Trade on Kalshi directly through iMessage.
-
Get API credentials from Kalshi:
- Log in → Settings → API → Generate API Key
- Download the private key PEM file
-
Save your private key:
mv ~/Downloads/kalshi_private_key.pem ~/.openclaw/kalshi_private_key.pem chmod 600 ~/.openclaw/kalshi_private_key.pem
-
Add env vars to
~/.openclaw/.env:KALSHI_API_KEY_ID=your-api-key-uuid KALSHI_PRIVATE_KEY_PATH=/Users/yourname/.openclaw/kalshi_private_key.pem
-
Verify:
node ~/openclaw/skills/kalshi/scripts/kalshi-cli.mjs balance
Text your agent:
- "What's trending on Kalshi?"
- "Search Kalshi for bitcoin markets"
- "Check my Kalshi portfolio"
- "Buy 10 YES contracts on KXGREENLAND-29 at 31 cents" (it will confirm before executing)
The agent always confirms before placing any trade.
Send voice memos via iMessage and the agent will transcribe and act on them.
-
Get an OpenAI API key from platform.openai.com
-
Add to
~/.openclaw/.env:OPENAI_API_KEY=sk-proj-your-key-here
-
Add to
~/.openclaw/openclaw.json:{ "tools": { "media": { "audio": { "enabled": true, "models": [{ "provider": "openai" }] } } } } -
Restart the gateway and send a voice note via iMessage.
Here's a complete ~/.openclaw/openclaw.json with all features enabled:
{
"agents": {
"defaults": {
"model": {
"primary": "anthropic/claude-sonnet-4-5-20250929"
},
"workspace": "~/.openclaw/workspace"
}
},
"channels": {
"linq": {
"enabled": true,
"apiToken": "your-linq-api-token",
"fromPhone": "+1XXXXXXXXXX",
"webhookUrl": "http://localhost:3100/linq-webhook",
"webhookPath": "/linq-webhook",
"webhookHost": "0.0.0.0",
"dmPolicy": "open"
}
},
"tools": {
"media": {
"audio": {
"enabled": true,
"models": [{ "provider": "openai" }]
}
}
},
"gateway": {
"mode": "local",
"bind": "loopback",
"auth": {
"mode": "token",
"token": "generate-a-random-uuid"
}
},
"plugins": {
"entries": {
"linq": {
"enabled": true
}
}
}
}Gateway won't start — "token not configured"
- Add
gateway.auth.tokento youropenclaw.json(any UUID works)
Agent doesn't respond to iMessages
- Check
npx openclaw gateway status— Linq should show "ok" - Verify your
LINQ_API_TOKENis correct - Make sure
webhookUrlmatches where the gateway is listening
Voice notes aren't transcribed
- Verify
OPENAI_API_KEYis set in.env - Check
tools.media.audio.enabledistruein config
Kalshi commands don't work
- Run
node skills/kalshi/scripts/kalshi-cli.mjs balanceto test directly - Verify both
KALSHI_API_KEY_IDandKALSHI_PRIVATE_KEY_PATHare set - Check that the PEM file exists and is readable
iPhone (iMessage)
│
▼
Linq API (cloud relay)
│
▼ webhook
OpenClaw Gateway (localhost:3100)
│
├─► Claude (Anthropic API) — reasoning
├─► Whisper (OpenAI API) — voice transcription
├─► Kalshi CLI — prediction market trading
└─► Other skills (weather, GitHub, etc.)
│
▼ REST
Linq API → iMessage → iPhone
No Mac Mini. No Apple ID. No SSH. Just an API key and a phone number.