๐Ÿฆ

A carrier between
agents and you.

Codex, Claude Code, and other agents send questions and status updates to your phone mid-task. You reply from anywhere. Work doesn't stop waiting for you to come back to the laptop.

โฑ About 10 minutes to set up end to end
๐Ÿค–Agent
instance
โ†’
๐ŸฆPidgin
server
โ†’
๐Ÿ“ฑYour
phone
โ†’
๐Ÿ’ฌYour
reply
โ†’
๐Ÿค–Agent
continues
1
Server
Connect to the hosted Pidgin server
2
Apps
Install iOS & macOS native clients
3
Connect apps
Magic link login + push registration
4
CLI agents
Codex script use + Claude Code plugin
5
Claude Desktop
Wire env vars for the desktop app
6
MCP & browsers
ChatGPT, Codex, Perplexity, Claude Design-style browser use
7
Verify
Send a test push and confirm it lands
โ„น๏ธ
This guide covers the hosted Pidgin service at pidginroost.com. Running your own server is a separate path โ€” that documentation lives at openpidgin.com.
1

Server

Pidgin's hosted web UI runs at pidginroost.com, and the hosted API runs at api.pidginroost.com. There's nothing to deploy on your side.

Confirm the server is healthy

curl -sf https://api.pidginroost.com/health | jq .
# โ†’ {"ok":true,"data":{"status":"healthy"}}

If that returns ok: true, you're set โ€” continue to Apps.

โ„น๏ธ
Your API key is provisioned automatically when you sign in to the macOS app and is stored in the login keychain for local scripts. You can still export PIDGIN_API_KEY manually when running on Linux, CI, or another machine. Pidgin is members-only โ€” there's no public sign-up.
๐Ÿ’ก
Running your own server? Self-hosting โ€” the Cloudflare Worker, wrangler, D1 / KV / R2, and APNs keys โ€” is documented separately at openpidgin.com.
2

iOS & macOS Apps

The native apps receive push notifications, display messages, and let you reply. iOS and macOS share a single XcodeGen project at clients/apple.

โš ๏ธ
TestFlight or Xcode install. Use TestFlight when your Apple ID is assigned to the internal tester group; otherwise install from Xcode directly.

Install via Xcode

You'll need Xcode 16+ and an Apple Developer account with a connected device.

Generate the project

cd pidgin/clients/apple   # from your repo clone
brew install xcodegen   # if needed
xcodegen generate
open Pidgin.xcodeproj

Run on iPhone

Run the macOS app

๐Ÿ’ก
Dev builds and push: APNs push only works reliably with a production provisioning profile or TestFlight. Dev-signed builds receive push on physical devices only if the aps-environment: development entitlement is set โ€” and the server must send to the sandbox APNs endpoint for those builds.
3

Connect the Apps to Your Server

Each app logs in with a magic link, then registers its APNs device token so the server knows where to push.

iOS app

macOS app

Confirm device registration

Use your Pidgin API key. On macOS, the CLI script can read the key that the app stored in the login keychain; otherwise export it manually.

export PIDGIN_API_KEY="your-api-key"
curl -s https://api.pidginroost.com/api/registry \
  -H "Authorization: Bearer $PIDGIN_API_KEY" | jq '.data[]'

You should see your device listed with a recent registered_at timestamp.

4

CLI Agents

Codex and shell agents use the checked-in script directly. Claude Code can also install the plugin commands. Either path can send push notifications mid-task and poll for your reply before continuing.

Step 1 โ€” Check local credentials

The script defaults to the hosted API. On macOS it reads the key saved by the signed-in Pidgin app; on other systems, set the key manually:

export PIDGIN_URL="https://api.pidginroost.com"
export PIDGIN_API_KEY="your-api-key-here"

bash ~/ashcode/pidgin/scripts/pidgin.sh check
โ„น๏ธ
An explicit PIDGIN_API_KEY always wins. If it is not set, the macOS script checks the login keychain service com.pidginroost.pidgin, account pidgin_sk.

Step 2 โ€” Use it from Codex or shell agents

Codex and other terminal agents can call the script directly from this repo:

bash ~/ashcode/pidgin/scripts/pidgin.sh send \
  --type message \
  --title "Codex is connected" \
  --body "Pidgin is available from this Codex workflow." \
  --project "codex"

For durable Codex workflows, make the script path and any required env vars available to the shell or task runner that launches Codex.

Step 3 โ€” Optional Claude Code plugin

In a Claude Code session, add the marketplace and then install the plugin โ€” adding a marketplace alone doesn't install anything:

/plugin marketplace add ashrocket/pidgin
/plugin install pidgin@pidgin

Or, if you've cloned the repo locally:

/plugin marketplace add /path/to/your/pidgin
/plugin install pidgin@pidgin

The argument is <plugin>@<marketplace> โ€” both are named pidgin here. Trust the plugin when prompted. This registers the following commands:

/pidgin [message]
Send a notification. Claude infers content from context if no message is given.
/pidgin-setup
Guided setup โ€” checks env vars, dependencies, server health, sends a test push.
/pidgin-check
Quick diagnostics โ€” reports status of each dependency and the server connection.
/interact
Open the session to your phone โ€” poll for commands you send from Pidgin and execute them with Claude-in-Chrome.

Step 4 โ€” Verify Claude Code

/pidgin-setup

This checks env vars, curl/jq, server connectivity, and sends a test push. Watch for the notification โ€” if it arrives, you're done.

Natural language triggers

The Pidgin skill activates automatically when you say:

5

Claude Desktop

โš ๏ธ
Claude Desktop doesn't support Claude Code plugins. The /pidgin skills and hooks that power the Claude Code integration aren't available in the desktop app.

You can still reach Pidgin from Claude Desktop by wiring env vars into your MCP server config. Claude Desktop doesn't inherit ~/.zshrc, so add them explicitly in ~/Library/Application Support/Claude/claude_desktop_config.json:

{
  "mcpServers": {
    "your-existing-server": {
      "command": "...",
      "args": [...],
      "env": {
        "PIDGIN_URL": "https://api.pidginroost.com",
        "PIDGIN_API_KEY": "your-api-key-here"
      }
    }
  }
}

For document workflows, Claude Desktop can also use the remote MCP endpoint at https://pidginroost.com/mcp if your MCP client supports remote OAuth. The current MCP tools cover document list, search, retrieval, publishing, and share-link generation. Push notifications still use the Claude Code plugin or the REST script.

๐Ÿ’ก
Practical reality: Claude Desktop tasks tend to be shorter and more interactive, so missing push notifications matters less. The Claude Code integration is the high-value path.
6

MCP & Browser Clients

Pidgin exposes a remote MCP endpoint for document workflows and a browser UI for clients that do not have a native Pidgin plugin.

Remote MCP

https://pidginroost.com/mcp

The Worker publishes OAuth metadata for remote clients:

https://pidginroost.com/.well-known/oauth-protected-resource/mcp
https://pidginroost.com/.well-known/oauth-authorization-server

Browser fallback

Any browser-capable agent can use the web UI:

https://pidginroost.com
https://pidginroost.com/onboarding
https://pidginroost.com/setup

Use the browser path for login, setup, reading documents, generating share links, and checking the inbox when a tool client cannot call the REST API or MCP endpoint directly.

7

Verify Everything Works

Run this end-to-end check from a terminal. It should produce a push on your phone within a few seconds.

export PIDGIN_URL="${PIDGIN_URL:-https://api.pidginroost.com}"

curl -X POST "$PIDGIN_URL/api/messages" \
  -H "Authorization: Bearer $PIDGIN_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "question",
    "title": "Pidgin setup complete",
    "body": "Reply with ok to confirm the connection works.",
    "priority": "normal",
    "instance": {
      "model": "manual-test",
      "session_id": "setup-check",
      "project": "pidgin-onboarding",
      "source": "curl"
    }
  }'
๐Ÿฆ Pidgin now
Pidgin setup complete
Reply with 'ok' to confirm the connection works.
Dismiss
Reply

Common issues

SymptomLikely causeFix
No push, curl returned ok Device not registered, or APNs dev vs prod mismatch Check /api/registry. If no devices, log into the app again.
curl returns 401 PIDGIN_API_KEY not set or wrong Run bash ~/ashcode/pidgin/scripts/pidgin.sh check. On macOS, sign into the app; otherwise export PIDGIN_API_KEY.
curl connection refused PIDGIN_URL wrong or worker not deployed Try curl -sf $PIDGIN_URL/health. Check Cloudflare Worker dashboard.
Magic link doesn't open app iOS universal links are finicky right after install โ€” the AASA must have been fetched, and links opened from inside some apps bypass it Paste the link into Safari directly, or long-press it and choose "Open in Pidgin." The AASA appID should match the app's bundle ID (com.pidginroost.pidgin.ios).
/pidgin-setup can't find script Plugin not installed Reinstall: /plugin install pidgin@pidgin (run /plugin marketplace add ashrocket/pidgin first if needed)

!

Known Issues

๐Ÿ›
Remote MCP is document-first. The current MCP endpoint exposes document list, search, retrieval, publishing, and share tools. Phone push notifications and reply polling still use the Claude Code plugin or the REST script.