Skip to main content

WhatsApp notifications + human-in-the-loop for AI agents and scripts — curl to WhatsApp in 60s, no app, no dashboard.

Project description

pingwa (client)

PyPI Python License: MIT

WhatsApp notifications + human-in-the-loop for AI agents and scripts — from your terminal or an MCP client. curl → WhatsApp in 60s, no app, no dashboard.

This is the open-source (MIT) pingwa client: a CLI, a tiny HTTP client, and an MCP server. It talks to a pingwa backend (the hosted service at https://pingwa.dev, or your own). The backend is separate and private; this client is not.

Install & use

No install needed with uv:

export PINGWA_KEY=pw_your_key          # get one: send "join" on WhatsApp to the service number
uvx pingwa send "build finished ✅"     # notify your own phone
echo "deploy done" | uvx pingwa send -  # from stdin
uvx pingwa ask "Deploy to prod?" --button yes --button no   # wait for a reply from your phone
uvx pingwa replies                      # pull messages your phone sent back (out-of-band steering)
uvx pingwa me                           # plan / quota / reply-window
uvx pingwa keys                         # list active API keys (up to 10 named keys per number)
uvx pingwa keys revoke ci               # revoke one by name (or reply 'revoke ci' on WhatsApp)
uvx pingwa upgrade                      # get a Stripe link to go Pro (no password needed)
uvx pingwa send "x" --json              # raw JSON response

AI agents: don't ask your human to copy-paste a key — drive the registration yourself (POST /v1/registrations; full recipe in llms.txt). The human only taps one WhatsApp link; the key is claimed by you and never travels through the chat. Works for existing accounts too — it mints an additional named key.

Exit codes: 0 ok · 2 missing key · 3 quota exceeded · 1 other. Override the backend with PINGWA_BASE_URL or --base-url.

Webhooks

Prefer PUSH over polling replies? Register HTTPS endpoints and pingwa POSTs every inbound WhatsApp message to them:

uvx pingwa webhooks                                   # list your webhooks
uvx pingwa webhooks add https://your-host/pingwa-hook # returns a signing SECRET, shown ONCE
uvx pingwa webhooks rm https://your-host/pingwa-hook  # by id, or by exact url

add prints a whsec_... secret once — store it now; it never appears again. Each delivery carries an X-Pingwa-Signature: sha256=<hex> header (an HMAC-SHA256 of the raw body under that secret) — verify it and reject anything that fails. Full verification recipe and payload shape: llms.txt. Up to 5 active webhooks per account; to rotate a secret, rm then add again.

MCP server

Same tools on stdio and remote: notify(text), ask(text, buttons?, timeout?), check_replies(since?, wait?), check_status(), upgrade().

Local (stdio) — for Claude Desktop / Claude Code:

{
  "mcpServers": {
    "pingwa": {
      "command": "uvx",
      "args": ["pingwa", "mcp"],
      "env": { "PINGWA_KEY": "pw_your_key" }
    }
  }
}

Remote (Streamable HTTP, no install):

{
  "mcpServers": {
    "pingwa": {
      "url": "https://pingwa.dev/mcp",
      "headers": { "Authorization": "Bearer pw_your_key" }
    }
  }
}

Every error carries an action hint, so an agent knows what to do next.

What it sends

Only your message text and your key, to the pingwa backend you point it at — over HTTPS. Nothing else. The recipient is always your own phone (there is no "to" field). See the service's /privacy.

License

MIT — see the LICENSE in the repository root. Covers this client package only.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pingwa-0.4.0.tar.gz (13.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pingwa-0.4.0-py3-none-any.whl (18.3 kB view details)

Uploaded Python 3

File details

Details for the file pingwa-0.4.0.tar.gz.

File metadata

  • Download URL: pingwa-0.4.0.tar.gz
  • Upload date:
  • Size: 13.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pingwa-0.4.0.tar.gz
Algorithm Hash digest
SHA256 c82c1f12637c90810004ff80af2fe4050492ab06a234373068cb371ebd4a062f
MD5 b28865c97b42e13bf1f7cca0943c0766
BLAKE2b-256 b34882b2f73714e1048966ba15aeae8fa61b662fc531f58b928dc5d94ad256a6

See more details on using hashes here.

Provenance

The following attestation bundles were made for pingwa-0.4.0.tar.gz:

Publisher: publish.yml on grzgrzgrz3/pingwa-client

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pingwa-0.4.0-py3-none-any.whl.

File metadata

  • Download URL: pingwa-0.4.0-py3-none-any.whl
  • Upload date:
  • Size: 18.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pingwa-0.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 94dbe51a98215b918b2d73df728ce766fa8ee60b7bf6d5af15453a9c15c56c0f
MD5 dd418d93bf20ebf12c72981ca243438d
BLAKE2b-256 216100dc48de8b1336e84b87ae5f91e109366dffcbed074a54d7383af0c536f1

See more details on using hashes here.

Provenance

The following attestation bundles were made for pingwa-0.4.0-py3-none-any.whl:

Publisher: publish.yml on grzgrzgrz3/pingwa-client

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page